<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eric See</title>
    <description>The latest articles on DEV Community by Eric See (@seekiansengeri1).</description>
    <link>https://dev.to/seekiansengeri1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F820911%2Fdfa50e25-b645-4bff-b908-7d65c9241b4b.jpg</url>
      <title>DEV Community: Eric See</title>
      <link>https://dev.to/seekiansengeri1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seekiansengeri1"/>
    <language>en</language>
    <item>
      <title>Links to other Platforms</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Sun, 10 Dec 2023 14:26:38 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/links-to-other-platforms-1cbf</link>
      <guid>https://dev.to/seekiansengeri1/links-to-other-platforms-1cbf</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@ksericpro"&gt;https://medium.com/@ksericpro&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to collect IOT data, do magic and publish and sell enriched insights!!</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Fri, 10 Feb 2023 01:06:46 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/how-to-collect-iot-data-do-magic-and-publish-and-sell-enriched-insights-5hm</link>
      <guid>https://dev.to/seekiansengeri1/how-to-collect-iot-data-do-magic-and-publish-and-sell-enriched-insights-5hm</guid>
      <description>&lt;p&gt;Stay tune. I will discuss the architecture and details on how to setup one.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How to supercharge your Microservices Architecture</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Fri, 10 Feb 2023 01:04:19 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/how-to-supercharge-your-microservices-architecture-4lne</link>
      <guid>https://dev.to/seekiansengeri1/how-to-supercharge-your-microservices-architecture-4lne</guid>
      <description>&lt;p&gt;Stay tune..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trottling&lt;/li&gt;
&lt;li&gt;Websocket&lt;/li&gt;
&lt;li&gt;Event Sourcing&lt;/li&gt;
&lt;li&gt;SAGA&lt;/li&gt;
&lt;li&gt;Per Database or Shared Database&lt;/li&gt;
&lt;li&gt;Kafka + Redis as ESB&lt;/li&gt;
&lt;li&gt;No-SQL or SQL for data store&lt;/li&gt;
&lt;li&gt;Central Logging&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>msa</category>
      <category>infra</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to prevent getting into trouble when using Open-Source plugins</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Fri, 10 Feb 2023 00:57:30 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/how-to-prevent-getting-into-trouble-when-using-open-source-plugins-3h44</link>
      <guid>https://dev.to/seekiansengeri1/how-to-prevent-getting-into-trouble-when-using-open-source-plugins-3h44</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;TWO Categories of Open Source&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Permissive (CopyRight)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A permissive open source license is a non-copyleft open source license that guarantees the freedom to use, modify, and redistribute, while also permitting proprietary derivative works. Permissive open source licenses, lovingly referred to as “Anything Goes”, place minimal restrictions on how others can use open source components. That means that this type of license allows varying degrees of freedom to use, modify, and redistribute open source code, permitting its use in proprietary derivative works, and requiring nearly nothing in return in regards to obligations moving forward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Restricted (CopyLeft)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When an author releases a program under a copyleft license, they make a claim on the copyright of the work and issue a statement that other people have the right to use, modify, and share the work as long as the reciprocity of the obligation is maintained. In short, if they are using a component with this kind of open source license, then they too must make their code open for use by others as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;License Type(s)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. MIT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The MIT license gives users express permission to reuse code for any purpose, sometimes even if code is part of proprietary software. As long as users include the original copy of the MIT license in their distribution, they can make &lt;strong&gt;&lt;em&gt;any changes or modifications to the code to suit their own needs. MIT licenses allow commercial use.&lt;/em&gt;&lt;/strong&gt; Users do not have to provide any other source code when releasing new software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. BSD-3/X11&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The BSD 3-Clause License has two key requirements of those who want to use the licensed code. They’re actually the same as those of the MIT license. **_If you plan to copy, modify, or distribute any code licensed under BSD, you must include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The full text of the license&lt;/li&gt;
&lt;li&gt;The original copyright notice_**&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users of BSD-licensed code may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the code commercially.&lt;/li&gt;
&lt;li&gt;Modify the code.&lt;/li&gt;
&lt;li&gt;Distribute reworked versions or copies of the code.&lt;/li&gt;
&lt;li&gt;Place warranty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. GNU GPLv2/v3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These GPL series are all copyleft licenses, which means that any derivative work must be distributed under the same or equivalent license terms. It is more restrictive than the Lesser General Public License and even further distinct from the more widely used permissive software licenses BSD, MIT, and Apache.&lt;/p&gt;

