<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sitecore Xperiences &#187; Uncategorized</title>
	<atom:link href="https://blog.peplau.com.br/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.peplau.com.br</link>
	<description>The things I&#039;ve seen as a Sitecore Professional</description>
	<lastBuildDate>Sun, 09 Mar 2025 21:54:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Rodrigo Peplau wins his 8th Sitecore MVP Award</title>
		<link>https://blog.peplau.com.br/rodrigo-peplau-wins-his-8th-sitecore-mvp-award/</link>
		<comments>https://blog.peplau.com.br/rodrigo-peplau-wins-his-8th-sitecore-mvp-award/#comments</comments>
		<pubDate>Tue, 31 Jan 2023 15:03:05 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=959</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/rodrigo-peplau-wins-his-8th-sitecore-mvp-award/"></div>Elite distinction awarded for commitment and dedication to the Sitecore community Florianópolis, SC, Brazil — January 31, 2023 — Arke Systems, today announced that Rodrigo Peplau, Country Head in Brazil has been named a Most Valuable Professional (MVP) in the Technology category by Sitecore®, a global leader in end-to-end digital experience management software. Rodrigo Peplau was one of only 137 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><em>Elite distinction awarded for commitment and dedication to the Sitecore community</em></p>
<p><strong>Florianópolis, SC, Brazil — January 31, 2023 — Arke Systems, </strong>today announced that <strong>Rodrigo Peplau, Country Head in Brazil</strong> has been named a Most Valuable Professional (MVP) in the <strong>Technology category</strong> by <a href="http://www.sitecore.com/">Sitecore</a>®, a global leader in end-to-end digital experience management software. <strong>Rodrigo Peplau</strong> was one of only 137 Technology MVPs worldwide to be named a Sitecore MVP this year.</p>
<p>Now in its 17<sup>th</sup> year, the MVP program recognizes professionals who actively share their fascination, knowledge and expertise with online and offline Sitecore communities to help them best utilize Sitecore products to deliver premier customer experiences.</p>
<p>Selected out of more than 16,000 certified developers and over 30,000 active community participants, the 241 MVPs are truly an elite group. This year’s MVPs were selected by a panel of Sitecore employees for the quality, quantity and impact of the contributions they made in 2022, including the sharing of product expertise and advanced knowledge of the Sitecore platform to support both partners and customers.</p>
<p><strong> </strong>“We’re pleased that for the seventeenth time, we’re honoring experts who have distinguished themselves through their technical acumen and dedication to helping others build great digital experiences,” said Dave O’Flanagan, Sitecore&#8217;s chief product officer. “We continue to be impressed by the passion with which the MVPs share their professional and technical expertise and experience with customers and partners. They’re an invaluable asset to the global Sitecore community, and we’re truly grateful for their unique contributions.”</p>
<p>&nbsp;</p>
<p>More information about the MVP Program can be found on the Sitecore MVP site: <a href="https://mvp.sitecore.com/">https://mvp.sitecore.com</a></p>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/rodrigo-peplau-wins-his-8th-sitecore-mvp-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sitecore 9 Update 1 - Bug saving Shared Layout in Experience Editor</title>
		<link>https://blog.peplau.com.br/sitecore-9-update-1-bug-saving-shared-layout-in-experience-editor/</link>
		<comments>https://blog.peplau.com.br/sitecore-9-update-1-bug-saving-shared-layout-in-experience-editor/#comments</comments>
		<pubDate>Thu, 01 Feb 2018 14:08:19 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Bug fixing]]></category>
		<category><![CDATA[Experience Editor]]></category>
		<category><![CDATA[Support Ticket]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=717</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/sitecore-9-update-1-bug-saving-shared-layout-in-experience-editor/"></div>A few weeks ago, while upgrading one of at Nish Tech&#8217;s early-stages projects into Sitecore 9 Update 1, a very strange behavior when you try to do a very simple task: edit a Shared Layout of a page in Experience Editor. When you try to do that, the infamous screen &#8220;Layout not Set&#8221; shows right [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A few weeks ago, while upgrading one of at Nish Tech&#8217;s early-stages projects into Sitecore 9 Update 1, a very strange behavior when you try to do a very simple task: edit a Shared Layout of a page in Experience Editor.</p>
<p>When you try to do that, the infamous screen &#8220;Layout not Set&#8221; shows right after saving.</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Sitecore-9-Bug.png"><img class="alignnone wp-image-719 size-full" src="http://blog.peplau.com.br/wp-content/uploads/Sitecore-9-Bug.png" alt="Sitecore 9 Bug" width="1544" height="800" /></a></p>
<p>Initially, I observed that when saving in a _Standard Values, but later I noticed it can also happen with ordinary items. If you want to see how to reproduce the error, check <a title="SC9U1 Save Shared Layout in Experience Editor in a Standard Values" href="http://blog.peplau.com.br/wp-content/uploads/SC9U1-Save-Shared-Layout-in-Experience-Editor-in-a-Standard-Values.avi" target="_blank">this video</a>.</p>
<p>Interesting enough, when you look at your <em>Layout</em> and <em>Final Layout</em> fields in Raw mode, you notice that the Shared Layout has a value such as:</p>
<blockquote><p><em>&lt;r xmlns:p=&#8221;p&#8221; xmlns:s=&#8221;s&#8221; p:p=&#8221;1&#8243;&gt;&lt;d id=&#8221;{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}&#8221;&gt;&lt;r uid=&#8221;{597C17AD-DEF3-4947-BE5B-4104A2143F17}&#8221; p:after=&#8221;*[1=2]&#8221; s:id=&#8221;{493B3A83-0FA7-4484-8FC9-4680991CF743}&#8221; s:ph=&#8221;/main/centercolumn/content&#8221; /&gt;&lt;/d&gt;&lt;/r&gt;</em></p></blockquote>
<p>Which seems to have a more appropriate syntax to be in the <em>Final Layout</em> field instead, as you can check if you match this against the original value:</p>
<blockquote><p><em>&lt;r xmlns:xsd=&#8221;http://www.w3.org/2001/XMLSchema&#8221;&gt;&lt;d id=&#8221;{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}&#8221; l=&#8221;{14030E9F-CE92-49C6-AD87-7D49B50E42EA}&#8221;&gt;&lt;r ds=&#8221;&#8221; id=&#8221;{885B8314-7D8C-4CBB-8000-01421EA8F406}&#8221; par=&#8221;&#8221; ph=&#8221;main&#8221; uid=&#8221;{43222D12-08C9-453B-AE96-D406EBB95126}&#8221; /&gt;&lt;r ds=&#8221;&#8221; id=&#8221;{CE4ADCFB-7990-4980-83FB-A00C1E3673DB}&#8221; par=&#8221;&#8221; ph=&#8221;/main/centercolumn&#8221; uid=&#8221;{CF044AD9-0332-407A-ABDE-587214A2C808}&#8221; /&gt;&lt;r ds=&#8221;&#8221; id=&#8221;{493B3A83-0FA7-4484-8FC9-4680991CF743}&#8221; par=&#8221;&#8221; ph=&#8221;/main/centercolumn/content&#8221; uid=&#8221;{B343725A-3A93-446E-A9C8-3A2CBD3DB489}&#8221; /&gt;&lt;/d&gt;&lt;d id=&#8221;{46D2F427-4CE5-4E1F-BA10-EF3636F43534}&#8221; l=&#8221;{14030E9F-CE92-49C6-AD87-7D49B50E42EA}&#8221;&gt;&lt;r ds=&#8221;&#8221; id=&#8221;{493B3A83-0FA7-4484-8FC9-4680991CF743}&#8221; par=&#8221;&#8221; ph=&#8221;content&#8221; uid=&#8221;{A08C9132-DBD1-474F-A2CA-6CA26A4AA650}&#8221; /&gt;&lt;/d&gt;&lt;/r&gt;</em></p></blockquote>
<h2>Sitecore Helpdesk heroes</h2>
<p>Then I reported the issue to our amazing Sitecore Helpdesk, who after a couple weeks came out with a bugfix, that now I want to share with our Sitecore Community.</p>
<p>I would like to thank the whole gang of superheroes at Sitecore Helpdesk, for providing this good HotFix in a proper time and allowing me to share it, in special to <b id="aui-3-18-0-4_4908">Igor Denisenko</b>, <b id="aui-3-18-0-4_4908"><b id="aui-3-18-0-4_4929">Pavel Ivashchenko </b></b>and <b id="aui-3-18-0-4_4908"><b id="aui-3-18-0-4_4929"><b id="aui-3-18-0-4_4937">Ielyzaveta Kalinchuk</b></b></b>,<b id="aui-3-18-0-4_4908"><b id="aui-3-18-0-4_4929"><b id="aui-3-18-0-4_4937"> </b></b></b>the good guys who replied to my ticket. You are awesome, mates!</p>
<h2>The cure: HotFix 203387</h2>
<p>You can find the hotfix at <a href="http://dl.sitecore.net/hotfix/SC%20Hotfix-203387-1%20Sitecore.ExperienceEditor%204.1.1.zip">this link</a>.</p>
<ul>
<li>Please be aware that the hotfix was built <strong>specifically for Sitecore XP 9.0 rev. 171219 (Update-1)!</strong> You should not install it on other Sitecore versions or in combination with other hotfixes unless explicitly instructed by Sitecore Support;</li>
<li>Note that you need to extract ZIP file contents to locate installation instructions and related files inside it.</li>
</ul>
<p>If you have anything to add on this, please drop a comment and let me know!</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/sitecore-9-update-1-bug-saving-shared-layout-in-experience-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.peplau.com.br/wp-content/uploads/SC9U1-Save-Shared-Layout-in-Experience-Editor-in-a-Standard-Values.avi" length="1083148" type="video/avi" />
		</item>
		<item>
		<title>Prevent orphan components in Experience Editor when deleting composed components</title>
		<link>https://blog.peplau.com.br/prevent-a-component-to-be-deleted-in-experience-editor-when-it-has-inner-components/</link>
		<comments>https://blog.peplau.com.br/prevent-a-component-to-be-deleted-in-experience-editor-when-it-has-inner-components/#comments</comments>
		<pubDate>Fri, 29 Sep 2017 22:44:45 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Content Edition Experience]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Experience Editor]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=617</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/prevent-a-component-to-be-deleted-in-experience-editor-when-it-has-inner-components/"></div>If an editor deletes a component in Experience Editor and that component has inner components, only the outer component will be actually deleted from the page rendering. Inner components will not show anymore (and often Content Editors will be happy), so why would that be a problem? The problem Take for instance this set of renderings [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>If an editor deletes a component in Experience Editor and that component has inner components, only the outer component will be actually deleted from the page rendering. Inner components will not show anymore (and often Content Editors will be happy), so why would that be a problem?</p>
