<?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: Ali</title>
    <description>The latest articles on DEV Community by Ali (@prog585).</description>
    <link>https://dev.to/prog585</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%2F398502%2Ff76ecd56-b87c-482d-93f7-88a03e639088.PNG</url>
      <title>DEV Community: Ali</title>
      <link>https://dev.to/prog585</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prog585"/>
    <language>en</language>
    <item>
      <title>I built a semantic job matcher for freelancers using Qdrant + BGE embeddings — here's what the rankings look like</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Sat, 28 Mar 2026 04:39:43 +0000</pubDate>
      <link>https://dev.to/prog585/i-built-a-semantic-job-matcher-for-freelancers-using-qdrant-bge-embeddings-heres-what-the-454a</link>
      <guid>https://dev.to/prog585/i-built-a-semantic-job-matcher-for-freelancers-using-qdrant-bge-embeddings-heres-what-the-454a</guid>
      <description>&lt;p&gt;Been freelancing for several years. Tired of manually scanning job listings trying to guess which ones fit my stack.&lt;/p&gt;

&lt;p&gt;So I built a tool: embed your profile once, rank job listings by semantic similarity. No keyword rules — pure vector search.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Parse your profile (title, stack, portfolio) into a rich text chunk&lt;/li&gt;
&lt;li&gt;Embed it with &lt;code&gt;BAAI/bge-base-en-v1.5&lt;/code&gt; (768-dim) → store in Qdrant&lt;/li&gt;
&lt;li&gt;Embed each job listing the same way&lt;/li&gt;
&lt;li&gt;Rank by cosine similarity&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Real Results on 6 Sample Jobs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rank  Score  Job
  1   0.87   Senior AI/ML Engineer – Multi-Agent Systems     ← correct
  2   0.83   Full-Stack – Next.js + Python AI Backend        ← correct
  3   0.79   Backend Engineer – FastAPI + PostgreSQL         ← correct
  4   0.68   AI Chatbot Developer – GPT-4 Integration        ← fair
  5   0.71   AWS Solutions Architect – DynamoDB/Cognito      ← correct
  6   0.41   React Native Developer – iOS/Android            ← correctly last
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most interesting: the React Native role scored &lt;strong&gt;0.41&lt;/strong&gt; despite "React" appearing multiple times in my profile. Semantic context beats keyword matching.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Surprised Me
&lt;/h2&gt;

&lt;p&gt;Portfolio items matter a lot for match quality. When I added my AI platform (&lt;a href="https://launchmentor.ai" rel="noopener noreferrer"&gt;LaunchMentor.ai&lt;/a&gt;) and AWS compliance project to the profile text, match scores on AI/cloud jobs improved noticeably.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 matcher.py index-profile       &lt;span class="c"&gt;# embed your profile&lt;/span&gt;
python3 matcher.py add-csv jobs.csv    &lt;span class="c"&gt;# add job listings&lt;/span&gt;
python3 matcher.py match &lt;span class="nt"&gt;--top&lt;/span&gt; 10      &lt;span class="c"&gt;# ranked output&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Python · Qdrant (local) · sentence-transformers (BGE-base-en-v1.5) · Click · Rich&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/prog585/freelance-tools/tree/main/semantic-matcher" rel="noopener noreferrer"&gt;github.com/prog585/freelance-tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyone else doing semantic filtering on job listings? Curious if there are better approaches.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building &lt;a href="https://launchmentor.ai" rel="noopener noreferrer"&gt;LaunchMentor.ai&lt;/a&gt; — AI market intelligence for founders validating startup ideas.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freelancing</category>
    </item>
    <item>
      <title>Camparison of tensorflow vs sci-kit learn vs hugging face</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Mon, 03 Apr 2023 17:09:11 +0000</pubDate>
      <link>https://dev.to/prog585/camparison-of-tensorflow-vs-sci-kit-learn-vs-hugging-face-4bi4</link>
      <guid>https://dev.to/prog585/camparison-of-tensorflow-vs-sci-kit-learn-vs-hugging-face-4bi4</guid>
      <description>&lt;p&gt;Scikit-learn, TensorFlow, and Hugging Face are all powerful machine learning frameworks that can be used for a variety of applications, but they have different strengths and weaknesses.&lt;/p&gt;

