<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Siddharth Bakshi</title>
    <description>The latest articles on DEV Community by Siddharth Bakshi (@sid16).</description>
    <link>https://dev.to/sid16</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F360667%2Fa3bf82f5-f8e9-46be-801b-290716446990.jpeg</url>
      <title>DEV Community: Siddharth Bakshi</title>
      <link>https://dev.to/sid16</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sid16"/>
    <language>en</language>
    <item>
      <title>Decoding User Feedback at Collision Conf: The Power of AI-powered Image Analysis</title>
      <dc:creator>Siddharth Bakshi</dc:creator>
      <pubDate>Fri, 21 Jun 2024 01:04:07 +0000</pubDate>
      <link>https://dev.to/sid16/decoding-user-feedback-at-collision-conf-the-power-of-ai-powered-image-analysis-9b9</link>
      <guid>https://dev.to/sid16/decoding-user-feedback-at-collision-conf-the-power-of-ai-powered-image-analysis-9b9</guid>
      <description>&lt;h6&gt;
  
  
  I analyzed user feedback at Collision Conf. using Gemini Multimodal Exprimental Model (Vertex AI).
&lt;/h6&gt;

&lt;p&gt;The annual &lt;a href="https://www.linkedin.com/company/collision/about/"&gt;Collision Conference&lt;/a&gt; brings together a vibrant community of entrepreneurs, tech enthusiasts, and industry leaders. This year, I attended Collision Conf with a specific goal: to learn more about the needs and priorities of end-users, developers, and businesses.&lt;/p&gt;

&lt;p&gt;The traditional approach to conference feedback often involves surveys and paper forms. However, these methods can be time-consuming to analyze and may not capture the full range of participant opinions. So, I was motivated to explore a new approach… this is where the Gemini Multimodal Experimental Model from Google’s Vertex AI comes in.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://cloud.google.com/use-cases/multimodal-ai"&gt;Gemini Multimodal&lt;/a&gt; Experimental Model offers a groundbreaking approach to analyzing user feedback, particularly when presented visually. Using a technique called prompt engineering, I was able to "teach" Gemini to interpret user responses captured on posters, whiteboards, and even world maps – data formats that would be challenging to analyze manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Following are my observations and findings:
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Automation
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Original Image
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5kgoqqqjqmsaoi6pgzr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5kgoqqqjqmsaoi6pgzr.jpeg" alt="automation_user_feedback" width="200" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Model Output
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hwds6spsr117cllk3lx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hwds6spsr117cllk3lx.png" alt="image_analysis_output" width="800" height="1450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Text
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Title:
&lt;/h2&gt;

&lt;p&gt;Automation Survey&lt;/p&gt;
&lt;h2&gt;
  
  
  Description:
&lt;/h2&gt;

&lt;p&gt;The image shows a black poster board with white text and yellow circles representing data points. The poster is titled "COLLISION" and contains three survey questions related to automation. The first question asks about industry potential for automation with three options, each represented by a circle filled with yellow dots. The second question asks about perceived benefits of automation with four options, each represented by yellow dots in rectangular shapes. The third question explores factors holding back greater adoption of automation with four options represented by yellow dots in rectangular shapes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Datapoints:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Question 1&lt;/strong&gt;: "In which industry do you see the most potential for automation?"&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Transportation&lt;/strong&gt;: Has a moderate amount of yellow dots representing responses.&lt;br&gt;
• &lt;strong&gt;Distribution and Logistics&lt;/strong&gt;: Has the highest amount of yellow dots, indicating the highest potential for automation according to the survey.&lt;br&gt;
• &lt;strong&gt;Construction and Infrastructure&lt;/strong&gt;: Has a lower amount of yellow dots compared to the other two options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question 2&lt;/strong&gt;: "What do you see as the benefits of automation?"&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Improved health and safety&lt;/strong&gt;: Has a moderate amount of yellow dots.&lt;br&gt;
• &lt;strong&gt;Cost-saving&lt;/strong&gt;: Has a moderate amount of yellow dots.&lt;br&gt;
• &lt;strong&gt;Efficiency of service&lt;/strong&gt;: Has the highest amount of yellow dots among the benefits options.&lt;br&gt;
• &lt;strong&gt;Increased productivity&lt;/strong&gt;: Has a high amount of yellow dots, suggesting it's a significant perceived benefit of automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question 3&lt;/strong&gt;: "What factors are holding back greater adoption of automation?"&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Labour relations&lt;/strong&gt;: Has a high amount of yellow dots, suggesting it's a significant factor holding back automation adoption.&lt;br&gt;
• &lt;strong&gt;The pace of technological advancemen&lt;/strong&gt;t: Has the lowest amount of yellow dots, indicating it's not a major concern.&lt;br&gt;
• &lt;strong&gt;Cost&lt;/strong&gt;: Has a moderate amount of yellow dots.&lt;br&gt;
• &lt;strong&gt;Government regulation&lt;/strong&gt;: Has a moderate amount of yellow dots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insights:&lt;/strong&gt; Based on the data visualization, the survey suggests that &lt;strong&gt;distribution and logistics&lt;/strong&gt; are perceived as having the highest potential for automation. The most common perceived benefits of automation are &lt;strong&gt;efficiency of service&lt;/strong&gt; and &lt;strong&gt;increased productivity&lt;/strong&gt;. However, &lt;strong&gt;labour relations&lt;/strong&gt; seem to be the biggest hurdle to greater adoption of automation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  In my opinion...
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Distribution and logistics&lt;/strong&gt; emerged as the industry with the most perceived potential for automation. Interestingly, &lt;strong&gt;efficiency of service&lt;/strong&gt; and &lt;strong&gt;increased productivity&lt;/strong&gt; were considered the top potential benefits. However, a significant portion of respondents identified &lt;strong&gt;labor relations&lt;/strong&gt; as a major hurdle to wider adoption. This highlights the need for open communication and collaboration between businesses and their workforce as automation continues to evolve. &lt;/p&gt;

