<?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: Pixium Digital</title>
    <description>The latest articles on DEV Community by Pixium Digital (@pixiumdigital).</description>
    <link>https://dev.to/pixiumdigital</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%2Forganization%2Fprofile_image%2F906%2Fc32b3979-cebc-419b-869c-53685c5554b3.png</url>
      <title>DEV Community: Pixium Digital</title>
      <link>https://dev.to/pixiumdigital</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pixiumdigital"/>
    <language>en</language>
    <item>
      <title>SEO: How to optimize your ranking on ChatGPT Search</title>
      <dc:creator>Remi</dc:creator>
      <pubDate>Fri, 08 Nov 2024 10:00:45 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/seo-how-to-optimize-your-ranking-on-chatgpt-search-3m22</link>
      <guid>https://dev.to/pixiumdigital/seo-how-to-optimize-your-ranking-on-chatgpt-search-3m22</guid>
      <description>&lt;p&gt;Discover some best practices to ensure good ranking on ChatGPT Search, OpenAI's new search engine.&lt;/p&gt;

&lt;p&gt;With the launch of its search engine, ChatGPT Search, OpenAI has made a significant impact. While the tool is still far from matching the performance of Google, which has dominated the market for over two decades, it represents a competitor that the Mountain View firm hasn't faced in a long time. For SEO professionals, ChatGPT Search offers a new playing field that could generate substantial traffic to websites, especially thanks to the citations included in its responses.&lt;/p&gt;

&lt;p&gt;Although all the specifics of its functionality haven't been revealed yet, there are still some best practices to adopt to improve your ranking. Here's what we know.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3r505waipjgjhhblytl6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3r505waipjgjhhblytl6.png" alt="Example of ChatGPT search" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does ChatGPT search works?
&lt;/h2&gt;

&lt;p&gt;ChatGPT incorporates two technologies: Microsoft's Bing search index and OpenAI’s proprietary solution. The latter combines the chatbot's two latest language models: GPT-4o and o1-preview. OpenAI’s &lt;a href="https://platform.openai.com/docs/bots/overview-of-openai-crawlers" rel="noopener noreferrer"&gt;technical documentation&lt;/a&gt; lists three distinct crawlers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAI-SearchBot: This is the primary crawler for search functions, indexing content to improve site visibility in OpenAI's results.&lt;/li&gt;
&lt;li&gt;ChatGPT-User: This crawler responds to user requests in real-time, enabling direct interactions with external applications.&lt;/li&gt;
&lt;li&gt;GPTBot: GPTBot is dedicated to training the AI models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ensure your site's indexing by ChatGPT Search
&lt;/h2&gt;

&lt;p&gt;Considering the previously mentioned elements, it is essential to facilitate the indexing of your site by ChatGPT Search. First, &lt;strong&gt;make sure to configure your robots.txt file&lt;/strong&gt; to allow access for both OAI-SearchBot and ChatGPT-User. GPTBot, on the other hand, can be blocked without affecting your search visibility. A possible solution if you prefer not to have your content used for model training.&lt;/p&gt;

&lt;p&gt;Bing’s technology could contribute a significant portion of traffic, as many SEO specialists have observed strong similarities between article rankings on both platforms. Therefore, it is also crucial to ensure good indexing of your site on Bing. A clear site architecture will also be beneficial.&lt;/p&gt;

&lt;p&gt;'For search results, please note that it may take around 24 hours between a site’s robots.txt file update and our systems adapting,' specifies OpenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content: How to appeal to ChatGPT Search?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Send Signals of Reliability
&lt;/h3&gt;

&lt;p&gt;When it comes to content, ChatGPT's new search engine emphasizes the reliability of sources. Aware of the concerns that an AI-based search engine could raise, particularly due to the hallucinations that the chatbot sometimes generates, OpenAI has partnered with numerous reputable media outlets to strengthen its credibility. Citing your sources and, conversely, &lt;strong&gt;having your articles referenced&lt;/strong&gt; across various media outlets, websites, or social networks will send a positive signal to the search engine.&lt;/p&gt;

&lt;p&gt;ChatGPT also &lt;strong&gt;prioritizes up-to-date content&lt;/strong&gt;. Therefore, it is essential to regularly update your articles, especially if they cover trending news.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimize Your Content for Bing
&lt;/h3&gt;

&lt;p&gt;If your articles rank well on Bing, there's a good chance they'll perform well on ChatGPT Search too. Fortunately, Bing's content recommendations are similar to those of Google. On its &lt;a href="https://www.bing.com/webmasters/help/webmasters-guidelines-30fba23a" rel="noopener noreferrer"&gt;Webmaster Tools page&lt;/a&gt;, Bing suggests the following practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Content for Users: The priority is still rich content based on keyword research, meeting visitor expectations rather than catering to search engines.&lt;/li&gt;
&lt;li&gt;Publish Unique Content: The content should be original to your site.&lt;/li&gt;
&lt;li&gt;Use Optimized Media: Original images and videos relevant to the topic increase engagement. For accessibility, Bing recommends using captions and alt text. Optimizing formats will also help with page load times.
Conversely, like Google, Bing warns against Black Hat SEO practices, such as cloaking, duplicate content, link buying, or affiliate programs without added value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Consider Local SEO
&lt;/h3&gt;

&lt;p&gt;For local searches, ChatGPT provides an interactive map. Places and establishments are selected based on articles from regional daily news, tourism offices, websites specializing in events and activities, or platforms like TripAdvisor. If you operate a local business, being featured in online rankings could secure a good position on ChatGPT Search.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>chatgpt</category>
      <category>website</category>
      <category>ai</category>
    </item>
    <item>
      <title>Discovery: Screenity - A powerful open-source screen capture tool</title>
      <dc:creator>Remi</dc:creator>
      <pubDate>Mon, 04 Nov 2024 10:36:41 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/discovery-screenity-a-powerful-open-source-screen-capture-tool-3in</link>
      <guid>https://dev.to/pixiumdigital/discovery-screenity-a-powerful-open-source-screen-capture-tool-3in</guid>
      <description>&lt;p&gt;Looking for a powerful screen capture tool that respects your privacy?&lt;/p&gt;

&lt;p&gt;Let me introduce you to &lt;a href="https://screenity.io/en/" rel="noopener noreferrer"&gt;Screenity&lt;/a&gt;, an open-source Chrome extension that enables almost anything you can imagine in terms of video capture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Record your current tab, a specific area, your entire desktop, any application, and even your webcam&lt;/li&gt;
&lt;li&gt;Capture audio from your microphone or the internal sound from your computer&lt;/li&gt;
&lt;li&gt;Annotate videos in real-time by drawing, adding text, arrows, shapes, and more&lt;/li&gt;
&lt;li&gt;Use virtual backgrounds and AI-based blur effects to enhance webcam recordings&lt;/li&gt;
&lt;li&gt;Smoothly zoom during recording to highlight specific details&lt;/li&gt;
&lt;li&gt;Blur certain areas to hide sensitive information&lt;/li&gt;
&lt;li&gt;Highlight clicks and mouse movements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But that’s not all! Screenity also includes a full video editor to refine your recordings after capture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trim, crop, and resize your videos&lt;/li&gt;
&lt;li&gt;Add or remove audio tracks&lt;/li&gt;
&lt;li&gt;Export in MP4, GIF, or WEBM formats&lt;/li&gt;
&lt;li&gt;Directly upload to Google Drive for easy sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can even set timers to automatically stop recordings after a defined period—handy for avoiding accidental hours of footage!&lt;/p&gt;

&lt;p&gt;Since its launch, Screenity has gained great popularity, with over 100,000 users. The tool is available in 18 languages and is actively maintained by its creator, &lt;a href="https://www.alyssax.com" rel="noopener noreferrer"&gt;Alyssa X&lt;/a&gt;, with contributions from the community.&lt;/p&gt;

&lt;p&gt;With this tool, your recordings stay on your machine, and no data is collected by any third party. You can even use the extension completely offline if you prefer.&lt;/p&gt;

&lt;p&gt;To try Screenity for yourself, it’s simple. Head to the &lt;a href="https://chromewebstore.google.com/detail/screenity-screen-recorder/kbbdabhdfibnancpjfhlkhafgdilcnji" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt; to install the extension in just a few clicks. It’s a lightweight tool, only about 17 MB.&lt;/p&gt;

&lt;p&gt;Once installed, you’ll see the Screenity icon appear next to your address bar. Click it to open the control panel and choose your capture mode. Be sure to allow access to the microphone and webcam to unlock all features.&lt;/p&gt;

&lt;p&gt;You can also self-host Screenity by downloading the source code from &lt;a href="https://github.com/alyssaxuu/screenity" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. In this case, you’ll need to manually load the extension in Chrome in developer mode. Detailed steps are provided in the repository’s README file.&lt;/p&gt;