<h2>The problem</h2>
<p>Take for instance this set of renderings of a certain page:</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Orphan-Renderings-before.png"><img class="alignnone wp-image-619 size-full" src="http://blog.peplau.com.br/wp-content/uploads/Orphan-Renderings-before.png" alt="Orphan Renderings-before" width="762" height="135" /></a></p>
<p>If in Experience Editor someone tries to delete it:</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Remove-Components.png"><img class="alignnone size-full wp-image-620" src="http://blog.peplau.com.br/wp-content/uploads/Remove-Components.png" alt="Remove Components" width="261" height="108" /></a></p>
<p>The result will be a &#8220;ghost&#8221; orphan item, which will not render when the page loads because its placeholder does not exist anymore.</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Orphan-Renderings-after.png"><img class="alignnone size-full wp-image-621" src="http://blog.peplau.com.br/wp-content/uploads/Orphan-Renderings-after.png" alt="Orphan Renderings-after" width="746" height="102" /></a></p>
<p>That rendering will continue at the page rendering, being either forgotten forever or re-appearing when someone tries to add a new Carousel to the same Full-Width Container placeholder.</p>
<h2>Not just me</h2>
<p>I&#8217;ve seen more people concerned with that &#8211; such as the author of <a href="https://sitecore.stackexchange.com/questions/4094/remove-child-renderings-from-layout" target="_blank">this question at Sitecore Exchange</a> &#8211; and some other people suggested possible solutions.</p>
<p>One approach I tried was to follow <a href="https://blog.horizontalintegration.com/2015/10/09/sitecore-orphan-children-after-parent-component-removal/" target="_blank">this blog post by Mike Tschida</a> and implement a pipeline processor to clean-up the Page Rendering, removing orphan components when the page is saved. That would be perfect, however during development or debugging, it is very common to temporarily move a component to an unexistent placeholder to make it vanish from the page. In cases like that, the component would be deleted, which is not desired.</p>
<h2>Acting at the other end</h2>
<p>So what if, instead of acting later at the server, we stop content editors at the root of the problem: the Experience Editor? At that case, when an editor attempts to delete a component which has inner components, a prompt like this would be displayed. In order to delete the outer component, the editor now needs to delete the inner components first.</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Orphan-Renderings-prompt.png"><img class="alignnone size-full wp-image-622" src="http://blog.peplau.com.br/wp-content/uploads/Orphan-Renderings-prompt.png" alt="Orphan Renderings-prompt" width="307" height="146" /></a></p>
<p>Inspired by <a href="https://stackoverflow.com/questions/38634701/delete-confirmation-when-deleting-from-floating-menu-in-a-page-editor-in-sitecor" target="_blank">this simple Stack Overflow post</a>,  in which the author was looking for a way to simply ask for a confirmation before deleting a component, I ended up with the solution below.</p>
<h2>Nip the evil in the bud</h2>
<p>The deletion of a component is handled by javascript code located at \sitecore\shell\Applications\Page Modes\ChromeTypes\RenderingChromeType.js &#8211; more specifically at the deleteControl method. Our fix will comment out the original code (I will leave there for future reference in case of an upgrade) and add the following code:</p>
<pre>    deleteControl: function () {
        var canDelete = this.canDeleteControl(this.chrome);
        if (canDelete === false) {
            alert("Please delete inner controls before deleting this.");
            return false;
        }
        var placeholder = this.getPlaceholder();
        if (placeholder) {
            placeholder.type.deleteControl(this.chrome);
            return true;
        }
        return false;
    },
