albinsblog.com Ads.txt file

<!DOCTYPE html>
<html class='v2' dir='ltr' lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
<head>
<link href='https://www.blogger.com/static/v1/widgets/573632073-css_bundle_v2.css' rel='stylesheet' type='text/css'/>
<meta content='width=1100' name='viewport'/>
<meta content='43zJjAsEaauKjXflM7qe' name='follow.it-verification-code'/>
<!-- Title -->
<title>Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate</title>
<!-- Meta Description -->
<meta content='Explore in-depth insights on Adobe Experience Manager, Generative AI, Digital Asset Management, Digital Experience Platforms, Martech, and the latest' name='description'/>
<!-- Robots Meta Tag for Archive Pages -->
<!-- Canonical URL -->
<link href='https://www.albinsblog.com/' rel='canonical'/>
<!-- Open Graph Tags -->
<meta content='article' property='og:type'/>
<meta content='Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate' property='og:title'/>
<meta content='Explore in-depth insights on Adobe Experience Manager, Generative AI, Digital Asset Management, Digital Experience Platforms, Martech, and the latest' property='og:description'/>
<meta content='https://www.albinsblog.com/' property='og:url'/>
<meta content='' property='og:image'/>
<!-- Twitter Cards -->
<meta content='summary_large_image' name='twitter:card'/>
<meta content='Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate' name='twitter:title'/>
<meta content='Explore in-depth insights on Adobe Experience Manager, Generative AI, Digital Asset Management, Digital Experience Platforms, Martech, and the latest' name='twitter:description'/>
<meta content='' name='twitter:image'/>
<!-- Additional Meta Tags -->
<meta content='Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate' name='application-name'/>
<meta content='https://www.albinsblog.com/' name='msapplication-starturl'/>
<!--Failed to render theme node 'meta'.

The expression 'default_favicon_url' is not valid.
-->
<!--Failed to render theme node 'meta'.

