<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alex_Tech_Blog</title><link>https://alex.dinnouti.com/</link><description>Recent content on Alex_Tech_Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 02 Oct 2026 09:00:00 +0000</lastBuildDate><atom:link href="https://alex.dinnouti.com/index.xml" rel="self" type="application/rss+xml"/><item><title>White Bread</title><link>https://alex.dinnouti.com/recipes/white-bread/</link><pubDate>Fri, 02 Oct 2026 09:00:00 +0000</pubDate><guid>https://alex.dinnouti.com/recipes/white-bread/</guid><description>&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Activate the yeast.&lt;/strong&gt; In a small bowl, whisk together the warm water (110-115°F — about as warm as a baby&amp;rsquo;s bath, not hot enough to feel uncomfortable on your wrist), sugar, and yeast. Let it sit for 5-10 minutes until foamy and fragrant. If it doesn&amp;rsquo;t foam, your yeast is dead or the water was too hot — start over with fresh yeast.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Mix the dough.&lt;/strong&gt; In a large bowl, whisk together the flour and salt. Pour in the yeast mixture and 1 tablespoon of olive oil. Stir with a wooden spoon or spatula until a rough, shaggy dough forms and no dry flour remains.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Knead.&lt;/strong&gt; Turn the dough onto a lightly floured counter and knead for 8-10 minutes by hand (or 5-6 minutes on medium-low speed with a stand mixer dough hook). The dough should go from sticky and rough to smooth, elastic, and slightly tacky but no longer sticking heavily to your hands. A good test: press a finger in — the dough should spring back slowly. Add flour a tablespoon at a time only if the dough is too wet to handle; avoid adding too much or the loaf will turn out dense.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;First rise.&lt;/strong&gt; Lightly oil a large bowl, place the dough in it, and turn to coat. Cover tightly with plastic wrap or a damp towel. Let rise at room temperature (70-75°F) for about 1.5-2 hours, or in a proofing oven at 90°F for about 1 hour, until roughly doubled in size. Test by pressing a finger into the dough an inch deep — if the indent slowly springs back halfway, it&amp;rsquo;s ready.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Punch down and shape.&lt;/strong&gt; Gently punch the dough down in the center to release the gas, then turn it out onto a lightly floured counter. Flatten it into a rough rectangle about the width of your loaf pan. Starting from the long edge, roll the dough into a tight log, pinching the seam closed as you go. Pinch the ends closed too and tuck them slightly under.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Pan it.&lt;/strong&gt; Grease a 9x5-inch loaf pan (or line with parchment) with the remaining 1 tablespoon of olive oil. Place the dough log seam-side down in the pan, pressing it gently so it fills the corners.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Second rise (proof).&lt;/strong&gt; Cover loosely with oiled plastic wrap or a towel and let proof at room temperature for 45-75 minutes, until the center of the dough domes about 1 inch above the rim of the pan. Don&amp;rsquo;t let it overproof — if it rises much higher and looks fragile/bubbly on top, it may collapse in the oven.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Preheat.&lt;/strong&gt; About 20 minutes before baking, preheat your oven to 375°F (190°C) with a rack in the center position.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Bake.&lt;/strong&gt; Bake for 35-40 minutes, until the top is deep golden brown. Check doneness with an instant-read thermometer inserted into the center — it should read 190-200°F. (No thermometer? Tip the loaf out and tap the bottom; it should sound hollow.) If the top is browning too fast before the inside is done, loosely tent it with foil for the last 10 minutes.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Cool before slicing.&lt;/strong&gt; Turn the loaf out of the pan immediately onto a wire rack (this prevents a soggy bottom from trapped steam). Let it cool for at least 20-30 minutes before slicing — cutting too early makes the crumb gummy, even though it&amp;rsquo;s tempting.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>Building a CLI Grammar Checker with AWS Bedrock: A Beginner's Guide</title><link>https://alex.dinnouti.com/posts/2025-07-24-cli-grammar/</link><pubDate>Thu, 24 Jul 2025 18:34:21 +0000</pubDate><guid>https://alex.dinnouti.com/posts/2025-07-24-cli-grammar/</guid><description>&lt;p&gt;&lt;em&gt;Guest Author: Anthropic&amp;rsquo; Claude Sonnet 4&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;AWS Bedrock makes it incredibly easy to integrate powerful AI models into your applications. In this tutorial, we&amp;rsquo;ll build a command-line grammar checker that uses Claude 3.5 Haiku to improve text clarity and fix grammatical errors.&lt;/p&gt;&#10;&lt;h2 id="what-youll-learn"&gt;What You&amp;rsquo;ll Learn&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;How to set up AWS Bedrock&lt;/li&gt;&#10;&lt;li&gt;Creating a simple CLI application with AI integration&lt;/li&gt;&#10;&lt;li&gt;Using prompt engineering for specific tasks&lt;/li&gt;&#10;&lt;li&gt;Building an interactive terminal interface&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;&#10;&lt;p&gt;Before we start, you&amp;rsquo;ll need:&lt;/p&gt;</description></item><item><title>How to tail -f Cloudwatch logs</title><link>https://alex.dinnouti.com/posts/2021-06-21_13-54-10_cloudwatch/</link><pubDate>Mon, 21 Jun 2021 13:54:11 -0400</pubDate><guid>https://alex.dinnouti.com/posts/2021-06-21_13-54-10_cloudwatch/</guid><description>&lt;p&gt;Get all the groups from the Cloudwatch&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws logs describe-log-groups &lt;span class="p"&gt;|&lt;/span&gt; grep logGroupName&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Plug the group into the &amp;rsquo;logs tail&amp;rsquo; and run in the background&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws logs tail --follow &amp;lt;group&amp;gt; --format short&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3rd-party-solutions"&gt;3rd party solutions&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/jorgebastida/awslogs"&gt;jorgebastida/awslogs: AWS CloudWatch logs for Humans™&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/rpgreen/apilogs"&gt;rpgreen/apilogs&lt;/a&gt; - For Lambda and API logs&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Amazon Honeycode cheat sheet</title><link>https://alex.dinnouti.com/posts/2021-02-18_10-05-46_honeycode/</link><pubDate>Thu, 18 Feb 2021 10:05:46 -0500</pubDate><guid>https://alex.dinnouti.com/posts/2021-02-18_10-05-46_honeycode/</guid><description>&lt;p&gt;A collection of scraps and code that I need to reference all the time. &lt;a href="https://aws.amazon.com/blogs/aws/introducing-amazon-honeycode-build-web-mobile-apps-without-writing-code/"&gt;Amazon Honeycode&lt;/a&gt;, which is available in beta, is a fully managed service that allows customers to quickly build powerful mobile and web applications – with no programming required.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Any code example in this post has no warranty at all.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Returns true if the row is found. &lt;a href="https://honeycodecommunity.aws/t/isref/1127"&gt;IsRef( )&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;ISREF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FindRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Tasks[Completed]=%&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Yes&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Condition for conditional styling&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Not done&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Filter a Column List or Stacked List based on a form field. &lt;a href="https://honeycodecommunity.aws/t/filter/923"&gt;Filter( )&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Python environments</title><link>https://alex.dinnouti.com/posts/2020-12-02_09-23-25_python/</link><pubDate>Wed, 02 Dec 2020 09:23:25 -0500</pubDate><guid>https://alex.dinnouti.com/posts/2020-12-02_09-23-25_python/</guid><description>&lt;p&gt;This post is self-service cheat sheet for Python environment and version management. One of the biggest problem with virtual environment in Python is the multiple tools available and how they play together.&lt;/p&gt;&#10;&lt;p&gt;The post starts from a point that you already know the options and want to test and try.&lt;/p&gt;&#10;&lt;figure&gt;&lt;a href="https://xkcd.com/1987/"&gt;&lt;img src="https://imgs.xkcd.com/comics/python_environment.png"&gt;&lt;/a&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;h4&gt;XKCD - Python Environment&lt;/h4&gt;&#10;&#9;&#9;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;h2 id="pipenv"&gt;pipenv&lt;/h2&gt;&#10;&lt;p&gt;In case you are using pipenv with different python version. The Pipfile tells pipenv what version to use. In case the version is not installed, Pipenv will call pyenv to install.&lt;/p&gt;</description></item><item><title>AWS Labs</title><link>https://alex.dinnouti.com/posts/aws-labs/</link><pubDate>Sat, 21 Nov 2020 09:57:08 -0500</pubDate><guid>https://alex.dinnouti.com/posts/aws-labs/</guid><description>&lt;p&gt;&lt;a href="https://github.com/awslabs"&gt;Amazon Web Services Labs&lt;/a&gt; has several experiments to help with day by day AWS management and development. Some of my favorites:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/aws-lambda-powertools-python"&gt;awslabs/aws-lambda-powertools-python&lt;/a&gt; - A suite of utilities for AWS Lambda Functions that makes tracing with AWS X-Ray, structured logging and creating custom metrics asynchronously easier&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/awscli-aliases"&gt;awslabs/awscli-aliases&lt;/a&gt; - AWS CLI aliases&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/git-secrets"&gt;awslabs/git-secrets&lt;/a&gt; - Prevents you from committing secrets and credentials into git repositories&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/aws-serverless-express"&gt;awslabs/aws-serverless-express&lt;/a&gt; - Run serverless applications and REST APIs using your existing Node.js application framework, on top of AWS Lambda and Amazon API Gateway&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/aws-support-tools"&gt;awslabs/aws-support-tools&lt;/a&gt; - Tools and sample code provided by AWS Premium Support&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/aws-cloudformation-templates"&gt;awslabs/aws-cloudformation-templates&lt;/a&gt; - A collection of useful CloudFormation templates&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Using AWS Code Commit</title><link>https://alex.dinnouti.com/posts/aws-code-commit/</link><pubDate>Fri, 20 Nov 2020 15:14:17 -0500</pubDate><guid>https://alex.dinnouti.com/posts/aws-code-commit/</guid><description>&lt;p&gt;Making sure the AWS CLI is proper installed in the computer&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws sts get-caller-identity&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;It should show your account information&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Account&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;123456789012&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;UserId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;AKIAIOSFODNN7EXAMPLE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Arn&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;arn:aws:iam::123456789012:user/Alice&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Ensure CodeCommit is installed&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws codecommit help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#10;&lt;h2 id="setting-up-your-codecommit-repository"&gt;Setting up your CodeCommit repository&lt;/h2&gt;&#10;&lt;p&gt;Create CodeCommit repository&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws codecommit create-repository --repository-name &amp;lt;repository name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Initialize a new git repository&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#10;&lt;p&gt;Add your CodeCommit repository as a remote&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git remote add origin codecommit://&amp;lt;repository name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;</description></item><item><title>Adding Progressbar to a Jupyter Lab Notebook</title><link>https://alex.dinnouti.com/posts/jupyter-lab-notebook-progressbar/</link><pubDate>Wed, 05 Feb 2020 17:22:55 -0500</pubDate><guid>https://alex.dinnouti.com/posts/jupyter-lab-notebook-progressbar/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip3 install tqdm --user&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tqdm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tqdm&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tqdm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iterrows&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ifor_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ifor_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;something_else&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ifor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ifor_val&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Leveraging Swifter for Pandas Lambda function</title><link>https://alex.dinnouti.com/posts/swifter-pandas-lambda/</link><pubDate>Wed, 05 Feb 2020 17:22:55 -0500</pubDate><guid>https://alex.dinnouti.com/posts/swifter-pandas-lambda/</guid><description>&lt;p&gt;Leveraging Swifter for Pandas Lambda function:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;swifter&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;new_column&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;swifter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;progress_bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;some_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;existing_column&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>logging in Python</title><link>https://alex.dinnouti.com/posts/logging-in-python/</link><pubDate>Wed, 05 Feb 2020 17:22:55 -0500</pubDate><guid>https://alex.dinnouti.com/posts/logging-in-python/</guid><description>&lt;p&gt;Snippet how to log data in Python&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;logging&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basicConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%(asctime)s&lt;/span&gt;&lt;span class="s1"&gt; - &lt;/span&gt;&lt;span class="si"&gt;%(levelname)s&lt;/span&gt;&lt;span class="s1"&gt; - &lt;/span&gt;&lt;span class="si"&gt;%(module)s&lt;/span&gt;&lt;span class="s1"&gt; - &lt;/span&gt;&lt;span class="si"&gt;%(message)s&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;log.log&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AWS Amplify Console to deploy Hugo website</title><link>https://alex.dinnouti.com/posts/aws_amplify/</link><pubDate>Fri, 19 Jul 2019 16:29:45 -0400</pubDate><guid>https://alex.dinnouti.com/posts/aws_amplify/</guid><description>&lt;h2 id="what-is-the-aws-amplify-console"&gt;What is the AWS Amplify Console?&lt;/h2&gt;&#10;&lt;p&gt;AWS Amplify Console provides a complete workflow for developing, deploying, and hosting single page web apps or static sites with serverless backends. Continuous deployment allows developers to deploy updates to their web app on every code commit to their Git repository. When the build succeeds, the app is deployed and hosted on an amplifyapp.com subdomain. Developers can connect their custom domain to start receiving production traffic.&lt;/p&gt;</description></item><item><title>Automatic Login in SSH using config file</title><link>https://alex.dinnouti.com/posts/ssh-config/</link><pubDate>Tue, 18 Dec 2018 21:08:08 -0500</pubDate><guid>https://alex.dinnouti.com/posts/ssh-config/</guid><description>&lt;p&gt;Remembering tons of SSH hosts and respective signature files is hard. This is when the config file comes in place. Edit the file ~/.ssh/config.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi ~/.ssh/config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Add the following:&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host server1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HostName server1.example.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Port &lt;span class="m"&gt;22&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; IdentityFile ~/.ssh/test.pem&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#10;&lt;p&gt;Next time you try to login to the server:&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ssh server1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;</description></item><item><title>About</title><link>https://alex.dinnouti.com/about/</link><pubDate>Sun, 16 Dec 2018 10:19:08 -0500</pubDate><guid>https://alex.dinnouti.com/about/</guid><description>&lt;p&gt;Powered by &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;. Hosted on AWS using a simple S3 bucket + CloudFront distribution for static site delivery.&lt;/p&gt;&#10;&lt;h2 id="design"&gt;Design&lt;/h2&gt;&#10;&lt;p&gt;The current look is a from-scratch 80s green-phosphor CRT terminal theme — scanlines, glow, the works — built with &lt;a href="https://github.com/NousResearch/hermes-agent"&gt;Hermes Agent&lt;/a&gt;, an AI agent by Nous Research. Original theme layout based on &lt;a href="https://github.com/siegerts/hugo-theme-basic"&gt;siegerts/hugo-theme-basic&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="credits"&gt;Credits&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Alex Dinnouti&lt;/strong&gt; — author, everything you&amp;rsquo;re reading&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Hermes Agent&lt;/strong&gt; (Nous Research) — redesign, theme, and site tooling&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Using PHP to query SalesForce</title><link>https://alex.dinnouti.com/posts/salesforce_php/</link><pubDate>Sun, 16 Dec 2018 10:19:08 -0500</pubDate><guid>https://alex.dinnouti.com/posts/salesforce_php/</guid><description>&lt;p&gt;Quick gist showing how to use PHP and PHP-Curl to query Salesforce data&lt;/p&gt;</description></item><item><title>Convert esriFieldTypeDate, ESRI date, or epoch to a date format using javascript</title><link>https://alex.dinnouti.com/posts/esrifieldtypedate-to-epoch/</link><pubDate>Wed, 04 Sep 2013 10:19:08 -0500</pubDate><guid>https://alex.dinnouti.com/posts/esrifieldtypedate-to-epoch/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// eftd is an esriFieldTypeDate&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;eftd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1379894400000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eftd&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toUTCString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;Mon, 23 Sep 2013 00:00:00 GMT&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eftd&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;2013-09-23T00:00:00.000Z&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eftd&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;2013-09-23&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eftd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;dtStr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getFullYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;2013-9-23&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>