&lt;p&gt;In short, whether you’re a trainer, developer, marketer, gamer, or just curious, I encourage you to give &lt;a href="https://screenity.io/en/" rel="noopener noreferrer"&gt;Screenity&lt;/a&gt; a try!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhotuud8pyv3ictc58xe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhotuud8pyv3ictc58xe.png" alt="Screen recording" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faav5mi3kv9c36e821qpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faav5mi3kv9c36e821qpt.png" alt="Annotate, zoom, blur" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuasx1pk07l1p0l78q930.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuasx1pk07l1p0l78q930.png" alt="Edit recording" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyeww8rwe7p71gy9igiv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyeww8rwe7p71gy9igiv.png" alt="Screen recording solution" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>software</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Web Development with AI: Dismantling the Future</title>
      <dc:creator>Remi</dc:creator>
      <pubDate>Wed, 23 Oct 2024 14:41:42 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/web-development-with-ai-dismantling-the-future-36ec</link>
      <guid>https://dev.to/pixiumdigital/web-development-with-ai-dismantling-the-future-36ec</guid>
      <description>&lt;p&gt;In today’s digital era, the rapid advancement of technology continues to drive innovation, with one of the most significant breakthroughs being Artificial Intelligence (AI). Across various industries, AI is making a major impact, especially in web development.&lt;/p&gt;

&lt;p&gt;Traditionally, web development involved manual coding and extensive testing. However, the emergence of AI has transformed this process. By utilizing advanced algorithms and data analysis, AI helps create websites that are not only visually appealing but also functionally sound and user-focused.&lt;/p&gt;

&lt;p&gt;AI's evolution marks a major shift in web development, affecting everything from design and user experience to accessibility and search engine optimization (SEO). This shift unlocks new possibilities, enabling developers to build more engaging, interactive, and personalized digital experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Role of AI in Web Development
&lt;/h2&gt;

&lt;p&gt;Incorporating AI into web development is more than just a trend—it’s a necessity in today’s fast-paced, digital-centric world. AI tools offer numerous advantages for developers and businesses, such as automating routine tasks, thereby reducing the time and effort required for web development.&lt;/p&gt;

&lt;p&gt;More importantly, AI tools elevate website functionality by offering personalized user experiences. They can analyze user behavior to present tailored content, recommend products or services, and even respond to real-time queries via AI-driven chatbots.&lt;/p&gt;

&lt;p&gt;That’s not all. AI tools also enhance a website’s search engine visibility by assisting developers in following SEO best practices. As a result, integrating AI into web development is essential for building dynamic, user-friendly, and highly optimized websites that promote business growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Role of AI in Web Development
&lt;/h2&gt;

&lt;p&gt;Artificial Intelligence (AI) has opened up a new world of opportunities in web development, offering far more than just a technological trend. It's about improving efficiency, productivity, and user experience, with AI tools playing a pivotal role in this transformation.&lt;/p&gt;

&lt;p&gt;These tools enable developers to automate repetitive tasks such as code generation, error detection, and even layout design. For example, AI-powered design assistants can create visually appealing, responsive web templates based on user preferences.&lt;/p&gt;

&lt;p&gt;In terms of coding, AI tools can autocomplete code, drastically reducing development time. By streamlining web development processes, AI allows developers to focus on more complex tasks, ultimately improving the quality of the final product.&lt;/p&gt;

&lt;h1&gt;
  
  
  Applications of AI in Web Development
&lt;/h1&gt;

&lt;p&gt;AI extends its reach far beyond design and coding, influencing many other aspects of web development. One notable application is the AI-powered chatbot, which enhances customer service by providing real-time, personalized responses to user inquiries.&lt;/p&gt;

&lt;p&gt;With the integration of Natural Language Processing (NLP), these chatbots can understand and communicate in human language, offering an experience that feels natural and conversational.&lt;/p&gt;

&lt;p&gt;Another key area where AI is applied in web development is in creating personalized user experiences. AI-driven tools analyze user behavior, preferences, and interaction patterns to deliver tailored content and recommendations. This not only increases user engagement but also boosts the likelihood of conversions. As AI continues to evolve, its applications in web development will likely expand, redefining the way websites are built and experienced.&lt;/p&gt;

&lt;h2&gt;
  
  
  In-Depth Look at AI in Web Development
&lt;/h2&gt;

&lt;p&gt;Artificial Intelligence (AI) and its tools have become crucial elements in modern web development, revolutionizing the industry. AI-powered chatbots, for example, play a key role in enhancing user engagement by offering real-time assistance, answering questions, and even processing transactions, ultimately improving the overall user experience.&lt;/p&gt;

&lt;p&gt;AI tools are also instrumental in optimizing website design and performance. By automating repetitive tasks, they enable developers to concentrate on more complex aspects of the project. For instance, AI can analyze user interaction data to suggest layout and design improvements, helping to boost user engagement and conversion rates.&lt;/p&gt;

&lt;p&gt;Additionally, AI-powered analytics offer valuable insights into user behavior, paving the way for a more personalized and engaging experience. As we explore the various ways AI improves web development, it’s essential to recognize that effectively implementing AI requires a thorough understanding of the technology and its potential applications.&lt;/p&gt;

&lt;p&gt;This is where the expertise of a professional web development agency comes into play. A skilled agency with AI knowledge can help you harness its full potential, ensuring your website not only looks great but also performs optimally while delivering an exceptional user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Tools in Web Development
&lt;/h2&gt;

&lt;p&gt;AI tools have evolved in web development from being used primarily in large-scale projects to becoming accessible resources for developers at all levels. Machine learning algorithms, a key component of AI, are commonly employed for tasks like data analysis, trend forecasting, and understanding user behavior, enabling the creation of more personalized and user-friendly websites.&lt;/p&gt;

&lt;p&gt;AI-driven development tools, such as automated design systems, use machine learning to generate design templates tailored to users' specific needs and preferences. AI coding assistants can offer code optimizations, detect bugs, and even anticipate where developers might require support.&lt;/p&gt;

&lt;p&gt;In addition, AI-powered testing tools can identify and diagnose issues more quickly and accurately than manual testing, drastically reducing the time needed for debugging and quality assurance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Will AI Replace Web Developers?
&lt;/h2&gt;

&lt;p&gt;A frequently debated topic in the realms of Artificial Intelligence and web development is whether AI will eventually replace web developers. However, it's important to recognize that while AI can automate many tasks, it cannot replicate the creativity and problem-solving abilities of a human developer.&lt;/p&gt;

&lt;p&gt;A deep understanding of business objectives, the ability to address complex issues, and the innovation required for unique solutions are all aspects of web development that AI currently cannot replicate.&lt;/p&gt;

&lt;p&gt;As a result, while AI can greatly assist developers in their work, it's unlikely to fully replace them. Instead, the future of web development lies in the collaboration between AI and human expertise, combining the strengths of both for optimal results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Importance of Web Developers Learning AI
&lt;/h2&gt;

&lt;p&gt;As AI continues to play a significant role in web development, it is becoming essential for web developers to understand and utilize this technology. Gaining knowledge in artificial intelligence enables developers to take advantage of AI tools, such as automating repetitive tasks, enhancing code quality, improving website functionality, and optimizing user experiences.&lt;/p&gt;

&lt;p&gt;Moreover, familiarity with AI can create new opportunities for developers, including AI-driven app development and AI model training. Consequently, learning AI has transitioned from being a choice to a necessity for web developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for Web Developers to Use AI Effectively
&lt;/h2&gt;

&lt;p&gt;As web developers begin their journey into AI, here are some strategies for effectively integrating AI into the web development process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Utilize AI Assistants: AI assistants can aid developers in various tasks, from debugging code to generating snippets. They enhance the speed and efficiency of software development.&lt;/li&gt;
&lt;li&gt;Incorporate AI in Design: AI can help create dynamic and responsive designs, leading to improved user experience and engagement.&lt;/li&gt;
&lt;li&gt;Employ AI for Testing: AI tools can swiftly identify and resolve bugs in the code, significantly reducing the time required for testing.&lt;/li&gt;
&lt;li&gt;Enhance Personalization with AI: AI can analyze user behavior to deliver personalized experiences, boosting user satisfaction and conversion rates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Integrating AI into web development does not signal the end of the profession. Instead, it presents an opportunity for developers to refine their skills, increase efficiency, and create more advanced and user-friendly websites.&lt;/p&gt;

&lt;p&gt;AI is simply a tool, and like any other tool, its effectiveness is determined by the user's expertise. Thus, for web developers, understanding and skillfully leveraging AI is essential to remain competitive in this rapidly evolving industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Will AI Take Over Web Development?
&lt;/h2&gt;

&lt;p&gt;AI is steadily making its way into the field of web development. In the future, we can anticipate a more personalized user experience as AI algorithms become adept at understanding individual behaviors and preferences.&lt;/p&gt;

&lt;p&gt;The entire process of website creation—from design to deployment—could be streamlined with AI-powered website builders and development tools. These tools have the potential to automate much of the web development process, altering the role of developers and making web development more accessible to those without technical expertise. Nonetheless, the human element in creativity and decision-making will continue to be irreplaceable for now...&lt;/p&gt;