The expression '#000000' is not valid.
-->
<!-- Charset -->
<meta charset='UTF-8'/>
<style id='page-skin-1' type='text/css'><!--
/*
-----------------------------------------------
Blogger Template Style
Name: Simple
Designer: Blogger
URL: www.blogger.com
----------------------------------------------- */
/* Variable definitions
====================
<Variable name="keycolor" description="Main Color" type="color" default="#66bbdd"/>
<Group description="Page Text" selector="body">
<Variable name="body.font" description="Font" type="font"
default="normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="body.text.color" description="Text Color" type="color" default="#222222"/>
</Group>
<Group description="Backgrounds" selector=".body-fauxcolumns-outer">
<Variable name="body.background.color" description="Outer Background" type="color" default="#66bbdd"/>
<Variable name="content.background.color" description="Main Background" type="color" default="#ffffff"/>
<Variable name="header.background.color" description="Header Background" type="color" default="transparent"/>
</Group>
<Group description="Links" selector=".main-outer">
<Variable name="link.color" description="Link Color" type="color" default="#2288bb"/>
<Variable name="link.visited.color" description="Visited Color" type="color" default="#888888"/>
<Variable name="link.hover.color" description="Hover Color" type="color" default="#33aaff"/>
</Group>
<Group description="Blog Title" selector=".header h1">
<Variable name="header.font" description="Font" type="font"
default="normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="header.text.color" description="Title Color" type="color" default="#3399bb" />
</Group>
<Group description="Blog Description" selector=".header .description">
<Variable name="description.text.color" description="Description Color" type="color"
default="#777777" />
</Group>
<Group description="Tabs Text" selector=".tabs-inner .widget li a">
<Variable name="tabs.font" description="Font" type="font"
default="normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="tabs.text.color" description="Text Color" type="color" default="#999999"/>
<Variable name="tabs.selected.text.color" description="Selected Color" type="color" default="#000000"/>
</Group>
<Group description="Tabs Background" selector=".tabs-outer .PageList">
<Variable name="tabs.background.color" description="Background Color" type="color" default="#f5f5f5"/>
<Variable name="tabs.selected.background.color" description="Selected Color" type="color" default="#eeeeee"/>
</Group>
<Group description="Post Title" selector="h3.post-title, .comments h4">
<Variable name="post.title.font" description="Font" type="font"
default="normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
</Group>
<Group description="Date Header" selector=".date-header">
<Variable name="date.header.color" description="Text Color" type="color"
default="#222222"/>
<Variable name="date.header.background.color" description="Background Color" type="color"
default="transparent"/>
<Variable name="date.header.font" description="Text Font" type="font"
default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="date.header.padding" description="Date Header Padding" type="string" default="inherit"/>
<Variable name="date.header.letterspacing" description="Date Header Letter Spacing" type="string" default="inherit"/>
<Variable name="date.header.margin" description="Date Header Margin" type="string" default="inherit"/>
</Group>
<Group description="Post Footer" selector=".post-footer">
<Variable name="post.footer.text.color" description="Text Color" type="color" default="#666666"/>
<Variable name="post.footer.background.color" description="Background Color" type="color"
default="#f9f9f9"/>
<Variable name="post.footer.border.color" description="Shadow Color" type="color" default="#eeeeee"/>
</Group>
<Group description="Gadgets" selector="h2">
<Variable name="widget.title.font" description="Title Font" type="font"
default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="widget.title.text.color" description="Title Color" type="color" default="#000000"/>
<Variable name="widget.alternate.text.color" description="Alternate Color" type="color" default="#999999"/>
</Group>
<Group description="Images" selector=".main-inner">
<Variable name="image.background.color" description="Background Color" type="color" default="#ffffff"/>
<Variable name="image.border.color" description="Border Color" type="color" default="#eeeeee"/>
<Variable name="image.text.color" description="Caption Text Color" type="color" default="#222222"/>
</Group>
<Group description="Accents" selector=".content-inner">
<Variable name="body.rule.color" description="Separator Line Color" type="color" default="#eeeeee"/>
<Variable name="tabs.border.color" description="Tabs Border Color" type="color" default="#eeeeee"/>
</Group>
<Variable name="body.background" description="Body Background" type="background"
color="#eeaa00" default="$(color) none repeat scroll top left"/>
<Variable name="body.background.override" description="Body Background Override" type="string" default=""/>
<Variable name="body.background.gradient.cap" description="Body Gradient Cap" type="url"
default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/>
<Variable name="body.background.gradient.tile" description="Body Gradient Tile" type="url"
default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/body_gradient_tile_light.png)"/>
<Variable name="content.background.color.selector" description="Content Background Color Selector" type="string" default=".content-inner"/>
<Variable name="content.padding" description="Content Padding" type="length" default="10px" min="0" max="100px"/>
<Variable name="content.padding.horizontal" description="Content Horizontal Padding" type="length" default="10px" min="0" max="100px"/>
<Variable name="content.shadow.spread" description="Content Shadow Spread" type="length" default="40px" min="0" max="100px"/>
<Variable name="content.shadow.spread.webkit" description="Content Shadow Spread (WebKit)" type="length" default="5px" min="0" max="100px"/>
<Variable name="content.shadow.spread.ie" description="Content Shadow Spread (IE)" type="length" default="10px" min="0" max="100px"/>
<Variable name="main.border.width" description="Main Border Width" type="length" default="0" min="0" max="10px"/>
<Variable name="header.background.gradient" description="Header Gradient" type="url" default="none"/>
<Variable name="header.shadow.offset.left" description="Header Shadow Offset Left" type="length" default="-1px" min="-50px" max="50px"/>
<Variable name="header.shadow.offset.top" description="Header Shadow Offset Top" type="length" default="-1px" min="-50px" max="50px"/>
<Variable name="header.shadow.spread" description="Header Shadow Spread" type="length" default="1px" min="0" max="100px"/>
<Variable name="header.padding" description="Header Padding" type="length" default="30px" min="0" max="100px"/>
<Variable name="header.border.size" description="Header Border Size" type="length" default="1px" min="0" max="10px"/>
<Variable name="header.bottom.border.size" description="Header Bottom Border Size" type="length" default="0" min="0" max="10px"/>
<Variable name="header.border.horizontalsize" description="Header Horizontal Border Size" type="length" default="0" min="0" max="10px"/>
<Variable name="description.text.size" description="Description Text Size" type="string" default="140%"/>
<Variable name="tabs.margin.top" description="Tabs Margin Top" type="length" default="0" min="0" max="100px"/>
<Variable name="tabs.margin.side" description="Tabs Side Margin" type="length" default="30px" min="0" max="100px"/>
<Variable name="tabs.background.gradient" description="Tabs Background Gradient" type="url"
default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/>
<Variable name="tabs.border.width" description="Tabs Border Width" type="length" default="1px" min="0" max="10px"/>
<Variable name="tabs.bevel.border.width" description="Tabs Bevel Border Width" type="length" default="1px" min="0" max="10px"/>
<Variable name="post.margin.bottom" description="Post Bottom Margin" type="length" default="25px" min="0" max="100px"/>
<Variable name="image.border.small.size" description="Image Border Small Size" type="length" default="2px" min="0" max="10px"/>
<Variable name="image.border.large.size" description="Image Border Large Size" type="length" default="5px" min="0" max="10px"/>
<Variable name="page.width.selector" description="Page Width Selector" type="string" default=".region-inner"/>
<Variable name="page.width" description="Page Width" type="string" default="auto"/>
<Variable name="main.section.margin" description="Main Section Margin" type="length" default="15px" min="0" max="100px"/>
<Variable name="main.padding" description="Main Padding" type="length" default="15px" min="0" max="100px"/>
<Variable name="main.padding.top" description="Main Padding Top" type="length" default="30px" min="0" max="100px"/>
<Variable name="main.padding.bottom" description="Main Padding Bottom" type="length" default="30px" min="0" max="100px"/>
<Variable name="paging.background"
color="#ffffff"
description="Background of blog paging area" type="background"
default="transparent none no-repeat scroll top center"/>
<Variable name="footer.bevel" description="Bevel border length of footer" type="length" default="0" min="0" max="10px"/>
<Variable name="mobile.background.overlay" description="Mobile Background Overlay" type="string"
default="transparent none repeat scroll top left"/>
<Variable name="mobile.background.size" description="Mobile Background Size" type="string" default="auto"/>
<Variable name="mobile.button.color" description="Mobile Button Color" type="color" default="#ffffff" />
<Variable name="startSide" description="Side where text starts in blog language" type="automatic" default="left"/>
<Variable name="endSide" description="Side where text ends in blog language" type="automatic" default="right"/>
*/
/* Content
----------------------------------------------- */
body {
font: normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #222222;
background: #eeaa00 none repeat scroll top left;
padding: 0 40px 40px 40px;
}
html body .region-inner {
min-width: 0;
max-width: 100%;
width: auto;
}
h2 {
font-size: 22px;
}
a:link {
text-decoration:none;
color: #cc6611;
}
a:visited {
text-decoration:none;
color: #888888;
}
a:hover {
text-decoration:underline;
color: #ff9900;
}
.body-fauxcolumn-outer .fauxcolumn-inner {
background: transparent url(https://resources.blogblog.com/blogblog/data/1kt/simple/body_gradient_tile_light.png) repeat scroll top left;
_background-image: none;
}
.body-fauxcolumn-outer .cap-top {
position: absolute;
z-index: 1;
height: 400px;
width: 100%;
}
.body-fauxcolumn-outer .cap-top .cap-left {
width: 100%;
background: transparent url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png) repeat-x scroll top left;
_background-image: none;
}
.content-outer {
-moz-box-shadow: 0 0 40px rgba(0, 0, 0, .15);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .15);
-goog-ms-box-shadow: 0 0 10px #333333;
box-shadow: 0 0 40px rgba(0, 0, 0, .15);
margin-bottom: 1px;
}
.content-inner {
padding: 10px 10px;
}
.content-inner {
background-color: #ffffff;
}
/* Header
----------------------------------------------- */
.header-outer {
background: #cc6611 url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png) repeat-x scroll 0 -400px;
_background-image: none;
}
.Header h1 {
font: normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #ffffff;
text-shadow: 1px 2px 3px rgba(0, 0, 0, .2);
}
.Header h1 a {
color: #ffffff;
}
.Header .description {
font-size: 140%;
color: #ffffff;
}
.header-inner .Header .titlewrapper {
padding: 22px 30px;
}
.header-inner .Header .descriptionwrapper {
padding: 0 30px;
}
/* Tabs
----------------------------------------------- */
.tabs-inner .section:first-child {
border-top: 0 solid #eeeeee;
}
.tabs-inner .section:first-child ul {
margin-top: -0;
border-top: 0 solid #eeeeee;
border-left: 0 solid #eeeeee;
border-right: 0 solid #eeeeee;
}
.tabs-inner .widget ul {
background: #f5f5f5 url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png) repeat-x scroll 0 -800px;
_background-image: none;
border-bottom: 1px solid #eeeeee;
margin-top: 0;
margin-left: -30px;
margin-right: -30px;
}
.tabs-inner .widget li a {
display: inline-block;
padding: .6em 1em;
font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #999999;
border-left: 1px solid #ffffff;
border-right: 1px solid #eeeeee;
}
.tabs-inner .widget li:first-child a {
border-left: none;
}
.tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover {
color: #000000;
background-color: #eeeeee;
text-decoration: none;
}
/* Columns
----------------------------------------------- */
.main-outer {
border-top: 0 solid #eeeeee;
}
.fauxcolumn-left-outer .fauxcolumn-inner {
border-right: 1px solid #eeeeee;
}
.fauxcolumn-right-outer .fauxcolumn-inner {
border-left: 1px solid #eeeeee;
}
/* Headings
----------------------------------------------- */
div.widget > h2,
div.widget h2.title {
margin: 0 0 1em 0;
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #000000;
}
/* Widgets
----------------------------------------------- */
.widget .zippy {
color: #999999;
text-shadow: 2px 2px 1px rgba(0, 0, 0, .1);
}
.widget .popular-posts ul {
list-style: none;
}
/* Posts
----------------------------------------------- */
h2.date-header {
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
}
.date-header span {
background-color: transparent;
color: #222222;
padding: inherit;
letter-spacing: inherit;
margin: inherit;
}
.main-inner {
padding-top: 30px;
padding-bottom: 30px;
}
.main-inner .column-center-inner {
padding: 0 15px;
}
.main-inner .column-center-inner .section {
margin: 0 15px;
}
.post {
margin: 0 0 25px 0;
}
h3.post-title, .comments h4 {
font: normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
margin: .75em 0 0;
}
.post-body {
font-size: 110%;
line-height: 1.4;
position: relative;
}
.post-body img, .post-body .tr-caption-container, .Profile img, .Image img,
.BlogList .item-thumbnail img {
padding: 2px;
background: #ffffff;
border: 1px solid #eeeeee;
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
}
.post-body img, .post-body .tr-caption-container {
padding: 5px;
}
.post-body .tr-caption-container {
color: #222222;
}
.post-body .tr-caption-container img {
padding: 0;
background: transparent;
border: none;
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
box-shadow: 0 0 0 rgba(0, 0, 0, .1);
}
.post-header {
margin: 0 0 1.5em;
line-height: 1.6;
font-size: 90%;
}
.post-footer {
margin: 20px -2px 0;
padding: 5px 10px;
color: #666666;
background-color: #f9f9f9;
border-bottom: 1px solid #eeeeee;
line-height: 1.6;
font-size: 90%;
}
#comments .comment-author {
padding-top: 1.5em;
border-top: 1px solid #eeeeee;
background-position: 0 1.5em;
}
#comments .comment-author:first-child {
padding-top: 0;
border-top: none;
}
.avatar-image-container {
margin: .2em 0 0;
}
#comments .avatar-image-container img {
border: 1px solid #eeeeee;
}
/* Comments
----------------------------------------------- */
.comments .comments-content .icon.blog-author {
background-repeat: no-repeat;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
}
.comments .comments-content .loadmore a {
border-top: 1px solid #999999;
border-bottom: 1px solid #999999;
}
.comments .comment-thread.inline-thread {
background-color: #f9f9f9;
}
.comments .continue {
border-top: 2px solid #999999;
}
/* Accents
---------------------------------------------- */
.section-columns td.columns-cell {
border-left: 1px solid #eeeeee;
}
.blog-pager {
background: transparent none no-repeat scroll top center;
}
.blog-pager-older-link, .home-link,
.blog-pager-newer-link {
background-color: #ffffff;
padding: 5px;
}
.footer-outer {
border-top: 0 dashed #bbbbbb;
}
/* Mobile
----------------------------------------------- */
body.mobile {
background-size: auto;
}
.mobile .body-fauxcolumn-outer {
background: transparent none repeat scroll top left;
}
.mobile .body-fauxcolumn-outer .cap-top {
background-size: 100% auto;
}
.mobile .content-outer {
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15);
box-shadow: 0 0 3px rgba(0, 0, 0, .15);
}
.mobile .tabs-inner .widget ul {
margin-left: 0;
margin-right: 0;
}
.mobile .post {
margin: 0;
}
.mobile .main-inner .column-center-inner .section {
margin: 0;
}
.mobile .date-header span {
padding: 0.1em 10px;
margin: 0 -10px;
}
.mobile h3.post-title {
margin: 0;
}
.mobile .blog-pager {
background: transparent none no-repeat scroll top center;
}
.mobile .footer-outer {
border-top: none;
}
.mobile .main-inner, .mobile .footer-inner {
background-color: #ffffff;
}
.mobile-index-contents {
color: #222222;
}
.mobile-link-button {
background-color: #cc6611;
}
.mobile-link-button a:link, .mobile-link-button a:visited {
color: #ffffff;
}
.mobile .tabs-inner .section:first-child {
border-top: none;
}
.mobile .tabs-inner .PageList .widget-content {
background-color: #eeeeee;
color: #000000;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
.mobile .tabs-inner .PageList .widget-content .pagelist-arrow {
border-left: 1px solid #eeeeee;
}

--></style>
<style id='template-skin-1' type='text/css'><!--
body {
min-width: 1484px;
}
.content-outer, .content-fauxcolumn-outer, .region-inner {
min-width: 1484px;
max-width: 1484px;
_width: 1484px;
}
.main-inner .columns {
padding-left: 0px;
padding-right: 260px;
}
.main-inner .fauxcolumn-center-outer {
left: 0px;
right: 260px;
/* IE6 does not respect left and right together */
_width: expression(this.parentNode.offsetWidth -
parseInt("0px") -
parseInt("260px") + 'px');
}
.main-inner .fauxcolumn-left-outer {
width: 0px;
}
.main-inner .fauxcolumn-right-outer {
width: 260px;
}
.main-inner .column-left-outer {
width: 0px;
right: 100%;
margin-left: -0px;
}
.main-inner .column-right-outer {
width: 260px;
margin-right: -260px;
}
#layout {
min-width: 0;
}
#layout .content-outer {
min-width: 0;
width: 800px;
}
#layout .region-inner {
min-width: 0;
width: auto;
}
body#layout div.add_widget {
padding: 8px;
}
body#layout div.add_widget a {
margin-left: 32px;
}
--></style>
<!-- Data Dog -->
<script>
(function(h,o,u,n,d) {
h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}}
d=o.createElement(u);d.async=1;d.src=n
n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n)
})(window,document,'script','https://www.datadoghq-browser-agent.com/us5/v5/datadog-rum.js','DD_RUM')
window.DD_RUM.onReady(function() {
window.DD_RUM.init({
clientToken: 'pub78a9e982f0bcb12afc1d74511a9b8b93',
applicationId: 'ba4824f4-514f-43aa-b20c-739573a3f6a0',
// `site` refers to the Datadog site parameter of your organization
// see https://docs.datadoghq.com/getting_started/site/
site: 'us5.datadoghq.com',
service: 'myblog',
env: 'prod',
// Specify a version number to identify the deployed version of your application in Datadog
// version: '1.0.0',
sessionSampleRate: 100,
sessionReplaySampleRate: 0,
trackUserInteractions: true,
trackResources: true,
trackLongTasks: true,
defaultPrivacyLevel: 'mask-user-input',
});
})
</script>
<!-- Google tag (gtag.js) -->
<script async='async' src='https://www.googletagmanager.com/gtag/js?id=G-CG0W9SQ8ER'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'G-CG0W9SQ8ER');
</script>
<link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=2627747309936375689&amp;zx=8b8114ca-a771-4bab-858b-e2cdee8b1cb8' media='none' onload='if(media!=&#39;all&#39;)media=&#39;all&#39;' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=2627747309936375689&amp;zx=8b8114ca-a771-4bab-858b-e2cdee8b1cb8' rel='stylesheet'/></noscript>
<meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/>
<meta name='google-adsense-platform-domain' content='blogspot.com'/>

<!-- data-ad-client=ca-pub-3882106733936759 -->

<script type="text/javascript" language="javascript">
// Supply ads personalization default for EEA readers
// See https://www.blogger.com/go/adspersonalization
adsbygoogle = window.adsbygoogle || [];
if (typeof adsbygoogle.requestNonPersonalizedAds === 'undefined') {
adsbygoogle.requestNonPersonalizedAds = 1;
}
</script>


</head>
<body class='loading'>
<div class='navbar section' id='navbar' name='Navbar'><div class='widget Navbar' data-version='1' id='Navbar1'><script type="text/javascript">
function setAttributeOnload(object, attribute, val) {
if(window.addEventListener) {
window.addEventListener('load',
function(){ object[attribute] = val; }, false);
} else {
window.attachEvent('onload', function(){ object[attribute] = val; });
}
}
</script>
<div id="navbar-iframe-container"></div>
<script type="text/javascript" src="https://apis.google.com/js/platform.js"></script>
<script type="text/javascript">
gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() {
if (gapi.iframes && gapi.iframes.getContext) {
gapi.iframes.getContext().openChild({
url: 'https://www.blogger.com/navbar/2627747309936375689?origin\x3dhttps://www.albinsblog.com',
where: document.getElementById("navbar-iframe-container"),
id: "navbar-iframe"
});
}
});
</script><script type="text/javascript">
(function() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js';
var head = document.getElementsByTagName('head')[0];
if (head) {
head.appendChild(script);
}})();
</script>
</div></div>
<div itemscope='itemscope' itemtype='http://schema.org/Blog' style='display: none;'>
<meta content='Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate' itemprop='name'/>
<meta content='Explore in-depth insights on Adobe Experience Manager, Generative AI, Digital Asset Management, Digital Experience Platforms, Martech, and the latest' itemprop='description'/>
</div>
<div class='body-fauxcolumns'>
<div class='fauxcolumn-outer body-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content'>
<div class='content-fauxcolumns'>
<div class='fauxcolumn-outer content-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content-outer'>
<div class='content-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left content-fauxborder-left'>
<div class='fauxborder-right content-fauxborder-right'></div>
<div class='content-inner'>
<header>
<div class='header-outer'>
<div class='header-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left header-fauxborder-left'>
<div class='fauxborder-right header-fauxborder-right'></div>
<div class='region-inner header-inner'>
<div class='header section' id='header' name='Header'><div class='widget Header' data-version='1' id='Header1'>
<div id='header-inner'>
<div class='titlewrapper'>
<h1 class='title'>
Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate
</h1>
</div>
<div class='descriptionwrapper'>
<p class='description'><span>Welcome to Tech Mastery, your expert source for insights into technology and digital strategy. Explore topics like Adobe Experience Manager, AWS, Azure, generative AI, and advanced marketing strategies. Delve into MACH architecture, Jamstack, modern software practices, DevOps, and SEO. Our blog is ideal for tech professionals and enthusiasts eager to stay ahead in digital innovations, from Content Management to Digital Asset Management and beyond.</span></p>
</div>
</div>
</div></div>
</div>
</div>
<div class='header-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</header>
<div class='tabs-outer'>
<div class='tabs-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left tabs-fauxborder-left'>
<div class='fauxborder-right tabs-fauxborder-right'></div>
<div class='region-inner tabs-inner'>
<div class='tabs section' id='crosscol' name='Cross-Column'><div class='widget PageList' data-version='1' id='PageList1'>
<h2>Pages</h2>
<div class='widget-content'>
<ul>
<li>
<a href='https://www.albinsblog.com/search/label/GenAI?max-results=5'>Generative AI</a>
</li>
<li>
<a href='https://www.albinsblog.com/search/label/Adobe%20Experience%20Manager?max-results=5'>Adobe Experience Manager</a>
</li>
<li>
<a href='https://www.albinsblog.com/search/label/Java?max-results=5'>Java</a>
</li>
<li>
<a href='https://www.albinsblog.com/search/label/Web%20Development?max-results=5'>Web Development</a>
</li>
<li>
<a href='https://www.albinsblog.com/search/label/Videos?max-results=5'>Videos</a>
</li>
<li>
<a href='https://www.albinsblog.com/search/label/Others?max-results=5'>Others</a>
</li>
</ul>
<div class='clear'></div>
</div>
</div></div>
<div class='tabs no-items section' id='crosscol-overflow' name='Cross-Column 2'></div>
</div>
</div>
<div class='tabs-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='main-outer'>
<div class='main-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left main-fauxborder-left'>
<div class='fauxborder-right main-fauxborder-right'></div>
<div class='region-inner main-inner'>
<div class='columns fauxcolumns'>
<div class='fauxcolumn-outer fauxcolumn-center-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-left-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-right-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<!-- corrects IE6 width calculation -->
<div class='columns-inner'>
<div class='column-center-outer'>
<div class='column-center-inner'>
<div class='main section' id='main' name='Main'><div class='widget Blog' data-version='1' id='Blog1'>
<div class='blog-posts hfeed'>

