<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3340707883401194037</id><updated>2026-07-24T23:21:33.726+05:30</updated><category term="linux-unix"/><category term="slackware-linux"/><category term="java"/><category term="algorithms"/><category term="android"/><category term="eclipse"/><category term="programming-algo"/><category term="software-engineering"/><category term="ubuntu"/><category term="c"/><category term="design-patterns"/><category term="git"/><category term="hardware"/><category term="how-to"/><category term="internals"/><category term="maths"/><category term="object-oriented-programming"/><category term="ssh"/><title type='text'>Althaf&#39;s Journal</title><subtitle type='html'>These are my notes and bookmarks, which I frequently reference online. Some of the content is my own, while other portions have been properly credited..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-1383016967029151514</id><published>2025-11-26T05:36:00.002+05:30</published><updated>2025-11-26T06:04:37.964+05:30</updated><title type='text'>Is Spring a full replacement for J2EE?</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring is not 100% a replacement for Java EE — but it replaces almost &lt;em&gt;all&lt;/em&gt; of Java EE’s painful parts and only relies on a few foundational Java EE/Jakarta EE APIs underneath.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Let’s break it down clearly.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;Is Spring a full replacement for J2EE?&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Practically YES (for most developers).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Technically NO (because Spring still uses a few underlying Java EE/Jakarta EE specs).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring was created &lt;em&gt;specifically&lt;/em&gt; to replace the heavyweight parts of J2EE such as:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;EJB (Enterprise JavaBeans)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;J2EE container-managed transactions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;J2EE security&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;J2EE messaging complexity&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;XML-heavy configuration&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Vendor-specific application servers&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring became the mainstream choice because it solves all those problems.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;What parts of J2EE does Spring replace?&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;J2EE Component&lt;/span&gt;&lt;/th&gt;
&lt;th&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring Replacement&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;EJB&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring Beans, &lt;code inline=&quot;&quot;&gt;@Service&lt;/code&gt;, &lt;code inline=&quot;&quot;&gt;@Transactional&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;JSP/JSF/Servlet MVC complexity&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring MVC (&lt;code inline=&quot;&quot;&gt;@RestController&lt;/code&gt;)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;JTA (complex transactions)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Simplified Spring Tx + declarative transactions&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;JMS API complexity&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring JMS abstractions&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Security&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring Security&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;JAX-RS&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring Web (REST controllers)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Application Server (JBoss, WebLogic)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Embedded Tomcat/Jetty with Spring Boot&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring basically eliminated the need for:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;EAR files&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;WAR deployment to app servers&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;EJB containers&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;JNDI hell&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;XML descriptors&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;What parts of J2EE/Jakarta EE does Spring still depend on?&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;This is important:&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;✔ Spring still uses &lt;strong&gt;Servlet API&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Even Spring MVC runs &lt;em&gt;inside&lt;/em&gt; the Java EE Servlet model:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;code inline=&quot;&quot;&gt;javax.servlet.*&lt;/code&gt; (Java EE era)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;code inline=&quot;&quot;&gt;jakarta.servlet.*&lt;/code&gt; (Jakarta EE era)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Servlet API provides:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Request/response handling&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Filters&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Dispatchers&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Underlying HTTP model&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring Boot bundles &lt;strong&gt;embedded Tomcat/Jetty&lt;/strong&gt; which implement this API.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;✔ Spring integrates with &lt;strong&gt;JPA API&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring Data JPA uses:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;code inline=&quot;&quot;&gt;jakarta.persistence.*&lt;/code&gt;&lt;br /&gt;
JPA is still a Java EE/Jakarta spec, implemented by Hibernate, EclipseLink, etc.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;✔ Spring integrates with &lt;strong&gt;JTA&lt;/strong&gt; (optional)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;If distributed transactions are needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;✔ Spring can use &lt;strong&gt;JMS API&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring JMS wraps JMS (Java Message Service).&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;Important distinction&lt;/span&gt;&lt;/h1&gt;
&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;Spring does NOT require a Java EE Application Server.&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Everything can run with:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Embedded Tomcat&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Jetty&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Undertow&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Netty (for WebFlux)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;This is why Spring revolutionized Java development.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring &lt;em&gt;depends on&lt;/em&gt; parts of Java EE specs (like Servlet &amp;amp; JPA API), but it &lt;strong&gt;does not depend on Java EE runtime containers&lt;/strong&gt; like:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;JBoss&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;WebSphere&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;WebLogic&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;GlassFish&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Instead, Spring Boot &lt;strong&gt;bundles only the needed pieces inside your JAR.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;span style=&quot;font-family: verdana; font-size: small;&quot;&gt;Analogy (very intuitive)&lt;/span&gt;&lt;/h1&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Java = The language&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;J2EE = A big enterprise machine with many heavy parts&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Spring = A modern toolkit that replaces 90% of that machine with lightweight tools&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana; font-size: small; font-weight: normal;&quot;&gt;Spring Boot = Spring + Auto-config + Built-in engine + Ready to drive&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/h3&gt;


