<?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: Khushang Mirzo</title>
    <description>The latest articles on DEV Community by Khushang Mirzo (@mhushang).</description>
    <link>https://dev.to/mhushang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F153140%2F81110d94-5cf7-4f1d-b573-32d2c250ad88.png</url>
      <title>DEV Community: Khushang Mirzo</title>
      <link>https://dev.to/mhushang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mhushang"/>
    <language>en</language>
    <item>
      <title>Will AI Replace Developers? A Realistic Look at the Future of Programming</title>
      <dc:creator>Khushang Mirzo</dc:creator>
      <pubDate>Thu, 09 Jan 2025 07:40:23 +0000</pubDate>
      <link>https://dev.to/mhushang/will-ai-replace-developers-a-realistic-look-at-the-future-of-programming-57fd</link>
      <guid>https://dev.to/mhushang/will-ai-replace-developers-a-realistic-look-at-the-future-of-programming-57fd</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Vision of a One-Person Unicorn&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Last year, an &lt;a href="https://fortune.com/2024/02/04/sam-altman-one-person-unicorn-silicon-valley-founder-myth/" rel="noopener noreferrer"&gt;article&lt;/a&gt; made waves claiming that the future might bring a unicorn company with just one employee. That’s wild because, as we know, unicorns - companies valued at over $1 billion - usually have huge teams. They need lawyers, accountants, frontend and backend developers, designers, DevOps engineers, mobile developers, and so on.&lt;br&gt;
But imagine this: a unicorn where there’s no IT team, no legal department, no designers - just a founder armed with AI tools automating all these processes. 🤯&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Crazy? Sure. Plausible? Maybe.&lt;/em&gt; 🧐&lt;br&gt;
Now, one such company might not shake up the entire industry overnight. Established companies with large codebases will still need developers to maintain and improve their systems. Everyone keeps their jobs, and life goes on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Ripple Effect: More Startups, Fewer Developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;💡 But let’s push this idea further. If one person can use AI to create a billion-dollar business, what’s stopping someone else from doing the same? Not every company needs to be a unicorn to disrupt the market. The world is full of successful startups and mid-sized companies valued at less than $100 million - and these are the businesses employing most developers today.&lt;br&gt;
Imagine a solo founder with programming knowledge using AI to build a complex system. The startup takes off 🤑, and the founder realizes they can keep scaling with just AI and a handful of employees. Why hire a 40-person IT team when five people and advanced AI tools get the job done?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Here’s where it gets tricky.&lt;/em&gt; &lt;br&gt;
If more startups and companies adopt this model, the demand for developers could drop. The job market gets tighter, competition increases, and salaries could start to decline. Being a developer may no longer be the golden ticket it is today. Instead, it might become just another “ordinary” profession with an average paycheck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should Developers Be Worried?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🤪 Before you panic, let’s take a step back. This isn’t happening tomorrow. Right now, developers are still in high demand, and AI tools are far from replacing human ingenuity and creativity.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;But it’s worth asking:&lt;/em&gt;&lt;br&gt;
Will AI fundamentally reshape the IT job market?&lt;br&gt;
Will the days of six-figure developer salaries become a thing of the past? These are questions we should all be thinking about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Your Take?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is just my perspective, and I could be totally wrong. What do you think? Will AI replace developers? Will it make the job market more competitive, or will it create new opportunities?&lt;br&gt;
Share your thoughts - I’d love to hear them. &lt;/p&gt;

&lt;p&gt;P.S. The screenshot has been edited. 😊&lt;br&gt;
If you’re interested in more content like this, feel free to follow me on X!&lt;br&gt;
&lt;a href="https://x.com/hush_mir" rel="noopener noreferrer"&gt;https://x.com/hush_mir&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Create Mini-Apps That Wow: How to build Sleek and Fast mobile apps using any JS Frameworks and Ionic Portals</title>
      <dc:creator>Khushang Mirzo</dc:creator>
      <pubDate>Sat, 28 Jan 2023 11:52:30 +0000</pubDate>
      <link>https://dev.to/mhushang/create-mini-apps-that-wow-how-to-build-sleek-and-fast-mobile-apps-using-any-js-frameworks-and-ionic-portals-3n2n</link>
      <guid>https://dev.to/mhushang/create-mini-apps-that-wow-how-to-build-sleek-and-fast-mobile-apps-using-any-js-frameworks-and-ionic-portals-3n2n</guid>
      <description>&lt;p&gt;Imagine you're a developer of an online wallet mobile app, and the owner of the local cinema approaches you with a request. He wants you to add a feature to the app that allows users to book and pay for seats directly from the app. You happily oblige, and start working on the Android and iOS versions. After a successful launch, another person approaches you and asks if you can add his online store to your application so that customers can pay for goods directly from there. You start to worry about how much bigger the app will get with all these new features. You don't want users to have to download a billion GB app just to pay for their movie tickets.&lt;/p&gt;