&lt;p&gt;AI is revolutionizing the supply chain. As &lt;a href="https://www.mckinsey.com/industries/metals-and-mining/our-insights/succeeding-in-the-ai-supply-chain-revolution"&gt;observed by McKinsey&lt;/a&gt;, it’s boosting efficiency with smarter logistics, optimized inventory, and predictive maintenance. It also unlocks sharper demand forecasting and proactive risk management, all while providing real-time visibility. Depending on labor displacement, implementation costs and data concerns require careful consideration as well. &lt;/p&gt;

&lt;h3&gt;
  
  
  AI
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Original Image
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43xt7pyozmiogu66nz78.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43xt7pyozmiogu66nz78.jpeg" alt="ai_user_feedback" width="250" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Model Output
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah36xxfrl9m8ub6k3x24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah36xxfrl9m8ub6k3x24.png" alt="ai_image_analysis" width="800" height="1521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Text
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Title:
&lt;/h2&gt;

&lt;p&gt;AI Perception Survey&lt;/p&gt;
&lt;h2&gt;
  
  
  Description:
&lt;/h2&gt;

&lt;p&gt;The image shows a black board with white text and yellow dot stickers. The board is divided into sections, each asking a question about artificial intelligence (AI) and its ethical principles, potential applications, and public perception. The questions are answered by respondents using the yellow dot stickers to mark their opinions on a scale or within different categories.&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Points and Insights:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ethical Principles of AI&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;• The image includes a horizontal line representing a spectrum of opinions on the importance of ethical principles in AI development and use.&lt;br&gt;
• The yellow dot stickers show that a majority of respondents believe ethical principles are &lt;strong&gt;very important&lt;/strong&gt;, with a smaller number of dots clustered around the "neutral" point and very few dots near the "not important" end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Applications&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;• The board presents four categories where AI could potentially have the most positive impact: housing and affordability, healthcare, education, and economy/environment/climate.&lt;br&gt;
• The number of yellow dots in each category indicates respondent opinion on the potential benefits of AI in each area. The highest concentration of dots is in &lt;strong&gt;healthcare&lt;/strong&gt;, followed by &lt;strong&gt;education&lt;/strong&gt;, then &lt;strong&gt;housing and affordability&lt;/strong&gt;, and lastly &lt;strong&gt;economy/environment/climate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public Trust in AI&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;• A scatter plot asks whether respondents feel informed enough about AI to trust its implications.&lt;br&gt;
• The dots are distributed across a grid with "Yes" and "No" options on both the x and y axis.&lt;br&gt;
• The distribution suggests that a majority of respondents fall into the "yes" quadrant, indicating that they feel &lt;strong&gt;reasonably informed&lt;/strong&gt; about AI and its implications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI and Existing Biases&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;• A scatter plot explores whether respondents believe AI amplifies existing biases in society.&lt;br&gt;
• The dot distribution indicates a mixture of opinions. A significant portion of respondents believe AI &lt;strong&gt;does amplify&lt;/strong&gt; existing biases, but there are also a considerable number who believe it &lt;strong&gt;does not&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  In my opinion...
&lt;/h4&gt;

&lt;p&gt;A strong majority of respondents believed &lt;strong&gt;ethical principles were crucial&lt;/strong&gt; in AI development and use. This illustrates the growing public consciousness about responsible AI development.  The survey also identified &lt;strong&gt;healthcare&lt;/strong&gt; as the area with the most potential for positive AI impact, followed by education and housing affordability.&lt;/p&gt;

&lt;p&gt;As &lt;a href="https://www.mckinsey.com/industries/healthcare/our-insights/transforming-healthcare-with-ai"&gt;observed by McKinsey&lt;/a&gt;, AI is transforming healthcare, boosting diagnostic accuracy, personalizing treatment plans, and accelerating research. Imagine leveraging AI for early disease detection, robotic-assisted surgery with improved precision, or 24/7 virtual patient support.  These are just a few ways AI is empowering healthcare professionals. However, as we embrace AI,  ethical considerations are critical.  Biased algorithms can perpetuate disparities in care. Robust data security and patient privacy are paramount.  AI should augment, not replace, human expertise.  Transparency in AI decision-making builds trust and ensures responsible implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cryptocurrency
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Original Image
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncxpvua2ih171h5tch3r.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncxpvua2ih171h5tch3r.jpeg" alt="crypto_user_feedback" width="250" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Model Output
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zzjx7jskqx59hgcvk36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zzjx7jskqx59hgcvk36.png" alt="crypto_image_analysis" width="800" height="1521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Text
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Title:
&lt;/h2&gt;