</description>
      <category>futureoftech</category>
      <category>webdev</category>
      <category>aiintech</category>
      <category>development</category>
    </item>
    <item>
      <title>AI in Data Analytics: Transforming Decision-Making</title>
      <dc:creator>Remi</dc:creator>
      <pubDate>Fri, 18 Oct 2024 11:03:24 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/ai-in-data-analytics-transforming-decision-making-28h2</link>
      <guid>https://dev.to/pixiumdigital/ai-in-data-analytics-transforming-decision-making-28h2</guid>
      <description>&lt;p&gt;Have you ever considered just how much data is produced on a daily basis? The numbers are staggering—over 2.5 quintillion bytes every day! That’s right. From social media updates to e-commerce transactions, sensor data to digital imagery, the digital world is growing at an exponential rate, overwhelming businesses with an immense flood of information.&lt;/p&gt;

&lt;p&gt;In this age of data explosion, companies face a critical question: How can they tap into this massive wave of information to make smarter, data-driven decisions? While traditional data analytics have been useful, they often fall short in handling the sheer scale, diversity, and speed of data being generated in today's digital environment.&lt;/p&gt;

&lt;p&gt;Enter Artificial Intelligence (AI), a game-changing force that's transforming the field of data analytics.&lt;/p&gt;

&lt;p&gt;In today’s highly competitive and data-centric world, businesses aren’t just overwhelmed by data; they’re actively seeking ways to dive deeper and extract meaningful insights that can drive innovation, streamline processes, and foster strategic growth. Organisations are now investing in AI to enhance their analytics capabilities and secure a competitive advantage in their industries.&lt;/p&gt;

&lt;p&gt;But what exactly does AI bring to the table, and how is it fundamentally changing the way organisations make decisions?&lt;/p&gt;

&lt;p&gt;In this article, we’ll take a deep dive into the world of AI-powered data analytics, uncovering its transformative impact, key advantages, and practical strategies for successful implementation. From revealing hidden insights to forecasting future trends, and from automating mundane tasks to creating personalized user experiences, AI is set to revolutionize decision-making in the digital era. Get ready to explore the exciting convergence of AI and data analytics, where the opportunities are as limitless as the data itself.&lt;/p&gt;

&lt;h1&gt;
  
  
  Understanding The Role of AI in Data Analytics
&lt;/h1&gt;

&lt;p&gt;Understanding AI’s role in data analytics involves a deeper look at how AI techniques enhance and extend traditional data analysis. By introducing advanced algorithms, AI empowers organizations to gain deeper insights, detect hidden patterns, and build predictive models. Here's how AI is reshaping the landscape of data analytics:&lt;/p&gt;

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

&lt;p&gt;AI streamlines time-consuming tasks like data cleaning, preprocessing, and transformation. Using machine learning and natural language processing, AI efficiently manages these tasks, allowing data professionals to concentrate on more strategic work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved Data Processing
&lt;/h2&gt;

&lt;p&gt;AI excels at processing large volumes of both structured and unstructured data at incredible speeds. Whether analyzing customer transactions, social media interactions, or IoT sensor data, AI can seamlessly handle varied datasets, making it easier for businesses to derive insights from complex data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern Recognition &amp;amp; Prediction
&lt;/h2&gt;

&lt;p&gt;AI, particularly through machine learning, is highly effective at identifying patterns and trends in data. By analyzing historical data, AI can detect correlations, anomalies, and predictive trends, helping businesses anticipate future developments, forecast demand, and make proactive decisions to stay ahead of competitors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extracting Insights from Unstructured Data
&lt;/h2&gt;

&lt;p&gt;While traditional analytics struggles with unstructured data like text, images, and video, AI-powered technologies such as natural language processing (NLP) and computer vision allow organizations to uncover valuable insights. For instance, sentiment analysis can gauge customer feelings from social media, and image recognition can detect patterns in visual data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-time Decision-Making
&lt;/h2&gt;

&lt;p&gt;AI enables real-time analysis and decision-making by processing live data streams. This ability is critical for dynamic industries like finance, manufacturing, and supply chain management, where quick insights can drive operational efficiency and strategic decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalization &amp;amp; Customer Insights
&lt;/h2&gt;

&lt;p&gt;AI facilitates personalized experiences by analyzing customer data and behaviors. By segmenting audiences, predicting preferences, and tailoring marketing efforts, AI helps organizations enhance customer satisfaction and loyalty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Risk Management &amp;amp; Fraud Detection
&lt;/h2&gt;

&lt;p&gt;AI analytics platforms are skilled at spotting potential risks and identifying anomalies, helping companies detect fraud, monitor cybersecurity, and ensure compliance. AI’s ability to flag unusual patterns provides timely alerts for decision-makers.&lt;/p&gt;

&lt;p&gt;In summary, AI elevates data analytics from being just descriptive or diagnostic to becoming predictive and prescriptive. By embracing AI, businesses can unlock the full potential of their data, driving innovation and gaining a competitive edge in the data-driven world.&lt;/p&gt;

&lt;h1&gt;
  
  
  Benefits of AI in Data Analytics
&lt;/h1&gt;

&lt;p&gt;The advantages of Artificial Intelligence (AI) in data analytics are broad and impactful, touching various facets of data processing, analysis, and decision-making. Here’s a closer look at how AI transforms this field:&lt;/p&gt;

&lt;h2&gt;
  
  
  Greater Accuracy and Precision
&lt;/h2&gt;

&lt;p&gt;AI algorithms can process large datasets with exceptional accuracy. Using advanced statistical models and machine learning, AI identifies subtle patterns, correlations, and anomalies that human analysts might overlook. This heightened precision minimizes errors, ensuring that insights are both reliable and actionable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accelerated Insights and Real-time Decisions
&lt;/h2&gt;

&lt;p&gt;AI processes data at remarkable speeds, allowing organizations to gain insights and make decisions in real time. Whether analyzing live data from IoT devices, monitoring social media activity, or detecting financial anomalies, AI algorithms handle data streams swiftly, enabling timely and decisive actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost Efficiency and Resource Optimization
&lt;/h2&gt;

&lt;p&gt;By automating repetitive tasks, AI reduces the need for manual intervention, cutting down on time and labor costs. Additionally, AI-driven analytics platforms optimize resource allocation by identifying inefficiencies, streamlining processes, and ensuring optimal use of resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smarter Decision-making and Strategic Planning
&lt;/h2&gt;

&lt;p&gt;AI-generated insights equip decision-makers with critical data and recommendations. By analyzing past data, predicting future trends, and simulating various scenarios, AI helps businesses make informed, strategic decisions—whether it’s refining marketing campaigns, optimizing resources, or discovering new business opportunities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalized Customer Experiences
&lt;/h2&gt;

&lt;p&gt;AI can analyze customer data to tailor products, services, and marketing based on individual behaviors and preferences. Through segmentation and predictive analytics, AI enables businesses to deliver personalized experiences that drive engagement and customer loyalty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Risk Management and Fraud Detection
&lt;/h2&gt;

&lt;p&gt;AI analytics are effective in identifying risks, detecting fraud, and addressing cybersecurity threats. By recognizing patterns and anomalies, AI can proactively flag potential threats, ensuring compliance and protecting assets in real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fostering Innovation and Competitive Edge
&lt;/h2&gt;

&lt;p&gt;AI helps organizations explore new avenues and uncover insights that lead to innovation. By analyzing market trends, customer preferences, and emerging technologies, AI reveals opportunities to develop cutting-edge products, capitalize on untapped markets, and maintain a competitive edge in a fast-paced business environment.&lt;/p&gt;

&lt;p&gt;In essence, AI unlocks the full potential of data analytics, driving efficiency, agility, and innovation. By leveraging these capabilities, organizations can gain actionable insights, make well-informed decisions, and meet their strategic goals in today’s data-driven world.&lt;/p&gt;

&lt;h1&gt;
  
  
  Best Practices of AI in Data Analytics
&lt;/h1&gt;

&lt;p&gt;Successfully implementing AI in data analytics requires adhering to best practices to ensure solutions are effective, reliable, and ethically sound. Here’s a breakdown of key considerations:&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Quality Management
&lt;/h2&gt;

&lt;p&gt;High-quality data is fundamental for AI-driven analytics. Ensure that the data is relevant, accurate, and consistent through processes like data cleansing, normalization, and validation. Implementing strong data governance practices ensures data integrity throughout its lifecycle, from collection to analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interdisciplinary Collaboration
&lt;/h2&gt;

&lt;p&gt;AI solutions benefit from the input of diverse teams, including data scientists, domain experts, business leaders, and IT professionals. Collaboration among these groups ensures AI models address real-world challenges effectively and align with business objectives, enhancing both the design and deployment of AI-powered analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ongoing Learning and Improvement
&lt;/h2&gt;

&lt;p&gt;AI models require continuous refinement to remain effective. Regularly update and optimize algorithms to reflect evolving data patterns and business needs. Continuous education for your team on the latest AI developments ensures they remain capable of maintaining and improving AI systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ethics and Transparency
&lt;/h2&gt;

&lt;p&gt;It’s crucial to address ethical concerns such as privacy, fairness, and transparency. Following data privacy regulations and promoting transparency in how AI models operate builds trust. Organizations must also work to eliminate biases within AI algorithms and ensure responsible handling of sensitive information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Culture of Innovation
&lt;/h2&gt;