&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring uses only a few base components of the old machine (Servlet, JPA specs), but otherwise runs independently.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;span style=&quot;font-family: verdana; font-size: small; font-weight: normal;&quot;&gt;Final Answer&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Spring is effectively a full replacement for J2EE application development.&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;It no longer depends on Java EE containers, but it still uses a few core Java EE (now Jakarta EE) APIs—such as Servlets, JPA, JMS—as building blocks.&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;So:&lt;br /&gt;
Spring replaces the J2EE programming model, not the underlying J2EE/Jakarta EE specifications.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/1383016967029151514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2025/11/is-spring-full-replacement-for-j2ee.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/1383016967029151514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/1383016967029151514'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2025/11/is-spring-full-replacement-for-j2ee.html' title='Is Spring a full replacement for J2EE?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-266196808407043270</id><published>2025-02-09T21:34:00.001+05:30</published><updated>2025-02-09T21:34:03.505+05:30</updated><title type='text'>What is WEB-INF folder in Java Enterprise Application ?</title><content type='html'>&lt;p&gt;The `WEB-INF` folder is a crucial directory in Java web applications, specifically in applications that follow the Java Servlet or Java EE (Jakarta EE) standards. It is a special folder located within the web application&#39;s root directory and is used to store configuration files, libraries, and other resources that are not directly accessible to clients (e.g., web browsers). Here&#39;s a detailed breakdown of its purpose and contents:&lt;/p&gt;&lt;p&gt;&lt;b&gt;Purpose of the WEB-INF Folder&lt;/b&gt;&lt;/p&gt;&lt;p&gt;1. Security:&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; The contents of the `WEB-INF` folder are not publicly accessible by clients. This ensures that sensitive files (e.g., configuration files, Java classes) cannot be accessed directly via a URL.&lt;/p&gt;&lt;p&gt;2. Organization:&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; It provides a standardized structure for organizing web application resources, making it easier to manage and deploy applications.&lt;/p&gt;&lt;p&gt;3. Deployment:&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; The `WEB-INF` folder is required for proper deployment of Java web applications. It contains essential files that the server (e.g., Apache Tomcat, Jetty) uses to configure and run the application.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Contents of the WEB-INF Folder&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The `WEB-INF` folder typically contains the following subdirectories and files:&lt;/p&gt;&lt;p&gt;1. `web.xml` (Deployment Descriptor):&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This is the most important file in the `WEB-INF` folder. It is an XML file that defines the configuration of the web application, including:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Servlet mappings.&lt;/li&gt;&lt;li&gt;Filters and listeners.&lt;/li&gt;&lt;li&gt;Context parameters.&lt;/li&gt;&lt;li&gt;Security constraints.&lt;/li&gt;&lt;li&gt;Welcome files.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- In modern applications (e.g., using Spring Boot), `web.xml` is often optional because configurations can be done using annotations or Java-based configuration.&lt;/p&gt;&lt;p&gt;2. `classes` Directory:&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;This directory contains compiled Java classes (`.class` files) for the application. These classes include:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Servlets.&lt;/li&gt;&lt;li&gt;Utility classes.&lt;/li&gt;&lt;li&gt;Any other application-specific Java code.&lt;/li&gt;&lt;li&gt;The structure of this directory mirrors the package structure of your Java classes.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;3. `lib` Directory:&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This directory contains JAR files (Java libraries) that the application depends on. These libraries are automatically included in the application&#39;s classpath by the server.&lt;/p&gt;&lt;p&gt;4. Other Configuration Files:&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Depending on the framework or tools you use, the `WEB-INF` folder may also contain additional configuration files, such as:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;`spring-config.xml` (for Spring Framework applications).&lt;/li&gt;&lt;li&gt;`faces-config.xml` (for JavaServer Faces applications).&lt;/li&gt;&lt;li&gt;&amp;nbsp;Custom configuration files for your application.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Structure of a Typical WEB-INF Folder&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Here’s an example of what the `WEB-INF` folder might look like in a Java web application:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiDFawudps2VmyhFKLeb6pTOa37DZSlGhWUbr1zJ7CpxKCAH9SgqqDyRc29wKjcs9vzmqzmvuODBDwblxGXWTisnntDef45hiHOMOkBCqEsI0Ce0xtMf6QkJETZHPjT7_ai3up1TlYmImCpSO0-9fTdBRE8xBm26wlWMqKQlMVFHFjtgzLC8zKnoQgJQvvm&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;378&quot; data-original-width=&quot;393&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiDFawudps2VmyhFKLeb6pTOa37DZSlGhWUbr1zJ7CpxKCAH9SgqqDyRc29wKjcs9vzmqzmvuODBDwblxGXWTisnntDef45hiHOMOkBCqEsI0Ce0xtMf6QkJETZHPjT7_ai3up1TlYmImCpSO0-9fTdBRE8xBm26wlWMqKQlMVFHFjtgzLC8zKnoQgJQvvm&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/266196808407043270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2025/02/what-is-web-inf-folder-in-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/266196808407043270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/266196808407043270'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2025/02/what-is-web-inf-folder-in-java.html' title='What is WEB-INF folder in Java Enterprise Application ?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiDFawudps2VmyhFKLeb6pTOa37DZSlGhWUbr1zJ7CpxKCAH9SgqqDyRc29wKjcs9vzmqzmvuODBDwblxGXWTisnntDef45hiHOMOkBCqEsI0Ce0xtMf6QkJETZHPjT7_ai3up1TlYmImCpSO0-9fTdBRE8xBm26wlWMqKQlMVFHFjtgzLC8zKnoQgJQvvm=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-5602994503906311701</id><published>2024-12-05T05:19:00.000+05:30</published><updated>2024-12-05T05:19:00.163+05:30</updated><title type='text'>Understanding LLMs from Scratch Using Middle School Math</title><content type='html'>&lt;p&gt;&lt;span style=&quot;color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 22px; letter-spacing: 0px;&quot;&gt;A self-contained, full explanation to inner workings of an LLM&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div class=&quot;speechify-ignore ab cp&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: space-between;&quot;&gt;&lt;div class=&quot;speechify-ignore bh l&quot; style=&quot;box-sizing: inherit; width: 680px;&quot;&gt;&lt;div class=&quot;ih ii ij ik il ab&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div class=&quot;ab im&quot; style=&quot;align-items: baseline; box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;1&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;1&quot; class=&quot;bm&quot; style=&quot;box-sizing: inherit; display: inline-block;&quot;&gt;&lt;a href=&quot;https://rohit-patel.medium.com/?source=post_page---byline--e602d27ec876--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit; text-decoration-line: none;&quot;&gt;&lt;div class=&quot;l in io by ip iq&quot; style=&quot;border-radius: 50%; border: 2px solid rgb(255, 255, 255); box-sizing: inherit; height: 48px; width: 48px; z-index: 0;&quot;&gt;&lt;div class=&quot;l fj&quot; style=&quot;box-sizing: inherit; position: relative;&quot;&gt;&lt;img alt=&quot;Rohit Patel&quot; class=&quot;l fd by dd de cx&quot; data-testid=&quot;authorPhoto&quot; height=&quot;44&quot; loading=&quot;lazy&quot; src=&quot;https://miro.medium.com/v2/resize:fill:55:55/1*ECmWr6Z-ToM5JE-h8ywyLQ.jpeg&quot; style=&quot;background-color: #f2f2f2; border-radius: 50%; box-sizing: border-box; display: block; height: 44px; vertical-align: middle; width: 44px;&quot; width=&quot;44&quot; /&gt;&lt;div class=&quot;ir by l dd de fs n is ft&quot; style=&quot;border-radius: 50%; border: 1px solid rgba(0, 0, 0, 0.05); box-shadow: none; box-sizing: inherit; height: 44px; position: absolute; top: 0px; width: 44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;it ab fj&quot; style=&quot;box-sizing: inherit; display: flex; margin-left: -12px; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;2&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;2&quot; class=&quot;bm&quot; style=&quot;box-sizing: inherit; display: inline-block;&quot;&gt;&lt;a href=&quot;https://towardsdatascience.com/?source=post_page---byline--e602d27ec876--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit; text-decoration-line: none;&quot;&gt;&lt;div class=&quot;l iu iv by ip iw&quot; style=&quot;border-radius: 50%; border: 2px solid rgb(255, 255, 255); box-sizing: inherit; height: 28px; width: 28px; z-index: 1;&quot;&gt;&lt;div class=&quot;l fj&quot; style=&quot;box-sizing: inherit; position: relative;&quot;&gt;&lt;img alt=&quot;Towards Data Science&quot; class=&quot;l fd by br ix cx&quot; data-testid=&quot;publicationPhoto&quot; height=&quot;24&quot; loading=&quot;lazy&quot; src=&quot;https://miro.medium.com/v2/resize:fill:30:30/1*CJe3891yB1A1mzMdqemkdg.jpeg&quot; style=&quot;background-color: #f2f2f2; border-radius: 50%; box-sizing: border-box; display: block; height: 24px; vertical-align: middle; width: 24px;&quot; width=&quot;24&quot; /&gt;&lt;div class=&quot;ir by l br ix fs n is ft&quot; style=&quot;border-radius: 50%; border: 1px solid rgba(0, 0, 0, 0.05); box-shadow: none; box-sizing: inherit; height: 24px; position: absolute; top: 0px; width: 24px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bn bh l&quot; style=&quot;box-sizing: inherit; margin-left: 12px; width: 604px;&quot;&gt;&lt;div class=&quot;ab&quot; style=&quot;box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; flex: 1 1 0%;&quot;&gt;&lt;span class=&quot;bf b bg z bk&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;&quot;&gt;&lt;div class=&quot;iy ab q&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex; margin-bottom: 2px;&quot;&gt;&lt;div class=&quot;ab q iz&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex; flex-wrap: nowrap;&quot;&gt;&lt;div class=&quot;ab q&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;3&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;3&quot; class=&quot;bm&quot; style=&quot;box-sizing: inherit; display: inline-block;&quot;&gt;&lt;p class=&quot;bf b ja jb bk&quot; style=&quot;box-sizing: inherit; font-size: 16px; line-height: 24px; margin: 0px;&quot;&gt;&lt;a class=&quot;af ag ah ai aj ak al am an ao ap aq ar jc&quot; data-testid=&quot;authorName&quot; href=&quot;https://rohit-patel.medium.com/?source=post_page---byline--e602d27ec876--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; border: inherit; box-sizing: inherit; cursor: pointer; fill: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; margin: 0px; padding: 0px; text-decoration-line: none;&quot;&gt;Rohit Patel&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;jd je&quot; style=&quot;box-sizing: inherit; display: inline; margin: 0px 8px;&quot;&gt;&lt;span class=&quot;bf b bg z du&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; line-height: 20px;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;p class=&quot;bf b ja jb du&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-size: 16px; line-height: 24px; margin: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit;&quot;&gt;&lt;a class=&quot;jf jg ah ai aj ak al am an ao ap aq ar ex jh ji&quot; href=&quot;https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F9934e7726dba&amp;amp;operation=register&amp;amp;redirect=https%3A%2F%2Ftowardsdatascience.com%2Funderstanding-llms-from-scratch-using-middle-school-math-e602d27ec876&amp;amp;user=Rohit+Patel&amp;amp;userId=9934e7726dba&amp;amp;source=post_page-9934e7726dba--byline--e602d27ec876---------------------post_header-----------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; border: inherit; box-sizing: inherit; color: #668aaa; cursor: pointer; fill: rgb(102, 138, 170); font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; margin: 0px; padding: 0px; text-decoration-line: none;&quot;&gt;Follow&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;l jj&quot; style=&quot;box-sizing: inherit; flex: 0 0 auto;&quot;&gt;&lt;span class=&quot;bf b bg z du&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;&quot;&gt;&lt;div class=&quot;ab cn jk jl jm&quot; style=&quot;align-items: flex-start; box-sizing: inherit; display: flex; flex-wrap: wrap;&quot;&gt;&lt;div class=&quot;jn jo ab&quot; style=&quot;box-sizing: inherit; display: flex;&quot;&gt;&lt;div class=&quot;bf b bg z du ab jp&quot; style=&quot;background-color: white; box-sizing: inherit; display: flex; line-height: 20px; white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;jq l jj&quot; style=&quot;box-sizing: inherit; display: block; flex: 0 0 auto; margin-right: 4px;&quot;&gt;Published in&lt;/span&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;4&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;4&quot; class=&quot;l&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;a class=&quot;af ag ah ai aj ak al am an ao ap aq ar jc ab q&quot; data-testid=&quot;publicationName&quot; href=&quot;https://towardsdatascience.com/?source=post_page---byline--e602d27ec876--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; align-items: center; border: inherit; box-sizing: inherit; cursor: pointer; display: flex; fill: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; margin: 0px; padding: 0px; text-decoration-line: none;&quot;&gt;&lt;p class=&quot;bf b bg z jr js jt ju jv jw jx jy bk&quot; style=&quot;-webkit-box-orient: vertical; -webkit-line-clamp: 1; box-sizing: inherit; color: #242424; display: -webkit-box; line-height: 20px; margin: 0px; max-height: 20px; overflow: hidden; text-overflow: ellipsis; word-break: break-all;&quot;&gt;Towards Data Science&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;background-color: white; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;In this article, we talk about how Large Language Models (LLMs) work, from scratch — assuming only that you know how to add and multiply two numbers. The article is meant to be fully self-contained. We start by building a simple Generative AI on pen and paper, and then walk through everything we need to have a firm understanding of modern LLMs and the Transformer architecture. The article will strip out all the fancy language and jargon in ML and represent everything simply as they are: numbers. We will still call out what things are called to tether your thoughts when you read jargon-y content.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;589f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Going from addition/multiplication to the most advanced AI models today without assuming other knowledge or referring to other sources means we cover a LOT of ground. This is NOT a toy LLM explanation — a determined person can theoretically recreate a modern LLM from all the information here. I have cut out every word/line that was unnecessary and as such this article isn’t really meant to be browsed.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1517&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;What will we cover?&lt;/h1&gt;&lt;ol class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;41e0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;A simple neural network&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aee1&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;How are these models trained?&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dd59&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;How does all this generate language?&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c7e7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;What makes LLMs work so well?&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e6d1&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Embeddings&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f750&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Sub-word tokenizers&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8cc3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Self-attention&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e098&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Softmax&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9e45&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Residual connections&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cbfb&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Layer Normalization&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b670&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Dropout&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4395&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Multi-head attention&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5552&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Positional embeddings&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a82d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;The GPT architecture&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b38b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;The transformer architecture&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;10a8&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s dive in.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;52af&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The first thing to note is that neural networks can only take numbers as inputs and can only output numbers. No exceptions. The art is in figuring out how to feed your inputs as numbers, interpreting the output numbers in a way that achieves your goals. And finally, building neural nets that will take the inputs you provide and give you the outputs you want (given the interpretation you chose for these outputs). Let’s walk through how we get from adding and multiplying numbers to things like&amp;nbsp;&lt;a class=&quot;af po&quot; href=&quot;https://ai.meta.com/blog/meta-llama-3-1/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Llama 3.1&lt;/a&gt;.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6597&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;A simple neural network:&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5ad8&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s work through a simple neural network that can classify an object:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7a30&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Object data available:&amp;nbsp;&lt;/span&gt;Dominant color (RGB) &amp;amp; Volume (in milli-liters)&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a91f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Classify into&lt;/span&gt;: Leaf OR Flower&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;caae&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Here’s what the data for a leaf and a sunflower can look like:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr ps&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 704px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ymWXxVf7N4-Ps-62Cih2XQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*ymWXxVf7N4-Ps-62Cih2XQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*ymWXxVf7N4-Ps-62Cih2XQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*ymWXxVf7N4-Ps-62Cih2XQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*ymWXxVf7N4-Ps-62Cih2XQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*ymWXxVf7N4-Ps-62Cih2XQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*ymWXxVf7N4-Ps-62Cih2XQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*ymWXxVf7N4-Ps-62Cih2XQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;309&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*ymWXxVf7N4-Ps-62Cih2XQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c19c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s now build a neural net that does this classification. We need to decide on input/output interpretations. Our inputs are already numbers, so we can feed them directly into the network. Our outputs are two objects, leaf and flower which the neural network cannot output. Let’s look at a couple of schemes we can use here:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ae7c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;We can make the network output a single number. And if the number is positive we say it’s a leaf and if it is negative we say it’s a flower&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;17b3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;OR, we can make the network output two numbers. We interpret the first one as a number for leaf and second one as the number for flower and we will say that the selection is whichever number is larger&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1d29&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Both schemes allow the network to output number(s) that we can interpret as leaf or flower. Let’s pick the second scheme here because it generalizes well to other things we will look at later. And here’s a neural network that does the classification using this scheme. Let’s work through it:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qi&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 811px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*9D2HQj6EBw0NC4c7YU0bWg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*9D2HQj6EBw0NC4c7YU0bWg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*9D2HQj6EBw0NC4c7YU0bWg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*9D2HQj6EBw0NC4c7YU0bWg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*9D2HQj6EBw0NC4c7YU0bWg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*9D2HQj6EBw0NC4c7YU0bWg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*9D2HQj6EBw0NC4c7YU0bWg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*9D2HQj6EBw0NC4c7YU0bWg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;404&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*9D2HQj6EBw0NC4c7YU0bWg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1a31&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Some jargon:&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2d6d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Neurons/nodes&lt;/em&gt;&lt;/span&gt;: The numbers in the circles&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f073&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Weights&lt;/em&gt;&lt;/span&gt;: The colored numbers on the lines&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f2da&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Layers&lt;/em&gt;&lt;/span&gt;: A collection of neurons is called a layer. You could think of this network as having 3 layers: Input layer with 4 neurons, Middle layer with 3 neurons, and the Output layer with 2 neurons.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a15c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;To calculate the prediction/output from this network (called a “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;forward pass&lt;/span&gt;”), you start from the left. We have the data available for the neurons in the Input layer. To move “forward” to the next layer, you multiply the number in the circle with the weight for the corresponding neuron pairing and you add them all up. We demonstrate blue and orange circle math above. Running the whole network we see that the first number in the output layer comes out higher so we interpret it as “network classified these (RGB,Vol) values as leaf”. A well trained network can take various inputs for (RGB,Vol) and correctly classify the object.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;57a7&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The model has no notion of what a leaf or a flower is, or what (RGB,Vol) are. It has a job of taking in exactly 4 numbers and giving out exactly 2 numbers. It is our interpretation that the 4 input numbers are (RGB,Vol) and it is also our decision to look at the output numbers and infer that if the first number is larger it’s a leaf and so on. And finally, it is also up to us to choose the right weights such that the model will take our input numbers and give us the right two numbers such that when we interpret them we get the interpretation we want.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;897a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;An interesting side effect of this is that you can take the same network and instead of feeding RGB,Vol feed other 4 numbers like cloud cover, humidity etc.. and interpret the two numbers as “Sunny in an hour” or “Rainy in an hour” and then if you have the weights well calibrated you can get the exact same network to do two things at the same time — classify leaf/flower and predict rain in an hour! The network just gives you two numbers, whether you interpret it as classification or prediction or something else is entirely up to you.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9994&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Stuff left out for simplification (feel free to ignore without compromising comprehensibility):&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6eab&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Activation layer&lt;/span&gt;: A critical thing missing from this network is an “activation layer”. That’s a fancy word for saying that we take the number in each circle and apply a nonlinear function to it (&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;RELU&lt;/span&gt;&amp;nbsp;is a common function where you just take the number and set it to zero if it is negative, and leave it unchanged if it is positive). So basically in our case above, we would take the middle layer and replace the two numbers (-26.6 and -47.1) with zeros before we proceed further to the next layer. Of course, we would have to re-train the weights here to make the network useful again. Without the activation layer all the additions and multiplications in the network can be collapsed to a single layer. In our case, you could write the green circle as the sum of RGB directly with some weights and you would not need the middle layer. It would be something like (0.10 * -0.17 + 0.12 * 0.39–0.36 * 0.1) * R + (-0.29 * -0.17–0.05 * 0.39–0.21 * 0.1) * G …and so on. This is usually not possible if we have a nonlinearity there. This helps networks deal with more complex situations.&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ad49&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;mark class=&quot;xd xe ao&quot; style=&quot;background-color: #e9f2fd; box-sizing: inherit; cursor: pointer;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Bias:&amp;nbsp;&lt;/span&gt;&lt;/mark&gt;&lt;mark class=&quot;xd xe ao&quot; style=&quot;background-color: #e9f2fd; box-sizing: inherit; cursor: pointer;&quot;&gt;Networks will usually also contain another number associated with each node, this number is simply added to the product to calculate the value of the node and this number is called the “bias”&lt;/mark&gt;. So if the bias for the top blue node was 0.25 then the value in the node would be: (32 * 0.10) + (107 * -0.29) + (56 * -0.07) + (11.2 * 0.46)&amp;nbsp;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;+ 0.25&amp;nbsp;&lt;/span&gt;= — 26.35. The word parameters is usually used to refer to all these numbers in the model that are not neurons/nodes.&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e137&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Softmax:&amp;nbsp;&lt;/span&gt;We don’t usually interpret the output layer directly as shown in our models. We convert the numbers into probabilities (i.e. make it so that all numbers are positive and add up to 1). If all the numbers in the output layer were already positive one way you could achieve this is by dividing each number by the sum of all numbers in the output layer. Though a “softmax” function is normally used which can handle both positive and negative numbers.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;63f2&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;How are these models trained?&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c3b7&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;In the example above, we magically had the weights that allowed us to put data into the model and get a good output. But how are these weights determined? The process of setting these weights (or “parameters”) is called “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;training the model&lt;/span&gt;”, and we need some training data to train the model.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b869&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s say we have some data where we have the inputs and we already know if each input corresponds to leaf or flower, this is our “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;training data&lt;/span&gt;” and since we have the leaf/flower label for each set of (R,G,B,Vol) numbers, this is “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;labeled data&lt;/span&gt;”.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;954b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Here’s how it works:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7ee7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Start with a random numbers, i.e. set each parameter/weight to a random number&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9283&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Now, we know that when we input the data corresponding to the leaf (R=32, G=107, B=56, Vol=11.2). Suppose we want a larger number for leaf in the output layer. Let’s say we want the number corresponding to leaf as 0.8 and the one corresponding to flower as 0.2 (as shown in example above, but these are illustrative numbers to demonstrate training, in reality we would not want 0.8 and 0.2. In reality these would be probabilities, which they are not here, and we would them to be 1 and 0)&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f422&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;We know the numbers we want in the output layer, and the numbers we are getting from the randomly selected parameters (which are different from what we want). So for all the neurons in the output layer, let’s take the difference between the number we want and the number we have. Then add up the differences. E.g., if the output layer is 0.6 and 0.4 in the two neurons, then we get: (0.8–0.6)=0.2 and (0.2–0.4)= -0.2 so we get a total of 0.4 (ignoring minus signs before adding). We can call this our “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;loss&lt;/span&gt;”. Ideally we want the loss to be close to zero, i.e. we want to “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;minimize the loss&lt;/span&gt;”.&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;998f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Once we have the loss, we can slightly change each parameter to see if increasing or decreasing it will increase the loss. This is called the “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;gradient&lt;/span&gt;” of that parameter. Then we can move each of the parameters by a small amount in the direction where the loss goes down (opposite the direction of the gradient). Once we have moved all the parameters slightly, the loss should be lower&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1d04&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Keep repeating the process and you will reduce the loss, and eventually have a set of weights/parameters that are “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;trained&lt;/span&gt;”. This whole process is called “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;gradient descent&lt;/span&gt;”.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5bc5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Couple of notes:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c31f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;You often have multiple training examples, so when you change the weights slightly to minimize the loss for one example it might make the loss worse for another example. The way to deal with this is to define loss as average loss over all the examples and then take gradient over that average loss. This reduces the average loss over the entire training data set. Each such cycle is called an “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;epoch&lt;/span&gt;”. Then you can keep repeating the epochs thus finding weights that reduce average loss.&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;37fa&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;We don’t actually need to “move weights around” to calculate the gradient for each weight — we can just infer it from the formula (e.g. if the weight is 0.17 in the last step, and the value of neuron is positive, and we want a larger number in output we can see that increasing this number to 0.18 will help).&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;60ea&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In practice, training deep networks is a hard and complex process because gradients can easily spiral out of control, going to zero or infinity during training (called “vanishing gradient” and “exploding gradient” problems). The simple definition of loss that we talked about here is perfectly valid, but rarely used as there are better functional forms that work well for specific purposes. With modern models containing billions of parameters, training a model requires massive compute resources which has its own problems (memory limitations, parallelization etc.)&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1180&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;How does all this help generate language?&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9f09&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Remember, neural nets take in some numbers, do some math based on the trained parameters, and give out some other numbers. Everything is about interpretation and training the parameters (i.e. setting them to some numbers). If we can interpret the two numbers as “leaf/flower” or “rain or sun in an hour”, we can also interpret them as “next character in a sentence”.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7882&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;But there are more than 2 letters in English, and so we must expand the number of neurons in the output layer to, say, the 26 letters in the English language (let’s also throw in some symbols like space, period etc..). Each neuron can correspond to a character and we look at the (26 or so) neurons in the output layer and say that the character corresponding to the highest numbered neuron in the output layer is the output character. Now we have a network that can take some inputs and output a character.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b713&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;What if we replace the input in our network with these characters: “Humpty Dumpt” and asked it to output a character and interpreted it as the “Network’s suggestion of the next character in the sequence that we just entered”. We can probably set the weights well enough for it to output “y” — thereby completing “Humpty Dumpty”. Except for one problem, how do we input these lists of characters in the network? Our network only accepts numbers!!&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c77d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One simple solution is to assign a number to each character. Let’s say a=1, b=2 and so on. Now we can input “humpty dumpt” and train it to give us “y”. Our network looks something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qk&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 825px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*XPyJ-V0vbPv6EDwFpk7KYQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;510&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*XPyJ-V0vbPv6EDwFpk7KYQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;93b1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Ok, so now we can predict one character ahead by providing the network a list of characters. We can use this fact to build a whole sentence. For example, once we have the “y” predicted, we can append that “y” to the list of characters we have and feed it to the network and ask it to predict the next character. And if well trained it should give us a space, and so on and so forth. By the end, we should be able to recursively generate “Humpty Dumpty sat on a wall”. We have Generative AI. Moreover,&amp;nbsp;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;we now have a network capable of generating language!&lt;/em&gt;&lt;/span&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/em&gt;Now, nobody ever actually puts in randomly assigned numbers and we will see more sensible schemes down the line. If you cannot wait, feel free to check out the one-hot encoding section in the appendix.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8b19&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Astute readers will note that we can’t actually input “Humpty Dumpty” into the network since the way the diagram is, it only has 12 neurons in the input layer one for each character in “humpty dumpt” (including the space). So how can we put in the “y” for the next pass. Putting a 13th neuron there would require us to modify the entire network, that’s not workable. The solution is simple, let’s kick the “h” out and send the 12 most recent characters. So we would be sending “umpty dumpty” and the network will predict a space. Then we would input “mpty dumpty “ and it will produce an s and so on. It looks something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr ql&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1143px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*0_tSCfEAL9NIK8U95Q-6Vg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*0_tSCfEAL9NIK8U95Q-6Vg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*0_tSCfEAL9NIK8U95Q-6Vg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*0_tSCfEAL9NIK8U95Q-6Vg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*0_tSCfEAL9NIK8U95Q-6Vg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*0_tSCfEAL9NIK8U95Q-6Vg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*0_tSCfEAL9NIK8U95Q-6Vg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*0_tSCfEAL9NIK8U95Q-6Vg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;345&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*0_tSCfEAL9NIK8U95Q-6Vg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6c1a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;We’re throwing away a lot of information in the last line by feeding the model only “ sat on the wal”. So what do the latest and greatest networks of today do? More or less exactly that. The length of inputs we can put into a network is fixed (determined by the size of the input layer). This is called “context length” — the context that is provided to the network to make future predictions. Modern networks can have very large context lengths (several thousand words) and that helps. There are some ways of inputting infinite length sequences but the performance of those methods, while impressive, has since been surpassed by other models with large (but fixed) context length.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4023&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One other thing careful readers will notice is that we have different interpretations for inputs and outputs for the same letters! For example, when inputting “h” we are simply denoting it with the number 8 but on the output layer we are not asking the model to output a single number (8 for “h”, 9 for “i” and so on..) instead we are are asking the model to output 26 numbers and then we see which one is the highest and then if the 8th number is highest we interpret the output as “h”. Why don’t we use the same, consistent, interpretation on both ends? We could, it’s just that in the case of language, freeing yourself to choose between different interpretations gives you a better chance of building better models. And it just so happens that the most effective currently known interpretations for the input and output are different. In-fact, the way we are inputting numbers in this model is not the best way to do it, we will look at better ways to do that shortly.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;67a1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;What makes large language models work so well?&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8a55&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Generating “Humpty Dumpty sat on a wall” character-by-character is a far cry from what modern LLMs can do. There are a number of differences and innovations that get us from the simple generative AI that we discussed above to the human-like bot. Let’s go through them:&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cc17&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Embeddings&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d7f6&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Remember we said that the way that we are inputting characters into the model isn’t the best way to do it. We just arbitrarily selected a number for each character. What if there were better numbers we could assign that would make it possible for us to train better networks? How do we find these better numbers? Here’s a clever trick:&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;df0b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;When we trained the models above, the way we did it was by moving around weights and seeing that gives us a smaller loss in the end. And then slowly and recursively changing the weights. At each turn we would:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;67a2&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Feed in the inputs&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5042&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Calculate the output layer&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;605e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Compare it to the output we ideally want and calculate the average loss&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1629&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Adjust the weights and start again&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6202&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In this process, the inputs are fixed. This made sense when inputs were (RGB, Vol). But the numbers we are putting in now for a,b,c etc.. are arbitrarily picked by us. What if at every iteration in addition to moving the weights around by a bit we also moved the input around and see if we can get a lower loss by using a different number to represent “a” and so on? We are definitely reducing the loss and making the model better (that’s the direction we moved a’s input in, by design). Basically, apply gradient descent not just to the weights but also the number representations for the inputs since they are arbitrarily picked numbers anyway. This is called an “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;embedding&lt;/span&gt;”. It is a mapping of inputs to numbers, and as you just saw, it needs to be trained. The process of training an embedding is much like that of training a parameter. One big advantage of this though is that once you train an embedding you can use it in another model if you wish. Keep in mind that you will consistently use the same embedding to represent a single token/character/word.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;95f4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;We talked about embeddings that are just one number per character. However, in reality embeddings have more than one number. That’s because it is hard to capture the richness of concept by a single number. If we look at our leaf and flower example, we have four numbers for each object (the size of the input layer). Each of these four numbers conveyed a property and the model was able to use all of them to effectively guess the object. If we had only one number, say the red channel of the color, it might have been a lot harder for the model. We’re trying to capture human language here — we’re going to need more than one number.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;029a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;So instead of representing each character by a single number, maybe we can represent it by multiple numbers to capture the richness? Let’s assign a bunch of numbers to each character. Let’s call an ordered collection of numbers a “vector” (ordered as in each number has a position, and if we swap position of two numbers it gives us a different vector. This was the case with our leaf/flower data, if we swapped the R and G numbers for the leaf, we would get a different color, it would not be the same vector anymore). The length of a vector is simply how many numbers it contains. We’ll assign a vector to each character. Two questions arise:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fd7b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;If we have a vector assigned to each character instead of a number, how do we now feed “humpty dumpt” to the network? The answer is simple. Let’s say we assigned a vector of 10 numbers to each character. Then instead of the input layer having 12 neurons we would just put 120 neurons there since each of the 12 characters in “humpty dumpt” has 10 numbers to input. Now we just put the neurons next to each other and we are good to go&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;59c2&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;How do we find these vectors? Thankfully, we just learned how to train embedding numbers. Training an embedding vector is no different. You now have 120 inputs instead of 12 but all you are doing is moving them around to see how you can minimize loss. And then you take the first 10 of those and that’s the vector corresponding to “h” and so on.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;68b4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;All the embedding vectors must of course be the same length, otherwise we would not have a way of entering all the character combinations into the network. E.g. “humpty dumpt” and in the next iteration “umpty dumpty” — in both cases we are entering 12 characters in the network and if each of the 12 characters was not represented by vectors of length 10 we won’t be able to reliably feed them all into a 120-long input layer. Let’s visualize these embedding vectors:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pq pr qm&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 421px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 421px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 1100w, https://miro.medium.com/v2/resize:fit:842/format:webp/1*lZOR8fNDEWHxUhLCSB-67A.png 842w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 421px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*lZOR8fNDEWHxUhLCSB-67A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*lZOR8fNDEWHxUhLCSB-67A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*lZOR8fNDEWHxUhLCSB-67A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*lZOR8fNDEWHxUhLCSB-67A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*lZOR8fNDEWHxUhLCSB-67A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*lZOR8fNDEWHxUhLCSB-67A.png 1100w, https://miro.medium.com/v2/resize:fit:842/1*lZOR8fNDEWHxUhLCSB-67A.png 842w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;327&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:526/1*lZOR8fNDEWHxUhLCSB-67A.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 421px;&quot; width=&quot;421&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d656&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s call an ordered collection of same-sized vectors a matrix. This matrix above is called an&amp;nbsp;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;embedding matrix&lt;/span&gt;. You tell it a column number corresponding to your letter and looking at that column in the matrix will give you the vector that you are using to represent that letter. This can be applied more generally for embedding any arbitrary collection of things — you would just need to have as many columns in this matrix as the things you have.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d866&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Subword Tokenizers&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a1e0&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;So far, we have been working with characters as the basic building blocks of language. This has its limitations. The neural network weights have to do a lot of the heavy lifting where they must make sense of certain sequences of characters (i.e. words) appearing next to each other and then next to other words. What if we directly assigned embeddings to words and made the network predict the next word. The network doesn’t understand anything more than numbers anyway, so we can assign a 10-length vector to each of the words “humpty”, “dumpty”, “sat”, “on” etc.. and then we just feed it two words and it can give us the next word. “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Token&lt;/span&gt;” is the term for a single unit that we embed and then feed to the model. Our models so far were using characters as tokens, now we are proposing to use entire words as a token (you can of course use entire sentences or phrases as tokens if you like).&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9776&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Using word tokenization has one profound effect on our model. There are more than 180K words in the English language. Using our output interpretation scheme of having a neuron per possible output we need hundreds of thousands of neurons in the output layer insead of the 26 or so. With the size of the hidden layers needed to achieve meaningful results for modern networks, this issue becomes less pressing. What is however worth noting is that since we are treating each word separately, and we are starting with a random number embeddings for each — very similar words (e.g. “cat” and “cats”) will start with no relationship. You would expect that embeddings for the two words should be close to each other — which undoubtedly the model will learn. But, can we somehow use this obvious similarity to get a jumpstart and simplify matters?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;32e1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Yes we can. The most common embedding scheme in language models today is something where you break words down into subwords and then embed them. In the cat example, we would break down cats into two tokens “cat” and ”s”. Now it is easier for the model to understand the concept of “s” followed by other familiar words and so on. This also reduces the number of tokens we need (&lt;a class=&quot;af po&quot; href=&quot;https://github.com/google/sentencepiece&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;sentencpiece&lt;/a&gt;&amp;nbsp;is a common tokenizer with vocab size options in tens of thousands vs hundreds of thousands of words in english). A tokenizer is something that takes you input text (e.g. “Humpty Dumpt”) and splits it into the tokens and gives you the corresponding numbers that you need to look up the embedding vector for that token in the embedding matrix. For example, in case of “humpty dumpty” if we’re using character level tokenizer and we arranged our embedding matrix as in the picture above, then the tokenizer will first split humpty dumpt into characters [‘h’,’u’,…’t’] and then give you back the numbers [8,21,…20] because you need to look up the 8th column of the embedding matrix to get the embedding vector for ‘h’ (embedding vector is what you will feed into the model, not the number 8, unlike before). The arrangement of the columns in the matrix is completely irrelevant, we could assign any column to ‘h’ and as long as we look up the same vector every time we input ‘h’ we should be good. Tokenizers just give us an arbitrary (but fixed) number to make lookup easy. The main task we need them for really is splitting the sentence in tokens.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ba2e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;With embeddings and subword tokenization, a model could look something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qn&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1152px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*VGNZ1Zighiek1sAMdiZCaw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*VGNZ1Zighiek1sAMdiZCaw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*VGNZ1Zighiek1sAMdiZCaw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*VGNZ1Zighiek1sAMdiZCaw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*VGNZ1Zighiek1sAMdiZCaw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*VGNZ1Zighiek1sAMdiZCaw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*VGNZ1Zighiek1sAMdiZCaw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*VGNZ1Zighiek1sAMdiZCaw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;421&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*VGNZ1Zighiek1sAMdiZCaw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a94b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The next few sections deal with more recent advances in language modeling, and the ones that made LLMs as powerful as they are today. However, to understand these there are a few basic math concepts you need to know. Here are the concepts:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;135a&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Matrices and matrix multiplication&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1798&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;General concept of functions in mathematics&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;16d7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Raising numbers to powers (e.g. a3 = a*a*a)&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a3f8&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Sample mean, variance, and standard deviation&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bbd6&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;I have added summaries of these concepts in the appendix.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4c48&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Self Attention&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1251&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;So far we have seen only one simple neural network structure (called feedforward network), one which contains a number of layers and each layer is fully connected to the next (i.e., there is a line connecting any two neurons in consecutive layers), and it is only connected to the next layer (e.g. no lines between layer 1 and layer 3 etc..). However, as you can imagine there is nothing stopping us from removing or making other connections. Or even making more complex structures. Let’s explore a particularly important structure: self-attention.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2740&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;If you look at the structure of human language, the next word that we want to predict will depend on all the words before. However, they may depend on some words before them to a greater degree than others. For example, if we are trying to predict the next word in “Damian had a secret child, a girl, and he had written in his will that all his belongings, along with the magical orb, will belong to ____”. This word here could be “her” or “him” and it depends specifically on a much earlier word in the sentence:&amp;nbsp;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;girl/boy&lt;/em&gt;.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;04fe&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The good news is, our simple feedforward model connects to all the words in the context, and so it can learn the appropriate weights for important words, But here’s the problem, the weights connecting specific positions in our model through feed forward layers are fixed (for every position). If the important word was always in the same position, it would learn the weights appropriately and we would be fine. However, the relevant word to the next prediction could be anywhere in the system. We could paraphrase that sentence above and when guessing “her vs his”, one very important word for this prediction would be boy/girl no matter where it appeared in that sentence. So, we need weights that depend not only on the position but also on the content in that position. How do we achieve this?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9fef&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Self attention does something like adding up the embedding vectors for each of the words, but instead of directly adding them up it applies some weights to each. So if the embedding vectors for humpty,dumpty, sat are x1, x2, x3 respectively, then it will multiply each one with a weight (a number) before adding them up. Something like output = 0.5 x1 + 0.25 x2 + 0.25 x3 where output is the self-attention output. If we write the weights as u1, u2, u3 such that output = u1x1+u2x2+u3x3 then how do we find these weights u1, u2, u3?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1f47&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Ideally, we want these weights to be dependent on the vector we are adding — as we saw some may be more important than others. But important to whom? To the word we are about to predict. So we also want the weights to depend on the word we are about to predict. Now that’s an issue, we of course don’t know the word we are about to predict before we predict it. So, self attention uses the word immediately preceding the word we are about to predict, i.e., the last word in the sentence available (I don’t really know why this and why not something else, but a lot of things in deep learning are trial and error and I suspect this works well).&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c864&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Great, so we want weights for these vectors, and we want each weight to depend on the word that we are aggregating and word immediately preceding the one we are going to predict. Basically, we want a function u1 = F(x1, x3) where x1 is the word we will weight and x3 is the last word in the sequence we have (assuming we have only 3 words). Now, a straightforward way of achieving this is to have a vector for x1 (let’s call it k1) and a separate vector for x3 (let’s call it q3) and then simply take their dot product. This will give us a number and it will depend on both x1 and x3. How do we get these vectors k1 and q3? We build a tiny single layer neural network to go from x1 to k1 (or x2 to k2, x3 to k3 and so on). And we build another network going from x3 to q3 etc… Using our matrix notation, we basically come up with weight matrices Wk and Wq such that k1 = Wkx1 and q1 =Wqx1 and so on. Now we can take a dot product of k1 and q3 to get a scalar, so u1 = F(x1,x3) = Wkx1&amp;nbsp;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;·&lt;/span&gt;&amp;nbsp;Wqx3.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dcd4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One additional thing that happens in self-attention is that we don’t directly take the weighted sum of the embedding vectors themselves. Instead, we take the weighted sum of some “value” of that embedding vector, which is obtained by another small single layer network. What this means is similar to k1 and q1, we also now have a v1 for the word x1 and we obtain it through a matrix Wv such that v1=Wvx1. This v1 is then aggregated. So it all looks something like this if we only have 3 words and we are trying to predict the fourth:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qo&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1201px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*7AJIjt5fiRhpc0h1qJKt3g.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*7AJIjt5fiRhpc0h1qJKt3g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*7AJIjt5fiRhpc0h1qJKt3g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*7AJIjt5fiRhpc0h1qJKt3g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*7AJIjt5fiRhpc0h1qJKt3g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*7AJIjt5fiRhpc0h1qJKt3g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*7AJIjt5fiRhpc0h1qJKt3g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*7AJIjt5fiRhpc0h1qJKt3g.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;422&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*7AJIjt5fiRhpc0h1qJKt3g.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Self attention. Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8e66&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The plus sign represents a simple addition of the vectors, implying they have to have the same length. One last modification not shown here is that the scalars u1, u2, u3 etc.. won’t necessarily add up to 1. If we need them to be weights, we should make them add up. So we will apply a familiar trick here and use the softmax function.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c500&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;This is self-attention. There is also cross-attention where you can have the q3 come from the last word, but the k’s and the v’s can come from another sentence altogether. This is for example valuable in translation tasks. Now we know what attention is.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;33b0&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;This whole thing can now be put in a box and be called a “self attention block”. Basically, this self attention block takes in the embedding vectors and spits out a single output vector of any user-chosen length. This block has three parameters, Wk,Wq,Wv — it doesn’t need to be more complicated than that. There are many such blocks in the machine learning literature, and they are usually represented by boxes in diagrams with their name on it. Something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qp&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1031px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*OgcRxWyftIXN8WbQw_-QKg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*OgcRxWyftIXN8WbQw_-QKg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*OgcRxWyftIXN8WbQw_-QKg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*OgcRxWyftIXN8WbQw_-QKg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*OgcRxWyftIXN8WbQw_-QKg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*OgcRxWyftIXN8WbQw_-QKg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*OgcRxWyftIXN8WbQw_-QKg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*OgcRxWyftIXN8WbQw_-QKg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;451&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*OgcRxWyftIXN8WbQw_-QKg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aa88&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One of the things that you will notice with self-attention is that the position of things so far does not seem relevant. We are using the same W’s across the board and so switching Humpty and Dumpty won’t really make a difference here — all numbers will end up being the same. This means that while attention can figure out what to pay attention to, this won’t depend on word position. However, we do know that word positions are important in english and we can probably improve performance by giving the model some sense of a word’s position.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4e30&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;And so, when attention is used, we don’t often feed the embedding vectors directly to the self attention block. We will later see how “positional encoding” is added to embedding vectors before feeding to attention blocks.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;844c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Note for the pre-initiated&lt;/em&gt;: Those for whom this isn’t the first time reading about self-attention will note that we are not referencing any K and Q matrices, or applying masks etc.. That is because those things are implementation details arising out of how these models are commonly trained. A batch of data is fed and the model is simultaneously trained to predict dumpty from humpty, sat from humpty dumpty and so on. This is a matter of gaining efficiency and does not affect interpretation or even model outputs, and we have chosen to omit training efficiency hacks here.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9abc&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Softmax&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7362&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We talked briefly about softmax in the very first note. Here’s the problem softmax is trying to solve: In our output interpretation we have as many neurons as the options from which we want the network to select one. And we said that we are going to interpret the network’s choice as the highest value neuron. Then we said we are going to calculate loss as the difference between the value that network provides, and an ideal value we want. But what’s that ideal value we want? We set it to 0.8 in the leaf/flower example. But why 0.8? Why no 5, or 10, or 10 million? The higher the better for that training example. Ideally we want infinity there! Now that would make the problem intractable — all loss would be infinite and our plan of minimizing loss by moving around parameters (remember “gradient descent”) fails. How do we deal with this?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c21f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One simple thing we can do is cap the values we want. Let’s say between 0 and 1? This would make all loss finite, but now we have the issue of what happens when the network overshoots. Let’s say it outputs (5,1) for (leaf,flower) in one case, and (0,1) in another. The first case made the right choice but the loss is worse! Ok, so now we need a way to also convert the outputs of the last layer in (0,1) range so that it preserves the order. We could use any function (a “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;function&lt;/span&gt;” in mathematics is simply a mapping of one number to another — in goes one number, out comes another — it’s rule based in terms of what will be output for a given input) here to get the job done. One possible option is the logistic function (see graph below) which maps all numbers to numbers between (0,1) and preserves the order:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qq&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 837px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jSyo_owKB-tfTrPXV2giKg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*jSyo_owKB-tfTrPXV2giKg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*jSyo_owKB-tfTrPXV2giKg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*jSyo_owKB-tfTrPXV2giKg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*jSyo_owKB-tfTrPXV2giKg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*jSyo_owKB-tfTrPXV2giKg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*jSyo_owKB-tfTrPXV2giKg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*jSyo_owKB-tfTrPXV2giKg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;451&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*jSyo_owKB-tfTrPXV2giKg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5039&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now, we have a number between 0 and 1 for each of the neurons in the last layer and we can calculate loss by setting the correct neuron to 1, others to 0 and taking the difference of that from what the network provides us. This will work, but can we do better?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5154&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Going back to our “Humpty dumpty” example, let’s say we are trying to generate dumpty character-by-character and our model makes a mistake when predicting “m” in dumpty. Instead of giving us the last layer with “m” as the highest value, it gives us “u” as the highest value but “m” is a close second.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;73ef&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now we can continue with “duu” and try to predict next character and so on, but the model confidence will be low because there are not that many good continuations from “humpty duu..”. On the other hand, “m” was a close second, so we can also give “m” a shot, predict the next few characters, and see what happens? Maybe it gives us a better overall word?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;89f4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;So what we are talking about here is not just blindly selecting the max value, but trying a few. What’s a good way to do it? Well we have to assign a chance to each one — say we will pick the top one with 50%, second one with 25% and so on. That’s a good way to do it. But maybe we would want the chance to be dependent on the underlying model predictions. If the model predicts values for m and u to be really close to each other here (compared to other values) — then maybe a close 50–50 chance of exploring the two is a good idea?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0b71&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;So we need a nice rule that takes all these numbers and converts them into chances. That’s what softmax does. It is a generalization of the logistic function above but with additional features. If you give it 10 arbitrary numbers — it will give you 10 outputs, each between 0 and 1 and importantly, all 10 adding up to 1 so that we can interpret them as chance. You will find softmax as the last layer in nearly every language model.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b3f3&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Residual connections&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cb3e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We have slowly changed our visualization of networks as the sections progress. We are now using boxes/blocks to denote certain concepts. This notation is useful in denoting a particularly useful concept of residual connections. Let’s look at residual connection combined with a self-attention block:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qr&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1330px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*270MXDfslVtvmBjShHL2hQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*270MXDfslVtvmBjShHL2hQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*270MXDfslVtvmBjShHL2hQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*270MXDfslVtvmBjShHL2hQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*270MXDfslVtvmBjShHL2hQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*270MXDfslVtvmBjShHL2hQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*270MXDfslVtvmBjShHL2hQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*270MXDfslVtvmBjShHL2hQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;309&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*270MXDfslVtvmBjShHL2hQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;A residual connection. Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e9ef&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Note that we put “Input” and “Output” as boxes to make things simpler, but these are still basically just a collection of neurons/numbers same as shown above.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dd17&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;So what’s going on here? We are basically taking the output of self-attention block and before passing it to the next block, we are adding to it the original Input. First thing to note is that this would require that the dimensions of the self-attention block output must now be the same as that of the input. This is not a problem since as we noted the self-attention output is determined by the user. But why do this? We won’t get into all the details here but the key thing is that as networks get deeper (more layers between input and output) it gets increasingly harder to train them. Residual connections have been shown to help with these training challenges.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c6f6&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Layer Normalization&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3901&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Layer normalization is a fairly simple layer that takes the data coming into the layer and normalizes it by subtracting the mean and dividing it by standard deviation (maybe a bit more, as we see below). For example, if we were to apply layer normalization immediately after the input, it would take all the neurons in the input layer and then it would calculate two statistics: their mean and their standard deviation. Let’s say the mean is M and the standard deviation is D then what layer norm is doing is taking each of these neurons and replacing it with (x-M)/D where x denotes any given neuron’s original value.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fad4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now how does this help? It basically stabilizes the input vector and helps with training deep networks. One concern is that by normalizing inputs, are we removing some useful information from them that may be helpful in learning something valuable about our goal? To address this, the layer norm layer has a scale and a bias parameter. Basically, for each neuron you just multiply it with a scalar and then add a bias to it. These scalar and bias values are parameters that can be trained. This allows the network to learn some of the variation that may be valuable to the predictions. And since these are the only parameters, the LayerNorm block doesn’t have a lot of parameters to train. The whole thing looks something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qs&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 927px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*145xBeyaNCU3mblFQyi2_A.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*145xBeyaNCU3mblFQyi2_A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*145xBeyaNCU3mblFQyi2_A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*145xBeyaNCU3mblFQyi2_A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*145xBeyaNCU3mblFQyi2_A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*145xBeyaNCU3mblFQyi2_A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*145xBeyaNCU3mblFQyi2_A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*145xBeyaNCU3mblFQyi2_A.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;497&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*145xBeyaNCU3mblFQyi2_A.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Layer Normalization. Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b37c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The Scale and Bias are trainable parameters. You can see that layer norm is a relatively simple block where each number is only operated on pointwise (after the initial mean and std calculation). Reminds us of the activation layer (e.g. RELU) with the key difference being that here we have some trainable parameters (albeit lot fewer than other layers because of the simple pointwise operation).&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6643&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Standard deviation is a statistical measure of how spread out the values are, e.g., if the values are all the same you would say the standard deviation is zero. If, in general, each value is really far from the mean of these very same values, then you will have a high standard deviation. The formula to calculate standard deviation for a set of numbers, a1, a2, a3…. (say N numbers) goes something like this: subtract the mean (of these numbers) from each of the numbers, then square the answer for each of N numbers. Add up all these numbers and then divide by N. Now take a square root of the answer.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e27c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Note for the pre-initiated: Experienced ML professionals will note that there is no discussion of batch norm here. In-fact, we haven’t even introduced the concept of batches in this article at all. For the most part, I believe batches are another training accelerant not related to the understanding of core concepts (except perhaps batch norm which we do not need here).&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1bdc&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Dropout&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;abd4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Dropout is a simple but effective method to avoid model overfitting. Overfitting is a term for when you train the model on your training data, and it works well on that dataset but does not generalize well to the examples the model has not seen. Techniques that help us avoid overfitting are called “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;regularization techniques&lt;/span&gt;”, and dropout is one of them.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;41e9&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;If you train a model, it might make errors on the data and/or overfit it in a particular way. If you train another model, it might do the same, but in a different way. What if you trained a number of these models and averaged the outputs? These are typically called “&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;ensemble&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;nl gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;models&lt;/span&gt;” because they predict the outputs by combining outputs from an ensemble of models, and ensemble models generally perform better than any of the individual models.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6447&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In neural networks, you could do the same. You could build multiple (slightly different) models and then combine their outputs to get a better model. However, this can be computationally expensive. Dropout is a technique that doesn’t quite build ensemble models but does capture some of the essence of the concept.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4d5e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The concept is simple, by inserting a dropout layer during training what you are doing is randomly deleting a certain percentage of the direct neuron connections between the layers that dropout is inserted. Considering our initial network and inserting a Dropout layer between the input and the middle layer with 50% dropout rate can look something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qt&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 771px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*j0oKuXvH7kfrIpIfXE03VA.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*j0oKuXvH7kfrIpIfXE03VA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*j0oKuXvH7kfrIpIfXE03VA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*j0oKuXvH7kfrIpIfXE03VA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*j0oKuXvH7kfrIpIfXE03VA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*j0oKuXvH7kfrIpIfXE03VA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*j0oKuXvH7kfrIpIfXE03VA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*j0oKuXvH7kfrIpIfXE03VA.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;335&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*j0oKuXvH7kfrIpIfXE03VA.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qu&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1178px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*UodvtsDn5z73Cp578XOoVw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*UodvtsDn5z73Cp578XOoVw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*UodvtsDn5z73Cp578XOoVw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*UodvtsDn5z73Cp578XOoVw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*UodvtsDn5z73Cp578XOoVw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*UodvtsDn5z73Cp578XOoVw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*UodvtsDn5z73Cp578XOoVw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*UodvtsDn5z73Cp578XOoVw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;177&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*UodvtsDn5z73Cp578XOoVw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qv&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 770px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*qHPSwQmV3sfvKT5pG4TEJw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*qHPSwQmV3sfvKT5pG4TEJw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*qHPSwQmV3sfvKT5pG4TEJw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*qHPSwQmV3sfvKT5pG4TEJw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*qHPSwQmV3sfvKT5pG4TEJw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*qHPSwQmV3sfvKT5pG4TEJw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*qHPSwQmV3sfvKT5pG4TEJw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*qHPSwQmV3sfvKT5pG4TEJw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;340&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*qHPSwQmV3sfvKT5pG4TEJw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8f33&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now, this forces the network to train with a lot of redundancy. Essentially, you are training a number of different models at the same time — but they share weights.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;53db&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now for making inferences, we could follow the same approach as an ensemble model. We could make multiple predictions using dropouts and then combine them. However, since that is computationally intensive — and since our models share common weights — why don’t we just do a prediction using all the weights (so instead of using 50% of the weights at a time we use all at the same time). This should give us some approximation of what an ensemble will provide.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ad03&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One issue though: the model trained with 50% of the weights will have very different numbers in the middle neurons than one using all the weights. What we want is more ensemble style averaging here. How do we do this? Well, a simple way is to simply take all the weights and multiply them by 0.5 since we are now using twice as many weights. This is what Droput does during inference. It will use the full network with all the weights and simply multiply the weights with (1- p) where p is the deletion probability. And this has been shown to work rather well as a regularization technique.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ab63&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Multi-head Attention&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b4a5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;This is the key block in the transformer architecture. We’ve already seen what an attention block is. Remember that the output of an attention block was determined by the user and it was the length of v’s. What a multi-attention head is basically you run several attention heads in parallel (they all take the same inputs). Then we take all their outputs and simply concatenate them. It looks something like this:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qw&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1270px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*BmZd8SIDEQu7r5_R7y54kQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*BmZd8SIDEQu7r5_R7y54kQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*BmZd8SIDEQu7r5_R7y54kQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*BmZd8SIDEQu7r5_R7y54kQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*BmZd8SIDEQu7r5_R7y54kQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*BmZd8SIDEQu7r5_R7y54kQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*BmZd8SIDEQu7r5_R7y54kQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*BmZd8SIDEQu7r5_R7y54kQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;373&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*BmZd8SIDEQu7r5_R7y54kQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Multi-head attention. Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;612b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Keep in mind the arrows going from v1 -&amp;gt; v1h1 are linear layers — there’s a matrix on each arrow that transforms. I just did not show them to avoid clutter.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f015&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;What is going on here is that we are generating the same key, query and values for each of the heads. But then we are basically applying a linear transformation on top of that (separately to each k,q,v and separately for each head) before we use those k,q,v values. This extra layer did not exist in self attention.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a7c5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;A side note is that to me, this is a slightly surprising way of creating a multi-headed attention. For example, why not create separate Wk,Wq,Wv matrices for each of the heads rather than adding a new layer and sharing these weights. Let me know if you know — I really have no idea.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;13ac&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Positional encoding and embedding&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;44a3&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We briefly talked about the motivation for using positional encoding in the self-attention section. What are these? While the picture shows positional encoding, using a positional embedding is more common than using an encoding. As such we talk about a common positional embedding here but the appendix also covers positional encoding used in the original paper. A positional embedding is no different than any other embedding except that instead of embedding the word vocabulary we will embed numbers 1, 2, 3 etc. So this embedding is a matrix of the same length as word embedding, and each column corresponds to a number. That’s really all there is to it.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b665&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;The GPT architecture&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;44bb&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s talk about the GPT architecture. This is what is used in most GPT models (with variation across). If you have been following the article thus far, this should be fairly trivial to understand. Using the box notation, this is what the architecture looks like at high level:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qx&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1137px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*U9mQKCWiyakNVwxU 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*U9mQKCWiyakNVwxU 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*U9mQKCWiyakNVwxU 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*U9mQKCWiyakNVwxU 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*U9mQKCWiyakNVwxU 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*U9mQKCWiyakNVwxU 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*U9mQKCWiyakNVwxU 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*U9mQKCWiyakNVwxU 640w, https://miro.medium.com/v2/resize:fit:720/0*U9mQKCWiyakNVwxU 720w, https://miro.medium.com/v2/resize:fit:750/0*U9mQKCWiyakNVwxU 750w, https://miro.medium.com/v2/resize:fit:786/0*U9mQKCWiyakNVwxU 786w, https://miro.medium.com/v2/resize:fit:828/0*U9mQKCWiyakNVwxU 828w, https://miro.medium.com/v2/resize:fit:1100/0*U9mQKCWiyakNVwxU 1100w, https://miro.medium.com/v2/resize:fit:1400/0*U9mQKCWiyakNVwxU 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;212&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/0*U9mQKCWiyakNVwxU&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;The GPT Architecture. Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b563&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;At this point, other than the “GPT Transformer Block” all the other blocks have been discussed in great detail. The + sign here simply means that the two vectors are added together (which means the two embeddings must be the same size). Let’s look at this GPT Transformer Block:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qy&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1122px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Mq4hBZcKPL9GALPSSQG9Xg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*Mq4hBZcKPL9GALPSSQG9Xg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Mq4hBZcKPL9GALPSSQG9Xg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Mq4hBZcKPL9GALPSSQG9Xg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Mq4hBZcKPL9GALPSSQG9Xg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Mq4hBZcKPL9GALPSSQG9Xg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Mq4hBZcKPL9GALPSSQG9Xg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*Mq4hBZcKPL9GALPSSQG9Xg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;303&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*Mq4hBZcKPL9GALPSSQG9Xg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a803&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;And that’s pretty much it. It is called “transformer” here because it is derived from and is a type of transformer — which is an architecture we will look at in the next section. This doesn’t affect understanding as we’ve already covered all the building blocks shown here before. Let’s recap everything we’ve covered so far building up to this GPT architecture:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c697&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;We saw how neural nets take numbers and output other numbers and have weights as parameters which can be trained&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5635&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;We can attach interpretations to these input/output numbers and give real world meaning to a neural network&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d30b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;We can chain neural networks to create bigger ones, and we can call each one a “block” and denote it with a box to make diagrams easier. Each block still does the same thing, take in a bunch of numbers and output other bunch of numbers&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b314&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;We learned a lot of different types of blocks that serve different purposes&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;709e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;GPT is just a special arrangement of these blocks that is shown above with an interpretation that we discussed in Part 1&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c56d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Modifications have been made over time to this as companies have built up to powerful modern LLMs, but the basic remains the same.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e3fd&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now, this GPT transformer is actually what is called a “decoder” in the original transformer paper that introduced the transformer architecture. Let’s take a look at that.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c3ab&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;The transformer architecture&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cabd&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;This is one of the key innovations driving rapid acceleration in the capabilities of language models recently. Transformers not only improved the prediction accuracy, they are also easier/more efficient than previous models (to train), allowing for larger model sizes. This is what the GPT architecture above is based on.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;30eb&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;If you look at GPT architecture, you can see that it is great for generating the next word in the sequence. It fundamentally follows the same logic we discussed in Part 1. Start with a few words and then continue generating one at a time. But, what if you wanted to do translation. What if you had a sentence in german (e.g. “Wo wohnst du?” = “Where do you live?”) and you wanted to translate it to english. How would we train the model to do this?&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a788&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Well, first thing we would need to do is figure out a way to input german words. Which means we have to expand our embedding to include both german and english. Now, I guess here is a simply way of inputting the information. Why don’t we just concatenate the german sentence at the beginning of whatever so far generated english is and feed it to the context. To make it easier for the model, we can add a separator. This would look something like this at each step:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr qz&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1082px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*psIz3-v2dMfI3SMsFQjRPQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*psIz3-v2dMfI3SMsFQjRPQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*psIz3-v2dMfI3SMsFQjRPQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*psIz3-v2dMfI3SMsFQjRPQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*psIz3-v2dMfI3SMsFQjRPQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*psIz3-v2dMfI3SMsFQjRPQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*psIz3-v2dMfI3SMsFQjRPQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*psIz3-v2dMfI3SMsFQjRPQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;160&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*psIz3-v2dMfI3SMsFQjRPQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6413&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;This will work, but it has room for improvement:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ec40&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;If the context length is fixed, sometimes the original sentence is lost&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8edb&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;The model has a lot to learn here. Two languages simultaneously, but also to know that &amp;lt;SEP&amp;gt; is the separator token where it needs to start translating&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4991&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;You are processing the entire german sentence, with different offsets, for each word generation. This means there will be different internal representations of the same thing and the model should be able to work through it all for translation&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f111&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Transformer was originally created for this task and consists of an “encoder” and a “decoder” — which are basically two separate blocks. One block simply takes the german sentence and gives out an intermediate representation (again, bunch of numbers, basically) — this is called the encoder.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a91b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The second block generates words (we’ve seen a lot of this so far). The only difference is that in addition to feeding it the words generated so far we also feed it the encoded german (from the encoder block) sentence. So as it is generating language, it’s context is basically all the words generated so far, plus the german. This block is called the decoder.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fc88&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Each of these encoders and decoders consist of a few blocks, notably the attention block sandwiched between other layers. Let’s look at the illustration of a transformer from the paper “Attention is all you need” and try to understand it:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pq pr ra&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 683px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 683px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 1100w, https://miro.medium.com/v2/resize:fit:1366/format:webp/1*uPwJ24na4D_ECHBv1Lg5Fg.png 1366w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 683px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*uPwJ24na4D_ECHBv1Lg5Fg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*uPwJ24na4D_ECHBv1Lg5Fg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*uPwJ24na4D_ECHBv1Lg5Fg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*uPwJ24na4D_ECHBv1Lg5Fg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*uPwJ24na4D_ECHBv1Lg5Fg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*uPwJ24na4D_ECHBv1Lg5Fg.png 1100w, https://miro.medium.com/v2/resize:fit:1366/1*uPwJ24na4D_ECHBv1Lg5Fg.png 1366w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;998&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:854/1*uPwJ24na4D_ECHBv1Lg5Fg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;683&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image from Vaswani et al. (2017)&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e9f0&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The vertical set of blocks on the left is called the “encoder” and the ones to the right is called the “decoder”. Let’s go over and understand anything that we have not already covered before:&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;760b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Recap on how to read the diagram:&amp;nbsp;&lt;/em&gt;Each of the boxes here is a block that takes in some inputs in the form of neurons, and spits out a set of neurons as output that can then either be processed by the next block or interpreted by us. The arrows show where the output of a block is going. As you can see, we will often take the output of one block and feed it in as input into multiple blocks. Let’s go through each thing here:&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c986&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Feed forward: A feedforward network is one that does not contain cycles. Our original network in section 1 is a feed forward. In-fact, this block uses very much the same structure. It contains two linear layers, each followed by a RELU (see note on RELU in first section) and a dropout layer. Keep in mind that this feedforward neetwork applies to each position independently. What this means is that the information on position 0 has a feedforward network, and on position 1 has one and so on.. But the neurons from position x do not have a linkage to the feedforward network of position y. This is important because if we did not do this, it would allow the network to cheat during training time by looking forward.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9210&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Cross-attention:&amp;nbsp;&lt;/em&gt;You will notice that the decoder has a multi-head attention with arrows coming from the encoder. What is going on here? Remember the value, key, query in self-attention and multi-head attention? They all came from the same sequence. The query was just from the last word of the sequence in-fact. So what if we kept the query but fetched the value and key from a completely different sequence altogether? That is what is happening here. The value and key come from the output of the encoder. Nothing has changed mathematically except where the inputs for key and value are coming from now.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e4fe&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Nx&lt;/em&gt;: The Nx here simply represents that this block is chain-repeated N times. So basically you are stacking the block back-to-back and passing the input from the previous block to the next one. This is a way to make the neural network deeper. Now, looking at the diagram there is room for confusion about how the encoder output is fed to the decoder. Let’s say N=5. Do we feed the output of each encoder layer to the corresponding decoder layer? No. Basically you run the encoder all the way through once and only once. Then you just take that representation and feed the same thing to every one of the 5 decoder layers.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;60fc&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;qj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Add &amp;amp; Norm block&lt;/em&gt;: This is basically the same as below (guess the authors were just trying to save space)&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pq pr rb&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 681px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 681px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*sXvYIassJutgqw5W 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*sXvYIassJutgqw5W 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*sXvYIassJutgqw5W 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*sXvYIassJutgqw5W 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*sXvYIassJutgqw5W 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*sXvYIassJutgqw5W 1100w, https://miro.medium.com/v2/resize:fit:1362/format:webp/0*sXvYIassJutgqw5W 1362w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 681px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*sXvYIassJutgqw5W 640w, https://miro.medium.com/v2/resize:fit:720/0*sXvYIassJutgqw5W 720w, https://miro.medium.com/v2/resize:fit:750/0*sXvYIassJutgqw5W 750w, https://miro.medium.com/v2/resize:fit:786/0*sXvYIassJutgqw5W 786w, https://miro.medium.com/v2/resize:fit:828/0*sXvYIassJutgqw5W 828w, https://miro.medium.com/v2/resize:fit:1100/0*sXvYIassJutgqw5W 1100w, https://miro.medium.com/v2/resize:fit:1362/0*sXvYIassJutgqw5W 1362w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;645&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:851/0*sXvYIassJutgqw5W&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;681&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0331&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Everything else has already been discussed. Now you have a complete explanation of the transformer architecture building up from simple sum and product operations and fully self contained! You know what every line, every sum, every box and word means in terms of how to build them from scratch. Theoretically, these notes contain what you need to code up the transformer from scratch. In-fact, if you are interested&amp;nbsp;&lt;a class=&quot;af po&quot; href=&quot;https://github.com/karpathy/nanoGPT&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;this repo&lt;/a&gt;&amp;nbsp;does that for the GPT architecture above.&lt;/p&gt;&lt;h1 class=&quot;of og gu bf oh oi oj hu ok ol om hx on oo op oq or os ot ou ov ow ox oy oz pa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;585d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Appendix&lt;/h1&gt;&lt;h2 class=&quot;rc og gu bf oh rd re dy ok rf rg ea on ns rh ri rj nw rk rl rm oa rn ro rp rq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d935&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Matrix Multiplication&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8b03&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We introduced vectors and matrices above in the context of embeddings. A matrix has two dimensions (number or rows and columns). A vector can also be thought of as a matrix where one of the dimensions equals one. Product of two matrices is defined as:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pz qa fj qb bh qc&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;pq pr rr&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1304px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*woel5Da5Z22EmiGx 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*woel5Da5Z22EmiGx 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*woel5Da5Z22EmiGx 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*woel5Da5Z22EmiGx 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*woel5Da5Z22EmiGx 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*woel5Da5Z22EmiGx 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*woel5Da5Z22EmiGx 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*woel5Da5Z22EmiGx 640w, https://miro.medium.com/v2/resize:fit:720/0*woel5Da5Z22EmiGx 720w, https://miro.medium.com/v2/resize:fit:750/0*woel5Da5Z22EmiGx 750w, https://miro.medium.com/v2/resize:fit:786/0*woel5Da5Z22EmiGx 786w, https://miro.medium.com/v2/resize:fit:828/0*woel5Da5Z22EmiGx 828w, https://miro.medium.com/v2/resize:fit:1100/0*woel5Da5Z22EmiGx 1100w, https://miro.medium.com/v2/resize:fit:1400/0*woel5Da5Z22EmiGx 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;83&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/0*woel5Da5Z22EmiGx&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;54b9&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Dots represent multiplication. Now let’s take a second look at the calculation of blue and organic neurons in the very first picture. If we write the weights as a matrix and the inputs as vectors, we can write the whole operation in the following way:&lt;/p&gt;&lt;figure class=&quot;pt pu pv pw px py pq pr paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;pq pr rs&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 466px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 466px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*yn1TPuxw_QqnD93k 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*yn1TPuxw_QqnD93k 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*yn1TPuxw_QqnD93k 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*yn1TPuxw_QqnD93k 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*yn1TPuxw_QqnD93k 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*yn1TPuxw_QqnD93k 1100w, https://miro.medium.com/v2/resize:fit:932/format:webp/0*yn1TPuxw_QqnD93k 932w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 466px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*yn1TPuxw_QqnD93k 640w, https://miro.medium.com/v2/resize:fit:720/0*yn1TPuxw_QqnD93k 720w, https://miro.medium.com/v2/resize:fit:750/0*yn1TPuxw_QqnD93k 750w, https://miro.medium.com/v2/resize:fit:786/0*yn1TPuxw_QqnD93k 786w, https://miro.medium.com/v2/resize:fit:828/0*yn1TPuxw_QqnD93k 828w, https://miro.medium.com/v2/resize:fit:1100/0*yn1TPuxw_QqnD93k 1100w, https://miro.medium.com/v2/resize:fit:932/0*yn1TPuxw_QqnD93k 932w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh mq qd c&quot; height=&quot;102&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:583/0*yn1TPuxw_QqnD93k&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 466px;&quot; width=&quot;466&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;figcaption class=&quot;qe ff qf pq pr qg qh bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Image by author&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4df7&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;If the weight matrix is called “W” and the inputs are called “x” then Wx is the result (the middle layer in this case). We can also transpose the two and write it as xW — this is a matter of preference.&lt;/p&gt;&lt;h2 class=&quot;rc og gu bf oh rd re dy ok rf rg ea on ns rh ri rj nw rk rl rm oa rn ro rp rq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a07f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Standard deviation&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2eac&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We use the concept of standard deviation in the Layer Normalization section. Standard deviation is a statistical measure of how spread out the values are (in a set of numbers), e.g., if the values are all the same you would say the standard deviation is zero. If, in general, each value is really far from the mean of these very same values, then you will have a high standard deviation. The formula to calculate standard deviation for a set of numbers, a1, a2, a3…. (say N numbers) goes something like this: subtract the mean (of these numbers) from each of the numbers, then square the answer for each of N numbers. Add up all these numbers and then divide by N. Now take a square root of the answer.&lt;/p&gt;&lt;h2 class=&quot;rc og gu bf oh rd re dy ok rf rg ea on ns rh ri rj nw rk rl rm oa rn ro rp rq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6936&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Positional Encoding&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs pb nn no hv pc nq nr ns pd nu nv nw pe ny nz oa pf oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ab73&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We talked about positional embedding above. A positional encoding is simply a vector of the same length as the word embedding vector, except it is not an embedding in the sense that it is not trained. We simply assign a unique vector to every position e.g. a different vector for position 1 and different one for position 2 and so on. A simple way of doing this is to make the vector for that position simply full of the position number. So the vector for position 1 would be [1,1,1…1] for 2 would be [2,2,2…2] and so on (remember length of each vector must match embedding length for addition to work). This is problematic because we can end up with large numbers in vectors which creates challenges during training. We can, of course, normalize these vectors by dividing every number by the max of position, so if there are 3 words total then position 1 is [.33,.33,..,.33] and 2 is [.67, .67, ..,.67] and so on. This has the problem now that we are constantly changing the encoding for position 1 (those numbers will be different when we feed 4 word sentence as input) and it creates challenges for the network to learn. So here, we want a scheme that allocates a unique vector to each position, and the numbers don’t explode. Basically if the context length is d (i.e., maximum number of tokens/words that we can feed into the network for predicting next token/word, see discussion in “how does it all generate language?” section) and if the length of the embedding vector is 10 (say), then we need a matrix with 10 rows and d columns where all the columns are unique and all the numbers lie between 0 and 1. Given that there are infinitely many numbers between zero and 1, and the matrix is finitely sized, this can be done in many ways.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7d1f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The approach used in the “Attention is all you need” paper goes something like this:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3414&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Draw 10 sin curves each being si(p) = sin (p/10000(i/d)) (that’s 10k to power i/d)&lt;/li&gt;&lt;li class=&quot;nj nk gu nl b hs pj nn no hv pk nq nr ns pl nu nv nw pm ny nz oa pn oc od oe pp ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;821f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Fill the encoding matrix with numbers such that (i,p)th number is si(p), e.g., for position 1 the 5th element of the encoding vector is s5(1)=sin (1/10000(5/d))&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nj nk gu nl b hs nm nn no hv np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;598a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Why choose this method? By changing the power on 10k you are changing the amplitude of the sine function when viewed on the p-axis. And if you have 10 different sine functions with 10 different amplitudes, then it will be a long time before you get a repetition (i.e. all 10 values are the same) for changing values of p. And this helps give us unique values. Now, the actual paper uses both sine and cosine functions and the form of encoding is: si(p) = sin (p/10000(i/d)) if i is even and si(p) = cos(p/10000(i/d)) if i is odd.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/5602994503906311701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2024/12/understanding-llms-from-scratch-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/5602994503906311701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/5602994503906311701'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2024/12/understanding-llms-from-scratch-using.html' title='Understanding LLMs from Scratch Using Middle School Math'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-3117152103011668478</id><published>2024-12-05T05:08:00.004+05:30</published><updated>2024-12-05T05:11:12.990+05:30</updated><title type='text'>Everything you need to know about Design Systems</title><content type='html'>&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div class=&quot;ab ia&quot; style=&quot;align-items: baseline; box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;1&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;1&quot; class=&quot;bm&quot; style=&quot;box-sizing: inherit; display: inline-block;&quot;&gt;&lt;a href=&quot;https://audreyhacq.medium.com/?source=post_page---byline--54b109851969--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit; text-decoration-line: none;&quot;&gt;&lt;div class=&quot;l ib ic by id ie&quot; style=&quot;border-radius: 50%; border: 2px solid rgb(255, 255, 255); box-sizing: inherit; height: 48px; width: 48px; z-index: 0;&quot;&gt;&lt;div class=&quot;l fj&quot; style=&quot;box-sizing: inherit; position: relative;&quot;&gt;&lt;img alt=&quot;Audrey Hacq&quot; class=&quot;l fd by dd de cx&quot; data-testid=&quot;authorPhoto&quot; height=&quot;44&quot; loading=&quot;lazy&quot; src=&quot;https://miro.medium.com/v2/resize:fill:55:55/0*geIfMVXr31AXmuFT.jpg&quot; style=&quot;background-color: #f2f2f2; border-radius: 50%; box-sizing: border-box; display: block; height: 44px; vertical-align: middle; width: 44px;&quot; width=&quot;44&quot; /&gt;&lt;div class=&quot;if by l dd de fs n ig ft&quot; style=&quot;border-radius: 50%; border: 1px solid rgba(0, 0, 0, 0.05); box-shadow: none; box-sizing: inherit; height: 44px; position: absolute; top: 0px; width: 44px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ih ab fj&quot; style=&quot;box-sizing: inherit; display: flex; margin-left: -12px; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;2&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;2&quot; class=&quot;bm&quot; style=&quot;box-sizing: inherit; display: inline-block;&quot;&gt;&lt;a href=&quot;https://uxdesign.cc/?source=post_page---byline--54b109851969--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit; text-decoration-line: none;&quot;&gt;&lt;div class=&quot;l ii ij by id ik&quot; style=&quot;border-radius: 50%; border: 2px solid rgb(255, 255, 255); box-sizing: inherit; height: 28px; width: 28px; z-index: 1;&quot;&gt;&lt;div class=&quot;l fj&quot; style=&quot;box-sizing: inherit; position: relative;&quot;&gt;&lt;img alt=&quot;UX Collective&quot; class=&quot;l fd by br il cx&quot; data-testid=&quot;publicationPhoto&quot; height=&quot;24&quot; loading=&quot;lazy&quot; src=&quot;https://miro.medium.com/v2/resize:fill:30:30/1*mDhF9X4VO0rCrJvWFatyxg.png&quot; style=&quot;background-color: #f2f2f2; border-radius: 50%; box-sizing: border-box; display: block; height: 24px; vertical-align: middle; width: 24px;&quot; width=&quot;24&quot; /&gt;&lt;div class=&quot;if by l br il fs n ig ft&quot; style=&quot;border-radius: 50%; border: 1px solid rgba(0, 0, 0, 0.05); box-shadow: none; box-sizing: inherit; height: 24px; position: absolute; top: 0px; width: 24px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bn bh l&quot; style=&quot;box-sizing: inherit; margin-left: 12px; width: 604px;&quot;&gt;&lt;div class=&quot;ab&quot; style=&quot;box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; flex: 1 1 0%;&quot;&gt;&lt;span class=&quot;bf b bg z bk&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;&quot;&gt;&lt;div class=&quot;im ab q&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex; margin-bottom: 2px;&quot;&gt;&lt;div class=&quot;ab q in&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex; flex-wrap: nowrap;&quot;&gt;&lt;div class=&quot;ab q&quot; style=&quot;align-items: center; box-sizing: inherit; display: flex;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;3&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;3&quot; class=&quot;bm&quot; style=&quot;box-sizing: inherit; display: inline-block;&quot;&gt;&lt;p class=&quot;bf b io ip bk&quot; style=&quot;box-sizing: inherit; font-size: 16px; line-height: 24px; margin: 0px;&quot;&gt;&lt;a class=&quot;af ag ah ai aj ak al am an ao ap aq ar iq&quot; data-testid=&quot;authorName&quot; href=&quot;https://audreyhacq.medium.com/?source=post_page---byline--54b109851969--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; border: inherit; box-sizing: inherit; cursor: pointer; fill: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; margin: 0px; padding: 0px; text-decoration-line: none;&quot;&gt;Audrey Hacq&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;ir is&quot; style=&quot;box-sizing: inherit; display: inline; margin: 0px 8px;&quot;&gt;&lt;span class=&quot;bf b bg z du&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; line-height: 20px;&quot;&gt;·&lt;/span&gt;&lt;/span&gt;&lt;p class=&quot;bf b io ip du&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-size: 16px; line-height: 24px; margin: 0px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit;&quot;&gt;&lt;a class=&quot;it iu ah ai aj ak al am an ao ap aq ar ex iv iw&quot; href=&quot;https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2Fa174f7ac9f65&amp;amp;operation=register&amp;amp;redirect=https%3A%2F%2Fuxdesign.cc%2Feverything-you-need-to-know-about-design-systems-54b109851969&amp;amp;user=Audrey+Hacq&amp;amp;userId=a174f7ac9f65&amp;amp;source=post_page-a174f7ac9f65--byline--54b109851969---------------------post_header-----------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; border: inherit; box-sizing: inherit; color: #868484; cursor: pointer; fill: rgb(134, 132, 132); font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; margin: 0px; padding: 0px; text-decoration-line: none;&quot;&gt;Follow&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;l ix&quot; style=&quot;box-sizing: inherit; flex: 0 0 auto;&quot;&gt;&lt;span class=&quot;bf b bg z du&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;&quot;&gt;&lt;div class=&quot;ab cn iy iz ja&quot; style=&quot;align-items: flex-start; box-sizing: inherit; display: flex; flex-wrap: wrap;&quot;&gt;&lt;div class=&quot;jb jc ab&quot; style=&quot;box-sizing: inherit; display: flex;&quot;&gt;&lt;div class=&quot;bf b bg z du ab jd&quot; style=&quot;background-color: white; box-sizing: inherit; display: flex; line-height: 20px; white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;je l ix&quot; style=&quot;box-sizing: inherit; display: block; flex: 0 0 auto; margin-right: 4px;&quot;&gt;Published in&lt;/span&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;div aria-describedby=&quot;4&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;4&quot; class=&quot;l&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;a class=&quot;af ag ah ai aj ak al am an ao ap aq ar iq ab q&quot; data-testid=&quot;publicationName&quot; href=&quot;https://uxdesign.cc/?source=post_page---byline--54b109851969--------------------------------&quot; rel=&quot;noopener follow&quot; style=&quot;-webkit-tap-highlight-color: transparent; align-items: center; border: inherit; box-sizing: inherit; cursor: pointer; display: flex; fill: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; margin: 0px; padding: 0px; text-decoration-line: none;&quot;&gt;&lt;p class=&quot;bf b bg z jf jg jh ji jj jk jl jm bk&quot; style=&quot;-webkit-box-orient: vertical; -webkit-line-clamp: 1; box-sizing: inherit; color: #242424; display: -webkit-box; line-height: 20px; margin: 0px; max-height: 20px; overflow: hidden; text-overflow: ellipsis; word-break: break-all;&quot;&gt;UX Collective&lt;/p&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;374&quot; loading=&quot;eager&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*-Fcng9a7mZ01KEZNd0E51w.jpeg&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/p&gt;&lt;div class=&quot;gn go gp gq gr&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; overflow-wrap: break-word; word-break: break-word;&quot;&gt;&lt;div class=&quot;ab cb&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: center;&quot;&gt;&lt;div class=&quot;ci bh fz ga gb gc&quot; style=&quot;box-sizing: inherit; margin: 0px 24px; max-width: 680px; min-width: 0px; width: 680px;&quot;&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;663c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;→&amp;nbsp;&lt;/em&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://medium.com/@audreyhacq/tout-savoir-sur-les-syst%C3%A8mes-de-design-1b6400c9a1b3&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot;&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Pour la version en Français, c’est par ici&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8902&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Design Systems have become a key part of my everyday work… And from discussions around me, it seems that it is now the case for a lot of people ;)&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b767&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;After reading&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;http://designsystemsbook.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Alla Kholmatova’s book&lt;/a&gt;&amp;nbsp;last year, I was lucky to attend the&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;https://www.backelite.com/fr/2018/03/a-design-systems-conference/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;first European conference&lt;/a&gt;&amp;nbsp;on the subject in March. All of this strengthened my conviction that, in the future, every brand and every product will use a Design System, simple or comprehensive, strict or loose, mono or cross platforms…&lt;/p&gt;&lt;h1 class=&quot;ol om gu bf on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f5df&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;What is a Design System?&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4920&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;I keep hearing various definitions, so let me start by saying what a Design System isn’t: it is&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;http://bradfrost.com/blog/post/your-sketch-library-is-not-a-design-system/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;not a Sketch library&lt;/a&gt;, no more than a Style guide or a Pattern Library… Actually, it’s all of this and so much more!&lt;/p&gt;&lt;blockquote class=&quot;po&quot; style=&quot;box-sizing: inherit; margin: 0px; padding-left: 30px;&quot;&gt;&lt;p class=&quot;pp pq gu bf pr ps pt pu pv pw px oi du&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8c0b&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 28px; letter-spacing: -0.009em; line-height: 40px; margin: 1.75em 0px -0.46em;&quot;&gt;&lt;mark class=&quot;aci acj ao&quot; style=&quot;background-color: #f3f0ef; box-sizing: inherit; cursor: pointer;&quot;&gt;A Design System is the single source of truth which groups all the elements that will allow the teams to design, realize and develop a product.&lt;/mark&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;figure class=&quot;pz qa qb qc qd nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 66px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my py&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2866px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;677&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*vI3VLuqj0NPUjI6MX25RuQ.jpeg&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9991&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;So a Design System is not a deliverable, but a set of deliverables. It will evolve constantly with the product, the tools and the new technologies.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8eae&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;As Jina Anne describes perfectly in&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;https://vimeo.com/262958762&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;this conference&lt;/a&gt;, the System is composed of tangibles and non-tangibles elements :&lt;/p&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;be14&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Tools for designers &amp;amp; developers, patterns, components, guidelines…&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b4ba&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;But also -and it’s often the most difficult thing to achieve- some abstract elements such as brand values, shared ways of working, mindset, shared beliefs…&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e082&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Style Guide or Pattern Library: what’s the difference?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8018&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;As it should be clear for you now, the Style guide and the Pattern Library are just some of the deliverables of a Design System.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;503f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;A&amp;nbsp;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Style Guide&lt;/span&gt;&amp;nbsp;-as indicated by its name- will focus on graphic styles (colours, fonts, illustrations…) and their usage.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;de51&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;A&amp;nbsp;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Pattern Library&lt;/span&gt;&amp;nbsp;will integrate functional components and their usage.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;26db&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Most of the current Design Systems contains both, just as Shopify for example which as one tab “Visuals” for its Style Guide and one tab “Components” for its Pattern Library.&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my rb&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2340px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*7qm4-J7Esv9arJC_E3KEGA.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*7qm4-J7Esv9arJC_E3KEGA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*7qm4-J7Esv9arJC_E3KEGA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*7qm4-J7Esv9arJC_E3KEGA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*7qm4-J7Esv9arJC_E3KEGA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*7qm4-J7Esv9arJC_E3KEGA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*7qm4-J7Esv9arJC_E3KEGA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*7qm4-J7Esv9arJC_E3KEGA.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;233&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*7qm4-J7Esv9arJC_E3KEGA.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://polaris.shopify.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Shopify — Polaris: Style guide &amp;amp; Pattern library&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a730&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Why are we talking about that today?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f889&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The desire for factorizing design and components is not new. But we can see that the trend has accelerated during the past years. More and more companies are based on digital supports and do not even have Graphic guidelines for print anymore!&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9728&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;For a long time, digital was treated like the “side project”: we use to make Graphic guidelines for printed elements and then, add some extra-guidelines for the digital… Who has never received 300 pages of graphic guidelines with only 6 pages about digital? I have… And as a Designer, that’s not the kind of inputs I expect from a brand...&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;mx my rl&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 240px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 240px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 1100w, https://miro.medium.com/v2/resize:fit:480/format:webp/1*gB99SGR1D6hpbwDFBpVy1A.gif 480w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 240px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*gB99SGR1D6hpbwDFBpVy1A.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*gB99SGR1D6hpbwDFBpVy1A.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*gB99SGR1D6hpbwDFBpVy1A.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*gB99SGR1D6hpbwDFBpVy1A.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*gB99SGR1D6hpbwDFBpVy1A.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*gB99SGR1D6hpbwDFBpVy1A.gif 1100w, https://miro.medium.com/v2/resize:fit:480/1*gB99SGR1D6hpbwDFBpVy1A.gif 480w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;135&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:300/1*gB99SGR1D6hpbwDFBpVy1A.gif&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 240px;&quot; width=&quot;240&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;A designer who receives the Graphic guidelines of his client&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ce44&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;We must now close the gap between print and digital around a shared language that will evolve with time. Design System is the direct descendant of the Graphic guidelines but it’s more mature and more integrated into the teams&#39; workflow. We also now have the tools which allow us to&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;https://uxdesign.cc/atomic-design-how-to-design-systems-of-components-ab41f24f260e&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;build and share systems of components&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ab cb rm rn ro rp&quot; role=&quot;separator&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); display: flex; font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; justify-content: center; margin-bottom: 14px; margin-top: 32px; padding-bottom: 10px; padding-top: 24px;&quot;&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;gn go gp gq gr&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; overflow-wrap: break-word; word-break: break-word;&quot;&gt;&lt;div class=&quot;ab cb&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: center;&quot;&gt;&lt;div class=&quot;ci bh fz ga gb gc&quot; style=&quot;box-sizing: inherit; margin: 0px 24px; max-width: 680px; min-width: 0px; width: 680px;&quot;&gt;&lt;h1 class=&quot;ol om gu bf on oo ru oq or os rv ou ov ow rw oy oz pa rx pc pd pe ry pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c4fa&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.25em 0px -0.28em;&quot;&gt;What’s inside?&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5451&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The fundamental purpose of a Design System is to facilitate the work of the teams. So the first question we need to ask ourselves is not “What should I put inside my Design System?” but “Who is going to use it and how?”.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2012&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Once our target is defined and we have a first idea of what is already in place in the company (What is working or not? Which is the level of maturity of the teams about this subject? What are the existing tools?…), it will be easier to know where to start.&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;371b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;#1. Purpose and shared values&lt;/h2&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;mx my rz&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 400px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 400px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*4dDQva4jTVtHOnEj. 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*4dDQva4jTVtHOnEj. 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*4dDQva4jTVtHOnEj. 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*4dDQva4jTVtHOnEj. 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*4dDQva4jTVtHOnEj. 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*4dDQva4jTVtHOnEj. 1100w, https://miro.medium.com/v2/resize:fit:800/format:webp/0*4dDQva4jTVtHOnEj. 800w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 400px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*4dDQva4jTVtHOnEj. 640w, https://miro.medium.com/v2/resize:fit:720/0*4dDQva4jTVtHOnEj. 720w, https://miro.medium.com/v2/resize:fit:750/0*4dDQva4jTVtHOnEj. 750w, https://miro.medium.com/v2/resize:fit:786/0*4dDQva4jTVtHOnEj. 786w, https://miro.medium.com/v2/resize:fit:828/0*4dDQva4jTVtHOnEj. 828w, https://miro.medium.com/v2/resize:fit:1100/0*4dDQva4jTVtHOnEj. 1100w, https://miro.medium.com/v2/resize:fit:800/0*4dDQva4jTVtHOnEj. 800w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;300&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:500/0*4dDQva4jTVtHOnEj.&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 400px;&quot; width=&quot;400&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;©&lt;a class=&quot;af ok&quot; href=&quot;https://dribbble.com/jahit&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Jahit Janberk&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;blockquote class=&quot;sa sb sc&quot; style=&quot;box-shadow: rgb(36, 36, 36) 3px 0px 0px 0px inset; box-sizing: inherit; margin: 0px 0px 0px -20px; padding-left: 23px;&quot;&gt;&lt;p class=&quot;nl nm oj nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dfbc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; font-style: italic; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Where are we going? Why? And How?&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e829&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Before starting anything, it’s essential to align teams around a clear set of shared goals. It will help to build a vision and making sure everyone looks in the same direction. These goals will evolve with time and it’s normal. We just have to make sure that changes are broadly communicated.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a67b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;As for the values, they are like great ideals that will guide our choices, according to the brand objectives. We need to make sure that what we’re designing does not differ from these key values.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f018&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Beside these brand and product values, we could also define some team values that will bring each collaborator around a shared state of mind.&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sd&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 800px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*LvvCJUjJbJztcCxE1QYfbw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*LvvCJUjJbJztcCxE1QYfbw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*LvvCJUjJbJztcCxE1QYfbw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*LvvCJUjJbJztcCxE1QYfbw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*LvvCJUjJbJztcCxE1QYfbw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*LvvCJUjJbJztcCxE1QYfbw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*LvvCJUjJbJztcCxE1QYfbw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*LvvCJUjJbJztcCxE1QYfbw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;438&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*LvvCJUjJbJztcCxE1QYfbw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://www.invisionapp.com/blog/ux-team-core-values/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Posters the ASH team created for their core values&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7ada&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;#2. Design Principles&lt;/h2&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my se&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1120px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*GdV5_Yq6xBr6RELbWcApiQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*GdV5_Yq6xBr6RELbWcApiQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*GdV5_Yq6xBr6RELbWcApiQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*GdV5_Yq6xBr6RELbWcApiQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*GdV5_Yq6xBr6RELbWcApiQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*GdV5_Yq6xBr6RELbWcApiQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*GdV5_Yq6xBr6RELbWcApiQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*GdV5_Yq6xBr6RELbWcApiQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;375&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*GdV5_Yq6xBr6RELbWcApiQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://principles.design/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Design&amp;nbsp;&lt;/a&gt;Principles: A collection of Design Principles and methods&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2650&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;First thing to keep in mind: Design principles are so much more than just the visual aspect of a product…&lt;/p&gt;&lt;blockquote class=&quot;po&quot; style=&quot;box-sizing: inherit; margin: 0px; padding-left: 30px;&quot;&gt;&lt;p class=&quot;pp pq gu bf pr ps pt pu pv pw px oi du&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b765&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 28px; letter-spacing: -0.009em; line-height: 40px; margin: 1.75em 0px -0.46em;&quot;&gt;Design principles are the guiding sentences that helps the teams to reach the purpose of the product thanks to the design.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no sf nq nr ns sg nu nv nw sh ny nz oa si oc od oe sj og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0463&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.64em 0px -0.46em; word-break: break-word;&quot;&gt;They will help the teams to make meaningful Design decisions.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4228&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;I will take the example of Medium. One of their Design principles is “Direction over choice”. Thanks to that principle, instead of designing a regular text editor with unlimited choices of colours and fonts, they opted for a simpler one. That allows the author to focus on the content of his article rather than on its visual aspect.&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sk&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1158px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*OndP9otWR3o5dlGu0TPEzA.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*OndP9otWR3o5dlGu0TPEzA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*OndP9otWR3o5dlGu0TPEzA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*OndP9otWR3o5dlGu0TPEzA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*OndP9otWR3o5dlGu0TPEzA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*OndP9otWR3o5dlGu0TPEzA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*OndP9otWR3o5dlGu0TPEzA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*OndP9otWR3o5dlGu0TPEzA.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;173&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*OndP9otWR3o5dlGu0TPEzA.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;075d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Design Principles must guide design choices&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7bb0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;#3. Brand identity &amp;amp; language&lt;/h2&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sl&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 962px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jjmTamszwwAq46QgCTBtDg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*jjmTamszwwAq46QgCTBtDg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*jjmTamszwwAq46QgCTBtDg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*jjmTamszwwAq46QgCTBtDg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*jjmTamszwwAq46QgCTBtDg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*jjmTamszwwAq46QgCTBtDg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*jjmTamszwwAq46QgCTBtDg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*jjmTamszwwAq46QgCTBtDg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;498&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*jjmTamszwwAq46QgCTBtDg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Shopify brand identity&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a56f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The identity should be defined in line with the strategy and the objectives of the brand. Alla Kholmatova speaks about the “perceptual patterns” that she lists as follow:&lt;/p&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;04dc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Colours&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5c1b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Fonts&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7464&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Spaces&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;59d2&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Shapes&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e207&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Icons&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;683a&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Illustrations&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b2d4&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Photographies&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1ded&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Animations&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;30e3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Voice and tone&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;acd3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Sounds&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;sa sb sc&quot; style=&quot;box-shadow: rgb(36, 36, 36) 3px 0px 0px 0px inset; box-sizing: inherit; margin: 0px 0px 0px -20px; padding-left: 23px;&quot;&gt;&lt;p class=&quot;nl nm oj nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3955&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; font-style: italic; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;All of this forms the alphabet of the Brand.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;420c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;It’s a good starting point but that’s surely not enough to speak a language! We have to go further to use this alphabet to compose some words and then associate these words to obtain sentences that make sense. These brand elements will need some rules which will be, in a way, the grammar and the conjugation of the System.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2ae8&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In our Design System, it’s materialized by guidelines,&amp;nbsp;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;do’s and don’ts&amp;nbsp;&lt;/em&gt;and “good examples” of use.&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sm&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1134px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*fc1L3xWnWykOStHFwuGU7w.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*fc1L3xWnWykOStHFwuGU7w.png 640w, https://miro.medium.com/v2/resize:fit:720/1*fc1L3xWnWykOStHFwuGU7w.png 720w, https://miro.medium.com/v2/resize:fit:750/1*fc1L3xWnWykOStHFwuGU7w.png 750w, https://miro.medium.com/v2/resize:fit:786/1*fc1L3xWnWykOStHFwuGU7w.png 786w, https://miro.medium.com/v2/resize:fit:828/1*fc1L3xWnWykOStHFwuGU7w.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*fc1L3xWnWykOStHFwuGU7w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*fc1L3xWnWykOStHFwuGU7w.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;772&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*fc1L3xWnWykOStHFwuGU7w.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Examples of Identity Guidelines ©&lt;a class=&quot;af ok&quot; href=&quot;https://www.backelite.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Backelite&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d431&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;This will ensure the design teams use the “right combinations” of this language, those who make the brand so unique and recognizable.&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6a6c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;#4. Components &amp;amp; patterns&lt;/h2&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sn&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 930px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*5kDA_gq5YBtyXKjtEvJlHQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*5kDA_gq5YBtyXKjtEvJlHQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*5kDA_gq5YBtyXKjtEvJlHQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*5kDA_gq5YBtyXKjtEvJlHQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*5kDA_gq5YBtyXKjtEvJlHQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*5kDA_gq5YBtyXKjtEvJlHQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*5kDA_gq5YBtyXKjtEvJlHQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*5kDA_gq5YBtyXKjtEvJlHQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;611&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*5kDA_gq5YBtyXKjtEvJlHQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;287f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Components &amp;amp; Patterns are at the heart of the System. All the previously mentioned elements will help us to create them and deliver a consistent experience.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;21cc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;The components&lt;/span&gt;&amp;nbsp;are our LEGO blocs. They’re used in Sketch by designers, and directly in the code by developers. Their functional behaviour must be specified.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6edc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;As for the&amp;nbsp;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;patterns,&amp;nbsp;&lt;/span&gt;they&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&amp;nbsp;&lt;/span&gt;are the building instructions that will allow us to use these components in a logical and consistent way, across all the products.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8668&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In the image below, we can clearly see that a component will be specified with technical and functional documentation, whereas a pattern will give recommendations about how to use it:&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my so&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2206px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*tTjXTME68mGKnN7hW-bW1g.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*tTjXTME68mGKnN7hW-bW1g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*tTjXTME68mGKnN7hW-bW1g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*tTjXTME68mGKnN7hW-bW1g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*tTjXTME68mGKnN7hW-bW1g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*tTjXTME68mGKnN7hW-bW1g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*tTjXTME68mGKnN7hW-bW1g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*tTjXTME68mGKnN7hW-bW1g.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;485&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*tTjXTME68mGKnN7hW-bW1g.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://medium.com/eightshapes-llc/patterns-components-2ce778cbe4e8&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot;&gt;Pattern vs component&amp;nbsp;&lt;/a&gt;©Nathan Curtis&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6a53&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;If you wonder which component you should develop first for your system, you can run a&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;https://medium.com/@audreyhacq/workshop-how-to-prioritize-your-design-system-components-744aa99f07d7&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot;&gt;component prioritization workshop&lt;/a&gt;.&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d108&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Best practices&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;be22&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Besides the documentation, that is often directly linked to the System, best practices will accompany teams in a larger and more transversal way.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6fdd&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The idea is to dig into the general best practices and extract only those who make sense, based on the product and the level of maturity of the teams.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5c9e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Best practices will help the teams to form and develop their technicals skills.&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sp&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1600px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*xNlvl7QR994NVwAv. 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*xNlvl7QR994NVwAv. 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*xNlvl7QR994NVwAv. 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*xNlvl7QR994NVwAv. 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*xNlvl7QR994NVwAv. 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*xNlvl7QR994NVwAv. 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*xNlvl7QR994NVwAv. 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*xNlvl7QR994NVwAv. 640w, https://miro.medium.com/v2/resize:fit:720/0*xNlvl7QR994NVwAv. 720w, https://miro.medium.com/v2/resize:fit:750/0*xNlvl7QR994NVwAv. 750w, https://miro.medium.com/v2/resize:fit:786/0*xNlvl7QR994NVwAv. 786w, https://miro.medium.com/v2/resize:fit:828/0*xNlvl7QR994NVwAv. 828w, https://miro.medium.com/v2/resize:fit:1100/0*xNlvl7QR994NVwAv. 1100w, https://miro.medium.com/v2/resize:fit:1400/0*xNlvl7QR994NVwAv. 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;491&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/0*xNlvl7QR994NVwAv.&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;“How to” in the BBC Design System&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ab cb rm rn ro rp&quot; role=&quot;separator&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); display: flex; font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; justify-content: center; margin-bottom: 14px; margin-top: 32px; padding-bottom: 10px; padding-top: 24px;&quot;&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;gn go gp gq gr&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; overflow-wrap: break-word; word-break: break-word;&quot;&gt;&lt;div class=&quot;ab cb&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: center;&quot;&gt;&lt;div class=&quot;ci bh fz ga gb gc&quot; style=&quot;box-sizing: inherit; margin: 0px 24px; max-width: 680px; min-width: 0px; width: 680px;&quot;&gt;&lt;h1 class=&quot;ol om gu bf on oo ru oq or os rv ou ov ow rw oy oz pa rx pc pd pe ry pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;afd2&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.25em 0px -0.28em;&quot;&gt;What kind of Design System?&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8c3f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;We can almost say that there is one kind of Design System per team or product… To define our own, we have to ask ourselves the right questions:&lt;/p&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;70f2&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;How many people will use this system?&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0083&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;What is their profile and are they mature enough on the subject?&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cb2b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;How many products must we align? On how many platforms? How many different technologies (Angular, React, others…)?&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e6d1&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;What degree of consistency do we want across our products?&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;42f4&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;All these answers will help us to define the most appropriate kind of Design System.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1bbb&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In her book,&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;http://craftui.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Alla Kholmatova&lt;/a&gt;&amp;nbsp;gives us some inspiration:&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0b42&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Strict or loose?&lt;/h2&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sq&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 915px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Sw9sHYFk5CBwFEbIMvjXcw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*Sw9sHYFk5CBwFEbIMvjXcw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Sw9sHYFk5CBwFEbIMvjXcw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Sw9sHYFk5CBwFEbIMvjXcw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Sw9sHYFk5CBwFEbIMvjXcw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Sw9sHYFk5CBwFEbIMvjXcw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Sw9sHYFk5CBwFEbIMvjXcw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*Sw9sHYFk5CBwFEbIMvjXcw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;214&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*Sw9sHYFk5CBwFEbIMvjXcw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;On the left: Airbnb / On the right: Ted&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;76b0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;A strict system&amp;nbsp;&lt;/span&gt;will have a comprehensive and detailed documentation and will be fully synchronized between design and development. There will be a strict process for introducing a new pattern in the System. A strict system should be very broad in order to cover the majority of cases the teams may encounter.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;39e0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;A loose system&lt;/span&gt;&amp;nbsp;will leave more space for experimentation. The System is here to provide a framework for the teams while preserving some freedom. Designers and developers are free to use it or not, regarding their particular needs for their product.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7f69&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;From my experience, we have to find the right balance between strictness and flexibility: a very strict system might repel designers and developers who will not want to use it. On the other side, can we still speak about Design System if this one is too loose?&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7a97&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Modular or integrated?&lt;/h2&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sr&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 994px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*cjnCJx9BKfkM0m0KPB22Sg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*cjnCJx9BKfkM0m0KPB22Sg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*cjnCJx9BKfkM0m0KPB22Sg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*cjnCJx9BKfkM0m0KPB22Sg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*cjnCJx9BKfkM0m0KPB22Sg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*cjnCJx9BKfkM0m0KPB22Sg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*cjnCJx9BKfkM0m0KPB22Sg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*cjnCJx9BKfkM0m0KPB22Sg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;241&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*cjnCJx9BKfkM0m0KPB22Sg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Modular vs integrated systems ©&lt;a class=&quot;af ok&quot; href=&quot;http://craftui.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Alla Kholmatova&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6eba&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;A modular system&lt;/span&gt;&amp;nbsp;is made of interchangeable and reusable parts. It suits well for projects that have to scale quickly and that have to adapt to multiple user needs. The negative part is that it’s often more expensive to realize (because it can be difficult to make modules that can be independent while working well together). This kind of system will particularly fit large scale product as e-commerce, finance and governments websites. For a modular system, it will be very interesting to work with&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;https://uxdesign.cc/atomic-design-how-to-design-systems-of-components-ab41f24f260e&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;atomic design in mind&lt;/a&gt;.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6c3d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;An integrated system&lt;/span&gt;&amp;nbsp;focus on one unique context. It’s also composed of parts, but these parts will not be interchangeable. This kind of system suits products that have very few repeating parts and that need a strong and often changing Art Direction (portfolios, showcases, marketing campaigns…).&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fe5b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Centralized or distributed?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1b59&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The organization around Design Systems is really important for its evolution and scalability.&amp;nbsp;&lt;a class=&quot;af ok&quot; href=&quot;https://medium.com/eightshapes-llc/team-models-for-scaling-a-design-system-2cf9d03be6a0&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot;&gt;In this article&lt;/a&gt;, Nathan Curtis details the different types of models. Here are two of them:&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my ss&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 730px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*zOE1LV_WX0382jkI0nQjvg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*zOE1LV_WX0382jkI0nQjvg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*zOE1LV_WX0382jkI0nQjvg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*zOE1LV_WX0382jkI0nQjvg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*zOE1LV_WX0382jkI0nQjvg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*zOE1LV_WX0382jkI0nQjvg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*zOE1LV_WX0382jkI0nQjvg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*zOE1LV_WX0382jkI0nQjvg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;325&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*zOE1LV_WX0382jkI0nQjvg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Which model for your Design System: centralized or distributed? ©Nathan Curtis&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6f16&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In a&amp;nbsp;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;centralized model&lt;/span&gt;, one team is in charge of the System and makes it evolve. This team is here to facilitate the work of the other teams and has to be very close to them, to be sure that the System covers most of their needs.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ebd7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In a&amp;nbsp;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;distributed model&lt;/span&gt;, several people of several teams are in charge of the system. The adoption of the system is quicker because everyone feels involve but it also needs team leaders that will keep an overall vision of it.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8c61&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In each case, I advise allowing everyone to participate and make suggestions to improve the system, in order to create a sense of membership.&lt;/p&gt;&lt;h2 class=&quot;qm om gu bf on qn qo dy or qp qq ea ov nw qr qs qt oa qu qv qw oe qx qy qz ra bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c70c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; letter-spacing: 0px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Place your system on a scale&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3962&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The idea will be thus to position our system on these three scales, in order to define the kind of system that we want:&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my st&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 983px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*8fznO0Wdzfuynkxl39lviw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*8fznO0Wdzfuynkxl39lviw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*8fznO0Wdzfuynkxl39lviw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*8fznO0Wdzfuynkxl39lviw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*8fznO0Wdzfuynkxl39lviw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*8fznO0Wdzfuynkxl39lviw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*8fznO0Wdzfuynkxl39lviw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*8fznO0Wdzfuynkxl39lviw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;295&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*8fznO0Wdzfuynkxl39lviw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Airbnb: a strict, modular and centralized system&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ab cb rm rn ro rp&quot; role=&quot;separator&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); display: flex; font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; justify-content: center; margin-bottom: 14px; margin-top: 32px; padding-bottom: 10px; padding-top: 24px;&quot;&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;gn go gp gq gr&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; overflow-wrap: break-word; word-break: break-word;&quot;&gt;&lt;div class=&quot;ab cb&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: center;&quot;&gt;&lt;div class=&quot;ci bh fz ga gb gc&quot; style=&quot;box-sizing: inherit; margin: 0px 24px; max-width: 680px; min-width: 0px; width: 680px;&quot;&gt;&lt;h1 class=&quot;ol om gu bf on oo ru oq or os rv ou ov ow rw oy oz pa rx pc pd pe ry pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;82b7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.25em 0px -0.28em;&quot;&gt;Some examples&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;36eb&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Without any originality, here are some of my favourites:&lt;/p&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6029&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Material Design&amp;nbsp;&lt;/span&gt;for its simplicity of navigation and the tools for designers &amp;amp; developers&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my su&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1718px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*M2Y4J3epMfuBn-I0IcK-kQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*M2Y4J3epMfuBn-I0IcK-kQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*M2Y4J3epMfuBn-I0IcK-kQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*M2Y4J3epMfuBn-I0IcK-kQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*M2Y4J3epMfuBn-I0IcK-kQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*M2Y4J3epMfuBn-I0IcK-kQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*M2Y4J3epMfuBn-I0IcK-kQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*M2Y4J3epMfuBn-I0IcK-kQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;388&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*M2Y4J3epMfuBn-I0IcK-kQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://material.io/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Material Design System&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a45a&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Atlassian&lt;/span&gt;&amp;nbsp;for its exhaustiveness&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sp&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1600px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/0*ObYjiaLjiu24xrqB. 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*ObYjiaLjiu24xrqB. 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*ObYjiaLjiu24xrqB. 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*ObYjiaLjiu24xrqB. 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*ObYjiaLjiu24xrqB. 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*ObYjiaLjiu24xrqB. 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*ObYjiaLjiu24xrqB. 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/0*ObYjiaLjiu24xrqB. 640w, https://miro.medium.com/v2/resize:fit:720/0*ObYjiaLjiu24xrqB. 720w, https://miro.medium.com/v2/resize:fit:750/0*ObYjiaLjiu24xrqB. 750w, https://miro.medium.com/v2/resize:fit:786/0*ObYjiaLjiu24xrqB. 786w, https://miro.medium.com/v2/resize:fit:828/0*ObYjiaLjiu24xrqB. 828w, https://miro.medium.com/v2/resize:fit:1100/0*ObYjiaLjiu24xrqB. 1100w, https://miro.medium.com/v2/resize:fit:1400/0*ObYjiaLjiu24xrqB. 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;417&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/0*ObYjiaLjiu24xrqB.&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://atlassian.design/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Atlassian Design System&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d112&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Polaris&lt;/span&gt;&amp;nbsp;from Shopify, because of its integration into the designer and developer’s workflow&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sv&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1384px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*T4lKdtF2jNXb01zHpwOlUw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*T4lKdtF2jNXb01zHpwOlUw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*T4lKdtF2jNXb01zHpwOlUw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*T4lKdtF2jNXb01zHpwOlUw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*T4lKdtF2jNXb01zHpwOlUw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*T4lKdtF2jNXb01zHpwOlUw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*T4lKdtF2jNXb01zHpwOlUw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*T4lKdtF2jNXb01zHpwOlUw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;449&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*T4lKdtF2jNXb01zHpwOlUw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;http://polaris.shopify.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Polaris by Shopify&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a7ee&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;nn gv&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;IBM&lt;/span&gt;&amp;nbsp;for its wonderful work on the Design language&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sw&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2416px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*-S26zGWrqsToPLFRK3PEnw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*-S26zGWrqsToPLFRK3PEnw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*-S26zGWrqsToPLFRK3PEnw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*-S26zGWrqsToPLFRK3PEnw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*-S26zGWrqsToPLFRK3PEnw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*-S26zGWrqsToPLFRK3PEnw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*-S26zGWrqsToPLFRK3PEnw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*-S26zGWrqsToPLFRK3PEnw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;345&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*-S26zGWrqsToPLFRK3PEnw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;http://ibm.com/design/language/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;IBM Design Language&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ab cb rm rn ro rp&quot; role=&quot;separator&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); display: flex; font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; justify-content: center; margin-bottom: 14px; margin-top: 32px; padding-bottom: 10px; padding-top: 24px;&quot;&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;gn go gp gq gr&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; overflow-wrap: break-word; word-break: break-word;&quot;&gt;&lt;div class=&quot;ab cb&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: center;&quot;&gt;&lt;div class=&quot;ci bh fz ga gb gc&quot; style=&quot;box-sizing: inherit; margin: 0px 24px; max-width: 680px; min-width: 0px; width: 680px;&quot;&gt;&lt;h1 class=&quot;ol om gu bf on oo ru oq or os rv ou ov ow rw oy oz pa rx pc pd pe ry pg ph pi bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5657&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.25em 0px -0.28em;&quot;&gt;Last words&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no pj nq nr ns pk nu nv nw pl ny nz oa pm oc od oe pn og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d3e3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;A Design System is a full product, which is going to help the actors of a project to build other products.&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sx&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 907px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Awbi_affiJI5mjtfnx8LBg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*Awbi_affiJI5mjtfnx8LBg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Awbi_affiJI5mjtfnx8LBg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Awbi_affiJI5mjtfnx8LBg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Awbi_affiJI5mjtfnx8LBg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Awbi_affiJI5mjtfnx8LBg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Awbi_affiJI5mjtfnx8LBg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*Awbi_affiJI5mjtfnx8LBg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;282&quot; loading=&quot;eager&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*Awbi_affiJI5mjtfnx8LBg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d3de&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;As for every good product, it will have its own backlog and will have to build itself in an iterative way, keeping the users (designers, developers, PO…) at the heart of the approach.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3dc1&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The more integrated the system will be with the designers and developers workflows, the more effective it will be.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d47d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;One really good example of this integration is the Sketch plugin of Polaris that displays the components and documentation of the system directly in Sketch, so the designers have everything they need during the conception phase:&lt;/p&gt;&lt;figure class=&quot;rc rd re rf rg nf mx my paragraph-image&quot; style=&quot;box-sizing: inherit; clear: both; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ng nh fj ni bh nj&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1); width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mx my sy&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 818px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*QktmLFj41IjJeUCu8eGHeA.gif 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*QktmLFj41IjJeUCu8eGHeA.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*QktmLFj41IjJeUCu8eGHeA.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*QktmLFj41IjJeUCu8eGHeA.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*QktmLFj41IjJeUCu8eGHeA.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*QktmLFj41IjJeUCu8eGHeA.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*QktmLFj41IjJeUCu8eGHeA.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*QktmLFj41IjJeUCu8eGHeA.gif 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh me nk c&quot; height=&quot;600&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:875/1*QktmLFj41IjJeUCu8eGHeA.gif&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption class=&quot;rh ff ri mx my rj rk bf b bg z du&quot; data-selectable-paragraph=&quot;&quot; style=&quot;box-sizing: inherit; color: #6b6b6b; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin-left: auto; margin-right: auto; margin-top: 10px; max-width: 728px; text-align: center;&quot;&gt;Telescope: the sketch plugin, by Polaris&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;73d6&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;And all of this is only a beginning!&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1025&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;I’m convinced that the future will provide us with a lot of great technical evolutions to facilitate our lives and to allow us to concentrate on the experience of our products and our users ;)&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a6fa&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;And if you want to run some workshops around design systems, you can also read my articles about “&lt;/em&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://uxdesign.cc/workshop-how-to-prioritize-your-design-system-components-744aa99f07d7&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;How to prioritize your design system components?&lt;/em&gt;&lt;/a&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;” and “&lt;/em&gt;&lt;a class=&quot;af ok&quot; href=&quot;https://medium.com/@audreyhacq/workshop-how-to-measure-your-design-system-success-b9c3b988edc2&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot;&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;How to measure your design system success?&lt;/em&gt;&lt;/a&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;”.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ab cb rm rn ro rp&quot; role=&quot;separator&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); display: flex; font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; justify-content: center; margin-bottom: 14px; margin-top: 32px; padding-bottom: 10px; padding-top: 24px;&quot;&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs rt&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; margin-right: 20px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;rq by bm rr rs&quot; style=&quot;background-color: black; border-radius: 50%; box-sizing: inherit; display: inline-block; height: 3px; width: 3px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;gn go gp gq gr&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; overflow-wrap: break-word; word-break: break-word;&quot;&gt;&lt;div class=&quot;ab cb&quot; style=&quot;box-sizing: inherit; display: flex; justify-content: center;&quot;&gt;&lt;div class=&quot;ci bh fz ga gb gc&quot; style=&quot;box-sizing: inherit; margin: 0px 24px; max-width: 680px; min-width: 0px; width: 680px;&quot;&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;59b8&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;oj&quot; style=&quot;box-sizing: inherit;&quot;&gt;Sources&lt;/em&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: inherit; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0caa&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;af ok&quot; href=&quot;http://designsystemsbook.com/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Alla Kholmatova&lt;/a&gt;’s book on Design Systems&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c712&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Every article of the fabulous&amp;nbsp;&lt;span class=&quot;is&quot; style=&quot;box-sizing: inherit; display: inline;&quot;&gt;&lt;span aria-describedby=&quot;10&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;10&quot; class=&quot;is&quot; style=&quot;box-sizing: inherit; display: inline;&quot;&gt;&lt;a class=&quot;sz it fe&quot; href=&quot;https://medium.com/u/799c7c7840a?source=post_page---user_mention--54b109851969--------------------------------&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; background: none; box-sizing: inherit; color: #868484; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;Nathan Curtis&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;nl nm gu nn b no qh nq nr ns qi nu nv nw qj ny nz oa qk oc od oe ql og oh oi qe qf qg bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0d65&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Conferences and writings by&amp;nbsp;&lt;span class=&quot;is&quot; style=&quot;box-sizing: inherit; display: inline;&quot;&gt;&lt;span aria-describedby=&quot;11&quot; aria-hidden=&quot;false&quot; aria-labelledby=&quot;11&quot; class=&quot;is&quot; style=&quot;box-sizing: inherit; display: inline;&quot;&gt;&lt;a class=&quot;sz it fe&quot; href=&quot;https://medium.com/u/f5d1807b4e38?source=post_page---user_mention--54b109851969--------------------------------&quot; rel=&quot;noopener&quot; style=&quot;-webkit-tap-highlight-color: transparent; background: none; box-sizing: inherit; color: #868484; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;Jina Anne&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;118c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;You can also find other examples of very good Design Systems on this repo:&lt;/p&gt;&lt;div class=&quot;ta tb tc td te tf&quot; style=&quot;box-shadow: rgb(242, 242, 242) 0px 0px 0px 1px inset; box-sizing: inherit; margin-top: 32px;&quot;&gt;&lt;a href=&quot;https://designsystemsrepo.com/design-systems/?source=post_page-----54b109851969--------------------------------&quot; rel=&quot;noopener  ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;&lt;div class=&quot;tg ab ix&quot; style=&quot;box-sizing: inherit; display: flex; flex: 0 0 auto; padding: 0px;&quot;&gt;&lt;div class=&quot;th ab co cb ti tj&quot; style=&quot;box-sizing: inherit; display: flex; flex-direction: column; flex: 1 1 auto; justify-content: center; padding: 16px 20px;&quot;&gt;&lt;h2 class=&quot;bf gv io z jf tk jh ji tl jk jm gt bk&quot; style=&quot;-webkit-box-orient: vertical; -webkit-line-clamp: 2; box-sizing: inherit; color: #242424; display: -webkit-box; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0px; line-height: 20px; margin: 0px; max-height: 40px; overflow: hidden; text-overflow: ellipsis;&quot;&gt;Design Systems Repo&lt;/h2&gt;&lt;div class=&quot;tm l&quot; style=&quot;box-sizing: inherit; margin-top: 8px;&quot;&gt;&lt;h3 class=&quot;bf b io z jf tk jh ji tl jk jm du&quot; style=&quot;-webkit-box-orient: vertical; -webkit-line-clamp: 2; box-sizing: inherit; color: #6b6b6b; display: -webkit-box; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-weight: 400; line-height: 20px; margin: 0px; max-height: 40px; overflow: hidden; text-overflow: ellipsis;&quot;&gt;This is not a comprehensive list of every design system that I have come across. Rather, it’s a collection of ones that…&lt;/h3&gt;&lt;/div&gt;&lt;div class=&quot;tn l&quot; style=&quot;box-sizing: inherit; margin-top: 12px;&quot;&gt;&lt;p class=&quot;bf b dv z jf tk jh ji tl jk jm du&quot; style=&quot;-webkit-box-orient: vertical; -webkit-line-clamp: 2; box-sizing: inherit; color: #6b6b6b; display: -webkit-box; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px; margin: 0px; max-height: 40px; overflow: hidden; text-overflow: ellipsis;&quot;&gt;designsystemsrepo.com&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;to l&quot; style=&quot;box-sizing: inherit; width: 160px;&quot;&gt;&lt;div class=&quot;xr l tq tr ts to tt me tf&quot; style=&quot;background-image: url(&amp;quot;https://miro.medium.com/v2/resize:fit:200/0*_wMoKUi8qE9HzNoG.&amp;quot;); background-origin: border-box; background-position: 50% 50%; background-size: cover; box-shadow: rgb(242, 242, 242) 0px 0px 0px 1px inset; box-sizing: inherit; height: 167px; max-width: 100%; width: 160px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;pw-post-body-paragraph nl nm gu nn b no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi gn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cf23&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Thanks for reading!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/3117152103011668478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2024/12/everything-you-need-to-know-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3117152103011668478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3117152103011668478'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2024/12/everything-you-need-to-know-about.html' title='Everything you need to know about Design Systems'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-2315286467310217922</id><published>2024-12-01T12:21:00.001+05:30</published><updated>2024-12-01T12:21:05.451+05:30</updated><title type='text'>What is the difference between JSF, Servlet and JSP?</title><content type='html'>&lt;blockquote style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); background-color: white; border: 0px; box-sizing: inherit; color: var(--black-500); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI Adjusted&amp;quot;, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Liberation Sans&amp;quot;, sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-size: 15px; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-emoji: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: var(--_pr-blockquote-mt) 1em 1.1em var(--_pr-blockquote-ml); padding: 0.8em 0.8em 0.8em 1em; position: relative; quotes: none; vertical-align: baseline;&quot;&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; clear: both; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px 0px 1.1em; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;strong style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Servlets :&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; clear: both; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px 0px 1.1em; padding: 0px; vertical-align: baseline;&quot;&gt;The Java Servlet API enables Java developers to write server-side code for delivering dynamic Web content. Like other proprietary Web server APIs, the Java Servlet API offered improved performance over CGI; however, it has some key additional advantages. Because servlets were coded in Java, they provides an object-oriented (OO) design approach and, more important, are able to run on any platform. Thus, the same code was portable to any host that supported Java. Servlets greatly contributed to the popularity of Java, as it became a widely used technology for server-side Web application development.&lt;/p&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; clear: both; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px 0px 1.1em; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;strong style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;JSP :&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; clear: both; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px 0px 1.1em; padding: 0px; vertical-align: baseline;&quot;&gt;JSP is built on top of servlets and provides a simpler, page-based solution to generating large amounts of dynamic HTML content for Web user interfaces. JavaServer Pages enables Web developers and designers to simply edit HTML pages with special tags for the dynamic, Java portions. JavaServer Pages works by having a special servlet known as a JSP container, which is installed on a Web server and handles all JSP page view requests. The JSP container translates a requested JSP into servlet code that is then compiled and immediately executed. Subsequent requests to the same page simply invoke the runtime servlet for the page. If a change is made to the JSP on the server, a request to view it triggers another translation, compilation, and restart of the runtime servlet.&lt;/p&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; clear: both; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px 0px 1.1em; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;strong style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;JSF :&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; clear: both; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;JavaServer Faces is a standard Java framework for building user interfaces for Web applications. Most important, it simplifies the development of the user interface, which is often one of the more difficult and tedious parts of Web application development.&lt;br style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); box-sizing: inherit;&quot; /&gt;Although it is possible to build user interfaces by using foundational Java Web technologies(such as Java servlets and JavaServer Pages) without a comprehensive framework designedfor enterprise Web application development, these core technologies can often lead to avariety of development and maintenance problems. More important, by the time the developers achieve a production-quality solution, the same set of problems solved by JSF will have been solved in a nonstandard manner. JavaServer Faces is designed to simplify the development of user interfaces for Java Web applications in the following ways:&lt;br style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); box-sizing: inherit;&quot; /&gt;• It provides a component-centric, client-independent development approach to building Web user interfaces, thus improving developer productivity and ease of use.&lt;br style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); box-sizing: inherit;&quot; /&gt;• It simplifies the access and management of application data from the Web user interface.&lt;br style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); box-sizing: inherit;&quot; /&gt;• It automatically manages the user interface state between multiple requests and multiple clients in a simple and unobtrusive manner.&lt;br style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); box-sizing: inherit;&quot; /&gt;• It supplies a development framework that is friendly to a diverse developer audience with different skill sets.&lt;br style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); box-sizing: inherit; margin-bottom: 0px;&quot; /&gt;• It describes a standard set of architectural patterns for a web application.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); background-color: white; border: 0px; box-sizing: inherit; clear: both; color: #0c0d0e; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI Adjusted&amp;quot;, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Liberation Sans&amp;quot;, sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-size: 15px; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-emoji: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[&amp;nbsp;&lt;em style=&quot;--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Source :&amp;nbsp;&lt;a href=&quot;http://jsfcompref.com/&quot; rel=&quot;noreferrer&quot; style=&quot;--_li-fc-hover-visited: var(--theme-link-color-visited, var(--purple-600)); --_li-fc-hover: var(--theme-link-color-hover, var(--theme-secondary-500)); --_li-fc-visited: var(--theme-link-color-visited, var(--purple-500)); --_li-fc: var(--theme-link-color, var(--theme-secondary-400)); --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 27; --theme-base-primary-color-l: 48%; --theme-base-primary-color-s: 89%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: initial; --theme-button-color: initial; --theme-button-hover-background-color: initial; --theme-button-hover-color: initial; --theme-button-outlined-border-color: initial; --theme-button-outlined-selected-border-color: initial; --theme-button-primary-active-background-color: initial; --theme-button-primary-active-color: initial; --theme-button-primary-background-color: initial; --theme-button-primary-color: initial; --theme-button-primary-hover-background-color: initial; --theme-button-primary-hover-color: initial; --theme-button-primary-selected-background-color: initial; --theme-button-primary-selected-color: initial; --theme-button-selected-background-color: initial; --theme-button-selected-color: initial; --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: hsl(210,8%,5%); --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: var(--black-500); --theme-footer-link-color-hover: var(--black-200); --theme-footer-link-color: var(--black-300); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: var(--black-300); --theme-footer-title-color: var(--black-250); --theme-header-background-border-bottom: 0; --theme-header-background-color: var(--theme-primary); --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.4); --theme-link-color-hover: initial; --theme-link-color-visited: initial; --theme-link-color: initial; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-secondary-100); --theme-post-owner-new-background-color: var(--theme-secondary-200); --theme-post-title-color-hover: var(--theme-link-color-hover); --theme-post-title-color-visited: var(--theme-link-color-visited); --theme-post-title-color: var(--theme-link-color); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-topbar-bottom-border: 1px solid var(--black-225); border: 0px; box-sizing: inherit; cursor: pointer; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; user-select: auto; vertical-align: baseline;&quot;&gt;Complete reference:JSF&lt;/a&gt;&lt;/em&gt;&amp;nbsp;]&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/2315286467310217922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2024/12/what-is-difference-between-jsf-servlet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/2315286467310217922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/2315286467310217922'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2024/12/what-is-difference-between-jsf-servlet.html' title='What is the difference between JSF, Servlet and JSP?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-3923020095855768663</id><published>2024-10-05T10:10:00.004+05:30</published><updated>2024-10-05T10:17:34.286+05:30</updated><title type='text'>StateFlow and SharedFlow seem similar, but they are designed for different use cases</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZcM_lWi0bzJTj9E6ZObiiy7XxPrh9y-aRZ7RFC9Xg3nQZh_iaFAKBPqoF9YwQIXW3WgIB-jryOxltBkRXEsVE6Kvxi-HB9z0hzH1j5RQGvgrnUndgpFia8gLJlqMKuwruOcMLTw9pkNUNYTXZzgnq5stkqyKl3V_S5WRNWDgsIef0OPD18iazI0uo_iU&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;506&quot; data-original-width=&quot;1062&quot; height=&quot;304&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZcM_lWi0bzJTj9E6ZObiiy7XxPrh9y-aRZ7RFC9Xg3nQZh_iaFAKBPqoF9YwQIXW3WgIB-jryOxltBkRXEsVE6Kvxi-HB9z0hzH1j5RQGvgrnUndgpFia8gLJlqMKuwruOcMLTw9pkNUNYTXZzgnq5stkqyKl3V_S5WRNWDgsIef0OPD18iazI0uo_iU=w640-h304&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;S&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;tateFlow and SharedFlow seem similar, but they are designed for different use cases, and they should not be confused. Let&#39;s discuss the key differences and usages.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;Let&#39;s start with how they work. SharedFlow resembles a broadcast channel—emitted values are delivered to all observers. It allows setting a replay parameter specifying how many past values should be emitted to new observers.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;StateFlow behaves a lot like SharedFlow with reply = 1, but StateFlow must always have a value, so an initial value must be specified when a StateFlow is created. This value can be accessed or changed using value property.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;But StateFlow was designed for a concrete use case: to represent an observable state. In Android, it is used to represent the state of our application, and views observe it and redraw whenever it changes. That is the key source of differences.&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;Redrawing view can be expensive, and state changes can be frequent. That is why two optimizations were introduced. First, updates are only emitted when they are different from the previous state. This behavior can be achieved on SharedFlow using distinctUntilChanged.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;Second, StateFlow is conflated, meaning if observer is slower than value changes, it might lose some intermediate updates. That is appropriate for StateFlow, because we are not interested in drawing obsolete state.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;StateFlow also have some tools for state update, like update function, that lets us safely update state, by creating a new one based on the current one.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;That is why StateFlow should be used concretely to represent the observable state of our application. It should not be used as a &quot;breadcast channel&quot;. For that we use SharedFlow.&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;Let&#39;s see an Android example: Things like a progress bar or data to display should be represented by StateFlow, but exceptions or messages to show to users as toasts should be represented as SharedFlow.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;However, SharedFlow values are not completely safe to be used in view models, because updates made when there is no observer will not be observed (unless we use reply, but then the same values can be displayed again). So it is best to represent our state with StateFlow.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;Now let&#39;s see a backend example. On a backend service, updates received from some websocket should be represented using SharedFlow, but an observable counter of application users can be represented using StateFlow.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br style=&quot;box-sizing: inherit; font-family: var(--artdeco-reset-typography-font-family-sans); line-height: inherit;&quot; /&gt;&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;To sum up, StateFlow and SharedFlow are similar, but they are designed for different use cases. StateFlow is for representing observable state, and SharedFlow is for broadcasting events. Use them accordingly.&lt;/span&gt;&lt;span class=&quot;white-space-pre&quot; color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline); white-space: pre;&quot;&gt; 
&lt;/span&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;br /&gt;Credits&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; font-size: 14px; line-height: inherit; margin: var(--artdeco-reset-base-margin-zero); outline: var(--artdeco-reset-base-outline-zero); padding: var(--artdeco-reset-base-padding-zero); vertical-align: var(--artdeco-reset-base-vertical-align-baseline);&quot;&gt;&lt;span color=&quot;rgba(0, 0, 0, 0.9)&quot; face=&quot;-apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Fira Sans, Ubuntu, Oxygen, Oxygen Sans, Cantarell, Droid Sans, Apple Color Emoji, Segoe UI Emoji, Segoe UI Emoji, Segoe UI Symbol, Lucida Grande, Helvetica, Arial, sans-serif&quot; style=&quot;font-family: Roboto;&quot;&gt;https://www.linkedin.com/posts/marcin-moskala_stateflow-and-sharedflow-seem-similar-but-activity-7244273218692202496-yej-?utm_source=share&amp;amp;utm_medium=member_desktop&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/3923020095855768663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2024/10/stateflow-and-sharedflow-seem-similar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3923020095855768663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3923020095855768663'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2024/10/stateflow-and-sharedflow-seem-similar.html' title='StateFlow and SharedFlow seem similar, but they are designed for different use cases'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhZcM_lWi0bzJTj9E6ZObiiy7XxPrh9y-aRZ7RFC9Xg3nQZh_iaFAKBPqoF9YwQIXW3WgIB-jryOxltBkRXEsVE6Kvxi-HB9z0hzH1j5RQGvgrnUndgpFia8gLJlqMKuwruOcMLTw9pkNUNYTXZzgnq5stkqyKl3V_S5WRNWDgsIef0OPD18iazI0uo_iU=s72-w640-h304-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-647563843683005083</id><published>2017-04-01T06:39:00.000+05:30</published><updated>2017-04-18T10:00:18.783+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="design-patterns"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="object-oriented-programming"/><category scheme="http://www.blogger.com/atom/ns#" term="software-engineering"/><title type='text'>MVP : Event Bus pattern instead of Listener</title><content type='html'>&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;This question more towards paradigm. Why is that we don&#39;t use Event Bus instead of listeners in an MVP environment ? Typically, the &quot;P&quot; part has dependency injection of view and model references. Sure this has an advantage of showing explicit contract between the view and model via presenter, which is more readable.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;However, wouldn&#39;t it be a cleaner approach to have presenter listen to events from views and events carry the view payload (eg: json representation). Same is the case with presenter talking back to the view. View will listen for events from presenter. Major advantage is, we don&#39;t have to write interfaces for each contract between view and presenter. If you look at the&amp;nbsp;&lt;a href=&quot;https://github.com/ondrej-kvasnovsky/vaadin-model-view-presenter/blob/master/src/main/java/com/presenter/login/LoginPresenter.java#L21&quot; rel=&quot;nofollow&quot; style=&quot;border: 0px; color: #0c65a5; cursor: pointer; margin: 0px; padding: 0px; text-decoration: none;&quot;&gt;code&lt;/a&gt;&amp;nbsp;you will see that presenter is getting exposed to view details like Text Fields, which i believe is increasing coupling between view and presenter. Say, if i&#39;m replacing front end JavaFx instead of Vaadin, i will have to alter presenter as well.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;This class is an example from a live project. Here we have different types of events ie&amp;nbsp;&lt;strong style=&quot;border: 0px; margin: 0px; padding: 0px;&quot;&gt;i don&#39;t&amp;nbsp;&lt;/strong&gt;create event class for different cases. Eg: LoginViewEvent , DashBoardEvent etc which i believe is a maintenance pain.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;default prettyprint prettyprinted&quot; style=&quot;background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;UrayEvent&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;EventType&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        SESSION_SELECTED&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        DOCUMENT_SELECTED&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        DOCUMENT_EDIT_COMPLETE&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        DOCUMENT_EDIT_CANCELED&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        SHOW_SESSION_TABLES&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        SHOW_SESSION_DOCUMENTS&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        SHOW_SESSION_COLLABORATORS&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        USER_REQUESTED_REFRESH&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        AUTO_REFRESH&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        TABLE_SELECTED&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        DETACHED&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        SCHEDULER_NAVIGATION&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        JIRA_USER_SELECTED&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        DOCUMENT_SAVE_SUCCESS&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        DOCUMENT_SAVE_FAILURE&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;final&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; value&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;EventType&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; value&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;value &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; value&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; getValue&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; value&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;final&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;EventType&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;final&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; payload&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;EventType&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; eventPayload&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;type &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;payload &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; eventPayload&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;EventType&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; getEventType&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; getEventPayload&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; payload&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Simple enough, the view send the event&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; font-size: 13px; margin: 0px; padding: 1px 5px; white-space: pre-wrap;&quot;&gt; DOCUMENT_EDIT_COMPLETE &lt;/code&gt;.The presenter layer handles this event. I found this way, a better way to decouple views from presenter.&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;default prettyprint prettyprinted&quot; style=&quot;background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;border: 0px; color: maroon; margin: 0px; padding: 0px;&quot;&gt;@Subscribe&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; handle&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;UrayEvent&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;switch&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;getEventType&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;case&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; DOCUMENT_EDIT_COMPLETE&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;com&quot; style=&quot;border: 0px; color: grey; margin: 0px; padding: 0px;&quot;&gt;// event payload contains document model data&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;com&quot; style=&quot;border: 0px; color: grey; margin: 0px; padding: 0px;&quot;&gt;// like document id etc&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                 saveDocument&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;getEventPayload&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;    
                &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;strong style=&quot;border: 0px; margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Advantage&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; border: 0px; color: #222222; font-size: 15px; line-height: 19.5px; margin: 0px 0px 1em 30px; padding: 0px;&quot;&gt;