&lt;p&gt;Cryptocurrency Panel&lt;/p&gt;
&lt;h2&gt;
  
  
  Description:
&lt;/h2&gt;

&lt;p&gt;The image shows a black panel with white text and yellow circular graphics. The panel is likely from a conference or event and contains questions related to cryptocurrency, including the viability of Bitcoin as an alternative to fiat currency, the impact of real-world asset tokenization on real estate and commodities markets, and public understanding of staking in cryptocurrency. The questions are accompanied by visual representations using yellow circles, likely representing responses to a survey or poll.&lt;/p&gt;
&lt;h2&gt;
  
  
  Datapoints and Insights:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Bitcoin Viability&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;The image contains a horizontal line graph representing the viability of Bitcoin, with "Not viable at all", "Somewhat viable", "Moderately viable", and "Very viable" marked along the line.&lt;br&gt;
The graph shows a cluster of yellow circles towards the "Moderately viable" area, suggesting that the majority of respondents perceive Bitcoin as moderately viable as an alternative to fiat currency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Real-World Asset Tokenization&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;The panel includes four boxes representing potential impacts of real-world asset tokenization, with labels "Increased market efficiency", "Reduced transaction costs", "Enabled access for a new generation of investors", and "It depends on regulatory adaptations".&lt;br&gt;
Each box contains a scatterplot of yellow circles, suggesting different levels of agreement or impact on each factor.&lt;br&gt;
Based on the density of circles, "Reduced transaction costs" and "Enabled access for a new generation of investors" appear to have received more positive responses than the other two factors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Understanding Staking&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;The panel presents four circles with yellow dots, each representing a different response to the question of understanding staking.&lt;br&gt;
The responses are:&lt;br&gt;
• "Yes, I understand it well and see its potential benefits"&lt;br&gt;
• "Yes, I understand it, but I am skeptical about its benefits"&lt;br&gt;
• "I have a basic understanding but would like more detailed information"&lt;br&gt;
• "No, I am not familiar with staking at all"&lt;/p&gt;

&lt;p&gt;Based on the density of dots, the most common response seems to be "Yes, I understand it well and see its potential benefits", followed by "Yes, I understand it, but I am skeptical about its benefits". This suggests that a significant portion of the respondents have some knowledge of staking but might have varying levels of confidence or understanding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  In my opinion...
&lt;/h4&gt;

&lt;p&gt;I dont know enough to comment about Cryptocurrency/Blockchain, the data suggested that a moderate majority of respondents viewed Bitcoin as moderately viable as an alternative currency.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Attendeee Map
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Original Image
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3p77p15wy8dtz26yh5o8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3p77p15wy8dtz26yh5o8.jpeg" alt="attendeemap_board" width="250" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Model Output
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqefl53igqf6qavrw8z7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqefl53igqf6qavrw8z7.png" alt="attendeemap_image_analaysis" width="800" height="1091"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Text
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Title:
&lt;/h2&gt;

&lt;p&gt;World Map Pins&lt;/p&gt;
&lt;h2&gt;
  
  
  Description:
&lt;/h2&gt;

&lt;p&gt;The image shows a world map with a purple background displayed on a black surface. The map has numerous small, yellow-orange dots scattered across the continents, indicating various locations. The question "WHERE IN THE WORLD ARE YOU FROM?" is written in white bold letters at the top of the map.&lt;/p&gt;
&lt;h2&gt;
  
  
  Datapoints and Insights:
&lt;/h2&gt;

&lt;p&gt;The map likely represents the origins of people or data points, with each yellow-orange dot representing a location. Based on the distribution of dots, it can be inferred that the data points have a global presence, with some areas having a higher concentration of dots than others.&lt;/p&gt;

&lt;p&gt;•  &lt;strong&gt;High Concentration&lt;/strong&gt;: There is a higher concentration of dots in North America, Europe, and parts of Asia, suggesting a higher representation of individuals or data points from these regions.&lt;br&gt;
 •  &lt;strong&gt;Lower Concentration&lt;/strong&gt;: There are fewer dots in South America, Africa, and Australia, indicating a potentially lower representation of individuals or data points from these regions.&lt;/p&gt;

&lt;p&gt;Without further context, it is difficult to determine the exact meaning of the dots or the purpose of the map. However, the map and question suggest a possible focus on global origins or diversity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  In my opinion...
&lt;/h4&gt;