&lt;p&gt;What will you do? Let's solve this issue together.&lt;/p&gt;

&lt;p&gt;We're thinking of ways to make the app lighter and easier to use for all these new features. One idea is to use web-based solutions for payments and bookings directly from the app. To make the integration as simple as possible, we can create a JavaScript SDK.&lt;/p&gt;

&lt;p&gt;After some research, we discover the Ionic team's project called &lt;a href="https://ionic.io/docs/portals" rel="noopener noreferrer"&gt;Ionic Portals&lt;/a&gt;. According to the documentation, it's a supercharged native webview component for iOS and Android. With Ionic Portals, we can:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Extend native apps with web content. It allows users to add web-based features and experiences to an existing native mobile app.&lt;/li&gt;
&lt;li&gt;Access native features through the Capacitor bridge. Safely and securely access features like the camera, geolocation, haptics, and more - all from the webview. This way we can deliver truly native mobile experiences using the web.&lt;/li&gt;
&lt;li&gt;Control access to native features and data. Native development teams have granular control over which parts of the app - including specific features and data - web teams can access when collaborating on a mobile project.
...&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;In short, Ionic Portals is the perfect solution for our problem. It allows us to add web-based features to our app without making it heavy. It also provides a secure way to access native features and data, which means we can deliver truly native mobile experiences using the web, making the app lightweight, efficient and user-friendly. With this, we can keep our users happy and enjoy their popcorn while watching the latest blockbuster.&lt;/p&gt;

&lt;p&gt;Let's get down to business! To make the integration process as simple as possible, we're going to write a JavaScript SDK. We're going to create a library for interacting web applications with a native application and publish it on npm. After some tweaking, I generated a typescript project using vite and created a message.ts file. The file contains, for the beginning, 4 methods (The necessary imports and missing parts of code can be found on the &lt;a href="https://github.com/mhushang/js-miniapp-sdk" rel="noopener noreferrer"&gt;Github&lt;/a&gt; repository and the &lt;a href="https://www.npmjs.com/package/js-miniapp-bridge" rel="noopener noreferrer"&gt;JS SDK&lt;/a&gt; can be easily installed via npm.):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Portals, { getInitialContext } from "@ionic/portals";
import {
  IInitialContext,
  IMessage,
  IMessageSubscription,
  IPortalSubscription,
  ISubscribeOptions,
  ISubscriptionCallback,
} from "./types";

export const SendMessage = async (params: IMessage) =&amp;gt; {
  return Portals.publish&amp;lt;IMessage&amp;gt;(params);
};

export const SubscribeToMessage = async (
  options: ISubscribeOptions,
  callback: ISubscriptionCallback
): Promise&amp;lt;IPortalSubscription&amp;gt; =&amp;gt; {
  return Portals.subscribe&amp;lt;IMessageSubscription&amp;gt;(options, callback);
};

export const UnsubscribeFromMessage = async (
  options: IPortalSubscription
): Promise&amp;lt;void&amp;gt; =&amp;gt; {
  return Portals.unsubscribe(options);
};

