<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5584304689908726112</id><updated>2026-03-05T01:38:40.808+05:30</updated><category term="WIndows"/><category term="Ubuntu"/><category term="Android"/><category term="File"/><category term="Linux"/><category term="Problem"/><category term="Online"/><category term="Excel"/><category term="Change"/><category term="Data"/><category term="Java"/><category term="Microsoft"/><category term="Server"/><category term="Command"/><category term="Application"/><category term="Create"/><category term="User"/><category term="Convert"/><category term="Image"/><category term="Copy"/><category term="Installation"/><category term="Windows 7"/><category term="issue"/><category term="Folder"/><category term="Free"/><category term="Solution"/><category term="Update"/><category term="Upgrade"/><category term="Video"/><category term="Auto"/><category term="Download"/><category term="Card"/><category term="Code"/><category term="Database"/><category term="Directory"/><category term="Install"/><category term="Macro"/><category term="Source"/><category term="Format"/><category term="Settings"/><category term="path"/><category term="C++"/><category term="Default"/><category term="Eclipse"/><category term="Error"/><category term="Files"/><category term="Google"/><category term="HTML"/><category term="Line"/><category term="Network"/><category term="Not"/><category term="Offline"/><category term="Prompt"/><category term="Service"/><category term="System"/><category term="Tools"/><category term="Windows 10"/><category term="Blog"/><category term="Browser"/><category term="C"/><category term="Configuration"/><category term="Customization"/><category term="Drive"/><category term="Location"/><category term="Mobile"/><category term="Node"/><category term="PDF"/><category term="Plugin"/><category term="Public"/><category term="Script"/><category term="Start"/><category term="USB"/><category term="Web"/><category term="Website"/><category term="Wireless"/><category term="Write"/><category term="app"/><category term="certificate"/><category term="configure"/><category term="port"/><category term="Address"/><category term="All"/><category term="Andhra"/><category term="Boot"/><category term="Connection"/><category term="Conversion"/><category term="Custom"/><category term="Delete"/><category term="Developer"/><category term="Disk"/><category term="Environment"/><category term="Generate"/><category term="IDE"/><category term="Internet"/><category term="Key"/><category term="Message"/><category term="Multiple"/><category term="New"/><category term="Open"/><category term="Oracle"/><category term="Pradesh"/><category term="Procedure"/><category term="Project"/><category term="SSL"/><category term="Test"/><category term="Tutorial"/><category term="Unable"/><category term="Useful"/><category term="Windows 8"/><category term="Working"/><category term="azure"/><category term="github"/><category term="sql"/><category term="11.10"/><category term="Account"/><category term="Audio"/><category term="Batch"/><category term="Block"/><category term="CSV"/><category term="Cell"/><category term="Check"/><category term="Computer"/><category term="Daily"/><category term="Details"/><category term="Development"/><category term="Explore"/><category term="Export"/><category term="Find"/><category term="IIS"/><category term="Icon"/><category term="Languages"/><category term="Library"/><category term="Localhost"/><category term="Missing"/><category term="Mount"/><category term="Notepad"/><category term="OS"/><category term="Object"/><category term="PC"/><category term="Packages"/><category term="Page"/><category term="Password"/><category term="Payment"/><category term="Pen"/><category term="Platform"/><category term="Pro"/><category term="Read"/><category term="Run"/><category term="SMS"/><category term="Secure"/><category term="Sheet"/><category term="Shortcut"/><category term="Software"/><category term="Table"/><category term="Terminal"/><category term="Text"/><category term="USB Pen Drive"/><category term="Virtual"/><category term="Windows XP"/><category term="access"/><category term="connect"/><category term="docker"/><category term="drop"/><category term="email"/><category term="https"/><category term="iOS"/><category term="local"/><category term="move"/><category term="npm"/><category term="open source"/><category term="plus"/><category term="powershell"/><category term="remove"/><category term="reverse"/><category term="2007"/><category term="ADB"/><category term="APOnline"/><category term="Applications"/><category term="Bank"/><category term="Best"/><category term="Bill"/><category term="Book"/><category term="C#"/><category term="Center"/><category term="Combine"/><category term="Corporation"/><category term="Customize"/><category term="Date"/><category term="Debit"/><category term="Deploy"/><category term="Device"/><category term="Digital"/><category term="Display"/><category term="Drivers"/><category term="Editor"/><category term="Examination"/><category term="Extension"/><category term="Firefox"/><category term="Full"/><category term="GMail"/><category term="Go"/><category term="Government"/><category term="HTTP"/><category term="Hide"/><category term="Import"/><category term="Indian"/><category term="JavaScript"/><category term="Keyboard"/><category term="Link"/><category term="Live"/><category term="MAC"/><category term="MacBook"/><category term="Manager"/><category term="Map"/><category term="Messages"/><category term="Name"/><category term="Navigate"/><category term="Netbeans"/><category term="Number"/><category term="Power"/><category term="Publish"/><category term="Reader"/><category term="Resolution"/><category term="SQLServer"/><category term="SSH"/><category term="Sample"/><category term="Screen"/><category term="Services"/><category term="Setup"/><category term="Share"/><category term="Single"/><category term="Softwares"/><category term="Space"/><category term="Startup"/><category term="Tables"/><category term="UNIX"/><category term="Upload"/><category term="Usage"/><category term="VMWare"/><category term="Validation"/><category term="Virus"/><category term="Visual"/><category term="Volume"/><category term="WIndow"/><category term="algorithm"/><category term="alternatives"/><category term="aws"/><category term="character"/><category term="class"/><category term="cordova"/><category term="domain"/><category term="example"/><category term="fix"/><category term="git"/><category term="ip"/><category term="kill"/><category term="nginx"/><category term="no"/><category term="node.js"/><category term="openssl"/><category term="pem"/><category term="permission"/><category term="phonegap"/><category term="private"/><category term="process"/><category term="program"/><category term="qr"/><category term="remote"/><category term="restart"/><category term="same"/><category term="sdk"/><category term="security"/><category term="static"/><category term="windows 8.1"/><category term=".apk"/><category term="11.04"/><category term="12.04"/><category term="13 inch"/><category term="32-bit"/><category term="64-bit"/><category term="7"/><category term="90"/><category term="AP"/><category term="APK"/><category term="ARR"/><category term="ATM"/><category term="AVD"/><category term="Activation"/><category term="Adapter"/><category term="Addressbar"/><category term="Amazon"/><category term="Apache"/><category term="Apple"/><category term="Apply"/><category term="Authentication"/><category term="Automatic"/><category term="Available"/><category term="Backup"/><category term="Bar"/><category term="Basic"/><category term="Between"/><category term="Buy"/><category term="Call"/><category term="Capture"/><category term="Cheap"/><category term="Chrome"/><category term="Client"/><category term="Columns"/><category term="Comparision"/><category term="Comparison"/><category term="Condition"/><category term="Connectify"/><category term="Console"/><category term="Converter"/><category term="Currency"/><category term="DLL"/><category term="DNS"/><category term="Debug"/><category term="Debugger"/><category term="Difference"/><category term="Different"/><category term="Disable"/><category term="Distribution"/><category term="District"/><category term="Document"/><category term="Dynamic"/><category term="Easy"/><category term="Edit"/><category term="Enable"/><category term="Encode"/><category term="Expression"/><category term="Faster"/><category term="Field"/><category term="Fill"/><category term="Forgot"/><category term="Form"/><category term="Function"/><category term="GUI"/><category term="Huffman"/><category term="Hyderabad"/><category term="Inbuilt"/><category term="Index"/><category term="India"/><category term="Interface"/><category term="J2EE"/><category term="JNI"/><category term="JS"/><category term="JSON"/><category term="Jailbreak"/><category term="JellyBean"/><category term="Kit"/><category term="LAN"/><category term="Limit"/><category term="Load"/><category term="Logo"/><category term="Machine"/><category term="Mail"/><category term="Menu"/><category term="Mouse"/><category term="Offer"/><category term="Office"/><category term="Order"/><category term="Patch"/><category term="Penetration"/><category term="Permissions"/><category term="Phone"/><category term="Ping"/><category term="Pl/SQL"/><category term="Pop-up"/><category term="Post"/><category term="Preferences"/><category term="Price"/><category term="Profile"/><category term="Programming"/><category term="Protect"/><category term="Protected"/><category term="Purchase"/><category term="Records"/><category term="Regular"/><category term="Review"/><category term="Robin"/><category term="Round"/><category term="Row"/><category term="Rows"/><category term="Running"/><category term="SQLite"/><category term="Selection"/><category term="Send"/><category term="Solved"/><category term="Sony"/><category term="Speed"/><category term="Spreadsheet"/><category term="Spring"/><category term="String"/><category term="Sync"/><category term="Tasks"/><category term="Testing"/><category term="Title"/><category term="TrueCrypt"/><category term="UCK"/><category term="URL"/><category term="Unlock"/><category term="Untethered"/><category term="Using"/><category term="Vba"/><category term="Verify"/><category term="Visual Studio"/><category term="Vodafone"/><category term="Voice"/><category term="Wireshark"/><category term="Without"/><category term="Word"/><category term="Work"/><category term="Worksheet"/><category term="Workspace"/><category term="Writer"/><category term="XPS"/><category term="aadhaar"/><category term="active"/><category term="adfs"/><category term="alter"/><category term="alternative"/><category term="api"/><category term="appdata"/><category term="base64"/><category term="blogging"/><category term="branch"/><category term="build"/><category term="caddy"/><category term="carriage"/><category term="chennai"/><category term="clean"/><category term="commit"/><category term="completely"/><category term="config"/><category term="container"/><category term="contents"/><category term="creation"/><category term="csidl"/><category term="datafile"/><category term="days"/><category term="db"/><category term="description"/><category term="desktop"/><category term="devops"/><category term="documents"/><category term="dos2unix"/><category term="e-book"/><category term="end"/><category term="enterprise"/><category term="entries"/><category term="eol"/><category term="escape"/><category term="favicon"/><category term="feed"/><category term="flutter"/><category term="formula"/><category term="generator"/><category term="grant"/><category term="group"/><category term="iPhone"/><category term="id"/><category term="images"/><category term="increment"/><category term="letsencrypt"/><category term="long"/><category term="municipal"/><category term="names"/><category term="nexus"/><category term="notepad++"/><category term="old"/><category term="partition"/><category term="passport"/><category term="pfx"/><category term="play"/><category term="plugman"/><category term="preview"/><category term="privileges"/><category term="properties"/><category term="proxy"/><category term="push"/><category term="python"/><category term="recovery"/><category term="redhat"/><category term="rename"/><category term="renewal"/><category term="requirements"/><category term="reset"/><category term="return"/><category term="rhel"/><category term="roaming"/><category term="simple"/><category term="specific"/><category term="studio"/><category term="tablespace"/><category term="trigger"/><category term="unmount"/><category term="values"/><category term="variable"/><category term="version"/><category term="vijayawada"/><category term="win32"/><category term=".NET"/><category term=".NET Framework"/><category term=".class"/><category term=".docx"/><category term=".gz. .tar.gz"/><category term=".jar. Create"/><category term=".p12"/><category term=".tar"/><category term=".zip"/><category term="10th"/><category term="127.0.0.1"/><category term="14.04"/><category term="1545"/><category term="2-Step"/><category term="2011"/><category term="2012"/><category term="256"/><category term="384"/><category term="3D"/><category term="3G"/><category term="4"/><category term="4.2.2"/><category term="4.3.3"/><category term="4.4"/><category term="44228"/><category term="5"/><category term="509"/><category term="52484"/><category term="ABI"/><category term="APCPDCL"/><category term="APPSC"/><category term="APSPSC"/><category term="AR"/><category term="AREA"/><category term="ASP"/><category term="AWK"/><category term="Aakash"/><category term="Add"/><category term="Adjust"/><category term="Admit"/><category term="Adobe"/><category term="Advance"/><category term="Agent"/><category term="Airtel"/><category term="Alt"/><category term="Amount"/><category term="Apps"/><category term="Architecture"/><category term="Assembly"/><category term="Asus"/><category term="Attack"/><category term="Attacks"/><category term="Augmented"/><category term="Autofit"/><category term="Autologin"/><category term="Automatically"/><category term="Autorun"/><category term="BCM4331"/><category term="BLOB"/><category term="BSNL"/><category term="Balance"/><category term="Basis"/><category term="Battery"/><category term="Beam"/><category term="Berth"/><category term="BillDesk"/><category term="Binary"/><category term="BlackBerry"/><category term="Board"/><category term="Boomerang"/><category term="Booth"/><category term="Box"/><category term="Breakpoint"/><category term="Browsing"/><category term="Budget"/><category term="Bulk"/><category term="Bundle"/><category term="Bypass"/><category term="C Sharp"/><category term="Camera"/><category term="Canon"/><category term="Captured Packets"/><category term="Care"/><category term="Cent"/><category term="Central"/><category term="Ceylon"/><category term="Chapel"/><category term="Charge"/><category term="Checksum"/><category term="Citi"/><category term="Citrus"/><category term="Civil"/><category term="Clojure"/><category term="Cloud Computing"/><category term="Comment"/><category term="Commission"/><category term="Compare"/><category term="Compile"/><category term="Connectivity"/><category term="Consolidate"/><category term="Constituency"/><category term="Contacts"/><category term="Core"/><category term="Correct"/><category term="Cost"/><category term="Cover"/><category term="Crontab"/><category term="Crop"/><category term="Currently"/><category term="Customer"/><category term="Cutter"/><category term="Cygwin"/><category term="Dalvik"/><category term="Dart"/><category term="Dates"/><category term="Debian"/><category term="Decode"/><category term="Delimiter"/><category term="Dell"/><category term="Diff"/><category term="Differentiate"/><category term="Diffmerge"/><category term="Directories"/><category term="Drain"/><category term="Driver"/><category term="EPF"/><category term="ESX"/><category term="East"/><category term="Eastern"/><category term="Editions"/><category term="Election"/><category term="Electoral"/><category term="Electricity"/><category term="Emulation"/><category term="English"/><category term="Euro"/><category term="Evaluate"/><category term="Execute"/><category term="Express"/><category term="External"/><category term="Facebook"/><category term="Fair"/><category term="Family"/><category term="Fantom"/><category term="Fault"/><category term="Favorite"/><category term="Feature"/><category term="Features"/><category term="Feedback"/><category term="Festival"/><category term="File Comparision"/><category term="Flash"/><category term="Flickr"/><category term="Font"/><category term="Found"/><category term="Friends"/><category term="Functions"/><category term="Fund"/><category term="Future"/><category term="GUID"/><category term="Galaxy"/><category term="Geo"/><category term="Gestures"/><category term="Get"/><category term="Godavari"/><category term="Google Maps"/><category term="Grabmycontacts"/><category term="Graphical"/><category term="Grayscale"/><category term="Hacking"/><category term="Hall"/><category term="Hard"/><category term="Header"/><category term="Height"/><category term="Help"/><category term="Hidden"/><category term="Host"/><category term="Hotspot"/><category term="Hyperlink"/><category term="IAAS"/><category term="ICICI"/><category term="IDEA"/><category term="IME"/><category term="IT"/><category term="Indic"/><category term="Infected"/><category term="Input"/><category term="Insertion"/><category term="Inspect"/><category term="Inspiron"/><category term="Introduction"/><category term="Irfanview"/><category term="J2ME"/><category term="JDBC"/><category term="JSP"/><category term="JVM"/><category term="Java 10"/><category term="Java 9"/><category term="Jobs"/><category term="Joiner"/><category term="Kernel"/><category term="Kestrel"/><category term="Kilobyte"/><category term="Konboot"/><category term="L"/><category term="L412"/><category term="L512"/><category term="Labs"/><category term="Language"/><category term="Laptop"/><category term="Launch"/><category term="Layout"/><category term="Lenovo"/><category term="Limited"/><category term="Links"/><category term="Listbox"/><category term="Lockdown"/><category term="Login"/><category term="Low"/><category term="MD5"/><category term="MD5 Decode"/><category term="MMID"/><category term="MP3"/><category term="MS Word"/><category term="Mac OS X"/><category term="Magic"/><category term="Mahboobnagar"/><category term="Malicious"/><category term="Manage"/><category term="Management"/><category term="Manually"/><category term="MapmyIndia"/><category term="Marshmallow"/><category term="Matlab"/><category term="Maximum"/><category term="Medak"/><category term="Merge"/><category term="Micro"/><category term="MinGW"/><category term="Mode"/><category term="Modification"/><category term="Modify"/><category term="Monitor"/><category term="Mouse Gestures"/><category term="Mozilla"/><category term="Multi"/><category term="Multiline"/><category term="NDK"/><category term="NET"/><category term="Nalgonda"/><category term="Ncarry"/><category term="Nested"/><category term="Netresec"/><category term="Networks"/><category term="Nikon"/><category term="Nokia"/><category term="Numbers"/><category term="Official"/><category term="On"/><category term="OneNote"/><category term="Oneric"/><category term="Only"/><category term="Operating"/><category term="Other"/><category term="PAAS"/><category term="PF"/><category term="PIN"/><category term="PPT"/><category term="Paid"/><category term="Paise"/><category term="Pangolin"/><category term="Part"/><category term="Paste"/><category term="Pay"/><category term="PayUMoney"/><category term="Phonebook"/><category term="Photo"/><category term="Photos"/><category term="Polling"/><category term="Pool"/><category term="Port Blocking"/><category term="Portable"/><category term="Porteus"/><category term="Position"/><category term="Powerpoint"/><category term="Pramukh"/><category term="Precise"/><category term="Preference"/><category term="Presentation"/><category term="Prevent"/><category term="Previous"/><category term="Printer"/><category term="Printing"/><category term="Procedures"/><category term="Processing"/><category term="Protocol"/><category term="Provident"/><category term="Publications"/><category term="RGB"/><category term="Railway"/><category term="Rangareddy"/><category term="Ransome"/><category term="RawCap"/><category term="Reality"/><category term="Record"/><category term="Reference"/><category term="Reliance Netconnect Plus"/><category term="Removal"/><category term="Request"/><category term="Restricted"/><category term="Retrieval"/><category term="Rewrite"/><category term="Root"/><category term="Routing"/><category term="Rules"/><category term="Runtime"/><category term="Rupee"/><category term="SAAS"/><category term="SD"/><category term="SHA1"/><category term="SLAX"/><category term="SMB"/><category term="SSC"/><category term="Safe"/><category term="Samba"/><category term="Samsung"/><category term="Scanner"/><category term="Schedule"/><category term="Scrapbook"/><category term="Screenshot"/><category term="Search"/><category term="Segmentation"/><category term="Select"/><category term="Sequences"/><category term="ServerFarm"/><category term="Shelr"/><category term="Shortcuts"/><category term="Sim"/><category term="Simultaneously"/><category term="Site"/><category term="Sites"/><category term="Skill"/><category term="Skype"/><category term="Slide"/><category term="Slideshow"/><category term="Slot"/><category term="Sold"/><category term="Specified"/><category term="Split"/><category term="Splitter"/><category term="Srikakulam"/><category term="Standalone"/><category term="Statement"/><category term="Status"/><category term="Steganography"/><category term="Stego"/><category term="Steps"/><category term="Storage"/><category term="Store"/><category term="Submission"/><category term="Success"/><category term="Suggestion"/><category term="Sumatra"/><category term="Sumerian"/><category term="Switch"/><category term="Tablet"/><category term="Tablets"/><category term="Technologies"/><category term="Telangana"/><category term="Telecom"/><category term="Telugu"/><category term="Teracopy"/><category term="Tethered"/><category term="Theme"/><category term="Thinkpad"/><category term="Ticket"/><category term="Timeline"/><category term="Timings"/><category term="Tomcat"/><category term="TouchPad"/><category term="Transpose"/><category term="Trasliteration"/><category term="Troubleshoot"/><category term="Two"/><category term="Type"/><category term="Types"/><category term="Typing"/><category term="UAN"/><category term="UDP"/><category term="UGC"/><category term="UIDAI"/><category term="UML"/><category term="UbiSlate"/><category term="Uncomment"/><category term="Under"/><category term="Undo"/><category term="Unhide"/><category term="Unity"/><category term="Users"/><category term="VLC"/><category term="VR"/><category term="VSCode"/><category term="Vefiy"/><category term="Views"/><category term="Visakhapatnam"/><category term="Vishal"/><category term="Vizianagaram"/><category term="Voter"/><category term="WLAN"/><category term="WannaCry"/><category term="WebAssembly"/><category term="WebEx"/><category term="Webpage"/><category term="Webserver"/><category term="Websites"/><category term="West"/><category term="Wi-Fi"/><category term="Width"/><category term="Wind"/><category term="Wire"/><category term="World"/><category term="X"/><category term="Xperia"/><category term="Zenfone"/><category term="abis"/><category term="abort"/><category term="action"/><category term="ad"/><category term="adds"/><category term="admin"/><category term="ai"/><category term="album"/><category term="allow"/><category term="and"/><category term="annexure"/><category term="another"/><category term="ant"/><category term="appbundle"/><category term="append"/><category term="applicant"/><category term="appointment"/><category term="array"/><category term="artifact"/><category term="assets"/><category term="asymmetric"/><category term="attachment"/><category term="attribute"/><category term="autorickshaw"/><category term="availability"/><category term="azuread"/><category term="b12"/><category term="back"/><category term="backend"/><category term="background"/><category term="balancing"/><category term="bash"/><category term="bat"/><category term="birth"/><category term="bitbucket"/><category term="boards"/><category term="booking"/><category term="broadcast"/><category term="browse"/><category term="built-in"/><category term="cache"/><category term="calculate"/><category term="cascade"/><category term="cash"/><category term="cast"/><category term="certbot"/><category term="chalan"/><category term="challan"/><category term="charset"/><category term="chatgpt"/><category term="checkout"/><category term="citizen"/><category term="classes"/><category term="clear"/><category term="cloud"/><category term="cloudflare"/><category term="cmd"/><category term="column"/><category term="commands"/><category term="community"/><category term="company"/><category term="compiler"/><category term="compress"/><category term="computation"/><category term="connecting"/><category term="consume"/><category term="contactless"/><category term="content"/><category term="continuous"/><category term="control"/><category term="controlpanel"/><category term="corporate"/><category term="counter"/><category term="cplusplus"/><category term="credit"/><category term="cross"/><category term="crx"/><category term="csharp"/><category term="curve"/><category term="cve"/><category term="datareader"/><category term="daytoday"/><category term="deactivate"/><category term="decompile"/><category term="demo"/><category term="dependencies"/><category term="dependency"/><category term="deployment"/><category term="destination"/><category term="dev"/><category term="deve"/><category term="dex"/><category term="dhcp"/><category term="directorate"/><category term="discount"/><category term="disks"/><category term="dispense"/><category term="dive"/><category term="don&#39;t"/><category term="drag"/><category term="driving"/><category term="dropdown"/><category term="duplicate"/><category term="dynamci"/><category term="e-mail"/><category term="each"/><category term="ec2"/><category term="ecdsa"/><category term="elliptic"/><category term="emailer"/><category term="embed"/><category term="employee"/><category term="employer"/><category term="emulator"/><category term="engineering"/><category term="entry"/><category term="event"/><category term="exit"/><category term="exploit"/><category term="extend"/><category term="extract"/><category term="f#"/><category term="fare"/><category term="fastboot"/><category term="fat32"/><category term="federation"/><category term="firewall"/><category term="first"/><category term="flush"/><category term="folders"/><category term="fresh"/><category term="fullscreen"/><category term="gcd"/><category term="gist"/><category term="golang"/><category term="gopath"/><category term="graphic"/><category term="grub"/><category term="gunzip"/><category term="haXe"/><category term="harddisk"/><category term="have"/><category term="head"/><category term="high"/><category term="history"/><category term="in"/><category term="in use"/><category term="inbound"/><category term="inbox"/><category term="including"/><category term="increase"/><category term="insert"/><category term="inside"/><category term="insta"/><category term="instance"/><category term="insufficient"/><category term="integration"/><category term="intelliJ"/><category term="invalid"/><category term="jar"/><category term="javac"/><category term="jdk"/><category term="jenkins"/><category term="jnlp"/><category term="join"/><category term="joining"/><category term="jpeg"/><category term="jpg"/><category term="kaasu"/><category term="kitkat"/><category term="last"/><category term="lat"/><category term="latex"/><category term="latitude"/><category term="ldap"/><category term="leaflet"/><category term="learn"/><category term="license"/><category term="list"/><category term="lite"/><category term="livecd"/><category term="lock"/><category term="log4j"/><category term="logical"/><category term="lollipop"/><category term="longitude"/><category term="loopback"/><category term="losing"/><category term="lost"/><category term="mandatory"/><category term="mapping"/><category term="markdown"/><category term="marker"/><category term="marks"/><category term="markup"/><category term="master"/><category term="match"/><category term="matching"/><category term="mathematical"/><category term="maven"/><category term="max"/><category term="md"/><category term="member"/><category term="memo"/><category term="meta"/><category term="meter"/><category term="migration"/><category term="mismatch"/><category term="mobie"/><category term="money"/><category term="msaccess"/><category term="music"/><category term="must"/><category term="mysql"/><category term="n"/><category term="netstat"/><category term="next"/><category term="ntfs"/><category term="nvm"/><category term="oem"/><category term="off"/><category term="opa"/><category term="opening"/><category term="openjdk"/><category term="openvpn"/><category term="option"/><category term="options"/><category term="ora"/><category term="organization"/><category term="original"/><category term="out"/><category term="own"/><category term="package"/><category term="packets"/><category term="pages"/><category term="pan"/><category term="pandoc"/><category term="partof"/><category term="patter"/><category term="persistent"/><category term="personal"/><category term="physical"/><category term="picasa"/><category term="pid"/><category term="pincode"/><category term="pip"/><category term="pkcs12"/><category term="play store"/><category term="plist"/><category term="png"/><category term="police"/><category term="pom"/><category term="popup"/><category term="portal"/><category term="postgres"/><category term="postgresql"/><category term="pr"/><category term="practices"/><category term="prepend"/><category term="print"/><category term="property"/><category term="ps"/><category term="pull"/><category term="putty"/><category term="queries"/><category term="re-issue"/><category term="reachable"/><category term="rebase"/><category term="reboot"/><category term="recorder"/><category term="recording"/><category term="recover"/><category term="redirect"/><category term="reenable"/><category term="references"/><category term="regedit"/><category term="release"/><category term="replicate"/><category term="repo"/><category term="repository"/><category term="resize"/><category term="resolve.conf"/><category term="rest"/><category term="restriction"/><category term="revert"/><category term="rpm"/><category term="rsa"/><category term="rule"/><category term="rust"/><category term="sbi"/><category term="scan"/><category term="sccfg.sys"/><category term="schema"/><category term="screencast"/><category term="separate"/><category term="session"/><category term="set"/><category term="sha"/><category term="sharing"/><category term="shorten"/><category term="sid"/><category term="signature"/><category term="singer"/><category term="size"/><category term="song"/><category term="spam"/><category term="speaker"/><category term="statusbar"/><category term="stop"/><category term="storing"/><category term="structure"/><category term="student"/><category term="sub folders"/><category term="subnet"/><category term="subsystem"/><category term="such"/><category term="suggestions"/><category term="symbol"/><category term="symbolic"/><category term="symbols"/><category term="symlink"/><category term="syntax"/><category term="sysdba"/><category term="system32"/><category term="tar"/><category term="targetID"/><category term="tasklist"/><category term="tatkal"/><category term="tax"/><category term="teacher"/><category term="team"/><category term="template"/><category term="termina"/><category term="textual"/><category term="things"/><category term="time"/><category term="tls"/><category term="tnsnames"/><category term="token"/><category term="too"/><category term="traffic"/><category term="tunnel"/><category term="txt"/><category term="uac"/><category term="uninstall"/><category term="unlo"/><category term="up"/><category term="upstream"/><category term="username"/><category term="utf-8"/><category term="utilities"/><category term="vCenter"/><category term="vSphere"/><category term="verification"/><category term="versioning"/><category term="visit"/><category term="vm"/><category term="vmc"/><category term="vmx"/><category term="vocal"/><category term="vulnerability"/><category term="want"/><category term="whatsapp"/><category term="wifi"/><category term="withdrawal"/><category term="within"/><category term="workbench"/><category term="workbook"/><category term="workitem"/><category term="x10"/><category term="xcode"/><category term="xml"/><category term="yono"/><category term="yum"/><category term="zeroday"/><category term="zerossl"/><category term="zimbu"/><category term="zip"/><category term="zoom"/><title type='text'>PSR.COM</title><subtitle type='html'>My learning and experiments with description ..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>300</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-5796349913387095370</id><published>2026-01-30T01:53:00.007+05:30</published><updated>2026-01-30T10:52:27.707+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="caddy"/><category scheme="http://www.blogger.com/atom/ns#" term="certificate"/><category scheme="http://www.blogger.com/atom/ns#" term="cloudflare"/><category scheme="http://www.blogger.com/atom/ns#" term="demo"/><category scheme="http://www.blogger.com/atom/ns#" term="dev"/><category scheme="http://www.blogger.com/atom/ns#" term="domain"/><category scheme="http://www.blogger.com/atom/ns#" term="local"/><category scheme="http://www.blogger.com/atom/ns#" term="Public"/><category scheme="http://www.blogger.com/atom/ns#" term="Publish"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><category scheme="http://www.blogger.com/atom/ns#" term="Test"/><category scheme="http://www.blogger.com/atom/ns#" term="tunnel"/><category scheme="http://www.blogger.com/atom/ns#" term="Without"/><title type='text'>Making a Local Dev Server accessible via Public Domain using Cloudflare Tunnel</title><content type='html'>&lt;p&gt;Hi all,&lt;/p&gt;&lt;p&gt;Today, we are going to discuss how you can publicly access the local running server with a domain and Cloudflare tunnel.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Pre-requisites&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Domain&lt;/li&gt;&lt;li&gt;DNS on Cloudflare&lt;/li&gt;&lt;li&gt;Cloudflare One account access&lt;/li&gt;&lt;li&gt;Local server&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Set up the environment&lt;/h3&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Application&lt;/h4&gt;&lt;p&gt;Make sure your application runs locally on a port like 8000,9000 etc.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Cloudflare Tunnel&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Log in to your Cloudflare One account.&lt;/li&gt;&lt;li&gt;Go to &quot;&lt;b&gt;Zero Trust&lt;/b&gt;&quot;.&lt;/li&gt;&lt;li&gt;Expand &lt;b&gt;Networks&lt;/b&gt; and select &lt;b&gt;Connectors.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Click on “&lt;b&gt;Create a tunnel&lt;/b&gt;”.&lt;/li&gt;&lt;li&gt;Select “&lt;b&gt;Cloudflared&lt;/b&gt;”.&lt;/li&gt;&lt;li&gt;Give a name to your tunnel.&lt;/li&gt;&lt;li&gt;Click on “&lt;b&gt;Save&lt;/b&gt;”.&lt;/li&gt;&lt;li&gt;In the &quot;&lt;b&gt;Choose your environment&lt;/b&gt;&quot; section, select the environment where the server is running.&lt;/li&gt;&lt;li&gt;Follow the instructions to install and run a connector.&lt;/li&gt;&lt;li&gt;Here, you need to move to your server machine.&lt;/li&gt;&lt;li&gt;Open the terminal and perform the instructions to install the &quot;&lt;b&gt;cloudflared&quot;&lt;/b&gt;&amp;nbsp;tool&lt;b&gt;.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Run using the token (part of the command).&lt;/li&gt;&lt;li&gt;Once the installation is completed. Click on &lt;b&gt;Save.&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Add IP/CIDR&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Edit the tunnel to add the IP/CIDR.&lt;/li&gt;&lt;li&gt;Choose based on your local DHCP.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Published application routes&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Click on “&lt;b&gt;Add a published application route&lt;/b&gt;”.&lt;/li&gt;&lt;li&gt;Give an optional subdomain.&lt;/li&gt;&lt;li&gt;Select the domain from the dropdown.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;You need to have your domain managed by Cloudflare (DNS).&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;An optional path to make sure you have a frontend and a backend that work together.&lt;/li&gt;&lt;li&gt;Under service, select Type as HTTP, and your local machine server port.&lt;/li&gt;&lt;li&gt;Select the URL of the server application, including the localport.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;localhost:9000&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Click on “Save”.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Note: &lt;/b&gt;If you have a frontend and a backend, then you need to add one more application route.&lt;p&gt;&lt;/p&gt;&lt;p&gt;In my scenario, the frontend path is * with localhost:9001, and the backend path is api/* with localhost:8000.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Run the tunnel&lt;/h3&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Make sure your local web server is running&lt;/li&gt;&lt;li&gt;Log in to &lt;b&gt;cloudflared&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;blockquote&gt;&lt;i&gt;cloudflared tunnel login&lt;/i&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Authorize the tunnel on the web browser post login&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;List the tunnels&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;blockquote&gt;&lt;i&gt;cloudflared tunnel list&lt;/i&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Get the tunnel token from the tunnel you created in Cloudflare connectors&lt;/li&gt;&lt;li&gt;Run the command on the local terminal&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;blockquote&gt;&lt;i&gt;cloudflared tunnel run --token eyJhIjoiM2...&lt;/i&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Now, you should be able to browse your configured subdomain with your local web server content.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Troubleshooted issue&lt;/h3&gt;&lt;p&gt;If the frontend with path &quot;&lt;b&gt;/*&quot;&lt;/b&gt; is above the backend route, then your backend APIs will never be reached.&lt;/p&gt;&lt;p&gt;So, &quot;&lt;b&gt;move up&quot;&lt;/b&gt; the backend with &quot;/&lt;b&gt;api/*&quot;&lt;/b&gt; path above the frontend to serve the requests.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to reach out to me if you have any doubts and clarifications needed at my email &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/5796349913387095370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/5796349913387095370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/5796349913387095370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/5796349913387095370'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2026/01/making-local-dev-server-accessible-via.html' title='Making a Local Dev Server accessible via Public Domain using Cloudflare Tunnel'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-584223120392871263</id><published>2025-11-06T13:36:00.000+05:30</published><updated>2025-11-06T13:36:08.349+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Amazon"/><category scheme="http://www.blogger.com/atom/ns#" term="Auto"/><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="caddy"/><category scheme="http://www.blogger.com/atom/ns#" term="certificate"/><category scheme="http://www.blogger.com/atom/ns#" term="Configuration"/><category scheme="http://www.blogger.com/atom/ns#" term="Easy"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP"/><category scheme="http://www.blogger.com/atom/ns#" term="https"/><category scheme="http://www.blogger.com/atom/ns#" term="invalid"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Localhost"/><category scheme="http://www.blogger.com/atom/ns#" term="nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="renewal"/><category scheme="http://www.blogger.com/atom/ns#" term="reverse"/><category scheme="http://www.blogger.com/atom/ns#" term="simple"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="Upgrade"/><title type='text'>Migrate from Nginx to Caddy for SSL auto-renewal in Amazon AWS EC2</title><content type='html'>&lt;p&gt;&amp;nbsp;Dear friends,&lt;/p&gt;&lt;p&gt;Today, we will see a simple migration with less configuration of SSL auto-renewal.&lt;/p&gt;&lt;p&gt;I was using Nginx for SSL auto-renewal using certbot. Every 90 days, the renewal code should run, I made one more service it.&lt;/p&gt;&lt;p&gt;I have come across Caddy, which does an auto-renewal of SSL automatically with certbot. Reducing efforts and making the system smooth.&lt;/p&gt;&lt;p&gt;Follow the steps below&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Stop and disable the Nginx&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;sudo systemctl stop nginx&lt;/p&gt;&lt;p&gt;sudo systemctl disable nginx&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Install the Caddy&lt;/h3&gt;&lt;p&gt;In EC2, if you are running Amazon Linux, then execute the following to install Caddy.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; sudo yum -y install yum-plugin-copr&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; sudo yum -y copr enable @caddy/caddy epel-8-$(arch)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; sudo yum -y install caddy&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Edit and configure the Caddyfile&lt;/h3&gt;&lt;p&gt;Usually, it will be in the path &lt;b&gt;/etc/caddy/Caddyfile&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;sudo vi /etc/caddy/Caddyfile&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I have only one server that is running locally. So, my configuration is easy&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;domain_name {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;reverse_proxy localhost:port&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;You can configure more with your existing Nginx sites-enabled reference.&lt;/p&gt;&lt;p&gt;Happy SSLing.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;If you like the blog or want to comment, kindly reach out to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/584223120392871263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/584223120392871263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/584223120392871263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/584223120392871263'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2025/11/migrate-from-nginx-to-caddy-for-ssl.html' title='Migrate from Nginx to Caddy for SSL auto-renewal in Amazon AWS EC2'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-6993489747196179992</id><published>2025-05-13T21:12:00.004+05:30</published><updated>2025-05-13T21:12:41.735+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="applicant"/><category scheme="http://www.blogger.com/atom/ns#" term="Application"/><category scheme="http://www.blogger.com/atom/ns#" term="appointment"/><category scheme="http://www.blogger.com/atom/ns#" term="booking"/><category scheme="http://www.blogger.com/atom/ns#" term="Center"/><category scheme="http://www.blogger.com/atom/ns#" term="counter"/><category scheme="http://www.blogger.com/atom/ns#" term="documents"/><category scheme="http://www.blogger.com/atom/ns#" term="fresh"/><category scheme="http://www.blogger.com/atom/ns#" term="Indian"/><category scheme="http://www.blogger.com/atom/ns#" term="issue"/><category scheme="http://www.blogger.com/atom/ns#" term="passport"/><category scheme="http://www.blogger.com/atom/ns#" term="police"/><category scheme="http://www.blogger.com/atom/ns#" term="re-issue"/><category scheme="http://www.blogger.com/atom/ns#" term="renewal"/><category scheme="http://www.blogger.com/atom/ns#" term="verification"/><category scheme="http://www.blogger.com/atom/ns#" term="visit"/><title type='text'>Indian Passport renewal process and documents</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;Here is the updated process for renewing a passport for an adult and a child on the same day and time.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Appointment&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Visit the &lt;a href=&quot;https://services2.passportindia.gov.in/psp&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;India Passport Seva&lt;/a&gt; website&lt;/li&gt;&lt;li&gt;Click on &quot;Register&quot; if you don&#39;t have an account.&lt;/li&gt;&lt;li&gt;Click on &quot;Login&quot; if you already have an account.&lt;/li&gt;&lt;li&gt;After successful login, navigate to &quot;Services&quot;.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg8q9Hh4DXUiLrC6pC0UDSAJlhh0wJWVjGRz-BwfczqRtXmWfU7B-6tfz8NzpdzaViWrP5lYQrM4uHC97f0rcK-XhsYLVQmh54FLxd3Y917EUmrBA7vetxjw46CbUGi2A2n-ou_sV95P1oErfWYeOiyaQMtA6Mw5eGg6xrAoqkPmYaek4VHTd_ljhOfI7_J&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;940&quot; data-original-width=&quot;1274&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg8q9Hh4DXUiLrC6pC0UDSAJlhh0wJWVjGRz-BwfczqRtXmWfU7B-6tfz8NzpdzaViWrP5lYQrM4uHC97f0rcK-XhsYLVQmh54FLxd3Y917EUmrBA7vetxjw46CbUGi2A2n-ou_sV95P1oErfWYeOiyaQMtA6Mw5eGg6xrAoqkPmYaek4VHTd_ljhOfI7_J&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Click on &quot;Fresh Passport/Re-Issue of Passport&quot;&lt;/li&gt;&lt;li&gt;Enter your existing passport number to pre-fill the data.&lt;/li&gt;&lt;li&gt;If it&#39;s a fresh passport or you want to manually enter the details, click on the &quot;Skip for Now&quot; link.&lt;/li&gt;&lt;li&gt;Choose the Passport Office&lt;/li&gt;&lt;li&gt;You should see the form below&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi9mxR3Kk7lLay_9sMzwTSaIah7YrEPL5EtI5qKfS0_Ei4NkY0ZmAGAvlEBxAQCFlEt4uZUnGVje6r5gtnglv0hi_cMSkB2wEC4xFXg0i_H9ewusoIpNGS0687g6SpcCBaS5BtI9wuoLW0PWI5dlH6voDNhi8aiZlb5rBFC1GBCwmW9dvYD0NpuVPOwT3kN&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1076&quot; data-original-width=&quot;3424&quot; height=&quot;101&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi9mxR3Kk7lLay_9sMzwTSaIah7YrEPL5EtI5qKfS0_Ei4NkY0ZmAGAvlEBxAQCFlEt4uZUnGVje6r5gtnglv0hi_cMSkB2wEC4xFXg0i_H9ewusoIpNGS0687g6SpcCBaS5BtI9wuoLW0PWI5dlH6voDNhi8aiZlb5rBFC1GBCwmW9dvYD0NpuVPOwT3kN&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;In the case of &quot;Re-issue of Passport&quot;, you will have options to change/modify details in existing passport.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgYCQcQvBsLUKqO7eF2ZOZk9PS6rSMxqoNUTvqQlqRDPlSg2Oudg9wqYznq9a3A8dEVpFma69UkaTp6uIgV-pzp66m-4kQfUcnHv8Bm8-kdC2zky7axO00CU4s9OFhqik2wxvO4cbMZSoxOF2CbRbVmAvcFOmh5nELKKHiwc0QZ_Jc-IJ3kIAuHLJ8Jmibe&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1354&quot; data-original-width=&quot;1516&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgYCQcQvBsLUKqO7eF2ZOZk9PS6rSMxqoNUTvqQlqRDPlSg2Oudg9wqYznq9a3A8dEVpFma69UkaTp6uIgV-pzp66m-4kQfUcnHv8Bm8-kdC2zky7axO00CU4s9OFhqik2wxvO4cbMZSoxOF2CbRbVmAvcFOmh5nELKKHiwc0QZ_Jc-IJ3kIAuHLJ8Jmibe&quot; width=&quot;269&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Check the appropriate items&lt;/li&gt;&lt;li&gt;When you check the &quot;Change in Existing Personal Particulars&quot;, you will have options to update the following details.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhVxshmFnGI6VCcbWy0FbFH7aqQgG3OYPU2i2Bd07yv6jadi8gToyA5dw-NmCQxuz8m2_iMI-rK1GtdTrtQMC3xn05aZp5VLNCUk4MHtWq5TMyMLxLN__JjKfSkvz60rOwKwzAN6AGDGOtwdTMGO9CnACNARJR73L9WHYIYnTVz851EG9G3L9YJWEGD1Ci6&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1744&quot; data-original-width=&quot;1524&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhVxshmFnGI6VCcbWy0FbFH7aqQgG3OYPU2i2Bd07yv6jadi8gToyA5dw-NmCQxuz8m2_iMI-rK1GtdTrtQMC3xn05aZp5VLNCUk4MHtWq5TMyMLxLN__JjKfSkvz60rOwKwzAN6AGDGOtwdTMGO9CnACNARJR73L9WHYIYnTVz851EG9G3L9YJWEGD1Ci6&quot; width=&quot;210&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;After selecting the &quot;Type of Application&quot; and &quot;Type of Passport Booklet&quot;&lt;/li&gt;&lt;li&gt;Click on &quot;Save and Next&quot;.&lt;/li&gt;&lt;li&gt;Post that you will be navigated tothe&amp;nbsp; next section as mentioned in the flow below.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhUtBhLNzeOGc7KWdlFsckry1jEiLpHkiQQ6CpsRnDdAYj-Nd23Q82U_m6HdyhAj3WUE_ocl1xg9LnjjbSmk4yf3qH8tsRlx4RsHcmuhmDnffz2HThs-aC04H-oVA-ZHGgX-3p-zzxq-E8octnv4ZsK0ShpdAasg3PBAG-EtXJk-Ak7L1BEq5Xd4qjbIE5-&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;296&quot; data-original-width=&quot;2616&quot; height=&quot;36&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhUtBhLNzeOGc7KWdlFsckry1jEiLpHkiQQ6CpsRnDdAYj-Nd23Q82U_m6HdyhAj3WUE_ocl1xg9LnjjbSmk4yf3qH8tsRlx4RsHcmuhmDnffz2HThs-aC04H-oVA-ZHGgX-3p-zzxq-E8octnv4ZsK0ShpdAasg3PBAG-EtXJk-Ak7L1BEq5Xd4qjbIE5-&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Fill in the relevant details and submit the form.&lt;/li&gt;&lt;li&gt;After submitting the form, you will be able to upload the relevant documents that are available in the DigiLocker.&lt;/li&gt;&lt;li&gt;Select the center and date that you want to visit.&lt;/li&gt;&lt;li&gt;Note: It did not help me to smooth the process even after uploading the documents.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Visiting Center&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Take all hard copies, Originals, and Xerox (2 sets)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Application form&lt;/li&gt;&lt;li&gt;Aadhaar Card (Full length)&lt;/li&gt;&lt;li&gt;Existing passport (Front 2 and back 2 Pages) Xerox (no print out with 100% page fill)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In case of a spouse&#39;s addition&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Marriage certificate original&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;For the kid application&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Fill in &quot;Annexure D&quot;&lt;/li&gt;&lt;li&gt;Date of Birth Certificate&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Counters&lt;/li&gt;&lt;ul&gt;&lt;li&gt;A Counter: Verification of the documents, scanning the documents, and taking a photo.&lt;/li&gt;&lt;li&gt;B Counter: Cross verification of the A counter form and documents.&lt;/li&gt;&lt;li&gt;C Counter: Originals will be verified.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Police Verification (Will be indicated in the status of the application after the center visit)&lt;/h3&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;In a couple of days, the police will call and make sure you are available upon the visit at the address submitted in the passport application.&lt;/li&gt;&lt;li&gt;Submitted the application form that has been finalized during the center visit.&lt;/li&gt;&lt;li&gt;Original documents (Old passport(s) and address proof).&lt;/li&gt;&lt;li&gt;Details of the neighbour&#39;s &amp;amp; physical presence with a signature.&lt;/li&gt;&lt;li&gt;Applicant&#39;s signature and thumb along with a passport-size photo that will be stuck to the police filled application.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Please provide your feedback and comments on this blog or email me on &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/6993489747196179992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/6993489747196179992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/6993489747196179992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/6993489747196179992'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2025/05/indian-passport-renewal-process-and.html' title='Indian Passport renewal process and documents'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg8q9Hh4DXUiLrC6pC0UDSAJlhh0wJWVjGRz-BwfczqRtXmWfU7B-6tfz8NzpdzaViWrP5lYQrM4uHC97f0rcK-XhsYLVQmh54FLxd3Y917EUmrBA7vetxjw46CbUGi2A2n-ou_sV95P1oErfWYeOiyaQMtA6Mw5eGg6xrAoqkPmYaek4VHTd_ljhOfI7_J=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-8153969537805079108</id><published>2024-11-27T19:45:00.002+05:30</published><updated>2024-11-27T19:45:21.477+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="b12"/><category scheme="http://www.blogger.com/atom/ns#" term="chatgpt"/><category scheme="http://www.blogger.com/atom/ns#" term="dynamci"/><category scheme="http://www.blogger.com/atom/ns#" term="Explore"/><category scheme="http://www.blogger.com/atom/ns#" term="generator"/><category scheme="http://www.blogger.com/atom/ns#" term="pages"/><category scheme="http://www.blogger.com/atom/ns#" term="static"/><category scheme="http://www.blogger.com/atom/ns#" term="Website"/><title type='text'>Create static website using ChatGPT Website Generator Plugin</title><content type='html'>&lt;p&gt;Hi Everyone,&lt;/p&gt;&lt;p&gt;Here we are where ChatGPT is gathering the required services under one roof.&lt;/p&gt;&lt;p&gt;Click on &quot;&lt;a href=&quot;https://chatgpt.com/gpts&quot; rel=&quot;&quot; target=&quot;_blank&quot;&gt;Explore GPTs&lt;/a&gt;&quot;&lt;/p&gt;&lt;p&gt;Search for &quot;&lt;a href=&quot;https://chatgpt.com/g/g-iYSeH3EAI-website-generator&quot; rel=&quot;&quot; target=&quot;_blank&quot;&gt;Website Generator&lt;/a&gt;&quot;&lt;/p&gt;&lt;p&gt;Prompt the website with the name and major product/service offerings.&lt;/p&gt;&lt;p&gt;It will redirect to the B12 domain with a template. You can update each section with the B12 editor.&lt;/p&gt;&lt;p&gt;For reference, you can visit my website&amp;nbsp;&lt;a href=&quot;https://psr-and-apps.b12sites.com/index#home&quot; rel=&quot;&quot; target=&quot;_blank&quot;&gt;https://psr-and-apps.b12sites.com/index#home&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to send your comments and opinions to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot; target=&quot;_blank&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/8153969537805079108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/8153969537805079108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/8153969537805079108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/8153969537805079108'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2024/11/create-static-website-using-chatgpt.html' title='Create static website using ChatGPT Website Generator Plugin'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-4330756482969656165</id><published>2024-10-28T11:03:00.001+05:30</published><updated>2024-10-28T11:03:20.710+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Auto"/><category scheme="http://www.blogger.com/atom/ns#" term="Blog"/><category scheme="http://www.blogger.com/atom/ns#" term="content"/><category scheme="http://www.blogger.com/atom/ns#" term="description"/><category scheme="http://www.blogger.com/atom/ns#" term="generator"/><category scheme="http://www.blogger.com/atom/ns#" term="meta"/><category scheme="http://www.blogger.com/atom/ns#" term="Post"/><category scheme="http://www.blogger.com/atom/ns#" term="references"/><category scheme="http://www.blogger.com/atom/ns#" term="suggestions"/><category scheme="http://www.blogger.com/atom/ns#" term="Title"/><category scheme="http://www.blogger.com/atom/ns#" term="Write"/><title type='text'>Write Blog Posts using AI Tools</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;When writing my blog post, I thought of using AI tools.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here is the result of my &lt;a href=&quot;https://psrdotcom.blogspot.com/2024/10/understanding-python-dependency.html&quot; target=&quot;_blank&quot;&gt;previous blog post&lt;/a&gt; content using the AI tool &lt;a href=&quot;https://www.copy.ai/&quot;&gt;Copy.ai&lt;/a&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Title suggestions by tool&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; white-space: pre;&quot;&gt;1. Version Confusion Begone! Untangling the Web of Package.json Symbols

2. Tildes and Carets and Stars, Oh My! Demystifying npm Version Ranges  

3. Semantic Versioning 101: A Beginner&#39;s Guide to Package.json Syntax&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; white-space: pre;&quot;&gt;Meta Description&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; white-space: pre;&quot;&gt;Struggling with semantic versioning in package.json? This post explains ^, ~, and other symbols. Learn best practices to avoid breaking changes.&lt;/span&gt;&lt;/p&gt;&lt;h2 data-source-line=&quot;1&quot; id=&quot;understanding-semantic-versioning&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Understanding Semantic Versioning&lt;/h2&gt;&lt;p data-source-line=&quot;3&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Semantic versioning is a standardized way of versioning software releases using a three-part numbering system: MAJOR.MINOR.PATCH. This system helps developers communicate the scope of changes and ensure compatibility between different versions of a software package.&lt;/p&gt;&lt;p class=&quot;highlight-line&quot; data-source-line=&quot;5&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px; position: relative;&quot;&gt;The MAJOR version is incremented when incompatible API changes are introduced. This means that if you update the MAJOR version, there may be breaking changes that require modifications to the code consuming the package.&lt;/p&gt;&lt;div class=&quot;absolute top-0 right-0 select-none floating-action flex flex-col items-end z-[60]&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; align-items: flex-end; display: flex; flex-direction: column; position: absolute; right: 0px; top: 0px; user-select: none; z-index: 60;&quot;&gt;&lt;div class=&quot;flex flex-row items-center&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; display: flex; flex-direction: row;&quot;&gt;&lt;div class=&quot;ml-1 flex&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; display: flex; margin-left: 0.25rem;&quot;&gt;&lt;button class=&quot;btn btn-primary btn-circle btn-xs&quot; style=&quot;--tw-bg-opacity: 1; --tw-border-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; animation: button-pop var(--animation-btn, .25s) ease-out; border-color: initial; border-radius: 9999px; border-style: none; border-width: initial; cursor: pointer; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; font-size: 0.75rem; font-weight: 600; gap: 0.5rem; height: 1.5rem; justify-content: center; line-height: 1em; min-height: 1.5rem; outline-color: hsl(var(--p) / 1); padding: 0px; text-transform: var(--btn-text-case, uppercase); transition-duration: 0.2s; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0, 0, 0.2, 1); user-select: none; width: 1.5rem;&quot;&gt;&lt;svg role=&quot;presentation&quot; style=&quot;height: 0.9rem; width: 0.9rem;&quot; viewbox=&quot;0 0 24 24&quot;&gt;&lt;path d=&quot;M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z&quot; style=&quot;fill: currentcolor;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;7&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The MINOR version is incremented when new backward-compatible functionality is added. Existing code should continue to work as expected with a MINOR version update.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;9&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The PATCH version is incremented for backward-compatible bug fixes. These updates should not introduce new features or break existing functionality.&lt;/p&gt;&lt;p data-source-line=&quot;11&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Semantic versioning is crucial for managing dependencies in software projects because it provides a clear and consistent way to communicate the level of changes in each release. By adhering to this versioning scheme, developers can make informed decisions about when to update dependencies and ensure their applications remain stable and compatible with the latest package versions.&lt;/p&gt;&lt;h2 data-source-line=&quot;13&quot; id=&quot;the-caret-symbol--in-versioning&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;The Caret Symbol (^) in Versioning&lt;/h2&gt;&lt;p class=&quot;&quot; data-source-line=&quot;15&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The caret symbol (^) in semantic versioning is used to specify a range of compatible versions for a dependency. It allows for updates to the minor and patch versions, but not the major version. This means that if your package depends on a library with version 3.4.1, specifying ^3.4.1 in your package.json would allow updates up to version 3.x.x, but not 4.0.0 or higher.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;17&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;For example, if you have a dependency with version ^3.4.1, it can be updated to any version between 3.4.1 and 3.9.9, including 3.5.0, 3.6.2, or 3.9.0, but not 4.0.0 or higher. This is because the caret symbol only allows updates within the same major version, as major version changes often introduce breaking changes.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;19&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The caret symbol is particularly useful when you want to benefit from bug fixes and performance improvements in minor and patch releases, but you don&#39;t want to risk introducing breaking changes from a major version update. It provides a balance between staying up-to-date with non-breaking changes and maintaining stability in your application.&lt;/p&gt;&lt;p data-source-line=&quot;21&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;However, it&#39;s important to note that the behavior of the caret symbol is different when the major version is 0. For example, ^0.3.1 would allow updates up to 0.9.9, but not 1.0.0 or higher. This is because the 0.x.x version range is considered a special case in semantic versioning, indicating a project in the initial development phase, where breaking changes are expected.&lt;/p&gt;&lt;h2 class=&quot;&quot; data-source-line=&quot;23&quot; id=&quot;tilde--vs-caret--versions&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Tilde (~) vs Caret (^) Versions&lt;/h2&gt;&lt;p data-source-line=&quot;25&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The tilde (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~&lt;/code&gt;) and caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) symbols in front of version numbers are used to specify the range of compatible versions that can be installed for a package. While both symbols allow for updates within certain bounds, they differ in their level of flexibility.&lt;/p&gt;&lt;p data-source-line=&quot;27&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The tilde (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~&lt;/code&gt;) is more restrictive and only permits updates to the patch and minor versions. For example,&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~1.2.3&lt;/code&gt;&amp;nbsp;would allow updates from&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;1.2.3&lt;/code&gt;&amp;nbsp;to&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;1.2.9&lt;/code&gt;, but not to&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;1.3.0&lt;/code&gt;. This approach is suitable when you want to receive bug fixes and backwards-compatible features, but avoid breaking changes that could potentially introduce compatibility issues.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;29&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;On the other hand, the caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) is more flexible and allows updates to both minor and patch versions. For instance,&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^1.2.3&lt;/code&gt;&amp;nbsp;would permit updates from&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;1.2.3&lt;/code&gt;&amp;nbsp;to&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;1.9.0&lt;/code&gt;, but not to&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;2.0.0&lt;/code&gt;. This approach is recommended when you want to benefit from new features and improvements while still avoiding major version changes that could break your application.&lt;/p&gt;&lt;p data-source-line=&quot;31&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;When deciding which symbol to use, consider the trade-off between stability and staying up-to-date. If you prioritize stability and want to minimize the risk of introducing breaking changes, the tilde (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~&lt;/code&gt;) is a safer choice. However, if you want to take advantage of new features and improvements more readily, the caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) may be a better option, as long as you are prepared to handle potential compatibility issues that could arise from minor version updates.&lt;/p&gt;&lt;h2 class=&quot;&quot; data-source-line=&quot;33&quot; id=&quot;versions-starting-with-zero&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Versions Starting with Zero&lt;/h2&gt;&lt;p data-source-line=&quot;35&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;When a version number starts with zero (e.g., 0.1.2), it is considered a special case in semantic versioning. Versions with a leading zero indicate that the software is still in the initial development phase and not yet ready for production use. The rules for how the caret symbol (^) is interpreted differ for these versions.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;37&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;With versions starting with zero, the caret (^) will only allow updates that do not modify the left-most non-zero digit. For example, if you have a dependency specified as ^0.1.2, it will accept any version up to 0.2.0, but not 0.3.0 or higher. This behavior is more restrictive than the standard caret behavior for versions without a leading zero.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;39&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The rationale behind this cautious approach is to prevent breaking changes from being introduced during the initial development phase, where the public API is still unstable and subject to significant modifications.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;41&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;It&#39;s essential to be aware of this special handling of versions starting with zero when using the caret symbol (^). If you intend to allow more flexibility in updates, you may need to consider using the tilde (~) or explicitly specifying the desired version range.&lt;/p&gt;&lt;h2 data-source-line=&quot;43&quot; id=&quot;checking-compatibility-with-semver-ranges&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Checking Compatibility with Semver Ranges&lt;/h2&gt;&lt;p data-source-line=&quot;45&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;One of the best ways to understand and work with semantic versioning ranges is to use the&amp;nbsp;&lt;a href=&quot;https://semver.npmjs.com/&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: #0088cc; text-decoration-line: none;&quot;&gt;semver.npmjs.com&lt;/a&gt;&amp;nbsp;tool. This online tool allows you to input a version range and see which versions satisfy that range.&lt;/p&gt;&lt;p data-source-line=&quot;47&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;For example, let&#39;s say you want to check which versions are compatible with the range&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^4.2.3&lt;/code&gt;. You can input this into the tool, and it will show you all the versions that fall within that range, such as:&lt;/p&gt;&lt;pre class=&quot;language-text&quot; data-info=&quot;{data-source-line=&amp;quot;49&amp;quot;}&quot; data-role=&quot;codeBlock&quot; data-source-line=&quot;49&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(245, 245, 245); border-radius: 3px; border: rgb(214, 214, 214); color: #333333; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 16px; hyphens: none; line-height: 1.4; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 0.8em; tab-size: 8; word-break: normal;&quot;&gt;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: 0px 0px transparent; border-radius: 3px; border: 0px; color: black; display: inline; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; line-height: inherit; margin: 0px; max-width: initial; overflow-wrap: normal; overflow: initial; padding: 0px; word-break: normal;&quot;&gt;4.2.3
4.2.4
4.3.0
4.3.1
...
&lt;/code&gt;&lt;/pre&gt;&lt;p data-source-line=&quot;57&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;But it will exclude versions that would represent a major breaking change, like 5.0.0.&lt;/p&gt;&lt;p data-source-line=&quot;59&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;You can also use the tool to test more complex ranges, like&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^4.2.3 || ^5.0.0&lt;/code&gt;. This will show you all versions compatible with either the 4.x or 5.x release lines.&lt;/p&gt;&lt;p data-source-line=&quot;61&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The&amp;nbsp;&lt;a href=&quot;http://semver.npmjs.com/&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: #0088cc; text-decoration-line: none;&quot;&gt;semver.npmjs.com&lt;/a&gt;&amp;nbsp;tool is invaluable for understanding how different version constraints work and what versions they will allow. It can help you avoid accidentally introducing breaking changes and can make it easier to manage dependencies across different parts of your codebase or project.&lt;/p&gt;&lt;h2 data-source-line=&quot;63&quot; id=&quot;real-world-examples&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Real-world Examples&lt;/h2&gt;&lt;p class=&quot;&quot; data-source-line=&quot;65&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;In the Node.js ecosystem, semantic versioning is widely adopted for managing dependencies in projects. For example, when you run&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;npm install react&lt;/code&gt;, you&#39;ll notice the&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;package.json&lt;/code&gt;&amp;nbsp;file includes a line like&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;&quot;react&quot;: &quot;^16.13.1&quot;&lt;/code&gt;. The caret symbol here means that future updates to the React library that are compatible (i.e., without breaking changes) will be allowed up to the next major version (17.0.0).&lt;/p&gt;&lt;p data-source-line=&quot;67&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Similarly, in the Ruby world, the popular Rails framework follows semantic versioning. If you specify a dependency like&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;gem &#39;rails&#39;, &#39;~&amp;gt; 6.0.0&#39;&lt;/code&gt;&amp;nbsp;in your&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;Gemfile&lt;/code&gt;, it will allow patch and minor updates to Rails 6.0.x but not updates to 7.0.0 or higher, thanks to the tilde symbol.&lt;/p&gt;&lt;p data-source-line=&quot;69&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Front-end developers working with WordPress plugins or themes often rely on semantic versioning as well. A dependency like&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;&quot;bootstrap&quot;: &quot;^4.5.3&quot;&lt;/code&gt;&amp;nbsp;in the&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;package.json&lt;/code&gt;&amp;nbsp;file ensures that the project can receive compatible updates to Bootstrap 4.x without inadvertently upgrading to a major version 5.0.0, which may introduce breaking changes.&lt;/p&gt;&lt;p data-source-line=&quot;71&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The popularity of semantic versioning has led to the creation of tools like the&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;npm semver&lt;/code&gt;&amp;nbsp;calculator, which allows developers to input version constraints and test different scenarios. This helps clarify which updates would be allowed or disallowed based on the specified semantic versioning range.&lt;/p&gt;&lt;h2 data-source-line=&quot;73&quot; id=&quot;importance-of-semantic-versioning&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Importance of Semantic Versioning&lt;/h2&gt;&lt;p data-source-line=&quot;75&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Adopting semantic versioning practices in software development projects offers numerous benefits and advantages. By following a standardized convention for versioning, developers can effectively communicate the extent of changes introduced in each release, ensuring compatibility and minimizing the risk of breaking existing functionality.&lt;/p&gt;&lt;p data-source-line=&quot;77&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;One of the primary advantages of semantic versioning is improved maintainability and compatibility. When versions are incremented according to the defined rules, developers can easily understand the potential impact of upgrading to a newer version. This information aids in making informed decisions about whether an upgrade is safe or may introduce breaking changes, thereby reducing the likelihood of introducing bugs or conflicts in the codebase.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;79&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Semantic versioning also facilitates better collaboration and coordination within development teams and across projects that rely on external dependencies. By adhering to a consistent versioning scheme, team members can quickly grasp the significance of version changes and plan their development efforts accordingly. This practice becomes increasingly valuable as projects grow in complexity and involve multiple interdependent components.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;81&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Furthermore, semantic versioning simplifies the process of managing dependencies and their respective versions. Package managers and build tools can leverage the versioning information to automatically resolve compatible versions, reducing the overhead of manual version management and minimizing the risk of version conflicts.&lt;/p&gt;&lt;p data-source-line=&quot;83&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Overall, embracing semantic versioning conventions promotes code stability, enhances collaboration, improves maintainability, and streamlines the dependency management process. These benefits contribute to more efficient and reliable software development practices, ultimately leading to higher-quality products and a better overall experience for both developers and end-users.&lt;/p&gt;&lt;h2 data-source-line=&quot;85&quot; id=&quot;adopting-semantic-versioning&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Adopting Semantic Versioning&lt;/h2&gt;&lt;p data-source-line=&quot;87&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Adopting semantic versioning in your projects can bring numerous benefits, including better communication, easier maintenance, and smoother upgrades. Here are some tips and best practices to help you adopt and consistently follow semantic versioning:&lt;/p&gt;&lt;ol data-source-line=&quot;89&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; list-style-image: initial; list-style-position: initial; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li data-source-line=&quot;89&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p class=&quot;&quot; data-source-line=&quot;89&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Educate Your Team&lt;/strong&gt;: Ensure that everyone involved in the project understands the principles and conventions of semantic versioning. Provide training or documentation to ensure a shared understanding of how versions should be incremented and what each part of the version number represents.&lt;/p&gt;&lt;/li&gt;&lt;li data-source-line=&quot;91&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p data-source-line=&quot;91&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Define Version Policies&lt;/strong&gt;: Establish clear policies and guidelines for when to increment each part of the version number (major, minor, or patch). Outline what constitutes a breaking change, a new feature, or a bug fix, and provide examples to ensure consistent application across the team.&lt;/p&gt;&lt;/li&gt;&lt;li data-source-line=&quot;93&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p data-source-line=&quot;93&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Automate Version Bumping&lt;/strong&gt;: Utilize tools or scripts that automate the process of incrementing version numbers based on the changes made in each release. This can help reduce human errors and ensure consistent versioning practices.&lt;/p&gt;&lt;/li&gt;&lt;li data-source-line=&quot;95&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p data-source-line=&quot;95&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Integrate with CI/CD&lt;/strong&gt;: Incorporate semantic versioning into your continuous integration and continuous deployment (CI/CD) pipelines. Automate version increments, tagging, and package publishing as part of your release process.&lt;/p&gt;&lt;/li&gt;&lt;li data-source-line=&quot;97&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p class=&quot;&quot; data-source-line=&quot;97&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Document Release Notes&lt;/strong&gt;: Maintain detailed release notes that clearly explain the changes introduced in each version. This documentation helps consumers of your project understand what has changed and plan their upgrades accordingly.&lt;/p&gt;&lt;/li&gt;&lt;li data-source-line=&quot;99&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p data-source-line=&quot;99&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Use Semantic Versioning from the Start&lt;/strong&gt;: Adopt semantic versioning from the beginning of your project, even if it&#39;s still in an early stage. Consistent versioning practices from the outset can prevent future headaches and make it easier to maintain version compatibility.&lt;/p&gt;&lt;/li&gt;&lt;li data-source-line=&quot;101&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px;&quot;&gt;&lt;p data-source-line=&quot;101&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: black;&quot;&gt;Review and Audit Regularly&lt;/strong&gt;: Periodically review your versioning practices and ensure they align with semantic versioning principles. Conduct audits to identify any deviations or inconsistencies and take corrective actions as needed.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-source-line=&quot;103&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;By following these best practices, you can effectively adopt and consistently apply semantic versioning in your projects, ensuring better communication, easier maintenance, and smoother upgrades for both your team and the consumers of your project.&lt;/p&gt;&lt;h2 data-source-line=&quot;105&quot; id=&quot;automated-version-management&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Automated Version Management&lt;/h2&gt;&lt;p class=&quot;&quot; data-source-line=&quot;107&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Manually managing versions and updates across multiple dependencies can quickly become a tedious and error-prone task, especially as projects grow in complexity. Fortunately, there are various tools and techniques available to automate version management, ensuring that your project stays up-to-date and compatible with the latest package versions.&lt;/p&gt;&lt;p data-source-line=&quot;109&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;One popular approach is to integrate automated dependency updates into your project&#39;s continuous integration and deployment pipeline. Tools like Renovate, Dependabot, and npm-upgrade can automatically scan your project&#39;s dependencies, check for available updates, and create pull requests with the necessary changes. This streamlines the update process, reducing the risk of human error and ensuring that your project benefits from the latest bug fixes, security patches, and feature enhancements.&lt;/p&gt;&lt;p data-source-line=&quot;111&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Another technique is to leverage version pinning or lockfiles, which allow you to specify and lock down the exact versions of your dependencies. This ensures consistent builds across different environments and makes it easier to roll back changes if necessary. Package managers like npm, Yarn, and Bundler support lockfiles, and tools like npm-shrinkwrap and yarn.lock can help you manage and update these files efficiently.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;113&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Additionally, some package managers and ecosystems offer built-in support for automated version management. For example, the Rust programming language&#39;s package manager, Cargo, automatically updates dependencies to their latest compatible versions when running&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;cargo update&lt;/code&gt;. Similarly, the Elixir programming language&#39;s mix tool supports the&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;mix deps.unlock&lt;/code&gt;&amp;nbsp;command, which updates all dependencies to their latest compatible versions.&lt;/p&gt;&lt;p data-source-line=&quot;115&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;By embracing automated version management, you can streamline your development workflow, reduce the risk of version conflicts and compatibility issues, and ensure that your project stays up-to-date with the latest package releases.&lt;/p&gt;&lt;h2 data-source-line=&quot;117&quot; id=&quot;semantic-versioning-in-different-ecosystems&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 1.75em; line-height: 1.2; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;Semantic Versioning in Different Ecosystems&lt;/h2&gt;&lt;p class=&quot;&quot; data-source-line=&quot;119&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Semantic versioning is a widely adopted convention across various programming languages and package ecosystems. However, there can be slight differences or nuances in how it is implemented and interpreted in different contexts.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;121&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;In the JavaScript ecosystem, with npm as the primary package manager, semantic versioning is strictly followed, and the caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) and tilde (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~&lt;/code&gt;) symbols have specific meanings for managing dependencies. Node.js and its associated tooling heavily rely on semantic versioning for managing packages and their compatibility.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;123&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;In the Python ecosystem, with pip and conda as popular package managers, semantic versioning is also widely used. However, the interpretation of version ranges can vary slightly. For example, in pip, the caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) symbol is not used, and version ranges are specified using different syntax, such as&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;&amp;gt;=1.2.3,&amp;lt;1.3.0&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;&quot; data-source-line=&quot;125&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The Ruby ecosystem, with RubyGems as the package manager, follows semantic versioning conventions closely. The caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) and tilde (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~&lt;/code&gt;) symbols are used similarly to the JavaScript ecosystem for specifying version ranges.&lt;/p&gt;&lt;p data-source-line=&quot;127&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;In the Java ecosystem, with Maven and Gradle as popular build tools and package managers, semantic versioning is also widely adopted. However, the syntax for specifying version ranges can be different. For example, in Maven, the caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) symbol is not used, and version ranges are specified using different syntax, such as&amp;nbsp;&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;[1.2.3,1.3.0)&lt;/code&gt;.&lt;/p&gt;&lt;p data-source-line=&quot;129&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The .NET ecosystem, with NuGet as the package manager, also embraces semantic versioning. The caret (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;^&lt;/code&gt;) and tilde (&lt;code style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f0f0f0; border-radius: 3px; color: black; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.85em; padding: 0.2em 0px;&quot;&gt;~&lt;/code&gt;) symbols are used similarly to the JavaScript ecosystem for specifying version ranges.&lt;/p&gt;&lt;p data-source-line=&quot;131&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; color: #333333; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;Segoe UI&amp;quot;, Arial, freesans, sans-serif; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;It&#39;s important to note that while the core principles of semantic versioning are consistent across ecosystems, the specific syntax and implementation details can vary. Developers should refer to the documentation and best practices of their respective programming language and package manager to ensure they are correctly managing dependencies and versioning their projects.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/4330756482969656165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/4330756482969656165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/4330756482969656165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/4330756482969656165'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2024/10/write-blog-posts-using-ai-tools.html' title='Write Blog Posts using AI Tools'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-2908935474724030651</id><published>2024-10-28T10:56:00.005+05:30</published><updated>2024-10-28T10:56:31.824+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Best"/><category scheme="http://www.blogger.com/atom/ns#" term="dependencies"/><category scheme="http://www.blogger.com/atom/ns#" term="example"/><category scheme="http://www.blogger.com/atom/ns#" term="File"/><category scheme="http://www.blogger.com/atom/ns#" term="pip"/><category scheme="http://www.blogger.com/atom/ns#" term="practices"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="requirements"/><category scheme="http://www.blogger.com/atom/ns#" term="symbols"/><category scheme="http://www.blogger.com/atom/ns#" term="Usage"/><category scheme="http://www.blogger.com/atom/ns#" term="versioning"/><title type='text'>Understanding Python Dependency Versioning Symbols</title><content type='html'>&lt;p&gt;Hi all,&lt;/p&gt;&lt;p&gt;It&#39;s been so confusing for me when the versions are with different operators.&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px;&quot;&gt;Introduction:&lt;/strong&gt;&lt;span style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px;&quot;&gt;Managing dependencies in Python is crucial for ensuring your project runs smoothly across different environments. Dependencies, or libraries your project relies on, often need specific versions to maintain compatibility. This blog post will walk you through the symbols used in Python versioning and how they work to keep your project stable and functional.&lt;/span&gt;&lt;/p&gt;&lt;h3 class=&quot;code-line code-active-line&quot; data-line=&quot;7&quot; dir=&quot;auto&quot; id=&quot;what-are-python-dependencies&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; position: relative;&quot;&gt;What Are Python Dependencies?&lt;/h3&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;9&quot; dir=&quot;auto&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 16px; margin-top: 0px; position: relative;&quot;&gt;In Python projects, dependencies are essential libraries that your project needs to function. They’re often listed in files like&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;requirements.txt&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;Pipfile&lt;/code&gt;. To keep these dependencies compatible, Python uses specific symbols in versioning to define acceptable package versions. Let&#39;s dive into each symbol to see how they impact dependency management.&lt;/p&gt;&lt;h3 class=&quot;code-line&quot; data-line=&quot;13&quot; dir=&quot;auto&quot; id=&quot;key-python-versioning-symbols&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; position: relative;&quot;&gt;Key Python Versioning Symbols&lt;/h3&gt;&lt;ol class=&quot;code-line&quot; data-line=&quot;15&quot; dir=&quot;auto&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;15&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;15&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Exact Version (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;==&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;16&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;16&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name==1.0.0&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;17&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Installs only the specified version. For example,&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;numpy==1.18.5&lt;/code&gt;&amp;nbsp;installs version&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.18.5&lt;/code&gt;&amp;nbsp;of NumPy.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;18&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Strict requirements when a specific version is necessary for compatibility.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;20&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;20&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Minimum Version (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;&amp;gt;=&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;21&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;21&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name&amp;gt;=1.0.0&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;22&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Installs the specified version or newer. Example:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;Django&amp;gt;=3.1.0&lt;/code&gt;&amp;nbsp;installs any version of Django from&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;3.1.0&lt;/code&gt;&amp;nbsp;onward.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;23&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Ensuring updates without breaking compatibility with older versions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;25&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;25&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Maximum Version (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;&amp;lt;=&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;26&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;26&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name&amp;lt;=1.0.0&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;27&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Installs only the specified version or older. For example,&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;pandas&amp;lt;=1.2.3&lt;/code&gt;&amp;nbsp;won’t install any version beyond&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.2.3&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;28&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Avoiding potential incompatibilities with newer versions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;30&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;30&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Range of Versions (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;&amp;gt;=&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;&amp;lt;=&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;31&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;31&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name&amp;gt;=1.0.0,&amp;lt;=2.0.0&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;32&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Installs a version within the specified range. Example:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;Flask&amp;gt;=1.1.0,&amp;lt;=2.0.1&lt;/code&gt;&amp;nbsp;includes versions between&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.1.0&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;2.0.1&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;33&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Ensuring some flexibility while staying within a compatible version range.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;35&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;35&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Exclude Specific Versions (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;!=&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;36&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;36&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name!=1.0.1&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;37&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Excludes a particular version. Example:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;requests!=2.21.0&lt;/code&gt;&amp;nbsp;installs any version of&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;requests&lt;/code&gt;&amp;nbsp;except&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;2.21.0&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;38&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Avoiding known buggy or incompatible versions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;40&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;40&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Compatible Release (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;~=&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;^&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;41&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;41&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name~=1.4&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name^1.4.0&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;42&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Installs versions up to, but not including, the next major version. Example:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;pandas~=1.2.3&lt;/code&gt;&amp;nbsp;includes versions like&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.2.4&lt;/code&gt;&amp;nbsp;but not&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.3.0&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;43&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Keeping compatibility within a minor version range.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;45&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;45&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Pre-release and Development Versions (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;&amp;lt;&lt;/code&gt;,&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;&amp;gt;&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;46&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;46&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;package_name&amp;lt;2.0.0&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;47&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;: Allows installation of pre-release versions. Example:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;scipy&amp;lt;2.0.0&lt;/code&gt;&amp;nbsp;might include a development version like&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.5.0.dev&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;48&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Testing experimental versions, not typically used in production.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 class=&quot;code-line&quot; data-line=&quot;52&quot; dir=&quot;auto&quot; id=&quot;example-usage-in-requirements-files&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; position: relative;&quot;&gt;Example Usage in Requirements Files&lt;/h3&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;54&quot; dir=&quot;auto&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 16px; margin-top: 0px; position: relative;&quot;&gt;Here are some example scenarios showing how to use these symbols:&lt;/p&gt;&lt;ul class=&quot;code-line&quot; data-line=&quot;56&quot; dir=&quot;auto&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;56&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Single Requirement&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;flask==2.0.1&lt;/code&gt;&amp;nbsp;installs only version&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;2.0.1&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;57&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Multiple Requirements&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;requests&amp;gt;=2.20.0,&amp;lt;3.0.0&lt;/code&gt;&amp;nbsp;installs versions from&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;2.20.0&lt;/code&gt;&amp;nbsp;up to, but not including,&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;3.0.0&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;58&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;strong&gt;Combined Exclusions&lt;/strong&gt;:&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;scipy&amp;gt;=1.5.2,!=1.6.0,!=1.7.1&lt;/code&gt;&amp;nbsp;installs from&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.5.2&lt;/code&gt;&amp;nbsp;onwards but excludes&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.6.0&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;1.7.1&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;code-line&quot; data-line=&quot;62&quot; dir=&quot;auto&quot; id=&quot;best-practices&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; position: relative;&quot;&gt;Best Practices&lt;/h3&gt;&lt;ol class=&quot;code-line&quot; data-line=&quot;64&quot; dir=&quot;auto&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;64&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;64&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Avoid Exact Versioning (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;==&lt;/code&gt;) in Libraries&lt;/strong&gt;: Using&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;==&lt;/code&gt;&amp;nbsp;restricts flexibility for future projects, so avoid it in libraries that might be used elsewhere.&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;66&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;66&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Use Compatible Release (&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;~=&lt;/code&gt;) in Production&lt;/strong&gt;: This symbol allows updates while maintaining compatibility.&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;68&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;68&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Test Development Versions Carefully&lt;/strong&gt;: Isolate pre-release versions in a separate virtual environment for testing purposes.&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;code-line&quot; data-line=&quot;70&quot; dir=&quot;auto&quot; style=&quot;position: relative;&quot;&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;70&quot; dir=&quot;auto&quot; style=&quot;margin-bottom: 0.7em; margin-top: 0px; position: relative;&quot;&gt;&lt;strong&gt;Regularly Update Dependencies&lt;/strong&gt;: Keeping dependencies up to date helps with security and performance. Use&amp;nbsp;&lt;code style=&quot;border-radius: 4px; font-family: var(--vscode-editor-font-family, &amp;quot;SF Mono&amp;quot;, Monaco, Menlo, Consolas, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace); font-size: 1em; line-height: 1.357em; padding: 1px 3px;&quot;&gt;pip&lt;/code&gt;&amp;nbsp;commands to check for updates.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 class=&quot;code-line&quot; data-line=&quot;74&quot; dir=&quot;auto&quot; id=&quot;conclusion&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; position: relative;&quot;&gt;References&lt;/h3&gt;&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://docs.npmjs.com/about-semantic-versioning&quot; target=&quot;_blank&quot;&gt;Semantic versioning&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://semver.npmjs.com/&quot; target=&quot;_blank&quot;&gt;Semantic versioning tool&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://elliott-king.github.io/2020/08/package_json_symbols/&quot;&gt;https://elliott-king.github.io/2020/08/package_json_symbols/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class=&quot;code-line&quot; data-line=&quot;74&quot; dir=&quot;auto&quot; id=&quot;conclusion&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 1.25em; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; position: relative;&quot;&gt;Conclusion&lt;/h3&gt;&lt;p class=&quot;code-line&quot; data-line=&quot;76&quot; dir=&quot;auto&quot; style=&quot;font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe WPC&amp;quot;, &amp;quot;Segoe UI&amp;quot;, system-ui, Ubuntu, &amp;quot;Droid Sans&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 16px; margin-top: 0px; position: relative;&quot;&gt;Understanding Python dependency versioning symbols can be the difference between a stable environment and one filled with compatibility issues. Following these guidelines will help you create reliable, well-maintained Python environments.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/2908935474724030651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/2908935474724030651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/2908935474724030651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/2908935474724030651'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2024/10/understanding-python-dependency.html' title='Understanding Python Dependency Versioning Symbols'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-895586039804260909</id><published>2024-09-23T21:43:00.003+05:30</published><updated>2024-09-23T21:43:24.267+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Audio"/><category scheme="http://www.blogger.com/atom/ns#" term="background"/><category scheme="http://www.blogger.com/atom/ns#" term="Free"/><category scheme="http://www.blogger.com/atom/ns#" term="music"/><category scheme="http://www.blogger.com/atom/ns#" term="Online"/><category scheme="http://www.blogger.com/atom/ns#" term="separate"/><category scheme="http://www.blogger.com/atom/ns#" term="singer"/><category scheme="http://www.blogger.com/atom/ns#" term="song"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="vocal"/><category scheme="http://www.blogger.com/atom/ns#" term="Voice"/><category scheme="http://www.blogger.com/atom/ns#" term="Website"/><title type='text'>Online free website tools to separate song audio music background and vocals or voice</title><content type='html'>&lt;p&gt;Hi all,&lt;/p&gt;&lt;p&gt;There might be several instances in which you might think you want to have only a song background or vocals (voice) to try your remix skills.&lt;/p&gt;&lt;p&gt;Here are the online tools&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://vocalremover.media.io/app/&quot;&gt;Ai Vocal Remover Free Online | Media.io&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://vocalremover.org/&quot;&gt;Vocal Remover and Isolation [AI]&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h4&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;In both applications, you need to upload the song.&lt;/li&gt;&lt;li&gt;Once it&#39;s uploaded after processing, you will get 2 music files.&lt;/li&gt;&lt;li&gt;You can play, and once you are happy with the result, you can download it to the local system.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to drop your comments and feedback to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/895586039804260909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/895586039804260909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/895586039804260909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/895586039804260909'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2024/09/online-free-website-tools-to-separate.html' title='Online free website tools to separate song audio music background and vocals or voice'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-7906591896545310214</id><published>2024-09-05T16:00:00.000+05:30</published><updated>2024-09-05T16:00:58.674+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Auto"/><category scheme="http://www.blogger.com/atom/ns#" term="branch"/><category scheme="http://www.blogger.com/atom/ns#" term="Deploy"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="github"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Index"/><category scheme="http://www.blogger.com/atom/ns#" term="Page"/><category scheme="http://www.blogger.com/atom/ns#" term="pr"/><category scheme="http://www.blogger.com/atom/ns#" term="Source"/><title type='text'>Github pages not deploying of a static website</title><content type='html'>&lt;p&gt;&amp;nbsp;Hello all,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It&#39;s been a long time since I have posted a blog.&lt;/p&gt;&lt;p&gt;But I am trying to come up with the passion of rewriting the blogs.&lt;/p&gt;&lt;p&gt;Here are the recent issues and solutions that I have faced.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Problem&lt;/h3&gt;&lt;p&gt;I have my website &lt;a href=&quot;https://pillisureshraju.in/&quot;&gt;https://pillisureshraju.in/&lt;/a&gt; hosted on GitHub using GitHub Pages.&lt;/p&gt;&lt;p&gt;I have recently updated one of the pages&amp;nbsp;&lt;a href=&quot;https://pillisureshraju.in/cv&quot;&gt;https://pillisureshraju.in/cv&lt;/a&gt;&amp;nbsp;but the GitHub deployment is not triggered.&lt;/p&gt;&lt;p&gt;I have searched and configured the GitHub with the environment and selected the branch for auto-deployment.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Environment&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh4cruvC5rzyYrJzRHiNui0WCZuUWDXqMqnyb9Uu7sB9hpVRw2AywGSHomHLnaUR0ajgUH9nyWtzhJcUTL8YLkCCIQ_emcXl2wDwi-BMDTeklzb7geTYw6HqQpKpcLwEfhzOoxH1D2zPC6OBEVjyGJciCjRFoG8Hg53vtGEl2VLMtWi2stjk_Y7u0_HMfJq&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1740&quot; data-original-width=&quot;1570&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh4cruvC5rzyYrJzRHiNui0WCZuUWDXqMqnyb9Uu7sB9hpVRw2AywGSHomHLnaUR0ajgUH9nyWtzhJcUTL8YLkCCIQ_emcXl2wDwi-BMDTeklzb7geTYw6HqQpKpcLwEfhzOoxH1D2zPC6OBEVjyGJciCjRFoG8Hg53vtGEl2VLMtWi2stjk_Y7u0_HMfJq=w579-h640&quot; width=&quot;579&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Solution&lt;/h3&gt;Update index.html and commit to GitHub with a PR to master.&lt;p&gt;&lt;/p&gt;&lt;p&gt;Finally, I am able to see that the deployment is auto-triggered, and the website is live now.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjdA3SWogmTtTUq0AJLZy4PKxdrWQhZHPFUUmh1Ghl_a2u-OISZijSw2PT6oWZ7yj6f61p9lhedHRfiIA9Inq5RSWW-oFD7uI1zdwnGBPawiiH5y1F7yNn4V-kZjGA4EsbpaBmgC05VaVfoIJexoFCmgrjEpC7HmyGTI4r10NTwR_AwpTuQphLuL1pyRaUW&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;218&quot; data-original-width=&quot;446&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjdA3SWogmTtTUq0AJLZy4PKxdrWQhZHPFUUmh1Ghl_a2u-OISZijSw2PT6oWZ7yj6f61p9lhedHRfiIA9Inq5RSWW-oFD7uI1zdwnGBPawiiH5y1F7yNn4V-kZjGA4EsbpaBmgC05VaVfoIJexoFCmgrjEpC7HmyGTI4r10NTwR_AwpTuQphLuL1pyRaUW&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to reach out on psrdotcom@gmail.com or leave a comment on this blog.&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/7906591896545310214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/7906591896545310214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7906591896545310214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7906591896545310214'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2024/09/github-pages-not-deploying-of-static.html' title='Github pages not deploying of a static website'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh4cruvC5rzyYrJzRHiNui0WCZuUWDXqMqnyb9Uu7sB9hpVRw2AywGSHomHLnaUR0ajgUH9nyWtzhJcUTL8YLkCCIQ_emcXl2wDwi-BMDTeklzb7geTYw6HqQpKpcLwEfhzOoxH1D2zPC6OBEVjyGJciCjRFoG8Hg53vtGEl2VLMtWi2stjk_Y7u0_HMfJq=s72-w579-h640-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-3410404359682213438</id><published>2023-05-23T14:46:00.004+05:30</published><updated>2023-05-23T15:01:09.996+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="admin"/><category scheme="http://www.blogger.com/atom/ns#" term="bat"/><category scheme="http://www.blogger.com/atom/ns#" term="Change"/><category scheme="http://www.blogger.com/atom/ns#" term="cmd"/><category scheme="http://www.blogger.com/atom/ns#" term="Command"/><category scheme="http://www.blogger.com/atom/ns#" term="Default"/><category scheme="http://www.blogger.com/atom/ns#" term="Directory"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="privileges"/><category scheme="http://www.blogger.com/atom/ns#" term="Prompt"/><category scheme="http://www.blogger.com/atom/ns#" term="ps"/><category scheme="http://www.blogger.com/atom/ns#" term="Run"/><category scheme="http://www.blogger.com/atom/ns#" term="Script"/><category scheme="http://www.blogger.com/atom/ns#" term="Shortcut"/><category scheme="http://www.blogger.com/atom/ns#" term="system32"/><category scheme="http://www.blogger.com/atom/ns#" term="uac"/><category scheme="http://www.blogger.com/atom/ns#" term="Unable"/><category scheme="http://www.blogger.com/atom/ns#" term="WIndows"/><title type='text'>Change default directory for Windows command prompt and Powershell when running with admin privileges</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;It&#39;s been a while since I posted things.&lt;/p&gt;&lt;p&gt;Here is my previous post where the non-admin user changes the default directory for the command prompt and PowerShell.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://psrdotcom.blogspot.com/2022/03/change-default-directory-of-windows.html&quot;&gt;https://psrdotcom.blogspot.com/2022/03/change-default-directory-of-windows.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;But in this post, I will be&amp;nbsp;&lt;span style=&quot;caret-color: rgb(0, 0, 0); font-family: -webkit-standard;&quot;&gt;explaining about&amp;nbsp;&lt;/span&gt;running the command prompt / powershell with admin rights and setting the default directory. Because, when you are running with admin privileges, it by default goes to the SYSTEM32 folder of Windows.&lt;/p&gt;&lt;h3 style=&quot;background-color: white; margin: 0px; position: relative; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Environment&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;I use the command prompt and PowerShell, which are pinned to the taskbar of Windows.&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;background-color: white; margin: 0px; position: relative;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Run the application with the admin rights&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Right-click on the application icon -&amp;gt; click on Properties&lt;/li&gt;&lt;li&gt;Go to the &quot;Compatibility&quot; tab&lt;/li&gt;&lt;li&gt;Check &quot;Run this program as administrator&quot;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;background-color: white; margin: 0px; position: relative; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Run the shortcut with the admin rights&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Right-click on the shortcut icon -&amp;gt; click on Properties&lt;/li&gt;&lt;li&gt;Go to the &quot;Shortcut&quot; tab&lt;/li&gt;&lt;li&gt;Click on the &quot;Advanced&quot; button&lt;/li&gt;&lt;li&gt;Check &quot;Run this program as administrator&quot;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;background-color: white; margin: 0px; position: relative; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Change the command prompt default directory&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;We need to have a .bat file with the following content&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;@echo off&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;cd &amp;lt;default_directory&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Now use the .bat file in the shortcut properties&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Right-click on the shortcut icon -&amp;gt; click on Properties&lt;/li&gt;&lt;li&gt;Go to the &quot;Shortcut&quot; tab&lt;/li&gt;&lt;li&gt;In the &quot;Target&quot; field append the below text&lt;/li&gt;&lt;ul&gt;&lt;li&gt;/k &quot;batfile_dirpath\batfile.bat&quot;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;background-color: white; margin: 0px; position: relative;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Change the PowerShell default directory&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Right-click on the shortcut icon -&amp;gt; click on Properties&lt;/li&gt;&lt;li&gt;Go to the &quot;Shortcut&quot; tab&lt;/li&gt;&lt;li&gt;In the &quot;Target&quot; field append the below context after powershell.exe&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;blockquote&gt;-NoExit -command &quot;&amp;amp; {Set-Location &amp;lt;default_directory&amp;gt;}&quot;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Click on &quot;OK&quot;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Hope, this helps you to reduce the frequent directory changes in the command prompt and PowerShell.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to provide your valuable feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/3410404359682213438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/3410404359682213438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3410404359682213438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3410404359682213438'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2023/05/change-default-directory-for-windows.html' title='Change default directory for Windows command prompt and Powershell when running with admin privileges'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-1139450918749158031</id><published>2022-06-11T02:04:00.010+05:30</published><updated>2022-06-11T15:31:00.532+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="access"/><category scheme="http://www.blogger.com/atom/ns#" term="api"/><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><category scheme="http://www.blogger.com/atom/ns#" term="backend"/><category scheme="http://www.blogger.com/atom/ns#" term="certbot"/><category scheme="http://www.blogger.com/atom/ns#" term="certificate"/><category scheme="http://www.blogger.com/atom/ns#" term="ec2"/><category scheme="http://www.blogger.com/atom/ns#" term="Free"/><category scheme="http://www.blogger.com/atom/ns#" term="https"/><category scheme="http://www.blogger.com/atom/ns#" term="letsencrypt"/><category scheme="http://www.blogger.com/atom/ns#" term="nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="Node"/><category scheme="http://www.blogger.com/atom/ns#" term="putty"/><category scheme="http://www.blogger.com/atom/ns#" term="remote"/><category scheme="http://www.blogger.com/atom/ns#" term="rest"/><category scheme="http://www.blogger.com/atom/ns#" term="Secure"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><category scheme="http://www.blogger.com/atom/ns#" term="SSH"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Configure a API Backend Server with custom domain on Amazon Web Services (AWS) EC2 Ubuntu with NGINX and Certbot SSL</title><content type='html'>&lt;p&gt;Hi all,&lt;/p&gt;&lt;p&gt;Build your own API backend server on AWS free-tier with SSL.&lt;/p&gt;&lt;p&gt;The below steps with reference links will provide detailed information of each step.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://console.aws.amazon.com/console/home&quot; target=&quot;_blank&quot;&gt;AWS account - Free-tier&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html&quot; target=&quot;_blank&quot;&gt;Create EC2 Ubuntu&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html?icmpid=docs_ec2_console&quot; target=&quot;_blank&quot;&gt;Connect to Ubuntu from your local using SSH/Putty&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04&quot; target=&quot;_blank&quot;&gt;Install NodeJS&lt;/a&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Open terminal&lt;/li&gt;&lt;li&gt;curl -fsSL http://deb.nodesource.com/setup_lts.x | sudo -E bash -&lt;/li&gt;&lt;li&gt;sudo apt update&lt;/li&gt;&lt;li&gt;sudo apt install nodejs //installs latest LTS nodejs&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-20-04&quot; target=&quot;_blank&quot;&gt;Create a sample node server&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-20-04#step-3-installing-pm2&quot; target=&quot;_blank&quot;&gt;Install and configure node server process manager&lt;/a&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;sudo npm install -g pm2@latest&lt;/li&gt;&lt;li&gt;Navigate to nodejs server folder&lt;/li&gt;&lt;li&gt;pm2 start &amp;lt;filename&amp;gt;&lt;/li&gt;&lt;li&gt;pm2 startup systemd&lt;/li&gt;&lt;li&gt;pm2 save&lt;/li&gt;&lt;li&gt;pm2 list // List all the nodejs apps with status&lt;/li&gt;&lt;li&gt;pm2 stop/restart/start app_name/id // Actions of nodejs servers&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04&quot; target=&quot;_blank&quot;&gt;Install Nginx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Configure your domain DNS records to map to AWS EC2 public/elastic IP address&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-22-04&quot; target=&quot;_blank&quot;&gt;Secure Nginx with SSL certs&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Hope the above information is useful to set up the environment and play with your backend server.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to send your feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/1139450918749158031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/1139450918749158031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/1139450918749158031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/1139450918749158031'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/06/configure-api-backend-server-with.html' title='Configure a API Backend Server with custom domain on Amazon Web Services (AWS) EC2 Ubuntu with NGINX and Certbot SSL'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-3944411584466204509</id><published>2022-06-09T01:08:00.002+05:30</published><updated>2022-06-09T01:08:30.913+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="90"/><category scheme="http://www.blogger.com/atom/ns#" term="certificate"/><category scheme="http://www.blogger.com/atom/ns#" term="Command"/><category scheme="http://www.blogger.com/atom/ns#" term="days"/><category scheme="http://www.blogger.com/atom/ns#" term="domain"/><category scheme="http://www.blogger.com/atom/ns#" term="Free"/><category scheme="http://www.blogger.com/atom/ns#" term="https"/><category scheme="http://www.blogger.com/atom/ns#" term="Key"/><category scheme="http://www.blogger.com/atom/ns#" term="letsencrypt"/><category scheme="http://www.blogger.com/atom/ns#" term="Line"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="MAC"/><category scheme="http://www.blogger.com/atom/ns#" term="openssl"/><category scheme="http://www.blogger.com/atom/ns#" term="OS"/><category scheme="http://www.blogger.com/atom/ns#" term="pem"/><category scheme="http://www.blogger.com/atom/ns#" term="private"/><category scheme="http://www.blogger.com/atom/ns#" term="Public"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Generate Free SSL HTTPS Certificates with 90 days validity using letsencrypt</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;As discussed in my earlier blog,&amp;nbsp;&lt;a href=&quot;https://psrdotcom.blogspot.com/2021/06/generate-free-ssl-certificate-using.html&quot;&gt;Generate Free SSL Certificate using ZeroSSL&lt;/a&gt;&amp;nbsp;where the limitation of one free certificate on ZeroSSL can be eliminated using&amp;nbsp;&lt;a href=&quot;https://gethttpsforfree.com&quot;&gt;Get HTTPS for free!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This process includes the following prerequisites and procedures.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Note: This process is not for beginners or production usage scenarios. Use this process if you are knowledgeable about certificate generation.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Prerequisites&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;OpenSSL command line&lt;/li&gt;&lt;li&gt;[Li]nix / Mac OS&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Open the URL&amp;nbsp;&lt;a href=&quot;https://gethttpsforfree.com&quot;&gt;https://gethttpsforfree.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;It has 5 steps&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Account Info&lt;/li&gt;&lt;li&gt;Certificate Signing Request&lt;/li&gt;&lt;li&gt;Sign API Requests&lt;/li&gt;&lt;li&gt;Verify Ownership&lt;/li&gt;&lt;li&gt;Install Certificate&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In each step, some commands or processes need to be followed to get the free SSL certificate.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Account Info&lt;/li&gt;&lt;ol&gt;&lt;li&gt;In this step, we will be providing the email and public key.&lt;/li&gt;&lt;li&gt;Keep the generated private key security in your system.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/b&gt;&amp;nbsp;If you are unsure about the public key generation commands, click on the &lt;b&gt;&lt;u&gt;&quot;how do I generate this?&quot;&lt;/u&gt;&lt;/b&gt; link, which is available over the public key input textbox.&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;li&gt;Certificate Signing Request (CSR)&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Generate the CSR for the required domains&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/b&gt; You can generate the CSR for wildcard certificates and www subdomain with the same command&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Try to follow the same format, including the line feeds mentioned below.&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;&lt;pre style=&quot;background-color: white; box-sizing: border-box; caret-color: rgb(0, 0, 0); margin-bottom: 5px; margin-top: 5px; overflow: auto; padding: 5px; text-size-adjust: auto;&quot;&gt;#change &quot;/etc/ssl/openssl.cnf&quot; as needed:
    #  Debian: /etc/ssl/openssl.cnf
    #  RHEL and CentOS: /etc/pki/tls/openssl.cnf
    #  Mac OSX: /System/Library/OpenSSL/openssl.cnf

    openssl req -new -sha256 -key domain.key -subj &quot;/&quot; \
      -reqexts SAN -config &amp;lt;(cat /etc/ssl/openssl.cnf \
      &amp;lt;(printf &quot;\n[SAN]\nsubjectAltName=DNS:foo.com,DNS:www.foo.com&quot;))&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style=&quot;background-color: white; caret-color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;Sign API Requests&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Sign all the requests with the private key&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/b&gt;&amp;nbsp;You need to copy the command and execute it on your PC/Mac terminal, and the result needs to be pasted on the web page.&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Verify Ownership&lt;/li&gt;&lt;ol&gt;&lt;li&gt;In this step, you need to prove your domain ownership&lt;/li&gt;&lt;li&gt;You will be given 3 options&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Python server&lt;/li&gt;&lt;li&gt;file-based&lt;/li&gt;&lt;li&gt;DNS record (I&#39;ve used this option)&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Update the DNS records with new TXT entries, and use the &lt;a href=&quot;https://toolbox.googleapps.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;online dig&amp;nbsp;tool&lt;/a&gt; to make sure the records are visible.&lt;/li&gt;&lt;li&gt;After we verify the availability of the records, you need to click on the respective buttons on the web page.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;li&gt;Repeat the same steps for each domain on CSR (www and any sub-domains).&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Install Certificate&lt;/li&gt;&lt;ol&gt;&lt;li&gt;You will be able to receive your certificate in &quot;&lt;b&gt;chained.pem&quot;&lt;/b&gt; format&lt;/li&gt;&lt;li&gt;Copy and paste the first certificate section (e.g. the first &quot;-----BEGIN CERTIFICATE-----&quot; section) into a text file named &quot;domain.crt&quot;.&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-bottom: 10px;&quot;&gt;Copy and paste the second certificate section (e.g. the second &quot;-----BEGIN CERTIFICATE-----&quot; section) into a text file named &quot;intermediate.pem&quot;.&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/b&gt; Expand the&amp;nbsp;&lt;b&gt;&quot;how do I install this?&quot;&lt;/b&gt; link for quick help.&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div&gt;Hope this will help you to generate free SSL for your websites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Request you to send your valuable feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/3944411584466204509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/3944411584466204509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3944411584466204509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3944411584466204509'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/06/generate-free-ssl-https-certificates.html' title='Generate Free SSL HTTPS Certificates with 90 days validity using letsencrypt'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-2595971129700702110</id><published>2022-04-29T14:36:00.004+05:30</published><updated>2022-04-29T14:36:44.238+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="access"/><category scheme="http://www.blogger.com/atom/ns#" term="Account"/><category scheme="http://www.blogger.com/atom/ns#" term="consume"/><category scheme="http://www.blogger.com/atom/ns#" term="github"/><category scheme="http://www.blogger.com/atom/ns#" term="Install"/><category scheme="http://www.blogger.com/atom/ns#" term="JS"/><category scheme="http://www.blogger.com/atom/ns#" term="Manager"/><category scheme="http://www.blogger.com/atom/ns#" term="Node"/><category scheme="http://www.blogger.com/atom/ns#" term="npm"/><category scheme="http://www.blogger.com/atom/ns#" term="package"/><category scheme="http://www.blogger.com/atom/ns#" term="Packages"/><category scheme="http://www.blogger.com/atom/ns#" term="personal"/><category scheme="http://www.blogger.com/atom/ns#" term="Publish"/><category scheme="http://www.blogger.com/atom/ns#" term="token"/><title type='text'>Publish and Consume NPM Packages using GitHub Package Manager</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi folks,&lt;/p&gt;&lt;p&gt;We are used to publishing the npm packages on &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;npmjs.com&lt;/a&gt;. Today, I will show how we can publish the npm packages to GitHub and the steps to use those packages.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;1. Publishing Packages&lt;/h2&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Prerequisites&lt;/h3&gt;&lt;p&gt;We need to have an account with &lt;a href=&quot;https://github.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;&lt;p&gt;JavaScript native/framework based project with package.json&lt;/p&gt;&lt;p&gt;Add the .npmrc file to your project with the following syntax. Change the OWNER value to your GitHub account or organization name.&lt;/p&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;@OWNER:&lt;span style=&quot;color: #569cd6;&quot;&gt;registry&lt;/span&gt;=https://npm.pkg.github.com&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Publishing Process to GitHub&lt;/h3&gt;&lt;p&gt;Create personal access token using the following steps&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Login to GitHub&lt;/li&gt;&lt;li&gt;Go to Settings&lt;/li&gt;&lt;li&gt;Navigate to &quot;Developer Settings&quot; -&amp;gt; &quot;personal access tokens&quot;&lt;/li&gt;&lt;li&gt;Generate token with&amp;nbsp;&lt;b&gt;write:packages&lt;/b&gt;&amp;nbsp;access permissions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh2n1MTXdKcDRZ0hHqyaf2PoTg2rvXrj9AF7jsinCgSI2eznk1zbXuBdreK88_QFZakVqCfW70mwkUjt1kkriKmUFRUmhxDCEVIanNLxJ2ZBwoHZBXnDjIJuHEIV7o2nqLU4n9ksHoO-VUtHWlzacP_HNyf8UYFIPEznRdzTeSgMCIPsW9Wql37B_JYPQ&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;152&quot; data-original-width=&quot;1060&quot; height=&quot;46&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh2n1MTXdKcDRZ0hHqyaf2PoTg2rvXrj9AF7jsinCgSI2eznk1zbXuBdreK88_QFZakVqCfW70mwkUjt1kkriKmUFRUmhxDCEVIanNLxJ2ZBwoHZBXnDjIJuHEIV7o2nqLU4n9ksHoO-VUtHWlzacP_HNyf8UYFIPEznRdzTeSgMCIPsW9Wql37B_JYPQ&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Open terminal in the project folder&lt;/li&gt;&lt;li&gt;Execute the command to login&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;npm login --scope=@OWNER --registry=https://npm.pkg.github.com&lt;/li&gt;&lt;/blockquote&gt;&lt;li&gt;When prompted,&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Username:&amp;nbsp;GitHub username&lt;/li&gt;&lt;li&gt;Password: Personal access token&lt;/li&gt;&lt;li&gt;Public e-mail: Your email address&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Enter the following command to publish the package&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;npm publish&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;2. Consume/Installing the packages&lt;/h2&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Prerequisites&lt;/h3&gt;&lt;p&gt;We need to have an account with&amp;nbsp;&lt;a href=&quot;https://github.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Installation&lt;/h3&gt;&lt;div&gt;&lt;p&gt;Add the .npmrc file to your project with the following syntax. Change the OWNER value to your GitHub author or organization name.&lt;/p&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;@OWNER:&lt;span style=&quot;color: #569cd6;&quot;&gt;registry&lt;/span&gt;=https://npm.pkg.github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter the full name @OWNER/package-name-version in dependencies in package.json&lt;/div&gt;&lt;div&gt;Install the dependencies&lt;/div&gt;&lt;div&gt;npm install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note: If the organization is asking for authorization of personal access token, then you need to authorize from the personal access token section against the token for the respective organization.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope you will make use of GitHub for publishing the packages and consuming them with ease.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Request you to send your feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/2595971129700702110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/2595971129700702110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/2595971129700702110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/2595971129700702110'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/04/publish-and-consume-npm-packages-using.html' title='Publish and Consume NPM Packages using GitHub Package Manager'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh2n1MTXdKcDRZ0hHqyaf2PoTg2rvXrj9AF7jsinCgSI2eznk1zbXuBdreK88_QFZakVqCfW70mwkUjt1kkriKmUFRUmhxDCEVIanNLxJ2ZBwoHZBXnDjIJuHEIV7o2nqLU4n9ksHoO-VUtHWlzacP_HNyf8UYFIPEznRdzTeSgMCIPsW9Wql37B_JYPQ=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-7459504569067117139</id><published>2022-03-14T18:39:00.001+05:30</published><updated>2022-03-14T18:39:11.164+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Change"/><category scheme="http://www.blogger.com/atom/ns#" term="Command"/><category scheme="http://www.blogger.com/atom/ns#" term="Default"/><category scheme="http://www.blogger.com/atom/ns#" term="Directory"/><category scheme="http://www.blogger.com/atom/ns#" term="Folder"/><category scheme="http://www.blogger.com/atom/ns#" term="path"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="Profile"/><category scheme="http://www.blogger.com/atom/ns#" term="Prompt"/><category scheme="http://www.blogger.com/atom/ns#" term="properties"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="WIndows"/><title type='text'>Change default directory of Windows command prompt and Windows PowerShell</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;Today I will explain the steps to change the default directory for Windows command prompt and Windows PowerShell.&lt;/p&gt;&lt;p&gt;The default directory for both the command prompt and PowerShell is the &quot;system32&quot; folder of the OS installed directory (By default: &quot;C:\windows\system32&quot;).&lt;/p&gt;&lt;p&gt;Day in - Day out, we will open the terminals (command prompt / PowerShell) and navigate the source directory. It sometimes irritates and wastes lots of time.&lt;/p&gt;&lt;p&gt;I have come across this situation and want to avoid re-entry the change directory command.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Environment,&lt;/h3&gt;&lt;p&gt;I use the command prompt and PowerShell, which are pinned to the taskbar of Windows.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Change default directory of Windows Command Prompt&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Right-click on the taskbar pinned Command Prompt icon&lt;/li&gt;&lt;li&gt;Right-click on the &quot;Command Prompt&quot; menu&lt;/li&gt;&lt;li&gt;Select the &quot;Properties&quot; item&lt;/li&gt;&lt;li&gt;Under the &quot;Shortcut&quot; tab, you will find the &quot;Start in:&quot; label&lt;/li&gt;&lt;li&gt;In the respective text box, enter the path you want to navigate by default.&lt;/li&gt;&lt;li&gt;For example, &quot;C:\Projects&quot;.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Change default directory of Windows PowerShell&lt;/h3&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Open the PowerShell with administrator privileges&lt;/li&gt;&lt;li&gt;Create a profile by using the following steps&lt;/li&gt;&lt;ol&gt;&lt;blockquote&gt;&lt;li&gt;New-item -type file -force $Profile&lt;/li&gt;&lt;/blockquote&gt;&lt;/ol&gt;&lt;li&gt;This will create a file &quot;Microsoft.PowerShell_profile.ps1&quot; in the current user documents PowerShell folder.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Syntax&lt;/li&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;C:\Users\&amp;lt;UserName&amp;gt;\Documents\WindowsPowerShell&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;Example&lt;/li&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;C:\Users\PSR\Documents\WindowsPowerShell&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;li&gt;Edit file&lt;/li&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;notepad.exe $Profile&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;Change the default directory&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Syntax&lt;/li&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;Set-Location &amp;lt;Directory Path&amp;gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;Example&lt;/li&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;Set-Location C:\Projects&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;Clear-Host # To clear the PowerShell screen&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;li&gt;Save and close the file&lt;/li&gt;&lt;li&gt;In the PowerShell window, enter the following command to change the profile&lt;/li&gt;&lt;ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;. $Profile&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;It immediately changes from the current directory to the updated default directory.&lt;/li&gt;&lt;li&gt;Close the PowerShell and try to open the PowerShell again to see the change in the directory.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Hope the above information is helpful to you reduce the change directories in day-to-day life.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Send me your valuable feedback to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/7459504569067117139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/7459504569067117139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7459504569067117139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7459504569067117139'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/03/change-default-directory-of-windows.html' title='Change default directory of Windows command prompt and Windows PowerShell'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-873630166714903490</id><published>2022-03-10T19:40:00.005+05:30</published><updated>2022-03-10T19:41:12.931+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="alter"/><category scheme="http://www.blogger.com/atom/ns#" term="back"/><category scheme="http://www.blogger.com/atom/ns#" term="clean"/><category scheme="http://www.blogger.com/atom/ns#" term="commit"/><category scheme="http://www.blogger.com/atom/ns#" term="Delete"/><category scheme="http://www.blogger.com/atom/ns#" term="drop"/><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="head"/><category scheme="http://www.blogger.com/atom/ns#" term="history"/><category scheme="http://www.blogger.com/atom/ns#" term="rebase"/><category scheme="http://www.blogger.com/atom/ns#" term="remove"/><category scheme="http://www.blogger.com/atom/ns#" term="reset"/><category scheme="http://www.blogger.com/atom/ns#" term="revert"/><title type='text'>Git remove a specific commit(s) from history</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;This blog post will let you know about the process of removing the git commit from git history.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Sample Git log&lt;/h3&gt;&lt;p&gt;&amp;gt; git log&amp;nbsp;&lt;/p&gt;&lt;p&gt;38384b3 initial commit&lt;/p&gt;&lt;p&gt;f96751b UI changes&lt;/p&gt;&lt;p&gt;2154131 file added&lt;/p&gt;&lt;p&gt;bf9b9c1 Logic corrections&lt;/p&gt;&lt;p&gt;3e75ab7 Bug fix -&amp;gt; (HEAD)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Use case&lt;/h3&gt;&lt;p&gt;Remove the commit &quot;file added&quot;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Rebase in interaction mode one commit above which we want to remove.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&amp;gt; git rebase -i f96751b&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;All the commits up to the specified commit will be listed in an order with the prefix &quot;pick&quot;. Along with commit messages, the useful commands are available like below.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;pick = use commit&lt;/p&gt;&lt;p&gt;reword = use commit, but edit the commit message&lt;/p&gt;&lt;p&gt;edit = use commit, but stop for amending&lt;/p&gt;&lt;p&gt;squash = use commit, but meld into previous commit&lt;/p&gt;&lt;p&gt;fixup = like &quot;squash&quot;, but discard this commit&#39;s log message&lt;/p&gt;&lt;p&gt;exec = run command (the rest of the line) using shell&lt;/p&gt;&lt;p&gt;drop = remove commit&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Delete the unwanted commits from the file&lt;/li&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;Press &#39;d&#39; twice to delete line (in case of vi editor)&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;Save and quit the editor&lt;/li&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;esc -&amp;gt; :wq (in case of vi editor)&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;If there are any merge conflicts, resolve it and perform rebase continue&lt;/li&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;&amp;gt; git rebase --continue&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;li&gt;Once all the merges are completed, perform the push operation&lt;/li&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;&amp;gt; git push --force-with-lease origin&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;/ul&gt;Hope this helps you make sure, you have clean git history.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Feel free to send your suggestions and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/873630166714903490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/873630166714903490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/873630166714903490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/873630166714903490'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/03/git-remove-specific-commits-from-history.html' title='Git remove a specific commit(s) from history'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-252931988947677790</id><published>2022-02-02T20:09:00.004+05:30</published><updated>2022-02-06T16:00:51.713+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Check"/><category scheme="http://www.blogger.com/atom/ns#" term="Install"/><category scheme="http://www.blogger.com/atom/ns#" term="Manager"/><category scheme="http://www.blogger.com/atom/ns#" term="n"/><category scheme="http://www.blogger.com/atom/ns#" term="Node"/><category scheme="http://www.blogger.com/atom/ns#" term="node.js"/><category scheme="http://www.blogger.com/atom/ns#" term="npm"/><category scheme="http://www.blogger.com/atom/ns#" term="nvm"/><category scheme="http://www.blogger.com/atom/ns#" term="Packages"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="Update"/><category scheme="http://www.blogger.com/atom/ns#" term="Upgrade"/><category scheme="http://www.blogger.com/atom/ns#" term="version"/><title type='text'>Ubuntu - update NPM and NodeJS</title><content type='html'>&lt;p&gt;Hi folks,&lt;/p&gt;&lt;p&gt;Some people often confuses with NPM update vs Node.js update.&lt;/p&gt;&lt;p&gt;Let me clarify that, NPM (Node Package Manager) is a CLI (Command Line Interface) to manage the JS (JavaScript) packages from&amp;nbsp;&lt;a href=&quot;https://www.npmjs.com/&quot;&gt;https://www.npmjs.com/&lt;/a&gt;&amp;nbsp;or any other external package managers like GitHub.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; is a FrontEnd JavaScript Framework like &lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue.js&lt;/a&gt;, &lt;a href=&quot;https://angularjs.org/&quot; target=&quot;_blank&quot;&gt;AngularJS&lt;/a&gt;&amp;nbsp;which helps to build the scalable network applications. Node.js® is a JavaScript runtime built on Chrome&#39;s V8 JavaScript engine.&lt;/p&gt;&lt;p&gt;&lt;b&gt;NVM (Node Version Manager)&lt;/b&gt; and &lt;b&gt;n&lt;/b&gt; are command line utilities to manage and switch between Node.js versions.&lt;/p&gt;&lt;p&gt;When you are installed for the first time, you will be installing Node.js from &lt;a href=&quot;https://nodejs.org/en/download/&quot;&gt;https://nodejs.org/en/download/&lt;/a&gt;&amp;nbsp;which also installs NPM CLI utility.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;But when upgrading the NPM or Node.js, it&#39;s a different story.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Update NPM&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;npm install -g npm&lt;/p&gt;&lt;/blockquote&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Update Node.js with Node version manager (n)&lt;/h3&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Install the n&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;sudo npm install -g n&lt;/p&gt;&lt;/blockquote&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Update the Node.js to stable version&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;sudo n stable&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;As of now, the stable version is 16.3.2 which includes NPM 8.1.2&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Update the Node.js to current version&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;sudo n current&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;As of now, the current version is 17.4.0 with NPM 8.3.1&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Check the versions&lt;/h3&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;NPM&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;npm --version&lt;/p&gt;&lt;/blockquote&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Node.js&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;node --version&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hope this helps you to understand the NPM and Node.js difference along with update of individual components.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Send your comments and feedback to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/252931988947677790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/252931988947677790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/252931988947677790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/252931988947677790'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/02/ubuntu-update-npm-and-nodejs.html' title='Ubuntu - update NPM and NodeJS'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-5481011299928835692</id><published>2022-01-29T23:36:00.003+05:30</published><updated>2022-01-29T23:41:02.392+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="ATM"/><category scheme="http://www.blogger.com/atom/ns#" term="cash"/><category scheme="http://www.blogger.com/atom/ns#" term="contactless"/><category scheme="http://www.blogger.com/atom/ns#" term="dispense"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="money"/><category scheme="http://www.blogger.com/atom/ns#" term="qr"/><category scheme="http://www.blogger.com/atom/ns#" term="sbi"/><category scheme="http://www.blogger.com/atom/ns#" term="withdrawal"/><category scheme="http://www.blogger.com/atom/ns#" term="yono"/><title type='text'>Yono SBI - Scan QR and contactless ATM cash withdrawal</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi folks,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I had seen something, I want to do and I have done PoC sometime back. Which is contactless ATM cash withdrawal from SBI Yono Mobile app.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Visit the SBI ATM which supports QR Scan option on KIOSK ATM screen&lt;/li&gt;&lt;li&gt;Select the QR based Contactless Withdrawal option on the touch screen&lt;/li&gt;&lt;li&gt;Open the Yono Mobile app which is already registered with your SBI account and have enough funds to withdraw&lt;/li&gt;&lt;li&gt;On mobile app, select &quot;QR Cash Withdrawal&quot; option&lt;/li&gt;&lt;li&gt;Scan the ATM displayed QR from the Yono mobile app&lt;/li&gt;&lt;li&gt;Select the amount to withdraw on ATM machine&lt;/li&gt;&lt;li&gt;Enter the PIN or OTP when prompted&lt;/li&gt;&lt;li&gt;Money from ATM will be dispensed&lt;/li&gt;&lt;li&gt;This is almost contactless except, you need to touch the ATM screen twice to select the QR option and to select amount.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This way, we can have less touch points to stay safe and secure way to withdraw your money.&lt;/p&gt;&lt;p&gt;Hope you will use this option to withdraw money from an SBI ATM.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Send your valuable feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/5481011299928835692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/5481011299928835692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/5481011299928835692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/5481011299928835692'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/01/yono-sbi-scan-qr-and-contactless-atm.html' title='Yono SBI - Scan QR and contactless ATM cash withdrawal'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-7168530129409973475</id><published>2022-01-29T23:23:00.001+05:30</published><updated>2022-01-29T23:23:28.248+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="asymmetric"/><category scheme="http://www.blogger.com/atom/ns#" term="calculate"/><category scheme="http://www.blogger.com/atom/ns#" term="computation"/><category scheme="http://www.blogger.com/atom/ns#" term="formula"/><category scheme="http://www.blogger.com/atom/ns#" term="gcd"/><category scheme="http://www.blogger.com/atom/ns#" term="Key"/><category scheme="http://www.blogger.com/atom/ns#" term="mathematical"/><category scheme="http://www.blogger.com/atom/ns#" term="private"/><category scheme="http://www.blogger.com/atom/ns#" term="Public"/><category scheme="http://www.blogger.com/atom/ns#" term="rsa"/><title type='text'>Calculate the private key of RSA algorithm</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi folks,&lt;/p&gt;&lt;p&gt;Today we are going to see how we can calculate the private key of RSA.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Inputs&lt;/b&gt;&lt;/h4&gt;&lt;p&gt;Random prime numbers p and q&lt;/p&gt;&lt;p&gt;Public key (n, e)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Procedure&lt;/b&gt;&lt;/h4&gt;&lt;p&gt;1. Compute &lt;i&gt;n&lt;/i&gt; (Random modulus)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;n = p * q&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;2. Compute &lt;i&gt;e&lt;/i&gt; (Derived Number)&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;e = (p - 1) * (q - 1)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;3. Form the public key&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;GCD(pubkey, e) should be 1&lt;/p&gt;&lt;p&gt;pubkey = 1 mod &lt;i&gt;e&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;4. Private key&lt;/p&gt;&lt;p&gt;prikey = (1 + k * e) / pubkey&lt;/p&gt;&lt;p&gt;0 &amp;lt; k &amp;lt; e - Iterate until we get a number without fraction&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Real example&lt;/h3&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Inputs&lt;/h4&gt;&lt;p&gt;p = 7, q = 17, pubkey = 11&lt;/p&gt;&lt;p&gt;1. n = 7 * 17 = 119&lt;/p&gt;&lt;p&gt;2. e = (7-1) * (17-1) = 96&lt;/p&gt;&lt;p&gt;3. pubkey = 11&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; GCD (11, 96) = 1&lt;/p&gt;&lt;p&gt;4. prikey computation&lt;/p&gt;&lt;p&gt;k=0, (1 + 0 * 96) / 11 = 0.09&lt;/p&gt;&lt;p&gt;k=1, (1 + 1 * 96) / 11 = 8.81&lt;/p&gt;&lt;p&gt;k=2, (1 + 2 * 96) / 11 = 17.5&lt;/p&gt;&lt;p&gt;k=3, (1 + 3 * 96) / 11 = 26.27&lt;/p&gt;&lt;p&gt;k=4, (1 + 4 * 96) / 11 = 35&lt;/p&gt;&lt;p&gt;prikey = 35&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hoping that this blog will be useful in understanding the RSA private key computation.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Send your valuable feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/7168530129409973475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/7168530129409973475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7168530129409973475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7168530129409973475'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2022/01/calculate-private-key-of-rsa-algorithm.html' title='Calculate the private key of RSA algorithm'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-3087922716601980882</id><published>2021-12-14T22:09:00.002+05:30</published><updated>2021-12-14T22:09:15.827+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="44228"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache"/><category scheme="http://www.blogger.com/atom/ns#" term="Application"/><category scheme="http://www.blogger.com/atom/ns#" term="Boot"/><category scheme="http://www.blogger.com/atom/ns#" term="cve"/><category scheme="http://www.blogger.com/atom/ns#" term="exploit"/><category scheme="http://www.blogger.com/atom/ns#" term="fix"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="log4j"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="Patch"/><category scheme="http://www.blogger.com/atom/ns#" term="pom"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerability"/><category scheme="http://www.blogger.com/atom/ns#" term="xml"/><category scheme="http://www.blogger.com/atom/ns#" term="zeroday"/><title type='text'>Fixing the Log4j2 vulnerability in spring boot application</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;Software Industry was in a shock with the log4j2 zero day exploit.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Exploited area&lt;/h3&gt;&lt;p&gt;The Apache Log4j2 version ( &amp;gt;=2.0 to &amp;lt;=2.14.1 ) is exploitable due to an attacker controlled LDAP and&amp;nbsp; JNDI endpoints.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Appendix&lt;/h3&gt;&lt;p&gt;LDAP (Light Weight Directory Protocol) is an industry standard protocol to access directory services.&lt;/p&gt;&lt;p&gt;JNDI (Java Naming and Directory Interface) is a Java API for a directory service that allows Java software clients to discover and look up data and resources via a name.&lt;/p&gt;&lt;p&gt;Find more information about the vulnerability from NVD website link.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2021-44228&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2021-44228&quot; style=&quot;background-color: #d9d2e9;&quot;&gt;https://nvd.nist.gov/vuln/detail/CVE-2021-44228&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span style=&quot;background-color: #d9d2e9;&quot;&gt;NVD (National Vulnerability Database) is maintained by National Institute of Standards and Technology (NIST),&amp;nbsp; An official part of United States of America (USA) government&#39;s Department of Commerce.&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Fix the vulnerability&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Even in the latest spring boot package uses the vulnerable 2.14.1 log4j2 version.&lt;/li&gt;&lt;li&gt;So, we need to explicitly add the specific version in the properties as below&lt;/li&gt;&lt;li&gt;In &lt;b&gt;pom.xml&lt;/b&gt; file, creating &amp;lt;properties&amp;gt; tag if not exists and add the attribute &lt;b&gt;log4j2.version&lt;/b&gt;&amp;nbsp;with version 2.16.0 (latest)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;background-color: #ffe599;&quot;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: #ffe599;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;log4j2.version&amp;gt;2.16.0&amp;lt;/log4j2.version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: #ffe599;&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;To check the version applied to the project, run the following command&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span style=&quot;background-color: #ffe599;&quot;&gt;mvn dependency:tree | grep &quot;log4j&quot;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The result should look like below&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span style=&quot;background-color: #ffe599;&quot;&gt;[INFO] |&amp;nbsp; |&amp;nbsp; |&amp;nbsp; +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.16.0:compile&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #ffe599;&quot;&gt;[INFO] |&amp;nbsp; |&amp;nbsp; |&amp;nbsp; |&amp;nbsp; \- org.apache.logging.log4j:log4j-api:jar:2.16.0:compile&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The similar type of vulnerability fixes available for other project builds.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;Hope you will find the above information useful and fix the issue immediately to keep the servers safe from attacks.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Send your valuable feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/3087922716601980882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/3087922716601980882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3087922716601980882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3087922716601980882'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/12/fixing-log4j2-vulnerability-in-spring.html' title='Fixing the Log4j2 vulnerability in spring boot application'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-4365012257071987041</id><published>2021-11-26T18:55:00.010+05:30</published><updated>2022-06-21T12:46:51.591+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="bitbucket"/><category scheme="http://www.blogger.com/atom/ns#" term="branch"/><category scheme="http://www.blogger.com/atom/ns#" term="checkout"/><category scheme="http://www.blogger.com/atom/ns#" term="clean"/><category scheme="http://www.blogger.com/atom/ns#" term="Convert"/><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="github"/><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="move"/><category scheme="http://www.blogger.com/atom/ns#" term="push"/><category scheme="http://www.blogger.com/atom/ns#" term="repo"/><category scheme="http://www.blogger.com/atom/ns#" term="upstream"/><title type='text'>BitBucket to GitHub Repo Migration including history</title><content type='html'>&lt;p style=&quot;text-align: left;&quot;&gt;Hi all,&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;In this blog, we are going to achieve how we can move/copy the bitbucket repo to GitHub.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Checkout BitBucket Repo&lt;/h3&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;blockquote&gt;git clone https://USER@bitbucket.org/USER/PROJECT.git
&lt;/blockquote&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;Add GitHub repo as upstream&lt;/h3&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;blockquote&gt;cd project-folder
git remote add upstream https://github.com:USER/PROJECT.git&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Note: To get the already assigned upstreams, use the below command&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;git remote -v&amp;nbsp;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;Push the branch(es)&lt;/h3&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;blockquote&gt;git push upstream master
git push --tags upstream
&lt;/blockquote&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;On push unsuccessful, try the below to have same history&lt;/h3&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;blockquote&gt;git checkout upstreambranch  
git branch main upstreambranch -f    
git checkout main  
git push origin main -f
&lt;/blockquote&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;Add redirect URL&lt;/h3&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;blockquote&gt;git remote set-url origin git@github.com:USER/PROJECT.git
&lt;/blockquote&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;Clean up the BitBucket (old) repo [Optional]&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Verify the content carefully on the GitHub repo&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to BitBucket account&lt;/li&gt;
&lt;li&gt;Navigate to the respective repository&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Settings&lt;/code&gt; -&amp;gt; &lt;code&gt;Delete repository&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hope this helps you to organize the repositories as per your choice to serve the best way for dev and ops.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Please send your feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/4365012257071987041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/4365012257071987041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/4365012257071987041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/4365012257071987041'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/11/bitbucket-to-github-repo-migration.html' title='BitBucket to GitHub Repo Migration including history'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-7804425980746961321</id><published>2021-11-26T15:40:00.000+05:30</published><updated>2021-11-26T15:40:17.260+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="flutter"/><title type='text'>Flutter Local (Inbuilt) Authentication usage</title><content type='html'>Hi folks,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today I will explain the process of using local (in-built) authentication usage in Flutter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Pre-requisites&lt;/h3&gt;&lt;div&gt;1. pubspeck.yaml update&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;dependencies:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;local_auth: ^0.6.2+3&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;2. Install the packages from command line&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; $ flutter pub get&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; Note: In Visual Studio Code or Android Studio automatically by saving the pubspec.yaml file packages will get updated&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;Usage&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;1. Import the package in the respective dart file (say main.dart)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;import &#39;package:local_auth/local_auth.dart&#39;;&lt;/div&gt;&lt;div&gt;2.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Troubleshooting&lt;/h3&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;1.&amp;nbsp;I/flutter : PlatformException(no_fragment_activity, local_auth plugin requires activity to be a FragmentActivity., null)&lt;/h4&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Open&amp;nbsp;/android/app/src/main/kotlin/../MainActivity.kt&lt;/li&gt;&lt;li&gt;Update the file with following content&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;package com.[your.package]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import androidx.annotation.NonNull;&lt;/div&gt;&lt;div&gt;import io.flutter.embedding.android.FlutterFragmentActivity&lt;/div&gt;&lt;div&gt;import io.flutter.embedding.engine.FlutterEngine&lt;/div&gt;&lt;div&gt;import io.flutter.plugins.GeneratedPluginRegistrant&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class MainActivity: FlutterFragmentActivity() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GeneratedPluginRegistrant.registerWith(flutterEngine);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;font size=&quot;2&quot;&gt;Please send your feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/7804425980746961321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/7804425980746961321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7804425980746961321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/7804425980746961321'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/11/flutter-local-inbuilt-authentication.html' title='Flutter Local (Inbuilt) Authentication usage'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-3117032378365779230</id><published>2021-11-17T22:41:00.002+05:30</published><updated>2021-11-17T22:41:25.444+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="disks"/><category scheme="http://www.blogger.com/atom/ns#" term="extend"/><category scheme="http://www.blogger.com/atom/ns#" term="Free"/><category scheme="http://www.blogger.com/atom/ns#" term="harddisk"/><category scheme="http://www.blogger.com/atom/ns#" term="increase"/><category scheme="http://www.blogger.com/atom/ns#" term="increment"/><category scheme="http://www.blogger.com/atom/ns#" term="OS"/><category scheme="http://www.blogger.com/atom/ns#" term="resize"/><category scheme="http://www.blogger.com/atom/ns#" term="Settings"/><category scheme="http://www.blogger.com/atom/ns#" term="size"/><category scheme="http://www.blogger.com/atom/ns#" term="Space"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="Upgrade"/><category scheme="http://www.blogger.com/atom/ns#" term="vm"/><category scheme="http://www.blogger.com/atom/ns#" term="VMWare"/><title type='text'>Extend Ubuntu VM hard disk space/size</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Today I will explain about the process to extend and existing disk space in Ubuntu VM.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Environment&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;VMWare&lt;/li&gt;&lt;li&gt;Ubuntu&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Context&lt;/h3&gt;&lt;p&gt;Increase hard disk space more than initially configured for the Ubuntu VM.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Reason&lt;/h4&gt;&lt;p&gt;VM hard disk might running out of space.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Make sure we have shutdown the Ubuntu VM&lt;/li&gt;&lt;li&gt;Increase the hard disk size&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Make sure it&#39;s in the allowed range&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_kr2YS8dh11_ekWrTi1jMkWUNzeR9egZKRoAfBEZC4BLudA-yE0Hp4mGOthyphenhyphenwRJ-U8XScZ9NbmbjoidZNmRfvr-6r_uy6wwalHY1PQ5FKWyVARTyfLJSPiYXlhxC7MHi9oIV6JX_8yJs/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;370&quot; data-original-width=&quot;1310&quot; height=&quot;90&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_kr2YS8dh11_ekWrTi1jMkWUNzeR9egZKRoAfBEZC4BLudA-yE0Hp4mGOthyphenhyphenwRJ-U8XScZ9NbmbjoidZNmRfvr-6r_uy6wwalHY1PQ5FKWyVARTyfLJSPiYXlhxC7MHi9oIV6JX_8yJs/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Start the VM&lt;/li&gt;&lt;li&gt;Open the &lt;b&gt;Disks&lt;/b&gt; application in Ubuntu&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzgPIFWaWIluSnidiY2Du2Eno4pdGGhyphenhyphenZ68VqTyBacW5hvDRD65ZO3HfzY_aA4tuRrIVXHrsdeNuLMsYCrAKYFOu2wiPZGXl9Cbjd_o1bwBkAXJ1nQ3ojJCztFuqFlX1Io6Upl0PP_ng/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;434&quot; data-original-width=&quot;700&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzgPIFWaWIluSnidiY2Du2Eno4pdGGhyphenhyphenZ68VqTyBacW5hvDRD65ZO3HfzY_aA4tuRrIVXHrsdeNuLMsYCrAKYFOu2wiPZGXl9Cbjd_o1bwBkAXJ1nQ3ojJCztFuqFlX1Io6Upl0PP_ng/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In below example we are extending it by additional 3GB&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_5jlffFWGqXrxvzlz720HdrlJig8bzap6ytHowY15ol2Xj5UM9g869CwZYrP-TD0wcanDkk4Vit48KpWQiYgMU7MlI3Hg50vfosSRfNFuWYSdgqSjSG7kxYyrNrOTjl6ZapCN3ML4k8/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;944&quot; data-original-width=&quot;1802&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_5jlffFWGqXrxvzlz720HdrlJig8bzap6ytHowY15ol2Xj5UM9g869CwZYrP-TD0wcanDkk4Vit48KpWQiYgMU7MlI3Hg50vfosSRfNFuWYSdgqSjSG7kxYyrNrOTjl6ZapCN3ML4k8/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Select the&amp;nbsp;&lt;b&gt;Extended Partition &lt;/b&gt;block&lt;/li&gt;&lt;li&gt;Click &lt;b&gt;Settings&lt;/b&gt; (Gear) icon&lt;/li&gt;&lt;li&gt;Choose &lt;b&gt;Resize&lt;/b&gt; option&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7jxGHJDw8kXlPAO1Ay0mIc-_to_fFCRuABGrW1_jxXsfH1fpWtF8bLCsXoaG9S74Q6rsQ438qU6GyY751EVSZGAqrWLat-ggbTcJw9zZxEjqsJmZr5JnZ6DTU0WoCarvmvizGKfwW4Es/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1802&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7jxGHJDw8kXlPAO1Ay0mIc-_to_fFCRuABGrW1_jxXsfH1fpWtF8bLCsXoaG9S74Q6rsQ438qU6GyY751EVSZGAqrWLat-ggbTcJw9zZxEjqsJmZr5JnZ6DTU0WoCarvmvizGKfwW4Es/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Use the increment (+) icon or scroll bar to increase the partition size&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9YRdEjSMKaqr3Vx3P-Nvb8aqRKybT6tMe-V_mgnuoQ0tlLKtpDf2ZOUKPyn6BZJUGuUvUh34jBUmY-FJuAXqt4dMkfi3QivjNeukZBIKfKle-4qA2Gx1JRDn1NxgVOyUKiaI-_u_Z_mc/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1802&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9YRdEjSMKaqr3Vx3P-Nvb8aqRKybT6tMe-V_mgnuoQ0tlLKtpDf2ZOUKPyn6BZJUGuUvUh34jBUmY-FJuAXqt4dMkfi3QivjNeukZBIKfKle-4qA2Gx1JRDn1NxgVOyUKiaI-_u_Z_mc/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Click on &lt;b&gt;Resize&lt;/b&gt; button&lt;/li&gt;&lt;li&gt;Enter credentials when prompted&lt;/li&gt;&lt;li&gt;By now, the extended partition will be increased&lt;/li&gt;&lt;li&gt;Time to select the file system, where exactly our data is getting stored&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE8gmU_mM6ruBPo6TLi2iEou8jaQ76wi2ktP1Tj99Pg_KQoqvNCj4a2AEzHEFf9T5SVYrFXY1XfrwqyFhTgHpDfsu17lP_JwpsuTftTTjJby3iXcOQQ15iwsPReS3tSgLm__oBjvyqMGg/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1802&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE8gmU_mM6ruBPo6TLi2iEou8jaQ76wi2ktP1Tj99Pg_KQoqvNCj4a2AEzHEFf9T5SVYrFXY1XfrwqyFhTgHpDfsu17lP_JwpsuTftTTjJby3iXcOQQ15iwsPReS3tSgLm__oBjvyqMGg/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;We will repeat the process of resizing like earlier&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1jYUSAATXtPpI9iuFBj3LkoTrm7fbOVz9EXBuiJygckUz0n_324PhSLyXjn07YHyoJL5USXCK57N628TYHyaBFBhXVuKO2YiJ5JAYGGQlGGZlXtaleg7_lkbZSs3WkgIsCLybEQYGnqE/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1802&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1jYUSAATXtPpI9iuFBj3LkoTrm7fbOVz9EXBuiJygckUz0n_324PhSLyXjn07YHyoJL5USXCK57N628TYHyaBFBhXVuKO2YiJ5JAYGGQlGGZlXtaleg7_lkbZSs3WkgIsCLybEQYGnqE/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Using scrollbar increase the disk size&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyUQU_DeLJszsSZ-0SVYydLwvG5g6vMTEi48wvlrby_zp5DBtULdjxCVldxgzNt907hTpHBCEDdMudl3D56RYGAUnhgJ1QRlaJiWRsjoqlchgjfGGhOs5HSuZmk-rSvDoV-gLBk3acoD0/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1802&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyUQU_DeLJszsSZ-0SVYydLwvG5g6vMTEi48wvlrby_zp5DBtULdjxCVldxgzNt907hTpHBCEDdMudl3D56RYGAUnhgJ1QRlaJiWRsjoqlchgjfGGhOs5HSuZmk-rSvDoV-gLBk3acoD0/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Click on the &lt;b&gt;Resize&lt;/b&gt; button&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifukM4pS2mzYKqa2vdUPLchCgE3A4furSxb3F8I5UImNxs1IKYR8y-x6ZPpXe0BiqdXTYUyQiA14DNeVzQT-aORPft4sxXCNY4Yh8SOjByCc6entYbJVsLp9zorU7eFM8XKDpKAHoROMM/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1802&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifukM4pS2mzYKqa2vdUPLchCgE3A4furSxb3F8I5UImNxs1IKYR8y-x6ZPpXe0BiqdXTYUyQiA14DNeVzQT-aORPft4sxXCNY4Yh8SOjByCc6entYbJVsLp9zorU7eFM8XKDpKAHoROMM/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The harddisk size is been reflected.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Hurray !! You have increased your hard disk size to store more data on the Ubuntu VM.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The same process can be used for normal Ubuntu OS also.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Please send your comments and feedback to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/3117032378365779230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/3117032378365779230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3117032378365779230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/3117032378365779230'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/11/extend-ubuntu-vm-hard-disk-spacesize.html' title='Extend Ubuntu VM hard disk space/size'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_kr2YS8dh11_ekWrTi1jMkWUNzeR9egZKRoAfBEZC4BLudA-yE0Hp4mGOthyphenhyphenwRJ-U8XScZ9NbmbjoidZNmRfvr-6r_uy6wwalHY1PQ5FKWyVARTyfLJSPiYXlhxC7MHi9oIV6JX_8yJs/s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-546431491948140136</id><published>2021-10-07T18:00:00.004+05:30</published><updated>2021-10-07T18:00:29.652+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".p12"/><category scheme="http://www.blogger.com/atom/ns#" term="Convert"/><category scheme="http://www.blogger.com/atom/ns#" term="Export"/><category scheme="http://www.blogger.com/atom/ns#" term="openssl"/><category scheme="http://www.blogger.com/atom/ns#" term="Password"/><category scheme="http://www.blogger.com/atom/ns#" term="pem"/><category scheme="http://www.blogger.com/atom/ns#" term="pfx"/><category scheme="http://www.blogger.com/atom/ns#" term="pkcs12"/><title type='text'>Convert PEM to PFX/PKCS12(.p12) using OpenSSL</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi folks,&lt;/p&gt;&lt;p&gt;To keep it simple with a single command to convert the .PEM format file to .p12/.pfx we can use the below information.&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;background-color: #d0e0e3; font-family: courier;&quot;&gt;$ openssl pkcs12 -export -in domain.pem -out domain.p12&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;br /&gt;It will ask you to enter the export password (twice for confirmation).&lt;br /&gt;&lt;br /&gt;It&#39;s up to you to choose to enter the password or keep it empty (just press enter) based on the use case what you have.&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;Hope this helps you to convert the certificate format and use in your application or server.&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Request to send your comments and feedback to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/546431491948140136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/546431491948140136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/546431491948140136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/546431491948140136'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/10/convert-pem-to-pfxpkcs12p12.html' title='Convert PEM to PFX/PKCS12(.p12) using OpenSSL'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-656944770440137804</id><published>2021-06-10T21:25:00.005+05:30</published><updated>2021-09-02T16:36:59.342+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="256"/><category scheme="http://www.blogger.com/atom/ns#" term="384"/><category scheme="http://www.blogger.com/atom/ns#" term="90"/><category scheme="http://www.blogger.com/atom/ns#" term="certificate"/><category scheme="http://www.blogger.com/atom/ns#" term="Create"/><category scheme="http://www.blogger.com/atom/ns#" term="days"/><category scheme="http://www.blogger.com/atom/ns#" term="DNS"/><category scheme="http://www.blogger.com/atom/ns#" term="domain"/><category scheme="http://www.blogger.com/atom/ns#" term="Download"/><category scheme="http://www.blogger.com/atom/ns#" term="Free"/><category scheme="http://www.blogger.com/atom/ns#" term="Generate"/><category scheme="http://www.blogger.com/atom/ns#" term="https"/><category scheme="http://www.blogger.com/atom/ns#" term="New"/><category scheme="http://www.blogger.com/atom/ns#" term="Secure"/><category scheme="http://www.blogger.com/atom/ns#" term="sha"/><category scheme="http://www.blogger.com/atom/ns#" term="Software"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="tls"/><category scheme="http://www.blogger.com/atom/ns#" term="Website"/><category scheme="http://www.blogger.com/atom/ns#" term="zerossl"/><title type='text'>Generate Free SSL Certificate using ZeroSSL</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi all,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Today I am going to explain the process of generating free SSL certificate using ZeroSSL&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Pre-requisite&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;We should have our own domain&lt;/li&gt;&lt;li&gt;We should be able to add/update the DNS settings like A, CNAME, TXT records&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Best free SSL providers&lt;/h3&gt;&lt;p&gt;As per my research I found the best free SSL (90 days) certificate providers&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;ZeroSSL&lt;/li&gt;&lt;li&gt;Let&#39;s Encrypt&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In this blog, i&#39;ll explain ZeroSSL process&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;ZeroSSL Free SSL Certificate&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Navigate to&amp;nbsp;&lt;a href=&quot;https://zerossl.com/&quot;&gt;https://zerossl.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Signup with your email by clicking on &quot;FreeSSL&quot;&lt;/li&gt;&lt;li&gt;After email verification, login to zerossl site&lt;/li&gt;&lt;li&gt;Click on &quot;New Certificate&quot;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOkIjj3YLrwzVivko0TlL0tYQKEjeEkUY56W2vb8yXYy3llLgMQSUu1iMxUa8pumkv_d5VdaRmZc3h5zRyy-OcPnFbJgysD0aHYEGp8XzxLr9hC8lLyhDH6lDraA_NCpcE-l1X3mqykUg/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1270&quot; data-original-width=&quot;2048&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOkIjj3YLrwzVivko0TlL0tYQKEjeEkUY56W2vb8yXYy3llLgMQSUu1iMxUa8pumkv_d5VdaRmZc3h5zRyy-OcPnFbJgysD0aHYEGp8XzxLr9hC8lLyhDH6lDraA_NCpcE-l1X3mqykUg/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Enter your domain name and click on &quot;Next Step&quot;&lt;/li&gt;&lt;li&gt;Default validity is 90 days for free SSL&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHuW2yvdR7iO3oNCI3pS7_b5s3QBzKqGupFlxZpxh40cTysWY5IOEi8rl5LvgV_-NwhyphenhyphenYg9iNrwtyRMZnZuPW_OySclO4qKrY8V9dAkkhJz65AfHmh9HLXkSrZvJaQ-l5KoJVpDaeQBG0/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1063&quot; data-original-width=&quot;2048&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHuW2yvdR7iO3oNCI3pS7_b5s3QBzKqGupFlxZpxh40cTysWY5IOEi8rl5LvgV_-NwhyphenhyphenYg9iNrwtyRMZnZuPW_OySclO4qKrY8V9dAkkhJz65AfHmh9HLXkSrZvJaQ-l5KoJVpDaeQBG0/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;In the CSR section we have couple of options&lt;/li&gt;&lt;li&gt;Default is Auto-Generate CSR enabled&lt;/li&gt;&lt;li&gt;Disable Auto-Generate CSR - only your zerossl registered email address with default values&lt;/li&gt;&lt;li&gt;Enable Paste Existing CSR - If you have already created a CSR then you can use this option&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIkpvXEOWyFdjLdLG4baTiGqkhNxwnp-J3ze8FabvHu1zVkZXBhaCQePwpoi7eXHOFDcbVYDhx4_1GlD7V3CUO5-l0au9P_U8VuVWEHT6FOyGZgg_GwYQgwT5QogjejyMiDK1nDH2Un_8/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1146&quot; data-original-width=&quot;1268&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIkpvXEOWyFdjLdLG4baTiGqkhNxwnp-J3ze8FabvHu1zVkZXBhaCQePwpoi7eXHOFDcbVYDhx4_1GlD7V3CUO5-l0au9P_U8VuVWEHT6FOyGZgg_GwYQgwT5QogjejyMiDK1nDH2Un_8/&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Finalize your order&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX8rHwP-5RnbGDzeLi2Jgihn3ovhtbQVJdrKyGAUh-8N_XGJTIdsBbIl6ANEsd17Jy88d1by4EypzU6KUG68EN9JzL5prvR4a1e-K5UGwibWiyzAR797_EU-G6m5kTlrtY9KrlwzTqQVE/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1392&quot; data-original-width=&quot;1772&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX8rHwP-5RnbGDzeLi2Jgihn3ovhtbQVJdrKyGAUh-8N_XGJTIdsBbIl6ANEsd17Jy88d1by4EypzU6KUG68EN9JzL5prvR4a1e-K5UGwibWiyzAR797_EU-G6m5kTlrtY9KrlwzTqQVE/&quot; width=&quot;306&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Note&lt;/p&gt;&lt;p&gt;ZeroSSL will generate the certificate using signature algorithm SHA-384&lt;/p&gt;&lt;p&gt;In some cases, if SHA-384 based SSL is not valid then we have to mandatory go for alternate &quot;Let&#39;s Encrypt&quot;. I will explain Let&#39;s Encrypt in my next blog.&lt;/p&gt;&lt;p&gt;For every 90 days, we need to renew our certificate in the above mentioned manner.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Download Certificate&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Navigate to Certificates section&lt;/li&gt;&lt;li&gt;Go to Issued tab&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQe6bgFttSn2RFYObiYBHbyhsNRpb-B3O3SU3Ffvr1sZRJUNBx47gSjulLrDbfskf3upnhQGAca0yOrPoEH7LoZEvRJ9iMMeLq88BbBesb4w3V6UKHNFOINrK0VCol2yo6nwGXi-Bm9-k/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;528&quot; data-original-width=&quot;1798&quot; height=&quot;94&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQe6bgFttSn2RFYObiYBHbyhsNRpb-B3O3SU3Ffvr1sZRJUNBx47gSjulLrDbfskf3upnhQGAca0yOrPoEH7LoZEvRJ9iMMeLq88BbBesb4w3V6UKHNFOINrK0VCol2yo6nwGXi-Bm9-k/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Click on &quot;Install&quot;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS-3p8UZJlpBEkOv2qsFvpXX_IeqUj1yulAfMrs5XxVb8BObUJKLpf-cAeOwl3dBT-SDGWbubxp_SDvSHvV1WMmjT_TBJO7YYDWTx0iu1GnRBS3N1hqf8CGbdEE3GHmBchAvSj8oLxC1I/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;806&quot; data-original-width=&quot;1772&quot; height=&quot;146&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS-3p8UZJlpBEkOv2qsFvpXX_IeqUj1yulAfMrs5XxVb8BObUJKLpf-cAeOwl3dBT-SDGWbubxp_SDvSHvV1WMmjT_TBJO7YYDWTx0iu1GnRBS3N1hqf8CGbdEE3GHmBchAvSj8oLxC1I/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;You can select the Default Format dropdown to select specified server or just leave it default.&lt;/li&gt;&lt;li&gt;Download the certificate zip file which will contain&amp;nbsp;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;ca_bunder.crt - CA Bundle&lt;/li&gt;&lt;li&gt;certificate.crt - Certificate&lt;/li&gt;&lt;li&gt;private.key - Private Key&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hope, you will be able to make use of this free SSL feature and encrypt your domain traffic.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Please let me know your feedback and suggestions in comments or mail to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/656944770440137804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/656944770440137804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/656944770440137804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/656944770440137804'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/06/generate-free-ssl-certificate-using.html' title='Generate Free SSL Certificate using ZeroSSL'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOkIjj3YLrwzVivko0TlL0tYQKEjeEkUY56W2vb8yXYy3llLgMQSUu1iMxUa8pumkv_d5VdaRmZc3h5zRyy-OcPnFbJgysD0aHYEGp8XzxLr9hC8lLyhDH6lDraA_NCpcE-l1X3mqykUg/s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-1659641160321006797</id><published>2021-03-03T17:13:00.074+05:30</published><updated>2021-03-05T20:57:45.478+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="action"/><category scheme="http://www.blogger.com/atom/ns#" term="ARR"/><category scheme="http://www.blogger.com/atom/ns#" term="Condition"/><category scheme="http://www.blogger.com/atom/ns#" term="configure"/><category scheme="http://www.blogger.com/atom/ns#" term="Expression"/><category scheme="http://www.blogger.com/atom/ns#" term="group"/><category scheme="http://www.blogger.com/atom/ns#" term="IIS"/><category scheme="http://www.blogger.com/atom/ns#" term="logical"/><category scheme="http://www.blogger.com/atom/ns#" term="match"/><category scheme="http://www.blogger.com/atom/ns#" term="patter"/><category scheme="http://www.blogger.com/atom/ns#" term="port"/><category scheme="http://www.blogger.com/atom/ns#" term="proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="redirect"/><category scheme="http://www.blogger.com/atom/ns#" term="Regular"/><category scheme="http://www.blogger.com/atom/ns#" term="reverse"/><category scheme="http://www.blogger.com/atom/ns#" term="Rewrite"/><category scheme="http://www.blogger.com/atom/ns#" term="rule"/><category scheme="http://www.blogger.com/atom/ns#" term="Setup"/><category scheme="http://www.blogger.com/atom/ns#" term="URL"/><title type='text'>Reverse Proxy with IIS ARR (Application Request Routing) and URL Rewrite features</title><content type='html'>&lt;p&gt;&amp;nbsp;Dear folks,&lt;/p&gt;&lt;p&gt;Today I am going to explain how we can use the IIS as reverse proxy to secure, redirect the internal application servers.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;IIS ARR 3.0 does provide load balancing, cache, forward and reverse proxy features.&lt;/p&gt;&lt;p&gt;This blog will cover the usage of reverse proxy.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Agenda&lt;/h3&gt;&lt;p&gt;Secure/Hide the internal servers from public internet requests&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Environment Setup&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;DMZ server with IIS ARR and URL Rewrite&lt;/li&gt;&lt;li&gt;Internal servers which are accessible to DMZ&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Pre-requisites&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Make sure the IIS is installed on the server&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/download/details.aspx?id=39715&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ARR (Application Request Routing)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.iis.net/downloads/microsoft/url-rewrite&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;URL Rewrite&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Install the pre-requisites&lt;/li&gt;&lt;li&gt;Create InBound and OutBound rules to configure as reverse-proxy&lt;/li&gt;&lt;li&gt;Edit/Create the web.config based on your requirement&lt;/li&gt;&lt;li&gt;Public facing IP - 123.10.1.12&lt;/li&gt;&lt;li&gt;Internal IP - 10.1.1.192&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Use case 1&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Redirect URLs with 80 port to internal application server on 8001&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;rewrite&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;rules&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;rule name=&quot;ReverseProxyInboundRule1&quot; stopProcessing=&quot;true&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;match url=&quot;(.*)&quot; /&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;conditions logicalGrouping=&quot;MatchAll&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;add input=&quot;{CACHE_URL}&quot; pattern=&quot;^(https?)://&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/conditions&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;action type=&quot;Redirect&quot; url=&quot;{C:1}://10.1.1.192/{R:1}&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/rule&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;lt;/rules&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;lt;outboundRules&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;rule name=&quot;ReverseProxyOutboundRule&quot; preCondition=&quot;IsHTML&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;match filterByTags=&quot;A, Form, Img&quot; pattern=&quot;^http(s)?://10.1.1.192/(.*)&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;action type=&quot;Rewrite&quot; value=&quot;http{R:1}://123.10.1.12/{R:2}&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/rule&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;preConditions&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;lt;preCondition name=&quot;IsHTML&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;lt;add input=&quot;{RESPONSE_CONTENT_TYPE}&quot; pattern=&quot;^text/html&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/preCondition&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;lt;/preConditions&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/outboundRules&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/rewrite&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/system.webServer&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Use case 2&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Redirect URLs with 9001 port to internal application server on 8081 with JSON response&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;p&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;rewrite&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;rules&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;rule name=&quot;ReverseProxyInboundRule_Port_JSON&quot; stopProcessing=&quot;true&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt; &amp;lt;match url=&quot;(.*)&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;lt;conditions logicalGrouping=&quot;MatchAll&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;add input=&quot;{CACHE_URL}&quot; pattern=&quot;^(https?)://&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt; &amp;nbsp; &lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&amp;lt;add input=&quot;{SERVER_PORT}&quot; pattern=&quot;9001&quot; /&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/conditions&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt; &amp;lt;action type=&quot;Redirect&quot; url=&quot;http://10.1.1.192:8081/{R:1}&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/rule&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/rules&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;outboundRules&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;rule name=&quot;ReverseProxyOutboundRule_Port_JSON&quot; preCondition=&quot;IsJSON&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;match filterByTags=&quot;A, Form, Img&quot; pattern=&quot;^http(s)?://10.1.1.192:8081/(.*)&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;action type=&quot;Rewrite&quot; value=&quot;http{R:1}://123.10.1.12:9001/{R:2}&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/rule&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;preConditions&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;preCondition name=&quot;IsJSON&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;add input=&quot;{RESPONSE_CONTENT_TYPE}&quot; pattern=&quot;^(text|application/json|application/plaintext&quot; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/preCondition&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;/preConditions&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/outboundRules&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/rewrite&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/system.webServer&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;One can make use of the conditions and redirect accordingly&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;url&lt;/h4&gt;&lt;p&gt;use the regular expression to identify the part of the URL to process further&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;conditions&lt;/h4&gt;&lt;p&gt;&amp;nbsp;Use conditions with attributes to distinguish the URL&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;action&lt;/h4&gt;&lt;p&gt;redirect, rewrite, abort with specific URL with arguments&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hope this helps organization to configure and secure the servers&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Request you to send your valuable feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/1659641160321006797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/1659641160321006797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/1659641160321006797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/1659641160321006797'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/03/reverse-proxy-with-iis-arr-application.html' title='Reverse Proxy with IIS ARR (Application Request Routing) and URL Rewrite features'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5584304689908726112.post-4222931998692287034</id><published>2021-01-27T16:01:00.001+05:30</published><updated>2021-01-27T16:01:09.638+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="base64"/><category scheme="http://www.blogger.com/atom/ns#" term="Batch"/><category scheme="http://www.blogger.com/atom/ns#" term="Convert"/><category scheme="http://www.blogger.com/atom/ns#" term="emailer"/><category scheme="http://www.blogger.com/atom/ns#" term="embed"/><category scheme="http://www.blogger.com/atom/ns#" term="File"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Image"/><category scheme="http://www.blogger.com/atom/ns#" term="partof"/><category scheme="http://www.blogger.com/atom/ns#" term="Single"/><category scheme="http://www.blogger.com/atom/ns#" term="template"/><category scheme="http://www.blogger.com/atom/ns#" term="WIndows"/><category scheme="http://www.blogger.com/atom/ns#" term="within"/><title type='text'>Windows Batch File - Embed Image (Base64 Encoded) in HTML Code</title><content type='html'>&lt;p&gt;&amp;nbsp;Hi folks,&lt;/p&gt;&lt;p&gt;Today I am going to explain how we can add an image to the HTML code in without copying the images in relative path folder.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Procedure&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Prefix file contents.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&amp;lt;img src=&quot;data:image/png;base64,&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&amp;nbsp;Batch file contents.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://gist.github.com/psrdotcom/ce1593f170fe931f9840b4a0f3eae89f&quot;&gt;https://gist.github.com/psrdotcom/ce1593f170fe931f9840b4a0f3eae89f&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Suffix file contents.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&quot; alt=&quot;PSR&quot; /&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Download the batch file.&lt;/li&gt;&lt;li&gt;Open command prompt in Windows.&lt;/li&gt;&lt;li&gt;Navigate to the batch file contained folder.&lt;/li&gt;&lt;li&gt;Execute the batch file image file name as parameter.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&amp;gt; Image2Base64ImgTag.bat PSRImage.jpeg&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;You should see a file &quot;imageTag.html&quot;.&lt;/li&gt;&lt;li&gt;Open the file to see image in a browser.&lt;/li&gt;&lt;li&gt;Open the file with notepad to see the image converted to base64 with proper HTML Image tag.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hope this helps you to reduce lot of efforts in maintaining the image files/folders.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Send your feedback and comments to &lt;a href=&quot;mailto:psrdotcom@gmail.com&quot;&gt;psrdotcom@gmail.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://psrdotcom.blogspot.com/feeds/4222931998692287034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5584304689908726112/4222931998692287034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/4222931998692287034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5584304689908726112/posts/default/4222931998692287034'/><link rel='alternate' type='text/html' href='http://psrdotcom.blogspot.com/2021/01/windows-batch-file-embed-image-base64.html' title='Windows Batch File - Embed Image (Base64 Encoded) in HTML Code'/><author><name>Suresh Raju Pilli</name><uri>http://www.blogger.com/profile/15822254095536474442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>