<div class="date-outer">

<h2 class='date-header'><span>Thursday, July 3, 2025</span></h2>

<div class="date-posts">

<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/a/AVvXsEhlqMRBNzXqOcmFiduay8QTrU_AnrI09YopyK22csOviQ4JZxlH3ZVbNYD3jwimaje-I-4038IPTw9FP-qAnOv932tzCLl0dlA-lnNI6IGPr5gefCxyTIDD_1JXg_pYOmD5bkO9bhEvB_JrXdLUF5Kq4b_NKPFc0fMz-BXlgLSsbJbtK-BBaMl3EuvI1QG7=w400-h234' itemprop='image_url'/>
<meta content='2627747309936375689' itemprop='blogId'/>
<meta content='715033362237410653' itemprop='postId'/>
<a name='715033362237410653'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.albinsblog.com/2025/07/search-indexing-demystified-push-vs-pull-when-to-use.html'> Search Indexing Demystified: Push vs Pull, and When to Use Each</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-715033362237410653' itemprop='articleBody'>
<p>Search engines are essential to building content-driven user experiences&#8202;&#8212;&#8202;from marketing websites to product catalogs to knowledge portals. But before you can deliver great search results, you need a solid content indexing strategy.</p><p class="graf graf--p" name="b5ca">One of the foundational questions in search implementation is:</p><blockquote class="graf graf--blockquote graf--startsWithDoubleQuote" name="d403"><strong class="markup--strong markup--blockquote-strong"><em class="markup--em markup--blockquote-em">&#8220;How do we get our content into the search engine index?&#8221;</em></strong></blockquote><p class="graf graf--p" name="570e">The answer revolves around two key paradigms: <strong class="markup--strong markup--p-strong">Push</strong> vs <strong class="markup--strong markup--p-strong">Pull</strong> indexing.</p><p class="graf graf--p" name="8038">In this post, we&#8217;ll break down what each means, when to use them, real-world use cases, and how tools like <strong class="markup--strong markup--p-strong">ElasticSearch</strong> support both.</p><h3 class="graf graf--h3" name="f706">1. What is Search Indexing and Why Does It&nbsp;Matter?</h3><p class="graf graf--p" name="26e8"><strong class="markup--strong markup--p-strong">Search indexing</strong> is the process of collecting, processing, and storing content in a search engine so it can be retrieved when users search.</p><p class="graf graf--p" name="3511">Indexing ensures:</p><ul class="postList"><li class="graf graf--li" name="c968">New content is <strong class="markup--strong markup--li-strong">discoverable</strong> (e.g., product pages, articles)</li><li class="graf graf--li" name="412b">Updates are <strong class="markup--strong markup--li-strong">reflected</strong> in search (e.g., price or availability changes)</li><li class="graf graf--li" name="cd13">Deleted content is <strong class="markup--strong markup--li-strong">removed</strong> from results</li></ul><blockquote class="graf graf--blockquote" name="c25d"><em class="markup--em markup--blockquote-em">&#9888;&#65039; Without proper indexing, your search results may be </em><strong class="markup--strong markup--blockquote-strong"><em class="markup--em markup--blockquote-em">stale</em></strong><em class="markup--em markup--blockquote-em">, </em><strong class="markup--strong markup--blockquote-strong"><em class="markup--em markup--blockquote-em">incomplete</em></strong><em class="markup--em markup--blockquote-em">, or </em><strong class="markup--strong markup--blockquote-strong"><em class="markup--em markup--blockquote-em">misleading</em></strong><em class="markup--em markup--blockquote-em">&#8202;&#8212;&#8202;leading to a poor user experience.</em></blockquote><h3 class="graf graf--h3" name="9e17">2. Push vs Pull Indexing: Core&nbsp;Concepts</h3><div><br /></div><div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhlqMRBNzXqOcmFiduay8QTrU_AnrI09YopyK22csOviQ4JZxlH3ZVbNYD3jwimaje-I-4038IPTw9FP-qAnOv932tzCLl0dlA-lnNI6IGPr5gefCxyTIDD_1JXg_pYOmD5bkO9bhEvB_JrXdLUF5Kq4b_NKPFc0fMz-BXlgLSsbJbtK-BBaMl3EuvI1QG7" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="452" data-original-width="775" height="234" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEhlqMRBNzXqOcmFiduay8QTrU_AnrI09YopyK22csOviQ4JZxlH3ZVbNYD3jwimaje-I-4038IPTw9FP-qAnOv932tzCLl0dlA-lnNI6IGPr5gefCxyTIDD_1JXg_pYOmD5bkO9bhEvB_JrXdLUF5Kq4b_NKPFc0fMz-BXlgLSsbJbtK-BBaMl3EuvI1QG7=w400-h234-rw" width="400" /></a></div><br /><br /></div><div><br /></div><h3 class="graf graf--h3" name="9bb6">Push Indexing</h3><p class="graf graf--p" name="31d2">You <strong class="markup--strong markup--p-strong">actively send content</strong> to the search engine via APIs, SDKs, or data pipelines.</p><h4 class="graf graf--h4" name="04b2">When to&nbsp;Use:</h4><ul class="postList"><li class="graf graf--li" name="2f09">Real-time updates are essential (e.g., stock, pricing)</li><li class="graf graf--li" name="11ca">You own/control the source (e.g., CMS, PIM)</li><li class="graf graf--li" name="7626">Structured content (databases, JSON)</li></ul><h4 class="graf graf--h4" name="8d21">Typical Scenarios:</h4><ul class="postList"><li class="graf graf--li" name="39ed">E-commerce platforms updating inventory</li><li class="graf graf--li" name="64ec">CMS pushing new articles</li><li class="graf graf--li" name="5d3b">News feeds or user-generated content systems</li></ul><h3 class="graf graf--h3" name="c5d5">Pull Indexing</h3><p class="graf graf--p" name="6540">The search engine <strong class="markup--strong markup--p-strong">retrieves content itself</strong> using crawlers, connectors, or scheduled jobs.</p><h4 class="graf graf--h4" name="037b">When to&nbsp;Use:</h4><ul class="postList"><li class="graf graf--li" name="5dbe">Indexing public or 3rd-party content</li><li class="graf graf--li" name="3736">Static content where real-time isn&#8217;t critical</li><li class="graf graf--li" name="daa4">Unstructured sources (HTML, PDFs, docs)</li></ul><h4 class="graf graf--h4" name="4ae5">Typical Scenarios:</h4><ul class="postList"><li class="graf graf--li" name="4428">Crawling a blog using <code class="markup--code markup--li-code">sitemap.xml</code></li><li class="graf graf--li" name="5bb5">Indexing SharePoint or Google Drive documents</li><li class="graf graf--li" name="32bb">Pulling external data via REST APIs</li></ul><div><br /></div><h3 class="graf graf--h3" name="c050">3. Push vs Pull: Decision&nbsp;Matrix</h3><h3 class="graf graf--h3" name="c050"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhAlIvfRYTPBMicIy9sMxP1yfuM_Coxy3mvcqTphs9Z1_QHQaRPD7Cdqx84KBUbj3I9VYAOwZ3-Z6cR0jLlXIfp0ZfxFLHv1pFmGX65vIpuQ0pnnguqAlU7cosu_hkiKzlmwIj6ZJxYdqT2pNusm_0iNFa-cnrzLUewgdSW90BGliq6AARwx8jxhqoefZNd" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="196" data-original-width="686" height="114" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEhAlIvfRYTPBMicIy9sMxP1yfuM_Coxy3mvcqTphs9Z1_QHQaRPD7Cdqx84KBUbj3I9VYAOwZ3-Z6cR0jLlXIfp0ZfxFLHv1pFmGX65vIpuQ0pnnguqAlU7cosu_hkiKzlmwIj6ZJxYdqT2pNusm_0iNFa-cnrzLUewgdSW90BGliq6AARwx8jxhqoefZNd=w400-h114-rw" width="400" /></a></h3><figure class="graf graf--figure" name="c325"><div class="separator" style="clear: both; text-align: center;"><br /></div></figure><h3 class="graf graf--h3" name="39db">4. ElasticSearch as an&nbsp;Example</h3><h3 class="graf graf--h3" name="ad4d"><br /></h3><h3 class="graf graf--h3" name="ad4d">Push Indexing in ElasticSearch</h3><ul class="postList"><li class="graf graf--li" name="0fdf">Use <strong class="markup--strong markup--li-strong">Index API</strong> or <strong class="markup--strong markup--li-strong">Bulk API</strong> to send data</li><li class="graf graf--li" name="981d">Set up <strong class="markup--strong markup--li-strong">Ingest Pipelines</strong> for transformation</li></ul><pre class="graf graf--pre graf--preV2" data-code-block-lang="bash" data-code-block-mode="1" name="9ed2" spellcheck="false"><span class="pre--content"> POST /products/_doc/123<br /> {<br /> <span class="hljs-string">"name"</span>: <span class="hljs-string">"Product X"</span>,<br /> <span class="hljs-string">"description"</span>: <span class="hljs-string">"High quality..."</span>,<br /> <span class="hljs-string">"price"</span>: 59.99<br /> }</span></pre><h3 class="graf graf--h3" name="df63">Pull Indexing in ElasticSearch</h3><p class="graf graf--p" name="e443">Via <strong class="markup--strong markup--p-strong">Enterprise Search connectors</strong>:</p><ul class="postList"><li class="graf graf--li" name="da54"><strong class="markup--strong markup--li-strong">Web crawler</strong> (starting from sitemap)</li><li class="graf graf--li" name="49dc"><strong class="markup--strong markup--li-strong">REST API data source</strong></li><li class="graf graf--li" name="5306"><strong class="markup--strong markup--li-strong">Database connectors</strong> (MySQL, MongoDB, etc.)</li></ul><div><br /></div><h3 class="graf graf--h3" name="8a03">5. Real-World Use&nbsp;Cases</h3><figure class="graf graf--figure" name="48c9"><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiO9zv9eyenh0Sw2x0hjlkykkcxJo-odL8osbmT7NZraGAFut8ID9GUP3NQmdPgErudsxDCawflqZxSRMuvGbzlwfDaE6Bnxzj0SiGMnAl__CRXXhKhUi7fYsePwD3_XKiWW6QPEbHb5kgoqvM0vjkvooshIwcuvv9RVTuzDbRYpsORYejLx7Xl0_50Tw-d" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="362" data-original-width="365" height="397" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEiO9zv9eyenh0Sw2x0hjlkykkcxJo-odL8osbmT7NZraGAFut8ID9GUP3NQmdPgErudsxDCawflqZxSRMuvGbzlwfDaE6Bnxzj0SiGMnAl__CRXXhKhUi7fYsePwD3_XKiWW6QPEbHb5kgoqvM0vjkvooshIwcuvv9RVTuzDbRYpsORYejLx7Xl0_50Tw-d=w400-h397-rw" width="400" /></a></div><br /><br /></figure><h3 class="graf graf--h3" name="765e">6. How Other Platforms Handle&nbsp;Indexing</h3><figure class="graf graf--figure" name="b842"><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjyj1xBOYFh4naxX67OxXoynEsPsX2wCtuPK5gkrMPLfC3c_Oe4bVqIZTBzz9W46I0up0RS4LD1wR4TpWXyruwzUOWGxVW_GyyZShBz3LQtsQXSLobBtB1ynN_GgzXSSmkyIwX-nFJ2iBiqtbR8DmkksSJtrAGZDPBLeTnoup4b85lIVABd_ZwSsqDQ06x0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="197" data-original-width="433" height="183" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEjyj1xBOYFh4naxX67OxXoynEsPsX2wCtuPK5gkrMPLfC3c_Oe4bVqIZTBzz9W46I0up0RS4LD1wR4TpWXyruwzUOWGxVW_GyyZShBz3LQtsQXSLobBtB1ynN_GgzXSSmkyIwX-nFJ2iBiqtbR8DmkksSJtrAGZDPBLeTnoup4b85lIVABd_ZwSsqDQ06x0=w400-h183-rw" width="400" /></a></div><br /><br /></figure><h3 class="graf graf--h3" name="01df">7. Final Thoughts: Designing Your Indexing&nbsp;Pipeline</h3><p class="graf graf--p" name="b195">When deciding between Push and Pull:</p><p class="graf graf--p" name="eff0">Consider:</p><ul class="postList"><li class="graf graf--li" name="611a">Content structure (structured vs unstructured)</li><li class="graf graf--li" name="d6a2">Frequency of updates</li><li class="graf graf--li" name="683e">Source system control</li><li class="graf graf--li" name="a03a">Access restrictions</li></ul><p class="graf graf--p" name="25fb"><strong class="markup--strong markup--p-strong">Hybrid approaches often work best</strong>:</p><ul class="postList"><li class="graf graf--li" name="e6ad">Push structured, frequently updated content (e.g., products)</li><li class="graf graf--li" name="af53">Pull public or slowly changing content (e.g., blogs, FAQs)</li></ul><h3 class="graf graf--h3" name="7aee">&nbsp;Takeaway</h3><p class="graf graf--p" name="5787">Before implementing search, take time to define your <strong class="markup--strong markup--p-strong">indexing strategy</strong>&#8202;&#8212;&#8202;it&#8217;s as important as search relevance itself.</p><p class="graf graf--p" name="1afe">If you&#8217;re using ElasticSearch:</p><ul class="postList"><li class="graf graf--li" name="23bf">Start with <strong class="markup--strong markup--li-strong">Push</strong> for internal systems</li><li class="graf graf--li" name="cdcb">Explore <strong class="markup--strong markup--li-strong">Pull</strong> using crawlers or connectors as your content ecosystem expands</li></ul><p class="graf graf--p" name="30f2">And remember: great search depends not just on what you show, but on how fast and reliably you get it there.</p>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/06872295047306188060' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/06872295047306188060' rel='author' title='author profile'>
<span itemprop='name'>Tech Forum</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.albinsblog.com/2025/07/search-indexing-demystified-push-vs-pull-when-to-use.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.albinsblog.com/2025/07/search-indexing-demystified-push-vs-pull-when-to-use.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-07-03T13:04:00-05:00'>7/03/2025 01:04:00 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.albinsblog.com/2025/07/search-indexing-demystified-push-vs-pull-when-to-use.html#comment-form' onclick=''>
No comments:
</a>
</span>
<span class='post-icons'>
</span>
<div class='post-share-buttons goog-inline-block'>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.albinsblog.com/search/label/General' rel='tag'>General</a>,
<a href='https://www.albinsblog.com/search/label/Indexing' rel='tag'>Indexing</a>,
<a href='https://www.albinsblog.com/search/label/Search' rel='tag'>Search</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