&lt;li style=&quot;border: 0px; margin: 0px 0px 0.5em; padding: 0px; word-wrap: break-word;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Less boiler plate code,&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;border: 0px; margin: 0px 0px 0.5em; padding: 0px; word-wrap: break-word;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;For n-views we don&#39;t need n-interfaces&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;border: 0px; margin: 0px 0px 0.5em; padding: 0px; word-wrap: break-word;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;New event means adding event element to enum and updating respective subscribe methods handling this event.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;strong style=&quot;border: 0px; margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Disadvantage&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; border: 0px; color: #222222; font-size: 15px; line-height: 19.5px; margin: 0px 0px 1em 30px; padding: 0px;&quot;&gt;
&lt;li style=&quot;border: 0px; margin: 0px 0px 0.5em; padding: 0px; word-wrap: break-word;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Memory leak if we forget to unregister &amp;nbsp;from eventbus (faced it plenty of time)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;strong style=&quot;border: 0px; margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Questions&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;1) This approach means, there would larger set enum elements as the application grow. Is this approach an anti pattern ?&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;2) As we saw it uses Event Bus extensively are there any drawbacks of using bus system instead of interface-listener pattern ?&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Wanted your valuable suggestion on this regard. The main issue is, if i blindly apply this pattern extensively across the project i shouldn&#39;t regret doing so, what would be a possible pitfall in this approach.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/647563843683005083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2015/10/mvp-event-bus-pattern-instead-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/647563843683005083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/647563843683005083'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2015/10/mvp-event-bus-pattern-instead-of.html' title='MVP : Event Bus pattern instead of Listener'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-5349432369661995187</id><published>2017-03-23T00:37:00.000+05:30</published><updated>2017-04-18T10:01:04.651+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="internals"/><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><title type='text'>Android Internals : just what application developers needs to know </title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8PId-jDz9v5m3HvNAcihStyCXh5e5u902R6V2SFGkcIHSL0CLuonPQE-9SXIiyFWdRrw1KNFPpLMMhxn3yY4WSGDZdGraJPY_WVNYkRCetoFiESOFig0B6E2X0IGxv_Ej6E7xMRNwzz0_/s1600/rda.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8PId-jDz9v5m3HvNAcihStyCXh5e5u902R6V2SFGkcIHSL0CLuonPQE-9SXIiyFWdRrw1KNFPpLMMhxn3yY4WSGDZdGraJPY_WVNYkRCetoFiESOFig0B6E2X0IGxv_Ej6E7xMRNwzz0_/s200/rda.png&quot; width=&quot;177&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;It is always good (not a must) to know the internals of a software platform, to be an efficient developer. After having exposed to the internals, many facts will make more sense to during the development, further you will get the clear picture of how each components connect and interact with each other.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Its been a while since the &lt;a href=&quot;http://android-developers.blogspot.in/2007/11/posted-by-jason-chen-android-advocate.html&quot; target=&quot;_blank&quot;&gt;inception&lt;/a&gt; of the Android Mobile platform. Since then, there has been higher demand for android developers, not to mention how it made easy for existing Java developers to migrate. &lt;a href=&quot;http://news.cnet.com/8301-1035_3-57577431-94/android-outscores-ios-in-u.s-smartphone-sales-says-report/&quot; target=&quot;_blank&quot;&gt;Statistics&lt;/a&gt;&amp;nbsp;show, most mobile and embedded devices will default to Android soon or later.Learning this platform would be worth the time spend.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;noteclassic&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;This article, will explain only necessary internal details just enough for user-space developer. Once complete we will have a clear picture of entire android stack starting from&amp;nbsp;the source tree organisation, architecture component interaction, start up sequence, to how an application is launched.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;
1. Architecture&lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: right; margin-left: 1em; text-align: right;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYsSa23_4JvfNfqzViVYb526JHsctGrJVi26uR1XDCVIFaVnEgkEv78GPDClhnL1cIPyJMla7shyphenhyphenS6Dr6oQcLeJ_YrUcGuzJmEBCve7OghpioPYixXRoV2As1oXcuwGYbUA_NmgEqqyb_l/s1600/Android-System-Architecture.svg.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;323&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYsSa23_4JvfNfqzViVYb526JHsctGrJVi26uR1XDCVIFaVnEgkEv78GPDClhnL1cIPyJMla7shyphenhyphenS6Dr6oQcLeJ_YrUcGuzJmEBCve7OghpioPYixXRoV2As1oXcuwGYbUA_NmgEqqyb_l/s400/Android-System-Architecture.svg.png&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Fig 1 Conceptual Architecture&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;1.1 Kernel&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;A the bottom most level, the host operating system, is the Linux kernel.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Theoretically it could be any host kernel, practically, however it is a difficult task to achieve. Though, Linux kernel is being used, there were many kernel specific patches those were added to support various user level android policies and drivers.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Kernel patches &lt;span style=&quot;font-size: xx-small;&quot;&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Details are skipped)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Wake Locks&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Binder&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Klogger &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Anonymous Share Memory&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Alarm Timers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Low Memory Killer&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Network Security policy &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Other than the patches above, one has to keep in mind, the device manufactures do add custom patches to support their hardware, what is mentioned above are core kernel patches for a android system to work.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Source Tree : k&lt;a href=&quot;https://android.googlesource.com/kernel/common/&quot; target=&quot;_blank&quot;&gt;ernel&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;1.2 Android Runtime&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Consist of the &lt;b&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/dalvik/&quot; target=&quot;_blank&quot;&gt;Dalvik virtual machine&lt;/a&gt;&lt;/b&gt;, which is just like JVM on tbe desktop, that executes the android applications we run, &lt;b&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/libcore/luni/&quot; target=&quot;_blank&quot;&gt;Java runtime&lt;/a&gt;&lt;/b&gt;, that comes from the Apache Harmony project, &lt;b&gt;system daemons&lt;/b&gt;, the &lt;b&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/system/core/init/&quot; target=&quot;_blank&quot;&gt;init binary&lt;/a&gt;&lt;/b&gt;&amp;nbsp; and various supporting binaries. Dalvik virtual machine executes &lt;b&gt;dex &lt;/b&gt;files instead of class files. dex files are generated by post processing class files with &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/dalvik/dx/&quot; target=&quot;_blank&quot;&gt;dx&lt;/a&gt;&amp;nbsp;utility. &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Oracle Java &amp;nbsp; &amp;nbsp;= Java Language &amp;nbsp; &amp;nbsp;+ class file +&amp;nbsp;JVM &amp;nbsp; &amp;nbsp;+ JRE libs&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Android Java = Java Language &amp;nbsp; &amp;nbsp;+ dex file &amp;nbsp;&amp;nbsp;+ DVM &amp;nbsp;+ Apache Harmony Project&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Most of the &lt;b&gt;java.* , org.w3c.* junit.* org.json.*&lt;/b&gt; in the &lt;a href=&quot;https://developer.android.com/reference/packages.html&quot; target=&quot;_blank&quot;&gt;android API&lt;/a&gt;&amp;nbsp;comes from here, including the sql jdbc driver&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Source Tree: l&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/libcore/&quot; target=&quot;_blank&quot;&gt;ibcore&lt;/a&gt;&amp;nbsp;, &amp;nbsp;d&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/dalvik/&quot; target=&quot;_blank&quot;&gt;alvik&lt;/a&gt;&amp;nbsp;, s&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/system/&quot; target=&quot;_blank&quot;&gt;ystem&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;1.3 Libraries&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;This is where, the 3rd party native libraries (C/C++) are hosted, they act as a support layer for low level access from the java libraries, it consist of google developed C library called &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/bionic/&quot; target=&quot;_blank&quot;&gt;Bionic&lt;/a&gt;, it is stripped down library from BSD standard C library. Bionic isn&#39;t compliance with POSIX, so native (non java) application and library porting from POSIX system is a hurdle. Though only few libraries have been mentioned in the diagram, it consist of more, starting from libusb to webRTC, kindly see the &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/external/&quot; target=&quot;_blank&quot;&gt;source tree&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;The Application frame work access these libraries via JNI , one such example to site would be sqlite, we will see a source relation, check the links&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/database/sqlite/&quot; target=&quot;_blank&quot;&gt;Application Framework Sqlite Interface&lt;/a&gt;&amp;nbsp;&lt;b&gt;-&amp;gt;&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/jni/android_database_SQLiteCommon.h&quot; target=&quot;_blank&quot;&gt;Sql-Lite-JNI&lt;/a&gt;&amp;nbsp;&lt;b&gt;-&amp;gt;&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/external/sqlite/dist/&quot; target=&quot;_blank&quot;&gt;Sql-Lite-Native-Library&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;So, in nutshell, these libraries are accessed by the application frame work via JNI. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Source Tree: &amp;nbsp;e&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/external/&quot; target=&quot;_blank&quot;&gt;xternal&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;1.4 Application Framework&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Ah, finally we are at the top, the &lt;b&gt;android.*&lt;/b&gt;&amp;nbsp;APIs you see in the &lt;a href=&quot;https://developer.android.com/reference/packages.html&quot; target=&quot;_blank&quot;&gt;Android API reference&lt;/a&gt;&amp;nbsp;sprouts from here, this is what we mostly use while developing an android applications. Framework don&#39;t just consist of developer apis, but, various services and interfaces to communicate with them. Services are not directly accessible via framework , however, via kernel supported mechanism called &lt;b&gt;Binder&lt;/b&gt;. In short&amp;nbsp;&lt;b&gt;andorid.* &amp;nbsp;&lt;/b&gt;APIs connected to service / system server via binder. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Source Tree: f&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/&quot; target=&quot;_blank&quot;&gt;ramework&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;1.5 Applications&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;There is were we have all the fun, we use the SDKs to access these framework APIs to develop the applications. Most of the application developers play here. There are other species of developers who hack the frameworks , android services and even the kernel subsystem to build custom roms, one such community is the &lt;a href=&quot;http://www.cyanogenmod.org/&quot; target=&quot;_blank&quot;&gt;CyanaogenMOD&lt;/a&gt;, we should say they are the first class android developers and us to be economy developers. ;-). Most android devices have set of default applications like dialers, mms, browsers you can find its source tree over &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/packages/apps/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;2. Android Hardware Abstraction Layer&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Kernel does provide HAL , however Google engineers felt it wasn&#39;t enough, one reason could be GPL license that the kernel has. So, in order to make device manufacturers implement non GPLed drivers in the user space, this may be a favorable choice.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/hardware/libhardware/&quot; target=&quot;_blank&quot;&gt;Libhardware&lt;/a&gt;&amp;nbsp;provides interface for various devices and sensors, the device manufacturers can develop drivers in closed source environment, complying to these interfaces. Few of the interfaces are listed here.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Audio (libaudio.so) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Graphics (gralloc.so, copybit.so, libhgl.so) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Camera (libcamera.so) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;GPS (libgps.so) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Sensors (libsensors.so) &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Radio Interface (libril-vendor-version.so) &amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;All that the manufacturer has to do is to put their library into&amp;nbsp;/system/libs/hw&lt;span style=&quot;background-color: white; text-align: start;&quot;&gt;/&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;Case Study : &lt;/b&gt;If you like to know how RIL is used for receiving calls, sending sms, receving sms etc take a look into this &lt;a href=&quot;http://stackoverflow.com/questions/11111067/how-does-modem-code-talk-to-android-code&quot; target=&quot;_blank&quot;&gt;answer&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;3. Android File System&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Android though is Linux based doesn&#39;t strictly abide to the &lt;a href=&quot;http://www.linuxfoundation.org/collaborate/workgroups/lsb/fhs&quot; target=&quot;_blank&quot;&gt;FHS&lt;/a&gt;&amp;nbsp;, instead has a custom hierarchy&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Immutable directory coming from the original build.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; It contains native binaries and libraries, framework jar  files,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration  files, standard apps, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/app&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;All the pre-installed apps&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/bin&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Binaries installed on the system (toolbox, vold, surfaceflinger)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/etc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Configuration files&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/fonts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fonts installed on the system&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/framework&amp;nbsp; Jar fi les for the framework&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/lib&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Shared objects for the system libraries&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/modules&amp;nbsp; &amp;nbsp; &amp;nbsp; Kernel modules&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/system/xbin&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; External binaries&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/data&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; changing content of the system are put:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; apps, data added by the user, data generated by all the apps at runtime, etc.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/etc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Symbolic link to /system/etc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/dev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Mount point for tmpfs filesystem&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/proc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Mount point for procfs filesystem which provide access to kernel data structures&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/sbin &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contains various daemons&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; As usual the root home directory&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/mnt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Mount point for external and internal filesystems&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and some security related filessytem&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/sys &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Mount point for sysfs filesystem which has information on&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; kernel&#39;s device objects&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/sdcard &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Symbolic link to&amp;nbsp;/mnt/sdcard&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/cache &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Used by application to save data&amp;nbsp;temporarily like Google Play Store download etc&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/d &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Symbolic link to /sys/kernel/debug &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/acct &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Mount point for the acct cgroup (control group),&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; which provides for user accounting.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;/vendor &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Symbolic link to&amp;nbsp;/system/vendor&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; text-align: justify;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;4.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;Source Code Organisation Overview&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;bionic/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is where Android&#39;s standard C library is stored&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;bootable/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contains code samples regarding the boot of an Android device. In this folder,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;you will find the protocol used by all Android bootloaders and a recovery image&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;build/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;holds the core components of the build system&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;cts/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; The Compatibility Test Suite&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;dalvik/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contains the source code of the Dalvik virtual machine&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;development/ holds the development tools, debug applications, API samples, etc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;device/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contains the device-speci c components&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;external/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is one of the largest folders in the source code, it contains all the external&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;projects used in the Android code&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;frameworks/ &amp;nbsp; holds the source code of the various parts of the framework&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;hardware/ &amp;nbsp; &amp;nbsp; &amp;nbsp; contains all the hardware abstraction layers&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;libcore/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is the Java core library&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;ndk/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is the place where you will  nd the Native Development Kit, which allows to build native&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;applications for Android&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;packages/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contains the standard Android applications&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;prebuilt/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;holds all the prebuilt binaries, most notably the toolchains&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;sdk/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is where you will  nd the Software Development Kit&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;system/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; contains all the basic pieces of the Android system: init, shell, the volume manager, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;5. System Startup&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-rCWzFn_PX59jnXaGqoQ13YHomq-d-fpTR5q6H9-IQgsUdIKObacQM-fwPztIeER8ROO7x6JjnLdwSXR_ISPLfwE1eDpkLLhpotpGlj7rP7Ge4TLz2PSkEmVx0q3-UYMY0iprePiiPF8p/s1600/Screenshot+from+2013-07-22+19:58:19.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;294&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-rCWzFn_PX59jnXaGqoQ13YHomq-d-fpTR5q6H9-IQgsUdIKObacQM-fwPztIeER8ROO7x6JjnLdwSXR_ISPLfwE1eDpkLLhpotpGlj7rP7Ge4TLz2PSkEmVx0q3-UYMY0iprePiiPF8p/s320/Screenshot+from+2013-07-22+19:58:19.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;Fig 2. start up sequence&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Start up sequence till init is quite straight forward, this is similar usual x86 boot process, finally calling &lt;b&gt;&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/system/core/init/init.c&quot; target=&quot;_blank&quot;&gt;Init&lt;/a&gt; , &lt;/b&gt;however&amp;nbsp;Android system differs starting from the init sequence. The init itself was written from scratch and not same as the one seen on Linux distribution.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Once the kernel start /init process, it reads the file name &lt;b&gt;/init.rc &lt;/b&gt;and&lt;b&gt; /init.(machine-name)&lt;/b&gt;&lt;machine-name&gt;&lt;b&gt;.rc&lt;/b&gt; , these rc script, first of all sets the environment variables, &amp;nbsp;mounts various file system to its respective mount points, starts various daemons like rild (radio interface layer daemon), adb , vold, netd etc. Init become mother of all the process created subsequently. The next&lt;b&gt; core &lt;/b&gt;job of init is to start up the &lt;b&gt;Zygote&lt;/b&gt;, which is the &lt;i&gt;mother of all the android applications&lt;/i&gt;.&amp;nbsp;&lt;/machine-name&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Lets take a deeper view into Zygote start up,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Init runs the &lt;b&gt;/system/bin/app_process&lt;/b&gt; and name it &lt;b&gt;zygote&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); font-size: 13px; line-height: 1.3em; padding: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;The entry above from ./init.rc that start the &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp&quot; target=&quot;_blank&quot;&gt;app_process&lt;/a&gt;&amp;nbsp;to startup the zygote.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times new roman&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
As seen in the source line &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#188&quot; target=&quot;_blank&quot;&gt;188&lt;/a&gt;&amp;nbsp;of &lt;i&gt;app_main.cpp&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#188&quot; name=&quot;188&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; width: 5ex;&quot;&gt;188&lt;/a&gt;    &lt;b&gt;if&lt;/b&gt; (&lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#zygote&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;zygote&lt;/a&gt;) {
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#189&quot; name=&quot;189&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;189&lt;/a&gt;        &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#runtime&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;runtime&lt;/a&gt;.&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=start&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;start&lt;/a&gt;(&lt;span class=&quot;s&quot; style=&quot;color: green;&quot;&gt;&quot;com.android.internal.os.ZygoteInit&quot;&lt;/span&gt;,
&lt;a class=&quot;hl&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#190&quot; name=&quot;190&quot; style=&quot;background-color: #dddddd; color: black; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;190&lt;/a&gt;                &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#startSystemServer&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;startSystemServer&lt;/a&gt; ? &lt;span class=&quot;s&quot; style=&quot;color: green;&quot;&gt;&quot;start-system-server&quot;&lt;/span&gt; : &lt;span class=&quot;s&quot; style=&quot;color: green;&quot;&gt;&quot;&quot;&lt;/span&gt;);
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/cmds/app_process/app_main.cpp#191&quot; name=&quot;191&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;191&lt;/a&gt;    }&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: start;&quot;&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;It start up the java implementation of &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java&quot;&gt;Zygote&lt;/a&gt; , and &#39;start-system-server&#39; flag is passed as the parameter. This is exactly what we had passed in the entry from the init.rc. The line 189 does many other tasks under the hood, the runtine.&lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/include/android_runtime/AndroidRuntime.h#67&quot;&gt;start()&lt;/a&gt; at line &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/jni/AndroidRuntime.cpp#839&quot;&gt;839&lt;/a&gt; start up up the Dalvik virtual machine, see line &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/jni/AndroidRuntime.cpp#443&quot;&gt;443&lt;/a&gt;&amp;nbsp;of &lt;i&gt;AndroidRuntime.cpp&lt;/i&gt;&amp;nbsp;for more information.Ahead of zygote invocation, Dalvik runtime was setup and Dalvik virtual machine was initialized. ZygoteInit::main() get called at line &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/jni/AndroidRuntime.cpp#888&quot;&gt;888&lt;/a&gt;&amp;nbsp;of &lt;i&gt;AndroidRuntime.cpp&lt;/i&gt; , which start up the &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/services/java/com/android/server/SystemServer.java&quot;&gt;System Server&lt;/a&gt; this can be seen at line &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#544&quot;&gt;544&lt;/a&gt; of &lt;i&gt;ZygoteInit.java&lt;/i&gt;, finally it runs &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#555&quot;&gt;runSelectLoopMode()&lt;/a&gt;&amp;nbsp;and waits for future request to fork() new zygote instances &lt;b&gt;&lt;i&gt;which specialize into the android application&lt;/i&gt;&lt;/b&gt;.The System server is started in a two sequence process , first a libary is called to initialize the native services, which can be seen at line &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/services/java/com/android/server/SystemServer.java#1064&quot;&gt;1064&lt;/a&gt;&amp;nbsp;of &lt;i&gt;SystemServer.java&lt;/i&gt; , then java based core services are run by &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/services/java/com/android/server/SystemServer.java#88&quot;&gt;ServerThread::run()&lt;/a&gt; which is seen at like &lt;a href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/services/java/com/android/server/SystemServer.java#1067&quot;&gt;1067&lt;/a&gt;&amp;nbsp;of &lt;i&gt;SystemServer.java&lt;/i&gt;. Check the source to find out the sequence of the services started, core services line the &lt;b&gt;PowerManager&lt;/b&gt;, &lt;b&gt;ActivityManager&lt;/b&gt;, &lt;b&gt;Sensor Service&lt;/b&gt; etc and other non critical services are started this way. The main being the AcitivityManager, which handles the our Andorid Application.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: start;&quot;&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: justify;&quot;&gt;&lt;pre style=&quot;border: 0px; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#501&quot; name=&quot;501&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;501&lt;/a&gt;            &lt;span class=&quot;c&quot; style=&quot;color: #666666;&quot;&gt;/* Request to fork the system server process */&lt;/span&gt;
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#502&quot; name=&quot;502&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;502&lt;/a&gt;            &lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=pid&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;pid&lt;/a&gt; = &lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=Zygote&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;Zygote&lt;/a&gt;.&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=forkSystemServer&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;forkSystemServer&lt;/a&gt;(
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#503&quot; name=&quot;503&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;503&lt;/a&gt;                    &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#parsedArgs&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;parsedArgs&lt;/a&gt;.&lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#uid&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;uid&lt;/a&gt;, &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#parsedArgs&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;parsedArgs&lt;/a&gt;.&lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#gid&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;gid&lt;/a&gt;,
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#504&quot; name=&quot;504&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;504&lt;/a&gt;                    &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#parsedArgs&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;parsedArgs&lt;/a&gt;.&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=gids&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;gids&lt;/a&gt;,
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#505&quot; name=&quot;505&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;505&lt;/a&gt;                    &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#parsedArgs&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;parsedArgs&lt;/a&gt;.&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=debugFlags&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;debugFlags&lt;/a&gt;,
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#506&quot; name=&quot;506&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;506&lt;/a&gt;                    &lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=null&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;null&lt;/a&gt;,
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#507&quot; name=&quot;507&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;507&lt;/a&gt;                    &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#parsedArgs&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;parsedArgs&lt;/a&gt;.&lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#permittedCapabilities&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;permittedCapabilities&lt;/a&gt;,
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#508&quot; name=&quot;508&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;508&lt;/a&gt;                    &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#parsedArgs&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;parsedArgs&lt;/a&gt;.&lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#effectiveCapabilities&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;effectiveCapabilities&lt;/a&gt;);
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#509&quot; name=&quot;509&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;509&lt;/a&gt;        } &lt;b&gt;catch&lt;/b&gt; (&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=IllegalArgumentException&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;IllegalArgumentException&lt;/a&gt; &lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=ex&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;ex&lt;/a&gt;) {
&lt;a class=&quot;hl&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#510&quot; name=&quot;510&quot; style=&quot;background-color: #dddddd; color: black; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;510&lt;/a&gt;            &lt;b&gt;throw&lt;/b&gt; &lt;b&gt;new&lt;/b&gt; &lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=RuntimeException&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;RuntimeException&lt;/a&gt;(&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=ex&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;ex&lt;/a&gt;);
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#511&quot; name=&quot;511&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;511&lt;/a&gt;        }
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#512&quot; name=&quot;512&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;512&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: justify;&quot;&gt;&lt;/pre&gt;
&lt;pre style=&quot;border: 0px;&quot;&gt;&lt;pre style=&quot;border: 0px; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#544&quot; name=&quot;544&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;544&lt;/a&gt;            &lt;b&gt;if&lt;/b&gt; (&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=argv&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;argv&lt;/a&gt;[&lt;span class=&quot;n&quot; style=&quot;color: brown;&quot;&gt;1&lt;/span&gt;].&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=equals&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;equals&lt;/a&gt;(&lt;span class=&quot;s&quot; style=&quot;color: green;&quot;&gt;&quot;start-system-server&quot;&lt;/span&gt;)) {
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#545&quot; name=&quot;545&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;545&lt;/a&gt;                &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#startSystemServer&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;startSystemServer&lt;/a&gt;();
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#546&quot; name=&quot;546&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;546&lt;/a&gt;            } &lt;b&gt;else&lt;/b&gt; &lt;b&gt;if&lt;/b&gt; (!&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=argv&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;argv&lt;/a&gt;[&lt;span class=&quot;n&quot; style=&quot;color: brown;&quot;&gt;1&lt;/span&gt;].&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=equals&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;equals&lt;/a&gt;(&lt;span class=&quot;s&quot; style=&quot;color: green;&quot;&gt;&quot;&quot;&lt;/span&gt;)) {
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#547&quot; name=&quot;547&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;547&lt;/a&gt;                &lt;b&gt;throw&lt;/b&gt; &lt;b&gt;new&lt;/b&gt; &lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=RuntimeException&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;RuntimeException&lt;/a&gt;(&lt;a href=&quot;http://androidxref.com/4.2.2_r1/s?defs=argv&amp;amp;project=frameworks&quot; style=&quot;color: #202062; text-decoration: none;&quot;&gt;argv&lt;/a&gt;[&lt;span class=&quot;n&quot; style=&quot;color: brown;&quot;&gt;0&lt;/span&gt;] + &lt;a class=&quot;d&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#USAGE_STRING&quot; style=&quot;color: #990099; font-weight: bold; text-decoration: none;&quot;&gt;USAGE_STRING&lt;/a&gt;);
&lt;a class=&quot;l&quot; href=&quot;http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#548&quot; name=&quot;548&quot; style=&quot;background-color: #dddddd; color: #666666; display: inline-block; margin-right: 0.2em; padding-right: 1ex; text-align: right; text-decoration: none; width: 5ex;&quot;&gt;548&lt;/a&gt;            }&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;                   Code Snippet Showing How System Server is started
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times new roman&amp;quot;;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: 0px; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times new roman&amp;quot;;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Ah finally we have reached the end, &amp;nbsp;though this was quick introduction into the android internals, it is my humble opinion that , information above would be sufficient enough to get you started with griping the Android APIs. This introduction will hopefully help you understand the relations and component interaction, which would make android application programming more exiting. Where go from here ? Now you can start reading &lt;a href=&quot;https://developer.android.com/guide/components/fundamentals.html&quot; target=&quot;_blank&quot;&gt;Application Fundamentals&lt;/a&gt; from the android main resource, trust me, many things will make more sense now.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Reference&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;[1]&amp;nbsp;&lt;a href=&quot;http://free-electrons.com/training/android/&quot; target=&quot;_blank&quot;&gt;Free Electrons Android System Development Training&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;[2]&amp;nbsp;&lt;a href=&quot;http://www.slideshare.net/opersys/android-internals&quot; target=&quot;_blank&quot;&gt;Android Internals Karim Yaghmour Slides&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;[3]&lt;a href=&quot;http://elinux.org/Category:Android&quot; target=&quot;_blank&quot;&gt; Elinux Android&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/5349432369661995187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2013/07/android-internals-just-what-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/5349432369661995187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/5349432369661995187'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2013/07/android-internals-just-what-application.html' title='Android Internals : just what application developers needs to know '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8PId-jDz9v5m3HvNAcihStyCXh5e5u902R6V2SFGkcIHSL0CLuonPQE-9SXIiyFWdRrw1KNFPpLMMhxn3yY4WSGDZdGraJPY_WVNYkRCetoFiESOFig0B6E2X0IGxv_Ej6E7xMRNwzz0_/s72-c/rda.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-261669508986068096</id><published>2017-02-17T09:30:00.000+05:30</published><updated>2017-04-18T10:20:20.516+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="software-engineering"/><title type='text'>Git Build Number Generator</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;This tool generate version or build information in a source file format from a pointing local git repository, during the pre-build phase. Currently only supports java code generation. However can be extended to a more generic plugin based system to support other programming languages.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Tool favors command line arguments instead of configuration files to read the parameters, this decision is to speed up the tool, as this tool may be run numbers of times in a time slice.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;You can use this in your build script in pre build phase, use in eclipse without a build script is just a use case. Policy of when to run is left to your creativity.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Usage&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;gbn git-repo-directory version-file-directory package-name &lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;git-repo-directory : Absolute path to local .git directory&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;version-file-directory : Absolute path to the directory, to place version source file&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;package-name : Java package name&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;eg: gbn /home/myhome/gbn/.git /home/myhome/gbn/src/com/alkber/gbn/version/&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;com.alkber.gbn.version&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;- VersionInfo.java -
package com.alkber.gbn.version;
/*
 * This is an auto generated file, modifications will not persist.
 * 2013/09/22 08:48:52
 */ 
