
{"id":1975,"date":"2026-06-21T10:00:00","date_gmt":"2026-06-21T08:00:00","guid":{"rendered":"https:\/\/www.pcjv.de\/?p=1975"},"modified":"2026-07-24T17:19:15","modified_gmt":"2026-07-24T15:19:15","slug":"web-apps-the-pascal-way","status":"publish","type":"post","link":"https:\/\/www.pcjv.de\/?p=1975","title":{"rendered":"Web apps, the Pascal way"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">At some point the browser became too capable to ignore. My path to the web was an unusual one though: instead of leaving Pascal behind, I compiled it \u2014 via Smart Mobile Studio and DWScript \u2014 straight into JavaScript. The results are on the <a href=\"\/?page_id=1791\">Web-Apps page<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Cards<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cards<\/strong> started with an honest admission: I enjoy relaxing with solitaire games, but after a while I always end up thinking about the logic underneath and how to automate solving them. So I wrote my own \u2014 an HTML5 web app inspired by gamedesign.jp&#8217;s &#8220;Card&#8221; game, playable online, with an Android version in the Play Store. The randomness keeps it honest; the solver keeps it interesting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lollipop<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lollipop<\/strong> is my favorite kind of software: invented together with my son. We came up with a paint-by-numbers game where the numbers can only be obtained by doing calculations \u2014 and it quietly boosted his addition, subtraction and multiplication skills into the thousands range. Creating the puzzles by hand cost real time, so naturally I wrote a generator that produces an SVG &#8220;Lollipop&#8221; for any desired word.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ports and bridges<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Minesweeper game logic from the mini-games era was ported to JavaScript with Smart Mobile Studio, and a lot of supporting work happened around this bridge between worlds: <a href=\"https:\/\/github.com\/CWBudde\/Pascal-HTML5-Canvas\" target=\"_blank\" rel=\"noopener\">a Pascal implementation of the HTML5 canvas<\/a>, <a href=\"https:\/\/github.com\/CWBudde\/ts2pas\" target=\"_blank\" rel=\"noopener\">ts2pas<\/a> for converting TypeScript definition files into Object Pascal headers, and JavaScript ports of my SOFA and HDF file libraries (<a href=\"https:\/\/github.com\/CWBudde\/WebSofa\" target=\"_blank\" rel=\"noopener\">WebSofa<\/a>, <a href=\"https:\/\/github.com\/CWBudde\/WebHdf\" target=\"_blank\" rel=\"noopener\">WebHdf<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Looking back, this era was the hinge: the moment web technology entered my toolbox and never left. The frontends I build today are TypeScript and React \u2014 but they stand on a bridge built from Pascal.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At some point the browser became too capable to ignore. My path to the web was an unusual one though: instead of leaving Pascal behind, I compiled it \u2014 via Smart Mobile Studio and DWScript \u2014 straight into JavaScript. The results are on the Web-Apps page.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42,2],"tags":[],"class_list":["post-1975","post","type-post","status-publish","format-standard","hentry","category-retrospective","category-website"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Web apps, the Pascal way - Christian&#039;s private site<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pcjv.de\/?p=1975\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Christian\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975\"},\"author\":{\"name\":\"Christian\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#\\\/schema\\\/person\\\/79b654f8c2fb5bf9405ccc4cb1c11880\"},\"headline\":\"Web apps, the Pascal way\",\"datePublished\":\"2026-06-21T08:00:00+00:00\",\"dateModified\":\"2026-07-24T15:19:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975\"},\"wordCount\":280,\"articleSection\":[\"Retrospective\",\"Website\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975\",\"url\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975\",\"name\":\"Web apps, the Pascal way - Christian&#039;s private site\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#website\"},\"datePublished\":\"2026-06-21T08:00:00+00:00\",\"dateModified\":\"2026-07-24T15:19:15+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#\\\/schema\\\/person\\\/79b654f8c2fb5bf9405ccc4cb1c11880\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pcjv.de\\\/?p=1975\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1975#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pcjv.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web apps, the Pascal way\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#website\",\"url\":\"https:\\\/\\\/www.pcjv.de\\\/\",\"name\":\"Christian&#039;s private site\",\"description\":\"Private site of Christian-W. Budde\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.pcjv.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#\\\/schema\\\/person\\\/79b654f8c2fb5bf9405ccc4cb1c11880\",\"name\":\"Christian\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g\",\"caption\":\"Christian\"},\"sameAs\":[\"http:\\\/\\\/www.savioursofsoul.de\\\/Christian\"],\"url\":\"https:\\\/\\\/www.pcjv.de\\\/?author=3\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Web apps, the Pascal way - Christian&#039;s private site","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pcjv.de\/?p=1975","twitter_misc":{"Written by":"Christian","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pcjv.de\/?p=1975#article","isPartOf":{"@id":"https:\/\/www.pcjv.de\/?p=1975"},"author":{"name":"Christian","@id":"https:\/\/www.pcjv.de\/#\/schema\/person\/79b654f8c2fb5bf9405ccc4cb1c11880"},"headline":"Web apps, the Pascal way","datePublished":"2026-06-21T08:00:00+00:00","dateModified":"2026-07-24T15:19:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pcjv.de\/?p=1975"},"wordCount":280,"articleSection":["Retrospective","Website"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.pcjv.de\/?p=1975","url":"https:\/\/www.pcjv.de\/?p=1975","name":"Web apps, the Pascal way - Christian&#039;s private site","isPartOf":{"@id":"https:\/\/www.pcjv.de\/#website"},"datePublished":"2026-06-21T08:00:00+00:00","dateModified":"2026-07-24T15:19:15+00:00","author":{"@id":"https:\/\/www.pcjv.de\/#\/schema\/person\/79b654f8c2fb5bf9405ccc4cb1c11880"},"breadcrumb":{"@id":"https:\/\/www.pcjv.de\/?p=1975#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pcjv.de\/?p=1975"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.pcjv.de\/?p=1975#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pcjv.de\/"},{"@type":"ListItem","position":2,"name":"Web apps, the Pascal way"}]},{"@type":"WebSite","@id":"https:\/\/www.pcjv.de\/#website","url":"https:\/\/www.pcjv.de\/","name":"Christian&#039;s private site","description":"Private site of Christian-W. Budde","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pcjv.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.pcjv.de\/#\/schema\/person\/79b654f8c2fb5bf9405ccc4cb1c11880","name":"Christian","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g","caption":"Christian"},"sameAs":["http:\/\/www.savioursofsoul.de\/Christian"],"url":"https:\/\/www.pcjv.de\/?author=3"}]}},"_links":{"self":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts\/1975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1975"}],"version-history":[{"count":1,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts\/1975\/revisions"}],"predecessor-version":[{"id":2102,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts\/1975\/revisions\/2102"}],"wp:attachment":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}