&lt;p&gt;Encourage experimentation with new AI technologies and techniques to enhance data analytics capabilities. Allocate resources for research and pilot projects to explore emerging trends, novel algorithms, and potential use cases, positioning your organization at the forefront of innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scalability and Integration
&lt;/h2&gt;

&lt;p&gt;Design AI systems with scalability and adaptability in mind. Modular architectures allow for seamless integration with existing data infrastructures and workflows, supporting the expanding data volumes and changing business needs. Scalable AI platforms enable broader deployment across business units.&lt;/p&gt;

&lt;p&gt;By following these best practices, organizations can maximize the impact of AI in data analytics, driving better decisions and staying competitive in a data-driven world.&lt;/p&gt;

&lt;h2&gt;
  
  
  User Training and Adoption
&lt;/h2&gt;

&lt;p&gt;It’s essential to educate users and stakeholders on the capabilities, limitations, and advantages of AI-powered analytics to encourage widespread adoption and maximize its potential. Offering training sessions, workshops, and ongoing learning opportunities helps users become proficient in interpreting AI-driven insights and using AI tools effectively. By incorporating these insights into daily decision-making, organizations can create a more data-driven culture. Engaging users and gathering feedback are key to refining AI solutions and ensuring continuous improvements.&lt;/p&gt;

&lt;p&gt;By embracing these best practices, organizations can fully leverage AI in data analytics while minimizing risks and promoting ethical use. Proper implementation of AI tools can lead to innovation, better decision-making, and measurable business outcomes in today’s data-rich environment.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;AI has truly transformed the landscape of data analytics, fundamentally changing how organizations make decisions. Its capacity to analyze extensive datasets, uncover complex patterns, and provide real-time actionable insights enables businesses to make informed, data-driven choices with confidence. By implementing AI algorithms, organizations can improve not only the accuracy and efficiency of their data analysis but also their competitiveness and agility in the rapidly changing business environment.&lt;/p&gt;

&lt;p&gt;Nevertheless, as organizations begin their journey into AI-driven analytics, it is crucial to proceed with caution by following best practices and ethical guidelines to effectively manage potential risks. Prioritizing data quality, encouraging interdisciplinary collaboration, and fostering a culture of continuous learning and innovation will allow organizations to maximize the benefits of AI in data analytics while addressing biases and ethical issues.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://pixiumdigital.com" rel="noopener noreferrer"&gt;Pixium Digital&lt;/a&gt;, we recognize the transformative potential of AI in data analytics, and we are dedicated to helping organizations leverage this power to drive growth and innovation. With our expertise organisations can derive actionable insights, enhance decision-making processes, and gain a competitive advantage in the digital age. If you’re ready to begin your AI-powered analytics journey, partner with Pixium Digital to unlock the full potential of your data.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>dataanalytics</category>
    </item>
    <item>
      <title>Create Random team names for projects</title>
      <dc:creator>Médéric Burlet</dc:creator>
      <pubDate>Tue, 22 Mar 2022 08:26:55 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/create-random-team-names-for-projects-3nf9</link>
      <guid>https://dev.to/pixiumdigital/create-random-team-names-for-projects-3nf9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Here at &lt;strong&gt;Pixium Digital&lt;/strong&gt; we often need to create sets of random usernames or team names.&lt;/p&gt;

&lt;p&gt;This is either due to bench-marking with a need to simulate individuals groups or users.&lt;/p&gt;

&lt;p&gt;Or for a need to &lt;strong&gt;anonymize leader-boards&lt;/strong&gt; in various applications. This can be due to the fact that some applications have big firms as client that they want to keep anonymous hence we generate a random team or group name that can be displayed publicly without risking information leakage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xT4uQBmMGEoGWSCCVG/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xT4uQBmMGEoGWSCCVG/giphy.gif" alt="leaderboard" width="320" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this we have decided to build a small library that we can re-use to help us generate this content easily.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basics
&lt;/h2&gt;

&lt;p&gt;We first started to create a list of various information we would need. This includes adjectives, nouns, gamertags, colors, extended colors.&lt;/p&gt;

&lt;p&gt;You find the more detailed list here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pixiumdigital/random-namer/tree/master/src/data"&gt;https://github.com/pixiumdigital/random-namer/tree/master/src/data&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;We then wanted to create the possibility to add an ID at the end of the random generated content (discord like) so we could have a result like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;myC00lUsername#3948&lt;/li&gt;
&lt;li&gt;thundering-memory#8682&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this we used a little trick of &lt;code&gt;Math.random()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * Generates a random ID (discord style)
 * @returns string
 */&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;substring&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="mi"&gt;6&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;h2&gt;
  
  
  Formats
&lt;/h2&gt;