public class VersionInfo {
                                                            
    public static final String buildNumber = &quot;master.11.71740cc&quot;;
    public static final String branch = &quot;master&quot;;
    public static final String commit = &quot;11&quot;;
    public static final String version = &quot;71740cc639811a5c4249f4344fe5e8586a7a494b&quot;;
    public static final String shortVersion = &quot;71740cc&quot;;
                                                            
}
- VersionInfo.java -&lt;/pre&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;noteclassic&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;It is highly advised to place .gitingore in the version-file-directory with .gitingnore content being &#39;VersionInfo.java&#39;. As this file is updated frequently, it may cause git issues during commit and merge.Further to avoid git issues ignore the *class files.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h2&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;
Simplest Use Case&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;In eclipse, Goto Project-&amp;gt;Properties-&amp;gt;Builders , create a new builder&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Location: [ path to java binary ]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;eg: [ /home/myhome/bin/dk1.7.0_25/bin/java ]
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Arguments: [ arguments to java binary]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;eg: java -jar /home/myhome/bin/gbn.jar \ 
/home/myhome/git/Click2Limo/.git \ 
/home/myhome/git/Click2Limo/Click2Limo/src/com/frooday/click2limo/version/ \ 
com.frooday.click2limo.version&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;In the refresh tab of new builder setting specify the resource ie our version source file to be refreshed when ever tool is run.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;In Build Options tab,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Enable-&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Allocate Console&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;During Manual Build&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;During Auto Build&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;During Clean&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a href=&quot;https://github.com/alkber/GitBuildNumberGenerator/blob/master/GitBuildNumberGenerator/build/gbn.jar&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Download Jar&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a href=&quot;https://github.com/alkber/GitBuildNumberGenerator&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Source&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/261669508986068096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2013/09/git-build-number-generator_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/261669508986068096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/261669508986068096'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2013/09/git-build-number-generator_23.html' title='Git Build Number Generator'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-5357239075822896994</id><published>2017-02-15T15:13:00.000+05:30</published><updated>2017-04-18T10:18:38.560+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithms"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Java : convert milliseconds hours, minutes, seconds ,days</title><content type='html'>&lt;div style=&quot;background-color: white; border: 0px; clear: both; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;&quot;&gt;
An example using built in&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; font-size: 13px; margin: 0px; padding: 1px 5px; white-space: pre-wrap;&quot;&gt; &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html&quot; rel=&quot;nofollow&quot; style=&quot;border: 0px; color: #0c65a5; cursor: pointer; margin: 0px; padding: 0px; text-decoration: none;&quot;&gt;TimeUnit&lt;/a&gt; &lt;/code&gt;.&lt;/div&gt;
&lt;pre class=&quot;lang-java prettyprint prettyprinted&quot; style=&quot;background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;                            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; uptime &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;currentTimeMillis&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

                            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; days &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;MILLISECONDS
                                    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toDays&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;uptime&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                            uptime &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;-=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;DAYS&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toMillis&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

                            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; hours &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;MILLISECONDS
                                    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toHours&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;uptime&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                            uptime &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;-=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;HOURS&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toMillis&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

                            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; minutes &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;MILLISECONDS
                                    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toMinutes&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;uptime&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;
                            uptime &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;-=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;MINUTES&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toMillis&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;

                            &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;border: 0px; color: darkblue; margin: 0px; padding: 0px;&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; seconds &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;border: 0px; color: #2b91af; margin: 0px; padding: 0px;&quot;&gt;TimeUnit&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;MILLISECONDS
                                    &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;toSeconds&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;uptime&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;background-color: #eeeeee; border: 0px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;&quot;&gt;