</pre>
<p>Along of course with the new canDeleteControl method, which does the trick of verifying if the component attempted to be deleted has inner components.</p>
<pre>    canDeleteControl: function (chrome) {
        var canDelete = true;
        var childChromes = chrome.getChildChromes();
        for (var i = 0; i &lt; childChromes.length; i++) {
            if (childChromes[i].type.key() == "placeholder") {
                canDelete = this.canDeleteControl(childChromes[i]);
                if (canDelete === false)
                    break;
            }
            else if (childChromes[i].type.key() == "rendering") {
                canDelete = false;
                break;
            }
        }
        return canDelete;
    },
</pre>
<p>And that&#8217;s all we need! Replace this file in all instances, clean up your browser caches and don&#8217;t worry about orphan components anymore!</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/prevent-a-component-to-be-deleted-in-experience-editor-when-it-has-inner-components/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How we won the Hackathon</title>
		<link>https://blog.peplau.com.br/how-we-won-the-hackathon/</link>
		<comments>https://blog.peplau.com.br/how-we-won-the-hackathon/#comments</comments>
		<pubDate>Tue, 05 Sep 2017 14:53:49 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Hackathon]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=603</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/how-we-won-the-hackathon/"></div>The famous Sitecore Hackathon is an annual programming contest, where teams should put together, within 24 hours, a piece of software for Sitecore in one of the available categories. At this fourth edition in 2017, there were four categories: Azure PaaS Module, Sitecore Experience Accelerator, Habitat Module and Data Exchange Framework &#8211; this last the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.peplau.com.br/wp-content/uploads/dxaHackthon-Award.png"><img class="alignleft wp-image-611 size-medium" src="http://blog.peplau.com.br/wp-content/uploads/dxaHackthon-Award-232x300.png" alt="dxaHackthon-Award" width="232" height="300" /></a>The famous <a href="http://www.sitecorehackathon.org/" target="_blank">Sitecore Hackathon</a> is an annual programming contest, where teams should put together, within 24 hours, a piece of software for Sitecore in one of the available categories. At this fourth edition in 2017, there were four categories: <strong>Azure PaaS Module</strong>, <strong>Sitecore Experience Accelerator</strong>, <strong>Habitat Module</strong> and <strong>Data Exchange Framework</strong> &#8211; this last the one the <strong>Go Horse Team</strong> picked.</p>