export const GetInitialContext = &amp;lt;T = unknown&amp;gt;():
  | IInitialContext&amp;lt;T&amp;gt;
  | undefined =&amp;gt; {
  return getInitialContext();
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We're creating a frontend project using the famous &lt;a href="https://create-react-app.dev/" rel="noopener noreferrer"&gt;Create-React-App&lt;/a&gt;. And what's the best way to start? By creating an empty react project, of course! Let's create a component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useEffect, useState, useCallback, useRef } from "react";
import {
  SendMessage,
  SubscribeToMessage,
  UnsubscribeFromMessage,
  GetInitialContext,
  IPortalSubscription,
} from "js-miniapp-bridge";
import { MESSAGE_TOPICS } from "./constants";

function App() {
  const tokenSubscriptionRef = useRef&amp;lt;IPortalSubscription&amp;gt;();
  const initialContext = GetInitialContext&amp;lt;{ data: string }&amp;gt;();
  const [message, setMessage] = useState("");
  const [subscribeToTokenSuccessResponse, setSubscribeToTokenSuccessResponse] =
    useState&amp;lt;Partial&amp;lt;IPortalSubscription&amp;gt;&amp;gt;({});
  const [context, setContext] = useState(initialContext);

  const handlePublishToken = async () =&amp;gt; {
    SendMessage({
      topic: MESSAGE_TOPICS.ACCOUNT_TOKEN,
      data: message,
    });
  };

  const subscribeToTokenCallback = (result: { topic: string; data: string }) =&amp;gt; {
    setSubscribeToTokenSuccessResponse(result);
  };

  const subscribeToToken = useCallback(async () =&amp;gt; {
    try {
      tokenSubscriptionRef.current = await SubscribeToMessage(
        { topic: MESSAGE_TOPICS.CHAT_MESSAGE },
        subscribeToTokenCallback
      );
    } catch (e) {
      setsubscribeToTokenErrorResponse(e);
    }
  }, []);

  const handleChangeInput = (e: React.ChangeEvent&amp;lt;HTMLInputElement&amp;gt;) =&amp;gt; {
    setMessage(e.target.value);
  };

  useEffect(() =&amp;gt; {
    subscribeToToken();

    return () =&amp;gt; {
      UnsubscribeFromMessage(tokenSubscriptionRef.current!);
    };
  }, [subscribeToToken]);

  useEffect(() =&amp;gt; {
    setContext(initialContext);
  }, [initialContext]);

  return (
    &amp;lt;div className="App"&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;b&amp;gt;Subscribe Token Success Result:&amp;lt;/b&amp;gt;
        &amp;lt;pre&amp;gt;{JSON.stringify(subscribeToTokenSuccessResponse, null, 4)}&amp;lt;/pre&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;hr /&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;b&amp;gt;Initial Context Result:&amp;lt;/b&amp;gt;
        &amp;lt;pre&amp;gt;{JSON.stringify(context, null, 4)}&amp;lt;/pre&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;hr /&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;b&amp;gt;Message:&amp;lt;/b&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;input value={message} onChange={handleChangeInput} /&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; handlePublishToken()}&amp;gt;
        Publish/Send Message
      &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we need to create an application that can subscribe and send messages. To accomplish this, we will generate a &lt;a href="https://reactnative.dev/" rel="noopener noreferrer"&gt;React Native&lt;/a&gt; project and create the necessary component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, {useState} from 'react';
import {SafeAreaView, ScrollView, View, Text, Button} from 'react-native';

import {
  PortalView,
  publish,
  subscribe,
  unsubscribe,
} from '@ionic/portals-react-native';
import initializePortals from './initializePortals';

initializePortals();

function App(): JSX.Element {
  const [subscribeTokenSuccessResponse, setSubscribeTokenSuccessResponse] =
    useState(null);

  const subscribeToTokenRef = React.useRef&amp;lt;number&amp;gt;();

  const handlePublishToken = async () =&amp;gt; {
    publish('CHAT_MESSAGE', 'token from native');
  };

  const subscribeToTokenCallback = (result: {topic: string; data: any}) =&amp;gt; {
    setSubscribeTokenSuccessResponse(result);
  };

  const subscribeToToken = React.useCallback(async () =&amp;gt; {
    subscribeToTokenRef.current = await subscribe(
      'ACCOUNT_TOKEN',
      subscribeToTokenCallback,
    );
  }, []);

  React.useEffect(() =&amp;gt; {
    subscribeToToken();

    return () =&amp;gt; {
      unsubscribe('ACCOUNT_TOKEN', subscribeToTokenRef.current!);
    };
  }, [subscribeToToken]);

  return (
    &amp;lt;SafeAreaView&amp;gt;
      &amp;lt;ScrollView contentInsetAdjustmentBehavior="automatic"&amp;gt;
        &amp;lt;View&amp;gt;
          &amp;lt;PortalView
            portal={{
              name: 'hello',
              initialContext: {
                data: 'Initial data from Native',
              },
            }}
          /&amp;gt;
          &amp;lt;Text&amp;gt;Subscribe Token Success Result:&amp;lt;/Text&amp;gt;
          &amp;lt;Text&amp;gt;
            {JSON.stringify(subscribeTokenSuccessResponse || '', null, 4)}
          &amp;lt;/Text&amp;gt;
          &amp;lt;Button title="Publish Token" onPress={handlePublishToken} /&amp;gt;
        &amp;lt;/View&amp;gt;
      &amp;lt;/ScrollView&amp;gt;
    &amp;lt;/SafeAreaView&amp;gt;
  );
}

export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it. We have created a lightweight, efficient, and user-friendly application that still provides all necessary features. You can see the result in the video demonstration by clicking this &lt;a href="https://www.loom.com/share/12fa9842a713462eb3a9edade4985224" rel="noopener noreferrer"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By using this method, we will achieve a balance where users can have a lightweight app that still provides all the features they need.&lt;/p&gt;

&lt;p&gt;As previously mentioned, all the code can be found on &lt;a href="https://github.com/mhushang/js-miniapp-sdk" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. If you have any questions or feedback, please leave a comment. I appreciate your input. Have a great day!&lt;/p&gt;

</description>
      <category>miniapp</category>
      <category>react</category>
      <category>ionic</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
