<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>DZF Web Blog</title>
  
  
  <link href="http://www.dzfweb.com.br/atom.xml" rel="self"/>
  
  <link href="http://www.dzfweb.com.br/"/>
  <updated>2025-12-03T19:59:54.999Z</updated>
  <id>http://www.dzfweb.com.br/</id>
  
  <author>
    <name>Douglas Zanco Franco</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>My first Google Cloud Certificate</title>
    <link href="http://www.dzfweb.com.br/2024/04/06/My-first-google-cloud-certificate/"/>
    <id>http://www.dzfweb.com.br/2024/04/06/My-first-google-cloud-certificate/</id>
    <published>2024-04-06T11:05:01.000Z</published>
    <updated>2025-12-03T19:59:54.999Z</updated>
    
    <content type="html"><![CDATA[<p>I’m happy to announce that I have recently earned my first Google Cloud Professional Developer Certificate. This certificate is a testament to my expertise in developing and deploying highly scalable applications on Google Cloud Platform. It demonstrates my proficiency in designing, building, and managing cloud-native applications using Google Cloud technologies.</p><span id="more"></span><table><thead><tr><th>Issuer</th><th>Course</th><th>Year</th></tr></thead><tbody><tr><td><img src="/images/google.png"></td><td>Professional Cloud Developer Certification</td><td>2024</td></tr></tbody></table><p>These certificates have equipped me with the skills and knowledge needed to excel in the field of cloud computing, including cloud-native application development, cloud architecture, and cloud security.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;I’m happy to announce that I have recently earned my first Google Cloud Professional Developer Certificate. This certificate is a testament to my expertise in developing and deploying highly scalable applications on Google Cloud Platform. It demonstrates my proficiency in designing, building, and managing cloud-native applications using Google Cloud technologies.&lt;/p&gt;</summary>
    
    
    
    <category term="News" scheme="http://www.dzfweb.com.br/categories/News/"/>
    
    
    <category term="Certificates" scheme="http://www.dzfweb.com.br/tags/Certificates/"/>
    
    <category term="Google Cloud" scheme="http://www.dzfweb.com.br/tags/Google-Cloud/"/>
    
    <category term="Developer" scheme="http://www.dzfweb.com.br/tags/Developer/"/>
    
  </entry>
  
  <entry>
    <title>Enhancing WSL Connectivity with VPN Integration (Cisco, Kaspersky, others)</title>
    <link href="http://www.dzfweb.com.br/2024/02/20/Enhancing-WSL-Connectivity-with-VPN-Integration-Cisco-Kaspersky-others/"/>
    <id>http://www.dzfweb.com.br/2024/02/20/Enhancing-WSL-Connectivity-with-VPN-Integration-Cisco-Kaspersky-others/</id>
    <published>2024-02-20T22:15:11.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h2><p>Windows Subsystem for Linux (WSL) provides a seamless integration of Linux with Windows, allowing users to run a Linux distribution alongside their Windows environment. However, when using a VPN, configuring WSL to work seamlessly with it can be a bit tricky. In this guide, we will walk you through the steps to ensure that your WSL setup remains connected and functional while your VPN is active.</p><span id="more"></span><h2 id="Step-1-Edit-WSL-Configuration"><a href="#Step-1-Edit-WSL-Configuration" class="headerlink" title="Step 1: Edit WSL Configuration"></a>Step 1: Edit WSL Configuration</h2><p>The first step is to edit the WSL configuration file to execute a script when WSL starts. Open the WSL configuration file using your preferred text editor (in this case, we use vim):</p><p><code>vim /etc/wsl.conf</code></p><p>Add the following lines to the file:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[boot]</span><br><span class="line">command=sudo /bin/vpn-dns.sh</span><br><span class="line"></span><br><span class="line">[network]</span><br><span class="line">generateResolvConf = false</span><br></pre></td></tr></table></figure><p>Save and exit the editor.</p><h2 id="Step-2-Create-the-Script"><a href="#Step-2-Create-the-Script" class="headerlink" title="Step 2: Create the Script"></a>Step 2: Create the Script</h2><p>Now, create the script that will be executed during WSL startup. Create a new file using vim or any text editor of your choice:</p><p><code>vim /bin/vpn-dns.sh</code></p><p>Paste the following script into the file:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;Getting current DNS servers, this takes a couple of seconds&quot;</span></span><br><span class="line"></span><br><span class="line">/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command <span class="string">&#x27;</span></span><br><span class="line"><span class="string">$ErrorActionPreference=&quot;SilentlyContinue&quot;</span></span><br><span class="line"><span class="string">Get-NetAdapter -InterfaceDescription &quot;Kaspersky VPN*&quot; | Get-DnsClientServerAddress | Select -ExpandProperty ServerAddresses</span></span><br><span class="line"><span class="string">Get-NetAdapter | ?&#123;-not ($_.InterfaceDescription -like &quot;Kaspersky VPN*&quot;) &#125; | Get-DnsClientServerAddress | Select -ExpandProperty ServerAddresses</span></span><br><span class="line"><span class="string">&#x27;</span> | \</span><br><span class="line">        awk <span class="string">&#x27;BEGIN &#123; print &quot;# Generated by vpn fix func on&quot;, strftime(&quot;%c&quot;); print &#125; &#123; print &quot;nameserver&quot;, $1 &#125;&#x27;</span> | \</span><br><span class="line">        <span class="built_in">tr</span> -d <span class="string">&#x27;\r&#x27;</span> &gt; /etc/resolv.conf</span><br><span class="line">clear</span><br></pre></td></tr></table></figure><p>Save and exit the editor. Make the script executable:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo <span class="built_in">chmod</span> +x /bin/vpn-dns.sh</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;<span class="subst">$(whoami)</span> ALL=(ALL) NOPASSWD: /bin/vpn-dns.sh&quot;</span> | sudo <span class="built_in">tee</span> /etc/sudoers.d/010-$(<span class="built_in">whoami</span>)-vpn-dns</span><br></pre></td></tr></table></figure><h2 id="Step-3-Restart-WSL"><a href="#Step-3-Restart-WSL" class="headerlink" title="Step 3: Restart WSL"></a>Step 3: Restart WSL</h2><p>To apply the changes, restart WSL using the following command in either Command Prompt or PowerShell:</p><p><code>wsl --shutdown</code></p><h2 id="Conclusion"><a href="#Conclusion" class="headerlink" title="Conclusion"></a>Conclusion</h2><p>By following these steps, you have successfully configured WSL to work seamlessly with your VPN. This ensures that your DNS settings are appropriately adjusted, allowing WSL to maintain connectivity even when your VPN is active. Enjoy a hassle-free experience with WSL in a VPN-enabled environment!</p><p>References: <a href="https://superuser.com/a/1666368">Stackoverflow</a></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;Introduction&quot;&gt;&lt;a href=&quot;#Introduction&quot; class=&quot;headerlink&quot; title=&quot;Introduction&quot;&gt;&lt;/a&gt;Introduction&lt;/h2&gt;&lt;p&gt;Windows Subsystem for Linux (WSL) provides a seamless integration of Linux with Windows, allowing users to run a Linux distribution alongside their Windows environment. However, when using a VPN, configuring WSL to work seamlessly with it can be a bit tricky. In this guide, we will walk you through the steps to ensure that your WSL setup remains connected and functional while your VPN is active.&lt;/p&gt;</summary>
    
    
    
    <category term="Infrastructure" scheme="http://www.dzfweb.com.br/categories/Infrastructure/"/>
    
    
    <category term="WSL" scheme="http://www.dzfweb.com.br/tags/WSL/"/>
    
    <category term="VPN" scheme="http://www.dzfweb.com.br/tags/VPN/"/>
    
    <category term="Cisco" scheme="http://www.dzfweb.com.br/tags/Cisco/"/>
    
    <category term="Kaspersky" scheme="http://www.dzfweb.com.br/tags/Kaspersky/"/>
    
    <category term="Windows" scheme="http://www.dzfweb.com.br/tags/Windows/"/>
    
    <category term="Linux" scheme="http://www.dzfweb.com.br/tags/Linux/"/>
    
    <category term="Networking" scheme="http://www.dzfweb.com.br/tags/Networking/"/>
    
  </entry>
  
  <entry>
    <title>New certification achieved: Azure DevOps Expert</title>
    <link href="http://www.dzfweb.com.br/2024/02/16/New-certification-achieved-Azure-DevOps-Expert/"/>
    <id>http://www.dzfweb.com.br/2024/02/16/New-certification-achieved-Azure-DevOps-Expert/</id>
    <published>2024-02-16T14:28:41.000Z</published>
    <updated>2025-12-03T19:59:54.999Z</updated>
    
    <content type="html"><![CDATA[<p>I’m excited to share that I’ve recently achieved the Azure DevOps Expert certification. This certification is designed for DevOps professionals who combine people, process, and technologies to continuously deliver valuable products and services that meet end-user needs and business objectives.</p><span id="more"></span><p>The Azure DevOps Expert certification validates your skills in the following areas:</p><ul><li>Design and implement strategies for collaboration, code, infrastructure, source control, security, compliance, continuous integration, testing, delivery, monitoring, and feedback.</li><li>Implement and manage build infrastructure.</li><li>Implement code flow and build models.</li><li>Implement a mobile DevOps strategy.</li><li>Manage application configuration and secrets.</li><li>Implement and manage infrastructure as code (IaC).</li><li>Manage code quality and security policies.</li><li>Implement a container build strategy.</li><li>Design a release strategy.</li><li>Set up a release management workflow.</li></ul><p>I’m proud to have achieved this certification and look forward to applying my new skills and knowledge to my work as a software engineer. I believe that this certification will help me stand out in the job market and open up new opportunities for career growth and advancement.</p><p><img src="/images/microsoft-expert.png"></p><table><thead><tr><th>Issuer</th><th>Course</th><th>Year</th></tr></thead><tbody><tr><td><img src="/images/microsoft.jpg"></td><td>Microsoft Certified: Azure DevOps Expert</td><td>2024</td></tr></tbody></table>]]></content>
    
    
    <summary type="html">&lt;p&gt;I’m excited to share that I’ve recently achieved the Azure DevOps Expert certification. This certification is designed for DevOps professionals who combine people, process, and technologies to continuously deliver valuable products and services that meet end-user needs and business objectives.&lt;/p&gt;</summary>
    
    
    
    <category term="News" scheme="http://www.dzfweb.com.br/categories/News/"/>
    
    
    <category term="Certificates" scheme="http://www.dzfweb.com.br/tags/Certificates/"/>
    
    <category term="az-204" scheme="http://www.dzfweb.com.br/tags/az-204/"/>
    
    <category term="Azure" scheme="http://www.dzfweb.com.br/tags/Azure/"/>
    
  </entry>
  
  <entry>
    <title>I&#39;ve just got an AZ-204 certificate</title>
    <link href="http://www.dzfweb.com.br/2023/11/08/I-ve-just-got-an-AZ-204-certificate/"/>
    <id>http://www.dzfweb.com.br/2023/11/08/I-ve-just-got-an-AZ-204-certificate/</id>
    <published>2023-11-08T08:04:35.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>Azure and Microsoft in general always was part of my background as a Software Engineer. I’ve been working with Azure for a long time, but my experiences was more leading teams that used to use Azure, I mean, I was not the one who was doing the actual work. I was more like the manager supporting the expert team building the solutions. Yeah, of course, I was doing some work, but it was more like a support role. And this certification was a personal challenge for me to prove myself that I was able to do the job with my hands if it is needed.</p><span id="more"></span><p>The AZ-204 certification, also known as “Developing Solutions for Microsoft Azure”, is designed for Azure developers. It validates your skills in designing, building, testing, and maintaining cloud applications and services on Microsoft Azure. As a candidate for this exam, you’ll be responsible for participating in all phases of development, including requirements gathering, design, development, deployment, security, maintenance, performance tuning, and monitoring.</p><p>The exam measures your ability to accomplish the following technical tasks:</p><ul><li>Develop Azure compute solutions</li><li>Develop for Azure storage</li><li>Implement Azure security</li><li>Monitor, troubleshoot, and optimize Azure solutions</li><li>Connect to and consume Azure services and third-party services</li></ul><p>I’m glad to achieve this and hope for a possible expert certificate in the future, let’s see…</p><p><img src="/images/I-ve-just-got-an-AZ-204-certificate/az-associate.png"></p><table><thead><tr><th>Issuer</th><th>Course</th><th>Year</th></tr></thead><tbody><tr><td><img src="/images/microsoft.jpg"></td><td>Microsoft Certified: Azure Developer Associate</td><td>2023</td></tr></tbody></table>]]></content>
    
    
    <summary type="html">&lt;p&gt;Azure and Microsoft in general always was part of my background as a Software Engineer. I’ve been working with Azure for a long time, but my experiences was more leading teams that used to use Azure, I mean, I was not the one who was doing the actual work. I was more like the manager supporting the expert team building the solutions. Yeah, of course, I was doing some work, but it was more like a support role. And this certification was a personal challenge for me to prove myself that I was able to do the job with my hands if it is needed.&lt;/p&gt;</summary>
    
    
    
    <category term="News" scheme="http://www.dzfweb.com.br/categories/News/"/>
    
    
    <category term="Certificates" scheme="http://www.dzfweb.com.br/tags/Certificates/"/>
    
    <category term="az-204" scheme="http://www.dzfweb.com.br/tags/az-204/"/>
    
    <category term="Azure" scheme="http://www.dzfweb.com.br/tags/Azure/"/>
    
  </entry>
  
  <entry>
    <title>My AI toolkit for boost my dev productivity</title>
    <link href="http://www.dzfweb.com.br/2023/10/23/My-AI-toolkit-for-boost-my-dev-productivity/"/>
    <id>http://www.dzfweb.com.br/2023/10/23/My-AI-toolkit-for-boost-my-dev-productivity/</id>
    <published>2023-10-23T17:33:23.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>As a developer, I’m always looking for ways to boost my productivity. And it turns out that I’m not alone. According to recent research, AI tools like GitHub Copilot and Tactiq can have a significant impact on developer productivity.</p><span id="more"></span><h2 id="AI-Productivity-Research"><a href="#AI-Productivity-Research" class="headerlink" title="AI Productivity Research"></a>AI Productivity Research</h2><p>One study found that the quality of the code authored and reviewed was better across the board with GitHub Copilot Chat enabled, even though none of the developers had used the feature before.</p><ul><li>85% of developers felt more confident in their code quality when authoring code with GitHub Copilot and GitHub Copilot Chat.</li><li>Code reviews were more actionable and completed 15% faster with GitHub Copilot Chat.</li><li>88% of developers reported maintaining flow state with GitHub Copilot Chat because they felt more focused, less frustrated, and enjoyed coding more, too.</li></ul><p><img src="/images/github-copilot-research.png"></p><p><a href="https://github.blog/2023-10-10-research-quantifying-github-copilots-impact-on-code-quality/">https://github.blog/2023-10-10-research-quantifying-github-copilots-impact-on-code-quality/</a></p><p>So, it’s clear that AI tools have a lot of potential when it comes to boosting developer productivity. And two of the tools that I’ve found to be particularly helpful are GitHub Copilot and Tactiq.</p><h2 id="GitHub-Copilot"><a href="#GitHub-Copilot" class="headerlink" title="GitHub Copilot"></a>GitHub Copilot</h2><p>GitHub Copilot is an AI programming assistant that has been a game-changer when it comes to coding. With Copilot, I can quickly generate code snippets and get suggestions for how to complete functions and methods. It’s like having a coding partner who’s always there to help me out.</p><p>When I’m working on a new project, I’ll often use Copilot to generate some starter code. This saves me a lot of time and helps me get up and running quickly. And if I’m stuck on a particular piece of code, I’ll use Copilot to get suggestions for how to complete it. This has been incredibly helpful when I’m working with a new language or framework.</p><h3 id="Smart-Auto-complete"><a href="#Smart-Auto-complete" class="headerlink" title="Smart Auto-complete"></a>Smart Auto-complete</h3><p>One of the key features that sets Copilot apart is its smart auto-complete functionality. With this feature, Copilot can suggest code snippets and complete functions and methods based on the context of your code. This saves you time and helps you write code more efficiently.</p><p><img src="/images/My-AI-toolset-for-boost-my-dev-productivity/1.gif"></p><h3 id="Code-generation"><a href="#Code-generation" class="headerlink" title="Code generation"></a>Code generation</h3><p>Another powerful feature of Copilot is its code generation capability. With Copilot, you can quickly generate code for common tasks like file I&#x2F;O, string manipulation, and more. This feature is particularly helpful when you’re working with a new language or framework and need to get up and running quickly.</p><p><img src="/images/My-AI-toolset-for-boost-my-dev-productivity/2.gif"></p><h3 id="Test-generation"><a href="#Test-generation" class="headerlink" title="Test generation"></a>Test generation</h3><p>Finally, Copilot also has a test generation feature that can help you write better code. With this feature, Copilot can generate test cases for your code, ensuring that it’s working as expected and reducing the likelihood of bugs. This feature is especially useful for developers who are new to testing or who want to improve their testing practices.</p><p><img src="/images/My-AI-toolset-for-boost-my-dev-productivity/3.gif"></p><h2 id="Tactiq"><a href="#Tactiq" class="headerlink" title="Tactiq"></a>Tactiq</h2><p>Another tool that I’ve found incredibly helpful is Tactiq. This tool is perfect for anyone who spends a lot of time in meetings. With Tactiq, I can easily transcribe meetings and keep track of important details. It’s a great way to stay organized and make sure that I don’t miss anything important.</p><p>During meetings, I’ll use Tactiq to transcribe what’s being said. This helps me stay focused and ensures that I don’t miss any important details. Plus, I can easily refer back to the transcript later if I need to.</p><p><img src="/images/My-AI-toolset-for-boost-my-dev-productivity/tactiq.png"></p><p>Another cool feature of Tactiq (which I believe uses gpt-4 behind the scenes) is the ability to generate action points.</p><p>Overall, Tactiq has been a huge help in keeping me organized and productive. And I highly recommend it to anyone who spends a lot of time in meetings.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;As a developer, I’m always looking for ways to boost my productivity. And it turns out that I’m not alone. According to recent research, AI tools like GitHub Copilot and Tactiq can have a significant impact on developer productivity.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term="Certificates" scheme="http://www.dzfweb.com.br/tags/Certificates/"/>
    
    <category term="AI" scheme="http://www.dzfweb.com.br/tags/AI/"/>
    
    <category term="Artificial Intelligence" scheme="http://www.dzfweb.com.br/tags/Artificial-Intelligence/"/>
    
  </entry>
  
  <entry>
    <title>New AI certificates</title>
    <link href="http://www.dzfweb.com.br/2023/10/23/New-AI-certificates/"/>
    <id>http://www.dzfweb.com.br/2023/10/23/New-AI-certificates/</id>
    <published>2023-10-23T17:09:01.000Z</published>
    <updated>2025-12-03T19:59:54.999Z</updated>
    
    <content type="html"><![CDATA[<p>As a software engineer, staying up-to-date with the latest technologies and trends is crucial to remain competitive in the job market. That’s why I’m excited to share that I recently earned several new certificates in the field of Artificial Intelligence (AI).</p><span id="more"></span><table><thead><tr><th>Issuer</th><th>Course</th><th>Year</th></tr></thead><tbody><tr><td><img src="/images/microsoft.jpg"></td><td>Career Essentials in Generative AI by Microsoft and LinkedIn</td><td>2023</td></tr><tr><td><img src="/images/microsoft.jpg"></td><td>Ethics in the Age of Generative AI</td><td>2023</td></tr><tr><td><img src="/images/microsoft.jpg"></td><td>Generative AI: The Evolution of Thoughtful Online Search</td><td>2023</td></tr><tr><td><img src="/images/microsoft.jpg"></td><td>Introduction to Artificial Intelligence</td><td>2023</td></tr><tr><td><img src="/images/microsoft.jpg"></td><td>Streamlining Your Work with Microsoft Bing Chat</td><td>2023</td></tr><tr><td><img src="/images/google.png"></td><td>Introduction to Generative AI</td><td>2023</td></tr></tbody></table><p>These certificates have equipped me with the skills and knowledge needed to excel in the field of AI, including Generative AI, Computer Ethics, Search Engine Technology, and Artificial Intelligence for Business. With these certificates, I am confident that I can take on more challenging projects and contribute to my organization’s success. Moreover, these certificates demonstrate my commitment to professional development and my willingness to learn and adapt to new technologies.</p><p>In conclusion, earning these certificates has been a significant achievement for me, and I am excited to apply my new skills and knowledge to my work as a software engineer. I believe that these certificates will help me stand out in the job market and open up new opportunities for career growth and advancement.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;As a software engineer, staying up-to-date with the latest technologies and trends is crucial to remain competitive in the job market. That’s why I’m excited to share that I recently earned several new certificates in the field of Artificial Intelligence (AI).&lt;/p&gt;</summary>
    
    
    
    <category term="News" scheme="http://www.dzfweb.com.br/categories/News/"/>
    
    
    <category term="Certificates" scheme="http://www.dzfweb.com.br/tags/Certificates/"/>
    
    <category term="AI" scheme="http://www.dzfweb.com.br/tags/AI/"/>
    
    <category term="Artificial Intelligence" scheme="http://www.dzfweb.com.br/tags/Artificial-Intelligence/"/>
    
  </entry>
  
  <entry>
    <title>.NET Microservices: Architecture for Containerized Applications with .NET</title>
    <link href="http://www.dzfweb.com.br/2017/10/04/NET-Microservices-Architecture-for-Containerized-Applications-with-NET/"/>
    <id>http://www.dzfweb.com.br/2017/10/04/NET-Microservices-Architecture-for-Containerized-Applications-with-NET/</id>
    <published>2017-10-04T15:09:05.000Z</published>
    <updated>2025-12-03T19:59:54.999Z</updated>
    
    <content type="html"><![CDATA[<p>Microsoft has released an official and free ebook on .NET architecture for applications in containers with docker. To make it easier for ereaders to read, I converted it to Gitbook.</p><span id="more"></span><p><em>[Updated 2023: Link is not working, please use the repository on github]</em><br><a href="https://github.com/dzfweb/microsoft-microservices-book">https://github.com/dzfweb/microsoft-microservices-book</a></p><h2 id="Download"><a href="#Download" class="headerlink" title="Download"></a>Download</h2><p>MOBI<br><a href="https://www.gitbook.com/download/mobi/book/dzfweb/microsoft-microservices-book">https://www.gitbook.com/download/mobi/book/dzfweb/microsoft-microservices-book</a></p><h2 id="EPUB"><a href="#EPUB" class="headerlink" title="EPUB"></a>EPUB</h2><p><a href="https://www.gitbook.com/download/epub/book/dzfweb/microsoft-microservices-book">https://www.gitbook.com/download/epub/book/dzfweb/microsoft-microservices-book</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Microsoft has released an official and free ebook on .NET architecture for applications in containers with docker. To make it easier for ereaders to read, I converted it to Gitbook.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term=".NET" scheme="http://www.dzfweb.com.br/tags/NET/"/>
    
    <category term="microservices" scheme="http://www.dzfweb.com.br/tags/microservices/"/>
    
    <category term="architecture" scheme="http://www.dzfweb.com.br/tags/architecture/"/>
    
  </entry>
  
  <entry>
    <title>Blazor brings .NET back to browsers</title>
    <link href="http://www.dzfweb.com.br/2017/09/10/Blazor-brings-.NET-back-to-browsers/"/>
    <id>http://www.dzfweb.com.br/2017/09/10/Blazor-brings-.NET-back-to-browsers/</id>
    <published>2017-09-10T15:08:52.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>Blazor is an experiment created by Steve Sanderson that makes .NET possible for browsers using WebAssembly and DotNetAnywhere. It is not a complete Framework like Flash or Silverlight, but a test to see what is possible to do with such technology.</p><span id="more"></span><p>WebAssembly describes itself as a standard for “a secure, testable, and even deployable JavaScript virtual machine execution environment.” Although it performs better in browsers that support it natively, WebAssembly can be interpreted by older browsers through converters and asm.js.</p><p>Currently, WebAssembly is designed to support applications written in C and C++, acting as a backend compiler for clang&#x2F;LLVM. To convert C into C#, Blazor uses DotNetAnywhere, created by Chris Bacon, which is nothing more than an MSIL interpreter for the .NET Framework. The DotNetAnywhere project ended about 6 years ago.</p><p>Blazor makes the following changes to DotNetAnywhere:</p><ul><li>Development support with Emscripten</li><li>Support for JavaScript calls through .NET (and vice versa)</li><li>Adds primitive interop features (eg GCGandle)</li><li>Fixes some bugs</li><li>Support for loading .NET Core-style resources</li></ul><p>Applications with Blazor are built using Razor templates, which run in the browser rather than on the server. According to the documentation, a simple “Hello world” requires a 300KB download. This includes everything needed, namely:</p><ul><li>small and lightweight .NET runtime</li><li>Core libs</li><li>Application code</li><li>Encapsulated codes needed to run the WebAssembly code</li></ul><p>No effort has been made to remove unnecessary code, so it’s still possible to reduce the size further.</p><p>To see Blazor in action, watch the video of the presentation given at the NDC conference “Web Apps can’t really do that, can they? - Steve Sanderson” (Web apps really can’t do that, can they?).</p><p>Artigo originalmente publicado no InfoQ<br><a href="https://www.infoq.com/br/news/2017/09/Blazor">https://www.infoq.com/br/news/2017/09/Blazor</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Blazor is an experiment created by Steve Sanderson that makes .NET possible for browsers using WebAssembly and DotNetAnywhere. It is not a complete Framework like Flash or Silverlight, but a test to see what is possible to do with such technology.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term="blazor" scheme="http://www.dzfweb.com.br/tags/blazor/"/>
    
    <category term=".net" scheme="http://www.dzfweb.com.br/tags/net/"/>
    
  </entry>
  
  <entry>
    <title>How easy is it to create a plugin for NativeScript?</title>
    <link href="http://www.dzfweb.com.br/2017/05/25/How-easy-is-it-to-create-a-plugin-for-NativeScript/"/>
    <id>http://www.dzfweb.com.br/2017/05/25/How-easy-is-it-to-create-a-plugin-for-NativeScript/</id>
    <published>2017-05-25T15:08:36.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>There is a growing number of plugins available for NativeScript that are developed by the community, and the reason for this is not only the willingness and sense of contribution from developers, but also the ease of developing a plugin for NativeScript, especially after version 3.0.</p><span id="more"></span><p>In this article, I’ll demonstrate how I developed NativeScript Emoji, my first UI Plugin for NativeScript. By the end of this article, I hope you’ll be interested in you the interest in developing a plugin and contributing to the community of NativeScript developers, everyone wins when this happens!.</p><h2 id="Por-onde-comecar"><a href="#Por-onde-comecar" class="headerlink" title="Por onde começar?"></a>Por onde começar?</h2><p>I will demonstrate the basics that you need to know to get started, but if you prefer, the complete documentation can be found here.</p><p>The easiest way to get a plugin for NativeScript is to use the NativeScript Plugin Seed, created by NathanWalker. This library will do all the hard work of creating the structure of a NativeScript plugin, and that’s really amazing. See how easy it is:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git clone https://github.com/NathanWalker/nativescript-plugin-seed.git myplugin</span><br><span class="line">cd myplugin</span><br><span class="line">npm run postclone</span><br><span class="line">npm run setup</span><br></pre></td></tr></table></figure><p>Now, with just these steps you will have created all the necessary structure to develop, test and publish your plugin, but before you start, let’s make a brief introduction about the plugin we are going to develop together in this article.</p><h2 id="O-plugin-NativeScript-Emoji"><a href="#O-plugin-NativeScript-Emoji" class="headerlink" title="O plugin NativeScript Emoji"></a>O plugin NativeScript Emoji</h2><p>The purpose of this plugin is to deliver an element to the interface to display Emojis in a friendly way. My initial idea was to have a TextView element. When setting the unicode or hexadecimal value of emoji in the corresponding property:</p><p><code>&lt;Emoji:Emoji icon=&quot;128514&quot;&gt;</code> exibir :😂</p><p>The plugin would do the conversion to Emoji, and here I leave a highlight again for the NativeScript community in Slack (Haven’t joined us yet? Sign up now), which made the excellent suggestion to replace the unicode property with a friendlier and easier-to-remember value:</p><p><code>&lt;Emoji:Emoji name=&quot;joy&quot;&gt;</code> exibir :😂</p><h2 id="Implementacao-para-Android-e-iOS"><a href="#Implementacao-para-Android-e-iOS" class="headerlink" title="Implementação para Android e iOS"></a>Implementação para Android e iOS</h2><p>Now that we already have the definition of the plugin and the structure created, get started. The first thing we need to do is define the common implementation across platforms, we know that we will have a name property that will serve both Android and iOS, this setting is made in the common file that was generated in the first step of this article .</p><p><em>emoji.common.ts</em></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">import &#123; View, Property &#125; from &quot;ui/core/view&quot;;</span><br><span class="line">export class EmojiCommon extends View &#123;</span><br><span class="line">  name: string;</span><br><span class="line">&#125;</span><br><span class="line">export const nameProperty = new Property&lt;EmojiCommon, string&gt;(</span><br><span class="line">  &#123;</span><br><span class="line">    name: &quot;name&quot;,</span><br><span class="line">    defaultValue: &quot;&quot;</span><br><span class="line">  &#125;);</span><br><span class="line">nameProperty.register(EmojiCommon);</span><br></pre></td></tr></table></figure><p>As this is an ui plugin, we need to extend the View class. The attributes of the element that we will create, we define creating a new object of type Property.</p><p>The property name we define the name of the attribute and the default value of it, as the name itself suggests, we define the property defaultValue. If the value of this attribute were different from the type string, which is not our case, we would need to set the value for the property valueConverter.</p><p>The emojis encoding is distinct for each platform, so we need to have a database to store those values to query during the execution of the plugin.</p><p><em>emoji.database.ts</em></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">export class EmojiDatabase &#123;</span><br><span class="line">    public static list(): Array&lt;any&gt; &#123;</span><br><span class="line">      return [</span><br><span class="line">    &#123;</span><br><span class="line">        &quot;name&quot;: &quot;FACE WITH TEARS OF JOY&quot;,</span><br><span class="line">        &quot;unicode&quot;: &quot;😂&quot;,</span><br><span class="line">        &quot;hexcode&quot;: &quot;1F602&quot;,</span><br><span class="line">        &quot;codepoint&quot;: [</span><br><span class="line">            128514</span><br><span class="line">        ],</span><br><span class="line">        &quot;shortname&quot;: &quot;joy&quot;</span><br><span class="line">    &#125;];</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Implementacao-para-Android"><a href="#Implementacao-para-Android" class="headerlink" title="Implementação para Android"></a>Implementação para Android</h2><p>Now that we have the attributes of the element that we will create, we need to implement the code responsible for generating the element corresponding to each platform. NativeScript will interpret the specific code for Android at runtime through the following file.</p><p><em>emoji.android.ts</em></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">import &#123; nameProperty, EmojiCommon &#125; from &quot;./emoji.common&quot;;</span><br><span class="line">import &#123; EmojiDatabase &#125; from &quot;./emoji.database&quot;;</span><br><span class="line">import * as utils from &quot;tns-core-modules/utils/utils&quot;;</span><br><span class="line">declare var java: any;</span><br><span class="line">global.moduleMerge(EmojiCommon, exports);</span><br><span class="line">export class Emoji extends EmojiCommon &#123;</span><br><span class="line">  [nameProperty.getDefault](): string &#123;</span><br><span class="line">    return &#x27;&#x27;;</span><br><span class="line">  &#125;</span><br><span class="line">  [nameProperty.setNative](value: string) &#123;</span><br><span class="line">    let emoji = EmojiDatabase.list().find((el) =&gt; el.shortname ##= value).codepoint[0];</span><br><span class="line">    this.nativeView.setText(new java.lang.String(java.lang.Character.toChars(emoji)));</span><br><span class="line">  &#125;</span><br><span class="line">  private _android: android.widget.TextView;</span><br><span class="line">  get android() &#123;</span><br><span class="line">    return this.nativeView;</span><br><span class="line">  &#125;</span><br><span class="line">  public createNativeView() &#123;</span><br><span class="line">    this._android = new android.widget.TextView(utils.ad.getApplicationContext());</span><br><span class="line">    return this._android;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>The first step is to extend the common class created earlier. You must implement the createNativeView method too, which will make NativeScript understand that some element must be created in the View. In our case we will create a TextView.</p><p>And again here we have another great help from the framework, the NativeScript team has mapped all the native properties and methods of each platform and generated the definitions in TypeScript, which gives us the possibility to navigate through all these native definitions directly in the editor.</p><p>We must also define what the plugin will do when it receives the attribute name, this is defined by implementing the setNative method, which in our case will query the emoji name in the database, and based on the corresponding code, It will set the value for the previously created TextView. The getDefault method is for cases where no value is set.</p><h2 id="Implementacao-para-iOS"><a href="#Implementacao-para-iOS" class="headerlink" title="Implementação para iOS"></a>Implementação para iOS</h2><p>We can copy the same implementation made for Android, and only change the parts where it is created and set the value for the native element, which in the case of iOS will be the UILabel setting as follows.</p><p><em>emoji.ios.ts</em></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">import &#123; nameProperty, EmojiCommon &#125; from &quot;./emoji.common&quot;;</span><br><span class="line">import &#123; EmojiDatabase &#125; from &quot;./emoji.database&quot;;</span><br><span class="line">global.moduleMerge(EmojiCommon, exports);</span><br><span class="line">export class Emoji extends EmojiCommon &#123;</span><br><span class="line">  [nameProperty.getDefault](): number &#123;</span><br><span class="line">    return 0;</span><br><span class="line">  &#125;</span><br><span class="line">  [nameProperty.setNative](value: string) &#123;</span><br><span class="line">    let emoji = EmojiDatabase.list().find((el) =&gt; el.shortname ##= value).unicode;</span><br><span class="line">    let nsString = NSString.stringWithString(emoji);</span><br><span class="line">    this.nativeView.text = nsString;</span><br><span class="line">  &#125;</span><br><span class="line">  private _ios: UILabel;</span><br><span class="line">  get ios() &#123;</span><br><span class="line">    return this.nativeView;</span><br><span class="line">  &#125;</span><br><span class="line">  public createNativeView() &#123;</span><br><span class="line">    this._ios = UILabel.alloc().init();</span><br><span class="line">    return this._ios;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Here again it will be possible to access the definition of the native methods for iOS, in the createNativeView method a UILabel is created and in the setNative method the value for the created element is defined.</p><h2 id="Testando-o-plugin"><a href="#Testando-o-plugin" class="headerlink" title="Testando o plugin"></a>Testando o plugin</h2><p>Yes, we finished the plugin implementation and what is left is just testing. Realy fast, dont you think? To test we need to add the plugin to the demo project created in the initial steps of this article. To do this, you must execute the command:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm run preparedemo</span><br></pre></td></tr></table></figure><p>Add the element reference in the Page element of the main-page.xml file</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xmlns:Emoji=&quot;nativescript-emoji&quot;</span><br></pre></td></tr></table></figure><p>And then add the element within the StackLayout</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;Emoji:Emoji name=&quot;joy&quot; /&gt;</span><br></pre></td></tr></table></figure><p>Stating as follows:</p><p><em>main-page.xml</em></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;Page xmlns=&quot;http://schemas.nativescript.org/tns.xsd&quot; xmlns:Emoji=&quot;nativescript-emoji&quot; navigatingTo=&quot;navigatingTo&quot; class=&quot;page&quot;&gt;</span><br><span class="line"></span><br><span class="line">    &lt;Page.actionBar&gt;</span><br><span class="line">        &lt;ActionBar title=&quot;NativeScript Emoji&quot; icon=&quot;&quot; class=&quot;action-bar&quot;&gt;</span><br><span class="line">        &lt;/ActionBar&gt;</span><br><span class="line">    &lt;/Page.actionBar&gt;</span><br><span class="line">    &lt;StackLayout orientation=&quot;horizontal&quot;&gt;</span><br><span class="line">        &lt;Label text=&quot;I&#x27;m happy &quot;&gt; &lt;/Label&gt;</span><br><span class="line">        &lt;Emoji:Emoji name=&quot;joy&quot; /&gt;</span><br><span class="line">        &lt;Emoji:Emoji name=&quot;joy&quot; /&gt;</span><br><span class="line">        &lt;Emoji:Emoji name=&quot;joy&quot; /&gt;</span><br><span class="line">    &lt;/StackLayout&gt;</span><br><span class="line">&lt;/Page&gt;</span><br></pre></td></tr></table></figure><p>Now let’s run the demo project on the emulators of each platform by executing the following commands.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">nmm run demo.ios</span><br><span class="line">npm run demo.android</span><br></pre></td></tr></table></figure><p><img src="https://raw.githubusercontent.com/dzfweb/nativescript-emoji/master/emojiprintscreen.png" alt="image"></p><h2 id="Conclusao"><a href="#Conclusao" class="headerlink" title="Conclusão"></a>Conclusão</h2><p>Hopefully you can see how fast and easy it is to develop a plugin for NativeScript, the community is very open to helping as well, as well as the Telerik team that seeks to deliver with each version tools that vision make our work as a developer much more productive and i throw the invitation to you developer who is reading this article, did you develop something customized on any project? Do you have any ideas about any tools that might be useful? Contribute with us as well.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;There is a growing number of plugins available for NativeScript that are developed by the community, and the reason for this is not only the willingness and sense of contribution from developers, but also the ease of developing a plugin for NativeScript, especially after version 3.0.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term="NativeScript" scheme="http://www.dzfweb.com.br/tags/NativeScript/"/>
    
    <category term="plugin" scheme="http://www.dzfweb.com.br/tags/plugin/"/>
    
  </entry>
  
  <entry>
    <title>NativeScript Course: Creating a New Project with Angular 2</title>
    <link href="http://www.dzfweb.com.br/2017/04/21/NativeScript%20Course-Creating-a-New-Project-with-Angular-2/"/>
    <id>http://www.dzfweb.com.br/2017/04/21/NativeScript%20Course-Creating-a-New-Project-with-Angular-2/</id>
    <published>2017-04-21T15:08:24.000Z</published>
    <updated>2025-12-03T19:59:54.999Z</updated>
    
    <content type="html"><![CDATA[<p>Hey guys, I share with you a video lesson part of the NativeScript with Angular 2 course that I’m recording.<br>** Content in Portuguese **</p><span id="more"></span><iframe width="560" height="315" src="https://www.youtube.com/embed/2yZAKoMIv3Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>]]></content>
    
    
    <summary type="html">&lt;p&gt;Hey guys, I share with you a video lesson part of the NativeScript with Angular 2 course that I’m recording.&lt;br&gt;** Content in Portuguese **&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term="Mobile" scheme="http://www.dzfweb.com.br/tags/Mobile/"/>
    
    <category term="NativeScript" scheme="http://www.dzfweb.com.br/tags/NativeScript/"/>
    
    <category term="courses" scheme="http://www.dzfweb.com.br/tags/courses/"/>
    
    <category term="Angular+" scheme="http://www.dzfweb.com.br/tags/Angular/"/>
    
  </entry>
  
  <entry>
    <title>GS1 Award Winner at AngelHack SP 2016</title>
    <link href="http://www.dzfweb.com.br/2016/04/18/GS1%20Award-Winner-at-AngelHack-SP-2016/"/>
    <id>http://www.dzfweb.com.br/2016/04/18/GS1%20Award-Winner-at-AngelHack-SP-2016/</id>
    <published>2016-04-18T15:08:08.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>This weekend I participated in the biggest hackathon in the world, present in several countries, the AngelHack edition São Paulo 2016.</p><p>The contest brought together 220 students and professionals from the areas of software programming, design and communication. There were around 30 hours of intense immersion for multidisciplinary teams, with the help of around 80 mentors, to create technological solutions in the form of applications aimed at social good or research and innovation.</p><span id="more"></span><p>My team was the winner in the Barcode Technological Innovation category. We have developed a multiplatform solution for trading and donating perishable products, taking advantage of GS1’s APIs to register and consult products by barcode.</p><p>It was a very good experience to participate in an event full of programmers and people who love technology, here are some photos.</p><p>More details at the following url: <a href="https://issuu.com/gs1br/docs/revista_gs1_ed_20_/52">https://issuu.com/gs1br/docs/revista_gs1_ed_20_/52</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;This weekend I participated in the biggest hackathon in the world, present in several countries, the AngelHack edition São Paulo 2016.&lt;/p&gt;
&lt;p&gt;The contest brought together 220 students and professionals from the areas of software programming, design and communication. There were around 30 hours of intense immersion for multidisciplinary teams, with the help of around 80 mentors, to create technological solutions in the form of applications aimed at social good or research and innovation.&lt;/p&gt;</summary>
    
    
    
    <category term="News" scheme="http://www.dzfweb.com.br/categories/News/"/>
    
    
    <category term="awards" scheme="http://www.dzfweb.com.br/tags/awards/"/>
    
    <category term="hackaton" scheme="http://www.dzfweb.com.br/tags/hackaton/"/>
    
  </entry>
  
  <entry>
    <title>Talking a little bit about HASH MD5 in TISS</title>
    <link href="http://www.dzfweb.com.br/2014/09/22/Talking-a-little-bit-about-HASH-MD5-in-TISS/"/>
    <id>http://www.dzfweb.com.br/2014/09/22/Talking-a-little-bit-about-HASH-MD5-in-TISS/</id>
    <published>2014-09-22T15:05:43.000Z</published>
    <updated>2025-12-03T19:59:54.999Z</updated>
    
    <content type="html"><![CDATA[<p>I created this post with the intention of helping other developers who encountered the same difficulty that I encountered during the process of developing TISS modules and HASH MD5 validations.</p><span id="more"></span><p>To introduce the text, let’s go to definitions (well summarized):</p><h2 id="What-is-TISS"><a href="#What-is-TISS" class="headerlink" title="What is TISS?"></a>What is TISS?</h2><p>_The TISS - Exchange of Information on Supplementary Health is a standard for recording and exchanging data between operators of private health care plans and medical-hospital service providers of the National Agency for Supplementary Health - ANS in Brazil.<br>_</p><h2 id="What-is-MD5-Hash"><a href="#What-is-MD5-Hash" class="headerlink" title="What is MD5 Hash?"></a>What is MD5 Hash?</h2><p>MD5 (Message Digest algorithm 5) is a 128-bit unidirectional hashing algorithm developed by RSA Data Security, Inc., described in RFC 1321, and widely used by peer-to-peer (P2P) protocol software. -Peer), integrity checking of files and logins.</p><h2 id="What-is-the-purpose-of-the-MD5-Hash-in-TISS"><a href="#What-is-the-purpose-of-the-MD5-Hash-in-TISS" class="headerlink" title="What is the purpose of the MD5 Hash in TISS?"></a>What is the purpose of the MD5 Hash in TISS?</h2><p>The exchange of communication between operators and providers in the Tiss webservices is carried out in well-structured and complex XML files. The MD5 Hash exists to guarantee the integrity of the file, since the contents of the XML elements are used to generate the Hash encryption. This guarantees that the file has not been changed manually, as a simple change of characters or whitespace, for example, would completely change the MD5 HASH of the file.</p><h2 id="How-to-calculate-MD5-Hash-for-TISS"><a href="#How-to-calculate-MD5-Hash-for-TISS" class="headerlink" title="How to calculate MD5 Hash for TISS?"></a>How to calculate MD5 Hash for TISS?</h2><p>Concatenate the contents of all elements into a single String.<br>Remove whitespace ONLY at the beginning and end of the file.<br>Special characters, accents and dashes must be maintained.<br>MD5 encoding must be generated in UTF-8 standard.</p><p>Example method to generate MD5 calculation for TISS in C# .NET</p><p>Below is a simple method that I use to generate the MD5 Hash.</p><h2 id="Method-to-generate-HashMD5"><a href="#Method-to-generate-HashMD5" class="headerlink" title="Method to generate HashMD5"></a>Method to generate HashMD5</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">public static string getMD5Hash(string input)</span><br><span class="line">&#123;</span><br><span class="line">    System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();</span><br><span class="line">    byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);</span><br><span class="line">    byte[] hash = md5.ComputeHash(inputBytes);</span><br><span class="line">    System.Text.StringBuilder sb = new System.Text.StringBuilder();</span><br><span class="line">    for (int i = 0; i &lt; hash.Length; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        sb.Append(hash[i].ToString(&quot;x2&quot;));</span><br><span class="line">    &#125;</span><br><span class="line">    return sb.ToString();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;I created this post with the intention of helping other developers who encountered the same difficulty that I encountered during the process of developing TISS modules and HASH MD5 validations.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term="cryptography" scheme="http://www.dzfweb.com.br/tags/cryptography/"/>
    
  </entry>
  
  <entry>
    <title>Android and iOS development with .NET and Visual Studio</title>
    <link href="http://www.dzfweb.com.br/2014/04/25/Android-and-iOS-development-with-.NET-and-Visual-Studio/"/>
    <id>http://www.dzfweb.com.br/2014/04/25/Android-and-iOS-development-with-.NET-and-Visual-Studio/</id>
    <published>2014-04-25T15:01:43.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>Mobile development has always been a big challenge for many developers due to their limited options of platforms to work on, be it Android or iOS. You should study different production environments, Eclipse, objective C, java, etc.</p><span id="more"></span><p>Xamarin is a great and robust paid tool (and very expensive by the way, with the cheapest usage license of $299.90 per year) for developers familiar with the .NET Framework, being able to use the huge repertoire of libraries that this amazing Microsoft framework available with C# to develop mobile applications. Xamarin has a huge documentation to study, with examples of several resources, projects ready for download, community for debate with other developers specialized in the subject.</p><p>If you are a .NET web developer and want to venture into a new development scenario, in this case Mobile Development, one of the most sought after areas for projects that is growing every year due to the mobile technological advancement, this is a very good professional tool to study.</p><p>More information on the official Xamarin website</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Mobile development has always been a big challenge for many developers due to their limited options of platforms to work on, be it Android or iOS. You should study different production environments, Eclipse, objective C, java, etc.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term="Mobile" scheme="http://www.dzfweb.com.br/tags/Mobile/"/>
    
    <category term=".NET" scheme="http://www.dzfweb.com.br/tags/NET/"/>
    
    <category term="Android" scheme="http://www.dzfweb.com.br/tags/Android/"/>
    
    <category term="iOS" scheme="http://www.dzfweb.com.br/tags/iOS/"/>
    
  </entry>
  
  <entry>
    <title>Is your .NET Project Source Code protected?</title>
    <link href="http://www.dzfweb.com.br/2013/12/01/Is%20your%20.NET-Project-Source-Code-protected/"/>
    <id>http://www.dzfweb.com.br/2013/12/01/Is%20your%20.NET-Project-Source-Code-protected/</id>
    <published>2013-12-01T15:07:04.000Z</published>
    <updated>2025-12-03T19:59:54.998Z</updated>
    
    <content type="html"><![CDATA[<p>Probably you Developer must have asked yourself: “Is my code protected?”. I came across this question at the end of a system that I had developed in .NET and was about to put it into production, and like any cautious developer, I started researching methodologies to protect my System and, consequently, the System’s source code.</p><span id="more"></span><p>Well, this study brought me an insecurity about the .NET Technology, which for me until then, was considered very safe. Amazingly, it is possible to extract the source code of any .NET project (C#, VB, etc). In this article I will share with you how it is possible to do this and how to protect your code and make this practice a little more difficult.</p><h2 id="Understanding-NET-DLLs-and-Executables"><a href="#Understanding-NET-DLLs-and-Executables" class="headerlink" title="Understanding .NET DLLs and Executables"></a>Understanding .NET DLLs and Executables</h2><p>In summary, when you compile a code in .NET, it is not converted to machine language. All .NET languages are converted to MSIL (Microsoft Intermediate Language) . MSIL is converted at runtime. This process offers some advantages such as dynamically querying Assemblies and their methods. However, thanks to this process, it is also possible, through reverse engineering, to access the entire algorithm of the code, its methods, variables, etc.</p><h2 id="NET-decompilers"><a href="#NET-decompilers" class="headerlink" title=".NET decompilers"></a>.NET decompilers</h2><p>Microsoft has a kind of MSIL Decompiler where it is possible to access the methods of any .NET assembly (Learn more by clicking here) however, there are some more used decompilers that offer some functions in addition, such as extracting all the source code of the Assembly, including the .CSPROJ.</p><p>I’m talking about Reflector (download here) and File Disassembler plugin (download here). You’ll see below how the two together can extract the source code of DLLs or .NET executables.</p><p>This is the Reflector Interface. As soon as you open the program, it loads the Microsoft Assembly by default, where you can browse the methods. Until then, in amazement, because with Visual Studio it is already possible to do this.</p><p>Reflector</p><p>I created a new very simple Windows Form C# project to use in the example. It has 1 Form and a method. In the Reflector &gt; Open Assembly program I selected the executable I made, and then the program decodes the MSIL of the program and displays the methods.</p><p>Reflector</p><p>Now I’m going to use the Plugin File Disassembler by selecting it in the menu Tools &gt; File Disassembler, in the window that opens I inform the type of Project as Windows Form and the path for the output of the decompiled files. The Plugin then extracts all source code from the selected Assembly.</p><p>Reflector</p><p>And then after this simple process and with access to the assembly source code, I can open it in Visual Studio without any problem.</p><p>Reflector</p><p>Were you amazed? Yeah, me too. And because of that I left for another search.</p><h2 id="How-to-Protect-NET-Codes-with-Dotfuscator"><a href="#How-to-Protect-NET-Codes-with-Dotfuscator" class="headerlink" title="How to Protect .NET Codes with Dotfuscator"></a>How to Protect .NET Codes with Dotfuscator</h2><p>As of the 2012 version of Visual Studio, the Dotfuscator extension from the company PreEmptive is installed by default and can be accessed in Tools &gt;** PreEmptive Dotfuscator and Analytics **.</p><p>1- When opening the DotFuscator Interface, start a new project File &gt; New Project.</p><p>2- Click on Inputs and next to it, add the Assembly or Executables that you want to obfuscate.<br>(Ex: ..ProjetoBinMeuProjeto.exe)</p><p>3- Click on Build &gt; Build Project. This process will create a folder in your selected Project directory with the name Dotfuscated and the Executable or DLL with MSIL obfuscated.</p><p>1<br>Okay, your code has been protected and it is not possible to decompile. Now all you have to do is distribute the obfuscated executable to your clients. If you try to do this in Reflector, the result will be an encrypted and unreadable file.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Probably you Developer must have asked yourself: “Is my code protected?”. I came across this question at the end of a system that I had developed in .NET and was about to put it into production, and like any cautious developer, I started researching methodologies to protect my System and, consequently, the System’s source code.&lt;/p&gt;</summary>
    
    
    
    <category term="Development" scheme="http://www.dzfweb.com.br/categories/Development/"/>
    
    
    <category term=".NET" scheme="http://www.dzfweb.com.br/tags/NET/"/>
    
    <category term="security" scheme="http://www.dzfweb.com.br/tags/security/"/>
    
  </entry>
  
</feed>