&lt;p&gt;Most of the random lists will be in the following format &lt;code&gt;string[]&lt;/code&gt; however there will be specifications. For example teams will be composed in this format:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;adjective&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;noun&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;icy-dinosaurs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mighty-scarecrow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aquatic-squirrels&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;defiant-camp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;natural-memory&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then we have the Extended Colors which are of the following format:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ExtendedColor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
    &lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
    &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
    &lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
    &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;To use the library you simply need to do the following:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;pixium&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;digital&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;namer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then you can use it like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RandomNamer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;RandomType&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@pixium-digital/random-namer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;RandomNamer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;RandomType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TEAM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;toGenerate&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="na"&gt;allUnique&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;addId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// ['voiceless-sea#4457', 'delicate-star#6563', 'even-nest#9988']&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;RandomNamer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;RandomType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GAMERTAG&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;toGenerate&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="c1"&gt;// ['The Best Yoda', 'I_Cant_Play']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Link
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pixiumdigital"&gt;
        pixiumdigital
      &lt;/a&gt; / &lt;a href="https://github.com/pixiumdigital/random-namer"&gt;
        random-namer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Simple random name generator for various utilities
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Random Namer&lt;/h1&gt;
&lt;p&gt;This project aims to simply provide random usernames, team names, gamertags, adjectives, colors to use in testing data.&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;div class="highlight highlight-source-ts position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;yarn&lt;/span&gt; &lt;span class="pl-s1"&gt;install&lt;/span&gt; @&lt;span class="pl-s1"&gt;pixium&lt;/span&gt;&lt;span class="pl-c1"&gt;-&lt;/span&gt;&lt;span class="pl-s1"&gt;digital&lt;/span&gt;&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-s1"&gt;random&lt;/span&gt;&lt;span class="pl-c1"&gt;-&lt;/span&gt;&lt;span class="pl-s1"&gt;namer&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;div class="highlight highlight-source-ts position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-smi"&gt;RandomNamer&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-smi"&gt;RandomType&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"@pixium-digital/random-namer"&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;list&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-smi"&gt;RandomNamer&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-smi"&gt;RandomType&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;TEAM&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-c1"&gt;toGenerate&lt;/span&gt;: &lt;span class="pl-c1"&gt;3&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-c1"&gt;allUnique&lt;/span&gt;: &lt;span class="pl-c1"&gt;true&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-c1"&gt;addId&lt;/span&gt;: &lt;span class="pl-c1"&gt;true&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;
&lt;span class="pl-c"&gt;// ['voiceless-sea#4457', 'delicate-star#6563', 'even-nest#9988']&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;list&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-smi"&gt;RandomNamer&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-smi"&gt;RandomType&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;GAMERTAG&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-c1"&gt;toGenerate&lt;/span&gt;: &lt;span class="pl-c1"&gt;2&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;
&lt;span class="pl-c"&gt;// ['The Best Yoda', 'I_Cant_Play']&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Here is the list of random types that can be passed:&lt;/p&gt;
&lt;div class="highlight highlight-source-ts position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;export&lt;/span&gt; &lt;span class="pl-k"&gt;enum&lt;/span&gt; &lt;span class="pl-smi"&gt;RandomType&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-c1"&gt;ADJECTIVE&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;COLOR&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;EXTENDED_COLOR&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;GAMERTAG&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;NOUN&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;TEAM&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Here are the parameters available to pass to the function&lt;/p&gt;
&lt;div class="highlight highlight-source-ts position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-kos"&gt;{&lt;/span&gt;
    toGenerate: &lt;span class="pl-s1"&gt;number&lt;/span&gt; &lt;span class="pl-c"&gt;// Number of items to generate&lt;/span&gt;
    &lt;span class="pl-s1"&gt;allUnique&lt;/span&gt;?: &lt;span class="pl-s1"&gt;boolean&lt;/span&gt; &lt;span class="pl-c"&gt;// Should the generated items be unique?&lt;/span&gt;
    &lt;span class="pl-s1"&gt;addId&lt;/span&gt;?: &lt;span class="pl-s1"&gt;boolean&lt;/span&gt; &lt;span class="pl-c"&gt;//&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pixiumdigital/random-namer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Pixium Digital&lt;/strong&gt; - Shaping your project with technology and innovation&lt;br&gt;
&lt;a href="https://pixiumdigital.com"&gt;https://pixiumdigital.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/pixiumdigital"&gt;https://github.com/pixiumdigital&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How we handled 350+ online connections on a video game </title>
      <dc:creator>Médéric Burlet</dc:creator>
      <pubDate>Mon, 20 Sep 2021 03:21:28 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/how-we-handled-350-online-connections-on-a-video-game-8ak</link>
      <guid>https://dev.to/pixiumdigital/how-we-handled-350-online-connections-on-a-video-game-8ak</guid>
      <description>&lt;p&gt;We were working with a client on building a video game that had multiplayer integrated.&lt;/p&gt;

&lt;p&gt;The game is more of a tabletop turn based game (think monopoly, life). We had to make sure turns and actions were synchronized across the board. &lt;/p&gt;

&lt;p&gt;Furthermore we had the restraint that only one of the players is essentially the one enables to perform the actions. This means we had to account for scenarios where the client would be disconnected and we had to pass the power of decision to another user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EZnApA7U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/80W1ntjiBxAAAAAd/jim-carrey-ive-got-the-power.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EZnApA7U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/80W1ntjiBxAAAAAd/jim-carrey-ive-got-the-power.gif" alt="I got the power"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the stack
&lt;/h2&gt;

&lt;p&gt;Having had some experience with game jams and other multiplayer games we decided to go with a typescript server leveraging &lt;a href="https://socket.io/"&gt;Socket.IO&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This would let use easily create a client / server using the same typescript types for exchanging data information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7rIia-wK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/7Fa0cWtkMRAAAAAC/mail-download.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7rIia-wK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/7Fa0cWtkMRAAAAAC/mail-download.gif" alt="sending"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Session Context
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;First we wanted to setup our context. This means we could then interact with any game session or client data throughout any Socket.IO event.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;SessionContext&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;activeSessions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;GameSession&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;clientSockets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeSessions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientSockets&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we can see our context is consisted of &lt;code&gt;activeSessions&lt;/code&gt; and &lt;code&gt;clientSockets&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clientSockets&lt;/code&gt; is just an array of strings of the ids of each clients connection. This is used later on on handling disconnection.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;activeSessions&lt;/code&gt; are were we have a list of game session. We use here the type &lt;code&gt;Record&lt;/code&gt; as this lets us access information on a faster scale with just the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mySession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sessionContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeSessions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our class then had a few extra functions that don't need explanation such as (addActiveSession, getSessionByClientSocket, etc.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Handling Disconnections
&lt;/h3&gt;

&lt;p&gt;It was important for us to handle disconnections as if a &lt;strong&gt;client in power&lt;/strong&gt;  gets disconnected we want to give that power to someone else.&lt;/p&gt;

&lt;p&gt;This is where the &lt;code&gt;clientSockets&lt;/code&gt; comes in as it lets us do a difference with the list of clients handled by Socket.IO. This is needed as the disconnect event does not tell us exactly who disconnected.&lt;/p&gt;

&lt;p&gt;We can then have something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;reconcileDisconnect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ioClients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;io&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SocketIO&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Compare the list of the IO Server clients vs the one we stored&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;disconnectedClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientSockets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ioClients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="c1"&gt;// If we have more than one disconnected user then we have discrepancy&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;disconnectedClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Loop through all the disconnected clients&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;disconnectedClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&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="c1"&gt;// Init local variables for easy access&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tmpClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;disconnectedClient&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sessionOfDisconnected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSessionByClientSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tmpClient&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="c1"&gt;// If disconnected client was in a session&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sessionOfDisconnected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tmpSession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeSessions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sessionOfDisconnected&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GM : &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="c1"&gt;// Remove him from the GameSession Client list&lt;/span&gt;
                &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clients&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tmpClient&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="c1"&gt;// Remove him from the global pool of connections&lt;/span&gt;
                &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientSockets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientSockets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tmpClient&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="c1"&gt;// Check if there are no more clients in the GameSession&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clients&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="c1"&gt;// Delete GameSession if there are no more users&lt;/span&gt;
                    &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeSessions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sessionOfDisconnected&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="c1"&gt;// Check if he was has power&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasPower&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;tmpClient&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="c1"&gt;// Log a message if we switched master&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;switchMaster&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Power of the Session (&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) has been changed to Client (&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasPower&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;newPowerClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getClientFromSocketId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasPower&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                            &lt;span class="nx"&gt;tmpSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;broadcast&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;newGameMaster&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;newPowerClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;io&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&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;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;And we now have a new person in power or our session deleted if the  person was the last user in the session.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oUbTfutr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/gWBNAo7iGOYAAAAd/lucifer-devil.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oUbTfutr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/gWBNAo7iGOYAAAAd/lucifer-devil.gif" alt="power"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We have a few other functions for getting and setting information but the main point of this article was to show how to handle identity of disconnections and how to access data efficiently using context.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Pixium Digital&lt;/strong&gt; - Shaping your project with technology and innovation&lt;br&gt;
&lt;a href="https://pixiumdigital.com"&gt;https://pixiumdigital.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/pixiumdigital"&gt;https://github.com/pixiumdigital&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gamedev</category>
      <category>beginners</category>
      <category>socket</category>
    </item>
    <item>
      <title>Deploying React with Express with route integrity</title>
      <dc:creator>Médéric Burlet</dc:creator>
      <pubDate>Wed, 25 Aug 2021 03:36:34 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/deploying-react-with-express-with-route-integrity-2op5</link>
      <guid>https://dev.to/pixiumdigital/deploying-react-with-express-with-route-integrity-2op5</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;As you may or may not know React often uses routing through the browser &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/History"&gt;history API&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A few of the common libraries that you might encounter would  be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Router DOM: &lt;a href="https://www.npmjs.com/package/react-router-dom"&gt;https://www.npmjs.com/package/react-router-dom&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Wouter: &lt;a href="https://www.npmjs.com/package/wouter"&gt;https://www.npmjs.com/package/wouter&lt;/a&gt; (personal favorite)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These libraries will let you define routes and which components are being rendered.&lt;/p&gt;

&lt;p&gt;Quick Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Route&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/about&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;AboutPage&lt;/span&gt;&lt;span class="o"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Route&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Route&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/user/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;UserPage&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Route&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running this in dev mode will work fine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jA5zhK15--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/kwv_MuCidz8AAAAM/yes-will-ferrell.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jA5zhK15--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/kwv_MuCidz8AAAAM/yes-will-ferrell.gif" alt="awesome"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Issue
&lt;/h2&gt;

&lt;p&gt;If you build the react app and try to host it with express you'll notice we run in an issue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;static&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildDirectory&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server started on port 8080`&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;If you navigate to &lt;a href="http://127.0.0.1:8080"&gt;http://127.0.0.1:8080&lt;/a&gt; you'll see your react app.&lt;/p&gt;

&lt;p&gt;However if you navigate to &lt;a href="http://127.0.0.1:8080/about"&gt;http://127.0.0.1:8080/about&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will receive an error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Can't GET /about
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--diAfG_iA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/4Ch9kTLVFJUAAAAC/well-this-brain-is-not-working-squidward.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--diAfG_iA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/4Ch9kTLVFJUAAAAC/well-this-brain-is-not-working-squidward.gif" alt="not working"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Solving the Issue
&lt;/h2&gt;

&lt;p&gt;Our issue comes from the fact that express will only allow the route '/' to be used.&lt;/p&gt;

&lt;p&gt;The idea is that we want to preserve the routes but still display our built &lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For this we can add the following statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sendFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buildDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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;This means that for every route we will render the &lt;code&gt;index.html&lt;/code&gt; however since we are not redirecting we will preserve the URL scheme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nZZgVkpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/ul_Bdn13nnQAAAAC/missionaccomplished-emperorsnewgroove.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nZZgVkpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/ul_Bdn13nnQAAAAC/missionaccomplished-emperorsnewgroove.gif" alt="mission accomplished"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Pixium Digital&lt;/strong&gt; - Shaping your project with technology and innovation&lt;br&gt;
&lt;a href="https://pixiumdigital.com"&gt;https://pixiumdigital.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/pixiumdigital"&gt;https://github.com/pixiumdigital&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>tutorial</category>
      <category>typescript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>No need to open 4 tabs in your terminal for your projects!</title>
      <dc:creator>Médéric Burlet</dc:creator>
      <pubDate>Fri, 09 Jul 2021 14:26:42 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/no-need-to-open-4-tabs-in-your-terminal-for-your-projects-56h3</link>
      <guid>https://dev.to/pixiumdigital/no-need-to-open-4-tabs-in-your-terminal-for-your-projects-56h3</guid>
      <description>&lt;p&gt;Very often when working on full stack solutions we find ourselves opening 4+ tabs in our terminal. We would run a &lt;code&gt;yarn dev&lt;/code&gt; for on micro-service then a &lt;code&gt;yarn start&lt;/code&gt; for react and so on.&lt;/p&gt;

&lt;p&gt;This has always been annoying to handle and so we built &lt;code&gt;Child Manager&lt;/code&gt; which lets you manager child processes for your project from just a simple config file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pixiumdigital/child-manager/"&gt;https://github.com/pixiumdigital/child-manager/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;To install run the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @pixium-digital/child-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use NPM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @pixium-digital/child-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run
&lt;/h2&gt;

&lt;p&gt;To leverage child manager simply add a configuration file to your project (see below for config details)&lt;/p&gt;

&lt;p&gt;You can run thew following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn child-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default the loaded config will be at the source of the project and be named &lt;code&gt;childmanager.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you wish to load a different file just pass the config option.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn child-manager --config="./myconfig.json"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;You can then access the manager at the following:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:7000"&gt;http://localhost:7000&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;Here is an example configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "processes": [
    {
      "name": "Test Service",
      "command": {
        "executor": "node",
        "args": ["TestService.js"],
        "path": "./src/service",
        "isWindows": false
      },
      "maxLogs": 200
    },
    {
      "name": "Service 2",
      "command": {
        "executor": "yarn",
        "args": ["start"],
        "path": "./other-project/service",
        "isWindows": false
      },
      "maxLogs": 200
    }
  ],
  "captureExit": true,
  "longLive": false,
  "debug": false
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Generic configurations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;debug&lt;/code&gt;: This will show more logs in the terminal in case something is not working&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;longLive&lt;/code&gt;: This is to force process to stay alive. Use carefully.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;captureExit&lt;/code&gt;: This binds the exit of child manager so that it will kill all childs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Process configurations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;name&lt;/code&gt;: The name of your service&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;maxLogs&lt;/code&gt;: The max number of logs to keep in memory (recommended 200)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;command&lt;/code&gt;: This houses the command line that will be launched&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;executor&lt;/code&gt;: The command executor (yarn, npm, node)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;args&lt;/code&gt;: Array or extra arguments that should be passed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt;: Where the command should be executed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;isWindows&lt;/code&gt;: Is this running on windows system? if yes paths and executors will be automatically changed to be compatible&lt;/li&gt;
&lt;/ul&gt;


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




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With the use of one simple configuration file we are now able to launch all our mini services efficiently and with ease regardless of the fact that it might be a &lt;code&gt;yarn script&lt;/code&gt; a &lt;code&gt;npm script&lt;/code&gt; or even a command line &lt;/p&gt;