&lt;p&gt;Any software created using an open-source component with a copyleft license must be released as open source as well. &lt;strong&gt;&lt;em&gt;The result is that any software product containing an open source copyleft license, even when it’s only a few lines out of mountains of code, must make its entire source code available for free, along with the rights to modify and distribute it. &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Apache 2.0&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apache License 2.0 can be easily used by other projects without any rewording in the license document itself.&lt;/p&gt;

&lt;p&gt;The Apache License is also a permissive license. However, it has stringent terms when it comes to modifications. It requires you to explicitly list out all the modifications that you’ve done in the original software, i.e., you’re required to preserve modification notices.&lt;/p&gt;

&lt;p&gt;You can use any Apache License 2.0 licensed software in your commercial products for free. &lt;strong&gt;&lt;em&gt;However, you must not name your product in a way that it looks like an endorsement from Apache. You must also not use any of the Apache marks (like the multi-colored feather) anywhere in your product or its documentation.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stay safe till we e-meet again!!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Developing Form Validations</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Thu, 09 Feb 2023 08:29:41 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/developing-form-validations-5b7f</link>
      <guid>https://dev.to/seekiansengeri1/developing-form-validations-5b7f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Validate process starts from form design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Very often we will need to create or update some forms before committing them to the backend.&lt;/p&gt;

