<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://bmoler68.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://bmoler68.github.io/" rel="alternate" type="text/html" /><updated>2025-12-19T05:12:06+00:00</updated><id>https://bmoler68.github.io/feed.xml</id><title type="html">brianmoler.com Android Development Blog</title><subtitle>Creating Android applications that are both useful and fun.</subtitle><author><name>Brian Moler</name></author><entry><title type="html">Using Published Google Forms and Sheets as a Data Source</title><link href="https://bmoler68.github.io/2025/12/18/using-google-forms-sheets-as-data-source.html" rel="alternate" type="text/html" title="Using Published Google Forms and Sheets as a Data Source" /><published>2025-12-18T00:00:00+00:00</published><updated>2025-12-18T00:00:00+00:00</updated><id>https://bmoler68.github.io/2025/12/18/using-google-forms-sheets-as-data-source</id><content type="html" xml:base="https://bmoler68.github.io/2025/12/18/using-google-forms-sheets-as-data-source.html"><![CDATA[<p>When I started working on the requirements for the Borderlands SHiFT Code application I needed a way to provide data to the app without building a complex backend infrastructure. As my first AI generated Android application, I wanted to keep it reasonably simple.  Unfortunately, Gearbox Software does not appear to have a public API that could be used to obtain this data directly from the SHiFT servers.  So I wanted to find a solution that would allow me to quickly provide new codes to the mobile app anytime I would see them on the Gearbox social accounts.</p>

<p>After doing some research, I read about a surprisingly simple solution of using published Google Forms and Google Sheets as a data source. It turned out to be the perfect low-code approach for my needs, and I thought I’d share how it works in case it helps others in similar situations.</p>

<h3 id="the-problem-i-was-trying-to-solve">The Problem I Was Trying to Solve</h3>

<p>For the Borderlands SHiFT Codes app, I needed a way to:</p>
<ul>
  <li>Build a repository of SHiFT codes whether they are active, expired or non-expiring</li>
  <li>Have an interface that could be used to update the repository</li>
  <li>Make the data accessible to the Android app without building a complicated backend</li>
  <li>Keep the solution simple and maintainable</li>
</ul>

<p>Building a traditional backend with a database and API seemed like overkill for this particular application.  The function of this Android app was to simply provide a way to present new SHiFT codes to the community via an app as a convenience.  These SHiFT codes are public data and would not be high-volume, so a secure and scalable solution was not required.</p>

<h3 id="the-solution-google-forms--sheets-pipeline">The Solution: Google Forms + Sheets Pipeline</h3>

<p>Google Forms and Google Sheets work together to create a simple but powerful data pipeline. Here’s how I set it up:</p>

<h4 id="step-1-create-and-configure-the-form">Step 1: Create and Configure the Form</h4>

<p>I started by creating a Google Form with well-structured questions. The key here is to think about how your data will be used later.  Use clear, concise labels that will map cleanly to column headers in the sheet. I made sure to enable required fields and use data validations via regular expressions to maintain the quality of the dataset.</p>

<h4 id="step-2-link-the-form-to-a-sheet">Step 2: Link the Form to a Sheet</h4>

<p>In the Form editor, I navigated to <strong>Responses → Link to Sheets</strong> and created a new spreadsheet. Every form submission automatically appends a new row to the sheet, creating a live datastore that updates in real-time.</p>

<h4 id="step-3-publish-the-form">Step 3: Publish the Form</h4>

<p>Once the form was set up, I clicked the <strong>Send</strong> button and copied the link. I could share the form link with others who might want to contribute SHiFT codes, or I could use it myself to add new entries. The sharing settings let me control who can access it.</p>

<h4 id="step-4-publish-the-sheet">Step 4: Publish the Sheet</h4>

<p>I opened the linked Google Sheet and went to <strong>File → Share → Publish to the web</strong>.  I then selected <strong>CSV</strong> as the format. Google generates a public URL that serves the sheet data as a CSV file, which can be consumed directly by applications.</p>

<p>This published CSV URL became my app’s data source. The Android app could simply make an HTTP request to this URL, download the CSV, parse it, and display the data. No backend needed!</p>

<h3 id="how-it-works-in-practice">How It Works in Practice</h3>

<p>The workflow is simple:</p>

<p><strong>[User Input via Google Form] → [Google Sheet (live response log)] → [Published CSV → Public Data Source]</strong></p>

<p>For my Borderlands SHiFT Codes app, this meant:</p>
<ol>
  <li>I (or others) could submit SHiFT codes through the Google Form</li>
  <li>The data automatically appeared in the linked Google Sheet</li>
  <li>The published CSV URL always served the latest data</li>
  <li>My Android app fetched and parsed this CSV on startup or when refreshing</li>
</ol>

<h3 id="best-practices-i-learned-along-the-way">Best Practices I Learned Along the Way</h3>

