<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Belchamber Tools - Articles &amp; Guides</title><description>Free developer tools that run in your browser - timestamp, unit, temperature and image conversion - plus a working archive of notes on PHP, Symfony, WordPress and the web stack.</description><link>https://tools.belchamber.us/</link><language>en</language><item><title>An Angular auth interceptor, the functional way</title><link>https://tools.belchamber.us/code-snippets/angular/functional-auth-interceptor/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/angular/functional-auth-interceptor/</guid><description>Attach a token to every outgoing request and handle a 401 in one place, using the functional HttpInterceptorFn rather than the class-based interceptor most search results still show.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Grouping and summarizing a list in modern Java</title><link>https://tools.belchamber.us/code-snippets/java/grouping-with-streams/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/java/grouping-with-streams/</guid><description>Collectors.groupingBy with a downstream collector replaces most of the loop-and-map code people still write - plus records, which remove the class that loop needed.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Lighthouse Now Grades Your Site for AI Agents. Here Is What It Checks.</title><link>https://tools.belchamber.us/ai/ai-and-the-web/lighthouse-agentic-browsing/</link><guid isPermaLink="true">https://tools.belchamber.us/ai/ai-and-the-web/lighthouse-agentic-browsing/</guid><description>Lighthouse has a fifth category, Agentic Browsing, and one of its audits reads your llms.txt. Three sites failed it for the same undocumented reason, and the API will not give you the category unless you ask for it by a name that is not in the docs.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Reading a huge file line by line in Node, without loading it</title><link>https://tools.belchamber.us/code-snippets/nodejs/read-large-file-line-by-line/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/nodejs/read-large-file-line-by-line/</guid><description>readFileSync on a 2GB log is how a Node process dies. Streaming it line by line uses a constant few kilobytes instead, and is barely more code.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Reading a huge CSV in PHP without exhausting memory</title><link>https://tools.belchamber.us/code-snippets/php/stream-a-large-csv/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/php/stream-a-large-csv/</guid><description>file() and str_getcsv on a large export will hit the memory limit. Streaming it with fgetcsv uses a few kilobytes regardless of file size, and handles quoted newlines correctly.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Retrying an HTTP request in Python, properly</title><link>https://tools.belchamber.us/code-snippets/python/http-retry-with-backoff/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/python/http-retry-with-backoff/</guid><description>A retry with exponential backoff and jitter that only retries what is worth retrying - and does not hammer a service that is already struggling.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Converting .png and .jpg Images to .webp Can Improve Your Site Performance with This Free PHP Script</title><link>https://tools.belchamber.us/code-snippets/php/png-and-jpg-to-webp/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/php/png-and-jpg-to-webp/</guid><description>Converting .png and .jpg Images to .webp Can Improve Your Site Performance with This Free PHP Script</description><pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate></item><item><title>What are the top Angular 19 CLI commands I should memorize for daily use?</title><link>https://tools.belchamber.us/code-snippets/angular/angular-19-cli-commands/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/angular/angular-19-cli-commands/</guid><description>Here are the top Angular 19 CLI commands every developer should know since you will likely use them every day. Click here to get your free Angular 19 Cheat Sheet &amp; Study Guide!</description><pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Find Broken Images on Your Website Fast with This Free Plugin</title><link>https://tools.belchamber.us/articles/wordpress-articles/find-broken-images-plugin/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/wordpress-articles/find-broken-images-plugin/</guid><description>After migrating an old site (kind of like this) you might wonder if there are some broken images on your site. I found this plug-in to be easy to install and very quickly you can get a list of any posts or pages with…</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Guidance for High School Students Considering Tech Careers Amid AI Disruption</title><link>https://tools.belchamber.us/ai/tech-careers-for-students-amid-ai/</link><guid isPermaLink="true">https://tools.belchamber.us/ai/tech-careers-for-students-amid-ai/</guid><description>So many young adults and high-schoolers seem to be disheartened with the rise of AI in tech. Those young minds who LOVE to write code are being dissuaded to even bother studying the art of software development and…</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Why do we have school teachers enter numbers at car line pickup when robots can do it?</title><link>https://tools.belchamber.us/articles/free-solutions/automating-school-pickup-lines/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/free-solutions/automating-school-pickup-lines/</guid><description>Here’s a practical application that can help schools with parent pickup and reduce unpleasant tasks and time burdening school staff.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Blender and Mixamo: Repeating Animations Like Walk Cycles in Two Steps!</title><link>https://tools.belchamber.us/articles/blender/mixamo-looping-walk-cycles/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/blender/mixamo-looping-walk-cycles/</guid><description>Importing animations, especially for characters can get tricky but it’s getting easier. I’ve seen a lot of tutorials about Blender and Mixamo but this is the best so far imo.</description><pubDate>Mon, 27 May 2024 00:00:00 GMT</pubDate></item><item><title>Tapo vs Kasa Cameras: It Came Down to Which One Supports ONVIF</title><link>https://tools.belchamber.us/articles/hardware/tapo-vs-kasa-onvif/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/hardware/tapo-vs-kasa-onvif/</guid><description>Though both are owned by TP-LINK, between the two webcams I’d suggest the Tapo because Kasa’s cams are closed to third-party monitoring tools, which was not a very bright decision.</description><pubDate>Mon, 27 May 2024 00:00:00 GMT</pubDate></item><item><title>Windows Dictation stuck on “Initializing…” and never starts</title><link>https://tools.belchamber.us/articles/windows/dictation-stuck-on-initializing/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/windows/dictation-stuck-on-initializing/</guid><description>Ever since I broke my wrist I found myself exploring the tools available to minimize the need for actually typing. I am using Windows dictation right now to write this article and I think this will help others find the…</description><pubDate>Wed, 03 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Git error: “git dst refspec matches more than one”</title><link>https://tools.belchamber.us/articles/repositories-vcs/git-dst-refspec-matches-more-than-one/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/repositories-vcs/git-dst-refspec-matches-more-than-one/</guid><description>You may get this error when pushing a commit to your repo. The most likely suspect is that someone named a tag the exact name of the branch. You can rename the tag or delete it and retry pushing the commit.</description><pubDate>Sat, 07 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Deploying a Node.js Server with Dreamhost</title><link>https://tools.belchamber.us/articles/node/deploy-node-on-dreamhost/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/node/deploy-node-on-dreamhost/</guid><description>I’d like to shout out David Herron from TechSparx for writing a quick and easy to follow tutorial for deploying Node.js on a Dreamhost server! Super easy instructions and examples to follow, worked like a charm!</description><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Rendering Twig templates from Symfony Repository without Using Dependency Injection (DIC)</title><link>https://tools.belchamber.us/code-snippets/php/render-twig-outside-a-controller/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/php/render-twig-outside-a-controller/</guid><description>Sometimes it’s useful to access Twig templates from a Symfony repository, one could argue that this goes against a repository’s role, but if you think of Twig template files or Twig strings perhaps grabbed from a…</description><pubDate>Thu, 04 Jul 2019 00:00:00 GMT</pubDate></item><item><title>Symfony &amp; Doctrine: Using table joins with unassociated entities</title><link>https://tools.belchamber.us/articles/symfony-twig-doctrine-orms/symfony-and-doctrine/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/symfony-twig-doctrine-orms/symfony-and-doctrine/</guid><description>In Symfony using Doctrine, if no association is available for two entities, you can still join them and treat them like they have a relationship. To do so, you have to use the “Join: WITH” method.</description><pubDate>Mon, 25 Jan 2016 00:00:00 GMT</pubDate></item><item><title>PHP: Checking if a form was posted with “REQUEST_METHOD” server global</title><link>https://tools.belchamber.us/code-snippets/php/check-if-a-form-was-posted/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/php/check-if-a-form-was-posted/</guid><description>Something so simple, let’s say even in a framework like Symfony which I use all the time you want to just check to see if the incoming request was initiated by an actual form post. Here’s the best way to check:</description><pubDate>Mon, 28 Dec 2015 00:00:00 GMT</pubDate></item><item><title>Javascript: A simple way when validating forms to ensure at least one checkbox is checked</title><link>https://tools.belchamber.us/code-snippets/javascript/require-one-checkbox/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/javascript/require-one-checkbox/</guid><description>Check so at least one checkbox on your form is checked before it’s allowed to submit:</description><pubDate>Sun, 27 Dec 2015 00:00:00 GMT</pubDate></item><item><title>General API interface with CURL: A simple way to access most APIs — use as is or extend as necessary</title><link>https://tools.belchamber.us/code-snippets/php/simple-curl-api-wrapper/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/php/simple-curl-api-wrapper/</guid><description>Since you likely interface with a lot of external APIs, there’s no need to keep rewriting the same tool. Just copy this and use the “apiBaseController” class as you need it.</description><pubDate>Sat, 26 Dec 2015 00:00:00 GMT</pubDate></item><item><title>Symfony Twig view conditionally shows current username of user logged in</title><link>https://tools.belchamber.us/articles/symfony-twig-doctrine-orms/twig-show-current-username/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/symfony-twig-doctrine-orms/twig-show-current-username/</guid><description>Here is a quick way to access the user object from the Symfony user or the FOSUserBundle. In this Twig example below is a conditional statement that if the user is authenticated and has a role, it will display “Hi Aaron…</description><pubDate>Tue, 28 Apr 2015 00:00:00 GMT</pubDate></item><item><title>How to show or access cookie values in Symfony Twig views</title><link>https://tools.belchamber.us/code-snippets/twig-doctrine/read-cookies-in-twig/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/twig-doctrine/read-cookies-in-twig/</guid><description>Strange how obscure it is to find a clear example of how to just access or show the value of a cookie in Twig, so here it is!</description><pubDate>Thu, 02 Apr 2015 00:00:00 GMT</pubDate></item><item><title>Symfony MySQL Doctrine Mapping Field Type Definitions: TinyInt’s a Boolean, Any Kind of “Text” is Just “text” and Other “Gotchas”</title><link>https://tools.belchamber.us/articles/symfony-twig-doctrine-orms/doctrine-mapping-field-types/</link><guid isPermaLink="true">https://tools.belchamber.us/articles/symfony-twig-doctrine-orms/doctrine-mapping-field-types/</guid><description>A MySQL “tinyint” field, regardless of length, is mapped as a boolean in Symfony’s MySQL DBAL platform. Good to know, so when you start typing in those Doctrine ORM mapping files in annotation or my preferred way, YML…</description><pubDate>Tue, 24 Mar 2015 00:00:00 GMT</pubDate></item><item><title>PHP Symfony: Access the internationalization “locale”</title><link>https://tools.belchamber.us/code-snippets/symfony/access-the-locale/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/access-the-locale/</guid><description>In your controller, you can access the special global “_locale” variable from the Request object:</description><pubDate>Thu, 01 Jan 2015 00:00:00 GMT</pubDate></item><item><title>Setting a Doctrine query limit in Sensio Lab’s Symfony PHP framework for customer queries in respositories</title><link>https://tools.belchamber.us/code-snippets/symfony/doctrine-query-limit/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/doctrine-query-limit/</guid><description>Here is an example of a simple DQL query in a custom repository method meant to return a single array result. The following will return the latest result in case there are multiple contact records that match the…</description><pubDate>Thu, 01 Jan 2015 00:00:00 GMT</pubDate></item><item><title>MySQL: Exclude ‘group by’ group if field A in any row has value B with “Natural Join”</title><link>https://tools.belchamber.us/code-snippets/mysql/exclude-a-group-by-group/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/mysql/exclude-a-group-by-group/</guid><description>Querying databases get a little tricky when you have a stack of records associated with another table, perhaps a master table of accounts, and you’re trying to filter out values that would exclude the results from…</description><pubDate>Sun, 21 Dec 2014 00:00:00 GMT</pubDate></item><item><title>Disable WordPress theme and plug-in file editing from inside admin</title><link>https://tools.belchamber.us/code-snippets/wordpress/disable-theme-and-plugin-editor/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/disable-theme-and-plugin-editor/</guid><description>To tighten security of your WordPress site, you can disable users’ ability to edit your theme and plug-in files. After all, isn’t that what your web development team should be doing?</description><pubDate>Sun, 16 Nov 2014 00:00:00 GMT</pubDate></item><item><title>Symfony &amp; Doctrine: Using try… catch to determine success or failure of database insert or update action</title><link>https://tools.belchamber.us/code-snippets/symfony/doctrine-try-catch-insert-update/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/doctrine-try-catch-insert-update/</guid><description>In Doctrine, there is no simple way to access the Doctrine object and get the status of the last attempt at inserting or updating the database.</description><pubDate>Thu, 23 Oct 2014 00:00:00 GMT</pubDate></item><item><title>Symfony Doctrine’s version of MySQL’s “IN” — as in “values contained in”</title><link>https://tools.belchamber.us/code-snippets/symfony/doctrine-equivalent-of-sql-in/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/doctrine-equivalent-of-sql-in/</guid><description>MySQL’s “IN” query filter is very useful. Basically, if you have a list of record ID numbers, you can query them all neatly like so:</description><pubDate>Thu, 04 Sep 2014 00:00:00 GMT</pubDate></item><item><title>Creating a credit card month/year form field input in Symfony 2.5</title><link>https://tools.belchamber.us/code-snippets/symfony/credit-card-expiry-form-field/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/credit-card-expiry-form-field/</guid><description>Creating a credit card month/year input can be accomplished with a single database field but Symfony is smart enough to create multiple pull downs for each.</description><pubDate>Thu, 21 Aug 2014 00:00:00 GMT</pubDate></item><item><title>CollabPress: A simple project management tool inside a free WordPress plug-in</title><link>https://tools.belchamber.us/code-snippets/wordpress/collabpress-project-management/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/collabpress-project-management/</guid><description>Some people are so enamored with these shiny new project management tools that load so nicely on our smart phones that they forget it should be a transparent part of the project and not a task and part of the process of…</description><pubDate>Wed, 06 Aug 2014 00:00:00 GMT</pubDate></item><item><title>Adding custom form field errors within controllers in Symfony</title><link>https://tools.belchamber.us/code-snippets/symfony/add-form-field-error-in-controller/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/add-form-field-error-in-controller/</guid><description>Every field in Symfony now is an instance of a form object. To add custom errors in the controller upon form submission, you have to access the form object of the field then add the custom error to it.</description><pubDate>Fri, 25 Jul 2014 00:00:00 GMT</pubDate></item><item><title>Symfony, Twig and dynamic forms: How to access and format “prototype” template HTML for dynamic elements inside Twig</title><link>https://tools.belchamber.us/code-snippets/symfony/twig-collection-prototype/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/symfony/twig-collection-prototype/</guid><description>Let’s say you are creating a form in Symfony that has some dynamic fields that you need to allow the user to add and remove a subset of options and fields from within the form.</description><pubDate>Tue, 24 Jun 2014 00:00:00 GMT</pubDate></item><item><title>Need multiple contact forms on your WordPress website?</title><link>https://tools.belchamber.us/code-snippets/wordpress/multiple-contact-forms/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/multiple-contact-forms/</guid><description>There are plenty of contact form plug-ins for WordPress. I’ve used a few that I thought would be good but turned out to be barely functional, clunky, and/or buggy.</description><pubDate>Sun, 16 Mar 2014 00:00:00 GMT</pubDate></item><item><title>Redirect a webpage with PHP</title><link>https://tools.belchamber.us/code-snippets/php/redirect-a-page-in-php/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/php/redirect-a-page-in-php/</guid><description>There are plenty of reasons to need to redirect a page. If you do, you here is a sample PHP code snippet that will allow you to point a page to another page on your site or any other site quickly and easily.</description><pubDate>Sat, 15 Mar 2014 00:00:00 GMT</pubDate></item><item><title>Make a custom WordPress shortcode that will allow you to show a list of pages or posts , show an excerpt and/or post image and access the wp_query and loop custom results with flexibility</title><link>https://tools.belchamber.us/code-snippets/wordpress/shortcode-to-list-posts/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/shortcode-to-list-posts/</guid><description>In WordPress, you can do a lot with shortcodes, the problem is, some work fine then one day they just break. It’s best to stick with ones that work reliably, even when you upgrade.</description><pubDate>Sat, 08 Mar 2014 00:00:00 GMT</pubDate></item><item><title>Ensure certain elements on a page display in matching heights throughout.</title><link>https://tools.belchamber.us/code-snippets/jquery/equal-height-elements/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/jquery/equal-height-elements/</guid><description>There are some new CSS tricks coming out that will allow for this to be done natively, but until then, here’s a way to make sure that all elements in a page, say gallery thumbnails or excerpts from posts, all display…</description><pubDate>Wed, 26 Feb 2014 00:00:00 GMT</pubDate></item><item><title>How do I make it easy to insert PHP code or an entire PHP file into a WordPress page, post or widget? Make a shortcode!</title><link>https://tools.belchamber.us/code-snippets/wordpress/shortcode-to-include-a-php-file/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/shortcode-to-include-a-php-file/</guid><description>This is one of my all-time useful and favorite WordPress shortcodes ever. It’s so simple, just put the code below into your active theme’s function.php file and now you have a very flexible and powerful shortcode where…</description><pubDate>Wed, 26 Feb 2014 00:00:00 GMT</pubDate></item><item><title>Turn on WordPress Debugging</title><link>https://tools.belchamber.us/code-snippets/wordpress/turn-on-debugging/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/turn-on-debugging/</guid><description>When you’re in development mode, it’s useful to get errors in scripts as they occur. Just place this line anywhere in your functions.php file for your active child theme and you will start seeing debug feedback complete…</description><pubDate>Wed, 26 Feb 2014 00:00:00 GMT</pubDate></item><item><title>How do I remove the “HTML Markup” after the comment form in WordPress?</title><link>https://tools.belchamber.us/code-snippets/wordpress/remove-markup-after-comment-form/</link><guid isPermaLink="true">https://tools.belchamber.us/code-snippets/wordpress/remove-markup-after-comment-form/</guid><description>Find the line in your child theme’s “comment.php” file where it calls on the function comment_form() and replace that line with this:</description><pubDate>Tue, 25 Feb 2014 00:00:00 GMT</pubDate></item></channel></rss>