&lt;p&gt;Even before we create forms, keep open text fields to a mininum. Often, it is good to let the user select from predefine lists, radio choices, etc. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validations both in backend and frontend&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Validations of fields should be done on both frontend and backend.  Alot of people implement validations on the frontend only. When someone uses postman or intercept the request and consume the APIs directly, it will create chaos in the database. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common validations &amp;amp; code snippets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some of the common validation checks are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mandatory
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//validate mandatory
Core_Utils.validateMandatory = function(value) {
  if (!value) {
    return true;
  } else {
    return false;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Numeric
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Core_Utils.isNumeric = function(value) {
    return !isNaN(value);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Email Format
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Validate Email
Core_Utils.validateEmail = function(email) {
    var re = /^(([^&amp;lt;&amp;gt;()\[\]\\.,;:\s@"]+(\.[^&amp;lt;&amp;gt;()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Minimum &amp;amp; Maximum Length Check
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Length Check
Core_Utils.validateLength = function(value, min, max) {
  if ((value&amp;gt;=min) &amp;amp;&amp;amp; (value&amp;lt;max)) {
    return true;
  } else {
    return false;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Whether field contains special characters
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Check whether content is safe
/*
&amp;lt; (open angle parenthesis)
&amp;gt; (close angle parenthesis)
• ' (single apostrophe)
• " (quotation mark)
• \' (backslash-escaped apostrophe)
• \" (backslash-escaped quotation mark)
• ( (opening parenthesis)
• ) (closing parenthesis)
• ; (semicolon)
• % (percentage)
*/
Core_Utils.isSanitized = function(content) {
    if (content!="") {
      var regex = /&amp;lt;|&amp;gt;|\'|\"|\(|\)|;|%/g;
      return !regex.test(content);
    }
    return true;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;JSON content
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Check whether string is JSON
Core_Utils.isJson = function(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;IP Address
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//validate Ip address
Core_Utils.validateIPaddress = function(ipaddress) {
  if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipaddress)) {
    return true;
  }
  return false;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Version (major.minor.variant format)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//validate version
Core_Utils.validateVersion = function(version) {
  if (/^\d{1,2}\.\d{1,2}\.\d{1,2}$/.test(version)) {
    return true;
  } else {
    return false;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Validation real-time or upon submit?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Personally, its more user friendly to display error message in real-time as the user types.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftidh1k9j5y0mqsv47mor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftidh1k9j5y0mqsv47mor.png" alt="Image description" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>design</category>
      <category>ui</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Average Monthly Salary in Singapore</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Mon, 25 Jul 2022 01:55:00 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/average-monthly-salary-in-singapore-41bi</link>
      <guid>https://dev.to/seekiansengeri1/average-monthly-salary-in-singapore-41bi</guid>
      <description>&lt;p&gt;I thought of doing something different. Since I am from Singapore, this is a report by JobStreet stating the Average Monthly Salary. Take this as a pinch of salt!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Acaixbit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qsfo67n5r1gqm02hqdnq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Acaixbit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qsfo67n5r1gqm02hqdnq.png" alt="Image description" width="880" height="821"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>salary</category>
    </item>
    <item>
      <title>What is Data Governance</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Mon, 25 Jul 2022 01:43:00 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/what-is-data-governance-52ap</link>
      <guid>https://dev.to/seekiansengeri1/what-is-data-governance-52ap</guid>
      <description>&lt;p&gt;What is data governance? &lt;/p&gt;

&lt;p&gt;There are 10 components under this umbrella:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Quality&lt;/li&gt;
&lt;li&gt;Data Architecture&lt;/li&gt;
&lt;li&gt;Data Modelling &amp;amp; Design&lt;/li&gt;
&lt;li&gt;Data Storage &amp;amp; Operations&lt;/li&gt;
&lt;li&gt;Data Security&lt;/li&gt;
&lt;li&gt;Data Integration &amp;amp; Interoperability&lt;/li&gt;
&lt;li&gt;Documents &amp;amp; Contents&lt;/li&gt;
&lt;li&gt;Reference &amp;amp; Master Data&lt;/li&gt;
&lt;li&gt;Data Warehousing &amp;amp; Business Intelligence&lt;/li&gt;
&lt;li&gt;MetaData&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A picture paints a thousand words:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3TNuaVTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/unnm1xnzdta72mmarz8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3TNuaVTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/unnm1xnzdta72mmarz8k.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we need these key components to implement data governance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cJd3Of-u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3fug2a3jaf46kei4gfx4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cJd3Of-u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3fug2a3jaf46kei4gfx4.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;People&lt;/strong&gt; The data governance professionals, data stewards, and other key business and IT staff are the backbones of a data governance program. They establish and develop workflows to ensure that the enterprise data governance requirements are met. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data strategy&lt;/strong&gt; The data governance team plays a crucial role in the development and implementation roadmap of an organization’s enterprise data strategy. A data strategy is an executive document that provides high-level enterprise requirements for data and ensures that those requirements are met. Building an enterprise data strategy is a vital step in the organization’s data management journey. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data processes&lt;/strong&gt; Data governance programs need to establish key data processes for data management. These include data issue tracking or resolution, data quality monitoring, data sharing, data lineage tracking, impact analysis, data quality testing, and many others. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data policies&lt;/strong&gt; A data policy is a high-level set of one or more statements that state expectations and expected outcomes of data that influence and direct data habits at an enterprise level. Data governance programs establish data governance policies for data management. Policies include outbound data sharing, regulatory adherence, and many others. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data standards &amp;amp; data rules&lt;/strong&gt; A data standard provides a framework and an approach to ensure adherence to a data policy. An example of a data standard could be using the ISO 3166 standard for the definition of the codes for the names of countries, dependent territories, special areas of geographical interest, and their principal subdivisions. A data rule directs or constrains behavior to ensure adherence to data standards, which provides compliance wi****th data policies. An example of a data rule would be an organization that only allows country codes listed in the ISO 3166 Standard. Typically, organizations will look to establish data rules for master and reference data, data definitions and domain development, metadata management, classification, accessibility, and many others. A data governance program can leverage many data standards. Some of the more notable data standards include:&lt;br&gt;
International Organization for Standardization (ISO): 3166, 19115, 11179&lt;br&gt;
Dublin Core: A basic, domain-agnostic, most widely used metadata standard that can be easily understood and implemented.&lt;br&gt;
Also Read: Top 10 Data Governance Tools for 2021 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data security&lt;/strong&gt; Data security involves protecting digital data, such as those in a database, from destructive forces and unwanted actions of authorized and unauthorized users. These unwanted user activities refer to espionage, cyber-attack, or data breach. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communications&lt;/strong&gt; Data governance communications include all written, spoken, and electronic interactions with association audiences who need to know about the data governance team’s activities.  A communication plan encompasses objectives, goals, and tools for all communications and should be part of a governance program from the very beginning. The plan identifies how to present governance and stewardship challenges and successes to the various stakeholders and the rest of the organization. The communications plan highlights the right business cases and presents their results. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Socialization&lt;/strong&gt; Socialization of data governance is an important activity in any governance program. The data governance socialization plan is a plan that helps integrate data governance activities into an organization’s policies, internal culture, hierarchy, and processes. The plan is unique to the organization as it is tailored to its culture and standards of behavior. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Metrics/KPIs&lt;/strong&gt; Establishing business metrics and key performance indicators (KPIs) for monitoring and measuring the overall business impact of the data governance program is vital to the program’s success. The metrics and KPIs must be measurable, tracked over time, and consistently measured the same way every year. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Technology&lt;/strong&gt; The data governance program needs various technologies that make the process seamless and automated. Smaller data governance programs typically use the technology stack which they already have within their enterprise.  Meanwhile, larger data governance purchase software that is specific to data governance and the functions it requires. It simplifies the process of capturing the required metadata, management of the metadata, automating the data stewardship workflows, decision trees, collaboration, and many other data governance functions.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>datascience</category>
      <category>data</category>
      <category>architecture</category>
      <category>design</category>
    </item>
    <item>
      <title>Algorithm - Find Largest Upper Case Character when a same character in lower Case &amp; Upper Case occurs in a string</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Sat, 16 Jul 2022 07:04:45 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/algorithm-find-largest-upper-case-character-when-a-same-character-in-lower-case-upper-case-occurs-in-a-string-1p4e</link>
      <guid>https://dev.to/seekiansengeri1/algorithm-find-largest-upper-case-character-when-a-same-character-in-lower-case-upper-case-occurs-in-a-string-1p4e</guid>
      <description>&lt;p&gt;I encounter this in &lt;a href="https://app.codility.com/programmers/"&gt;Codility&lt;/a&gt;, so going to share my solution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;findBiggestAlphabet = function(S){
    console.log(`Processing..`, S)
    const char_arr = [...S];
    var max_char = "";
    for(var i=0; i&amp;lt;S.length-1;i++){
        var char = S[i];
        var char_c = char.toUpperCase()
        //console.log(`Processing ${char}`);
        var new_arr = char_arr.slice(i+1, char_arr.length);

        var exist_cap = new_arr.find(x=&amp;gt;x===char_c)? true: false;
        if (exist_cap){
            if (char_c&amp;gt;max_char){
                max_char = char_c;
            }
        }
    }
    if (max_char) return max_char;
    return "NO";
}

var A_1 = "aabcDBA";
var A_2 = "dabcDBA";
var A_3 = "abcde";
console.log(findBiggestAlphabet(A_1));
console.log(findBiggestAlphabet(A_2));
console.log(findBiggestAlphabet(A_3));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>algorithms</category>
      <category>programming</category>
      <category>codility</category>
    </item>
    <item>
      <title>Algorithm - How to derive Minimum Swap between 'a' or 'b' to break 3 consecutives same characters</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Sat, 16 Jul 2022 07:00:43 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/algorithm-how-to-derived-minimum-swap-between-a-b-to-break-3-consecutives-same-characters-3b8a</link>
      <guid>https://dev.to/seekiansengeri1/algorithm-how-to-derived-minimum-swap-between-a-b-to-break-3-consecutives-same-characters-3b8a</guid>
      <description>&lt;p&gt;I encounter this in &lt;a href="https://app.codility.com/programmers/"&gt;Codility&lt;/a&gt;, so going to share my solution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
findSwapCharacterCounts = function (S) {
    console.log(`Processing..`, S);
    var next = 0;
    while(next&amp;lt;S.length-1){
        var char = S[next]
        var next_char = S[next+1];
        if(next_char==char) {
           // console.log(`${char} same as ${next_char}`);
            if ((next_char == S[next+1]) &amp;amp;&amp;amp; (next_char === S[next+2])){

                var end_char = S[next+2];
                var swap_char = end_char==="a"?"b":"a";
              //  console.log(`index=${next+2}, swap_char=${swap_char}`);
                var new_str = "";
                for (var j=0; j&amp;lt;S.length;j++){               
                    if (j==next+2){
                        new_str+=swap_char;
                    } else {
                        new_str+=S[j];
                    }
                }
                return findSwapCharacterCounts(new_str)+1;
            }

        } else {
           // console.log(`${char} different ${next_char}`);
        }
        next++;
    }
    return 0;
}

var B_1 = "baaaaa";
var B_2 = "baaaaaa";
var B_3 = "ababababa";
var B_4 = "abbbaaab";
console.log(findSwapCharacterCounts(B_1));
console.log(findSwapCharacterCounts(B_2));
console.log(findSwapCharacterCounts(B_3));
console.log(findSwapCharacterCounts(B_4)); 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>codility</category>
      <category>algorithms</category>
      <category>programming</category>
    </item>
    <item>
      <title>Spark Use Cases</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Tue, 24 May 2022 01:19:58 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/spark-use-cases-1c5n</link>
      <guid>https://dev.to/seekiansengeri1/spark-use-cases-1c5n</guid>
      <description>&lt;p&gt;&lt;a href="https://www.qubole.com/blog/apache-spark-use-cases/"&gt;https://www.qubole.com/blog/apache-spark-use-cases/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bigdata</category>
      <category>python</category>
      <category>cep</category>
      <category>eventdriven</category>
    </item>
    <item>
      <title>Web3 Modern Architecture</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Thu, 12 May 2022 03:56:13 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/web3-modern-architecture-3m13</link>
      <guid>https://dev.to/seekiansengeri1/web3-modern-architecture-3m13</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xdHbBLoK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xzjsgy0q669yxw4adqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xdHbBLoK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xzjsgy0q669yxw4adqb.png" alt="Image description" width="880" height="749"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>dapp</category>
      <category>infura</category>
    </item>
    <item>
      <title>Blockchain Layers</title>
      <dc:creator>Eric See</dc:creator>
      <pubDate>Thu, 12 May 2022 01:02:29 +0000</pubDate>
      <link>https://dev.to/seekiansengeri1/blockchain-explained-40lp</link>
      <guid>https://dev.to/seekiansengeri1/blockchain-explained-40lp</guid>
      <description>&lt;p&gt;There are 4 layers in blockchains:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@nick.5montana/blockchain-layers-l0-l1-l2-l3-in-a-diagram-569162398db"&gt;https://medium.com/@nick.5montana/blockchain-layers-l0-l1-l2-l3-in-a-diagram-569162398db&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TAxe74NS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5t896f4cm173ihl63w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TAxe74NS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5t896f4cm173ihl63w2.png" alt="Image description" width="880" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 0:&lt;/strong&gt;&lt;br&gt;
The ground floor. This is where the internet, hardware, and connections exist that allow layer 1s like Bitcoin to run smoothly. Layer 0s are allowing several things to happen:&lt;/p&gt;

&lt;p&gt;1) Allow blockchains to interact with each other&lt;/p&gt;

&lt;p&gt;A great example is Cosmos, which creates an ecosystem of interoperable blockchains thanks to its ‘Tendermint IBC’ (Inter-blockchain communication protocol).&lt;br&gt;
For developers, this is massive. If a Dapp can function on one blockchain, it can function automatically on other blockchains so long as they’re built using the same layer 0. No need to invest more time and resources to build the same app on another chain.&lt;/p&gt;

&lt;p&gt;2) Faster and cheaper transactions&lt;/p&gt;

&lt;p&gt;With IBC, PoS consensus can be achieved across multiple chains resulting in finality times happening almost instantaneously (finality = when a block is approved, can’t be rolled back, and is considered irreversible). The result is faster and cheaper transactions on cross-chain exchanges.&lt;/p&gt;

&lt;p&gt;3) Infrastructure for developers&lt;/p&gt;

&lt;p&gt;Developers don’t need to start from scratch and build their blockchains from the ground up. Many features are pre-built and ready to be implemented immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1:&lt;/strong&gt;&lt;br&gt;
Layer 1s are blockchains (Bitcoin and Ethereum) that process and finalize transactions on their own blockchain. This is where things like consensus (PoW, PoS) and all the technical details like block time and dispute resolution take place.&lt;/p&gt;

&lt;p&gt;The most important three aspects of blockchains are conquering the blockchain trilemma: decentralization, security, and scalability. Still no single blockchain has nailed all three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2:&lt;/strong&gt;&lt;br&gt;
Layer 2s are third-party integrations used in conjunction with layer ones to increase scalability and transactions per second (system throughput).&lt;/p&gt;

&lt;p&gt;When you hear zero-knowledge rollups (zk rollups), side chains, or anything to do with speeding up transaction throughput, it’s likely layer 2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 3:&lt;/strong&gt;&lt;br&gt;
Layer 3 is the application layer. This is the UI that we as consumers actually interact with.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>programming</category>
      <category>opensource</category>
      <category>ethereum</category>
    </item>
  </channel>
</rss>