&lt;p&gt;Scikit-learn is a widely-used machine learning library for Python that focuses on traditional statistical modeling and machine learning algorithms. It provides a consistent API for common machine learning tasks such as classification, regression, clustering, and dimensionality reduction. Scikit-learn is easy to use and has excellent documentation, making it a great choice for beginners and for quickly prototyping and validating machine learning models.&lt;/p&gt;

&lt;p&gt;TensorFlow, on the other hand, is a popular open-source machine learning framework developed by Google. It is designed for large-scale machine learning applications and is particularly well-suited for deep learning tasks such as image and speech recognition. TensorFlow provides a wide range of tools for building and training complex machine learning models, including neural networks, and has excellent support for distributed computing. It is a more powerful framework than Scikit-learn, but it also has a steeper learning curve.&lt;/p&gt;

&lt;p&gt;Hugging Face is an open-source natural language processing (NLP) library built on top of PyTorch and TensorFlow. It provides a wide range of pre-trained models for common NLP tasks such as text classification, question answering, and language translation. Hugging Face is particularly well-suited for transfer learning, where pre-trained models are fine-tuned on specific NLP tasks, and it provides a simple API for integrating these models into NLP applications. However, it is more specialized than Scikit-learn or TensorFlow and may not be as suitable for other machine learning tasks.&lt;/p&gt;

&lt;p&gt;In summary, Scikit-learn is a great choice for traditional machine learning tasks, TensorFlow is a powerful framework for deep learning and large-scale machine learning, and Hugging Face is a specialized library for natural language processing. The choice of framework ultimately depends on the specific application and the expertise of the user.&lt;/p&gt;

&lt;p&gt;Muhammad Ali&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Famous low price hostings now a days</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Mon, 03 Apr 2023 16:36:11 +0000</pubDate>
      <link>https://dev.to/prog585/famous-low-price-hostings-now-a-days-1hgd</link>
      <guid>https://dev.to/prog585/famous-low-price-hostings-now-a-days-1hgd</guid>
      <description>&lt;p&gt;Vercel&lt;br&gt;
Netlify&lt;br&gt;
AWS lambda&lt;br&gt;
Digital Ocean&lt;br&gt;
Railway&lt;br&gt;
Contabo&lt;br&gt;
Hetzner &lt;br&gt;
Please add to this list if you know others in comments below. Thanks &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Testing methodology</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Wed, 13 Apr 2022 02:24:59 +0000</pubDate>
      <link>https://dev.to/prog585/testing-methodology-3k5l</link>
      <guid>https://dev.to/prog585/testing-methodology-3k5l</guid>
      <description>&lt;p&gt;We can categorize testing activities into two, 1) Functional Testing and 2) Non Functional Testing. In &lt;strong&gt;functional testing&lt;/strong&gt; we do unit testing, integration testing, system testing and acceptance testing. Whereas in &lt;strong&gt;non functional testing&lt;/strong&gt; we test for performance, security, usability and compatibility. &lt;/p&gt;

&lt;h2&gt;
  
  
  Unit Testing
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Integration testing
&lt;/h2&gt;

&lt;h2&gt;
  
  
  System testing
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Acceptance testing
&lt;/h2&gt;

&lt;p&gt;Non-Functional Testing&lt;/p&gt;

&lt;p&gt;Performance testing&lt;br&gt;
Security testing&lt;br&gt;
Usability testing &lt;br&gt;
Compatibility Testing&lt;/p&gt;

&lt;p&gt;This post is a work in progress item&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to import csv data in mongoDB</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Sun, 10 Apr 2022 01:10:01 +0000</pubDate>
      <link>https://dev.to/prog585/import-csv-in-mongodb-37oo</link>
      <guid>https://dev.to/prog585/import-csv-in-mongodb-37oo</guid>
      <description>&lt;p&gt;Question: How to add CSV data in mongoDB Atlas or local mongoDB?&lt;br&gt;