&lt;p&gt;Creativity can't be forced, it has to be nurtured.  For me, this happens best in environments that embrace diversity and inclusivity.  Living in India, UAE, and Canada has exposed me to a wealth of perspectives, English is not my first language so collaborating with people from different backgrounds makes me feel empowered and constantly sparks new ideas. This wouldn't have been possible without the unwavering support of my family, and I'm deeply grateful for them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Geimini Experimental Model
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x97hgw6zy7bjzcl2s6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x97hgw6zy7bjzcl2s6k.png" alt="gcp_userinterface" width="622" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models?_gl=1*sg8ouh*_ga*MjA5ODEzNTE5NC4xNzE4OTEzODY2*_ga_WH2QY8WWF5*MTcxODkxMzg2Ni4xLjEuMTcxODkxNTQ5Ni4wLjAuMA..&amp;amp;_ga=2.16219701.-2098135194.1718913866"&gt;Learn more about available models here&lt;/a&gt;. Disclaimer by GCP: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The maximum lifespan for a custom model is 18 months as of the GA release. You must create and train a new model to continue classifying content after that amount of time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://console.cloud.google.com/vertex-ai/generative/multimodal/create/"&gt;Try it out yourself!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learnt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Technical skill- hands-on with &lt;a href="https://cloud.google.com/discover/what-is-prompt-engineering"&gt;prompt engineering&lt;/a&gt;, and AI-powered data analysis (AI-BI use-cases?).&lt;/li&gt;
&lt;li&gt;Impact of Automation, AI, Earning Public's Trust, and Diverse Perspectives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, I'm incredibly grateful for the opportunity to attend Collision Conf and learn from such a fantastic community. As a data enthusiast, I'm passionate about exploring the intersection of AI and various industries. &lt;/p&gt;

&lt;p&gt;Free learning resources from GCP were instrumental in developing the skills required to tackle this project, and for that, I feel incredibly grateful.&lt;/p&gt;

&lt;h4&gt;
  
  
  What are you curious to learn about using AI?
&lt;/h4&gt;

</description>
      <category>customers</category>
      <category>data</category>
      <category>ai</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Cyber Resilience Act passed in EU....</title>
      <dc:creator>Siddharth Bakshi</dc:creator>
      <pubDate>Mon, 13 May 2024 12:41:14 +0000</pubDate>
      <link>https://dev.to/sid16/cyber-resilience-act-passed-in-eu-20l9</link>
      <guid>https://dev.to/sid16/cyber-resilience-act-passed-in-eu-20l9</guid>
      <description>&lt;p&gt;In my opinion, it is interesting to observe the adoption of the &lt;a href="https://www.europarl.europa.eu/doceo/document/TA-9-2024-0130_EN.html#title2"&gt;Cyber Resilience Act&lt;/a&gt; in Strasbourg in March12th (2024), and then to see the Canadian Center for Cyber Security (Cyber Center) &lt;a href="https://cyber.gc.ca/en/news-events/joint-advisory-deploying-ai-systems-securely#defn-cyber-security"&gt;announce&lt;/a&gt; in April15th (2024) that they've joined the National Security Agency’s (NSA) Artificial Intelligence Security Centre (AISC), the Federal Bureau of Investigation (FBI) and others in releasing &lt;a href="https://media.defense.gov/2024/Apr/15/2003439257/-1/-1/0/CSI-DEPLOYING-AI-SYSTEMS-SECURELY.PDF"&gt;guidance&lt;/a&gt; to deploying AI systems securely.&lt;/p&gt;

&lt;p&gt;Based on my understanding, the established regulation addresses the following,&lt;/p&gt;

&lt;p&gt;Challenges? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A low level of cybersecurity of products, reflected by widespread vulnerabilities, &lt;/li&gt;
&lt;li&gt;An insufficient understanding &amp;amp; access to information by users preventing them from choosing products with adequate cybersecurity properties, &lt;/li&gt;
&lt;li&gt;And, a fragmented legal landscape across EU member states.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Objectives?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uniformity of cybersecurity requirements,&lt;/li&gt;
&lt;li&gt;Increased transparency for users,&lt;/li&gt;
&lt;li&gt;And, empower businesses to produce a wide range of effective cybersecurity products.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My favorite takeaway is the unification of cybersecurity requirements for all EU businesses, particularly for microenterprises and small and medium-sized enterprises, which cuts red tape, frees up resources for innovation, and fosters a fairer market!&lt;/p&gt;

&lt;p&gt;That said, I believe, with innovation accelerating- AI/ML security is a continuous cycle: identify risks, implement controls, and monitor for problems. Kindly refer to the sources below for specific actionable guidance.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cyber Resilience Act: &lt;a href="https://lnkd.in/gZ79UVrg"&gt;https://lnkd.in/gZ79UVrg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Canadian Cyber Center accouncement: &lt;a href="https://lnkd.in/gaNJSvhd"&gt;https://lnkd.in/gaNJSvhd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NSA announcement: "Deploying AI Systems Securely", &lt;a href="https://lnkd.in/gfWcvqsW"&gt;https://lnkd.in/gfWcvqsW&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Full guidence/report by NSA: &lt;a href="https://lnkd.in/gSgMmrFB"&gt;https://lnkd.in/gSgMmrFB&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>canada</category>
      <category>ai</category>
      <category>customers</category>
    </item>
    <item>
      <title>Gen AI &amp; Modern Data Strategy?</title>
      <dc:creator>Siddharth Bakshi</dc:creator>
      <pubDate>Mon, 13 May 2024 12:34:32 +0000</pubDate>
      <link>https://dev.to/sid16/gen-ai-modern-data-strategy-2mm0</link>
      <guid>https://dev.to/sid16/gen-ai-modern-data-strategy-2mm0</guid>
      <description>&lt;p&gt;Why do some software systems feel siloed and clunky?&lt;/p&gt;