&lt;code style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;&quot;&gt;&lt;span class=&quot;pun&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;consolas&amp;quot; , &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;liberation mono&amp;quot; , &amp;quot;dejavu sans mono&amp;quot; , &amp;quot;bitstream vera sans mono&amp;quot; , &amp;quot;courier new&amp;quot; , monospace , sans-serif;&quot;&gt;uptime:22hr 15min&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;consolas&amp;quot; , &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;liberation mono&amp;quot; , &amp;quot;dejavu sans mono&amp;quot; , &amp;quot;bitstream vera sans mono&amp;quot; , &amp;quot;courier new&amp;quot; , monospace , sans-serif;&quot;&gt;40sec&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;consolas&amp;quot; , &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;liberation mono&amp;quot; , &amp;quot;dejavu sans mono&amp;quot; , &amp;quot;bitstream vera sans mono&amp;quot; , &amp;quot;courier new&amp;quot; , monospace , sans-serif;&quot;&gt;14 days&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span class=&quot;pun&quot; style=&quot;border: 0px; color: black; margin: 0px; padding: 0px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/5357239075822896994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2015/05/java-convert-milliseconds-seconds-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/5357239075822896994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/5357239075822896994'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2015/05/java-convert-milliseconds-seconds-to.html' title='Java : convert milliseconds hours, minutes, seconds ,days'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-8302726435363408499</id><published>2017-02-13T09:06:00.000+05:30</published><updated>2017-04-18T10:17:21.681+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Android and Microsoft SQL (MS SQL SERVER 2008) marriage </title><content type='html'>&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;All you have to do is use the appropriate driver, being a opensource fan , i&#39;d recommend using&amp;nbsp;&lt;a href=&quot;http://jtds.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;JTDS&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Instructions below assumes you are using&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Android Developer Tools Build id: v22.0.1-685705,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Eclipse Version: 4.2.1.v20130118 Build id: M20130204-1200&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/jtds/files/jtds/1.2.5/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;JTDS 1.2.5&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Though things will work out other versions higher than this and possibly lower as well , its just to ensure a known state where things worked out.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;So, once the JTDS is jar is download, first step is to include jar to your build path&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvG8ZqJV9RJLlK_yKtYiUThz4MYjWEl69636v1ZSTueqqKnF3gCC5U3c32Btubzg4bGEbW7Vlohbpze6sGNs2N0WrpHNf0bfjTHvHJaTZ05CsH-J0720kZkwn6tIC06izh21lwCOTqXJrj/s1600/Screenshot+from+2013-10-30+08:35:25.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvG8ZqJV9RJLlK_yKtYiUThz4MYjWEl69636v1ZSTueqqKnF3gCC5U3c32Btubzg4bGEbW7Vlohbpze6sGNs2N0WrpHNf0bfjTHvHJaTZ05CsH-J0720kZkwn6tIC06izh21lwCOTqXJrj/s1600/Screenshot+from+2013-10-30+08:35:25.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Next, it seems like a &lt;a href=&quot;http://commonsware.com/blog/2013/05/23/do-not-manually-modify-eclipse-build-path-except-now-r22.html&quot; target=&quot;_blank&quot;&gt;bug&lt;/a&gt;, go to order and Export tab and enable jtds&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSe9bH1Ha-397VgP8rL_34YmF5Ihngu1CaMmT26H51iGoCpkHBtA2Kr2yJp9-BZa7evoZEidR0ytwpnbsjHte7WarA9yZCi1Vou0Nn5E7tQQvGBZKWdqnDWh6lpuGgHXHIkvmRll2oYwj/s1600/Screenshot+from+2013-10-30+08:34:29.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSe9bH1Ha-397VgP8rL_34YmF5Ihngu1CaMmT26H51iGoCpkHBtA2Kr2yJp9-BZa7evoZEidR0ytwpnbsjHte7WarA9yZCi1Vou0Nn5E7tQQvGBZKWdqnDWh6lpuGgHXHIkvmRll2oYwj/s1600/Screenshot+from+2013-10-30+08:34:29.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;noteimportant&quot;&gt;
&lt;span font-family:=&quot;&quot; ms=&quot;&quot; quot=&quot;&quot; sans-serif=&quot;&quot; style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot; trebuchet=&quot;&quot;&gt;Since the database connection operation is networked related, all network operations should be in different thread away from the main UI thread, &amp;nbsp;so use &amp;nbsp;&lt;a href=&quot;http://developer.android.com/reference/android/os/AsyncTask.html&quot; target=&quot;_blank&quot;&gt;AsyncTask&lt;/a&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Working code is can be downloaded from &lt;a href=&quot;https://github.com/alkber/AndroidByExample/tree/master/AndroidMSSQL2008&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; , read the code, it is well documented.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: white; color: #f14e32; font-size: 14.44444465637207px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;