Answer: &lt;br&gt;
1) MongoDB command line utility mongoimport is used to import csv/json data in mongoDB. It is bundled in MongoDB Database Tools package which can be downloaded by vising Tools section on mongoDB official website. Here is the link to download this &lt;a href="https://www.mongodb.com/try/download/database-tools"&gt;https://www.mongodb.com/try/download/database-tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) After installing to your machine to the install folder and run the following command &lt;br&gt;
mongoimport --uri "mongodb+srv://username:&lt;a href="mailto:password@cluster0.xxxxx.mongodb.net"&gt;password@cluster0.xxxxx.mongodb.net&lt;/a&gt;/database_name?retryWrites=true&amp;amp;w=majority" --collection=collection_name --mode=insert --type=csv --headerline --file=d:\data\userlist.csv&lt;/p&gt;

&lt;p&gt;Replace username, password, database_name, collection_name and --file with your own values. Also replace cluster0.xxxxx.mongodb.net with your own cluster address. Full database connect string including cluster address can be found on Database page by pressing Connect button. --mode=insert will append data into your collection. --headerline will tell mongo that first line contains field names. For full mongoimport options please visit official documentation at &lt;a href="https://www.mongodb.com/docs/database-tools/mongoimport/#csv-import"&gt;https://www.mongodb.com/docs/database-tools/mongoimport/#csv-import&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For local mongoDB instance instead of --uri, --hostname can be used. Syntax will be like --host=&amp;lt;:port&amp;gt;&lt;/p&gt;

</description>
      <category>mongodb</category>
    </item>
    <item>
      <title>React interview questions</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Sun, 29 Aug 2021 06:29:00 +0000</pubDate>
      <link>https://dev.to/prog585/some-good-react-interview-questions-1hbh</link>
      <guid>https://dev.to/prog585/some-good-react-interview-questions-1hbh</guid>
      <description>&lt;p&gt;Here are some of the questions I was asked while being interviewed for the post of senior react developer. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is a pure function&lt;/li&gt;
&lt;li&gt;What is the difference between DOM vs React DOM&lt;/li&gt;
&lt;li&gt;In webpack what is loader vs plugin&lt;/li&gt;
&lt;li&gt;In typescript what is module vs namespace&lt;/li&gt;
&lt;li&gt;In react what is shallow rendering&lt;/li&gt;
&lt;li&gt;Differentiate between redux/flux/mobx trees&lt;/li&gt;
&lt;li&gt;In redux what is the concept of async calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do you remember some of yours?? Kindly share in the comments for the benefit of the community. Thanks&lt;/p&gt;

</description>
      <category>react</category>
      <category>interview</category>
    </item>
    <item>
      <title>Hot module replacement in create react app (cra)</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Tue, 01 Dec 2020 08:14:06 +0000</pubDate>
      <link>https://dev.to/prog585/hot-module-replacement-in-create-react-app-cra-l45</link>
      <guid>https://dev.to/prog585/hot-module-replacement-in-create-react-app-cra-l45</guid>
      <description>&lt;p&gt;Problem: &lt;br&gt;
In real projects with even minor complexity reloading of pages at each change in code becomes slower and slower. Luckly there is hot module replacment/fast refresh settings that can be done in CRA apps. &lt;br&gt;
Solution: &lt;br&gt;
Easy way to integrate hot module replacement in react (CRA) apps&lt;/p&gt;