<p>92 teams participated with members from 26 different countries!</p>
<p>This was our first participation, so we were not sure what to expect. Like any other professional development we execute, we made sure to read all requirements and rules and to strictly obey to everything: deadlines, supporting documentations, Youtube video, the software itself, etc. And yes, that was important, as we’ve seen so many teams being declassified by not following just a small portion of these.</p>
<h2>The Go Horse Team</h2>
<p>Our team was composed by <a href="https://twitter.com/afortaleza" target="_blank">Anderson Fortaleza</a>, <a href="https://twitter.com/netoJoao87" target="_blank">João Amancio Neto</a> and <a href="https://twitter.com/rpeplau" target="_blank">Rodrigo Peplau</a> (myself). We joined together because at that time we were colleagues at <a href="http://www.nonlinearcreations.com/" target="_blank">Nonlinear Creations</a> in Florianópolis, Brazil. Nowadays João is at <a href="http://www.virtual-affairs.com/" target="_blank">Virtual Affairs</a> in Netherlands, and I am working at <a href="http://www.nishtechinc.com" target="_blank">Nish Tech Inc</a>.</p>
<h3><a href="http://blog.peplau.com.br/wp-content/uploads/Go-Horse-White.jpg"><img class="alignright size-medium wp-image-607" src="http://blog.peplau.com.br/wp-content/uploads/Go-Horse-White-227x300.jpg" alt="Go Horse White" width="227" height="300" /></a>But what exactly is “Go Horse”?</h3>
<p><span style="font-weight: 400;">The <a href="https://gist.github.com/banaslee/4147370" target="_blank">Go Horse Process</a> </span><span style="font-weight: 400;">is a joke in the form of a software development anti-pattern. Despite everybody knows its practices are not to be followed, the funny part is that at some point in our career, everyone had to &#8220;follow&#8221; it to deliver in time. Some of its axioms are:</span></p>
<ol>
<li style="font-weight: 400;"><b>I think therefore it&#8217;s not Go Horse </b><span style="font-weight: 400;">- In Go Horse you don&#8217;t think, you do the first thing that comes to your mind. There&#8217;s not a second option as the first one is faster;<br />
</span></li>
<li style="font-weight: 400;"><b>There are 3 ways of solving a problem: </b><span style="font-weight: 400;">the right way, the wrong way and the Go Horse way which is exactly like the first one but faster. Go Horse is faster than any development process you know</span></li>
</ol>
<p><span style="font-weight: 400;">These funny principles are pretty self-explanatory and also gives a sense of our mindset for this 24 hours contest: we got no serious ambitions, we were there just for fun, we had to be “pragmatic” but deliver something functional within the deadline.</span></p>
<h2><strong>Choosing the subject</strong></h2>
<p><span style="font-weight: 400;">Maybe one of the most important steps, if not the most important, was to select the subject. This step will define if you&#8217;ll have a good chance to win or if you&#8217;ll fail miserably. The first thing we made was to take our team out of the computer and go to a place where we could brainstorm.</span></p>
<p><span style="font-weight: 400;">Next, we got to measure our team and the individual skills of each member. Maybe a member of your team masters Azure technologies while other is good at doing SPEAK interfaces. During brainstorming, we wrote down any ideas (bad, good, mild) that came to our mind based on every subject of the contest. We opted as individuals to not be afraid of suggesting dummy ideas, which encouraged the whole team to not be afraid as well. Remember: from stupid ideas, good ones can come forth.</span></p>
<p><span style="font-weight: 400;">We ended up with the idea of using the Wikipedia API to generate content inside Sitecore, using Data Exchange Framework. Of course, other suggestions came before, but we decided this would be a simple one and easy to execute. One of the team members had already done some integration with Wikipedia’s API before so he was familiar with that. Other member had already implemented some SPEAK interfaces before. What remained? Learning Data Exchange Framework.</span></p>
<p><span style="font-weight: 400;">Some important things at this stage:</span></p>
<ul>
<li style="font-weight: 400;"><b>Avoid spending more than 1 hour to choose your subject. </b><span style="font-weight: 400;">It is a 24 hours competition, and the software itself is only part of the delivery. Every minute is of much importance;</span></li>
<li style="font-weight: 400;"><strong><b>Don’t be too ambitious.</b><span style="font-weight: 400;"> Again, the short time to implement won’t let you much time to refinements. It’s better to deliver something simple but that works, then having to deliver something unfinished or buggy.</span></strong></li>
</ul>
<h2><strong>Execution: Work distribution and Teamwork</strong></h2>
<p><span style="font-weight: 400;">We choose our theme, made sure every team member was comfortable with that. What now? Let’s start to plan the execution. Who is going to do what? You don&#8217;t want to have in the middle of the Hackathon somebody in your team uncomfortable with the plan and willing to change everything. It&#8217;s the receipt to fail miserably.</span></p>
<p><span style="font-weight: 400;">In our case, I was already experienced with SPEAK, so I got responsible for the interfaces, which took most of my time. Anderson and João took the responsibility to learn Data Exchange Framework, understand how it works and come up with technical solutions that I would be binding together with the interface. From time to time, we stopped our work for a quick desk check, in a way that the whole team is aligned: I got to understand how the framework works, they got find solutions to our software needs such as how to programmatically trigger data importation.</span></p>
<h3><b>Take a rest! It’s important</b></h3>
<p><span style="font-weight: 400;">It was also very important to plan and optimize our team member’s presence. 24 hours is a little time to develop a software, but is time enough for people to get tired, and we don’t want everybody sleeping at the same time. So what we did was to plan our rests in such a way that there’s always someone producing. Honestly SPEAKing I tried to sleep but I couldn’t, my mind couldn’t stop scanning all gaps and possible flaws, so I took the time to lay down, rest my body and keep on planning and projecting.</span></p>
<h3><b>Supporting material</b></h3>
<p><span style="font-weight: 400;">As previously described at this post, the software itself was only part of the whole deliverable. Along with that, we had to prepare 1) Installation instructions (1-2 pages); 2) Module documentation (2-5 pages); 3) A video explaining the module (2-10 minutes). These tasks seems trivial, but they also demand strict attention as they count as much as the software itself. We split these tasks into our team members, each of us doing one of these.</span></p>
<h3><b>Final touches</b></h3>
<p><span style="font-weight: 400;">When everything was pretty done we still had about 1 hour to deliver, so we concentrate our efforts to revise everything. Members started to check each other’s work: does the documentation makes sense? Is there any typo? Is that covering everything? Is the module installing and working in a vanilla solution? Everything should be well aligned and ready for deployment.</span></p>
<h3><b>Respect the deadlines!</b></h3>
<p><span style="font-weight: 400;">We ended up uploading our work 20 minutes before the deadline. That is also something extremely important to respect, as the judges are not tolerant to delays. Our friends from the “Works on My Machine” team took more than it should to deliver and had their Dropbox access cut in the middle of the upload, which is frustrating after so many hours of hard work.</span></p>
<h2><strong>Judges Feedback</strong></h2>
<p><span style="font-weight: 400;">Since that was our first participation, we were not expecting to win. Surprise, we have been announced the winners, with very flattering feedbacks from the jury. </span></p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/WikiDX-Judges-feedback.jpg"><img class="alignnone size-full wp-image-604" src="http://blog.peplau.com.br/wp-content/uploads/WikiDX-Judges-feedback.jpg" alt="WikiDX - Judges feedback" width="800" height="365" /></a></p>
<p><b>Main lessons extracted from their feedbacks:</b></p>
<ul>
<li style="font-weight: 400;"><b>Choose something with a practical use.</b><span style="font-weight: 400;"> It is ok to implement an abstract case study, but if your module have a real life use, it may help judges to understand it, which can potentially call their attention to your team;</span></li>
<li style="font-weight: 400;"><b>Be respectful to the category you chose.</b><span style="font-weight: 400;"> No matter what category you picked, someone have implemented the base software you will work to extend. Respect its principles and best practices, implementing something that creators will be glad to see.</span></li>
</ul>
<h2><strong>Our module &#8211; WikiDX</strong></h2>
<p><strong><span style="font-weight: 400;">Resulting module is called WikiDX and is available to <a href="https://marketplace.sitecore.net/Modules/W/WikiDX__MediaWiki_content_importer.aspx" target="_blank">download at the Marketplace</a></span><span style="font-weight: 400;"> &#8211; check it out!</span></strong></p>
<h2><strong>Next Year?</strong></h2>
<p><span style="font-weight: 400;">Now that members of the Go Horse team are not working at the same company, will they be at the next contest? Of course we will! We need to defend our belt and have fun together again! While João is in Netherlands, and thus will have to join us remotely, myself and Anderson are still living at the same city, so we plan to get together for the next effort and repeat the good work.</span></p>
<h3><b>What would we make different?</b></h3>
<p><span style="font-weight: 400;">We were newbies and didn’t know what to expect. Our preparation was close to zero, we just got our own professional experiences and a lot of curiosity. For the next year we plan to have a better pre-Hackathon preparation: getting familiar to existent categories, getting to know for instance Sitecore on Azure, SXA in deep, etc. But it is also important to keep an eye at the new modules Sitecore launches, as new categories can arise. Data Exchange Framework for instance, was a new category this year, and has been released just a few months before the Hackathon. As a result of this preparation we may end up with a collection of knowledges and code snippets, which could be very helpful to a smoother execution. </span></p>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/how-we-won-the-hackathon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Richtext Editor - Table Properties adds cells to the table</title>
		<link>https://blog.peplau.com.br/richtext-editor-table-properties-adds-cells-to-the-table/</link>
		<comments>https://blog.peplau.com.br/richtext-editor-table-properties-adds-cells-to-the-table/#comments</comments>
		<pubDate>Thu, 23 Feb 2017 22:53:21 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=552</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/richtext-editor-table-properties-adds-cells-to-the-table/"></div>When you edit the properties of a table in the content editor of most page types, extra cells are added. Check the following animation to see the issue: &#160; This issue has been reproduced in empty (clean) instances of Sitecore 8.1 rev 160302, 160519 and Sitecore 8.2 rev 161221, and has been registered by Sitecore as [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>When you edit the properties of a table in the content editor of most page types, extra cells are added. Check the following animation to see the issue:</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Table-Issue.gif"><img class=" size-full wp-image-553 aligncenter" src="http://blog.peplau.com.br/wp-content/uploads/Table-Issue.gif" alt="Table Issue" width="779" height="552" /></a></p>