</div></div>


<div class="date-outer">

<h2 class='date-header'><span>Monday, March 31, 2025</span></h2>

<div class="date-posts">

<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/a/AVvXsEiAsTCXH13noip_3bi3L1BDg_6fEZ8NPNvkQkinJgaWvLxIlOMWzND3ooBKhJ4BomZ5bkN-xDN6VpTLO-l0OWVuGKnGwClGMGPPDapFu_Ye_T0sESkIKGVA0sc8vN6c-4Jb2mLPXGcboCbhuCCA2Un-SlR7yMdZ5F18pzp2YUQeGXP9KM1YPZN_KfzROwHl=w640-h380' itemprop='image_url'/>
<meta content='2627747309936375689' itemprop='blogId'/>
<meta content='6385165541295996967' itemprop='postId'/>
<a name='6385165541295996967'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.albinsblog.com/2025/03/enabling-custom-validation-for-content-fragments-aem-as-a-cloud.html'>Enabling Custom Validation for Content Fragment Fields in AEM as a Cloud Service &#8211; New CF Editor</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-6385165541295996967' itemprop='articleBody'>
<p>In my earlier posts, we discussed how to enable <a href="https://medium.com/tech-learnings/aem-cloud-service-composite-multifield-in-content-fragments-editor-new-editor-8021bf11f8b6" target="_blank">Composite MultiField in Content Fragments </a>and how to <a href="https://medium.com/tech-learnings/aem-cloud-enabling-dynamic-data-fields-in-the-new-content-fragment-editor-a3b6f6d70b19" target="_blank">enable dynamic data fields in the new Content Fragment editor</a>. In this post, we will explore how to enable custom validations for Content Fragment fields. Most of the steps are similar to those outlined in the previous posts. You will create a field in the Content Fragment model, and using the field name, you will register the extension. Please refer to one of the earlier posts for a step-by-step guide to enabling the extension.</p><p>While creating a Content Fragment Model, you can set up various out-of-the-box (OOTB) validations for the CF fields, such as MaxLength and Required. These validations should be applied to the overridden fields by fetching the configurations from the model. Additionally, other validations like Email, URL, and Regex can also be applied to the fields from the model.</p><p><strong data-end="82" data-start="73">Note:</strong> Please be aware that the content of this blog does not reflect the views of Adobe or my current organization. Before applying this approach, make sure to validate it thoroughly and ensure that it aligns with Adobe's recommendations.</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiAsTCXH13noip_3bi3L1BDg_6fEZ8NPNvkQkinJgaWvLxIlOMWzND3ooBKhJ4BomZ5bkN-xDN6VpTLO-l0OWVuGKnGwClGMGPPDapFu_Ye_T0sESkIKGVA0sc8vN6c-4Jb2mLPXGcboCbhuCCA2Un-SlR7yMdZ5F18pzp2YUQeGXP9KM1YPZN_KfzROwHl" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="460" data-original-width="773" height="380" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEiAsTCXH13noip_3bi3L1BDg_6fEZ8NPNvkQkinJgaWvLxIlOMWzND3ooBKhJ4BomZ5bkN-xDN6VpTLO-l0OWVuGKnGwClGMGPPDapFu_Ye_T0sESkIKGVA0sc8vN6c-4Jb2mLPXGcboCbhuCCA2Un-SlR7yMdZ5F18pzp2YUQeGXP9KM1YPZN_KfzROwHl=w640-h380-rw" width="640" /></a></div><br />Now, additional validations can be applied through the extension. The out-of-the-box (OOTB) validations, such as Email, URL, and custom regex validations, are applied first, followed by custom validations. For example, if I enable Email validation, the field will only accept valid email addresses. Then, I can add another custom validation rule to reject certain predefined emails, such as <code data-end="496" data-start="479"><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8df9e8fef9bccdeae0ece4e1a3eee2e0">[email&#160;protected]</a></code>. This can be achieved through custom regex, but I&#8217;m just using this as an example for the demo.<p></p><h3 style="text-align: left;">Extension Component to enable additional custom validation Rules:</h3><div><b>CustomFieldValidation.js</b></div><div><br /></div><div><div><i>import React, { useEffect, useState } from "react";</i></div><div><i>import { attach } from "@adobe/uix-guest";</i></div><div><i>import { extensionId } from "./Constants";</i></div><div><i>import { TextField, Provider, View, defaultTheme } from "@adobe/react-spectrum";</i></div><div><i><br /></i></div><div><i>const CustomFieldValidation = () =&gt; {</i></div><div><i>&nbsp; const [connection, setConnection] = useState(null);</i></div><div><i>&nbsp; const [model, setModel] = useState(null);</i></div><div><i>&nbsp; const [value, setValue] = useState("");</i></div><div><i>&nbsp; const [customError, setCustomError] = useState(null);</i></div><div><i>&nbsp; const [isInvalid, setIsInvalid] = useState(false);</i></div><div><i>&nbsp; const [validationInProgress, setValidationInProgress] = useState(false);</i></div><div><i><br /></i></div><div><i>&nbsp; const validate = (val) =&gt; {</i></div><div><i>&nbsp; &nbsp; if (!connection?.host?.field) return;</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; let error = null;</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; // Custom validation rule</i></div><div><i>&nbsp; &nbsp; if (typeof val === "string" &amp;&amp; val.toLowerCase() === "<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ffbeafcfbbecfe8e2eee6e3a1ece0e2">[email&#160;protected]</a>") {</i></div><div><i>&nbsp; &nbsp; &nbsp; error = "The value '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0e7a6b7d7a3f4e69636f6762206d6163">[email&#160;protected]</a>' is not allowed.";</i></div><div><i>&nbsp; &nbsp; }</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; setCustomError(error);</i></div><div><i>&nbsp; &nbsp; setIsInvalid(!!error);</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; if (!error || validationInProgress) return;</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; setValidationInProgress(true);</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; // Delay call to allow host readiness</i></div><div><i>&nbsp; &nbsp; setTimeout(() =&gt; {</i></div><div><i>&nbsp; &nbsp; &nbsp; try {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; connection.host.field</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .setValidationState({ state: "invalid", message: error })</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .catch((err) =&gt; {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.warn(</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "setValidationState failed:",</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; err?.message || JSON.stringify(err)</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .finally(() =&gt; setValidationInProgress(false));</i></div><div><i>&nbsp; &nbsp; &nbsp; } catch (err) {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; console.warn("setValidationState threw:", err?.message || JSON.stringify(err));</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; setValidationInProgress(false);</i></div><div><i>&nbsp; &nbsp; &nbsp; }</i></div><div><i>&nbsp; &nbsp; }, 1000); // 1s delay for stability</i></div><div><i>&nbsp; };</i></div><div><i><br /></i></div><div><i>&nbsp; const handleChange = (val) =&gt; {</i></div><div><i>&nbsp; &nbsp; setValue(val);</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; try {</i></div><div><i>&nbsp; &nbsp; &nbsp; connection?.host?.field?.onChange(val).catch((err) =&gt;</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; console.warn("onChange failed:", err?.message || JSON.stringify(err))</i></div><div><i>&nbsp; &nbsp; &nbsp; );</i></div><div><i>&nbsp; &nbsp; } catch (err) {</i></div><div><i>&nbsp; &nbsp; &nbsp; console.warn("onChange threw:", err?.message || JSON.stringify(err));</i></div><div><i>&nbsp; &nbsp; }</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; validate(val);</i></div><div><i>&nbsp; };</i></div><div><i><br /></i></div><div><i>&nbsp; useEffect(() =&gt; {</i></div><div><i>&nbsp; &nbsp; const init = async () =&gt; {</i></div><div><i>&nbsp; &nbsp; &nbsp; try {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; if (!extensionId) {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new Error("Missing extensionId. Check Constants file.");</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; }</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; const conn = await attach({ id: extensionId });</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; if (!conn?.host?.field) {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new Error("Host field API is unavailable.");</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; }</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; setConnection(conn);</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; const modelData = await conn.host.field.getModel();</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; setModel(modelData);</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; const defaultValue = (await conn.host.field.getDefaultValue()) || "";</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; setValue(defaultValue);</i></div><div><i>&nbsp; &nbsp; &nbsp; } catch (err) {</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; console.error("Extension init failed:", err?.message || JSON.stringify(err));</i></div><div><i>&nbsp; &nbsp; &nbsp; }</i></div><div><i>&nbsp; &nbsp; };</i></div><div><i><br /></i></div><div><i>&nbsp; &nbsp; init();</i></div><div><i>&nbsp; }, []);</i></div><div><i><br /></i></div><div><i>&nbsp; if (!connection || !model) {</i></div><div><i>&nbsp; &nbsp; return (</i></div><div><i>&nbsp; &nbsp; &nbsp; &lt;Provider theme={defaultTheme}&gt;</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &lt;View padding="size-200"&gt;Loading custom field&#8230;&lt;/View&gt;</i></div><div><i>&nbsp; &nbsp; &nbsp; &lt;/Provider&gt;</i></div><div><i>&nbsp; &nbsp; );</i></div><div><i>&nbsp; }</i></div><div><i><br /></i></div><div><i>&nbsp; return (</i></div><div><i>&nbsp; &nbsp; &lt;Provider theme={defaultTheme}&gt;</i></div><div><i>&nbsp; &nbsp; &nbsp; &lt;View padding="size-200" width="100%"&gt;</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &lt;TextField</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label={model?.fieldLabel || "Custom Field"}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value={value}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onChange={handleChange}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isRequired={model?.required || false}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder={model?.emptyText || "Enter a value"}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validationState={isInvalid ? "invalid" : undefined}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorMessage={model?.customErrorMsg || customError}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maxLength={model?.maxLength || undefined}</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width="100%"</i></div><div><i>&nbsp; &nbsp; &nbsp; &nbsp; /&gt;</i></div><div><i>&nbsp; &nbsp; &nbsp; &lt;/View&gt;</i></div><div><i>&nbsp; &nbsp; &lt;/Provider&gt;</i></div><div><i>&nbsp; );</i></div><div><i>};</i></div><div><i>export default CustomFieldValidation;</i></div></div><div><br /></div><div>Now the custom validation Rules are executed</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhEfpQ-jSk0U51ttyCGMD3O8s0nonaG3BP9ZTD5S_1bgbRUmzGQIEpABMfYlD75StKBfWAgiNHy2SYw81zqc-WfCSah771DZ-Cb8XzoWDL7H6MGw82eeI22ISLucBXg6n_Gzv5SQuT5MqxjZWW_xRWUyyH_ZZIfW8GGMK1FW5Bn7ZzzHPyHffxqLx8NL5aG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="417" data-original-width="803" height="332" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEhEfpQ-jSk0U51ttyCGMD3O8s0nonaG3BP9ZTD5S_1bgbRUmzGQIEpABMfYlD75StKBfWAgiNHy2SYw81zqc-WfCSah771DZ-Cb8XzoWDL7H6MGw82eeI22ISLucBXg6n_Gzv5SQuT5MqxjZWW_xRWUyyH_ZZIfW8GGMK1FW5Bn7ZzzHPyHffxqLx8NL5aG=w640-h332-rw" width="640" /></a></div></div><div><br /></div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/06872295047306188060' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/06872295047306188060' rel='author' title='author profile'>
<span itemprop='name'>Tech Forum</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.albinsblog.com/2025/03/enabling-custom-validation-for-content-fragments-aem-as-a-cloud.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.albinsblog.com/2025/03/enabling-custom-validation-for-content-fragments-aem-as-a-cloud.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-03-31T12:57:00-05:00'>3/31/2025 12:57:00 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.albinsblog.com/2025/03/enabling-custom-validation-for-content-fragments-aem-as-a-cloud.html#comment-form' onclick=''>
No comments:
</a>
</span>
<span class='post-icons'>
</span>
<div class='post-share-buttons goog-inline-block'>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