&lt;p&gt;1) Install dependencies&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 -D react-app-rewired customize-cra customize-cra-react-refresh```




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

&lt;/div&gt;

&lt;p&gt;2) Create config-overrides.js in your project root folder (if it does not exists, which normally is the case)&lt;br&gt;
3) Add following code in config-overrides.js file&lt;/p&gt;

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

const { override } = require("customize-cra");
const { addReactRefresh } = require("customize-cra-react-refresh");

/* config-overrides.js */
module.exports = override(addReactRefresh());


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

&lt;/div&gt;

&lt;p&gt;4) Change your start, build scripts to use installed plugins&lt;/p&gt;

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

  /* package.json */

  "scripts": {
-   "start": "react-scripts start",
+   "start": "react-app-rewired start",
-   "build": "react-scripts build",
+   "build": "react-app-rewired build",
-   "test": "react-scripts test --env=jsdom",
+   "test": "react-app-rewired test --env=jsdom",
    "eject": "react-scripts eject"
}


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

&lt;/div&gt;



&lt;p&gt;note: I also set the env variable FAST_REFRESH=true as proposed by official react documentation in .env file (create a file named .env in your root folder and place this single line in it FAST_REFRESH=true) although I am not sure it is still needed after setting up these plugins. &lt;/p&gt;

&lt;p&gt;Main source of this text is this github repo (link below). I mentioned some pointers here for my own convience and future reference and also for dev.to community ;).&lt;br&gt;
&lt;a href="https://github.com/esetnik/customize-cra-react-refresh"&gt;https://github.com/esetnik/customize-cra-react-refresh&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>createreactapp</category>
      <category>fastrefresh</category>
    </item>
    <item>
      <title>Right way to test (deep) nested JS objects for undefined properties </title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Sun, 23 Aug 2020 17:40:00 +0000</pubDate>
      <link>https://dev.to/prog585/right-way-to-test-deep-nested-objects-for-undefined-properties-fgc</link>
      <guid>https://dev.to/prog585/right-way-to-test-deep-nested-objects-for-undefined-properties-fgc</guid>
      <description>&lt;p&gt;Problem: What is the best optimal way to test (deep) nested objects for undefined properties apart from&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if(test.level1 &amp;amp;&amp;amp; test.level1.level2 &amp;amp;&amp;amp; test.level1.level2.level3) {
    alert(test.level1.level2.level3);
} 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;:)&lt;br&gt;
Solution: Suppose this is our deep nested object&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var test = {level1: {level2: {level3: "level3"}}};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Most performant way is as per this writing and if you have not upgraded to ECMAScript 2020 Standard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var level3 = (((test || {}).level1 || {}).level2 || {}).level3;
alert( level3 );
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In ECMAScript 2020 standard this can be done as this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const value = obj?.level1?.level2?.level3 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;For complete discussion please see stackoverflow original article below:&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/2631001/test-for-existence-of-nested-javascript-object-key/4034468#4034468"&gt;https://stackoverflow.com/questions/2631001/test-for-existence-of-nested-javascript-object-key/4034468#4034468&lt;/a&gt;&lt;br&gt;
Note: For above custom solution test should be defined and also it might not work if properties are booleans.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to use setInterval in React hooks</title>
      <dc:creator>Ali</dc:creator>
      <pubDate>Sat, 08 Aug 2020 09:55:08 +0000</pubDate>
      <link>https://dev.to/prog585/setinterval-and-usestate-problem-2dd3</link>
      <guid>https://dev.to/prog585/setinterval-and-usestate-problem-2dd3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Any code/function called inside setInterval does not show updated state (where state is created using useState hook). The reason is any function passed in setInterval is a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#:~:text=A%20closure%20is%20the%20combination,state%20(the%20lexical%20environment).&amp;amp;text=In%20JavaScript%2C%20closures%20are%20created,created%2C%20at%20function%20creation%20time."&gt;closure&lt;/a&gt; and values of all its arguments or variables accessables inside it (variables defined in outer functions) become static and take the snapshot of data at the time of the interval creation and does not look back at the original variables again. &lt;br&gt;
&lt;strong&gt;Solution&lt;/strong&gt;&lt;br&gt;
One better solution, a custom hook, to use setInterval with React hooks is provided by Dan Abramov's at his personal blog (article linked below). The is as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState, useEffect, useRef } from 'react';

function useInterval(callback, delay) {
  const savedCallback = useRef();

  // Remember the latest callback.
  useEffect(() =&amp;gt; {
    savedCallback.current = callback;
  }, [callback]);

  // Set up the interval.
  useEffect(() =&amp;gt; {
    function tick() {
      savedCallback.current();
    }
    if (delay !== null) {
      let id = setInterval(tick, delay);
      return () =&amp;gt; clearInterval(id);
    }
  }, [delay]);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesandbox.io/s/105x531vkq?file=/src/index.js:218-234"&gt;Here is the how to use it in your code demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://overreacted.io/making-setinterval-declarative-with-react-hooks/"&gt;Original article at Dan Abramov blog&lt;/a&gt;&lt;/p&gt;

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