<p>After using this approach, here are some things I’d recommend:</p>

<ul>
  <li><strong>Data Hygiene</strong>: Use consistent naming conventions for your column headers (I prefer snake_case or camelCase) to make parsing easier in your app.  I also highly recommend the use of required fields and data validation using regular expressions to maintain the integrity of the data entered in the form.</li>
  <li><strong>Availability Considerations</strong>: On rare occasion, Google will make an update to Sheets that will force sheets published as a CSV URL to be treated as a HTML URL instead.  In my case, I created a self-published fallback CSV URL on my own server as a form of fault tolerance for the app whenever this occurs.  If your app has uptime requirements, I would recommend having a backup solution in place.</li>
  <li><strong>Security Considerations</strong>: If you’re collecting sensitive data, make sure to limit form access appropriately. For public data like SHiFT codes, this wasn’t a concern</li>
  <li><strong>Schema Documentation</strong>: Document your data structure somewhere as this will help when you’re writing the parsing logic in your app</li>
  <li><strong>Automation Options</strong>: If you need more control, you can use Google Apps Script or the Drive API to automate exports, but for my use case, the simple published CSV was perfect</li>
</ul>

<h3 id="why-this-approach-worked-for-me">Why This Approach Worked for Me</h3>

<p>Using Google Forms and Sheets as a data source was ideal for my first Android app because:</p>

<ol>
  <li><strong>No Backend Required</strong>: I could focus entirely on developing the app without getting distracted by server-side concerns</li>
  <li><strong>Easy Updates</strong>: Adding new SHiFT codes was as simple as filling out a form</li>
  <li><strong>Real-time Data</strong>: The published CSV always reflected the latest data in the sheet</li>
  <li><strong>Low Maintenance</strong>: Once set up, it required minimal ongoing maintenance</li>
  <li><strong>Free</strong>: Google’s tools are free to use, which was perfect for a hobby project</li>
</ol>

<h3 id="conclusion">Conclusion</h3>

<p>Publishing Google Forms and Sheets as a public data source transformed what could have been a complex backend project into a simple, manageable solution. For the Borderlands SHiFT Codes app, it provided a way to collect, store, and serve data without building unnecessary infrastructure.</p>

<p>This approach might not be suitable for every application.  If you need complex queries, authentication, or high-performance requirements, you’ll eventually need a proper backend. But for simple data collection and distribution, especially when you’re learning or prototyping, it’s a surprisingly powerful solution that lets you focus on building your app.</p>

<p>If you’re working on your first mobile app and feeling overwhelmed by the prospect of building a backend, consider giving this approach a try. Sometimes the simplest solution is the best one.</p>]]></content><author><name>Brian Moler</name></author><category term="2025" /><category term="Development" /><summary type="html"><![CDATA[When I started working on the requirements for the Borderlands SHiFT Code application I needed a way to provide data to the app without building a complex backend infrastructure. As my first AI generated Android application, I wanted to keep it reasonably simple. Unfortunately, Gearbox Software does not appear to have a public API that could be used to obtain this data directly from the SHiFT servers. So I wanted to find a solution that would allow me to quickly provide new codes to the mobile app anytime I would see them on the Gearbox social accounts.]]></summary></entry><entry><title type="html">Borderlands SHiFT Codes v1.7.0</title><link href="https://bmoler68.github.io/2025/12/17/borderlands-shift-codes-v1-7-0-release.html" rel="alternate" type="text/html" title="Borderlands SHiFT Codes v1.7.0" /><published>2025-12-17T00:00:00+00:00</published><updated>2025-12-17T00:00:00+00:00</updated><id>https://bmoler68.github.io/2025/12/17/borderlands-shift-codes-v1-7-0-release</id><content type="html" xml:base="https://bmoler68.github.io/2025/12/17/borderlands-shift-codes-v1-7-0-release.html"><![CDATA[<p><img src="/images/BorderlandsSHiFTCodes/Banner.png" alt="Borderlands SHiFT Codes Banner" /></p>

<p>I’m excited to announce the release of <strong>Borderlands SHiFT Codes v1.7.0</strong>.  This release fixes a small issue with some SHiFT codes being truncated on the compact view.  Corrected this by removing the status dot on the compact view.  The status dot was redundant, as the compact cards already had a colored bar on the left to indicate status.</p>

<h3 id="about-the-application">About the Application</h3>

<p>Borderlands SHiFT Codes is an unofficial fan project designed to provide easy access to SHiFT codes for the Borderlands and Wonderlands gaming universe. This Android application serves as a convenient way to view and manage codes that can be redeemed on the official Gearbox SHiFT website or directly in-game.</p>

<h3 id="whats-new-in-v170">What’s New in v1.7.0</h3>

<p>Removed the redundant status dot in compact view to prevent SHiFT code text from being truncated.</p>

