CINXE.COM
noise sans signal: On writing spark tables
<!DOCTYPE html> <html class='v2' dir='ltr' lang='en-GB'> <head> <link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/> <meta content='width=1100' name='viewport'/> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='blogger' name='generator'/> <link href='https://noisesanssignal.blogspot.com/favicon.ico' rel='icon' type='image/x-icon'/> <link href='https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="noise sans signal - Atom" href="https://noisesanssignal.blogspot.com/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="noise sans signal - RSS" href="https://noisesanssignal.blogspot.com/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="noise sans signal - Atom" href="https://www.blogger.com/feeds/3973402558914703751/posts/default" /> <link rel="alternate" type="application/atom+xml" title="noise sans signal - Atom" href="https://noisesanssignal.blogspot.com/feeds/8128301104744746293/comments/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <link href='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s320/CasketofFays_01.jpg' rel='image_src'/> <meta content='https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html' property='og:url'/> <meta content='On writing spark tables' property='og:title'/> <meta content='I had an idea a while ago to write an ideal spark table, for a thousand or maybe even ten thousands best, most imagination-stirring words th...' property='og:description'/> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/w1200-h630-p-k-no-nu/CasketofFays_01.jpg' property='og:image'/> <title>noise sans signal: On writing spark tables</title> <style type='text/css'>@font-face{font-family:'Vollkorn';font-style:normal;font-weight:400;font-display:swap;src:url(//fonts.gstatic.com/s/vollkorn/v27/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df2MHGeHmmY.eot);}</style> <style id='page-skin-1' type='text/css'><!-- /* ----------------------------------------------- Blogger Template Style Name: Simple Designer: Josh Peterson URL: www.noaesthetic.com ----------------------------------------------- */ <Group description="Post Title Color" selector="h3.post-title"> <Variable name="post.title.link.color" description="Link Color" type="color" default="#ff0000"/> <Variable name="post.title.hover.color" description="Link Hover Color" type="color" default="#0000ff"/> <Variable name="post.title.color" description="Color on Post Page" type="color" default="#ff00ff"/> </Group> <Variable name="keycolor" description="Main Color" type="color" default="#66bbdd"/> <Group description="Page Text" selector="body"> <Variable name="body.font" description="Font" type="font" default="normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="body.text.color" description="Text Color" type="color" default="#222222"/> </Group> <Group description="Backgrounds" selector=".body-fauxcolumns-outer"> <Variable name="body.background.color" description="Outer Background" type="color" default="#66bbdd"/> <Variable name="content.background.color" description="Main Background" type="color" default="#ffffff"/> <Variable name="header.background.color" description="Header Background" type="color" default="transparent"/> </Group> <Group description="Links" selector=".main-outer"> <Variable name="link.color" description="Link Color" type="color" default="#2288bb"/> <Variable name="link.visited.color" description="Visited Color" type="color" default="#888888"/> <Variable name="link.hover.color" description="Hover Color" type="color" default="#33aaff"/> </Group> <Group description="Blog Title" selector=".header h1"> <Variable name="header.font" description="Font" type="font" default="normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="header.text.color" description="Title Color" type="color" default="#3399bb" /> </Group> <Group description="Blog Description" selector=".header .description"> <Variable name="description.text.color" description="Description Color" type="color" default="#777777" /> </Group> <Group description="Tabs Text" selector=".tabs-inner .widget li a"> <Variable name="tabs.font" description="Font" type="font" default="normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="tabs.text.color" description="Text Color" type="color" default="#999999"/> <Variable name="tabs.selected.text.color" description="Selected Color" type="color" default="#000000"/> </Group> <Group description="Tabs Background" selector=".tabs-outer .PageList"> <Variable name="tabs.background.color" description="Background Color" type="color" default="#f5f5f5"/> <Variable name="tabs.selected.background.color" description="Selected Color" type="color" default="#eeeeee"/> </Group> <Group description="Post Title" selector="h3.post-title, .comments h4"> <Variable name="post.title.font" description="Font" type="font" default="normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> </Group> <Group description="Date Header" selector=".date-header"> <Variable name="date.header.color" description="Text Color" type="color" default="#666666"/> <Variable name="date.header.background.color" description="Background Color" type="color" default="transparent"/> <Variable name="date.header.font" description="Text Font" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="date.header.padding" description="Date Header Padding" type="string" default="inherit"/> <Variable name="date.header.letterspacing" description="Date Header Letter Spacing" type="string" default="inherit"/> <Variable name="date.header.margin" description="Date Header Margin" type="string" default="inherit"/> </Group> <Group description="Post Footer" selector=".post-footer"> <Variable name="post.footer.text.color" description="Text Color" type="color" default="#666666"/> <Variable name="post.footer.background.color" description="Background Color" type="color" default="#f9f9f9"/> <Variable name="post.footer.border.color" description="Shadow Color" type="color" default="#eeeeee"/> </Group> <Group description="Gadgets" selector="h2"> <Variable name="widget.title.font" description="Title Font" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="widget.title.text.color" description="Title Color" type="color" default="#000000"/> <Variable name="widget.alternate.text.color" description="Alternate Color" type="color" default="#999999"/> </Group> <Group description="Images" selector=".main-inner"> <Variable name="image.background.color" description="Background Color" type="color" default="#ffffff"/> <Variable name="image.border.color" description="Border Color" type="color" default="#eeeeee"/> <Variable name="image.text.color" description="Caption Text Color" type="color" default="#666666"/> </Group> <Group description="Accents" selector=".content-inner"> <Variable name="body.rule.color" description="Separator Line Color" type="color" default="#eeeeee"/> <Variable name="tabs.border.color" description="Tabs Border Color" type="color" default="transparent"/> </Group> <Variable name="body.background" description="Body Background" type="background" color="#ffffff" default="$(color) none repeat scroll top left"/> <Variable name="body.background.override" description="Body Background Override" type="string" default=""/> <Variable name="body.background.gradient.cap" description="Body Gradient Cap" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/> <Variable name="body.background.gradient.tile" description="Body Gradient Tile" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/body_gradient_tile_light.png)"/> <Variable name="content.background.color.selector" description="Content Background Color Selector" type="string" default=".content-inner"/> <Variable name="content.padding" description="Content Padding" type="length" default="10px" min="0" max="100px"/> <Variable name="content.padding.horizontal" description="Content Horizontal Padding" type="length" default="10px" min="0" max="100px"/> <Variable name="content.shadow.spread" description="Content Shadow Spread" type="length" default="40px" min="0" max="100px"/> <Variable name="content.shadow.spread.webkit" description="Content Shadow Spread (WebKit)" type="length" default="5px" min="0" max="100px"/> <Variable name="content.shadow.spread.ie" description="Content Shadow Spread (IE)" type="length" default="10px" min="0" max="100px"/> <Variable name="main.border.width" description="Main Border Width" type="length" default="0" min="0" max="10px"/> <Variable name="header.background.gradient" description="Header Gradient" type="url" default="none"/> <Variable name="header.shadow.offset.left" description="Header Shadow Offset Left" type="length" default="-1px" min="-50px" max="50px"/> <Variable name="header.shadow.offset.top" description="Header Shadow Offset Top" type="length" default="-1px" min="-50px" max="50px"/> <Variable name="header.shadow.spread" description="Header Shadow Spread" type="length" default="1px" min="0" max="100px"/> <Variable name="header.padding" description="Header Padding" type="length" default="30px" min="0" max="100px"/> <Variable name="header.border.size" description="Header Border Size" type="length" default="1px" min="0" max="10px"/> <Variable name="header.bottom.border.size" description="Header Bottom Border Size" type="length" default="1px" min="0" max="10px"/> <Variable name="header.border.horizontalsize" description="Header Horizontal Border Size" type="length" default="0" min="0" max="10px"/> <Variable name="description.text.size" description="Description Text Size" type="string" default="140%"/> <Variable name="tabs.margin.top" description="Tabs Margin Top" type="length" default="0" min="0" max="100px"/> <Variable name="tabs.margin.side" description="Tabs Side Margin" type="length" default="30px" min="0" max="100px"/> <Variable name="tabs.background.gradient" description="Tabs Background Gradient" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/> <Variable name="tabs.border.width" description="Tabs Border Width" type="length" default="1px" min="0" max="10px"/> <Variable name="tabs.bevel.border.width" description="Tabs Bevel Border Width" type="length" default="1px" min="0" max="10px"/> <Variable name="post.margin.bottom" description="Post Bottom Margin" type="length" default="25px" min="0" max="100px"/> <Variable name="image.border.small.size" description="Image Border Small Size" type="length" default="2px" min="0" max="10px"/> <Variable name="image.border.large.size" description="Image Border Large Size" type="length" default="5px" min="0" max="10px"/> <Variable name="page.width.selector" description="Page Width Selector" type="string" default=".region-inner"/> <Variable name="page.width" description="Page Width" type="string" default="auto"/> <Variable name="main.section.margin" description="Main Section Margin" type="length" default="15px" min="0" max="100px"/> <Variable name="main.padding" description="Main Padding" type="length" default="15px" min="0" max="100px"/> <Variable name="main.padding.top" description="Main Padding Top" type="length" default="30px" min="0" max="100px"/> <Variable name="main.padding.bottom" description="Main Padding Bottom" type="length" default="30px" min="0" max="100px"/> <Variable name="paging.background" color="#ffffff" description="Background of blog paging area" type="background" default="transparent none no-repeat scroll top center"/> <Variable name="footer.bevel" description="Bevel border length of footer" type="length" default="0" min="0" max="10px"/> <Variable name="mobile.background.overlay" description="Mobile Background Overlay" type="string" default="transparent none repeat scroll top left"/> <Variable name="mobile.background.size" description="Mobile Background Size" type="string" default="auto"/> <Variable name="mobile.button.color" description="Mobile Button Color" type="color" default="#ffffff" /> <Variable name="startSide" description="Side where text starts in blog language" type="automatic" default="left"/> <Variable name="endSide" description="Side where text ends in blog language" type="automatic" default="right"/> */ /* Content ----------------------------------------------- */ body { font: normal normal 14px 'Trebuchet MS', Trebuchet, Verdana, sans-serif; color: #666666; background: #ffffff none repeat scroll top left; padding: 0 0 0 0; } html body .region-inner { min-width: 0; max-width: 100%; width: auto; } h2 { font-size: 22px; } a:link { text-decoration:none; color: #2288bb; } a:visited { text-decoration:none; color: #888888; } a:hover { text-decoration:underline; color: #33aaff; } .body-fauxcolumn-outer .fauxcolumn-inner { background: transparent none repeat scroll top left; _background-image: none; } .body-fauxcolumn-outer .cap-top { position: absolute; z-index: 1; height: 400px; width: 100%; } .body-fauxcolumn-outer .cap-top .cap-left { width: 100%; background: transparent none repeat-x scroll top left; _background-image: none; } .content-outer { -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .15); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .15); -goog-ms-box-shadow: 0 0 0 #333333; box-shadow: 0 0 0 rgba(0, 0, 0, .15); margin-bottom: 1px; } .content-inner { padding: 10px 40px; } .content-inner { background-color: #ffffff; } /* Header ----------------------------------------------- */ .header-outer { background: transparent none repeat-x scroll 0 -400px; _background-image: none; } .Header h1 { font: normal normal 40px Vollkorn; color: #444444; text-shadow: 0 0 0 rgba(0, 0, 0, .2); } .Header h1 a { color: #444444; } .Header .description { font-size: 18px; color: #999999; } .header-inner .Header .titlewrapper { padding: 22px 0; } .header-inner .Header .descriptionwrapper { padding: 0 0; } /* Tabs ----------------------------------------------- */ .tabs-inner .section:first-child { border-top: 0 solid #dddddd; } .tabs-inner .section:first-child ul { margin-top: -1px; border-top: 1px solid #dddddd; border-left: 1px solid #dddddd; border-right: 1px solid #dddddd; } .tabs-inner .widget ul { background: transparent none repeat-x scroll 0 -800px; _background-image: none; border-bottom: 1px solid #dddddd; margin-top: 0; margin-left: -30px; margin-right: -30px; } .tabs-inner .widget li a { display: inline-block; padding: .6em 1em; font: normal normal 14px Vollkorn; color: #000000; border-left: 1px solid #ffffff; border-right: 1px solid #dddddd; } .tabs-inner .widget li:first-child a { border-left: none; } .tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover { color: #000000; background-color: #eeeeee; text-decoration: none; } /* Columns ----------------------------------------------- */ .main-outer { border-top: 0 solid transparent; } .fauxcolumn-left-outer .fauxcolumn-inner { border-right: 1px solid transparent; } .fauxcolumn-right-outer .fauxcolumn-inner { border-left: 1px solid transparent; } /* Headings ----------------------------------------------- */ div.widget > h2, div.widget h2.title { margin: 0 0 1em 0; font: normal bold 11px 'Trebuchet MS',Trebuchet,Verdana,sans-serif; color: #000000; } /* Widgets ----------------------------------------------- */ .widget .zippy { color: #999999; text-shadow: 2px 2px 1px rgba(0, 0, 0, .1); } .widget .popular-posts ul { list-style: none; } /* Posts ----------------------------------------------- */ h2.date-header { font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif; } .date-header span { background-color: #bbbbbb; color: #ffffff; padding: 0.4em; letter-spacing: 3px; margin: inherit; } .main-inner { padding-top: 35px; padding-bottom: 65px; } .main-inner .column-center-inner { padding: 0 0; } .main-inner .column-center-inner .section { margin: 0 1em; } .post { margin: 0 0 45px 0; } h3.post-title, .comments h4 { font: normal normal 22px Vollkorn; margin: .75em 0 0; } .post-body { font-size: 110%; line-height: 1.4; position: relative; } .post-body img, .post-body .tr-caption-container, .Profile img, .Image img, .BlogList .item-thumbnail img { padding: 2px; background: #ffffff; border: 1px solid #eeeeee; -moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); } .post-body img, .post-body .tr-caption-container { padding: 5px; } .post-body .tr-caption-container { color: #666666; } .post-body .tr-caption-container img { padding: 0; background: transparent; border: none; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1); box-shadow: 0 0 0 rgba(0, 0, 0, .1); } .post-header { margin: 0 0 1.5em; line-height: 1.6; font-size: 90%; } .post-footer { margin: 20px -2px 0; padding: 5px 10px; color: #666666; background-color: #eeeeee; border-bottom: 1px solid #eeeeee; line-height: 1.6; font-size: 90%; } #comments .comment-author { padding-top: 1.5em; border-top: 1px solid transparent; background-position: 0 1.5em; } #comments .comment-author:first-child { padding-top: 0; border-top: none; } .avatar-image-container { margin: .2em 0 0; } #comments .avatar-image-container img { border: 1px solid #eeeeee; } /* Comments ----------------------------------------------- */ .comments .comments-content .icon.blog-author { background-repeat: no-repeat; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==); } .comments .comments-content .loadmore a { border-top: 1px solid #999999; border-bottom: 1px solid #999999; } .comments .comment-thread.inline-thread { background-color: #eeeeee; } .comments .continue { border-top: 2px solid #999999; } /* Accents ---------------------------------------------- */ .section-columns td.columns-cell { border-left: 1px solid transparent; } .blog-pager { background: transparent url(https://resources.blogblog.com/blogblog/data/1kt/simple/paging_dot.png) repeat-x scroll top center; } .blog-pager-older-link, .home-link, .blog-pager-newer-link { background-color: #ffffff; padding: 5px; } .footer-outer { border-top: 1px dashed #bbbbbb; } /* Mobile ----------------------------------------------- */ body.mobile { background-size: auto; } .mobile .body-fauxcolumn-outer { background: transparent none repeat scroll top left; } .mobile .body-fauxcolumn-outer .cap-top { background-size: 100% auto; } .mobile .content-outer { -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15); box-shadow: 0 0 3px rgba(0, 0, 0, .15); } .mobile .tabs-inner .widget ul { margin-left: 0; margin-right: 0; } .mobile .post { margin: 0; } .mobile .main-inner .column-center-inner .section { margin: 0; } .mobile .date-header span { padding: 0.1em 10px; margin: 0 -10px; } .mobile h3.post-title { margin: 0; } .mobile .blog-pager { background: transparent none no-repeat scroll top center; } .mobile .footer-outer { border-top: none; } .mobile .main-inner, .mobile .footer-inner { background-color: #ffffff; } .mobile-index-contents { color: #666666; } .mobile-link-button { background-color: #2288bb; } .mobile-link-button a:link, .mobile-link-button a:visited { color: #ffffff; } .mobile .tabs-inner .section:first-child { border-top: none; } .mobile .tabs-inner .PageList .widget-content { background-color: #eeeeee; color: #000000; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; } .mobile .tabs-inner .PageList .widget-content .pagelist-arrow { border-left: 1px solid #dddddd; } h3.post-title { color:#7f0000; } h3.post-title a, h3.post-title a:visited { color:#d20000; } h3.post-title a:hover { color:#ffff00; } --></style> <style id='template-skin-1' type='text/css'><!-- body { min-width: 990px; } .content-outer, .content-fauxcolumn-outer, .region-inner { min-width: 990px; max-width: 990px; _width: 990px; } .main-inner .columns { padding-left: 0px; padding-right: 260px; } .main-inner .fauxcolumn-center-outer { left: 0px; right: 260px; /* IE6 does not respect left and right together */ _width: expression(this.parentNode.offsetWidth - parseInt("0px") - parseInt("260px") + 'px'); } .main-inner .fauxcolumn-left-outer { width: 0px; } .main-inner .fauxcolumn-right-outer { width: 260px; } .main-inner .column-left-outer { width: 0px; right: 100%; margin-left: -0px; } .main-inner .column-right-outer { width: 260px; margin-right: -260px; } #layout { min-width: 0; } #layout .content-outer { min-width: 0; width: 800px; } #layout .region-inner { min-width: 0; width: auto; } body#layout div.add_widget { padding: 8px; } body#layout div.add_widget a { margin-left: 32px; } --></style> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=3973402558914703751&zx=ef1fe09d-1567-4eef-bfd7-d8224bfa947b' media='none' onload='if(media!='all')media='all'' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=3973402558914703751&zx=ef1fe09d-1567-4eef-bfd7-d8224bfa947b' rel='stylesheet'/></noscript> <meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/> <meta name='google-adsense-platform-domain' content='blogspot.com'/> </head> <body class='loading'> <div class='navbar section' id='navbar' name='Navbar'><div class='widget Navbar' data-version='1' id='Navbar1'><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar/3973402558914703751?po\x3d8128301104744746293\x26origin\x3dhttps://noisesanssignal.blogspot.com', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script><script type="text/javascript"> (function() { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js'; var head = document.getElementsByTagName('head')[0]; if (head) { head.appendChild(script); }})(); </script> </div></div> <div class='body-fauxcolumns'> <div class='fauxcolumn-outer body-fauxcolumn-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <div class='content'> <div class='content-fauxcolumns'> <div class='fauxcolumn-outer content-fauxcolumn-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <div class='content-outer'> <div class='content-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left content-fauxborder-left'> <div class='fauxborder-right content-fauxborder-right'></div> <div class='content-inner'> <header> <div class='header-outer'> <div class='header-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left header-fauxborder-left'> <div class='fauxborder-right header-fauxborder-right'></div> <div class='region-inner header-inner'> <div class='header section' id='header' name='Header'><div class='widget Header' data-version='1' id='Header1'> <div id='header-inner'> <div class='titlewrapper'> <h1 class='title'> <a href='https://noisesanssignal.blogspot.com/'> noise sans signal </a> </h1> </div> <div class='descriptionwrapper'> <p class='description'><span>probably going to last for about two weeks</span></p> </div> </div> </div></div> </div> </div> <div class='header-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </header> <div class='tabs-outer'> <div class='tabs-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left tabs-fauxborder-left'> <div class='fauxborder-right tabs-fauxborder-right'></div> <div class='region-inner tabs-inner'> <div class='tabs no-items section' id='crosscol' name='Cross-column'></div> <div class='tabs no-items section' id='crosscol-overflow' name='Cross-Column 2'></div> </div> </div> <div class='tabs-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='main-outer'> <div class='main-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left main-fauxborder-left'> <div class='fauxborder-right main-fauxborder-right'></div> <div class='region-inner main-inner'> <div class='columns fauxcolumns'> <div class='fauxcolumn-outer fauxcolumn-center-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='fauxcolumn-outer fauxcolumn-left-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='fauxcolumn-outer fauxcolumn-right-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <!-- corrects IE6 width calculation --> <div class='columns-inner'> <div class='column-center-outer'> <div class='column-center-inner'> <div class='main section' id='main' name='Main'><div class='widget Blog' data-version='1' id='Blog1'> <div class='blog-posts hfeed'> <div class="date-outer"> <h2 class='date-header'><span>Wednesday, 1 January 2025</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s320/CasketofFays_01.jpg' itemprop='image_url'/> <meta content='3973402558914703751' itemprop='blogId'/> <meta content='8128301104744746293' itemprop='postId'/> <a name='8128301104744746293'></a> <h3 class='post-title entry-title' itemprop='name'> On writing spark tables </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-8128301104744746293' itemprop='description articleBody'> <p>I had an idea a while ago to write an ideal spark table, for a thousand or maybe even ten thousands best, most imagination-stirring words that exist. Just put all my favourite words into one place, and let it inspire wonders.</p><p>It never went anywhere and, as I think now, this approach had a mistake in its core. <br /></p><p>It was Dominic Bailey's article in <a href="https://redruinpublishing.itch.io/casket-of-fays-7">'Casket of Fays' #7</a> that made me to rethink the whole idea of spark tables, and eventually this what worked better for me than just creating one giant table that is supposed to do everything:</p><p><u>1) Stay local;</u></p><p>Probably the most important realization. By 'local' I mean the specific game or world that the table is used for. Dominic Bailey's spark tables (shown below) don't aim to create just any possible world – they are made to specifically help with 'Dragon Warriors RPG' setting, which is pseudo-European, pseudo-medieval TTRPG.</p><p> </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s580/CasketofFays_01.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="458" data-original-width="580" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s320/CasketofFays_01.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">by Dominic Bailey, from 'Casket of Fays' #7<br /></td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje-2L-MdCngnViNe-5TSpfTpO1E8DkyPd8xn8tD3LR3f3goKs0FaxAZa9wyyXH0IztFdCHwCGLIxLa7_22WxjmGj_OfCQYKKFrdxg3YsJf9r_5nEPnaKLK3WCsoaGW9Wj7E71lhuOWk-h3UPM4HPdtw_B4a_Z757eSk9ih926rhk6ttGlliFCZMxrZmimf/s580/CasketofFays_02.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="469" data-original-width="580" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje-2L-MdCngnViNe-5TSpfTpO1E8DkyPd8xn8tD3LR3f3goKs0FaxAZa9wyyXH0IztFdCHwCGLIxLa7_22WxjmGj_OfCQYKKFrdxg3YsJf9r_5nEPnaKLK3WCsoaGW9Wj7E71lhuOWk-h3UPM4HPdtw_B4a_Z757eSk9ih926rhk6ttGlliFCZMxrZmimf/s320/CasketofFays_02.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">by Dominic Bailey, from 'Casket of Fays' #7</td></tr></tbody></table><br /><p></p><p>Aiming to create a table without a specific world, mood, feeling or dream in mind creates a disjointed jigsaw puzzle which doesn't have an underlying picture; it is just random bits. Yes, it still can be useful, but I found that it is much better to focus the tables on a specific world/area, or a game, or a mood, or a genre. Dominic Bailey's tables didn't aim to put spaceships in 'Dragon Warriors', not even attempted to add much beyond medieval not-Britain (despite Lands of Legends having many other not-Earth realms). I found it better to narrow the focus for what is required to work right now; everything else can be added later.</p><p></p><p><u>2) Not too huge;</u></p><p>Follows from the previous: I am finding 2d20 tables a bit too small but I think spark tables should be no more than 8d20; 6d20 might be better; personally speaking, it is a drastic downsize from 1000-words table I had aimed to make but it is much better in results. </p><p>It is important to remember that these tables are not supposed to give ready-to-use detailed solutions – they are not generators – but simply to spark imagination juuuuuuuuuust enough. In the same vein, if one word works better for you than another, or if you simply like how one particular word sounds over its synonyms, put that one word in regardless if you think other might have more potential. 'Slumber' works better for me than 'Sleep' even if 'sleep' is, technically, more versatile, but I like how 'slumber' sounds way more. Even if the word is archaic or not widely used but fits right into the atmosphere and mood of the world, better use that strange word than something more mundane.</p><p>Saying this: don't be afraid to re-write if some words no longer work, or the world/mood/genre changed. Blank over the word and write a new one, more interesting or suitable, instead of putting two somewhat similar sparks just for the sake of completeness. <br /></p><p><u>3) Use solid words;</u><br /></p><p>Another big realization: less abstract concepts, more words for something concrete. Something tangible is better than something vague.<br /></p><p>'Legacy' is vague, but 'heirloom' is tangible regardless if it is sword or a enchanted spindle. 'Dog' and 'blue' are good, but 'hound' and 'burning azure' is better for gothic-like world, although 'dog' is probably better for something more peaceful and cute. </p><p><u>4) Cheese if you stuck;</u></p><p>One easy, almost hack-y way I found to write a spark table (especially if one was as stuck as I was) was to mentally take a few snapshots from something similar in setting, mood or genre, break them down into tangible pieces, and write those pieces as sparks; literal pictures (as in classical Arthurian art for "Dragon Warriors") could be also used. I cheesed 'Link's Awakening' I was playing through at that time into some spark tables just by gathering all interesting bits I found in that game in a few columns, and it worked pretty well for a lighter-side setting I was writing.<br /></p><p>Saying this:</p><p><u>5) There should be a measure of the unknown added to the mix.</u></p><p>My rule of thumb is 2/3 known and 1/3 unknown; your ratio might be different. Let 2/3 of sparks to be comfortably what the world / the mood is exactly: knights, moss-covered towers and fey to 'Dragon Warriors', radio-station, empty museum and sludge waste for Anomaly Zone, demon king, master sword and goddess for 'LoZ' games. But the rest should be something else, something from the edge of this world and a dream coming from its horizons, from not-yet-written book about is farther lands or further times. Not too far off but not yet here either – otherwise the sparks will eventually just endlessly regurgitate the familiar concepts. Add words for that 'LoZ' game that exists only in one's head, add something from Carcosa into Mork-Borg, add something from 'Planescape' to a weird city on crossroads.<br /></p><p><u>additionally) Consider if you need a structure.</u></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiSvSu6vd7cXa_QWqkm5MEMpAcHOfWhZGKXHwF8qKtVU8vv8obBOfkZWXEG0lDxuj74gF9Y3Z7RwbaFduhqhfSKl3TZQrETXHhiAS4vPBHq6AOUHX3ne1hiPgyBO8PSQBCkoVWVGFtsecmz3p0XkhcXpvtMPXesBklMHLe4GWtT4zP6CKoOBpzz8HwReJl/s2000/MythicBastionLand.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1294" data-original-width="2000" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiSvSu6vd7cXa_QWqkm5MEMpAcHOfWhZGKXHwF8qKtVU8vv8obBOfkZWXEG0lDxuj74gF9Y3Z7RwbaFduhqhfSKl3TZQrETXHhiAS4vPBHq6AOUHX3ne1hiPgyBO8PSQBCkoVWVGFtsecmz3p0XkhcXpvtMPXesBklMHLe4GWtT4zP6CKoOBpzz8HwReJl/s320/MythicBastionLand.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">spark tables for Mythic Bastionland by Chris McDowall<br /></td></tr></tbody></table><p></p><p><a href="https://www.bastionland.com/2023/10/sparks-from-fire.html">Spark tables from Mythic Bastionland</a> are so minutely structured they are veering, in my perception, into a land of generators instead of just sparks. I tried this approach for a few tables, and my personal experience was that once I've put a specific column for, say, places, I also now needed a column for objects, people, past and way too many other things to list; soon it became more suffocating than the original approach where each word was free-floating and implied its meaning rather than was defined by its place in a structure. 'Hound' could be a literal dog, a harassing mob, a person with dog-themed coat of arms, or a haunt (which is just kind of a similar-sounding word) – whatever comes to mind.</p><p>If you want structure and it works for you then sure, use it. But please consider first if it is helpful at all.</p> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/12992025061183651850' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/12992025061183651850' rel='author' title='author profile'> <span itemprop='name'>Kyana</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html' itemprop='url'/> <a class='timestamp-link' href='https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-01-01T01:05:00+01:00'>01:05</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-1043330463'> <a href='https://www.blogger.com/post-edit.g?blogID=3973402558914703751&postID=8128301104744746293&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> <a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=3973402558914703751&postID=8128301104744746293&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=3973402558914703751&postID=8128301104744746293&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=3973402558914703751&postID=8128301104744746293&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=3973402558914703751&postID=8128301104744746293&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=3973402558914703751&postID=8128301104744746293&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> <div class='comments' id='comments'> <a name='comments'></a> <h4>No comments:</h4> <div id='Blog1_comments-block-wrapper'> <dl class='avatar-comment-indent' id='comments-block'> </dl> </div> <p class='comment-footer'> <div class='comment-form'> <a name='comment-form'></a> <h4 id='comment-post-message'>Post a Comment</h4> <p> </p> <a href='https://www.blogger.com/comment/frame/3973402558914703751?po=8128301104744746293&hl=en-GB' id='comment-editor-src'></a> <iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410px' id='comment-editor' name='comment-editor' src='' width='100%'></iframe> <script src='https://www.blogger.com/static/v1/jsbin/3061944402-comment_from_post_iframe.js' type='text/javascript'></script> <script type='text/javascript'> BLOG_CMT_createIframe('https://www.blogger.com/rpc_relay.html'); </script> </div> </p> </div> </div> </div></div> </div> <div class='blog-pager' id='blog-pager'> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://noisesanssignal.blogspot.com/2024/10/simple-system-to-run-detective-game-in.html' id='Blog1_blog-pager-older-link' title='Older Post'>Older Post</a> </span> <a class='home-link' href='https://noisesanssignal.blogspot.com/'>Home</a> </div> <div class='clear'></div> <div class='post-feeds'> <div class='feed-links'> Subscribe to: <a class='feed-link' href='https://noisesanssignal.blogspot.com/feeds/8128301104744746293/comments/default' target='_blank' type='application/atom+xml'>Post Comments (Atom)</a> </div> </div> </div></div> </div> </div> <div class='column-left-outer'> <div class='column-left-inner'> <aside> </aside> </div> </div> <div class='column-right-outer'> <div class='column-right-inner'> <aside> <div class='sidebar section' id='sidebar-right-1'><div class='widget PageList' data-version='1' id='PageList1'> <h2>Additional pages</h2> <div class='widget-content'> <ul> <li> <a href='https://noisesanssignal.blogspot.com/p/downloads.html'>Download</a> </li> </ul> <div class='clear'></div> </div> </div></div> </aside> </div> </div> </div> <div style='clear: both'></div> <!-- columns --> </div> <!-- main --> </div> </div> <div class='main-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <footer> <div class='footer-outer'> <div class='footer-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left footer-fauxborder-left'> <div class='fauxborder-right footer-fauxborder-right'></div> <div class='region-inner footer-inner'> <div class='foot no-items section' id='footer-1'></div> <!-- outside of the include in order to lock Attribution widget --> <div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' data-version='1' id='Attribution1'> <div class='widget-content' style='text-align: center;'> Text CC BY-NC-ND; Maps All Rights Reserved; nothing on this blog can be used for hate speech, commercial use, merchandise, stock licensing, AI generators/training, or NFTs/cryptocurrency. Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>. </div> <div class='clear'></div> </div></div> </div> </div> <div class='footer-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </footer> <!-- content --> </div> </div> <div class='content-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <script type='text/javascript'> window.setTimeout(function() { document.body.className = document.body.className.replace('loading', ''); }, 10); </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/1704033933-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY5nwiDcmrpYRZwcfi3uKvr1Pr-qoQ:1740270992194';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d3973402558914703751','//noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html','3973402558914703751'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '3973402558914703751', 'title': 'noise sans signal', 'url': 'https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html', 'canonicalUrl': 'https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html', 'homepageUrl': 'https://noisesanssignal.blogspot.com/', 'searchUrl': 'https://noisesanssignal.blogspot.com/search', 'canonicalHomepageUrl': 'https://noisesanssignal.blogspot.com/', 'blogspotFaviconUrl': 'https://noisesanssignal.blogspot.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': false, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': '', 'encoding': 'UTF-8', 'locale': 'en-GB', 'localeUnderscoreDelimited': 'en_gb', 'languageDirection': 'ltr', 'isPrivate': true, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22noise sans signal - Atom\x22 href\x3d\x22https://noisesanssignal.blogspot.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22noise sans signal - RSS\x22 href\x3d\x22https://noisesanssignal.blogspot.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22noise sans signal - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/3973402558914703751/posts/default\x22 /\x3e\n\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22noise sans signal - Atom\x22 href\x3d\x22https://noisesanssignal.blogspot.com/feeds/8128301104744746293/comments/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/c320e3f9c6626331', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en_GB\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'item', 'postId': '8128301104744746293', 'postImageThumbnailUrl': 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s72-c/CasketofFays_01.jpg', 'postImageUrl': 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s320/CasketofFays_01.jpg', 'pageName': 'On writing spark tables', 'pageTitle': 'noise sans signal: On writing spark tables'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard', 'ok': 'Ok', 'postLink': 'Post link'}}, {'name': 'template', 'data': {'isResponsive': false, 'isAlternateRendering': false, 'isCustom': false}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'On writing spark tables', 'description': 'I had an idea a while ago to write an ideal spark table, for a thousand or maybe even ten thousands best, most imagination-stirring words th...', 'featuredImage': 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAoVlAhkQK_M5rd-je6EPX8Yy5e920yPdNebY63awg2yTx-peTFH7f2UA17lojOGGDv0KgPdU3wuL7qknWli_FeQaZEvvdgi7i8NO-xqHtgAyoFmvfqyHP7LdxWy3mFOr9sztWziGBpu5wTNMVuD_p6gIBXlncYXXvzbQ3ey9y7l1Stl7DLip0kOokDJe/s320/CasketofFays_01.jpg', 'url': 'https://noisesanssignal.blogspot.com/2025/01/on-writing-spark-tables.html', 'type': 'item', 'isSingleItem': true, 'isMultipleItems': false, 'isError': false, 'isPage': false, 'isPost': true, 'isHomepage': false, 'isArchive': false, 'isLabelSearch': false, 'postId': 8128301104744746293}}]); _WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', document.getElementById('Navbar1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/4282445665-lbx__en_gb.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/1964470060-lightbox_bundle.css'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_PageListView', new _WidgetInfo('PageList1', 'sidebar-right-1', document.getElementById('PageList1'), {'title': 'Additional pages', 'links': [{'isCurrentPage': false, 'href': 'https://noisesanssignal.blogspot.com/p/downloads.html', 'id': '1625410423387843407', 'title': 'Download'}], 'mobile': false, 'showPlaceholder': true, 'hasCurrentPage': false}, 'displayModeFull')); _WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull')); </script> </body> </html>