Help
RSS
API
Feed
Maltego
Contact
Domain > blog.martijnarts.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-06-12
172.67.133.111
(
ClassC
)
2025-12-11
146.75.43.7
(
ClassC
)
Port 443
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 18319Server: openrestyContent-Type: text/html; charsetutf-8Status: 200 OKcache-control: public, max-age0etag: W/478f-wL4Em48WUW0DurlkaHtc2HH6S/kFastly-Restarts: 1Via: 1.1 varnish, 1.1 varnishAccept-Ranges: bytesAge: 112721Date: Thu, 11 Dec 2025 13:48:17 GMTX-Served-By: cache-ams2100098-AMS, cache-bfi-kbfi7400111-BFIX-Cache: HIT, MISSX-Cache-Hits: 5, 0X-Timer: S1765460898.535491,VS0,VE143Vary: Cookie, Accept-Encodingx-request-id: ed2013fd-1023-4ff3-87fd-f427e95045cdGhost-Fastly: true;productionAlt-Svc: clear !DOCTYPE html>html langen>head> meta charsetutf-8> meta nameviewport contentwidthdevice-width, initial-scale1> title>Martijn Arts/title> link relstylesheet hrefhttps://blog.martijnarts.com/assets/built/screen.css?vfd865036f1> meta namedescription contentBuilding something new with Rust and AI.> link relicon hrefhttps://blog.martijnarts.com/content/images/size/w256h256/2023/05/his-transp-square.png typeimage/png> link relcanonical hrefhttps://blog.martijnarts.com/> meta namereferrer contentno-referrer-when-downgrade> link relnext hrefhttps://blog.martijnarts.com/page/2/> meta propertyog:site_name contentMartijn Arts> meta propertyog:type contentwebsite> meta propertyog:title contentMartijn Arts> meta propertyog:description contentBuilding something new with Rust and AI.> meta propertyog:url contenthttps://blog.martijnarts.com/> meta propertyog:image contenthttps://blog.martijnarts.com/content/images/size/w1200/2023/04/hs-cropped-1.png> meta nametwitter:card contentsummary_large_image> meta nametwitter:title contentMartijn Arts> meta nametwitter:description contentBuilding something new with Rust and AI.> meta nametwitter:url contenthttps://blog.martijnarts.com/> meta nametwitter:image contenthttps://blog.martijnarts.com/content/images/size/w1200/2023/04/hs-cropped.png> meta nametwitter:site content@martijnawts> meta propertyog:image:width content1200> meta propertyog:image:height content830> script typeapplication/ld+json>{ @context: https://schema.org, @type: WebSite, publisher: { @type: Organization, name: Martijn Arts, url: https://blog.martijnarts.com/, logo: { @type: ImageObject, url: https://blog.martijnarts.com/content/images/size/w256h256/2023/05/his-transp-square.png, width: 60, height: 60 } }, url: https://blog.martijnarts.com/, name: Martijn Arts, mainEntityOfPage: https://blog.martijnarts.com/, description: Building something new with Rust and AI.} /script> meta namegenerator contentGhost 6.10> link relalternate typeapplication/rss+xml titleMartijn Arts hrefhttps://blog.martijnarts.com/rss/> script defer srchttps://cdn.jsdelivr.net/ghost/portal@~2.56/umd/portal.min.js data-i18ntrue data-ghosthttps://blog.martijnarts.com/ data-key2b27cc36eec7d15e427234a7a5 data-apihttps://martijn-arts.ghost.io/ghost/api/content/ data-localeen crossoriginanonymous>/script>style idgh-members-styles>.gh-post-upgrade-cta-content,.gh-post-upgrade-cta { display: flex; flex-direction: column; align-items: center; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif; text-align: center; width: 100%; color: #ffffff; font-size: 16px;}.gh-post-upgrade-cta-content { border-radius: 8px; padding: 40px 4vw;}.gh-post-upgrade-cta h2 { color: #ffffff; font-size: 28px; letter-spacing: -0.2px; margin: 0; padding: 0;}.gh-post-upgrade-cta p { margin: 20px 0 0; padding: 0;}.gh-post-upgrade-cta small { font-size: 16px; letter-spacing: -0.2px;}.gh-post-upgrade-cta a { color: #ffffff; cursor: pointer; font-weight: 500; box-shadow: none; text-decoration: underline;}.gh-post-upgrade-cta a:hover { color: #ffffff; opacity: 0.8; box-shadow: none; text-decoration: underline;}.gh-post-upgrade-cta a.gh-btn { display: block; background: #ffffff; text-decoration: none; margin: 28px 0 0; padding: 8px 18px; border-radius: 4px; font-size: 16px; font-weight: 600;}.gh-post-upgrade-cta a.gh-btn:hover { opacity: 0.92;}/style> script defer srchttps://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js data-key2b27cc36eec7d15e427234a7a5 data-styleshttps://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css data-sodo-searchhttps://martijn-arts.ghost.io/ data-localeen crossoriginanonymous>/script> link hrefhttps://blog.martijnarts.com/webmentions/receive/ relwebmention> script defer src/public/cards.min.js?vfd865036f1>/script>style>:root {--ghost-accent-color: #3e8bf7;}/style> link relstylesheet typetext/css href/public/cards.min.css?vfd865036f1> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/themes/prism-tomorrow.min.css integritysha512-vswe+cgvic/XBoF1OcM/TeJ2FW0OofqAVdCZiEYkd6dwGXthvkSFWOoGGJgS2CW70VK5dQM5Oh+7ne47s74VTg crossoriginanonymous referrerpolicyno-referrer />/head>body classhome-template is-head-left-logo>div classsite> header idgh-head classgh-head gh-outer> div classgh-head-inner> div classgh-head-brand> div classgh-head-brand-wrapper> a classgh-head-logo hrefhttps://blog.martijnarts.com> Martijn Arts /a> /div> button classgh-search gh-icon-btn aria-labelSearch this site data-ghost-search>svg xmlnshttp://www.w3.org/2000/svg fillnone viewBox0 0 24 24 strokecurrentColor stroke-width2 width20 height20>path stroke-linecapround stroke-linejoinround dM21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z>/path>/svg>/button> button classgh-burger aria-labelToggle menu>/button> /div> nav classgh-head-menu> ul classnav> li classnav-home nav-current>a hrefhttps://blog.martijnarts.com/>Home/a>/li> li classnav-about>a hrefhttps://martijnarts.com>About/a>/li> li classnav-working-on>a hrefhttps://aonyx.ai/>Working on.../a>/li>/ul> /nav> div classgh-head-actions> button classgh-search gh-icon-btn aria-labelSearch this site data-ghost-search>svg xmlnshttp://www.w3.org/2000/svg fillnone viewBox0 0 24 24 strokecurrentColor stroke-width2 width20 height20>path stroke-linecapround stroke-linejoinround dM21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z>/path>/svg>/button> /div> /div> /header> div classsite-content> div classcontent-area>main classsite-main> div classpost-feed> article classpost no-image no-image> div classgh-canvas> header classpost-header> h2 classpost-title> a classpost-title-link href/claude-the-frontend-dev/>Claude the frontend dev/a> /h2> div classpost-meta> span classpost-meta-item post-meta-date> time datetime2025-11-28>28 Nov 2025/time> /span> span classpost-meta-item post-meta-length>3 min read/span> /div> /header> div classpost-excerpt> Working on Holt Kit, I need to write a lot of Leptos components. A lot.Holt Kit is intended to be an overly complete collection of elements, which need to be maintainable and /div> /div>/article> article classpost no-image no-image> div classgh-canvas> header classpost-header> h2 classpost-title> a classpost-title-link href/typescript-lets-you-spread-an-array-into-an-object/>Typescript lets you spread an array into an object/a> /h2> div classpost-meta> span classpost-meta-item post-meta-date> time datetime2024-10-21>21 Oct 2024/time> /span> span classpost-meta-item post-meta-length>1 min read/span> /div> /header> div classpost-excerpt> I ran into an instance of this Typescript bug recently. Basically, Typescript lets you do this without compiler errors:const arr 1, 2, 3;const x: { a: number } { a: { ...arr } };x.a.map( /div> /div>/article> article classpost no-image no-image> div classgh-canvas> header classpost-header> h2 classpost-title> a classpost-title-link href/hosting-quickly-3/>Hosting quickly 3 - A Neon database/a> /h2> div classpost-meta> span classpost-meta-item post-meta-date> time datetime2024-02-21>21 Feb 2024/time> /span> span classpost-meta-item post-meta-length>5 min read/span> /div> /header> div classpost-excerpt> This is the third (or third-and-a-halfth) article in a series called "Hosting quickly". I want to launch Rust apps quickly and often, and I want to have stable, common infrastructure for /div> /div>/article> article classpost no-image no-image> div classgh-canvas> header classpost-header> h2 classpost-title> a classpost-title-link href/hosting-quickly-2-5-discovering-and-calling-a-backend-from-dioxus/>Hosting quickly 2.5 - Discovering and calling a backend from Dioxus/a> /h2> div classpost-meta> span classpost-meta-item post-meta-date> time datetime2023-12-17>17 Dec 2023/time> /span> span classpost-meta-item post-meta-length>3 min read/span> /div> /header> div classpost-excerpt> * Hosting quickly 1 - Setting up Terraform, Github, and 1Password * Hosting quickly 2 - Dioxus to the web on Fly.ioWe should make the backend serve some API that we can hit /div> /div>/article> article classpost no-image no-image> div classgh-canvas> header classpost-header> h2 classpost-title> a classpost-title-link href/hosting-quickly-2-dioxus-to-the-web-on-fly-io/>Hosting quickly 2 - Dioxus to the web on Fly.io/a> /h2> div classpost-meta> span classpost-meta-item post-meta-date> time datetime2023-12-06>06 Dec 2023/time> /span> span classpost-meta-item post-meta-length>4 min read/span> /div> /header> div classpost-excerpt> This is the second article in a series called "Hosting quickly". I want to launch Rust apps quickly and often, and I want to have stable, common infrastructure for all of /div> /div>/article> /div> div classgh-outer>nav classpagination> div classpagination-left> /div> span classpage-number hidden-xs hidden-sm>Page 1 of 3/span> div classpagination-right> a href/page/2/>Next svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 32 32 width16 height16 fillcurrentColor> path dM5.333 14.667v2.667h16l-7.333 7.333 1.893 1.893 10.56-10.56-10.56-10.56-1.893 1.893 7.333 7.333h-16z>/path>/svg>/a> /div>/nav>/div>/main>/div> /div> footer classgh-foot no-menu gh-outer> div classgh-foot-inner gh-inner> div classgh-copyright> Martijn Arts © 2025 /div> div classgh-powered-by> a hrefhttps://ghost.org/ target_blank relnoopener>Powered by Ghost/a> /div> /div> /footer>/div>script srchttps://code.jquery.com/jquery-3.5.1.min.js integritysha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0 crossoriginanonymous>/script>script srchttps://blog.martijnarts.com/assets/built/main.min.js?vfd865036f1>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/components/prism-core.min.js integritysha512-9khQRAUBYEJDCDVP2yw3LRUQvjJ0Pjx0EShmaQjcHa6AXiOv6qHQu9lCAIR8O+/D8FtaCoJ2c0Tf9Xo7hYH01Q crossoriginanonymous referrerpolicyno-referrer>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/plugins/autoloader/prism-autoloader.min.js integritysha512-fTl/qcO1VgvKtOMApX2PdZzkziyr2stM65GYPLGuYMnuMm1z2JLJG6XVU7C/mR+E7xBUqCivykuhlzfqxXBXbg crossoriginanonymous referrerpolicyno-referrer>/script>script>class Discussions { constructor(repo, renderer) { this.repo repo; this.renderer renderer; this.discussions ; } async maybeHandle() { if (!this.renderer.canRender()) { return; } this.renderer.showLoading(); this.discussions await this.repo.get(this.networks); if (this.discussions) { this.renderer.showDiscussions(this.discussions); } else { this.renderer.showError(); } }}class discussionsRepo { constructor(discussionsUrl, networks) { this.apiKey c3uJXcWt22fyRiIPnMluE8__r7ISVHKqA4PI-vkRJ4w; this.fetchUrl `https://discu.eu/api/v0/discussions/url/${encodeURIComponent(discussionsUrl)}`; this.networks networks; } async get() { const allowed_ids Object.keys(this.networks); const response await fetch(this.fetchUrl, { credentials: omit, mode: cors, headers: { Accept: application/json, Authorization: `Bearer ${this.apiKey}` } }); if (response.ok) { const json await response.json(); return json.map((discussion) > allowed_ids.includes(discussion.platform) ? { ...discussion, title: this.networksdiscussion.platform } : null) .filter((discussion) > discussion ! null); } else { return null; } }}class templateRenderer { constructor(url, submitTitle) { this.url url; this.submitTitle submitTitle; this.commentTemplate document.getElementById(comment-line).content; this.loadingTemplate document.getElementById(comment-loading).content; this.emptyTemplate document.getElementById(comment-empty).content; this.errorTemplate document.getElementById(comment-error).content; this.commentNode document.getElementById(comment); } showLoading() { this.commentNode.appendChild(this.loadingTemplate.cloneNode(true)); } showError() { this.commentNode.querySelector(.loading).remove(); this.commentNode.appendChild(this.errorTemplate.cloneNode(true)); } showDiscussions(discussions) { this.commentNode.querySelector(.loading).remove(); if (discussions.length 0) { const newNode this.emptyTemplate.cloneNode(true); newNode.querySelector(a).href `https://discu.eu/?q${this.url}&submit_title${this.submitTitle}`; this.commentNode.appendChild(newNode); } else { discussions.map((discussion) > { let commentTemplate this.commentTemplate.cloneNode(true); commentTemplate.querySelector(a).href discussion.discussion_url; let title discussion.subreddit ? `${discussion.title} r/${discussion.subreddit}` : discussion.title; commentTemplate.querySelector(.platform).innerText title; commentTemplate.querySelector(.count).innerText discussion.comment_count; this.commentNode.querySelector(ul).appendChild(commentTemplate); }); } } canRender() { return this.commentNode ! null; }};window.addEventListener(load, function(_event) { const element document.getElementsByClassName(single-content)0; const footerTpl document.getElementById(insert-in-post-footer).content; element.appendChild(footerTpl.cloneNode(true)); const discussionsUrl window.location.href; const title document.querySelector(.single-title).innerText; const networks { r: Reddit, h: Hacker News, l: Lobste.rs, t: Tilde, }; const repo new discussionsRepo(discussionsUrl, networks); const renderer new templateRenderer(discussionsUrl, title); new Discussions(repo, renderer).maybeHandle();});/script>template idcomment-line> li classcomment-line> a href>span classplatform>/span> (span classcount>/span> comments)/a> /li>/template>template idcomment-loading> p classloading> Looking up discussions on social networks... /p>/template>template idcomment-empty> p classempty> No discussions on social media found, a>try starting one/a>! /p>/template>template idcomment-error> p classis-error> An error occurred while loading the discussions. /p>/template>template idinsert-in-post-footer> div classkg-card kg-callout-card kg-callout-card-grey> div idcomment classkg-callout-text>/div> /div> p> a hrefhttps://liberapay.com/martijn/donate>img styledisplay: inline altDonate using Liberapay srchttps://img.shields.io/badge/-donate-%23F6C915?styleflat&logoliberapay&labelColorwhite>/a> a hrefhttps://mastodon.nl/@martijnarts>img styledisplay: inline altMastodon Follow srchttps://img.shields.io/badge/-martijnarts-%236364FF?styleflat&logomastodon&labelColorwhite>/a> a hrefhttps://x.com/martijnawts>img styledisplay: inline altX/Twitter Follow srchttps://img.shields.io/badge/-martijnawts-gray?styleflat&logox&labelColorblack>/a> a hrefhttps://github.com/martijnarts>img styledisplay: inline altGithub srchttps://img.shields.io/badge/-martijnarts-gray?styleflat&logogithub&labelColorblack>/a> /p>/template>/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
]