<h3 id="download-and-resources">Download and Resources</h3>

<ul>
  <li><strong>📥 Download APK</strong>: <a href="https://bmoler68.github.io/Releases/">Android Application Releases</a></li>
  <li><strong>🔗 GitHub Repository</strong>: <a href="https://github.com/bmoler68/BorderlandsSHiFTCodes">BorderlandsSHiFTCodes on GitHub</a></li>
</ul>

<p>For questions, support, or feedback, please contact me at bmoler@brianmoler.com.</p>]]></content><author><name>Brian Moler</name></author><category term="2025" /><category term="Releases" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">BookmarkWallet v1.1.0 - Open Source Release</title><link href="https://bmoler68.github.io/2025/11/26/bookmarkwallet-v1-1-0-release.html" rel="alternate" type="text/html" title="BookmarkWallet v1.1.0 - Open Source Release" /><published>2025-11-26T00:00:00+00:00</published><updated>2025-11-26T00:00:00+00:00</updated><id>https://bmoler68.github.io/2025/11/26/bookmarkwallet-v1-1-0-release</id><content type="html" xml:base="https://bmoler68.github.io/2025/11/26/bookmarkwallet-v1-1-0-release.html"><![CDATA[<p><img src="/images/BookmarkWallet/banner.png" alt="BookmarkWallet Banner" /></p>

<p>I’m excited to announce the release of <strong>BookmarkWallet v1.1.0</strong> and the open sourcing of this application! This version marks a significant milestone as the codebase is now publicly available on GitHub under the MIT License.</p>

<h3 id="about-the-application">About the Application</h3>

<p>BookmarkWallet is a comprehensive Android application for managing, organizing, and launching bookmarks to URLs, built for an intuitive and efficient bookmark management experience. Features include folder organization, tag system, search &amp; filter, import/export, and home screen shortcuts.</p>

<h3 id="whats-new-in-v110">What’s New in v1.1.0</h3>

<p>This release represents the <strong>open source release</strong> of the application. The complete source code is now available on GitHub.</p>

<h3 id="download-and-resources">Download and Resources</h3>

<ul>
  <li><strong>📥 Download APK</strong>: <a href="https://bmoler68.github.io/Releases/">Android Application Releases</a></li>
  <li><strong>🔗 GitHub Repository</strong>: <a href="https://github.com/bmoler68/BookmarkWallet">BookmarkWallet on GitHub</a></li>
</ul>

<p>For questions, support, or feedback, please contact me at bmoler@brianmoler.com.</p>]]></content><author><name>Brian Moler</name></author><category term="2025" /><category term="Releases" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">HexaRoll v1.2.0 - Open Source Release</title><link href="https://bmoler68.github.io/2025/11/25/hexaroll-v1-2-0-release.html" rel="alternate" type="text/html" title="HexaRoll v1.2.0 - Open Source Release" /><published>2025-11-25T00:00:00+00:00</published><updated>2025-11-25T00:00:00+00:00</updated><id>https://bmoler68.github.io/2025/11/25/hexaroll-v1-2-0-release</id><content type="html" xml:base="https://bmoler68.github.io/2025/11/25/hexaroll-v1-2-0-release.html"><![CDATA[<p><img src="/images/HexaRoll/banner.png" alt="HexaRoll Banner" /></p>

<p>I’m excited to announce the release of <strong>HexaRoll v1.2.0</strong> and the open sourcing of this application! This version marks a significant milestone as the codebase is now publicly available on GitHub under the MIT License.</p>

<h3 id="about-the-application">About the Application</h3>

<p>HexaRoll is a modern Android dice rolling application designed specifically for tabletop RPG gaming. Featuring five distinct visual themes, it provides a comprehensive dice rolling experience with 8 different polyhedral dice types, persistent roll history, and a comprehensive achievement system.</p>

<h3 id="whats-new-in-v120">What’s New in v1.2.0</h3>

<p>This release represents the <strong>open source release</strong> of the application. The complete source code is now available on GitHub.</p>

<p>Additionally, this version includes significant <strong>image asset optimization</strong> which has greatly reduced the APK size and improves overall performance of the app.</p>

<h3 id="download-and-resources">Download and Resources</h3>

<ul>
  <li><strong>📥 Download APK</strong>: <a href="https://bmoler68.github.io/Releases/">Android Application Releases</a></li>
  <li><strong>🔗 GitHub Repository</strong>: <a href="https://github.com/bmoler68/HexaRoll">HexaRoll on GitHub</a></li>
</ul>