&lt;p&gt;Conway's Law offers a surprising explanation: the design of a system often mimics the communication structure of the organization that built it. Siloed teams can lead to fragmented systems. &lt;/p&gt;

&lt;p&gt;To address this challenge, many organizations are turning to internal developer platforms… Gartner predicts that by 2026, 80% of large software engineering organizations will leverage internal developer platforms.&lt;/p&gt;

&lt;p&gt;In my opinion, just as high-quality data fuels high-quality GenAI applications, the success of a data platform hinges on strong collaboration between software developers and operators?&lt;/p&gt;

&lt;p&gt;Another implication of Conway's Law is that not all communication is helpful, and too much back-and-forth can hinder productivity.&lt;/p&gt;

&lt;p&gt;I believe, besides inherent benefits such as smarter risk management and faster product development, a well-architected data(-mesh) platform following the data mesh communication model, can empower your organization to prioritize communication &amp;amp; collaboration! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1nemudxuukh4vf9de4l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1nemudxuukh4vf9de4l.jpg" alt="Image description" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As illustrated in the image,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Core Teams: The self-service data platform team and domain teams collaborate frequently for rapid development and efficient value creation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enabler Teams: Governance, assets, and cloud foundation teams provide essential support to the platform while minimizing interaction with domain teams. This avoids overwhelming them with unnecessary communication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Executive Leadership: Leadership maintains a high-level view through infrequent updates from core and enabler teams, ensuring strategic alignment without micromanagement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Domain teams: Think of lines-of-business teams or team members with highly specialized skills.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In essence, I believe, by implementing a data platform that is simple, scalable, and open- organizations can unify their data and processes, hence, unlock better experiences for end-users, software developers, and operators. &lt;/p&gt;

&lt;p&gt;Sources:&lt;br&gt;
Conway's Law: &lt;a href="https://lnkd.in/dBf7TwwD"&gt;https://lnkd.in/dBf7TwwD&lt;/a&gt;&lt;br&gt;
Gartner report: &lt;a href="https://lnkd.in/dZgNmdyM"&gt;https://lnkd.in/dZgNmdyM&lt;/a&gt;&lt;br&gt;
Data Mesh framework: &lt;a href="https://lnkd.in/dm4hnMXy"&gt;https://lnkd.in/dm4hnMXy&lt;/a&gt;&lt;br&gt;
Information on specific team roles and responsibilities: &lt;a href="https://lnkd.in/d6ciAAGj"&gt;https://lnkd.in/d6ciAAGj&lt;/a&gt;&lt;/p&gt;

</description>
      <category>enterprisearchitecture</category>
      <category>dataanlytics</category>
      <category>softwaredevelopment</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Open Secret of Sovereign AI: Open Source vs. Closed Source Models?</title>
      <dc:creator>Siddharth Bakshi</dc:creator>
      <pubDate>Mon, 13 May 2024 12:11:28 +0000</pubDate>
      <link>https://dev.to/sid16/opensource-vs-closedsource-models-5gpm</link>
      <guid>https://dev.to/sid16/opensource-vs-closedsource-models-5gpm</guid>
      <description>&lt;p&gt;Larger or Smaller LLMs?&lt;br&gt;
Multimodal or Specialized Models?&lt;br&gt;
Inference budget or Training budget?&lt;br&gt;
Latency or Capacity?&lt;br&gt;
Performance &amp;amp; Interoperability or Model Size?&lt;br&gt;
Closedsource or Opensource?&lt;br&gt;
Will Shadow AI continue to rise?&lt;/p&gt;

&lt;p&gt;Building on &lt;a href="https://www.linkedin.com/in/arthur-mensch/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_recent_activity_content_view%3BN6eMikSvS%2Buapo85ncZKug%3D%3D"&gt;Arthur Mensch's&lt;/a&gt; insights, we see the growing adaptability of models. The key takeaway is to prioritize tools that enable customers to fine-tune these models for their specific needs. This user-driven customization will unlock significant performance gains.&lt;/p&gt;

&lt;p&gt;Hence why I also believe in open-sourcing models. &lt;/p&gt;

&lt;p&gt;Through research &lt;a href="https://www.linkedin.com/company/mistralai/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_recent_activity_content_view%3BN6eMikSvS%2Buapo85ncZKug%3D%3D"&gt;Mistral AI&lt;/a&gt; found, with better hardware and better models a certain level of latency (overall time taken by LLM to generate full response) can be reached, which shifted their perspective on LLMs as a, in my opinion, "single point of contact" entity to one that can operate in sovereignty?&lt;/p&gt;