<p>&nbsp;</p>
<p>This issue has been reproduced in empty (clean) instances of Sitecore 8.1 rev 160302, 160519 and Sitecore 8.2 rev 161221, and has been registered by Sitecore as a bug at their Bug Tracking System with the reference number 101901.</p>
<h2>Solution</h2>
<p>To resolve the issue, please update the Telerik RTE assemblies to the newer version:</p>
<ol>
<li>Extract the <a href="http://blog.peplau.com.br/wp-content/uploads/Telerik.Web_.UI_.zip">Telerik.Web.UI.dll</a> and <a href="http://blog.peplau.com.br/wp-content/uploads/Telerik.Web_.UI_.Skins_.zip">Telerik.Web.UI.Skins.dll</a> assemblies into your bin folder (replacing the existing ones);</li>
<li>Replace the <a href="http://blog.peplau.com.br/wp-content/uploads/Telerik.Web_.UI_.XML_.zip">Telerik.Web.UI.XML</a> file in your bin folder with the attached one;</li>
<li>Add the Telerik.Web.UI assembly binding to your web.config:
<pre id="aui-3-5-1-4_5576">&lt;runtime&gt;
 &lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt;
 ...
 &lt;dependentAssembly&gt;
 &lt;assemblyIdentity name="Telerik.Web.UI" publicKeyToken="121fae78165ba3d4" /&gt;
 &lt;bindingRedirect oldVersion="2015.1.401.45" newVersion="2015.3.930.45" /&gt;
 &lt;/dependentAssembly&gt;
 &lt;/assemblyBinding&gt;