&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;git@github.com:alkber/AndroidByExample.git
&lt;/span&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/8302726435363408499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2013/10/android-and-microsoft-sql-ms-sql-server.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8302726435363408499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8302726435363408499'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2013/10/android-and-microsoft-sql-ms-sql-server.html' title='Android and Microsoft SQL (MS SQL SERVER 2008) marriage '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvG8ZqJV9RJLlK_yKtYiUThz4MYjWEl69636v1ZSTueqqKnF3gCC5U3c32Btubzg4bGEbW7Vlohbpze6sGNs2N0WrpHNf0bfjTHvHJaTZ05CsH-J0720kZkwn6tIC06izh21lwCOTqXJrj/s72-c/Screenshot+from+2013-10-30+08:35:25.png" height="72" width="72"/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-1879084364529120094</id><published>2017-02-12T21:02:00.000+05:30</published><updated>2017-04-18T10:22:11.264+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="maths"/><title type='text'>How to remember of relationships exponent, log and root ?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS3lb0iXKPxxwnSpGT4AITQt8Hek2E9H8Q1PA1gkljFcY7ZmpnnEDimD3tRAUGjAg13ia65dOAAY_NZ9uq9i1zAGciaMqC244DQ1f5dcHrDOIQ2g2RL5DIYOi6vI58MKREI8sjCpdIvomu/s1600/log_root_power.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS3lb0iXKPxxwnSpGT4AITQt8Hek2E9H8Q1PA1gkljFcY7ZmpnnEDimD3tRAUGjAg13ia65dOAAY_NZ9uq9i1zAGciaMqC244DQ1f5dcHrDOIQ2g2RL5DIYOi6vI58MKREI8sjCpdIvomu/s400/log_root_power.png&quot; width=&quot;338&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
There is a common relation between exponent, log and root, &amp;nbsp;to know more about the intuition between these relation refer&amp;nbsp;&lt;a href=&quot;https://medium.com/i-math/understanding-logarithms-and-roots-2fee92c3317f#.x5qp062u1&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. &amp;nbsp;A simple trick to have all these relation derived is by just imagining this star.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
This is meant for people with dyslexia, usually they get confused about these relation. Since we are really good with photo memory, this approach will help deduce these relations even in mind. &amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
3 binary operators on the vertices of top triangle and 3 operands of bottom&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;^ for the exponent nth power&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;$\sqrt[n]{}$ for the nth root &amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;${\log_n }$ &amp;nbsp;log of nth base&amp;nbsp;&lt;/li&gt;
&lt;li&gt;b&lt;/li&gt;
&lt;li&gt;x&lt;/li&gt;
&lt;li&gt;y&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;clear: both; text-align: left;&quot;&gt;
Steps to find&amp;nbsp;&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Focus at the unknown variable of the context from the vertex of bottom triangle.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Follow the arrow at the the vertex of variable to the operator pointed by the arrow.&lt;/li&gt;
&lt;li&gt;Apply the operation, while taking the operands in the clock wise order.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_oAGDiOk0SPcA5B8guyauKc9NQZ6cNnOjam2EVd95sNKiEWg_yzEBULx7BA8iP1b2w_jeuNagWskQ6YciaWHdDopLD-sRIU3bPikxX_bzixb-JHShIvEZPgUs_Di1DLHVGhIuuPiN3J1X/s1600/log_root_power_b.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_oAGDiOk0SPcA5B8guyauKc9NQZ6cNnOjam2EVd95sNKiEWg_yzEBULx7BA8iP1b2w_jeuNagWskQ6YciaWHdDopLD-sRIU3bPikxX_bzixb-JHShIvEZPgUs_Di1DLHVGhIuuPiN3J1X/s400/log_root_power_b.png&quot; width=&quot;356&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Finding&lt;/b&gt; x = b^y&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Look at x , follow the arrow to the operator in the top triangle here &lt;b&gt;^&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
now apply the operation while taking the operands in the clock wise order&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
so b^y&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Finding&lt;/b&gt; y = ${\log_b x}$&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Look at y, follow the allow to the ${\log }$ now apply the operands in&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
clock wise order ${\log_b x}$&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Finding&lt;/b&gt; b = $\sqrt[y]{x}$&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
left as an exercise to the reader.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/1879084364529120094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2017/01/how-to-remember-of-relationships.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/1879084364529120094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/1879084364529120094'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2017/01/how-to-remember-of-relationships.html' title='How to remember of relationships exponent, log and root ?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS3lb0iXKPxxwnSpGT4AITQt8Hek2E9H8Q1PA1gkljFcY7ZmpnnEDimD3tRAUGjAg13ia65dOAAY_NZ9uq9i1zAGciaMqC244DQ1f5dcHrDOIQ2g2RL5DIYOi6vI58MKREI8sjCpdIvomu/s72-c/log_root_power.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-1780660614843425630</id><published>2017-02-11T22:29:00.000+05:30</published><updated>2017-02-11T22:30:06.727+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="how-to"/><title type='text'>How to use dokuwiki note plugin with blogger ?</title><content type='html'>&lt;div class=&quot;noteclassic&quot;&gt;
This is not exactly porting of docuwiki plugin to blogger, however bare metal approach which works neatly. 
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;I love minimalist approach. If you have observed this blog, it has undergone various iteration to get into my type of theme. Fundamentally i&#39;m inspired from the typeset and the black white dual tone from the research publications. It is so simple and lovely while conveying excellent ideas. Today i&#39;m sharing how to setup blogger to have following note styles. I&#39;m taking the inspiration from &lt;a href=&quot;https://github.com/LarsGit223/dokuwiki_note&quot; target=&quot;_blank&quot;&gt;dokuwiki note&lt;/a&gt; plugin.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Below are the 4 types of pretty note types.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;noteimportant&quot;&gt;
This is a sample of note important.
&lt;/div&gt;
&lt;div class=&quot;notewarning&quot;&gt;
This is a sample of note warning.
&lt;/div&gt;
&lt;div class=&quot;notetip&quot;&gt;
This is a sample of note tip.
&lt;/div&gt;
&lt;div class=&quot;noteclassic&quot;&gt;
This is a sample of note classic.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy the entire CSS into Template &amp;gt; &amp;gt; Edit HTML&lt;br /&gt;
&lt;br /&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;/* end plugin:configmanager */
.noteclassic, .noteimportant, .notewarning, .notetip {
  margin: 2em;
  margin-left: auto;
  margin-right: auto;
  width: 70% !important;
  min-height: 40px;
  clear: both;
  text-align: justify;
  vertical-align: middle;
  border-collapse: collapse;
  padding: 15px 20px 15px 80px;
  background-position: 20px 50%;
  background-repeat: no-repeat;
  -moz-border-radius: 20px;
  -khtml-border-radius: 20px;
  border-radius: 20px;
}
 