&lt;p&gt;If you wish to contribute feel free to check out the code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pixiumdigital/child-manager/"&gt;https://github.com/pixiumdigital/child-manager/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  About Us
&lt;/h2&gt;

&lt;p&gt;Pixium Digital&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pixiumdigital.com"&gt;https://pixiumdigital.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pixiumdigital"&gt;https://github.com/pixiumdigital&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Employee Spotlight: Rachel Low</title>
      <dc:creator>Ludovic Gilbert</dc:creator>
      <pubDate>Fri, 21 May 2021 03:43:07 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/employee-spotlight-rachel-low-4a2a</link>
      <guid>https://dev.to/pixiumdigital/employee-spotlight-rachel-low-4a2a</guid>
      <description>&lt;h4&gt;
  
  
  &lt;em&gt;Employee Name:  Rachel Low&lt;/em&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Role:  Junior Software Engineer&lt;/em&gt;
&lt;/h4&gt;




&lt;h4&gt;
  
  
  Questions
&lt;/h4&gt;

&lt;h5&gt;
  
  
  1. Why did you want to intern at Pixium?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;I want to intern at Pixium Digital because I wanted to try something different from the tried and tested path, smaller-in-size company. I also wanted to try working in a fast paced environment. From my interview process, I realised how approachable and helpful the management team was. After spending a few years at university, I wanted to continue learning throughout my internship. I knew that working at Pixium would allow me to continue to grow and learn as I would be constantly exposed to new technologies. I also knew that working at Pixium could be challenging at times, but the time would be worth it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  2. What advice do you have for prospective interns?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;My Advice: Always Stay Open, Humble, Initiative &amp;amp; Curious (OH IC)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  3. What was the largest obstacle you faced during your onboarding?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;During my onboarding, the largest obstacle I faced was that I ain’t able to apply my theoretical knowledge independently. I was aware that I needed to learn PHP Yii framework and I had also found tons of resources to learn it. The main barrier was when I needed to write new code code for certain functions or to solve a certain problem. That’s why I was stuck and don’t know how to apply my theoretical knowledge to solve the problem. This was a skill gap.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  4. How did you overcome this challenge?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;I overcame this challenge by starting to study a closed to completion project, and I tried to break the project into smaller parts. When I started implementing the small features myself, it was easier for me to implement the logic. If I didn’t understand the logic, I checked for how my feature was connected to the other parts of the app and how I could break the features back into smaller chunks. This way, I could find the solution to my problem. Not to mention, the guidance that I got from the awesome team!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  5. What has been your favorite experience interning at Pixium?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;During my Advanced Technology Attachment Programme (ATAP), a full-time 6 month internship programme at Pixium Digital, I have weekly meetings with the team to address barriers from last week and questions for the upcoming weeks. I like how the bosses ensure that everyone is on the same page and has the same information. Besides work, I also have get-togethers to share ideas about life and my individual progress. These sessions made my experience fruitful and positive. Although I am just an intern, I can reach out to my bosses for help. I like how the bosses take the time and effort to understand my needs. Due to the size of the company and the nature of the projects, I am able to work with everyone in the team at least once. They are very open-minded. I was given a lot of opportunities to be a part of the various projects and discussions. I like how my bosses and supervisors are receptive to my feedback.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  6. What are some of your responsibilities as a junior software engineer intern?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;Some of my responsibilities include the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conduct feasibility studies on the possibility of implementing technologies within Pixium Digital engineering workflow&lt;/li&gt;
&lt;li&gt;Write software that will be used in production and have a meaningful impact on the project&lt;/li&gt;
&lt;li&gt;Give and receive technical feedback through code reviews or design discussions&lt;/li&gt;
&lt;li&gt;Work with senior engineers to find ways to optimise the front-end / UI testing workflow and process&lt;/li&gt;
&lt;li&gt;Support the entire system development lifecycle from requirements gathering through design and development to delivery&lt;/li&gt;
&lt;li&gt;Support the team on existing and new projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  7. What are your plans or goals after interning at Pixium?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;After interning at Pixium, I hope that I can still stay connected with the team. I will continue with my studies at my current university. I would like to take time off to reflect on the skills that have helped me succeed and the areas where I have struggled to excel. By defining what I am good at, I can better communicate my skills and expertise to future employers. Also, by identifying areas that can be improved, I can challenge myself to develop and achieve new goals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  8. What is the one thing that should be taught in school that isn’t already?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;One thing that should be taught in school is the code review process. In school, they only taught us about the fundamentals concepts, tasked us to implement them during our practical lab sessions and graded us. However, there was no-one around who we can question or address what is exactly right or wrong with our code. Code review is very important as it helps the code base stay current. It also helps prevent unwanted, unnecessary, or incorrect code from entering the codebase, especially working on complex projects for the clients.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  9. How are employees empowered to help shape or participate in the office culture?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;The bosses give the team and even interns permission to act and make decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delegate to develop&lt;/li&gt;
&lt;li&gt;Set clear expectations&lt;/li&gt;
&lt;li&gt;Give employees autonomy over assignments&lt;/li&gt;
&lt;li&gt;Provide necessary resources&lt;/li&gt;
&lt;li&gt;Give constructive feedback&lt;/li&gt;
&lt;li&gt;Accept ideas and input&lt;/li&gt;
&lt;li&gt;Communicate the vision of the organization&lt;/li&gt;
&lt;li&gt;Recognise employees for hard work&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Employee Spotlight: Lennel Chua</title>
      <dc:creator>Ludovic Gilbert</dc:creator>
      <pubDate>Wed, 05 May 2021 07:41:39 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/employee-spotlight-lennel-chua-15mg</link>
      <guid>https://dev.to/pixiumdigital/employee-spotlight-lennel-chua-15mg</guid>
      <description>&lt;h4&gt;
  
  
  &lt;em&gt;Employee Name:  Lennel Chua&lt;/em&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Role:  Junior Software Engineer&lt;/em&gt;
&lt;/h4&gt;




&lt;h4&gt;
  
  
  Questions
&lt;/h4&gt;

&lt;h5&gt;
  
  
  1. Why did you want to intern at Pixium?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;I decided to intern at Pixium for 2 main reasons. Firstly, the job scope outlined by them was very much aligned with my course of studies and as such I felt that Pixium would be able to provide me with an environment where I get to practically apply skills that I was taught in school. &lt;br&gt;
Secondly, after doing more research about the company, I was particularly impressed that they offered such a diverse range of services to their clients. This led me to believe that interning at Pixium would enable me to become more proficient in my technical skills and grow in my knowledge and understanding of the ever-changing technological industry.&lt;br&gt;
What advice do you have for prospective interns?&lt;br&gt;
My advice to prospective interns is simply to approach your internship with an open mind and with a posture of humility. I feel that being teachable is a crucial trait in determining how well you will improve and grow. After all, you can’t learn if you aren’t humble enough to realise that there are in fact things for you to learn. So, come with the excitement to learn and with the expectancy that there will be things that you don’t know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  2. What was the largest obstacle you faced during your onboarding?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;The largest obstacle I faced during the onboarding process was probably having to pick up new technologies and methods of doing things that I previously had no experience in. This however, is very understandable and common because of the sheer depth and breadth of the IT industry. New technologies are perpetually being introduced and existing technologies are constantly being improved. As a result, there will definitely be  incongruence in the technologies that are utilized and the methods that are adopted by different companies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  3. How did you overcome this challenge?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;Firstly, my more experienced colleagues and supervisors at Pixium really played a significant role in tutoring me and in breaking down concepts that were foreign to me. They were also very encouraging and patient with me whenever I was unsure of things or when I had to keep asking them questions. &lt;/p&gt;