&lt;/runtime&gt;</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/richtext-editor-table-properties-adds-cells-to-the-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ERROR [Content Testing]: Cannot find PhantomJS executable at &#039; (...) /data/tools/phantomjs/phantomjs.exe&#039;. Aborting screenshot generation.</title>
		<link>https://blog.peplau.com.br/error-content-testing-cannot-find-phantomjs-executable-at-datatoolsphantomjsphantomjs-exe-aborting-screenshot-generation/</link>
		<comments>https://blog.peplau.com.br/error-content-testing-cannot-find-phantomjs-executable-at-datatoolsphantomjsphantomjs-exe-aborting-screenshot-generation/#comments</comments>
		<pubDate>Tue, 07 Feb 2017 22:09:10 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[PhantomJS]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=526</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/error-content-testing-cannot-find-phantomjs-executable-at-datatoolsphantomjsphantomjs-exe-aborting-screenshot-generation/"></div>In Sitecore 8 and above, while starting a Multivariate Tests, you may see broken thumbnails and popups with warnings such as below, and your Sitecore Log showing the error at this blog title. According to what Sitecore Development Team announced at this community post for why Sitecore adopted PhantomJS: Content Testing in Sitecore uses the Phantom JS tool for generation of the screenshot [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>In Sitecore 8 and above, while starting a Multivariate Tests, you may see broken thumbnails and popups with warnings such as below, and your Sitecore Log showing the error at this blog title.</p>
