<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[David Sielert]]></title><description><![CDATA[Random thoughts and musings of a Super Geek extraordinaire]]></description><link>https://sielert.com/</link><image><url>https://sielert.com/favicon.png</url><title>David Sielert</title><link>https://sielert.com/</link></image><generator>Ghost 2.7</generator><lastBuildDate>Fri, 03 Apr 2026 21:21:38 GMT</lastBuildDate><atom:link href="https://sielert.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Fluentd configuration for pfsense]]></title><description><![CDATA[<p>Been really busy with work and the recent switch to Devops team but here's a little something I did for my personal use that I found useful to send my pfsense logs to elasticsearch via fluentd (highly reccomend opendistro aswell btw)</p><p><a href="https://github.com/davidsielert/pfsense_fluentd">https://github.com/davidsielert/pfsense_fluentd</a></p>]]></description><link>https://sielert.com/pfsense_fluentd/</link><guid isPermaLink="false">5d1e81a9fc1d4749fc0bcfb5</guid><category><![CDATA[linux]]></category><category><![CDATA[elasticsearch]]></category><category><![CDATA[devops]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Thu, 04 Jul 2019 22:50:06 GMT</pubDate><content:encoded><![CDATA[<p>Been really busy with work and the recent switch to Devops team but here's a little something I did for my personal use that I found useful to send my pfsense logs to elasticsearch via fluentd (highly reccomend opendistro aswell btw)</p><p><a href="https://github.com/davidsielert/pfsense_fluentd">https://github.com/davidsielert/pfsense_fluentd</a></p>]]></content:encoded></item><item><title><![CDATA[Just a little something I'm working on for fun (Gallery)]]></title><description><![CDATA[<p>A little side project for a gaming group &amp; podcast. I frequent with some long time friends</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/div.png" width="974" height="761"></div><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/fortnite.png" width="1558" height="1218"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/minecraft.png" width="1558" height="1218"></div><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/navbar.png" width="1558" height="66"></div></div></div></figure><p></p><p>Built using Bootstrap 4.1, Font Awesome for frontend UX. </p><p>Backend is a Java Spring Boot Application utilizing JPA (Hibernate), Spring Security, Spring MVC. </p><p></p><p>I'll post a link when its finished! </p><p></p>]]></description><link>https://sielert.com/just-a-little-something-im-working-on-for-fun/</link><guid isPermaLink="false">5c7cc00cfc1d4749fc0bcf8c</guid><category><![CDATA[Random]]></category><category><![CDATA[Java]]></category><category><![CDATA[Bootstrap]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Mon, 04 Mar 2019 06:12:35 GMT</pubDate><content:encoded><![CDATA[<p>A little side project for a gaming group &amp; podcast. I frequent with some long time friends</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/div.png" width="974" height="761"></div><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/fortnite.png" width="1558" height="1218"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/minecraft.png" width="1558" height="1218"></div><div class="kg-gallery-image"><img src="https://sielert.com/content/images/2019/03/navbar.png" width="1558" height="66"></div></div></div></figure><p></p><p>Built using Bootstrap 4.1, Font Awesome for frontend UX. </p><p>Backend is a Java Spring Boot Application utilizing JPA (Hibernate), Spring Security, Spring MVC. </p><p></p><p>I'll post a link when its finished! </p><p></p>]]></content:encoded></item><item><title><![CDATA[iPhone XS/XS Max Dock]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://sielert.com/content/images/2018/12/FullSizeRender.JPEG" class="kg-image"></figure><p>This is just a small feature of one of my favorite hobbies. Several iterations of this design and both a Max and XS version.</p><p>Check it out @ <a href="https://www.thingiverse.com/thing:3165131">https://www.thingiverse.com/thing:3165131</a> </p>]]></description><link>https://sielert.com/iphone-xs-xs-max-dock/</link><guid isPermaLink="false">5c0dbb42738f536f134b630b</guid><category><![CDATA[3d Printing]]></category><category><![CDATA[3d Modeling]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Mon, 10 Dec 2018 01:08:07 GMT</pubDate><media:content url="https://sielert.com/content/images/2018/12/FullSizeRender-1.JPEG" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://sielert.com/content/images/2018/12/FullSizeRender.JPEG" class="kg-image" alt="iPhone XS/XS Max Dock"></figure><img src="https://sielert.com/content/images/2018/12/FullSizeRender-1.JPEG" alt="iPhone XS/XS Max Dock"><p>This is just a small feature of one of my favorite hobbies. Several iterations of this design and both a Max and XS version.</p><p>Check it out @ <a href="https://www.thingiverse.com/thing:3165131">https://www.thingiverse.com/thing:3165131</a> </p>]]></content:encoded></item><item><title><![CDATA[Laravel Queued Cookies]]></title><description><![CDATA[<p>Just a quick shout out to a not-so-documented feature of the Laravel/Symfony Cookie-bag.. Cookie::queued() allows you to retrieve cookies which were queued for creation on this request. </p>]]></description><link>https://sielert.com/laravel-queued-cookies/</link><guid isPermaLink="false">5c06eeda738f536f134b6303</guid><category><![CDATA[PHP]]></category><category><![CDATA[Laravel]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Tue, 04 Dec 2018 21:18:24 GMT</pubDate><content:encoded><![CDATA[<p>Just a quick shout out to a not-so-documented feature of the Laravel/Symfony Cookie-bag.. Cookie::queued() allows you to retrieve cookies which were queued for creation on this request. </p>]]></content:encoded></item><item><title><![CDATA[API Gateway timeout gotcha with AWS Lambda]]></title><description><![CDATA[<p>At a company I've been working with, we have a set of some 33 odd or so Lambda functions that are triggered via Amazon's API Gateway. We recently discovered (the hard way!) about a unclearly documented limitation of using API gateway to trigger lambda functions.<br>
Per the <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html">Amazon documentation on</a></p>]]></description><link>https://sielert.com/api-gateway-gotcha-with-aws-lambda/</link><guid isPermaLink="false">5a494812a7ad1079f29bd7dc</guid><category><![CDATA[AWS Lambda]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Tue, 02 Jan 2018 22:00:00 GMT</pubDate><content:encoded><![CDATA[<p>At a company I've been working with, we have a set of some 33 odd or so Lambda functions that are triggered via Amazon's API Gateway. We recently discovered (the hard way!) about a unclearly documented limitation of using API gateway to trigger lambda functions.<br>
Per the <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html">Amazon documentation on the API Gateway Limits</a></p>
<pre>Integration timeout	50 milliseconds - 29 seconds for all integration types, including Lambda, Lambda proxy, HTTP, HTTP proxy, and AWS integrations.</pre>
<p>This can be somewhat conflicting if your new to lambda like I was, as the UI in Lambda has an option to configure the timeout for up to 5 minutes. What you need to understand is that this timeout is for the function itself. Amazon API gateway is a separate service that requires a response from the lambda function within 29 seconds or you will receive the infamous &quot;Endpoint request timed out&quot; response.</p>
<p>Your options are that you can use one of Amazon's other services like SQS to trigger the lambda function thereby incurring no timeout, but I'm guessing that like us, that would probably require a major overhaul to both your lambda code and what ever service is relying on it.</p>
<p>Luckily, we were able to put our heads together and figure out that even though the API gateway process times out the lambda function still runs (up to the 5 minute limit) it just has no way to return a response when the gateway times out. So we were able to quickly put our heads together and easily refactor existing code to POST to a callback URL. Problem solved!</p>
]]></content:encoded></item><item><title><![CDATA[Vuejs Child component $refs - What are they good for?]]></title><description><![CDATA[<p>Child component refs are somewhat <a href="http://https://vuejs.org/v2/guide/components.html#Child-Component-Refs">documented in the offical documentation</a>. But it doesn't really show you what or why you might need to do this. I have found that utilizting child component refs a somewhat edge case,but very useful.<br>
so creating them can be as simple as:</p>
<pre><code language="html"><my-custom-component ref="myCompInstance"></my-custom-component></code></pre>
<p>$refs, while</p>]]></description><link>https://sielert.com/vuejs-child-component-refs/</link><guid isPermaLink="false">5a49447ea7ad1079f29bd7d8</guid><category><![CDATA[Vue JS]]></category><category><![CDATA[Javascript]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Sun, 31 Dec 2017 20:26:07 GMT</pubDate><content:encoded><![CDATA[<p>Child component refs are somewhat <a href="http://https://vuejs.org/v2/guide/components.html#Child-Component-Refs">documented in the offical documentation</a>. But it doesn't really show you what or why you might need to do this. I have found that utilizting child component refs a somewhat edge case,but very useful.<br>
so creating them can be as simple as:</p>
<pre><code language="html"><my-custom-component ref="myCompInstance"></my-custom-component></code></pre>
<p>$refs, while used on a normal HTML element will give you the DOM node, creating a ref on a component will give you direct access to its Vue instance allowing you to call methods, access properties etc.</p>
<pre><code language="javscript">
export default {
    methods: {
        callChildComponentMethod() {
           this.$refs.myCompInstance.deleteSomething();
       },
       accessChildComponentData() {
           this.$refs.myCompInstance.someDataField.
       }
    }
}
</code></pre>
<p>This can really be useful, in my own cases instead of having to pass function refs back and forth between the parent and child as props. But just keep in mind the warning the offical documentation points out</p>
<pre style="color:red;">$refs are only populated after the component has been rendered, and it is not reactive. It is only meant as an escape hatch for direct child manipulation - you should avoid using $refs in templates or computed properties.</pre>]]></content:encoded></item><item><title><![CDATA[Vuex made easy using vue-deepset]]></title><description><![CDATA[I have had the privilege of working with Vue + Vuex for about the last year or so. One of the more tediuous problems that I discovered early on with using these two libraries is that writing a getter and a setter for every form field and state value can get tedious!]]></description><link>https://sielert.com/vuex-made-easy-using-vue-deepset/</link><guid isPermaLink="false">5a47dcf9f9eb2f78a0b8feb2</guid><category><![CDATA[Javascript]]></category><category><![CDATA[Vue JS]]></category><dc:creator><![CDATA[David Sielert]]></dc:creator><pubDate>Sat, 30 Dec 2017 19:40:13 GMT</pubDate><content:encoded><![CDATA[<h2 id="problem">Problem</h2>
<p>So I have had the privilege of working with Vue + Vuex for about the last year or so. One of the more tediuous problems that I discovered early on with using these two libraries is that writing a getter and a setter for every form field and state value can get tedious really fast, and quickly become a nightmare to maintain! <a href="https://vuex.vuejs.org/en/forms.html">Read more on form handling from the Vuex documentation.</a></p>
<h2 id="solution">Solution</h2>
<p>At first I remembered reading about Proxy Objects in ES2015 and I thought why not have a master mutator with a proxy object to set multiple fields, so I developed our own in house solution which worked for quite a while but then I discovered (Credit: <a href="http://honopu.com">Scott Conrad</a>) the more fleshed out <a href="https://github.com/bhoriuchi/vue-deepset">Vue-Deepset</a> written by Branden Horiuchi.</p>
<h2 id="howtosetup">How to setup</h2>
<p>Branden's documentation on Vue-deepset is pretty good, but the Vuex implementation is a little bit confusing at first so heres a quick run down.</p>
<p>In your Vue Applications entry point (usually something like main.js).</p>
<pre><code data-language="javascript">import * as VueDeepSet from 'vue-deepset';
Vue.use(VueDeepSet);
</code></pre>
<p>Then in your store you want to wrap your global mutators in extendMutation so that deepset can insert its global mutator in the stack:</p>
<pre><code data-language="javascript">
import * as VueDeepSet from 'vue-deepset';
const mutations = VueDeepSet.extendMutation({
//...mutators here.. 
 [types.MY_MUTATOR](state, value) { //old mutator 
        Vue.set(state.myVal, 'key', value);
    },
});
</code></pre>
<p>After this is done you have access to a couple new instance methods from your components</p>
<ul>
<li>this.$deepModel ( path:String ) - creates a proxy object from the given store path</li>
<li>this.$vuexSet (path:String, value:*) mutates a value for the given path</li>
</ul>
<p>So an example usage would be from a component</p>
<pre><code data-language="javascript">computed: {
    form() {
      return this.$deepModel("myModule.theForm");
    },
</code></pre>
<p>which will in turn let you use two-way binding via v-model directives on your form inputs like so:</p>
<pre><code data-language="html">
<div id="app">
  <input type="text" v-model="form['myValue']">
  <!-- I actually prefer this syntax but there is use cases for the above aswell !-->
    <input type="text" v-model="form.myValue">
</div></code></pre>
<p>As an added bonus $vuexSet is pretty useful as-well. Say you have a button that just needs to simply change a store value, this store value could be out of the scope of your current model per say, you could create a new $deepModel proxy object but instead you can do this</p>
<pre><code data-language="html"><button @click="this.$vuexSet('some.other.value',!this.$store.state.some.other.value)">Toggle It!</button>
</code></pre>
<p>I have found that pretty darned useful, and as a result I rarely clutter up my code with anymore one-off or single use mutators.<br>
One of the great features as-well is that vuex-deepset works great with <a href="https://vuex.vuejs.org/en/modules.html">Vuex modules</a> which I highly recommend using, for organization and separation of concerns.</p>
<h2 id="protips">Pro-tips</h2>
<ul>
<li>Per the deepset docs and probably just general practice you should always create the objects that your deepModel and v-model references, I've gotten into a few nasty hard-to-debug exceptions by not doing so.</li>
<li>Always create non-null (Usually Object or Array) value for the deepModel path I don't believe a proxy can be created on null values.</li>
</ul>
<p>Hope this this is useful to someone!</p>
]]></content:encoded></item></channel></rss>