<?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: Bashar V I</title>
    <description>The latest articles on DEV Community by Bashar V I (@basharvi).</description>
    <link>https://dev.to/basharvi</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%2F1579858%2F7bf95055-6508-44ea-9451-40b55ffd1750.jpeg</url>
      <title>DEV Community: Bashar V I</title>
      <link>https://dev.to/basharvi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/basharvi"/>
    <language>en</language>
    <item>
      <title>I published my first npm package: `short-id-lite` 🎉</title>
      <dc:creator>Bashar V I</dc:creator>
      <pubDate>Thu, 01 Jan 2026 16:45:15 +0000</pubDate>
      <link>https://dev.to/basharvi/i-published-my-first-npm-package-short-id-lite-53en</link>
      <guid>https://dev.to/basharvi/i-published-my-first-npm-package-short-id-lite-53en</guid>
      <description>&lt;p&gt;&lt;em&gt;A tiny, secure short ID generator for Node.js — feedback welcome&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Publishing your first npm package is oddly intimidating.&lt;/p&gt;

&lt;p&gt;You keep asking yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Is this useful enough?”&lt;/li&gt;
&lt;li&gt;“Am I reinventing the wheel?”&lt;/li&gt;
&lt;li&gt;“Will anyone actually use this?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last week, I decided to stop overthinking and ship something small, focused, and honest.&lt;/p&gt;

&lt;p&gt;That package is &lt;strong&gt;&lt;code&gt;short-id-lite&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub repo:&lt;/strong&gt; &lt;a href="https://github.com/BasharVI/short-id-lite" rel="noopener noreferrer"&gt;https://github.com/BasharVI/short-id-lite&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;npm package:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/short-id-lite" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/short-id-lite&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem I kept running into
&lt;/h2&gt;

&lt;p&gt;In almost every backend project, you eventually need &lt;strong&gt;short IDs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;invite codes
&lt;/li&gt;
&lt;li&gt;public-facing references
&lt;/li&gt;
&lt;li&gt;temporary tokens
&lt;/li&gt;
&lt;li&gt;human-friendly identifiers
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not UUIDs. Not database IDs.&lt;br&gt;&lt;br&gt;
Just &lt;strong&gt;short, random, URL-safe strings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So naturally, you reach for existing solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  And here’s the friction I kept feeling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UUIDs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Too long, not human-friendly, overkill for many use cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Math.random-based helpers&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Easy to write, but not safe. Collision risk, predictability issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fully featured libraries (like nanoid)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Excellent libraries — but sometimes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more options than I need&lt;/li&gt;
&lt;li&gt;more surface area than I want&lt;/li&gt;
&lt;li&gt;more code to audit for very small use cases&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;In many projects, I just wanted:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Give me a short, safe ID. No config. No decisions.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why I created &lt;code&gt;short-id-lite&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;I wanted a package that was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extremely small&lt;/li&gt;
&lt;li&gt;Dependency-free&lt;/li&gt;
&lt;li&gt;Crypto-safe&lt;/li&gt;
&lt;li&gt;Boring in the best way&lt;/li&gt;
&lt;li&gt;Easy to audit&lt;/li&gt;
&lt;li&gt;Stable for years&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built &lt;strong&gt;exactly that&lt;/strong&gt; — and nothing more.&lt;/p&gt;