&lt;p&gt;Smaller, more portable LLMs, I believe have the potential to unlock better user-experience. In the words of Arthur (16:55): "Instead of having assistants that are talking to people... (Multimodal LLM) assistants that think on their own at a sufficient speed with a good user experience."&lt;/p&gt;

&lt;p&gt;Excited for whats next!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/Vhl3Q-Oe5Ug?si=Fz4w9js9PW2rr-v7"&gt;Amazing presentation&lt;/a&gt;: &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29ewthoi7rdt1frvmtni.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29ewthoi7rdt1frvmtni.PNG" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>machinelearning</category>
      <category>nvidia</category>
    </item>
    <item>
      <title>Embedded Systems Optimization Techniques</title>
      <dc:creator>Siddharth Bakshi</dc:creator>
      <pubDate>Tue, 14 Apr 2020 12:10:23 +0000</pubDate>
      <link>https://dev.to/sid16/embedded-systems-optimization-techniques-1j41</link>
      <guid>https://dev.to/sid16/embedded-systems-optimization-techniques-1j41</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;“Things should be made as simple as possible, but not any simpler.”- Albert Einstein. Most embedded systems courses in universities start by teaching students about the basics of hardware (resistor, diode, bits and bytes, etc). How to represent and interact with those components in C/C++. How to then develop embedded applications-done in Labs, which can often be a “hit or miss” learning experience based on your Professor; an implication I am making based on reliable feedback from my peers studying at UWaterloo, Western and Queens engineering programmes. I myself am an engineering student at the Lassonde School of Engineering at York University, in Toronto. I was taught about Embedded Systems by &lt;a href="https://www.eecs.yorku.ca/~drsmith/" rel="noopener noreferrer"&gt;Professor.James Smith&lt;/a&gt;. For the unfortunate among us, and to ensure all readers are on equal footing, the embedded software development process, specifically the application build process comprises three sub-processes: Compiling, Linking and Locating (as seen in figure).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fi2gw2c7lhgd6diygc9li.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fi2gw2c7lhgd6diygc9li.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Figure 1&lt;/strong&gt; - Image from (Barr &amp;amp; Massa, 2009). These processes run on a host computer. For example, inside of an IDE which has built-in tools such as a compiler, linker, assembler, and debugger etc). The purpose of using these tools is to construct an executable binary image that will execute only on a target embedded system.&lt;/p&gt;

&lt;p&gt;A whole article could be written about each of the above sub-processes; one just requires enough reference material(s) and most importantly, in my opinion, interest. And though most embedded systems courses cover memory management, and hardware and software debugging techniques-- putting it all together with peripheral interfacing methodologies and handling interrupts. What most embedded systems courses in Universities across Ontario don't cover, and what this article is about: strategies for increasing code efficiency, reducing memory usage, and lowering power requirements.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  A note regarding C++:
&lt;/h4&gt;

&lt;p&gt;Expensive features such templates, exceptions and runtime type identification can negatively impact execution time and code size. Thus it is advised to experiment, before deploying the product/application for production).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;The need for low-cost versions of a product drives hardware designers to provide just barely enough memory and power to get the job done (Barr &amp;amp; Massa, 2009). Thus, implementing any one of these optimization strategies during the software development phase can be a valuable skill for any engineer or programmer alike. Furthermore, it can decrease the operational expenses of  your product and in turn, your organizations by tens or even thousands of dollars. Keep in mind however, most of these optimization techniques on code involve a trade-off. This trade-off is between code size and execution speed. An engineer/programmer may make their application faster or smaller, but not both (Barr &amp;amp; Massa, 2009). As a matter of fact, an improvement in one area can be detrimental to the other. Therefore, allocating adequate time for requirement analysis and system specification is highly encouraged. It is up to the engineer/programmer to decide which of these improvements is most important to him/her. &lt;/p&gt;

&lt;h2&gt;
  
  
  The First Step...
&lt;/h2&gt;

&lt;p&gt;The first step to solving an optimization issue with respect to embedded applications is to determine what issue one wants to solve. Size issue? Speed issue? Or both? For a single type of issue the engineer/programmer may utilize the compiler to focus on that particular area. The compiler is in a much better position relative to the engineer/programmer to make changes across all software modules (Barr &amp;amp; Massa, 2009). However, if the issue is both speed and size of the application, then it is strongly recommended that the engineer/programmer make code size optimizations using the compiler’s help. Then manually refactor their code to identify bottlenecks and time-critical sections, to make those parts of the code that have short-deadlines and most frequent execution more efficient. (In devices that are battery-powered, reduced runtime can be achieved for every unnecessary processor cycle result. Thus, what engineer/programmer must do is to optimize for speed across the entire application).  &lt;/p&gt;

&lt;h2&gt;
  
  
  Increasing Code Efficiency
&lt;/h2&gt;

