<!doctype html><html lang=en charset=utf-8><head><meta name=generator content="Hugo 0.152.2"><meta charset=UTF-8><title>Martian Software, Inc.</title><meta name=description content="Marty Lamb's Martian Software builds practical, simple, privacy-minded software that is designed to last, including ChatKeeper and open source tools, and publishes articles for users and developers."><link rel=icon href=/favicon.ico type=image/x-icon><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Bangers&display=swap" rel=stylesheet><script async src=https://plausible.io/js/pa-XE2uBatP6OCo0H8wkzKCk.js></script><script>window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(e){plausible.o=e||{}},plausible.init({fileDownloads:{fileExtensions:["pdf","xlsx","docx","txt","rtf","csv","exe","key","pps","ppt","pptx","7z","pkg","rar","gz","zip","avi","mov","mp4","mpeg","wmv","midi","mp3","wav","wma","dmg","msi","rpm","deb","jar","tgz","tar","sh"]}})</script><link rel=stylesheet href=/css/martian.min.b07487cc1a73c4abb5d6dbbd6195cf2410e1896ea74d2f8a77f7d475de5de0ef.css></head><body><a name=top></a><div class=hf-container><header class=topOrBottom width=100%><nav><div class=logo-container><a href=/index.html title="👽 Take me to your home page 👽"><img alt="Martian Software, Inc. banner logo" src=/martiansoftware-toplogo.png></a>
<a class=logotext href=/index.html title="👽 Take me to your home page 👽">Martian
Software, Inc.</a></div><ul><li><a href=/>Home</a></li><li>Open Source<ul><li><a href=https://github.com/martylamb/atomicfileoutputstream>atomicfileoutputstream</a></li><li><a href=https://github.com/martylamb/blobstore>blobstore</a></li><li><a href=https://github.com/martylamb/hope-and-doubt>hope and doubt</a></li><li><a href=https://github.com/martylamb/macnificent>macnificent</a></li><li><a href=https://github.com/martylamb/martian-hex>martian-hex</a></li><li><a href=https://github.com/martylamb/martian-log>martian-log</a></li><li><a href=https://github.com/martylamb/tictac>tictac</a></li><li><a href=https://github.com/martylamb/twothousandfortyeight>twothousandfortyeight</a></li><li><a href=#archived-projects>Archived Projects...</a><ul><li><a href=/lab/jar2sh.html>jar2sh</a></li><li><a href=/jsap/>JSAP</a></li><li><a href=/nailgun/>nailgun</a></li><li><a href=/nearshare/>nearshare.net</a></li><li><a href=/lab/rundoc.html>rundoc</a></li><li><a href=/lab/snip.html>snip</a></li><li><a href=/tarproxy/>tarproxy</a></li><li><a href=/lab/tivonage.html>tivonage</a></li><li><a href=/trivialpersist/>trivial persist</a></li></ul></li></ul></li><li><b style=color:var(--martian-yellow)>ChatKeeper</b><ul><li><a style=color:var(--martian-green) href=/chatkeeper/>ChatKeeper Home</a></li><li><a style=color:var(--martian-green) href=/chatkeeper/download.html>Download</a></li><li><a style=color:var(--martian-green) href=/chatkeeper/buy.html>Purchase</a></li><li><a href=/chatkeeper/releases/index.html>All Releases</a></li><li><a href=/chatkeeper/roadmap.html>Roadmap</a></li><li><a href=/chatkeeper/quickstart.html>CLI Quick Start Guide</a></li><li><a href=/chatkeeper/command-line-helper.html>Command Line Helper</a></li><li><a href=/chatkeeper/windows-command-line-help.html>Windows Command Line
Help</a></li><li><a href=/chatkeeper/terms-of-service-and-eula.html>Terms of Service /
EULA</a></li><li><a href=/chatkeeper/privacy-policy.html>Privacy Policy</a></li></ul></li><li><a href=/articles/>Blog</a></li><li><a href=/newsletter.html>Newsletter</a></li></ul></nav></header></div><main><section class=homepage-hero aria-labelledby=homepage-title><div class=homepage-hero__content><p>Hi, I’m <a href=https://martylamb.com>Marty</a>. I build practical software that’s simple, useful, and designed to last.</p><p><a href=chatkeeper>ChatKeeper</a> is my desktop app for syncing your official ChatGPT exports into local Markdown and image files you <i>actually own</i> and can organize however you want.</p><p>If you’re here for <a href=#open-source-projects>open source</a>, scroll down and explore the libraries and tools I’ve released over the years.</p><p>Questions about anything here? <a href="/cdn-cgi/l/email-protection#f8ddcebcddcec9ddcfcaddcfccddcfc1ddccc8ddcebcddcec9ddcfcaddcfccddcec1ddcec9ddcebdddcfcbddcebeddceceddcfccddcfcfddcec9ddcfcaddcecdddcabdddcecbddcebeddcebc">Reach out!</a> I'd love to hear from you.</p></div><figure class=homepage-hero__figure><a href=/chatkeeper/><img src=/chatkeeper/overreaction_v4.png alt="ChatKeeper image styled like a over-the-top youtube thumbnail." loading=eager></a><figcaption>ChatKeeper is my current flagship project.</figcaption><div class="homepage-hero__actions homepage-hero__actions--right"><a class=homepage-hero__primary href=/chatkeeper/>Explore ChatKeeper</a></div></figure></section><hr><h2 id=open-source-projects>Open Source Projects</h2><p>These are the libraries and tools I’ve released over the years. Some are current, some are older. Most are still useful.</p><table><thead><tr><th>Project</th><th>Last Update</th><th>Description</th></tr></thead><tbody><tr><td><a href=https://github.com/martylamb/atomicfileoutputstream>atomicfileoutputstream</a></td><td>2023/11/20</td><td>A drop-in <code>FileOutputStream</code> replacement for java that performs all-or-nothing file overwrites to ensure data integrity.</td></tr><tr><td><a href=https://github.com/martylamb/blobstore>blobstore</a></td><td>2023/11/13</td><td>A simple java API for providing a content-addressable, local disk-backed data store.</td></tr><tr><td><a href=https://github.com/martylamb/hope-and-doubt>hope and doubt</a></td><td>2019/07/13</td><td>A tiny validation library for java that provides both optimistic (hope) and pessimistic (doubt) validation, throwing unchecked and checked validation exceptions, respectively.</td></tr><tr><td><a href=https://github.com/martylamb/macnificent>macnificent</a></td><td>2023/10/23</td><td>Utility classes for working with MAC addresses and IEEE OUI registry information in java.</td></tr><tr><td><a href=https://github.com/martylamb/martian-hex>martian-hex</a></td><td>2023/11/13</td><td>A simple java library for converting binary data to and from hexadecimal in a variety of formats.</td></tr><tr><td><a href=https://github.com/martylamb/martian-log>martian-log</a></td><td>2023/11/13</td><td>Simple extensions for slf4j that provide additional functionality and ergonomics.</td></tr><tr><td><a href=https://github.com/martylamb/tictac>tictac</a></td><td>2014/10/19</td><td>A typesafe text template-to-java precompiler that allows for arbitrary java code in templates.</td></tr><tr><td><a href=https://github.com/martylamb/twothousandfortyeight>twothousandfortyeight</a></td><td>2023/11/21</td><td>A silly but fun text adventure adaptation of the game <a href=https://www.2048.org/>2048</a>.</td></tr></tbody></table><hr><h2 id=archived-projects>Archived Projects</h2><p><strong>These projects are no longer maintained.</strong> Some are very old.</p><table><thead><tr><th>Project</th><th>Last Update</th><th>Description</th></tr></thead><tbody><tr><td><a href=lab/jar2sh.html>jar2sh</a></td><td>2009/05/04</td><td>Embed an entire java application in an executable shell script.</td></tr><tr><td><a href=jsap/>jsap</a></td><td>2006/08/04</td><td>Parse your command line into Objects instead of Strings.</td></tr><tr><td><a href=nailgun/>nailgun</a></td><td>2017/10/14</td><td>Eliminate jvm startup time by running applications in a persistent virtual machine.</td></tr><tr><td><a href=nearshare/>nearshare.net</a></td><td>¯\_(ツ)_/¯</td><td>A very easy way to transfer files within a network.</td></tr><tr><td><a href=lab/rundoc.html>rundoc</a></td><td>2004/02/17</td><td>Keep documentation up to date by running example code automatically as you publish.</td></tr><tr><td><a href=lab/snip.html>snip</a></td><td>2004/02/17</td><td>Keep source code snippets in sync with documentation by extracting sources automatically as you publish.</td></tr><tr><td><a href=tarproxy/>tarproxy</a></td><td>2004/04/18</td><td>Statistically control an SMTP tarpit to annoy spammers.</td></tr><tr><td><a href=lab/tivonage.html>tivonage</a></td><td>2006/03/13</td><td>Check your Vonage voice mail on your TiVo.</td></tr><tr><td><a href=trivialpersist/>trivial persist</a></td><td>2008/03/13</td><td>An incredibly simple java object persistence mechanism.</td></tr></tbody></table><hr><h2 id=working-on-something-adjacent>Working on something adjacent?</h2><p>If you&rsquo;re building something thoughtful around privacy, local-first tools, developer experience, or just software that both users and developers can <em>actually understand</em>, <a href="/cdn-cgi/l/email-protection#acc4c9c0c0899aeaecc1cdded8899a95cdc2df899aeacad8899b9b899a9ddec982899a9fc3c1">I&rsquo;d love to compare notes</a>.</p></main><div class=hf-container><div align=center width=100%><img alt="Martian Software, Inc. footer logo" src=/martiansoftware-bottomlogo.png style=width:25%;max-width:170px;padding-bottom:1em></div><footer class=topOrBottom><div class=footerlinks><a href=/about.html>About</a>
&nbsp;&nbsp;⋅&nbsp;&nbsp;
<a href="/cdn-cgi/l/email-protection#8ca9bac8a9babda9bbbea9bbb8a9bbb5a9b8bca9bac8a9babda9bbbea9bbb8a9bab5a9babda9bac9a9bbbfa9bacaa9babaa9bbb8a9bbbba9babda9bbbea9bab9a9bec9a9babfa9bacaa9bac8">Contact</a>
&nbsp;&nbsp;⋅&nbsp;&nbsp;
Martian mascot and logo design by <a href=https://betsylamb.myportfolio.com/>Betsy Lamb</a></div></footer></div><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script async defer src=https://scripts.withcabin.com/hello.js></script></body></html>