<p><a href="http://blog.peplau.com.br/wp-content/uploads/Error-Running-Test-PhantomJS-1.png"><img class=" wp-image-529 size-medium alignnone" src="http://blog.peplau.com.br/wp-content/uploads/Error-Running-Test-PhantomJS-1-300x159.png" alt="Error Running Test - PhantomJS - 1" width="300" height="159" /><br />
</a><a href="http://blog.peplau.com.br/wp-content/uploads/Error-Running-Test-PhantomJS-2.png"><img class=" wp-image-527 size-medium alignnone" src="http://blog.peplau.com.br/wp-content/uploads/Error-Running-Test-PhantomJS-2-300x215.png" alt="Error Running Test - PhantomJS - 2" width="300" height="215" /><br />
</a>According to what Sitecore Development Team announced at <a href="https://community.sitecore.net/technical_blogs/b/sitecore_development_team/posts/screenshot-settings-for-content-testing" target="_blank">this community post</a> for why Sitecore adopted PhantomJS:</p>
<blockquote><p>Content Testing in Sitecore uses the Phantom JS tool for generation of the screenshot image files. In case you didn&#8217;t know, Sitecore has had screenshot generation features for quite some time. We use it to generate icons for items that you&#8217;ll be listing in the UI like renderings. These icon generation features are based on the System.Windows.Forms.WebBrowser control built into .net. So why did we not use the existing screenshot features for Content Testing? In early testing we found discrepancies with the WebBrowser control. WebBrowser uses Internet Explorer installed on the server where Sitecore is running. But the specific version that it uses isn&#8217;t always the latest. There are registry updates one can make to force the appropriate IE version, but this seemed like a big ask of users. This was one of the reasons we chose to use Phantom JS instead.</p></blockquote>
<h2>Cause and Solution</h2>
<p>The error in question will show the full path to where Sitecore is looking for PhantomJS. This path is defined at Sitecore.ContentTesting.config, at the entry &#8220;ContentTesting.PhantomJS.ExecutablePath&#8221;. Start your investigation by checking where your setting is currently pointing to.</p>
<p>By default this setting points to &#8220;$(dataFolder)/tools/phantomjs/phantomjs.exe&#8221;. If that is your case, check if your Data folder has the PhantomJS executable under that path. If this file is lacking, take a copy from a fresh Sitecore installation (make sure to use the very same revision your site is using).</p>
<p><strong>See also: </strong><a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/security_hardening/configuring/phantomjs_and_security_hardening" target="_blank">PhantomJS and security hardening</a></p>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/error-content-testing-cannot-find-phantomjs-executable-at-datatoolsphantomjsphantomjs-exe-aborting-screenshot-generation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Automatic check-up of Sitecore Server Roles with Powershell</title>
		<link>https://blog.peplau.com.br/automatic-check-up-of-sitecore-server-roles-with-powershell/</link>
		<comments>https://blog.peplau.com.br/automatic-check-up-of-sitecore-server-roles-with-powershell/#comments</comments>
		<pubDate>Fri, 23 Sep 2016 21:53:11 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Server Roles]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=479</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/automatic-check-up-of-sitecore-server-roles-with-powershell/"></div>This week I had a boring demand of checking up a Sitecore installation against the Excel spreadsheet provided by Sitecore, to make sure all configs are enabled or disabled according to the Server Role. You can get cockeyed by doing this manually, so of course I looked for a way to automatize it. Ended up discovering [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This week I had a boring demand of checking up a Sitecore installation against the <a href="https://doc.sitecore.net//~/media/901A89FDE2D24DC5BD72BDF839275291.ashx?la=en" target="_blank">Excel spreadsheet provided by Sitecore</a>, to make sure all configs are enabled or disabled according to the <a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up__maintaining/xdb/configuring_servers/configuring_servers" target="_blank">Server Role</a>.</p>