&lt;p&gt;Secondly, I had to put in the due diligence to learn and research on my own as well. During my onboarding stage, my supervisors gave me the room and time to familiarize myself with the technologies and methods that I had to pick up. That being said, the onus is on me to really take ownership of my own learning as much as my supervisors were more than willing to guide me. Some of the sites I frequented to aid me in my learning were Stack Overflow, W3Schools and Youtube.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  4. What has been your favorite experience interning at Pixium?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;My favourite experience interning at Pixium is undoubtedly the culture of the company. If I could describe the culture of the company in three words, they would be Professional, Candid and Accepting. I will elaborate on each of them. &lt;/p&gt;

&lt;p&gt;Professional: The leaders and frontrunners of Pixium are exceptional in what they do. Not only are they highly competent and skilled in their technical capabilities, they are equally adept in the way they communicate and lead. They know how to motivate the team to a higher level of performance and they model what it's like to be an efficient and effective worker.&lt;/p&gt;

&lt;p&gt;Candid: At Pixium, there is a strong sense of accountability where we keep one another in the loop of what we are up to. This makes it possible for us to assist one another in our tasks and push one another to become better at what we do as we can be honest about our difficulties and opinions on matters. When there is encouragement to be given, it is given. Conversely, when there is feedback and critiques to be given, they are done so respectfully and constructively. &lt;/p&gt;

&lt;p&gt;Accepting: At Pixium, you have the unique opportunity to work with people of different nationalities and cultures. No matter what race each of us are, what countries we are each from or what practices we each have, we accept one another and treat one another with respect. We often also try to educate one another about our own cultures over breaks as it helps us bond and understand one another better. In addition, the team puts in effort to organise get-togethers and cohesion activities to build more camaraderie within the company.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  5. What are some of your responsibilities as a junior software engineer intern?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;My main responsibilities were generally to assist the company in whatever projects they had ongoing. For most of my internship, I primarily operated as a web developer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  6. What are your plans or goals after interning at Pixium?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;A more relevant goal for me in the near future is to obtain a degree in a technology related field of studies, preferably computer science or information systems. My plans for the long term involve me being able to create or start something of my own. It doesn’t have to be a big business or product but more importantly, I just want to have something that I can call my own and be proud of. Of course, If I get the opportunity to be employed by Pixium again in future, I would be more than happy to work for them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  7. What is the one thing that should be taught in school that isn’t already?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;Just a disclaimer that what I mention here may not necessarily apply to all schools but is solely based on my own schooling experience. I personally think that live deployments is something that should be more heavily covered in school. For myself, I mainly worked on school projects locally and the assessment for these projects are conducted in a manner where I would demo my application to the lecturer on my laptop. With the exception of my Final Year Project where I had to learn how to deploy an application on my own, the concept of live deployment was not taught in school. I feel that having the knowledge of different types of servers (VPS, Cloud, Shared Hosting) and understanding concepts like DNS, Domains and SSL are crucial to every developer preparing for the workforce especially because they deal with the final execution of the projects/applications&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  8. How are employees empowered to help shape or participate in the office culture?
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;As employees of Pixium, we are always encouraged to give our feedback and opinions on projects regardless of our status. This was something that I really admired about this company as all the members' points of view are valued. Being a part of Pixium, we also get the chance to organise activities with the purpose of bringing the team together, whether it be sports activities or just a meal, we try to find a common activity that everyone can enjoy doing. The management of Pixium also regularly updates the team on the direction the company is heading in and on what future plans there may be. I feel that this is something that can be easily overlooked or undervalued in other companies but in actuality, it plays an important role in establishing alignment amongst the team as everyone is clear of a common goal they can work towards in unity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Thank you very much Lennel, Understanding each of our teammates' unique interests, skills, and experiences not only keeps our minds open but helps them unlock their true potential. Stay tuned for more Pixium Employee Spotlights!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>company</category>
    </item>
    <item>
      <title>Pixium Digital partners with VeChain to drive innovation using Blockchain Technology.</title>
      <dc:creator>Ludovic Gilbert</dc:creator>
      <pubDate>Wed, 10 Feb 2021 04:07:34 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/pixium-digital-partners-with-vechain-to-drive-innovation-using-blockchain-technology-a6i</link>
      <guid>https://dev.to/pixiumdigital/pixium-digital-partners-with-vechain-to-drive-innovation-using-blockchain-technology-a6i</guid>
      <description>&lt;p&gt;&lt;a href="https://pixiumdigital.com/"&gt;Pixium Digital&lt;/a&gt; is thrilled to announce today that it has entered into a partnership with &lt;a href="https://vechain.com/"&gt;VeChain&lt;/a&gt; through which Pixium Digital Pte Ltd will work with VeChain to support supply chain initiatives as a "VeChain Global Solutions Provider."&lt;/p&gt;

&lt;p&gt;This partnership will combine Pixium Digital extensive expertise developing robust IT solutions, with VeChain ToolChain™ SaaS offering, the two companies will collaborate to achieve common goals. It is through such partnership that among many significant business values, Pixium Digital finds another agile and prestigious Partner in Asia.&lt;/p&gt;

&lt;p&gt;VeChain ToolChain™ is a comprehensive blockchain application platform backed by the VeChainThor blockchain. VeChain ToolChain™ enables businesses of all sizes to leverage blockchain technology to enhance brand perception and value, as well as to expand into new business models. Services available to subscribers include product lifecycle management, supply chain process management, data collection, data verification, and process verification.&lt;/p&gt;

&lt;p&gt;In addition to blockchain proficiency, Pixium Digital contributes expertise in IoT, edge computing and machine learning to complement the VeChain traceability stack. Plus, as a full-stack IT solution provider with decades of experience, Pixium Digital can help organizations, SMEs and startups build complete solutions atop VeChain ToolChain™ and develop custom smart contracts to enhance client initiatives.&lt;br&gt;
Pixium Digital and VeChain share a common vision with regard to supply chain operations, process and data verification. Together, the two companies expect to boost innovation and industry adoption of blockchain-enabled solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://pixiumdigital.com/"&gt;About Pixium Digital&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Founded in 2015, Pixium Digital Pte Ltd is an agile software development company with their headquarters located in Singapore focusing on shaping client projects from ideas to successful project launch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://vechain.com/"&gt;About VeChain&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Launched in 2015, VeChain Technology is a global leading enterprise-friendly blockchain company which aims to connect blockchain technology to the real world by providing enterprises with blockchain-enabled solutions suited to their business needs. VeChain has international offices in China, Singapore, Luxembourg, Japan, France, Italy and the United States.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>data</category>
      <category>traceability</category>
      <category>iot</category>
    </item>
    <item>
      <title>How much does a web or mobile application costs in 2021?</title>
      <dc:creator>Remi</dc:creator>
      <pubDate>Wed, 20 Jan 2021 09:37:45 +0000</pubDate>
      <link>https://dev.to/pixiumdigital/how-much-does-a-web-or-mobile-application-costs-in-2021-4ea5</link>
      <guid>https://dev.to/pixiumdigital/how-much-does-a-web-or-mobile-application-costs-in-2021-4ea5</guid>
      <description>&lt;p&gt;The million-dollar question asked by most project owners is: How much does it cost to develop this app? Our answer is: Between 15k USD to 500k USD. You want a car, but we need to know if you want a Ferrari or a Toyota. Putting a price tag on any project can become complicated and is often misunderstood. &lt;/p&gt;

&lt;p&gt;In this article we will try to provide an overview and understanding on how much such may costs, what are the key factors influencing the price, and how to select the right partners for the job.&lt;/p&gt;

&lt;p&gt;Surely, spending a fortune might not guarantee you success, but trying to save money either. You have to find the right balance in order to select a team that you can trust and that will guide you through this journey.&lt;/p&gt;

&lt;h1&gt;
  
  
  App Development - checklist
&lt;/h1&gt;