</div></div>


<div class="date-outer">

<h2 class='date-header'><span>Sunday, March 9, 2025</span></h2>

<div class="date-posts">

<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/a/AVvXsEgOmwOyNp2e6sl6U6vs8MHTHglwcDI6e9GZiWJJdSw-mH4FGsueq0s4o6Z-mt-IkbZrTbqyK0-Gjb5NQvcJA_SBLf2hBzE_X3WmJigU9tndjH5LWAhMkFh8m6o4nToqGVWAI2dvnwTe81wTgah6UcDlWu5LuLv4sLouRpZknICVszTYQFMw-PSdIuTyAjg9=w640-h462' itemprop='image_url'/>
<meta content='2627747309936375689' itemprop='blogId'/>
<meta content='5811015004276638409' itemprop='postId'/>
<a name='5811015004276638409'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.albinsblog.com/2025/03/error-response-from-daemon-get-https-registry-1-docker-io-v2-net-http-request-cancelled-while-waiting-for-connection-client-timeout-exceeded-while-awaiting-headers.html'>Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-5811015004276638409' itemprop='articleBody'>
<p data-end="608" data-start="487">While trying to <strong data-end="526" data-start="503">pull a Docker image</strong>, the <code data-end="545" data-start="532">docker pull</code> command was <strong data-end="575" data-start="558">stuck forever</strong> without any progress or error.</p><h3 data-end="635" data-start="610"><strong data-end="633" data-start="614">System Details:</strong></h3><ul data-end="707" data-start="636">
<li data-end="654" data-start="636"><strong data-end="652" data-start="638">Windows 10</strong></li>
<li data-end="677" data-start="655"><strong data-end="675" data-start="657">WSL 2 - Ubuntu</strong></li>
<li data-end="707" data-start="678"><strong data-end="705" data-start="680">Docker Desktop 4.38.0</strong></li>
</ul><h3 data-end="731" data-start="709"><strong data-end="729" data-start="713">Issue Faced:</strong></h3><div><strong data-end="729" data-start="713"><br /></strong></div>Running <code data-end="756" data-start="743">docker pull</code> was <strong data-end="783" data-start="761">stuck indefinitely</strong>.<div><br /><div class="separator" style="clear: both;"><img loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEgOmwOyNp2e6sl6U6vs8MHTHglwcDI6e9GZiWJJdSw-mH4FGsueq0s4o6Z-mt-IkbZrTbqyK0-Gjb5NQvcJA_SBLf2hBzE_X3WmJigU9tndjH5LWAhMkFh8m6o4nToqGVWAI2dvnwTe81wTgah6UcDlWu5LuLv4sLouRpZknICVszTYQFMw-PSdIuTyAjg9=w640-h462-rw" /></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Trying to log - <i>docker login -u &lt;username&gt;</i> in using the command prompt failed with this error:</div><pre class="!overflow-visible" data-end="1040" data-start="858"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950"><div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre"><i>"Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http:
request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"</i>&nbsp;</code></div></div></pre><div><strong data-end="1099" data-start="1044"><br /></strong></div><div><strong data-end="1099" data-start="1044">Even signing into Docker Desktop was not successful</strong>.</div><div><br /></div><div>Login on <strong data-end="1140" data-start="1114">Docker Hub via browser</strong> was working fine, but <strong data-end="1218" data-start="1163">Docker Desktop was not picking up the login session</strong>.<p data-end="1489" data-start="1223">I followed different forums and applied multiple configuration suggestions, including adjusting <strong data-end="1342" data-start="1319">nameserver settings</strong> inside <code data-end="1368" data-start="1350">/etc/resolv.conf</code>, but <strong data-end="1392" data-start="1374">nothing worked</strong>.</p><p data-end="1489" data-start="1223">
Also, <strong data-end="1449" data-start="1402">WSL 2 networking was working fine otherwise</strong> &#8212; only Docker commands were impacted.</p><h3 data-end="1512" data-start="1491"><strong data-end="1510" data-start="1495">Resolution:</strong></h3><p>