.noteclassic {
  /*border: 1px solid #99D;*/
  background-color: #eef;
  background-image: url(https://github.com/alkber/dokuwiki_note/blob/master/images/note.png?raw=true);
}
 
.noteimportant {
  /*border: 1px solid #ff0;*/
  background-color: #ffc;
  background-image: url(https://github.com/alkber/dokuwiki_note/blob/master/images/important.png?raw=true);
}
 
.notewarning {
  /*border: 1px solid #d99;*/
  background-color: #fdd;
  background-image: url(https://github.com/alkber/dokuwiki_note/blob/master/images/warning.png?raw=true);
}
 
.notetip {
  /*border: 1px solid #9d9;*/
  background-color: #dfd;
  background-image: url(https://github.com/alkber/dokuwiki_note/blob/master/images/tip.png?raw=true);
}
&lt;/pre&gt;

To use, when you are composing your blog post choose the &lt;b&gt; HTML&lt;/b&gt; mode. 
Say you want to highlight something with a notetip type.

&lt;pre class=&quot;prettyprint&quot;&gt;
&amp;lt;div class=&amp;quot;notetip&amp;quot;&amp;gt;&lt;br/&gt;This is a sample of note tip.&lt;br/&gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/1780660614843425630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2017/02/how-to-use-dokuwiki-note-plugin-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/1780660614843425630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/1780660614843425630'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2017/02/how-to-use-dokuwiki-note-plugin-with.html' title='How to use dokuwiki note plugin with blogger ?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-4498832760947963456</id><published>2017-02-10T18:23:00.000+05:30</published><updated>2017-02-10T18:23:12.377+05:30</updated><title type='text'>Found my L.K.G certificate ! yay </title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkACCHZ2FxeYXPvcHi5SyBtFXkfOKx_rg-8ULDU5EjQs9cJ_k0t7xnZUccR4Y0OP6GsrJe6SoJD2IxO7Chk5uadRR3YUF-dMuHud1RiUQ2dxCp-37LRdB2tXKZ1NehSydEuT3eJNgcCJZG/s1600/Untitled.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkACCHZ2FxeYXPvcHi5SyBtFXkfOKx_rg-8ULDU5EjQs9cJ_k0t7xnZUccR4Y0OP6GsrJe6SoJD2IxO7Chk5uadRR3YUF-dMuHud1RiUQ2dxCp-37LRdB2tXKZ1NehSydEuT3eJNgcCJZG/s640/Untitled.jpeg&quot; width=&quot;504&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
It his really nostalgic to find our old things. I love the old texture and fragrance of the paper with golden fade. It bring back a lot of memories. We can take pride in the fact that we are the proud owner of paper that existed in 90s. I don&#39;t know if L.K.G is something known internationally. That expands to Little Kinder Garten.&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/4498832760947963456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2017/02/found-my-lkg-certificate-yay.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/4498832760947963456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/4498832760947963456'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2017/02/found-my-lkg-certificate-yay.html' title='Found my L.K.G certificate ! yay '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkACCHZ2FxeYXPvcHi5SyBtFXkfOKx_rg-8ULDU5EjQs9cJ_k0t7xnZUccR4Y0OP6GsrJe6SoJD2IxO7Chk5uadRR3YUF-dMuHud1RiUQ2dxCp-37LRdB2tXKZ1NehSydEuT3eJNgcCJZG/s72-c/Untitled.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-2578506483772410509</id><published>2015-11-13T21:04:00.000+05:30</published><updated>2017-02-10T15:27:06.538+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><title type='text'>UNIX (tm) Version History</title><content type='html'>&lt;a href=&quot;http://www.unix.org/images/unix_plate-med.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://www.unix.org/images/unix_plate-med.jpg&quot; style=&quot;cursor: pointer; float: right; height: 224px; margin: 0pt 0pt 10px 10px; width: 442px;&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Well this about history of UNIX,main reason to write this is because of confusion about various versions and how they came to be.What ever  given below are not my keystrokes rather from distributed sources like Wikipedia and others. What make this blog different , well i have compiled only necessary information for understanding version confusion.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;---&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Unix (officially trademarked as UNIX, sometimes also written as Unix with small caps) is a computer operating system originally developed in 1969 by a group of&lt;span style=&quot;color: #cc0000;&quot;&gt; &lt;span style=&quot;font-style: italic;&quot;&gt;AT&amp;amp;T employees at Bell Labs&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: red; font-style: italic;&quot;&gt;including Ken Thompson, Dennis Ritchie, Douglas McIlroy, and Joe Ossanna&lt;/span&gt;.As of 2007, the owner of the trademark is The &lt;span style=&quot;color: #009900;&quot;&gt;Open Group&lt;/span&gt;.Only systems fully compliant with and certified to the Single UNIX Specification are qualified to use the trademark; others are called &quot;Unix system-like&quot; or &quot;Unix-like&quot;.Commercial start ups, the most notable of which are Solaris, HP-UX, AIX, and Mac OS X.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;AT&amp;amp;T made Unix available to universities and commercial firms, as well as the United States government &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;under licenses&lt;/span&gt;. The licenses included all &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;source code including the machine-dependent parts&lt;/span&gt; of the kernel, which were written in PDP-11 assembly code. Copies of the annotated Unix kernel sources circulated widely in the late 1970s in the form of a much-copied book by John Lions of the University of New South Wales, the Lions&#39; Commentary on UNIX 6th Edition, with Source Code, which led to considerable use of Unix as an educational example.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;span style=&quot;color: red; font-style: italic;&quot;&gt;Version 5 and especially Version 6 led to a plethora of different Unix versions.&lt;/span&gt;  &lt;span style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;Version 7 Unix, the last version of Research Unix to be released widely&lt;/span&gt;,&lt;/span&gt; was released in 1979. &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;Ve&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;rsions 8, 9 and 10 were developed through the 1980s but were only released to a few universities&lt;/span&gt;&lt;/span&gt;.&lt;span style=&quot;color: red; font-style: italic;&quot;&gt;AT&amp;amp;T licensed UNIX System III, based largely on Version 7, for commercial use&lt;/span&gt;, the first version launching in 1982. This also included support for the VAX. AT&amp;amp;T continued to issue licenses for older Unix versions.&lt;span style=&quot;color: red; font-style: italic;&quot;&gt;To end the confusion between all its differing internal versions, AT&amp;amp;T combined them into UNIX System V Release 1.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Since the newer commercial UNIX licensing terms were not as favorable for academic use as the older versions of Unix, the &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;Berkeley researchers continued to develop BSD Unix&lt;/span&gt; as an alternative to UNIX System III and V.the most important aspect of the BSD development effort was the addition of TCP/IP network code to the mainstream Unix kernel.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Other companies began to offer commercial versions of the UNIX System for their own mini-computers and workstations. &lt;span style=&quot;font-style: italic;&quot;&gt;Most of these new Unix flavors were developed from the System V base under a license from AT&amp;amp;T&lt;/span&gt;; however, others were based on BSD instead. One of the leading developers of BSD, Bill Joy, went on toco-found Sun Microsystems in 1982 and created SunOS for their workstation computers.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;In 1991, a group of BSD developers (Donn Seeley, Mike Karels, Bill Jolitz, and Trent Hein) left the University of California to found Berkeley Software Design, Inc (BSDI). BSDI produced a fully functional commercial version of BSD Unix for the inexpensive and ubiquitous Intel platform, which started a wave of interest in the use of inexpensive hardware for production computing. Shortly after it was founded, &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;Bill Jolitz left BSDI to pursue distribution of 386BSD, the free software ancestor of FreeBSD, OpenBSD, and NetBSD&lt;/span&gt;.A free derivative of BSD Unix, 386BSD, was also released in 1992 and led to the NetBSD and FreeBSD projects.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;With the 1994 settlement of a lawsuit that UNIX Systems Laboratories brought against the University of California and Berkeley Software Design Inc. (USL v. BSDi), it was clarified that Berkeley had the right to distribute BSD Unix ¿ for free, if it so desired. Since then, BSD Unix has been developed in several different directions, including OpenBSD and DragonFly BSD.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Shortly after UNIX System V Release 4 was produced, &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;AT&amp;amp;T sold all its rights to UNIX to Novell&lt;/span&gt;. (Dennis Ritchie likened this to the Biblical story of Esau selling his birthright for the proverbial &quot;mess of pottage&quot;.[7]) Novell developed its own version, UnixWare, merging its NetWare with UNIX System V Release 4. Novell tried to use this to battle against Windows NT, but &lt;span style=&quot;color: black; font-style: italic;&quot;&gt;their core markets suffered considerably&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;In 1993, Novell decided to transfer the UNIX trademark and certification rights to the &lt;span style=&quot;font-style: italic;&quot;&gt;X/Open Consortium. In 1996, X/Open merged with OSF, creating the Open Group&lt;/span&gt;. &lt;span style=&quot;color: red; font-style: italic;&quot;&gt;Various standards by the Open Group now define what is and what is not a &quot;UNIX&quot; operating system,&lt;/span&gt; notably the post-1998 Single UNIX Specification.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Beginning in the late 1980s, an open operating system standardization effort now known as POSIX provided a common baseline for all operating systems; IEEE based POSIX around the common structure of the major competing variants of the Unix system, publishing the first POSIX standard in 1988. In the early 1990s a separate but very similar effort was started by an industry consortium, the Common Open Software Environment (COSE) initiative, which eventually became the Single UNIX Specification administered by The Open Group. Starting in 1998 the Open Group and IEEE started the Austin Group, to provide a common definition of POSIX and the Single UNIX Specification.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;In 1983, Richard Stallman announced the GNU project, an ambitious effort to create a free software Unix-like system; &quot;free&quot; in that everyone who received a copy would be free to use, study, modify, and redistribute it. The GNU project&#39;s own kernel development project, GNU Hurd, had not produced a working kernel, but in 1992 Linus Torvalds released the Linux kernel as free software under the GNU General Public License. In addition to their use in the Linux operating system, many GNU packages ¿ such as the GNU Compiler Collection (and the rest of the GNU toolchain), the GNU C library and the GNU core utilities ¿ have gone on to play central roles in other free Unix systems as well.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Linux distributions, comprising Linux and large collections of compatible software have become popular both with individual users and in business. Popular distributions include Red Hat Enterprise Linux, Fedora, SUSE Linux Enterprise, openSUSE, Debian GNU/Linux, Ubuntu, Mandriva Linux, Slackware Linux and Gentoo.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/2578506483772410509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2009/05/unix-tm-history-beta.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/2578506483772410509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/2578506483772410509'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2009/05/unix-tm-history-beta.html' title='UNIX (tm) Version History'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-3407410270642023514</id><published>2015-03-10T14:13:00.000+05:30</published><updated>2017-02-10T15:28:01.530+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithms"/><category scheme="http://www.blogger.com/atom/ns#" term="c"/><category scheme="http://www.blogger.com/atom/ns#" term="programming-algo"/><title type='text'>128 Bit bitmap operations</title><content type='html'>&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;I had to maintain a &#39;128 bit&#39; bitmap with&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;set&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;clear&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;is_set&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;operations , what came to my head was (128 / 8) = 16&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;ie if i declare&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&#39;&lt;span style=&quot;color: red;&quot;&gt;unsigned char&lt;span style=&quot;color: #134f5c;&quot;&gt; bitmap&lt;/span&gt;[16]&lt;/span&gt;&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Q. Why didn&#39;t i choose (128 / 32) = 4 ?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;A. &amp;nbsp;if the code &amp;nbsp;be portable across other platforms, &#39;8 bit&#39; should be a logical choice , as most lower ended arch at most 8 bit.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Now to the code .&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//Version 1
void bitmap8_set_bit(unsigned char *bitmap, unsigned int bit)
{
*bitmap |= (1 &amp;lt;&amp;lt; bit);
}

void bitmap8_clr_bit(unsigned char *bitmap, unsigned int bit)
{
*bitmap &amp;amp;= (0xff &amp;amp; ~(1 &amp;lt;&amp;lt; bit));
}

int bitmap8_is_bit_set(unsigned char *bitmap, unsigned int bit)
{
return ( ( (*bitmap) &amp;amp; (1 &amp;lt;&amp;lt; bit) ) ? 1 : 0 );
}
&lt;/pre&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//Version 2
void bitmap8_set_bit(unsigned char *bitmap, unsigned int bit)
{
bitmap[bit / 8] |= (1 &amp;lt;&amp;lt; (bit % 8));
}

void bitmap8_clr_bit(unsigned char *bitmap, unsigned int bit)
{
bitmap[bit / 8] &amp;amp;= (0xff &amp;amp; ~(1 &amp;lt;&amp;lt; (bit % 8)));
}

int bitmap8_is_bit_set(unsigned char *bitmap, unsigned int bit)
{
return ( (bitmap[bit / 8] &amp;amp; (1 &amp;lt;&amp;lt; (bit % 8)) ) ? 1 : 0 );
}

int bitmap8_next_free_bit(unsigned char *bitmap)
{
register int i;

for (i = 0;i &amp;lt; 128; i++) {
if (0 == is_bit_set(bitmap, i))
return i;
}
return i;
}
&lt;/pre&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Q. What is the big deal in the Version 2 ?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Declared &#39;&lt;span style=&quot;color: red;&quot;&gt;unsigned char&lt;span style=&quot;color: #134f5c;&quot;&gt; bitmap&lt;/span&gt;[16]&lt;/span&gt;&#39; , i have to properly index the bitmap array to get the desired result,  but the fundamental operation remains the same.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;ie bitmap[bit / 8] -&amp;gt; would for bit = 16 would map to  bitmap[2]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;(bit % 8) -&amp;gt; (16 % 8) = 0 ,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;which is exactly what we want.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/3407410270642023514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2010/03/8-bit-bitmap-operations.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3407410270642023514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3407410270642023514'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2010/03/8-bit-bitmap-operations.html' title='128 Bit bitmap operations'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-7433496145113228254</id><published>2014-08-30T09:19:00.000+05:30</published><updated>2017-02-11T14:27:10.421+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="ssh"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>SSH Login without password</title><content type='html'>&lt;pre class=&quot;prettyprint&quot;&gt;

you@localhost$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): /home/username/.ssh/id_rsa.my_jee_server
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.my_jee_server
Your public key has been saved in /home/username/.ssh/id_rsa.pub.my_jee_server.pub
&lt;/pre&gt;

&lt;b&gt;Copy keys to server:&lt;/b&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
$ ssh-copy-id -i /home/username/.ssh/id_rsa.my_jee_server.pub you@server
you@server&#39;s password: 
&lt;/pre&gt;

&lt;b&gt;Try login&lt;/b&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
you@localhost$ ssh you@server
you@server:~$ 
&lt;/pre&gt;
&lt;b&gt;Try copy&amp;nbsp;&lt;/b&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
you@locahost$ scp ~/you_servlet.java you@server:/home/username
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/7433496145113228254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2013/09/automate-ssh-login-without-password.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/7433496145113228254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/7433496145113228254'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2013/09/automate-ssh-login-without-password.html' title='SSH Login without password'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-8906143080516805009</id><published>2013-07-12T12:25:00.000+05:30</published><updated>2015-10-15T08:40:16.533+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><title type='text'>How to know if Linux swap is working</title><content type='html'>&lt;div class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
After installation of Ubuntu 12.04 LTS, its seems like my swap was never, used, most of the time it remained inactive in my system monitor. In order to ensure, if swap is working, one trick is to write a C code that fills up the available RAM and ensure, if swap is being used.&lt;br /&gt;
&lt;br /&gt;
The code below, allocates 10 MB per allocation, do monitor the swap.&lt;a href=&quot;http://unix.stackexchange.com/questions/1367/how-to-test-swap-partition&quot; target=&quot;_blank&quot;&gt;[1]&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt; #include &amp;lt;stdlib.h&amp;gt;  
 #include &amp;lt;stdio.h&amp;gt;  
 #include &amp;lt;string.h&amp;gt;  
 int main(int argc, char** argv) {  
   int max = -1, mb = 0;  
   char* buffer;  
   if(argc &amp;gt; 1)   
     max = atoi(argv[1]);  
   else {  
      printf(&quot;\nmeater &amp;lt;size in MB&amp;gt; eg: meater 2048\n&quot;);  
       exit(0);       
   }  
   printf(&quot;\n[INFO] attempting to allocate %d MB @ 10 MB\n&quot;, max);  
   while((buffer=malloc(10*1024*1024)) != NULL &amp;amp;&amp;amp; mb != max/10) {  
     memset(buffer, 0, 10*1024*1024);  
     mb++;  
     printf(&quot;[INFO] allocated %d MB\n&quot;, mb*10);  
     sleep(1);  
   }  
   printf(&quot;[INFO] meater done eating, yummy..!\n&quot;);  
   return 0;  
 }  
&lt;/code&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/8906143080516805009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2013/07/how-to-know-if-linux-swap-is-working.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8906143080516805009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8906143080516805009'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2013/07/how-to-know-if-linux-swap-is-working.html' title='How to know if Linux swap is working'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-7592547789235924786</id><published>2012-11-13T22:48:00.000+05:30</published><updated>2017-02-10T15:32:56.200+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Let&#39;s get Solarized</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://ethanschoonover.com/solarized/img/solarized-dualmode.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ethanschoonover.com/solarized/img/solarized-dualmode.png&quot; height=&quot;268&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://ethanschoonover.com/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Ethan Schoonover&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;a href=&quot;http://ethanschoonover.com/solarized&quot; target=&quot;_blank&quot;&gt;Solarized&lt;/a&gt; is a sixteen color palette (eight monotones, eight accent colors) designed for use with terminal and gui applications. It has several &lt;a href=&quot;http://ethanschoonover.com/solarized#features&quot; target=&quot;_blank&quot;&gt;unique properties&lt;/a&gt;. I designed this colorscheme with both precise CIELAB lightness relationships and a refined set of hues based on fixed color wheel relationships. It has been tested extensively in real world use on color calibrated displays (as well as uncalibrated/intentionally miscalibrated displays) and in a variety of lighting conditions.&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Now let start Solarizing&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://michaelheap.com/getting-solarized-working-on-ubuntu/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Gnome-Terminal&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/search/solarized?hl=en&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Google-Chrome&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Eclipse&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Dowload&amp;nbsp;&lt;a href=&quot;https://bitbucket.org/LukeHoersten/eclipse-solarized-color-theme&quot;&gt;https://bitbucket.org/LukeHoersten/eclipse-solarized-color-theme&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Install&amp;nbsp;Eclipse Color Theme plugin from the market&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Preferences &amp;gt; General &amp;gt; Appearance &amp;gt; Color Theme , apply the solarized xml file.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/altercation/vim-colors-solarized&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Vim&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Pidgin&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Download&amp;nbsp;&lt;a href=&quot;https://github.com/heichblatt/gtk2-theme-solarizeddark&quot;&gt;https://github.com/heichblatt/gtk2-theme-solarizeddark&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Replace &amp;nbsp;/home/&lt;youname&gt;/gtkrc-2.0 with gtkrc&lt;/youname&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;cp gtkrc ~/.purple &amp;amp;&amp;amp; cd ~/.purple &amp;amp;&amp;amp; &amp;nbsp;mv gtkrc-2.0 gtkrc-2.0.bkp &amp;amp;&amp;amp; mv ./gtkrc ./gtkrc-2.0&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/7592547789235924786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2013/07/lets-get-solarized.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/7592547789235924786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/7592547789235924786'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2013/07/lets-get-solarized.html' title='Let&#39;s get Solarized'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-4134260651000981468</id><published>2012-09-17T15:31:00.001+05:30</published><updated>2017-02-10T15:32:22.710+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="programming-algo"/><title type='text'> Local Data address Does not belong to any of this hosts local interfaces</title><content type='html'>&lt;br /&gt;
&lt;pre class=&quot;lang-java prettyprint&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;code style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; ip &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;];&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ip&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;192&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ip&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;168&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ip&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ip&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #2b91af; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;SessionAddress&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; localSessionAddr &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #2b91af; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;SessionAddress&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #2b91af; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;InetAddress&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;getByAddress&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; LOCAL_RTP_PORT&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: white; border-width: 0px; clear: both; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Throws: Local Data Address Does not belong to any of this hosts local interfaces&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border-width: 0px; clear: both; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;strong style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;
&lt;strong style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Solution and Cause&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;strong style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border-width: 0px; clear: both; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;The problem is JMF seems to use InetAddress.getAllByName() which gives (in most cases) only single IP address as it may not be in the /etc/hosts. It can be sorted out by setting your interface ip (say eth0, wlan0) in /etc/hosts&amp;nbsp;&lt;a href=&quot;https://forums.oracle.com/forums/thread.jspa?threadID=1279945&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; border-width: 0px; color: #4a6b82; cursor: pointer; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;&quot;&gt;[1]&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;lang-java prettyprint&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;code style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &amp;nbsp;cat &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;etc&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; localhost&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; noor&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;lit&quot; style=&quot;background-color: transparent; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;1.8&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt; noor&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/4134260651000981468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2012/09/java-exception-local-data-address-does.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/4134260651000981468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/4134260651000981468'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2012/09/java-exception-local-data-address-does.html' title=' Local Data address Does not belong to any of this hosts local interfaces'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-3964422534331120294</id><published>2011-06-03T09:44:00.004+05:30</published><updated>2017-02-11T14:08:58.866+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="slackware-linux"/><title type='text'>Slackware and manual laptop screen off</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s200/1304457283.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s200/1304457283.png&quot; style=&quot;cursor: pointer; float: right; height: 160px; margin: 0pt 0pt 10px 10px; width: 163px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Sometime you may have large compilation (kernel?) / download, yea and you are bored to do anything else on your laptop, if so you may have puzzled about how to manually switchoff the laptop screen. heh, if you haven&#39;t i have ;-).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;We make use of &#39;xset&#39; and &#39;dpms&#39; to handle this, i have assigned a keyboard shortcut for my KDE.I have also anticipated about the security so i use &#39;xlock&#39; too.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;xlock &amp;amp;  xset dpms 1200 1800 2100 ; sleep 2 ; xset dpms force off; &lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Assign the above command sequence to a keyboard short cut, your DE will have such a feature, KDE and xfce do.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/3964422534331120294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2011/06/slackware-and-manual-laptop-screen-off.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3964422534331120294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/3964422534331120294'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2011/06/slackware-and-manual-laptop-screen-off.html' title='Slackware and manual laptop screen off'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s72-c/1304457283.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-4428095523580659893</id><published>2011-05-31T10:33:00.004+05:30</published><updated>2017-02-11T14:22:42.984+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="slackware-linux"/><title type='text'>Slackware 13.37 root and xapplications</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s200/1304457283.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s200/1304457283.png&quot; style=&quot;cursor: pointer; float: right; height: 117px; margin: 0pt 0pt 10px 10px; width: 117px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;In slackware, we have few applications like pkgtool, sbopkg etc that  has to run as root, however always using the console to punching in &lt;strong&gt;sudo&lt;/strong&gt;  is difficult, one way to over come is to execute them with a desktop  link, however since the apps are executed in a auxiliary terminal  emulator like xterm/konsole running in non-privileged user&#39;s xsession we have an issue, root can&#39;t connect to the xserver unless we allow.


This might be the error you might see

&lt;pre class=&quot;prettyprint&quot;&gt;
sudo /usr/bin/firefox
No protocol specified
No protocol specified
Error: cannot open display: :0&lt;/pre&gt;

Do the following to authorise unrestricted remote connection to x &lt;code&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;
xhost + 
&lt;/pre&gt;
&lt;div class=&quot;noteimportant&quot;&gt;
Consider the security implications of running xhost +
read &#39;man 1 xhost&#39;
&lt;/div&gt; 

Now you can enjoy running

&lt;pre class=&quot;prettyprint&quot;&gt;
sudo /usr/bin/konsole -e /usr/sbin/sbokpg
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/4428095523580659893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2011/05/slackware-1337-root-and-xapplications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/4428095523580659893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/4428095523580659893'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2011/05/slackware-1337-root-and-xapplications.html' title='Slackware 13.37 root and xapplications'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s72-c/1304457283.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-8222801308964849425</id><published>2011-05-29T13:17:00.006+05:30</published><updated>2017-02-11T14:13:16.719+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="slackware-linux"/><title type='text'>Slackware 13.37 and BroadComm [14e4:4727] wireless Marriage</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-NQamz9YRcbys5HEcZ2Sysa2-WgZCQwwWiXwS3KL4lgYXquEFhlWMrhygyXcXCTWmGPVSmWiALE10AGUPvx4TsGLfIBjPzPGJsG0PXY5N0BiPmkXRJi4QBwFZcvF7dn5qZN8xwRhe5OWp/s1600/index.jpeg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5612043026057441810&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-NQamz9YRcbys5HEcZ2Sysa2-WgZCQwwWiXwS3KL4lgYXquEFhlWMrhygyXcXCTWmGPVSmWiALE10AGUPvx4TsGLfIBjPzPGJsG0PXY5N0BiPmkXRJi4QBwFZcvF7dn5qZN8xwRhe5OWp/s320/index.jpeg&quot; style=&quot;cursor: pointer; float: left; height: 118px; margin: 0pt 10px 10px 0pt; width: 138px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt; have a Broadcom Wireless card, which was obvious enough not to work just like that.&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;root@noor:/home/althaf# lspci -vnn | grep 14e4
12:00.0 Network controller [0280]: Broadcom Corporation BCM4313
02.11b/g/n Wireless LAN Controller [14e4:4727] (rev 01)&lt;/code&gt;&lt;/pre&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;code&gt;&lt;/code&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Follow these procedures to make it work&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 85%; font-weight: bold;&quot;&gt;Kernel configuration for (2.6.37 slackware 13.37 default)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you have enabled&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;Location: -&amp;gt; Device Drivers
-&amp;gt; Staging drivers
  -&amp;gt; Exclude Staging drivers from being built
      -&amp;gt; Broadcom IEEE802.11n WLAN drivers
          -&amp;gt; Broadcom IEEE802.11n driver style&lt;/code&gt;&lt;/pre&gt;
&lt;code&gt;&lt;/code&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; font-weight: bold;&quot;&gt;Download the firmware&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;I was luck enough to have this card, well the broadcom guys had the mercy to open up their driver code, any way as usual it required firmware to be loaded.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;a href=&quot;http://git.kernel.org/?p=linux/kernel/git/dwmw2/linux-firmware.git;a=tree;f=brcm;h=e62f89cefb4660a16b192c57b446cac975836d05;hb=refs/heads/master&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;[Firmware link]&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;We just need *bcm43xx-0.fw* and *bcm43xx_hdr-0.fw*, when downloaded make sure you have the same file name as given, the drivers have hard coded the path and firmware name in them, so it should be the same to work.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Copy them to /lib/firmware/brcm&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; font-size: 85%; font-weight: bold;&quot;&gt;Reboot&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;I highly recommend rebooting the system, though theoretically we could load the firmware on the go, however it didn&#39;t work for me.Once rebooted you will find wlan0 or similar interface.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif; font-size: 85%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;References&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://wireless.kernel.org/en/users/Drivers/brcm80211&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;[Brcm80211]&lt;/span&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/8222801308964849425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2011/05/slackware-1337-and-broadcomm-14e44727.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8222801308964849425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8222801308964849425'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2011/05/slackware-1337-and-broadcomm-14e44727.html' title='Slackware 13.37 and BroadComm [14e4:4727] wireless Marriage'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-NQamz9YRcbys5HEcZ2Sysa2-WgZCQwwWiXwS3KL4lgYXquEFhlWMrhygyXcXCTWmGPVSmWiALE10AGUPvx4TsGLfIBjPzPGJsG0PXY5N0BiPmkXRJi4QBwFZcvF7dn5qZN8xwRhe5OWp/s72-c/index.jpeg" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-2683519142352616008</id><published>2011-05-04T02:30:00.004+05:30</published><updated>2017-02-11T13:58:04.720+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="slackware-linux"/><title type='text'>Slackware 13.37 hibernation</title><content type='html'>&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s1600/1304457283.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5602603876215625378&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s200/1304457283.png&quot; style=&quot;cursor: hand; cursor: pointer; float: right; height: 196px; margin: 0 0 10px 10px; width: 200px;&quot; /&gt;&lt;/a&gt;Slackware doesn&#39;t provide a out of the box configuration to hibernate even though stock kernel is capable.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;Few modifications to your lilo configuration could enable hibernation.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;trebuchet ms&amp;quot; , sans-serif;&quot;&gt;To do so edit your /etc/lilo.conf with the following, assuming that your are using the default configuration from slackware.&lt;/span&gt;&lt;br /&gt;

&lt;pre class=&quot;prettyprint&quot; &gt;
image = /boot/vmlinuz
root = /dev/sda1
label = Slackware(Res)  
#for resuming /dev/sda6 is the my swap
append = &quot;resume=/dev/sda6&quot; 
read-only
&lt;/pre&gt; 

&lt;div class=&quot;noteimportant&quot;&gt;
After saving the file re-run lilo to apply the changes.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/2683519142352616008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2011/05/slackware-1337-hibernation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/2683519142352616008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/2683519142352616008'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2011/05/slackware-1337-hibernation.html' title='Slackware 13.37 hibernation'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPcd3fAcPxg6LmZVJXIq5SrhrXdPi8v6z7ShlCmPTp_awY6O-nLA5dIuck5Bue5IcFX62n_GOXtNdIETp4hWt3A4f4FHzC4qqACfVMdeWkMVKToZwzHb-1AEqWj151XSFU3uim7Guy8m8_/s72-c/1304457283.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3340707883401194037.post-8465782273425312181</id><published>2009-04-11T20:09:00.000+05:30</published><updated>2017-02-10T15:29:31.732+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux-unix"/><category scheme="http://www.blogger.com/atom/ns#" term="slackware-linux"/><title type='text'>Slackware - simplicity is fun</title><content type='html'>&lt;div style=&quot;color: black;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Well as far my exposure to various Linux distros is concerned, Slackware resonated with my frequency. I felt intimidate connection between me a the philosophy of Slackware.&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;“ Slack, which generally stands for the sense of freedom, independence, and original thinking that comes when you achieve your personal goals ”.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;So the meaning Slackware is obvious , till now revealed that its no easy for a newbie. Though my intention of using is to learn Linux from its raw form.It does provide an environment for learning Linux. Learning Linux means not the kernel alone but the utilities as well. &amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; text-align: justify;&quot;&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Choose Slackware&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;ul style=&quot;color: black; text-align: justify;&quot;&gt;
&lt;li style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;to learn Linux from scratch.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&amp;nbsp;to tweak each and every settings.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&amp;nbsp;to be a fan of simplicity.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&amp;nbsp;if you have killer instinct to solve issues.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&quot;justify&quot; style=&quot;color: black; font-weight: bold;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;color: black; font-weight: bold; text-align: justify;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; font-weight: normal;&quot;&gt;Slackware isn&#39;t a difficult to conquer once you have understood the UNIX philosophy. It is the best one I have come across for the purpose of learning Linux .Of course it is still powerful for other purposes.&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;For support /join IRC freenode ##slackware channel.&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-weight: bold; text-align: justify;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; font-weight: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://althafkbacker.blogspot.com/feeds/8465782273425312181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://althafkbacker.blogspot.com/2009/04/slackware-simplicity-is-fun.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8465782273425312181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3340707883401194037/posts/default/8465782273425312181'/><link rel='alternate' type='text/html' href='http://althafkbacker.blogspot.com/2009/04/slackware-simplicity-is-fun.html' title='Slackware - simplicity is fun'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>