<p>You can get cockeyed by doing this manually, so of course I looked for a way to automatize it. Ended up discovering <a href="https://gist.github.com/michaellwest/d1124a459cb1fb47486f87d488ecfab8" target="_blank">this simple powershell script</a> written by <a href="https://twitter.com/MichaelWest101" target="_blank">Michael West</a>. The only issue with this script is it does touches the files while checking, something I&#8217;d never dare doing in production.</p>
<p>I have modified his script so that, instead of touching the files, it takes notes of files that are different than specified by Sitecore&#8217;s spreadsheet so one can compare it manually afterwards. Resulting script can be seen <a href="https://gist.github.com/peplau/6d1588821675c2dda15c18fabbd94eb8" target="_blank">at this link</a>.</p>
<h2>Multiple roles</h2>
<p>But what if you wish to have the same Sitecore installation handling multiple roles? According to <a href="https://twitter.com/mhwelander" target="_blank">Martina Welander</a>, the general recommendation for mixed roles is that, <em>if something must be enabled anywhere, that config must be enabled</em>. Well, while this is not a rule we can trust 100%, still the script is not changing anything and thus it won&#8217;t hurt if it does this check.</p>
<blockquote><p>You can check for multiple roles by adding them separated by commas (Eg: CM, RPT)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/automatic-check-up-of-sitecore-server-roles-with-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advanced display of SVG Images in Sitecore</title>
		<link>https://blog.peplau.com.br/advanced-display-of-svg-images-in-sitecore/</link>
		<comments>https://blog.peplau.com.br/advanced-display-of-svg-images-in-sitecore/#comments</comments>
		<pubDate>Fri, 31 Jul 2015 23:56:39 +0000</pubDate>
		<dc:creator><![CDATA[Rodrigo Peplau]]></dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Experience Editor]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.peplau.com.br/?p=219</guid>
		<description><![CDATA[<div class="lr_horizontal_share" data-share-url="https://blog.peplau.com.br/advanced-display-of-svg-images-in-sitecore/"></div>SVG Images are basically vector images (coordinates, objects and properties) with data that can be manipulated with CSS styling &#8211; check out this article for details on how that works. In short, to take advantage of CSS styling over SVG files, you must throw the XML content of the SVG file, directly into the HTML markup. So instead of the traditional [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>SVG Images are basically vector images (coordinates, objects and properties) with data that can be manipulated with CSS styling &#8211; check out <a href="https://css-tricks.com/using-svg/" target="_blank">this article</a> for details on how that works.</p>
<p>In short, to take advantage of CSS styling over SVG files, you must throw the XML content of the SVG file, directly into the HTML markup. So instead of the traditional &lt;img tag:</p>
<pre>&lt;img src="image.svg"</pre>
<p>You must throw inline the content of the SVG file, which will be something like:</p>
<pre>&lt;svg ...&gt; &lt;ellipse class="chair" .../&gt; <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>svg</span><span class="token punctuation">&gt;</span></span></pre>
<p>In Sitecore that means you can&#8217;t use the standard <strong>sc:Image</strong> control to render the content of an Image Field &#8211; that will render your SVG as an &lt;img HTML tag, which can&#8217;t be touched by CSS styling&#8230;</p>
<p><strong>Usercontrol</strong></p>
<p>In order to have something that is compatible both with CSS Styling and Sitecore&#8217;s Page Editor mode, my proposal is to have a custom asp usercontrol like this:</p>
<p><em><strong>Image.ascx</strong></em></p>
<pre>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Image.ascx.cs" Inherits="Layouts.UserControls.Image" %&gt;
&lt;sc:Image runat="server" ID="scImage" /&gt;
&lt;asp:Literal runat="server" ID="litImage"&gt;&lt;/asp:Literal&gt;</pre>
<p><em><strong> Image.ascx.cs (Codebehind)</strong></em></p>
<pre>namespace Layouts.UserControls
{
 public partial class Image : UserControl
 {
   /// &lt;summary&gt;
   /// Component's Field
   /// &lt;/summary&gt;
   public string Field { get; set; }</pre>
<pre>   /// &lt;summary&gt;
   /// Component's Item (Default=Context)
   /// &lt;/summary&gt;
   public Item Item
   {
      get { return _item ?? Sitecore.Context.Item; }
      set { _item = value; }
   }
   private Item _item;</pre>
<pre>   protected void Page_Load(object sender, EventArgs e)
   {
     // When editing in Page Editor mode, always use an &lt;sc:image
     // If no field is set, escape and let it break
     if (Sitecore.Context.PageMode.IsPageEditorEditing || string.IsNullOrEmpty(Field))
     {
        ShowScImage();
        return;
     }</pre>
<pre>     // Escape if field is not found
     var referencedImageField = (Sitecore.Data.Fields.ImageField)Item.Fields[Field];
     if (referencedImageField == null)
     {
       ShowScImage();
       return;
     }</pre>
<pre>     // Get referenced image - Scape if image is not found
     var imageItem = referencedImageField.MediaItem;
     if (imageItem == null)
     {
        ShowScImage();
        return;
     }</pre>
<pre>     // If this is not an svg use a normal &lt;sc:Image
     var imageMediaItem = (MediaItem) imageItem;
     if (!imageMediaItem.Extension.ToLower().Contains("svg"))
     {
        ShowScImage();
        return;
     }</pre>
<pre>     ShowSvgImage(imageMediaItem);
 }</pre>
<pre> public static string GetMediaUrlWithServer(MediaItem mediaItem, Item item = null)
 {
    item = item ?? Sitecore.Context.Item;
    var options = new UrlOptions { AlwaysIncludeServerUrl = true, AddAspxExtension = false };
    var itemUrl = LinkManager.GetItemUrl(item, options);
    var mediaOptions = new MediaUrlOptions { AbsolutePath = true };
    var mediaUrl = MediaManager.GetMediaUrl(mediaItem, mediaOptions);
    return itemUrl + mediaUrl;
 }</pre>
<pre> private void ShowSvgImage(MediaItem mediaItem)
 {
    litImage.Visible = true;
    scImage.Visible = false;</pre>
<pre>    // Get string from Image Stream
    var stream = mediaItem.GetMediaStream();
    var reader = new StreamReader(stream);
    var svgString = reader.ReadToEnd();
    reader.Close();
    stream.Close();</pre>
<pre>    // Get SVG tag from string</pre>
<pre>    // No SVG tag found - fallback to &lt;sc:Image
    if (!svgString.Contains("&lt;svg"))
    {
       ShowScImage();
       return;
    }</pre>
<pre>    svgString = svgString.Substring(svgString.IndexOf("&lt;svg",StringComparison.Ordinal));
    litImage.Text = svgString;
 }</pre>
<pre> private void ShowScImage()
 {
    litImage.Visible = false;
    scImage.Visible = true;</pre>
<pre>    scImage.Item = Item;
    scImage.Field = Field;
    ReflectAttributesToControl(scImage); 
 }</pre>
<pre> private void ReflectAttributesToControl(WebControl control)
 {
    foreach (string key in Attributes.Keys)
     control.Attributes[key] = Attributes[key];
 }
}</pre>
<p><strong>Streaming</strong></p>
<p>The proposed solution makes use of Streaming for better performance, so rendering times are not affected.</p>
<p><strong>How to Use</strong></p>
<p>Now we have our custom image rendering control that renders inline SVG images when you are in Preview or Normal mode, and is compatible with Sitecore&#8217;s Page Editor mode.</p>
<p>To use, first you have to register the Usercontrol:</p>
<pre>&lt;%@ Register TagPrefix="custom" TagName="Image" Src="~/layouts/UserControls/Image.ascx" %&gt;</pre>
<p>Then use it just like you&#8217;d do with a standard sc:Image control:</p>
<pre>&lt;custom:Image runat="server" ID="imgSvgImage" Field="My Field Name" /&gt;</pre>
<p>At the code behind you can also access the properties &#8220;Field&#8221; and &#8220;Item&#8221; just like the normal Image control:</p>
<pre>imgClear.Item = Sitecore.Context.Item;</pre>
<p>And that&#8217;s all!</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.peplau.com.br/advanced-display-of-svg-images-in-sitecore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