</p><p data-end="1694" data-start="1513">Finally, the issue got resolved after <strong data-end="1610" data-start="1551">upgrading Docker Desktop to the latest version (4.39.0)</strong>.<br data-end="1614" data-start="1611" />
<em data-end="1692" data-start="1614">(Older versions may also work &#8212; I tried with 4.35.1, and it worked as well).</em></p><p data-end="1694" data-start="1513"></p><div class="separator" style="clear: both;"><img loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEjn9B58TGyhLR6vKtJJUDx02DuQWV-S7A22n_F53aGrwX1hSoTd52kzJuAl4ir9uLol8nRcR-Ir2R9paIGjt4lhmXvDwed8j_HjXWjL01y0SBsAtldnw1AUgRd5p36b876S5RiITx4TpTKSdAllgGPLOdb3Y3ympXO2YxJ5S7kKckPEWpAtH-iVdn5gxPxl=w640-h220-rw" /><em data-end="1692" data-start="1614"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjn9B58TGyhLR6vKtJJUDx02DuQWV-S7A22n_F53aGrwX1hSoTd52kzJuAl4ir9uLol8nRcR-Ir2R9paIGjt4lhmXvDwed8j_HjXWjL01y0SBsAtldnw1AUgRd5p36b876S5RiITx4TpTKSdAllgGPLOdb3Y3ympXO2YxJ5S7kKckPEWpAtH-iVdn5gxPxl" style="margin-left: 1em; margin-right: 1em;"></a></em></div><em data-end="1692" data-start="1614"><br /><br /></em><p></p><p></p></div></div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/06872295047306188060' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/06872295047306188060' rel='author' title='author profile'>
<span itemprop='name'>Tech Forum</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.albinsblog.com/2025/03/error-response-from-daemon-get-https-registry-1-docker-io-v2-net-http-request-cancelled-while-waiting-for-connection-client-timeout-exceeded-while-awaiting-headers.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.albinsblog.com/2025/03/error-response-from-daemon-get-https-registry-1-docker-io-v2-net-http-request-cancelled-while-waiting-for-connection-client-timeout-exceeded-while-awaiting-headers.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-03-09T14:46:00-05:00'>3/09/2025 02:46:00 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.albinsblog.com/2025/03/error-response-from-daemon-get-https-registry-1-docker-io-v2-net-http-request-cancelled-while-waiting-for-connection-client-timeout-exceeded-while-awaiting-headers.html#comment-form' onclick=''>
No comments:
</a>
</span>
<span class='post-icons'>
</span>
<div class='post-share-buttons goog-inline-block'>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.albinsblog.com/search/label/General' rel='tag'>General</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

</div></div>


<div class="date-outer">

<h2 class='date-header'><span>Thursday, March 6, 2025</span></h2>

<div class="date-posts">

<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/a/AVvXsEiLkK4BvpeLexnW7Sm3x30U3Wg8MDQQEtsCqejfMFozCQJwgUg-c5ZQgo8fvt0zHlrgZUJIP1kgH5m75ccb6bp2YEWEZCK-1ckx3NsGEEZDtkr-JOvGtQMb5ktl-u-H4S1nr-ahzrYVD972FTfTFGymxvwsFgajh7MFMoyzwZ22t7dWhfO6qRH0cGUJPgoP=w640-h248' itemprop='image_url'/>
<meta content='2627747309936375689' itemprop='blogId'/>
<meta content='2101552867293164017' itemprop='postId'/>
<a name='2101552867293164017'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.albinsblog.com/2025/03/esolving-aem-content-fragment-export-to-adobe-target.html'>Resolving AEM Content Fragment Export to Adobe Target Failure</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-2101552867293164017' itemprop='articleBody'>
<p data-pm-slice="1 1 []">When exporting <strong>AEM Content Fragments</strong> as <strong>JSON Offers to Adobe Target</strong>, you may encounter an error preventing the successful integration. This post details the issue, its root cause, and the steps to resolve it.</p><div><hr /></div><h2><strong>Issue</strong></h2><p>The <strong>AEM Content Fragment Export to Adobe Target</strong> failed with the following exception:</p><pre><code>06.03.2025 12:59:31.223 *DEBUG* [[0:0:0:0:0:0:0:1] [1741287571223] GET /content/dam/content-fragments/test/test-cf/.permissions.json HTTP/1.1]
com.test.core.filters.LoggingFilter request for /content/dam/content-fragments/test/test-cf/, with selector permissions

06.03.2025 12:59:40.706 *DEBUG* [[0:0:0:0:0:0:0:1] [1741287580703] POST /content/dam/content-fragments/test/test-cf.cfm.targetexport HTTP/1.1]
com.test.core.filters.LoggingFilter request for /content/dam/content-fragments/test/test-cf, with selector cfm

06.03.2025 12:59:40.710 *ERROR* [[0:0:0:0:0:0:0:1] [1741287580703] POST /content/dam/content-fragments/test/test-cf.cfm.targetexport HTTP/1.1]
com.adobe.cq.dam.cfm.graphql.extensions.querygen.impl.service.QueryGeneratorServiceImpl
Cannot find Sites GraphQL endpoint resource, cannot generate GraphQL query </code></pre><h2><strong>Root Cause</strong></h2><p>This issue occurs because <strong>no GraphQL endpoint is defined</strong> for Adobe Target to fetch <strong>Content Fragment details</strong>. The export process requires a valid GraphQL endpoint to retrieve structured content from AEM and send it to Adobe Target.</p><h2><strong>Solution</strong></h2><p>To resolve this issue, follow these steps to define a <strong>global GraphQL endpoint</strong> in AEM:</p><ol data-spread="false" start="1"><li><p><strong>Log into AEM</strong> and navigate to <strong>Tools &#8594; General &#8594; GraphQL</strong>.</p></li><li><p><strong>Create a new GraphQL endpoint</strong> and associate it with <strong>/conf/global</strong>.</p></li><li><p><strong>Save and publish the endpoint</strong> to make it accessible.</p></li></ol><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiLkK4BvpeLexnW7Sm3x30U3Wg8MDQQEtsCqejfMFozCQJwgUg-c5ZQgo8fvt0zHlrgZUJIP1kgH5m75ccb6bp2YEWEZCK-1ckx3NsGEEZDtkr-JOvGtQMb5ktl-u-H4S1nr-ahzrYVD972FTfTFGymxvwsFgajh7MFMoyzwZ22t7dWhfO6qRH0cGUJPgoP" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="584" data-original-width="1508" height="248" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEiLkK4BvpeLexnW7Sm3x30U3Wg8MDQQEtsCqejfMFozCQJwgUg-c5ZQgo8fvt0zHlrgZUJIP1kgH5m75ccb6bp2YEWEZCK-1ckx3NsGEEZDtkr-JOvGtQMb5ktl-u-H4S1nr-ahzrYVD972FTfTFGymxvwsFgajh7MFMoyzwZ22t7dWhfO6qRH0cGUJPgoP=w640-h248-rw" width="640" /></a></div>Once configured, the <strong>AEM Content Fragment export to Adobe Target</strong> will be successful, allowing the fragments to be used in <strong>Adobe Target Activities</strong> for personalized content experiences.<br />
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/06872295047306188060' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/06872295047306188060' rel='author' title='author profile'>
<span itemprop='name'>Tech Forum</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.albinsblog.com/2025/03/esolving-aem-content-fragment-export-to-adobe-target.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.albinsblog.com/2025/03/esolving-aem-content-fragment-export-to-adobe-target.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-03-06T14:26:00-06:00'>3/06/2025 02:26:00 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.albinsblog.com/2025/03/esolving-aem-content-fragment-export-to-adobe-target.html#comment-form' onclick=''>
No comments:
</a>
</span>
<span class='post-icons'>
</span>
<div class='post-share-buttons goog-inline-block'>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.albinsblog.com/search/label/Adobe%20Target' rel='tag'>Adobe Target</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

</div></div>


<div class="date-outer">

<h2 class='date-header'><span>Wednesday, March 5, 2025</span></h2>

<div class="date-posts">

<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/a/AVvXsEhf8ZjCnaXkpyzOSk3n67tz2fRFOYc5pF1I-oeP6RJE1YMUpGO1qVtW9PmVZWzna9zSfnmVJy9SuE3iZUmHux6Q3q7LN78fITK6RvmhHaLZOOYnD9cga9bkNNiBUX5ibr2Wv53_YH8C7oauMoZaRT3SxvWTJqDUhNkXRVG-bz_-GnVqMOQ-G_wQivSnPUwV=w640-h505' itemprop='image_url'/>
<meta content='2627747309936375689' itemprop='blogId'/>
<meta content='8128766165290289661' itemprop='postId'/>
<a name='8128766165290289661'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.albinsblog.com/2025/03/api-gateway-vs-service-mesh.html'>API Gateway vs Service Mesh: Understanding the Differences</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-8128766165290289661' itemprop='articleBody'>
<p><strong>Introduction</strong></p><p>As modern applications increasingly rely on <strong>microservices architectures</strong>, managing communication between services becomes crucial. Two key technologies that help address these challenges are <strong>API Gateways</strong> and <strong>Service Meshes</strong>. While both manage service-to-service communication, they serve different purposes and operate at different layers of an application architecture. This blog explores their <strong>differences, use cases, and how to decide which one to use</strong>.</p><div><hr /></div><h2><strong><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhf8ZjCnaXkpyzOSk3n67tz2fRFOYc5pF1I-oeP6RJE1YMUpGO1qVtW9PmVZWzna9zSfnmVJy9SuE3iZUmHux6Q3q7LN78fITK6RvmhHaLZOOYnD9cga9bkNNiBUX5ibr2Wv53_YH8C7oauMoZaRT3SxvWTJqDUhNkXRVG-bz_-GnVqMOQ-G_wQivSnPUwV" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="881" data-original-width="1117" height="505" loading="lazy" src="https://blogger.googleusercontent.com/img/a/AVvXsEhf8ZjCnaXkpyzOSk3n67tz2fRFOYc5pF1I-oeP6RJE1YMUpGO1qVtW9PmVZWzna9zSfnmVJy9SuE3iZUmHux6Q3q7LN78fITK6RvmhHaLZOOYnD9cga9bkNNiBUX5ibr2Wv53_YH8C7oauMoZaRT3SxvWTJqDUhNkXRVG-bz_-GnVqMOQ-G_wQivSnPUwV=w640-h505-rw" width="640" /></a></div><br /></strong></h2><h2><strong>1. What is an API Gateway?</strong></h2><p>An <strong>API Gateway</strong> is an entry point for <strong>external clients</strong> to interact with an application&#8217;s backend services. It acts as a reverse proxy that routes requests to the appropriate microservices while handling concerns like <strong>authentication, rate limiting, logging, and caching</strong>.</p><h3><strong>Key Features of an API Gateway</strong></h3><p></p><ul style="text-align: left;"><li><strong>Traffic Routing &amp; Load Balancing</strong> &#8211; Directs external requests to the correct microservice.</li><li><strong>Authentication &amp; Authorization</strong> &#8211; Enforces security policies using OAuth, JWT, or API keys.</li><li><strong>Rate Limiting &amp; Throttling</strong> &#8211; Prevents abuse by limiting the number of requests per client.</li><li><strong>Request Transformation</strong> &#8211; Modifies request/response formats to ensure compatibility.</li><li><strong>Logging &amp; Monitoring</strong> &#8211; Tracks API calls for analytics and debugging.</li><li><strong>Caching</strong> &#8211; Stores frequently accessed responses to improve performance.</li></ul><p></p><h3><strong>Popular API Gateway Solutions</strong></h3><ul data-spread="false"><li><p><strong>Kong</strong> (Open-source and enterprise API management)</p></li><li><p><strong>Amazon API Gateway</strong> (AWS-managed API gateway)</p></li><li><p><strong>Apigee</strong> (Google Cloud API management platform)</p></li><li><p><strong>Nginx</strong> (Lightweight API Gateway &amp; reverse proxy)</p></li><li><p><strong>Traefik</strong> (Cloud-native API Gateway)</p></li></ul><div><hr /></div><h2><strong>2. What is a Service Mesh?</strong></h2><p>A <strong>Service Mesh</strong> is a dedicated infrastructure layer for managing service-to-service communication within a microservices architecture. Unlike API Gateways, which handle <strong>north-south traffic (client-to-service requests)</strong>, a Service Mesh focuses on <strong>east-west traffic (internal service-to-service communication)</strong>.</p><h3><strong>Key Features of a Service Mesh</strong></h3><p></p><ul style="text-align: left;"><li><strong>Service Discovery &amp; Load Balancing</strong> &#8211; Automatically detects services and distributes traffic efficiently.</li><li><strong>mTLS (Mutual TLS) Encryption</strong> &#8211; Secures communication between services.</li><li><strong>Observability &amp; Tracing</strong> &#8211; Provides deep insights into service interactions.</li><li><strong>Traffic Management</strong> &#8211; Enables request routing, retries, and fault tolerance.</li><li><strong>Policy Enforcement</strong> &#8211; Manages service access policies, authentication, and authorization.</li><li><strong>Circuit Breaking &amp; Failover</strong> &#8211; Prevents cascading failures by limiting retries and isolating failing services.</li></ul><p></p><h3><strong>Popular Service Mesh Solutions</strong></h3><ul data-spread="false"><li><p><strong>Istio</strong> (One of the most popular service meshes, integrates with Kubernetes)</p></li><li><p><strong>Linkerd</strong> (Lightweight service mesh for Kubernetes)</p></li><li><p><strong>Consul</strong> (Service mesh and service discovery solution by HashiCorp)</p></li><li><p><strong>AWS App Mesh</strong> (Managed service mesh for AWS environments)</p></li></ul><div><hr /></div><h2><strong>3. API Gateway vs Service Mesh: Key Differences</strong></h2><table><tbody><tr><th><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;">Feature</blockquote></th><th>API Gateway</th><th>Service Mesh</th></tr><tr><td><strong>Primary Focus</strong></td><td>External traffic (north-south)</td><td>Internal service-to-service traffic (east-west)</td></tr><tr><td><strong>Traffic Management</strong></td><td>Request routing, load balancing</td><td>Service discovery, retries, circuit breaking</td></tr><tr><td><strong>Security Features</strong></td><td>Authentication, rate limiting</td><td>Mutual TLS, fine-grained service access control</td></tr><tr><td><strong>Performance Optimization</strong></td><td>Caching, compression</td><td>Traffic shaping, observability, tracing</td></tr><tr><td><strong>Deployment</strong></td><td>Edge of the network</td><td>Embedded within the infrastructure</td></tr><tr><td><strong>Best for</strong></td><td>Exposing APIs to external users</td><td>Managing inter-service communication</td></tr></tbody></table><div><hr /></div><h2><strong>4. When to Use an API Gateway vs. a Service Mesh?</strong></h2><h3><strong>Use an API Gateway When:</strong></h3><p></p><ul style="text-align: left;"><li>You need to expose your APIs securely to <strong>external clients</strong>.</li><li>You require <strong>authentication, rate limiting, or request transformation</strong>.</li><li>You want to improve performance with <strong>caching and load balancing</strong>.</li><li>You need to monetize APIs or apply API lifecycle management.</li></ul><p></p><h3><strong>Use a Service Mesh When:</strong></h3><p></p><ul style="text-align: left;"><li>You have <strong>multiple microservices</strong> that need <strong>secure communication</strong> between them.</li><li>You need <strong>observability, tracing, and traffic management</strong> across services.</li><li>You want <strong>mTLS-based encryption</strong> for secure service-to-service communication.</li><li>You need <strong>fine-grained policy enforcement</strong> between microservices.</li></ul><p></p><div><hr /></div><h2><strong>5. Can API Gateways and Service Mesh Work Together?</strong></h2><p>Yes! API Gateways and Service Mesh <strong>complement</strong> each other rather than compete. Many modern architectures combine both to achieve <strong>end-to-end traffic management</strong>.</p><h3><strong>Example Architecture with API Gateway &amp; Service Mesh</strong></h3><ol data-spread="false" start="1"><li><p><strong>API Gateway (Edge Layer)</strong>: Handles <strong>external client requests</strong>, authentication, rate limiting, and API exposure.</p></li><li><p><strong>Service Mesh (Internal Layer)</strong>: Manages <strong>service-to-service communication, security, and observability</strong>.</p></li></ol><p>This combination allows for <strong>better security, scalability, and resilience</strong> in microservices architectures.</p><div><hr /></div><h2><strong>Conclusion</strong></h2><p>Both <strong>API Gateways and Service Meshes</strong> play essential roles in microservices architectures, but they serve <strong>different purposes</strong>. While <strong>API Gateways manage external traffic</strong>, <strong>Service Meshes optimize internal service-to-service communication</strong>. Organizations should <strong>evaluate their architecture needs</strong> and consider using both for a <strong>comprehensive microservices communication strategy</strong>.</p>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/06872295047306188060' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/06872295047306188060' rel='author' title='author profile'>
<span itemprop='name'>Tech Forum</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.albinsblog.com/2025/03/api-gateway-vs-service-mesh.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.albinsblog.com/2025/03/api-gateway-vs-service-mesh.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-03-05T21:42:00-06:00'>3/05/2025 09:42:00 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.albinsblog.com/2025/03/api-gateway-vs-service-mesh.html#comment-form' onclick=''>
No comments:
</a>
</span>
<span class='post-icons'>
</span>
<div class='post-share-buttons goog-inline-block'>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.albinsblog.com/search/label/General' rel='tag'>General</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

</div></div>

</div>
<div class='blog-pager' id='blog-pager'>
<span id='blog-pager-older-link'>
<a class='blog-pager-older-link' href='https://www.albinsblog.com/search?updated-max=2025-03-05T21:42:00-06:00&max-results=5' id='Blog1_blog-pager-older-link' title='Older Posts'>Older Posts</a>
</span>
<a class='home-link' href='https://www.albinsblog.com/'>Home</a>
</div>
<div class='clear'></div>
<div class='blog-feeds'>
<div class='feed-links'>
Subscribe to:
<a class='feed-link' href='https://www.albinsblog.com/feeds/posts/default' target='_blank' type='application/atom+xml'>Posts (Atom)</a>
</div>
</div>
</div></div>
</div>
</div>
<div class='column-left-outer'>
<div class='column-left-inner'>
<aside>
</aside>
</div>
</div>
<div class='column-right-outer'>
<div class='column-right-inner'>
<aside>
<div class='sidebar section' id='sidebar-right-1'><div class='widget BlogSearch' data-version='1' id='BlogSearch1'>
<h2 class='title'>Search This Blog</h2>
<div class='widget-content'>
<div id='BlogSearch1_form'>
<form action='https://www.albinsblog.com/search' class='gsc-search-box' target='_top'>
<table cellpadding='0' cellspacing='0' class='gsc-search-box'>
<tbody>
<tr>
<td class='gsc-input'>
<input autocomplete='off' class='gsc-input' name='q' size='10' title='search' type='text' value=''/>
</td>
<td class='gsc-search-button'>
<input class='gsc-search-button' title='search' type='submit' value='Search'/>
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<div class='clear'></div>
</div><div class='widget LinkList' data-version='1' id='LinkList1'>
<h2>My Profile</h2>
<div class='widget-content'>
<ul>
<li><a href='https://myprofile.albinsblog.com'>https://myprofile.albinsblog.com</a></li>
</ul>
<div class='clear'></div>
</div>
</div><div class='widget HTML' data-version='1' id='HTML3'>
<h2 class='title'>Subscribe on YouTube</h2>
<div class='widget-content'>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://apis.google.com/js/platform.js"></script>

<div class="g-ytsubscribe" data-channelid="UCmsMxlu34bCXPQ_pCN1J0-w" data-layout="full" data-theme="dark" data-count="hidden"></div>
</div>
<div class='clear'></div>
</div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'>
<h2>Blog Archive</h2>
<div class='widget-content'>
<div id='ArchiveList'>
<div id='BlogArchive1_ArchiveList'>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy toggle-open'>

&#9660;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2025/'>
2025
</a>
<span class='post-count' dir='ltr'>(10)</span>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy toggle-open'>

&#9660;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2025/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='posts'>
<li><a href='https://www.albinsblog.com/2025/07/search-indexing-demystified-push-vs-pull-when-to-use.html'>Search Indexing Demystified: Push vs Pull, and Whe...</a></li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2025/03/'>
March
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2025/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2025/01/'>
January
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/'>
2024
</a>
<span class='post-count' dir='ltr'>(29)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/11/'>
November
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/10/'>
October
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/08/'>
August
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/07/'>
July
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/06/'>
June
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/05/'>
May
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/04/'>
April
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/03/'>
March
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/02/'>
February
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2024/01/'>
January
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/'>
2023
</a>
<span class='post-count' dir='ltr'>(21)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/12/'>
December
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/10/'>
October
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/09/'>
September
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/04/'>
April
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/03/'>
March
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/02/'>
February
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2023/01/'>
January
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/'>
2022
</a>
<span class='post-count' dir='ltr'>(23)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/10/'>
October
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/09/'>
September
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/08/'>
August
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/05/'>
May
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/04/'>
April
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/03/'>
March
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/02/'>
February
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2022/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/'>
2021
</a>
<span class='post-count' dir='ltr'>(20)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/12/'>
December
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/11/'>
November
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/10/'>
October
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/09/'>
September
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/02/'>
February
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2021/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/'>
2020
</a>
<span class='post-count' dir='ltr'>(45)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/12/'>
December
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/11/'>
November
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/10/'>
October
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/09/'>
September
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/08/'>
August
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/07/'>
July
</a>
<span class='post-count' dir='ltr'>(8)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/06/'>
June
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/05/'>
May
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/04/'>
April
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2020/01/'>
January
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/'>
2019
</a>
<span class='post-count' dir='ltr'>(43)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/12/'>
December
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/10/'>
October
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/06/'>
June
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/05/'>
May
</a>
<span class='post-count' dir='ltr'>(15)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/04/'>
April
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/03/'>
March
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/02/'>
February
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2019/01/'>
January
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/'>
2018
</a>
<span class='post-count' dir='ltr'>(35)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/12/'>
December
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/09/'>
September
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/07/'>
July
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/06/'>
June
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/05/'>
May
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/04/'>
April
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/03/'>
March
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/02/'>
February
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2018/01/'>
January
</a>
<span class='post-count' dir='ltr'>(8)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/'>
2017
</a>
<span class='post-count' dir='ltr'>(40)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/12/'>
December
</a>
<span class='post-count' dir='ltr'>(14)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/11/'>
November
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/05/'>
May
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/04/'>
April
</a>
<span class='post-count' dir='ltr'>(8)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/03/'>
March
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2017/02/'>
February
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/'>
2016
</a>
<span class='post-count' dir='ltr'>(18)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/06/'>
June
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/05/'>
May
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/04/'>
April
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/02/'>
February
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2016/01/'>
January
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/'>
2015
</a>
<span class='post-count' dir='ltr'>(83)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/12/'>
December
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/10/'>
October
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/09/'>
September
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/07/'>
July
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/06/'>
June
</a>
<span class='post-count' dir='ltr'>(8)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/05/'>
May
</a>
<span class='post-count' dir='ltr'>(10)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/04/'>
April
</a>
<span class='post-count' dir='ltr'>(10)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/03/'>
March
</a>
<span class='post-count' dir='ltr'>(13)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/02/'>
February
</a>
<span class='post-count' dir='ltr'>(14)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2015/01/'>
January
</a>
<span class='post-count' dir='ltr'>(8)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/'>
2014
</a>
<span class='post-count' dir='ltr'>(90)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/12/'>
December
</a>
<span class='post-count' dir='ltr'>(10)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/11/'>
November
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/09/'>
September
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/07/'>
July
</a>
<span class='post-count' dir='ltr'>(10)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/06/'>
June
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/05/'>
May
</a>
<span class='post-count' dir='ltr'>(12)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/04/'>
April
</a>
<span class='post-count' dir='ltr'>(29)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/03/'>
March
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2014/01/'>
January
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/'>
2013
</a>
<span class='post-count' dir='ltr'>(38)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/12/'>
December
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/10/'>
October
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/09/'>
September
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/08/'>
August
</a>
<span class='post-count' dir='ltr'>(21)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/03/'>
March
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/02/'>
February
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2013/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/'>
2012
</a>
<span class='post-count' dir='ltr'>(123)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/12/'>
December
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/11/'>
November
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/10/'>
October
</a>
<span class='post-count' dir='ltr'>(13)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/09/'>
September
</a>
<span class='post-count' dir='ltr'>(24)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/08/'>
August
</a>
<span class='post-count' dir='ltr'>(10)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/07/'>
July
</a>
<span class='post-count' dir='ltr'>(13)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/06/'>
June
</a>
<span class='post-count' dir='ltr'>(9)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/05/'>
May
</a>
<span class='post-count' dir='ltr'>(21)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/04/'>
April
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/03/'>
March
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/02/'>
February
</a>
<span class='post-count' dir='ltr'>(7)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2012/01/'>
January
</a>
<span class='post-count' dir='ltr'>(6)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2011/'>
2011
</a>
<span class='post-count' dir='ltr'>(60)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2011/12/'>
December
</a>
<span class='post-count' dir='ltr'>(9)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2011/11/'>
November
</a>
<span class='post-count' dir='ltr'>(31)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

&#9658;&#160;

</span>
</a>
<a class='post-count-link' href='https://www.albinsblog.com/2011/10/'>
October
</a>
<span class='post-count' dir='ltr'>(20)</span>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class='clear'></div>
</div>
</div></div>
</aside>
</div>
</div>
</div>
<div style='clear: both'></div>
<!-- columns -->
</div>
<!-- main -->
</div>
</div>
<div class='main-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<footer>
<div class='footer-outer'>
<div class='footer-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left footer-fauxborder-left'>
<div class='fauxborder-right footer-fauxborder-right'></div>
<div class='region-inner footer-inner'>
<div class='foot no-items section' id='footer-1'></div>
<table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'>
<tbody>
<tr>
<td class='first columns-cell'>
<div class='foot no-items section' id='footer-2-1'></div>
</td>
<td class='columns-cell'>
<div class='foot no-items section' id='footer-2-2'></div>
</td>
</tr>
</tbody>
</table>
<!-- outside of the include in order to lock Attribution widget -->
<div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' data-version='1' id='Attribution1'>
<div class='widget-content' style='text-align: center;'>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7716131a1e1937161b151e1904151b18105914181a">[email&#160;protected]</a>. Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>.
</div>
<div class='clear'></div>
</div></div>
</div>
</div>
<div class='footer-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</footer>
<!-- content -->
</div>
</div>
<div class='content-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script type='text/javascript'>
window.setTimeout(function() {
document.body.className = document.body.className.replace('loading', '');
}, 10);
</script>
<!--Es liegt in deiner Verantwortung, deine Besucher \xfcber die in deinem Blog verwendeten Cookies und die dort erfassten Daten zu informieren. Blogger stellt daf\xfcr eine Standardbenachrichtigung zur Verf\xfcgung, die du \xfcbernehmen, anpassen oder durch deine eigene Mitteilung ersetzen kannst. Weitere Informationen findest du unter http://www.blogger.com/go/cookiechoices.-->
<script defer='' src='/js/cookienotice.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function(event) {
window.cookieChoices && cookieChoices.showCookieConsentBar && cookieChoices.showCookieConsentBar(
(window.cookieOptions && cookieOptions.msg) || 'Diese Website verwendet Cookies von Google, um Dienste anzubieten und Zugriffe zu analysieren. Deine IP-Adresse und dein User-Agent werden zusammen mit Messwerten zur Leistung und Sicherheit f\xfcr Google freigegeben. So k\xf6nnen Nutzungsstatistiken generiert, Missbrauchsf\xe4lle erkannt und behoben und die Qualit\xe4t des Dienstes gew\xe4hrleistet werden.',
(window.cookieOptions && cookieOptions.close) || 'Ok',
(window.cookieOptions && cookieOptions.learn) || 'Weitere Informationen',
(window.cookieOptions && cookieOptions.link) || 'https://www.blogger.com/go/blogspot-cookies');
});
</script>