<p>For questions, support, or feedback, please contact me at bmoler@brianmoler.com.</p>]]></content><author><name>Brian Moler</name></author><category term="2025" /><category term="Releases" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Borderlands SHiFT Codes v1.6.0 - Open Source Release</title><link href="https://bmoler68.github.io/2025/11/17/borderlands-shift-codes-v1-6-0-release.html" rel="alternate" type="text/html" title="Borderlands SHiFT Codes v1.6.0 - Open Source Release" /><published>2025-11-17T00:00:00+00:00</published><updated>2025-11-17T00:00:00+00:00</updated><id>https://bmoler68.github.io/2025/11/17/borderlands-shift-codes-v1-6-0-release</id><content type="html" xml:base="https://bmoler68.github.io/2025/11/17/borderlands-shift-codes-v1-6-0-release.html"><![CDATA[<p><img src="/images/BorderlandsSHiFTCodes/Banner.png" alt="Borderlands SHiFT Codes Banner" /></p>

<p>I’m excited to announce the release of <strong>Borderlands SHiFT Codes v1.6.0</strong> and the open sourcing of this application! This version marks a significant milestone as the codebase is now publicly available on GitHub under the MIT License.</p>

<h3 id="about-the-application">About the Application</h3>

<p>Borderlands SHiFT Codes is an unofficial fan project designed to provide easy access to SHiFT codes for the Borderlands and Wonderlands gaming universe. This Android application serves as a convenient way to view and manage codes that can be redeemed on the official Gearbox SHiFT website or directly in-game.</p>

<h3 id="whats-new-in-v160">What’s New in v1.6.0</h3>

<p>This release represents the <strong>open source release</strong> of the application. The complete source code is now available on GitHub.</p>

<h3 id="download-and-resources">Download and Resources</h3>

<ul>
  <li><strong>📥 Download APK</strong>: <a href="https://bmoler68.github.io/Releases/">Android Application Releases</a></li>
  <li><strong>🔗 GitHub Repository</strong>: <a href="https://github.com/bmoler68/BorderlandsSHiFTCodes">BorderlandsSHiFTCodes on GitHub</a></li>
</ul>

<p>For questions, support, or feedback, please contact me at bmoler@brianmoler.com.</p>]]></content><author><name>Brian Moler</name></author><category term="2025" /><category term="Releases" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Welcome to My Android Development Blog</title><link href="https://bmoler68.github.io/2025/07/10/blog-introduction.html" rel="alternate" type="text/html" title="Welcome to My Android Development Blog" /><published>2025-07-10T00:00:00+00:00</published><updated>2025-07-10T00:00:00+00:00</updated><id>https://bmoler68.github.io/2025/07/10/blog-introduction</id><content type="html" xml:base="https://bmoler68.github.io/2025/07/10/blog-introduction.html"><![CDATA[<p>I’m excited to share my journey of developing Android applications using AI agents and tools as both an experiment and a learning experience. I have created this simple blog to document the various successes and failures of this effort.</p>

<h3 id="the-experiment">The Experiment</h3>

<p>At the moment, I am focused on developing Android applications related to things I enjoy, using AI agents and tools as an experiment and learning experience. This will allow for me to learn a new technical discipline, while also providing insights into what is currently possible with the current state of AI-driven development.  These applications will be developed 100% using AI tools and agents.  While “vibe coding” is not the ideal use of the technology for application development, I am eager to see what the agents are capable of with my guidance.</p>

<h3 id="where-to-find-my-apps">Where to Find My Apps</h3>

<p>My successful AI-generated apps can be downloaded from <a href="https://bmoler68.github.io/Releases/">Android Application Releases</a> for free. I also plan to make all of the application code available on GitHub as well.  I hope the results will be as enjoyable for you as they were for me in creating them.</p>

<h3 id="about-this-blog">About This Blog</h3>

<p>I thought that I would create a simple blog that could be used to document my Android development journey. I just wanted a very simple blog implementation, so I found Chad Baldwin’s example of using GitHub Pages to build a fairly simple blog very useful:</p>

<p><a href="https://chadbaldwin.net/2021/03/14/how-to-build-a-sql-blog.html">How to Build a SQL Blog - Chad Baldwin</a></p>

<p>This is a Jekyll-based static site solution using the Minima theme and hosted using GitHub pages.  It also uses Highlight.js for syntax highlighting.  I used Chad’s template and made a slight footer layout change and also added additional Highlight.js languages related to my tech stack.</p>

<p>I will use this blog for relaying information about the Android applications I am developing and some of the successes and failures of using generative AI and agents to do this development. Through this blog, I hope to provide valuable insights for others who are interested in exploring AI-assisted development, whether for Android applications or other projects.</p>

<p>I’m looking forward to sharing my experiences with you as I explore the use of AI for mobile development.</p>]]></content><author><name>Brian Moler</name></author><category term="2025" /><summary type="html"><![CDATA[I’m excited to share my journey of developing Android applications using AI agents and tools as both an experiment and a learning experience. I have created this simple blog to document the various successes and failures of this effort.]]></summary></entry></feed>