&lt;p&gt;Here is a typical list of things you need to take into consideration in order to put a price range on any app. This is what your development team (internal or external) will have to cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System architecture and associated scalability&lt;/li&gt;
&lt;li&gt;Database creation and schema.&lt;/li&gt;
&lt;li&gt;Target Medium compatibility &amp;amp; responsiveness (mobile and / or web).&lt;/li&gt;
&lt;li&gt;Target OS compatibility (Android, iOS for mobile).&lt;/li&gt;
&lt;li&gt;Complexity of the logic to implement.&lt;/li&gt;
&lt;li&gt;User experience and design (UX / UI).&lt;/li&gt;
&lt;li&gt;Technology stack to be used.&lt;/li&gt;
&lt;li&gt;Project management.&lt;/li&gt;
&lt;li&gt;Cyber security.&lt;/li&gt;
&lt;li&gt;Data Privacy compliance.&lt;/li&gt;
&lt;li&gt;Quality assurance.&lt;/li&gt;
&lt;li&gt;Development operation to automate the deployment.&lt;/li&gt;
&lt;li&gt;Automatic testing to automate the testing of all the features before deployment.&lt;/li&gt;
&lt;li&gt;Third party API integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the minimum elements to be addressed. Some additional modules may be added depending on the platform you are trying to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IoT module (gateway registration &amp;amp; management, data flow from gateway to cloud, data quality &amp;amp; connectivity, data storage, ...)&lt;/li&gt;
&lt;li&gt;Machine Learning for data classification, recommendation system or forecast.&lt;/li&gt;
&lt;li&gt;Hardware / Middleware integration and security &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Realistically to cover the minimum mentioned above an app could take from 250 man hours (for a very simple one) to 10,000 man hours and above (for the most sophisticated and complex ones). Price range can therefore range from a mere 15,000 USD to 600,000+ USD.&lt;/p&gt;

&lt;h1&gt;
  
  
  Development price / hours / region
&lt;/h1&gt;

&lt;p&gt;Before going any further, let's have a look at the average Developers' salary across a few selected countries / sub-continent.&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%2Fb8podgneofntklgumny7.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%2Fb8podgneofntklgumny7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.businessofapps.com/app-developers/research/ios-android-developer-salary/" rel="noopener noreferrer"&gt;https://www.businessofapps.com/app-developers/research/ios-android-developer-salary/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Price / hour can range from USD 30 to USD 150 and sometimes even more. Key factors for such price variation are obviously the seniority of the developer, the living costs per country / region and the size of the company you are dealing with. If you work with a large corporate, they will most likely have higher price than if you go with smaller agencies. Smaller agencies tend to be also more flexible and agile over time for you to adjust your platform and cover a better market fit.&lt;/p&gt;

&lt;p&gt;Price per hours in USD per region.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Min&lt;/th&gt;
&lt;th&gt;Max&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;North America&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Australia&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Europe&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Singapore&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;App development is commonly carried out using one of the 4 following methods, for which you consider the pros and cons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Independent Freelancer: It might be the most affordable solution, however you will have to manage him/her yourself on a regular basis. If you have limited knowledge of the development process, you will have to rely on his/her judgement. Often those relationships are based on trust. One of the risk is the "One man show" effect. The understanding and development of the system is done by one person. If this person leaves you, all knowledge is lost for your company. You are also limiting your knowledge access range. You leverage on one developer's skills rather than a pool of individual with different expertise.&lt;/li&gt;
&lt;li&gt;Development Company: Often the most cost effective way. They have affordable price, and are agile in their process by not having to go through many management layers to validate a feature or change an order. You will also be able to leverage on the skills of a few engineers (security, dev ops, system infrastructure, technology stack, mobile dev specialist, web dev specialist). Once the scope of the contract is defined, each module is done by the best person up to the task. Knowledge is dispatched across a multitude of individuals, reducing the "One man show" risk. It is also the company's best interest to build a long term and strong relationship with you, so they can scale up as you need.&lt;/li&gt;
&lt;li&gt;Large corporation: Often highly priced. You pay for their reputation, and management layers. Process might be quite tedious, having many stakeholders in the process. They are less subject to accept your changes of orders. Their main advantage might be speed as they are able to pull dozens of developers into 1 project whenever they have too. Having said that 9 women cannot make a baby in 1 month. Lining up 10 times more developers does not necessarily mean your project will be delivered 10 times faster. The more IT engineers working on a project, the higher the overhead is for the code merging and the project management.&lt;/li&gt;
&lt;li&gt;In house team: Some companies hire dedicated in-house team. That implies additional cost for your business, recruitment, management, HR overhead, Bonus, medical insurance, medical leaves, holidays, office space, equipment, up skilling of your employees, etc... In Addition you may have to hire various experts to cover the whole aspects of your project. Once the project is delivered, you end up with a large teams of IT engineers that could become redundant. &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Project Specification Phase
&lt;/h1&gt;

&lt;p&gt;For the development team to work efficiently, it is crucial to write proper functional &amp;amp; non functional specifications. Various methods and methodologies can be applied such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UML&lt;/li&gt;
&lt;li&gt;User stories&lt;/li&gt;
&lt;li&gt;Story board&lt;/li&gt;
&lt;li&gt;Design thinking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more detailed your specifications are, the more accurate the price estimation will be. Leave no stone unturned. Do not hesitate to share as many information as possible such as your business model as it might imply additional development required to integrate the monetization component. Your provider might even share some expertise with you which could help you fine tune it.&lt;/p&gt;

&lt;p&gt;If you do not have a proper specification document, you should consider contracting your provider to write it for you. From our experienced, this is money well spent. You are most likely to get the solution you want if specifications are clear. Lack of clarity in project definition is one of the top 3 reason for project failure.&lt;/p&gt;

&lt;h1&gt;
  
  
  Features and Functionalities
&lt;/h1&gt;

&lt;p&gt;Let's now have a look at the basic features and functionalities. These are the minimum you will need to develop a basic web or mobile application.&lt;/p&gt;

&lt;p&gt;For the sake of simplification, we have merged together the cost of the Web Server / Web App or Mobile App into 1 table. They are normally estimated separately. The dev unit price has been set at USD 60/hour on the table below.&lt;/p&gt;

&lt;p&gt;Acronyms:&lt;br&gt;
CRUD: Create Review Update Delete&lt;br&gt;
PSP: Payment service provider&lt;br&gt;
UAT: User Acceptance Test&lt;br&gt;
RBAC: Role Based Access Control. Limit access to functionalities based on the user type (ex: Seller vs Buyer)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Min Time (hours)&lt;/th&gt;
&lt;th&gt;Max Time (hours)&lt;/th&gt;
&lt;th&gt;Cost (USD)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create the Dev &amp;amp; Live environment with various domain name setup and SSL certificate setup&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;240 - 960&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development operation setup (Docker / Git / repositories...)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;240 - 960&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API development for the mobile app to access the data&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;2400 - 4800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Login stack (login - sign up - reset password - forgot password&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;240 - 960&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User Management (CRUD User)&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;480 - 1440&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment Integration (Stripe or other PSP&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;960 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emailer Integration with about 10 user flow emails&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;1440 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notification System&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;1440 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic functionality to exchange messages&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;1200 - 2400&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi Language&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;960 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cron Jobs (background tasks such as reminders)&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;960 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System Security (architecture)&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;960 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RBAC&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;960 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Privacy Policies / encryption&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;1440 - 2880&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final Design Integration&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;1440 - 2880&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing and UAT&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;960 - 1920&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final Deployment&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;240 - 480&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TOTAL&lt;/td&gt;
&lt;td&gt;280&lt;/td&gt;
&lt;td&gt;560&lt;/td&gt;
&lt;td&gt;16,800 - 33,600&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As per the example above, the price range can go from 17,000 USD to 34,000 USD for a very basic mobile application to exchange messages between users. &lt;/p&gt;

&lt;h1&gt;
  
  
  How much did famous apps costs ?
&lt;/h1&gt;

&lt;p&gt;Now let's take a quick look at the estimated numbers of hours required to build the first version of some famous app that we all use, and then estimate their costs.&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%2F31zmms247gt9dh1rb3oi.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%2F31zmms247gt9dh1rb3oi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Price: 60 USD / hour&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Hours&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tinder&lt;/td&gt;
&lt;td&gt;1500&lt;/td&gt;
&lt;td&gt;90,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Netflix&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;48,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asos&lt;/td&gt;
&lt;td&gt;1,200&lt;/td&gt;
&lt;td&gt;72,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see, a Tinder like app that did not use to have a lot of functionalities could easily cost 90k USD. On top of the front-end features, you also have to think about the data processing, matching system, recommendation engine and data storage which could increase your development price.&lt;/p&gt;

&lt;h1&gt;
  
  
  Great ! My App is live. What now?
&lt;/h1&gt;

&lt;p&gt;Once your app is released, let's discuss support. It is always highly recommended to go with a maintenance contract. It can be pre-paid hours, pay per use or fully dedicated resources that you can use to maintain and upgrade your system. As your user base grows, issues might arise, server monitoring and patches installation will become necessary. Your system is a living one. It will behave and react when users are using it so it is a good idea to have a team ready to act when things are happening.&lt;/p&gt;

&lt;p&gt;The industry standard is to spend about 10-15% of your development budget in maintenance per annum. Additional funding might be allocated if you need to add features.&lt;/p&gt;

&lt;p&gt;But do not over-engineer it. Better to release an MVP (Minimum Viable Product) and develop it further through iterations rather than building something over overly complex from the start. Too many functionalities create confusion for a newly launched product or service. Be ready to A/B test your features and learn from your customers feedbacks.&lt;/p&gt;




&lt;h1&gt;
  
  
  About Us
&lt;/h1&gt;

&lt;p&gt;Pixium Digital Pte Ltd is an agile software development company with their headquarters located in Singapore. We focus on shaping our clients project from ideas to successful project launch.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>mobile</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