<script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/3000588928-widgets.js"></script>
<script type='text/javascript'>
window['__wavt'] = 'AOuZoY6jevsQNm4A_zy_KtcL5cQff51u3w:1753432484425';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d2627747309936375689','//www.albinsblog.com/','2627747309936375689');
_WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '2627747309936375689', 'title': 'Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate', 'url': 'https://www.albinsblog.com/', 'canonicalUrl': 'https://www.albinsblog.com/', 'homepageUrl': 'https://www.albinsblog.com/', 'searchUrl': 'https://www.albinsblog.com/search', 'canonicalHomepageUrl': 'https://www.albinsblog.com/', 'blogspotFaviconUrl': 'https://www.albinsblog.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': '', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate - Atom\x22 href\x3d\x22https://www.albinsblog.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate - RSS\x22 href\x3d\x22https://www.albinsblog.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/2627747309936375689/posts/default\x22 /\x3e\n', 'meTag': '\x3clink rel\x3d\x22me\x22 href\x3d\x22https://www.blogger.com/profile/06872295047306188060\x22 /\x3e\n', 'adsenseClientId': 'ca-pub-3882106733936759', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': true, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/8a67ddfb3e3580e6', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'index', 'pageName': '', 'pageTitle': 'Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate', 'metaDescription': 'Explore in-depth insights on Adobe Experience Manager, Generative AI, Digital Asset Management, Digital Experience Platforms, Martech, and the latest'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate', 'description': 'Explore in-depth insights on Adobe Experience Manager, Generative AI, Digital Asset Management, Digital Experience Platforms, Martech, and the latest', 'url': 'https://www.albinsblog.com/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': true, 'isArchive': false, 'isLabelSearch': false}}]);
_WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', document.getElementById('Navbar1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_PageListView', new _WidgetInfo('PageList1', 'crosscol', document.getElementById('PageList1'), {'title': 'Pages', 'links': [{'isCurrentPage': false, 'href': 'https://www.albinsblog.com/search/label/GenAI?max-results\x3d5', 'title': 'Generative AI'}, {'isCurrentPage': false, 'href': 'https://www.albinsblog.com/search/label/Adobe%20Experience%20Manager?max-results\x3d5', 'title': 'Adobe Experience Manager'}, {'isCurrentPage': false, 'href': 'https://www.albinsblog.com/search/label/Java?max-results\x3d5', 'title': 'Java'}, {'isCurrentPage': false, 'href': 'https://www.albinsblog.com/search/label/Web%20Development?max-results\x3d5', 'title': 'Web Development'}, {'isCurrentPage': false, 'href': 'https://www.albinsblog.com/search/label/Videos?max-results\x3d5', 'title': 'Videos'}, {'isCurrentPage': false, 'href': 'https://www.albinsblog.com/search/label/Others?max-results\x3d5', 'title': 'Others'}], 'mobile': false, 'showPlaceholder': true, 'hasCurrentPage': false}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/3301882144-lbx.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/123180807-lightbox_bundle.css'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogSearchView', new _WidgetInfo('BlogSearch1', 'sidebar-right-1', document.getElementById('BlogSearch1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_LinkListView', new _WidgetInfo('LinkList1', 'sidebar-right-1', document.getElementById('LinkList1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML3', 'sidebar-right-1', document.getElementById('HTML3'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-1', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull'));
</script>
</body>
</html>

Ads.Txt Alerts - A trading name of Red Volcano Limited

Waterloo Buildings, Second Floor Rear, 53 London Road, Southampton, Hampshire, United Kingdom, SO15 2AD

© Red Volcano 2020. All Rights Reserved.