&lt;p&gt;When identifying execution time i.e. speed as the single primary issue over code size, the engineer/programmer can apply the following techniques:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inline functions,&lt;/li&gt;
&lt;li&gt;Table look-ups,&lt;/li&gt;
&lt;li&gt;Hand-coded Assembly,&lt;/li&gt;
&lt;li&gt;Register variables,&lt;/li&gt;
&lt;li&gt;Global variables,&lt;/li&gt;
&lt;li&gt;Polling,&lt;/li&gt;
&lt;li&gt;Fixed-point arithmetic, and &lt;/li&gt;
&lt;li&gt;Loop unrolling.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Decreasing Code size
&lt;/h2&gt;

&lt;p&gt;As stated before, for making optimization to code size it highly recommended that the engineer/programmer make use of the compiler. After these automatic optimizations, the engineer/programmer could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Avoid standard library and routines, &lt;/li&gt;
&lt;li&gt;Use to goto statements, and&lt;/li&gt;
&lt;li&gt;Same of the techniques mentioned above- table look-ups, register variables, global variables, and hand-coded Assembly (this yields the largest decrease in code size)(Barr &amp;amp; Massa, 2009).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Reducing Memory Usage
&lt;/h2&gt;

&lt;p&gt;In those cases where RAM rather than the ROM is the limiting factor, the engineer/programmer is strongly encouraged to reduce dependence on global data, the stack and the heap. These are manual optimizations that are better made by the engineer/programmer as opposed to the compiler. &lt;/p&gt;

&lt;h2&gt;
  
  
  Power-Saving Techniques
&lt;/h2&gt;

&lt;p&gt;To conserve power in an embedded system, the engineer/programmer can control the clock frequency and use power-sensitive processors. These are power-saving strategies under software control. In-contrast to using low-voltage ICs and circuit shutdown techniques, etc- used by hardware designers. Also, instead of solely focusing on speed or code size, the engineer/programmer is highly encouraged to focus on analyzing code to determine how to reduce external bus transactions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Specifically...
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Inline Functions
&lt;/h3&gt;

&lt;p&gt;The keyword inline could be added to any function declaration (starting C99). It asks the compiler to replace all calls to the indicated function with copies of the code that is inside (Barr &amp;amp; Massa, 2009). Thus, the runtime overhead associated with the function call is eliminated. Furthermore, is most effective when the function is used frequently but contains only a few lines of code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Table lookups
&lt;/h3&gt;

&lt;p&gt;Given the engineer/programmer understands the value of test and jump, which consumes valuable processor time. A switch statement could used to decrease execution time by putting the individual cases in order by their relative frequency of occurrence. This will reduce the average execution time, though it will not improve at all upon the worst-case time (Barr &amp;amp; Massa, 2009). Thus, If there is a lot of work to be done within each case, it might be more efficient to replace the entire switch statement with a table of pointers to functions: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;

&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;NodeType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NODE_A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;NODE_B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;NODE_C&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getNodeType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;NODE_A&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;NODE_B&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;NODE_C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Instead, replace this switch statement with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;processNodeA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;processNodeB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;processNodeC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// The first part of this is the setup: the creation of an array of function pointers.&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;nodeFunctions&lt;/span&gt;&lt;span class="p"&gt;[])(&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;processNodeA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;processNodeB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;processNodeC&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="c1"&gt;//The second part is a one-line replacement for the switch statement that executes more efficiently.&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nodeFunctions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;getNodeType&lt;/span&gt;&lt;span class="p"&gt;()](&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Hand-coded assembly
&lt;/h3&gt;

&lt;p&gt;Most C compilers produce better machine code than the average engineer/programmer (Barr &amp;amp; Massa, 2009). However, a skilled and experienced assembly engineer/programmer may do better work than the compiler for a given function.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Register variables
&lt;/h3&gt;

&lt;p&gt;The register keyword can be used when declaring local variables. Doing so asks the compiler to place variable into a general-purpose register rather than on the stack. Used correctly, this technique provides hints to the compiler about the most frequently accessed variables and enhances the performance of the function. The more frequently the function is called, the more likely it is that such a change will improve the code's performance.&lt;/p&gt;
&lt;h3&gt;
  
  
  Global variables
&lt;/h3&gt;

&lt;p&gt;Efficiency can be obtained by using global variables instead of passing parameters to functions. Doing so eliminates the need to push the parameter onto the stack before the function call and pop it back-off once the function is completed. In fact, the most efficient implementation of any subroutine would have no parameters at all (Barr &amp;amp; Massa, 2009).&lt;/p&gt;
&lt;h3&gt;
  
  
  Polling
&lt;/h3&gt;

&lt;p&gt;Interrupt Service Routines(ISRs) though improve the responsiveness of a program, in rare cases they can introduce overheads that can cause inefficiency. These rare cases occur when the average time between interrupts is greater than or equal to the interrupt latency.&lt;/p&gt;
&lt;h3&gt;
  
  
  Fixed-point arithmetic
&lt;/h3&gt;

&lt;p&gt;If the application contains one or two Floating-point instructions. Then they can implemented using fixed-point arithmetic. For example, two fractional bits representing a value of 0.00, 0.25, 0.50, or 0.75 are easily stored in any integer by multiplying the real value by 4 (e.g., &amp;lt;&amp;lt; 2). Doing so reduces the very large penalty a processor pays when manipulating a float data type, in contrast to the integer counterparts.&lt;/p&gt;
&lt;h3&gt;
  
  
  Variable size
