<?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[Untold Voyage]]></title><description><![CDATA[Journal & Notebook]]></description><link>https://untoldvoyage.com/</link><image><url>https://untoldvoyage.com/favicon.png</url><title>Untold Voyage</title><link>https://untoldvoyage.com/</link></image><generator>Ghost 5.80</generator><lastBuildDate>Fri, 15 May 2026 11:54:33 GMT</lastBuildDate><atom:link href="https://untoldvoyage.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Code Tweets]]></title><description><![CDATA[The Laravel and the Vue.js online communities are very good at sharing code snippets over on Twitter. I had a whole pile of these examples loaded in tabs on my phone.]]></description><link>https://untoldvoyage.com/laravel-snippet-select-relationship-columns-in-eager-load/</link><guid isPermaLink="false">5c8f062106906c00017da79f</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Mon, 18 Mar 2019 06:06:53 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1522071820081-009f0129c71c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1522071820081-009f0129c71c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Code Tweets"><p>The Laravel and the Vue.js online communities are very good at sharing code snippets over on Twitter. I had a whole pile of these examples loaded in tabs on my phone. I would rather share them here on this journal for future reference. Enjoy.</p><!--kg-card-begin: markdown--><p><img src="https://pbs.twimg.com/media/DH92G8gV0AEmPPp.jpg" alt="Code Tweets" loading="lazy"></p>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Using <a href="https://twitter.com/laravelphp?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@laravelphp</a> Blade with a lot of JS Variables? &#x1F44F;Use &#x1F44F; the &#x1F44F; <a href="https://twitter.com/Verbatim?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@verbatim</a> &#x1F44F; directive!! <a href="https://t.co/mm8sPdQn1S?ref=untoldvoyage.com">pic.twitter.com/mm8sPdQn1S</a></p>&#x2014; Brad Madigan (@bmadigan) <a href="https://twitter.com/bmadigan/status/900137530196185088?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">August 22, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Dove into <a href="https://twitter.com/laravelphp?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@laravelphp</a> core to see if I could use &quot;only&quot; fluently and stumbled upon a few other, helpful Route methods. Why yes I can&#x2026; &#x1F44D; <a href="https://t.co/Jxg3mWAfBJ?ref=untoldvoyage.com">pic.twitter.com/Jxg3mWAfBJ</a></p>&#x2014; Jason McCreary (@gonedark) <a href="https://twitter.com/gonedark/status/903326399813091328?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">August 31, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">I wish I had known this was possible earlier in my career.<br>Time travelling using Carbon. <a href="https://t.co/hLMg5EAD6B?ref=untoldvoyage.com">pic.twitter.com/hLMg5EAD6B</a></p>&#x2014; Mohamed Said (@themsaid) <a href="https://twitter.com/themsaid/status/773263181707874304?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">September 6, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Nice hidden <a href="https://twitter.com/laravelphp?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@laravelphp</a> Eloquent feature: you can specify the columns to eager load directly in the &apos;with&apos; call! <a href="https://t.co/vQT8CaRqGC?ref=untoldvoyage.com">pic.twitter.com/vQT8CaRqGC</a></p>&#x2014; Stidges (@stidges) <a href="https://twitter.com/stidges/status/908076318964817923?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">September 13, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">If you use Sublime, here are useful keyboard shortcuts (macOS) for line manipulation&#x2014;some common ones but many unknown that may be helpful <a href="https://t.co/OLm0QeLtIq?ref=untoldvoyage.com">pic.twitter.com/OLm0QeLtIq</a></p>&#x2014; Jonathan Suh (@jonsuh) <a href="https://twitter.com/jonsuh/status/908089946887647232?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">September 13, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F389;v1.0.0 of laravel-stats has been released. Go and start analyze your project now! <a href="https://t.co/KfvhRyfgMe?ref=untoldvoyage.com">https://t.co/KfvhRyfgMe</a> <a href="https://t.co/4yQRszZv9r?ref=untoldvoyage.com">pic.twitter.com/4yQRszZv9r</a></p>&#x2014; Stefan Zweifel (@_stefanzweifel) <a href="https://twitter.com/_stefanzweifel/status/921480810892587013?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">October 20, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F920; Little trick to use Laravel&apos;s awesome json assertions against json from any source (external url, test fixture, etc..) <a href="https://t.co/c7YDJ0jn8a?ref=untoldvoyage.com">pic.twitter.com/c7YDJ0jn8a</a></p>&#x2014; Caleb Porzio (@calebporzio) <a href="https://twitter.com/calebporzio/status/931154448210153474?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">November 16, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F525; Lots of places in Laravel that accept callbacks will also accept a dot-notation string.<br><br>Perfect when you&apos;re just doing something simple and PHP&apos;s verbose closures are making you sad &#x1F44C;&#x1F3FB; <a href="https://t.co/kkKRfKKiQi?ref=untoldvoyage.com">pic.twitter.com/kkKRfKKiQi</a></p>&#x2014; Adam Wathan (@adamwathan) <a href="https://twitter.com/adamwathan/status/931198010347810816?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">November 16, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Went ahead and added both of these for Laravel 5.6 &#x1F3C4;&#x200D;&#x2642;&#xFE0F; <a href="https://t.co/tLLKVSRSQe?ref=untoldvoyage.com">pic.twitter.com/tLLKVSRSQe</a></p>&#x2014; Taylor Otwell &#x2697;&#xFE0F; (@taylorotwell) <a href="https://twitter.com/taylorotwell/status/936599500893904897?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">December 1, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Tip: if you are on <a href="https://twitter.com/hashtag/Laravel?src=hash&amp;ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">#Laravel</a> 5.5 and enjoy Carbon, be sure to use Illuminate\Support\Carbon instead of \Carbon\Carbon. It&apos;s a wrapper class, 100% macroable, and allows you to set a custom json serializer. &#x1F60E; <a href="https://t.co/mE8xbpYrAu?ref=untoldvoyage.com">pic.twitter.com/mE8xbpYrAu</a></p>&#x2014; Raul (@rcubitto) <a href="https://twitter.com/rcubitto/status/943497750963998720?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">December 20, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F525; Sometimes you want quick on-the-fly authorization, without the hassle of registering a policy/callback at the Gate.<br><br>Laravel&apos;s HandlesAuthorization trait is perfect for this. Simply call the `deny()` method, and Laravel will respond with a 403 HTTP response &#x1F44C; <a href="https://t.co/O36agH2o3u?ref=untoldvoyage.com">pic.twitter.com/O36agH2o3u</a></p>&#x2014; Joseph Silber (@joseph_silber) <a href="https://twitter.com/joseph_silber/status/946444006057226241?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">December 28, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F440; Leveraging Spark events and our activitylog package to keep an eye on what&apos;s happing on <a href="https://twitter.com/OhDearApp?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@OhDearApp</a> &#x1F440;<br><br>Activitylog: <a href="https://t.co/9YHTQc6eVj?ref=untoldvoyage.com">https://t.co/9YHTQc6eVj</a><br><br>Team events: <a href="https://t.co/SUFlq6gtE9?ref=untoldvoyage.com">https://t.co/SUFlq6gtE9</a> <a href="https://t.co/m4JxiAR0vu?ref=untoldvoyage.com">pic.twitter.com/m4JxiAR0vu</a></p>&#x2014; Freek Van der Herten (@freekmurze) <a href="https://twitter.com/freekmurze/status/946779348169904128?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">December 29, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F525; If you ever seed your Vue components with JSON data in your Blade templates, you *definitely* want to enable double-encoding.<br><br>Without it, a rogue &quot;&amp;quot;&quot; in any user-submitted data might blow up your front end! <a href="https://t.co/kifQ3ksv6H?ref=untoldvoyage.com">pic.twitter.com/kifQ3ksv6H</a></p>&#x2014; Adam Wathan (@adamwathan) <a href="https://twitter.com/adamwathan/status/954356778384244737?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">January 19, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F525; Instead of naming your Vue transitions, try combining the default `v-{enter/leave}` classes with separate classes for each enter and leave style.<br><br>It&apos;s much easier to compose different enter/leave transitions on the fly without a new class for every combination &#x1F44D;&#x1F3FB; <a href="https://t.co/097FSL4ZYh?ref=untoldvoyage.com">pic.twitter.com/097FSL4ZYh</a></p>&#x2014; Adam Wathan (@adamwathan) <a href="https://twitter.com/adamwathan/status/955899551260409857?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">January 23, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F525; <a href="https://twitter.com/vuejs?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@vuejs</a> components can be a lot more than just UI widgets!<br><br>Check out this demo of a &quot;fetch&quot; component for making AJAX requests from your markup:<a href="https://t.co/ysBUU1bLUN?ref=untoldvoyage.com">https://t.co/ysBUU1bLUN</a><br><br>Inspired by a conversation with <a href="https://twitter.com/youyuxi?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@youyuxi</a> yesterday! &#x1F60D; <a href="https://t.co/eVErHL1S2O?ref=untoldvoyage.com">pic.twitter.com/eVErHL1S2O</a></p>&#x2014; Adam Wathan (@adamwathan) <a href="https://twitter.com/adamwathan/status/956620857236959232?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">January 25, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Basecamp 3 is up to 308 controllers. Some 1400 methods. Imagine recreating all that with all-native apps? No thanks. Majestic be thy Monolith. <a href="https://t.co/aTmwGT32ep?ref=untoldvoyage.com">pic.twitter.com/aTmwGT32ep</a></p>&#x2014; DHH (@dhh) <a href="https://twitter.com/dhh/status/962111734361178112?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">February 9, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F511; You can make use of <a href="https://twitter.com/laravelphp?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@laravelphp</a>&apos;s auth &quot;intended&quot; function by just adding a value to the right session key. <br><br>Free &quot;redirect me back to the correct place after login&quot; behavior! <a href="https://t.co/sCbuHhIWK0?ref=untoldvoyage.com">pic.twitter.com/sCbuHhIWK0</a></p>&#x2014; Chris Fidao (@fideloper) <a href="https://twitter.com/fideloper/status/964890596707110912?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">February 17, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">&#x1F525; Ever run into annoying CSS layout bugs that are really hard to troubleshoot? (WHY IS THERE A HORIZONTAL SCROLLBAR WHERE IS THIS COMING FROM?!?)<br><br>Throw this style into your dev tools to quickly see the boundaries of every element without affecting the layout: <a href="https://t.co/Qwc2Ic2fV5?ref=untoldvoyage.com">pic.twitter.com/Qwc2Ic2fV5</a></p>&#x2014; Adam Wathan (@adamwathan) <a href="https://twitter.com/adamwathan/status/959078631434731521?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">February 1, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">This is very sweet &#x1F36D;<a href="https://twitter.com/laravelphp?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">@laravelphp</a> allows you to hook into the __construct() method of a model from a trait by implementing the initialize{TraitName} method.<br><br>Excuse the rather long example, but it is worth it. <a href="https://t.co/FcI8shvRvq?ref=untoldvoyage.com">pic.twitter.com/FcI8shvRvq</a></p>&#x2014; Tim MacDonald (@timacdonald87) <a href="https://twitter.com/timacdonald87/status/1076117855911866369?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">December 21, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/Laravel?src=hash&amp;ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">#Laravel</a> tip of the day: if you want to find out which of your composer.json packages have released newer versions, just run &quot;composer outdated&quot;. You will get a full list with all information. <a href="https://t.co/2FOw39TBr4?ref=untoldvoyage.com">pic.twitter.com/2FOw39TBr4</a></p>&#x2014; Laravel Daily (@DailyLaravel) <a href="https://twitter.com/DailyLaravel/status/1103263712528531456?ref_src=twsrc%5Etfw&amp;ref=untoldvoyage.com">March 6, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure>]]></content:encoded></item><item><title><![CDATA[Transition Periods]]></title><description><![CDATA[👋 Hey there. Life has an odd way of moving in new directions. For my part, I recently was given full responsibility over a rather complex set of systems at my place of work. This came about due to recent staffing changes.]]></description><link>https://untoldvoyage.com/transition-periods/</link><guid isPermaLink="false">5c7ad4037c5e150039e9cee3</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Sat, 02 Mar 2019 19:05:45 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1477951233099-d2c5fbd878ee?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1477951233099-d2c5fbd878ee?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Transition Periods"><p>&#x1F44B; Hey there.</p><p>Life has an odd way of moving in new and unexpected directions. For my part, I recently was given full responsibility over a rather complex set of systems at my place of work. This came about due to a recent staffing reduction.</p><p>When I think of how God has blessed my wife and I, through a chance interview that led to a relatively stable career path, I realize that my life is truly not my own. Instead, I am caught up in a journey crafted by God, who loves as deep as the furthest reaches of this vast universe. There is no one quite like our Creator.</p><p>My wife and I recently read through Pastor Brian Houston&apos;s Bible reading plan called <a href="https://my.bible.com/reading-plans/2715-new-roads-new-rivers?ref=untoldvoyage.com">New Roads, New Rivers</a>. Here is an excerpt that may encourage you, especially if you are undergoing a time of transition in your life.</p><blockquote>Are you expecting God to do a new thing in your life? That may seem overwhelming when you consider your present circumstances but take courage. God has made a way, a road to lead you with rivers of provision and refreshing.<br><br>If anyone thirsts, let him COME to me and drink. Rivers of living water will brim and spill out of the depths of anyone who believes in me this way, just as the Scripture says. <br>&#x2013; John &#xA0;7:38 (MSG)</blockquote>]]></content:encoded></item><item><title><![CDATA[Be Decisive]]></title><description><![CDATA[Here is an excerpt from an Australian mailing list I read called Word For Today. President Reagan enjoyed telling the story of how he learned to make firm decisions.]]></description><link>https://untoldvoyage.com/be-decisive/</link><guid isPermaLink="false">5c7b461c7497c1000172dde3</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Tue, 26 Feb 2019 02:20:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1472162314594-eca3c3d90df1?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1472162314594-eca3c3d90df1?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Be Decisive"><p>Here is an excerpt from an Australian mailing list I read called <a href="https://vision.org.au/the-word-for-today?ref=untoldvoyage.com">Word For Today</a>.</p><blockquote>President Reagan enjoyed telling the story of how he learned to make firm decisions. When he was a boy, his aunt sent him to a cobbler to have a new pair of shoes made for him. When the shoemaker asked, &apos;Do you want a square toe or a round one?&apos; he hemmed and hawed, so the cobbler said, &apos;Come back in a day or two and tell me what you want.&apos; Later the cobbler saw Reagan on the street and asked what he had decided about the shoes. &apos;I haven&apos;t made up my mind yet,&apos; he answered. &apos;Very well,&apos; the cobbler said, &apos;your shoes will be ready tomorrow.&apos; When Reagan got the shoes, one had a round toe and the other a square toe! Reagan said, &apos;Looking at those shoes every day taught me a lesson. If you don&apos;t make your own decisions, somebody else will make them for you.&apos; Worst case: if you get it wrong, you&apos;ll learn what not to do next time. Bottom line: to succeed in life you must pray for wisdom, and then make a decision.<br><br>&apos;A double minded man is unstable in all his ways.&apos; James 1:8 KJV</blockquote>]]></content:encoded></item><item><title><![CDATA[Laravel Example: Cache Locking]]></title><description><![CDATA[If you make use of the Laravel framework, here is a code example from Taylor Otwell on how to use cache locking.]]></description><link>https://untoldvoyage.com/laravel-example-cache-locking/</link><guid isPermaLink="false">5c7b471f7497c1000172ddfa</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Sat, 23 Feb 2019 02:38:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1527412444964-0a5432f632b4?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1527412444964-0a5432f632b4?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Laravel Example: Cache Locking"><p>If you make use of the Laravel framework, here is a code example from Taylor Otwell on how to use cache locking.</p><pre><code>try {
    $lock = Cache::lock(&apos;foo&apos;, 10)-&gt;block(5);

    // Lock acquired after waiting maximum of 5 seconds...
} catch (LockTimeoutException $e) {
    // Unable to acquire lock...
} finally {
    optional($lock)-&gt;release();
}
</code></pre>]]></content:encoded></item><item><title><![CDATA[Eloquent Model Traits With Casts]]></title><description><![CDATA[As a follow up to the previous entry, you can also include a function to return a casts array for a trait/concern that your eloquent model is using.]]></description><link>https://untoldvoyage.com/eloquent-model-traits-with-casts/</link><guid isPermaLink="false">5c7c543a0596fa0001f15ea9</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Tue, 29 Aug 2017 15:32:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1533134755454-9549758f0e06?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1533134755454-9549758f0e06?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Eloquent Model Traits With Casts"><p>As a follow up to the previous entry, you can also include a function to return a casts array for a trait/concern that your eloquent model is using.</p><pre><code>trait HasUuid
{
    public function getHasUuidCasts()
    {
        if(config(&apos;uuid.binary_format&apos;)) {
            return [&apos;uuid&apos; =&gt; &apos;uuid&apos;];
        }

        return [];
    }

    //
}
</code></pre><p>Here is the trait that will enable this functionality on your eloquent models.</p><pre><code>trait HasTraitsWithCasts
{
    /**
     * Get the casts array.
     *
     * @return array
     */
    public function getCasts()
    {
        $class = static::class;

        foreach (class_uses_recursive($class) as $trait) {
            $method = &apos;get&apos;.class_basename($trait).&apos;Casts&apos;);

            if (method_exists($class, $method) {
                $this-&gt;casts = array_unique(
                    array_merge($this-&gt;casts, $this-&gt;{$method}())
                );
            }
        }

        return parent::getCasts();
    }
}
</code></pre>]]></content:encoded></item><item><title><![CDATA[Eloquent Model Traits With Dates]]></title><description><![CDATA[In the same way that we can use a boot{Trait}() method in a trait/concern for an eloquent model, it would be nice to be able to register specific date fields in a trait/concern (i.e. Publishable with a published_at timestamp column).]]></description><link>https://untoldvoyage.com/eloquent-model-traits-with-dates/</link><guid isPermaLink="false">5c7c53560596fa0001f15e98</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Fri, 25 Aug 2017 15:56:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1518169709214-6d2fff4a8a4e?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1518169709214-6d2fff4a8a4e?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Eloquent Model Traits With Dates"><p>In the same way that we can use a <code>boot{Trait}()</code> method in a trait/concern for an eloquent model, it would be nice to be able to register specific date fields in a trait/concern (i.e. <code>Publishable</code> with a <code>published_at</code> timestamp column).</p><pre><code>trait Publishable
{
    public function getPublishableDates()
    {
        return [&apos;published_at&apos;];
    }

    // 
}
</code></pre><p>Here is the trait that will enable this functionality on your eloquent models.</p><pre><code>trait HasTraitsWithDates
{
    /**
     * Get the attributes that should be converted to dates.
     *
     * @return array
     */
    public function getDates()
    {
        $class = static::class;

        foreach (class_uses_recursive($class) as $trait) {
            $method = &apos;get&apos;.class_basename($trait).&apos;Dates&apos;);

            if (method_exists($class, $method) {
                $this-&gt;dates = array_unique(
                    array_merge($this-&gt;dates, $this-&gt;{$method}())
                );
            }
        }

        return parent::getDates();
    }
}
</code></pre><p>The beautiful part is that this feature is additive in nature. Both default fields, <code>created_at</code> and <code>updated_at</code>, as well as those defined in the <code>$dates</code> property on a model are still included with any trait based date fields when <code>getDates()</code> is called.</p>]]></content:encoded></item><item><title><![CDATA[Find Hard Drive Details On Server]]></title><description><![CDATA[Here are two commands that can help when dealing with physical Linux servers. To get detailed information directly from the hard drive...]]></description><link>https://untoldvoyage.com/find-hard-drive-details-on-server/</link><guid isPermaLink="false">5c7c52a90596fa0001f15e8d</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Fri, 05 May 2017 15:28:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1495317436409-6c5536f95dea?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1495317436409-6c5536f95dea?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Find Hard Drive Details On Server"><p>Here are two commands that can help when dealing with physical Linux servers.</p><p>To get detailed information directly from the hard drive:</p><pre><code>$ hdparm -I /dev/sda
</code></pre><p>To get a list of all the serial numbers for your hard drives:</p><pre><code>$ for i in a b c d e f g h; do echo -n &quot;/dev/sd$i: &quot;; hdparm -I /dev/sd$i | awk &apos;/Serial Number/ {print $3}&apos;; done
</code></pre>]]></content:encoded></item><item><title><![CDATA[Nginx Configuration For Symlinked PHP Releases]]></title><description><![CDATA[If you want to use a deployment tool like Capistrano or Laravel Envoy with symbolic linked release directories, instead of mapping your script to the path of the symlink with $document_root...]]></description><link>https://untoldvoyage.com/nginx-configuration-for-symlinked-php-releases/</link><guid isPermaLink="false">5c7c51c40596fa0001f15e82</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Fri, 28 Apr 2017 14:12:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1442406964439-e46ab8eff7c4?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1442406964439-e46ab8eff7c4?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Nginx Configuration For Symlinked PHP Releases"><p>If you want to use a deployment tool like Capistrano or Laravel Envoy with symbolic linked release directories, instead of mapping your script to the path of the symlink with <code>$document_root</code>:</p><pre><code>location ~ \.php$ {
    # ...
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    # ...
}
</code></pre><p>You should instead reference the <code>$realpath_root</code> variable as this allows for all new requests to immediately be mapped to the new release on deployment.</p><pre><code>location ~ \.php$ {
    # ...
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
    # ...
}
</code></pre>]]></content:encoded></item><item><title><![CDATA[Find Total Size Of Files On Server]]></title><description><![CDATA[As a continuation of my last post, here is a command if you want to find the total combined size (in kilobytes) of a set of folders or files listed in a text file named file-list.txt.]]></description><link>https://untoldvoyage.com/find-total-size-of-files-on-server/</link><guid isPermaLink="false">5c7c51540596fa0001f15e77</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Wed, 12 Apr 2017 14:42:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1470173274384-c4e8e2f9ea4c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1470173274384-c4e8e2f9ea4c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Find Total Size Of Files On Server"><p>As a continuation of my last post, here is a command if you want to find the total combined size (in kilobytes) of a set of folders or files listed in a text file named <code>file-list.txt</code>.</p><pre><code>$ find -print -maxdepth 1 | grep -Fxf file-list.txt | xargs du -k | awk &apos;{total=total+$1} END {print total}&apos;
</code></pre>]]></content:encoded></item><item><title><![CDATA[Find Folders On Server To Eliminate]]></title><description><![CDATA[If you need to narrow down a list of folders in a directory to the set that you need to either archive or cleanup from a linux server, here's a quick command.]]></description><link>https://untoldvoyage.com/find-folders-on-server-to-eliminate/</link><guid isPermaLink="false">5c7c51120596fa0001f15e6d</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Mon, 10 Apr 2017 15:02:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1466699514193-d2327ed2cccb?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1466699514193-d2327ed2cccb?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Find Folders On Server To Eliminate"><p>If you need to narrow down a list of folders in a directory to the set that you need to either archive or cleanup from a linux server, here&apos;s a quick command.</p><p>First, add the list of folders that you know you want to keep to a file named <code>file-list.txt</code>. All other folders will be printed from this command.</p><pre><code>$ ls -hal | grep ^d | grep -Fxvf file-list.txt
</code></pre><p>What the flags mean:</p><p><strong>-mtime +7</strong><br>More than seven days old</p><p><strong>-maxdepth 1</strong><br>Only search the current directory, not recursively</p><p><strong>-F, --fixed-strings</strong><br>Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.</p><p><strong>-x, --line-regexp</strong><br>Select only those matches that exactly match the whole line.</p><p><strong>-v, --invert-match</strong><br>Invert the sense of matching, to select non-matching lines.</p><p><strong>-f FILE, --file=FILE</strong><br>Obtain patterns from FILE, one per line. &#xA0;The empty file contains zero patterns, and therefore matches nothing.</p><p>If you want get a count to make sure the all folders listed in <code>file-list.txt</code> exist in the current directory, here&apos;s another command.</p><pre><code>$ ls -hal | grep ^d | grep -Fxf file-list.txt | wc -l
</code></pre>]]></content:encoded></item><item><title><![CDATA[Adding & Removing Tags On GitHub]]></title><description><![CDATA[If you ever accidentally tag the wrong branch with a release, you can move the release back to the draft stage on GitHub with the following commands.]]></description><link>https://untoldvoyage.com/adding-removing-tags-on-github/</link><guid isPermaLink="false">5c7c503b0596fa0001f15e61</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Fri, 24 Mar 2017 15:32:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1472235008642-bb3ce23994ac?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1472235008642-bb3ce23994ac?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Adding &amp; Removing Tags On GitHub"><p>If you ever accidentally tag the wrong branch with a release, you can move the release back to the draft stage on GitHub with the following commands.</p><ol><li>Delete the tag locally<br><code>git tag -d v1.0</code></li><li>Delete the v1.0 tag on GitHub<br><code>git push origin :v1.0</code></li></ol><p>You can then select the correct branch on GitHub and publish the release once more.</p>]]></content:encoded></item><item><title><![CDATA[Symlink SublimeText 3]]></title><description><![CDATA[If you want to launch SublimeText from the command line on macOS, here you go...]]></description><link>https://untoldvoyage.com/symlink-sublimetext-3/</link><guid isPermaLink="false">5c7c4f720596fa0001f15e52</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Fri, 10 Mar 2017 17:13:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1487505983481-9aa2d9f9901a?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1487505983481-9aa2d9f9901a?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Symlink SublimeText 3"><p>If you want to launch SublimeText from the command line on macOS, here you go...</p><pre><code>$ ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/sublime
$ ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl
</code></pre><p>Now you can...</p><pre><code>$ cd ~/code/project
$ sublime .
$ subl .
</code></pre>]]></content:encoded></item><item><title><![CDATA[Free Space On A Server]]></title><description><![CDATA[When you're looking to free space on a server...]]></description><link>https://untoldvoyage.com/free-space-on-a-server/</link><guid isPermaLink="false">5c7c4f250596fa0001f15e47</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Wed, 22 Feb 2017 16:58:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1484662020986-75935d2ebc66?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1484662020986-75935d2ebc66?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Free Space On A Server"><p>When you&apos;re looking to free space on a server...</p><pre><code>$ df -h
$ du -xhd1 /
</code></pre>]]></content:encoded></item><item><title><![CDATA[Laravel 5.4 JSON Contains Macro]]></title><description><![CDATA[If you want to get your tests updated for Laravel 5.4, and need a quick patch for the missing assertJsonContains(), here's a macro that you can place in the createApplication() function...v]]></description><link>https://untoldvoyage.com/laravel-5-4-json-contains-macro/</link><guid isPermaLink="false">5c7c4d820596fa0001f15e3b</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Fri, 03 Feb 2017 23:27:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1490557162706-284736f48784?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1490557162706-284736f48784?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Laravel 5.4 JSON Contains Macro"><p><strong>Update 2017-02-10:</strong></p><p>A new <code>assertJsonFragment()</code> function has been added to <code>laravel/framework</code> to replace the old <code>seeJsonContains()</code> function.</p><hr><p>If you want to get your tests updated for <strong>Laravel 5.4</strong>, and need a quick patch for the missing <code>assertJsonContains()</code>, here&apos;s a macro that you can place in the <code>createApplication()</code> function, either in &#xA0;your <code>tests/CreatesApplication.php</code> trait or your <code>tests/TestCase.php</code> file, depending on how your test folder is setup.</p><pre><code>TestResponse::macro(&apos;assertJsonContains&apos;, 
    function (array $data) {
        $actual = json_encode(Arr::sortRecursive(
            (array) $this-&gt;decodeResponseJson()
        ));

        foreach (Arr::sortRecursive($data) as $key =&gt; $value) {
            $expected = substr(json_encode([$key =&gt; $value]), 1, -1);

            PHPUnit::assertTrue(
                Str::contains($actual, $expected),
                &apos;Unable to find JSON fragment&apos;.PHP_EOL.
                &quot;[{$expected}]&quot;.PHP_EOL.
                &apos;within&apos;.PHP_EOL.
                &quot;[{$actual}].&quot;
            );
        }

        return $this;
    });
</code></pre><p>You&apos;ll also want the following use statements</p><pre><code>use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use PHPUnit\Framework\Assert as PHPUnit;
use Illuminate\Foundation\Testing\TestResponse;
</code></pre>]]></content:encoded></item><item><title><![CDATA[Unattended Dependencies]]></title><description><![CDATA[I often run into quality issues in Javascript packages that I want to adopt. Most of these issues consist of simple bugs that are worth eradicating with a pull request.]]></description><link>https://untoldvoyage.com/unattended-dependencies/</link><guid isPermaLink="false">5c7c4cc10596fa0001f15e2e</guid><dc:creator><![CDATA[BRIΛИ]]></dc:creator><pubDate>Tue, 31 Jan 2017 01:57:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1534774592507-488885376ad3?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1534774592507-488885376ad3?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Unattended Dependencies"><p>I often run into quality issues in Javascript packages that I want to adopt. Most of these issues consist of simple bugs that are worth eradicating with a pull request. However, the sole reason these packages are not updated is often due to the owners simply not maintaining them. The unfortunate side effect is a lot of forks getting created.</p><h3 id="i-am-currently-reading-">I am currently reading:</h3><p><strong>Ansible For DevOps</strong> by Jeff Geerling</p><figure class="kg-card kg-image-card"><img src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1445630377i/27262929._SX120_.jpg" class="kg-image" alt="Unattended Dependencies" loading="lazy"></figure><p>Ansible is a simple, but powerful, server and configuration management tool (with a few other tricks up its sleeve). This book helps those familiar with the command line and basic shell scripting start using Ansible to provision and manage anywhere from one to thousands of servers.</p><p>The book begins with fundamentals, like installing Ansible, setting up a basic inventory file, and basic concepts, then guides you through Ansible&apos;s many uses, including ad-hoc commands, basic and advanced playbooks, application deployments, multiple-provider server provisioning, and even Docker orchestration! Everything is explained with pertinent real-world examples, often using Vagrant-managed virtual machines.</p><p><strong>Cryptonomicon</strong> by Neal Stephenson</p><figure class="kg-card kg-image-card"><img src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1327931476i/816._SY180_.jpg" class="kg-image" alt="Unattended Dependencies" loading="lazy"></figure><p>Cryptonomicon zooms all over the world, careening conspiratorially back and forth between two time periods - World War II and the present. Our 1940s heroes are the brilliant mathematician Lawrence Waterhouse, crypt analyst extraordinaire, and gung-ho, morphine-addicted marine Bobby Shaftoe. They&apos;re part of Detachment 2702, an Allied group trying to break Axis communication codes while simultaneously preventing the enemy from figuring out that their codes have been broken. Their job boils down to layer upon layer of deception. Dr. Alan Turing is also a member of 2702, and he explains the unit&apos;s strange workings to Waterhouse. &quot;When we want to sink a convoy, we send out an observation plane first... Of course, to observe is not its real duty--we already know exactly where the convoy is. Its real duty is to be observed... Then, when we come round and sink them, the Germans will not find it suspicious.&quot;</p><p>All of this secrecy resonates in the present-day story line, in which the grandchildren of the WWII heroes - inimitable programming geek Randy Waterhouse and the lovely and powerful Amy Shaftoe - team up to help create an offshore data haven in Southeast Asia and maybe uncover some gold once destined for Nazi coffers. To top off the paranoiac tone of the book, the mysterious Enoch Root, key member of Detachment 2702 and the Societas Eruditorum, pops up with an unbreakable encryption scheme left over from WWII to befuddle the 1990s protagonists with conspiratorial ties.</p>]]></content:encoded></item></channel></rss>