&lt;p&gt;This is not meant to replace &lt;code&gt;nanoid&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
It’s meant to cover the &lt;em&gt;80% case&lt;/em&gt; with &lt;em&gt;10% complexity&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What &lt;code&gt;short-id-lite&lt;/code&gt; does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generates &lt;strong&gt;short, URL-safe IDs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Uses &lt;strong&gt;Node.js crypto&lt;/strong&gt; (&lt;code&gt;crypto.randomBytes&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Has &lt;strong&gt;one function&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No configuration objects&lt;/li&gt;
&lt;li&gt;No mutable global state&lt;/li&gt;
&lt;li&gt;No browser support&lt;/li&gt;
&lt;li&gt;No magic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
ts
import { shortId } from "short-id-lite";

shortId();      // e.g. "aZ3F9q"
shortId(10);    // e.g. "Qm9KfP2aXz"


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

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>npm</category>
    </item>
    <item>
      <title>🚨 Freelancers beware: how a suspicious “Node.js bug fix” invite helped me spot a possible malware dropper on Upwork</title>
      <dc:creator>Bashar V I</dc:creator>
      <pubDate>Tue, 23 Sep 2025 20:14:13 +0000</pubDate>
      <link>https://dev.to/basharvi/freelancers-beware-how-a-suspicious-nodejs-bug-fix-invite-helped-me-spot-a-possible-malware-38l3</link>
      <guid>https://dev.to/basharvi/freelancers-beware-how-a-suspicious-nodejs-bug-fix-invite-helped-me-spot-a-possible-malware-38l3</guid>
      <description>&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%2Fl4lvgr71nmufic6ss80u.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%2Fl4lvgr71nmufic6ss80u.png" alt="Screen shot of upwork job post" width="800" height="557"&gt;&lt;/a&gt;Today I received an Upwork job invite titled&lt;br&gt;
“&lt;strong&gt;Experienced Node.js Coder Needed for Bug Fix&lt;/strong&gt;”&lt;br&gt;
with a tempting $760 fixed price and a Dropbox link to the code.&lt;/p&gt;

&lt;p&gt;It looked normal at first, but a few details didn’t sit right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💸 Unrealistic budget for a simple bug fix.&lt;/li&gt;
&lt;li&gt;📦 The client insisted I download and run a ZIP immediately to “see the  error.”&lt;/li&gt;
&lt;li&gt;👤 Profile not payment verified and brand-new.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of running it, I inspected the archive without executing anything.&lt;br&gt;
Here’s what I found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;node/helpers/css.js reads a “CSS” file (public/css/types.txt) and runs it with eval() only on Windows.&lt;/li&gt;
&lt;li&gt;types.txt isn’t CSS at all—it’s obfuscated JavaScript that&lt;/li&gt;
&lt;li&gt;extracts hidden ZIPs (js.zip, node.zip, i.zip),and silently spawns Windows executables via cmd.exe /c start.&lt;/li&gt;
&lt;li&gt;The project even bundles a 7-Zip binary so it can unpack those hidden files locally.**_&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That pattern—obfuscation + hidden zips + detached .exe launch—is exactly how a dropper/backdoor works.&lt;/p&gt;

&lt;p&gt;I’ve flagged the job and reported it to @Upwork Trust &amp;amp; Safety so they can warn others.&lt;/p&gt;

&lt;p&gt;🔑 Takeaways for fellow freelancers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never run code from strangers without first looking inside (even on trusted platforms).&lt;/li&gt;
&lt;li&gt;Watch for red flags: unverified payment, big payout for trivial work, pressure to run code immediately.&lt;/li&gt;
&lt;li&gt;If something feels off, stop, inspect, and report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay safe and keep each other safe.&lt;/p&gt;

&lt;h1&gt;
  
  
  Upwork #freelance #security #NodeJS #infosec #webdev #malware
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>upwork</category>
      <category>freelance</category>
    </item>
    <item>
      <title>From Mechanical Engineer to Web Developer: My Journey</title>
      <dc:creator>Bashar V I</dc:creator>
      <pubDate>Fri, 07 Jun 2024 17:52:35 +0000</pubDate>
      <link>https://dev.to/basharvi/from-mechanical-engineer-to-web-developer-my-journey-5893</link>
      <guid>https://dev.to/basharvi/from-mechanical-engineer-to-web-developer-my-journey-5893</guid>
      <description>&lt;p&gt;Hi Everyone!&lt;/p&gt;

&lt;p&gt;I’m Bashar, a mechanical engineering graduate who transitioned into web development. My journey began as a Design Engineer, where I spent six years creating machine parts and manufacturing drawings. However, the COVID-19 pandemic changed everything. Like many, I lost my job and found myself rethinking my career path.&lt;/p&gt;

&lt;p&gt;I’ve always had a passion for coding. Despite opportunities during my school days, I didn’t pursue it then (a decision I now regret). During the pandemic, with ample free time, I decided to dive into programming. I stumbled upon a YouTube channel called Crossroads (now &lt;a href="https://www.youtube.com/@BrototypeMalayalam"&gt;Brototype&lt;/a&gt;) and their &lt;a href="https://youtu.be/pDmEYRhyusU?si=EhyOvXk6l8rBJh4f"&gt;'100K Coding Challenge'&lt;/a&gt; series. This series was a turning point for me. Seeing my first 'Hello World' output filled me with joy and ignited my enthusiasm for learning programming.&lt;/p&gt;

&lt;p&gt;As a Design Engineer, I rarely saw the end products of my work, which left me feeling unfulfilled. In contrast, coding allowed me to see immediate results, giving me a sense of ownership and satisfaction. This newfound happiness motivated me to continue my coding journey.&lt;/p&gt;

&lt;p&gt;I completed several projects by following YouTube tutorials and an online course on Udemy to learn JavaScript. I started building projects using the MERN Stack and began applying for coding jobs. The transition was challenging, but after a few months of job hunting, I secured my first coding job as a Backend Developer at &lt;a href="https://skyniche.com/"&gt;Skyniche Technologies&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At Skyniche, I worked on various projects, which helped me learn and upskill significantly. This career switch boosted my confidence and courage to pursue more in life. Now, I’m in the vibrant city of Dubai, looking for exciting opportunities while continuously learning new technologies.&lt;/p&gt;

&lt;p&gt;I’d love to connect with fellow tech enthusiasts and learn more about growing in the tech field. Feel free to connect with me on LinkedIn and GitHub.&lt;/p&gt;

&lt;p&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/basharvi/"&gt;Bashar V I&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/BasharVI"&gt;BasharVI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br&gt;
Bashar&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>career</category>
      <category>careerdevelopment</category>
    </item>
  </channel>
</rss>