&lt;/h3&gt;

&lt;p&gt;Using the processor's native register width for variable size (8, 16 or 32-bits), allows the compiler to produce code that leverages the fast registers built into the processor's machine opcodes (Barr &amp;amp; Massa, 2009). It essentially limits the number of external memory accesses if the variable size is tailored to the processors registers. &lt;/p&gt;
&lt;h3&gt;
  
  
  Loop unrolling
&lt;/h3&gt;

&lt;p&gt;Repetitive loop code can be optimized by performing loop unrolling. Do so eliminates the loop overhead at the start and end of a loop. For example, consider the following for-loop:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;incomingData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;This is what it would look like when unrolled:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;

&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;incomingData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;incomingData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;incomingData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;incomingData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;incomingData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;An engineer/programmer may find it helpful to check the assembly output from the compiler to see whether efficiency has actually been improved. In this case, the execution is decreased by eliminating the beginning and ending of the for-loop. However, notice here the trade-off between code size and speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Avoid standard library routines
&lt;/h3&gt;

&lt;p&gt;Through avoiding the use of large standard library routines, the cost in-terms of size may be greatly reduced. This is because the largest routines try to handle all possible cases, which can incur costs in terms of size on application. For example, the strupr function might be small, but a call to it might drag other functions such as strlower , strcmp , strcpy, and others into your program whether they are used or not. A recommended approach is to implement a subset of the functionality into a header file, with significantly less code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using goto statements
&lt;/h3&gt;

&lt;p&gt;In order to remove complicated control structures or share a block of (often) repeated code, goto statements can be used by a engineer/programmer. For example, a goto statement can be used to jump out a routine in case of error. Doing so reduces the size of code that has to processed before the execution of a routine is adequately completed.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;functionWork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;//Do some work here.&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;//If there was an error doing the work, exit. &lt;/span&gt;
&lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;CLEANUP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//Do some more work here.&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;//If there was an error doing the work, exit.&lt;/span&gt;
&lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;CLEANUP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;//Otherwise, everything succeeded. &lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nl"&gt;CLEANUP:&lt;/span&gt;
&lt;span class="c1"&gt;//Clean up code here.&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FAILURE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;h1&gt;
  
  
  Concluding Remarks
&lt;/h1&gt;

&lt;p&gt;"Dead code elimination” is a notorious feature of using the automatic optimization capabilities of the compiler. The compiler eliminates code that it believes to be redundant or irrelevant. Dictated by Murphy's law, using this feature on a well-working program can result in unexpected failures. Often this failure occurs when the compiler removes those instructions that the compiler does know about but are implemented by the engineer/programmer for a particular purpose.&lt;/p&gt;

&lt;p&gt;For example, given the following block of code:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//Most optimizing compilers would remove the first statement&lt;/span&gt;
&lt;span class="c1"&gt;//because the value of *pCtrl is not used before it is overwritten (on the third line)&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pCtrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DISABLE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pCtrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ENABLE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// But what if pCtrl and pData are actually pointers to memory-mapped device registers?&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;In that case, the peripheral device would not receive the DISABLE command before the byte of data was written. Thus, all future interactions between the processor and this peripheral could potentially cause failures to occur(Barr &amp;amp; Massa, 2009)).&lt;/p&gt;

&lt;h3&gt;
  
  
  A Reminder...
&lt;/h3&gt;

&lt;p&gt;Never make the mistake of assuming that the optimized program will behave the same way as the un-optimized one (Barr &amp;amp; Massa, 2009). It is advised that engineer/programmer perform regression testing at each new optimization level to be sure the system/program's behavior hasn't changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  In essence...
&lt;/h3&gt;

&lt;p&gt;This article listed and described strategies for increasing code efficiency, reducing memory usage, and lowering power requirements.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;p&gt;1) Barr, Micheal and Massa, Anthony.(2009, February). PDF format. Programming Embedded Systems, Second Edition with C and GNU Development Tools. &lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwjG7N3j8OfoAhUJmeAKHaBJBlQQFjACegQIAhAB&amp;amp;url=http%3A%2F%2Fstepsmail.com%2Fdownload%2FCareer-In-Embedded-System.PDF&amp;amp;usg=AOvVaw1fzI61R_P5ssSEjVQW63II" rel="noopener noreferrer"&gt;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwjG7N3j8OfoAhUJmeAKHaBJBlQQFjACegQIAhAB&amp;amp;url=http%3A%2F%2Fstepsmail.com%2Fdownload%2FCareer-In-Embedded-System.PDF&amp;amp;usg=AOvVaw1fzI61R_P5ssSEjVQW63II&lt;/a&gt; &lt;br&gt;
2) Smith, James. (2020, January). PDF. Class Slides. &lt;a href="https://moodle.yorku.ca" rel="noopener noreferrer"&gt;https://moodle.yorku.ca&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
