<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Saurabh Rai's Blog]]></title><description><![CDATA[A unique intersection of software development, programming principles, and developer productivity. I aim to empower you with a broad perspective on technology and productivity to achieve more.]]></description><link>https://blog.srbhr.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1681639708769/klJnXxlWb.png</url><title>Saurabh Rai&apos;s Blog</title><link>https://blog.srbhr.com</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 20:56:51 GMT</lastBuildDate><atom:link href="https://blog.srbhr.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Understanding Meta-ranking and Re-Ranking]]></title><description><![CDATA[In the dynamic landscape of search engine technology, the challenge of delivering highly relevant and personalized search results remains at the forefront of innovation. As the digital information ecosystem expands exponentially, traditional ranking ...]]></description><link>https://blog.srbhr.com/understanding-meta-ranking-and-re-ranking</link><guid isPermaLink="true">https://blog.srbhr.com/understanding-meta-ranking-and-re-ranking</guid><category><![CDATA[search]]></category><category><![CDATA[AI]]></category><category><![CDATA[Retrieval-Augmented Generation]]></category><category><![CDATA[Search Engines]]></category><dc:creator><![CDATA[Saurabh Rai]]></dc:creator><pubDate>Mon, 08 Jul 2024 20:19:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1720469909570/c87cbffd-f2b5-4aab-ac5b-e8b6645b57e5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the dynamic landscape of search engine technology, the challenge of delivering highly relevant and personalized search results remains at the forefront of innovation. As the digital information ecosystem expands exponentially, traditional ranking methods often need help accurately interpreting user intent and providing pertinent results. This article explores the cutting-edge techniques of reranking and meta-ranking, which promise to transform how search engines aggregate, analyze, and present information to users.</p>
<h2 id="heading-the-evolution-of-search-engine-ranking-algorithms">The Evolution of Search Engine Ranking Algorithms</h2>
<p>Before delving into advanced techniques, it’s crucial to understand the foundation of search engine ranking. At its core, ranking is the process by which search engines determine the order of results displayed in response to a user query. Traditional ranking algorithms rely on factors such as:</p>
<ul>
<li><p>Keyword relevance</p>
</li>
<li><p>Page authority</p>
</li>
<li><p>Link structures</p>
</li>
<li><p>Content quality</p>
</li>
</ul>
<p>However, these conventional methods often need to catch up in capturing the nuances of user intent and the contextual relevance of content. This limitation has paved the way for more sophisticated approaches like reranking and meta-ranking.</p>
<h2 id="heading-reranking-refining-search-results-for-enhanced-relevance">Reranking: Refining Search Results for Enhanced Relevance</h2>
<h3 id="heading-what-is-reranking">What is Reranking?</h3>
<p>Reranking is adjusting the initial order of search results based on additional criteria and analysis. Its primary purpose is to enhance the relevance of search results by considering factors beyond essential keyword matching and link analysis.</p>
<h3 id="heading-how-does-reranking-work-in-search-engines">How Does Reranking Work in Search Engines?</h3>
<ol>
<li><p><strong>Initial Ranking:</strong> The search engine generates initial results based on traditional ranking factors.</p>
</li>
<li><p><strong>Secondary Analysis:</strong> A reranking algorithm analyzes these results using additional criteria.</p>
</li>
<li><p><strong>Result Adjustment:</strong> The order of results is adjusted based on this secondary analysis.</p>
</li>
</ol>
<h3 id="heading-key-techniques-in-reranking">Key Techniques in Reranking</h3>
<ol>
<li><p><strong>Machine Learning Models:</strong> Advanced algorithms analyze user behavior, such as clicks and conversions, to predict which results will most likely satisfy user needs.</p>
</li>
<li><p><strong>Contextual Signals:</strong> Reranking systems incorporate information like user location, device type, and search history to tailor results to individual users.</p>
</li>
<li><p><strong>Natural Language Processing (NLP):</strong> Reranking can better match user intent with relevant content by understanding the semantic meaning behind queries.</p>
</li>
<li><p><strong>User Feedback Integration:</strong> Both implicit (e.g., click-through rates) and explicit user feedback are used to refine and improve ranking accuracy continuously.</p>
</li>
</ol>
<h3 id="heading-benefits-of-reranking-for-user-experience">Benefits of Reranking for User Experience</h3>
<ul>
<li><p>More relevant search results</p>
</li>
<li><p>Improved personalization</p>
</li>
<li><p>Better handling of ambiguous queries</p>
</li>
<li><p>Adaptation to changing user preferences over time</p>
</li>
</ul>
<h2 id="heading-meta-ranking-aggregating-multiple-ranking-signals-for-optimal-results">Meta-Ranking: Aggregating Multiple Ranking Signals for Optimal Results</h2>
<h3 id="heading-understanding-meta-ranking-rank-fusion">Understanding Meta-Ranking (Rank Fusion)</h3>
<p>Meta-ranking, or rank aggregation or fusion, takes reranking a step further. It involves merging multiple ranked lists of search results into a single, optimized ranking. This approach leverages various ranking models’ strengths while mitigating their weaknesses.</p>
<h3 id="heading-key-components-of-meta-ranking-frameworks">Key Components of Meta-Ranking Frameworks</h3>
<ol>
<li><p><strong>Multiple Ranking Models:</strong> Meta-ranking systems incorporate various ranking algorithms, each potentially focusing on different aspects of relevance.</p>
</li>
<li><p><strong>Aggregation Methods:</strong> These are techniques used to combine the outputs of multiple ranking models:</p>
<ul>
<li><p>Score-based aggregation (e.g., weighted sum, Borda count)</p>
</li>
<li><p>Voting mechanisms (e.g., majority voting, Kemeny-Young method)</p>
</li>
<li><p>Machine learning approaches (Learning to Rank for meta-ranking)</p>
</li>
</ul>
</li>
<li><p><strong>Heterogeneous Data Fusion:</strong> Meta-ranking can combine rankings from diverse sources, including web pages, images, videos, news articles, and product listings.</p>
</li>
</ol>
<h3 id="heading-benefits-of-meta-ranking-in-search-engine-optimization-seo">Benefits of Meta-Ranking in Search Engine Optimization (SEO)</h3>
<ol>
<li><p><strong>Improved Overall Relevance:</strong> By considering multiple ranking signals, meta-ranking provides a more comprehensive view of relevance.</p>
</li>
<li><p><strong>Robustness Against Manipulation:</strong> The aggregation of multiple ranking systems makes it more difficult for malicious actors to game search results.</p>
</li>
<li><p><strong>Enhanced Result Diversity:</strong> Meta-ranking can incorporate results from various perspectives, providing users with a more diverse set of options.</p>
</li>
<li><p><strong>Adaptability to New Ranking Factors:</strong> Meta-ranking frameworks can easily integrate new ranking models or signals as they become available.</p>
</li>
</ol>
<h2 id="heading-real-world-applications-of-re-ranking-and-meta-ranking">Real-World Applications of Re-ranking and Meta-Ranking</h2>
<h3 id="heading-web-search-engines">Web Search Engines</h3>
<p>Major search engines like Google and Bing employ sophisticated meta-ranking techniques to combine signals from numerous ranking models, including:</p>
<ul>
<li><p>Traditional keyword-based rankings</p>
</li>
<li><p>Link analysis algorithms (e.g., PageRank)</p>
</li>
<li><p>User behavior models</p>
</li>
<li><p>Content quality assessments</p>
</li>
<li><p>Freshness and timeliness signals</p>
</li>
</ul>
<h3 id="heading-e-commerce-platforms">E-commerce Platforms</h3>
<p>Online marketplaces like Amazon use meta-ranking to optimize product search results by combining:</p>
<ul>
<li><p>Keyword relevance</p>
</li>
<li><p>Sales performance</p>
</li>
<li><p>Customer ratings and reviews</p>
</li>
<li><p>Price competitiveness</p>
</li>
<li><p>Inventory levels</p>
</li>
</ul>
<h3 id="heading-academic-search-engines">Academic Search Engines</h3>
<p>Platforms like Google Scholar employ meta-ranking to provide relevant scholarly literature by aggregating:</p>
<ul>
<li><p>Citation counts</p>
</li>
<li><p>Author prominence</p>
</li>
<li><p>Publication date</p>
</li>
<li><p>Relevance to the search query</p>
</li>
<li><p>Document type (e.g., journal article, conference paper, book)</p>
</li>
</ul>
<h2 id="heading-challenges-and-ethical-considerations-in-reranking-and-meta-ranking">Challenges and Ethical Considerations in Reranking and Meta-Ranking</h2>
<p>While these advanced ranking techniques offer significant benefits, they also present several challenges:</p>
<ul>
<li><p><strong>Scalability and Performance:</strong> Combining multiple ranking systems can be computationally intensive, requiring optimized algorithms to maintain low latency.</p>
</li>
<li><p><strong>Bias and Fairness:</strong> Meta-ranking systems must be carefully designed to avoid amplifying biases in individual ranking models.</p>
</li>
<li><p><strong>Transparency and Explainability:</strong> As ranking systems become more complex, explaining why certain results are ranked higher becomes increasingly difficult.</p>
</li>
<li><p><strong>Data Quality and Consistency:</strong> Reliable results require ensuring data integrity and managing discrepancies between different ranking systems.</p>
</li>
<li><p><strong>Privacy Concerns:</strong> Using personalized data in reranking raises questions about user privacy and data protection.</p>
</li>
</ul>
<h2 id="heading-the-future-of-reranking-and-meta-ranking">The Future of Reranking and Meta-Ranking</h2>
<p>As search technology continues to evolve, several exciting trends are emerging:</p>
<ul>
<li><p><strong>Deep Learning Integration:</strong> Advanced neural network architectures promise to improve the fusion of heterogeneous ranking signals and adapt more dynamically to user needs.</p>
</li>
<li><p><strong>Real-time Personalization:</strong> Future meta-ranking systems may incorporate real-time user behavior and contextual signals to provide highly personalized search experiences.</p>
</li>
<li><p><strong>Cross-Domain Ranking:</strong> Meta-ranking systems will become more adept at combining rankings across diverse domains (e.g., text, images, videos, and interactive content).</p>
</li>
<li><p><strong>Federated Meta-Ranking:</strong> With growing concerns about data privacy, federated learning approaches may enable meta-ranking systems to aggregate rankings from decentralized sources without compromising user data.</p>
</li>
<li><p><strong>Explainable AI in Meta-Ranking:</strong> Future research will likely focus on developing meta-ranking models that clearly explain their ranking decisions, enhancing user trust and system transparency.</p>
</li>
</ul>
<p>As we look to the future, reranking and meta-ranking will be increasingly crucial in navigating digital information’s vast and complex landscape. By embracing these advanced techniques and staying attuned to evolving search technologies, businesses, and content creators can ensure their online presence remains relevant and valuable in an ever-changing digital ecosystem.</p>
<p><a target="_blank" href="https://swirlaiconnect.com/product/co-pilot"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720469728108/1f3e0878-2914-4906-8f68-3624f00288ac.jpeg" alt class="image--center mx-auto" /></a></p>
<h2 id="heading-swirl-co-pilot-and-intelligent-meta-ranking">SWIRL Co-Pilot and Intelligent Meta-ranking</h2>
<p>SWIRL uses meta-ranking to refine search results beyond the initial ranking produced by traditional search algorithms.</p>
<ol>
<li><p><strong>Initial Search:</strong> SWIRL’s search engine first retrieves potentially relevant documents or information based on the user’s query.</p>
</li>
<li><p><strong>Meta-ranking Layer:</strong> This is where the magic happens. SWIRL’s AI models analyze the initial results, considering additional signals such as the user’s context, previous searches, and document relationships.</p>
</li>
<li><p><strong>Re-Ranking:</strong> Based on this analysis, SWIRL re-ranks the results, prioritizing the most likely relevant and useful to the user in their specific context.</p>
</li>
</ol>
<p>Leverage <a target="_blank" href="swirlaiconnect.com">SWIRL Co-Pilot</a> in your Enterprise. Let’s figure out how you can solve AI challenges in the enterprise together.</p>
<hr />
<h2 id="heading-subscribe-to-our-newsletter-bringing-ai-to-the-data">Subscribe to our newsletter "Bringing AI to the Data."</h2>
<p><a target="_blank" href="https://www.linkedin.com/newsletters/bringing-ai-to-the-data-7201909550860427264/"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720469759680/24df80a8-d39c-44cb-939a-9811057f8961.jpeg" alt class="image--center mx-auto" /></a></p>
<p>Click on the image, or here's the <a target="_blank" href="https://www.linkedin.com/newsletters/bringing-ai-to-the-data-7201909550860427264/">link</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Accelerate Your Career 👩🏻‍💻 by Contributing to these 9 Repositories 🔥]]></title><description><![CDATA[Explore these nine repositories to stand out in different areas of software development. Go from Junior to Senior Development.


Hello Dev Community,
I'm thrilled to present a list of nine open-source repositories spanning various software developmen...]]></description><link>https://blog.srbhr.com/accelerate-your-career-by-contributing-to-these-9-repositories</link><guid isPermaLink="true">https://blog.srbhr.com/accelerate-your-career-by-contributing-to-these-9-repositories</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Saurabh Rai]]></dc:creator><pubDate>Tue, 21 May 2024 20:14:10 GMT</pubDate><content:encoded><![CDATA[<blockquote>
<p>Explore these nine repositories to stand out in different areas of software development. Go from Junior to Senior Development.</p>
</blockquote>
<hr />
<p>Hello Dev Community,</p>
<p>I'm thrilled to present a list of nine open-source repositories spanning various software development domains.</p>
<p>From Artificial Intelligence to Blockchain, Databases, and Backend Development. This list also touches upon API Management, Web Development, and the crucial areas of Authentication and Security.</p>
<p><strong>Here's how you can navigate this roadmap</strong>:</p>
<ul>
<li><p>Dive into <strong>9 Open Source Repositories</strong> encapsulating the essence of varied software development fields.</p>
<ul>
<li><p>Begin exploring the GitHub Profiles of the listed repositories.</p>
</li>
<li><p>Stay updated and show appreciation by ⭐️ starring these repositories on GitHub. Engage deeper by joining their Slack or Discord communities.</p>
</li>
<li><p>Remember, contributing to open source is akin to building in public. It's a testament to your skills and boosts your professional credibility.</p>
</li>
</ul>
</li>
<li><p>Supplement your journey with <strong>extra resources</strong> on system design.</p>
</li>
<li><p>As a <strong>bonus</strong>, check our upcoming Webinar.</p>
</li>
</ul>
<hr />
<h2 id="heading-open-source-repositories-to-get-started">Open Source Repositories to Get Started</h2>
<h3 id="heading-1-swirlhttpsgithubcomswirlaiswirl-search">1. <a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl</a></h3>
<h4 id="heading-learn-about-artificial-intelligence-and-large-language-models">❇️ Learn about Artificial Intelligence and Large Language Models</h4>
<p><a target="_blank" href="https://github.com/swirlai/swirl-search"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9icq3q8vmtzrse1cbqcj.gif" alt="Swirl Search" /></a></p>
<p>{% cta <a target="_blank" href="https://github.com/swirlai/swirl-search">https://github.com/swirlai/swirl-search</a> %} Give ⭐ to Swirl {% endcta %}</p>
<p><strong>Swirl</strong>, is a search platform that changes how you interact with your data.</p>
<p>Think of it as ChatGPT explicitly tailored for your unique datasets. Whether it's notes, code snippets, PDF files, or emails, Swirl is your go-to platform for instant, AI-driven insights.</p>
<p><strong>Features that set Swirl apart</strong>:</p>
<ul>
<li><p><strong>Universal Search</strong>: Seamlessly search through notes, codes, docs, databases, emails, chats, logs, and more.</p>
</li>
<li><p><strong>Versatile Answer Formats</strong>: Get responses in ChatGPT, BingAI, or Bard styles.</p>
</li>
<li><p><strong>Time Saver</strong>: Become more efficient with instant answers, turning Swirl into your ultimate knowledge companion.</p>
</li>
<li><p><strong>Personal AI-Powered Knowledge Assistant</strong>: You can build a secure, searchable knowledge base for your company, startup or personal data.</p>
</li>
</ul>
<p><strong>Contributing to Swirl will help you to understand and gain knowledge about</strong>:</p>
<ul>
<li><p><strong>AI Integration</strong>: Dive deep into the integration of AI and Large Language Models, skills in high demand today.</p>
</li>
<li><p><strong>API Mastery</strong>: Learn about Application Programming Interfaces (API) and their platform integration.</p>
</li>
<li><p><strong>Holistic Development</strong>: Enhance your expertise in Python, UI/UX design, and the fusion of App Development with Machine Learning.</p>
</li>
</ul>
<p><strong>Ready to explore?</strong><br />🌟 <strong>Give Swirl a ⭐️ on GitHub!</strong><br />🔗 : <a target="_blank" href="https://github.com/swirlai/swirl-search">https://github.com/swirlai/swirl-search</a></p>
<hr />
<h3 id="heading-2-clickvotehttpsgithubcomclickvoteclickvote">2. <a target="_blank" href="https://github.com/clickvote/clickvote">Clickvote</a></h3>
<h4 id="heading-for-understanding-full-stack-development">❇️ For Understanding Full Stack Development</h4>
<p><a target="_blank" href="https://github.com/clickvote/clickvote"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/srl5864zx33ivs6ljhfg.gif" alt="Clickvote" /></a></p>
<p>{% cta <a target="_blank" href="https://github.com/clickvote/clickvote">https://github.com/clickvote/clickvote</a> %} Give ⭐ to Clickvote {% endcta %}</p>
<p>Clickvote allows you to integrate voting into any platform. Clickvote takes the hassle of building your reaction components around your content.</p>
<ul>
<li><p>Showing <strong>real-time updates</strong> of likes, upvotes, and reviews between clients.</p>
</li>
<li><p>Learn about your members through deep analytics.</p>
</li>
<li><p>Deal with an unlimited amount of clicks per second.</p>
</li>
</ul>
<p>It's an exciting way to learn web component development and how to integrate features and services onto different platforms. And you will learn about:</p>
<ul>
<li><p>Integrating features and services onto different platforms.</p>
</li>
<li><p>Build cross-platform developer components for</p>
<ul>
<li><p>React</p>
</li>
<li><p>Svelte</p>
</li>
<li><p>Vue, etc.</p>
</li>
</ul>
</li>
</ul>
<p><strong>Give Clickvote a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/clickvote/clickvote">https://github.com/clickvote/clickvote</a></p>
<hr />
<h3 id="heading-3-chainlinkhttpsgithubcomsmartcontractkitchainlink">3. <a target="_blank" href="https://github.com/smartcontractkit/chainlink">Chainlink</a></h3>
<h4 id="heading-for-blockchain-lovers">❇️ For Blockchain Lovers</h4>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7esahd0fywl5hqjk4ht.jpg" alt="Chainlink" /></p>
<p>{% cta <a target="_blank" href="https://github.com/smartcontractkit/chainlink">https://github.com/smartcontractkit/chainlink</a> %} Give ⭐ to Chainlink {% endcta %}</p>
<p>Chainlink expands the capabilities of smart contracts by enabling access to real-world data and off-chain computation while maintaining the security and reliability guarantees inherent to blockchain technology.</p>
<p>It's written in Go, Solidity and Typescript. For people who want to learn how smart contracts work on blockchain technology.</p>
<p><strong>Give Chainlink a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/smartcontractkit/chainlink">https://github.com/smartcontractkit/chainlink</a></p>
<hr />
<h3 id="heading-4-boxyhqjacksonhttpsgithubcomboxyhqjackson">4. <a target="_blank" href="https://github.com/boxyhq/jackson">BoxyHQ/Jackson</a></h3>
<h4 id="heading-understanding-secure-authentication">✴️ Understanding Secure Authentication</h4>
<p><a target="_blank" href="https://github.com/boxyhq/jackson"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48r6hs2nb7fcg2s6czc4.jpg" alt="BoxyHQ Jackson" /></a></p>
<p>{% cta <a target="_blank" href="https://github.com/boxyhq/jackson">https://github.com/boxyhq/jackson</a> %} Give ⭐ to Jackson {% endcta %}</p>
<p>SAML stands for <em>Security Assertion Markup Language</em>. It is an XML-based open standard for transferring identity data between two parties. And SAMLJackson from BoxyHQ helps you to bring this to your enterprise.</p>
<p>Its features include:</p>
<ul>
<li><p>Streamline your web application's authentication with Jackson</p>
</li>
<li><p>Jackson supports SAML and OpenID Connect protocols</p>
</li>
<li><p>Jackson offers enterprise-grade Single Sign-On</p>
</li>
<li><p>Enables Directory Sync through the SCIM 2.0 protocol</p>
</li>
</ul>
<p>By contributing to SAMLJackson, you will learn about the following:</p>
<ul>
<li><p>How to perform Secure Authentication.</p>
</li>
<li><p>Integrating SSO services into your application.</p>
</li>
<li><p>It's built-in Typescript.</p>
</li>
</ul>
<p><strong>Give Jackson a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/boxyhq/jackson">https://github.com/boxyhq/jackson</a></p>
<hr />
<h3 id="heading-5-firecamphttpsgithubcomfirecamp-devfirecamp">5. <a target="_blank" href="https://github.com/firecamp-dev/firecamp">Firecamp</a></h3>
<h4 id="heading-learn-how-to-create-application-programming-interfaces-api">✴️ Learn how to create Application Programming Interfaces (API)</h4>
<p><a target="_blank" href="https://github.com/firecamp-dev/firecamp"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ifbqsrlre4f3ax215sum.jpg" alt="Firecamp" /></a></p>
<p>{% cta <a target="_blank" href="https://github.com/firecamp-dev/firecamp">https://github.com/firecamp-dev/firecamp</a> %} Give ⭐ to Firecamp {% endcta %}</p>
<p>Firecamp calls itself the VSCode for API Development. Using Firecamp's services, you can design, develop, test, and document your APIs effortlessly.</p>
<p>It has a user-friendly interface and a range of powerful features. It streamlines the API development workflow and enhances collaboration among team members.</p>
<p>Contribute to Firecamp to learn about:</p>
<ul>
<li><p>How does API Development work?</p>
</li>
<li><p>How two (or more) applications communicate via APIs.</p>
</li>
</ul>
<p><strong>Give Firecamp a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/firecamp-dev/firecamp">https://github.com/firecamp-dev/firecamp</a></p>
<hr />
<h3 id="heading-6-resume-matcherhttpsgithubcomsrbhrresume-matcher">6. <a target="_blank" href="https://github.com/srbhr/Resume-Matcher/">Resume Matcher</a></h3>
<h4 id="heading-learn-about-creating-python-based-ai-applications">✴️ Learn about creating Python-based AI applications</h4>
<p><a target="_blank" href="https://github.com/srbhr/Resume-Matcher/"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqeg9grzrwzi9awzozwa.gif" alt="Resume Matcher" /></a></p>
<p>{% cta <a target="_blank" href="https://github.com/srbhr/Resume-Matcher/">https://github.com/srbhr/Resume-Matcher/</a> %} Give ⭐ to Resume Matcher {% endcta %}</p>
<p>Resume Matcher is an open-source tool to improve your resume with the help of artificial intelligence. It takes your resume and job description to check their similarity and tests for the readability and keywords in your resume.</p>
<p>It allows you to:</p>
<ul>
<li><p>Pin-point where your resume needs to include proper keywords.</p>
</li>
<li><p>It gives AI-powered insights and where to improve it.</p>
</li>
<li><p>Improving your chances of getting your resume selected.</p>
</li>
</ul>
<p>Contributing it would help you to:</p>
<ul>
<li><p>Learn about Python Development</p>
</li>
<li><p>Understand Natural Language Processing and Machine Learning</p>
</li>
</ul>
<p>Give Resume Matcher a ⭐️ on GitHub. 👇 🔗: <a target="_blank" href="https://github.com/srbhr/Resume-Matcher/">https://github.com/srbhr/Resume-Matcher/</a></p>
<hr />
<h3 id="heading-7-novuhttpsgithubcomnovuhqnovu">7. <a target="_blank" href="https://github.com/novuhq/novu">Novu</a></h3>
<h4 id="heading-learn-about-notification-infrastructure">✳️ Learn about Notification Infrastructure</h4>
<p><a target="_blank" href="https://github.com/novuhq/novu"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9wrjx1ins4gboxlz6h0f.jpg" alt="Novu Infra" /></a></p>
<p>{% cta <a target="_blank" href="https://github.com/novuhq/novu">https://github.com/novuhq/novu</a> %} Give ⭐ to Novu {% endcta %}</p>
<p>Novu claims to be the ultimate service for managing multi-channel notifications with a single API.</p>
<p>With Novu, provides features like:</p>
<ul>
<li><p>Sending notifications through diverse channels: In-App, Push, Email, SMS, and Chat.</p>
</li>
<li><p>Crafting custom workflows tailored to your specific needs.</p>
</li>
<li><p>Defining conditions for each channel, ensuring impactful delivery to the intended audience.</p>
</li>
</ul>
<p>Contributing to Novu would help you to:</p>
<ul>
<li><p>Learn about how Notification Infrastructure works.</p>
</li>
<li><p>Learn how to build a service using Typescript and create multi-client consumers.</p>
</li>
</ul>
<p><strong>Give Novu a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/novuhq/novu">https://github.com/novuhq/novu</a></p>
<hr />
<h3 id="heading-8-postgresqlhttpsgithubcompostgrespostgres">8. <a target="_blank" href="https://github.com/postgres/postgres">PostgreSQL</a></h3>
<h4 id="heading-learn-about-relational-databases">✳️ Learn about relational databases</h4>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/atn22lse4a81sho1opfz.jpg" alt="PostgreSQL" /></p>
<p>{% cta <a target="_blank" href="https://github.com/postgres/postgres">https://github.com/postgres/postgres</a> %} Give ⭐ to PostgreSQL {% endcta %}</p>
<p>PostgreSQL, often known as Postgres, is an open-source relational database management system (RDBMS) emphasising extensibility and SQL compliance. It's known for its robustness, scalability, and ability to handle large volumes of data.</p>
<p>It allows you to:</p>
<ul>
<li><p>Manage and query large datasets with efficiency.</p>
</li>
<li><p>Extend its capabilities with custom functions using various programming languages.</p>
</li>
<li><p>Ensure data integrity and reliability with its ACID properties.</p>
</li>
</ul>
<p>Contributing to it would help you to:</p>
<ul>
<li><p>Deepen your understanding of database systems.</p>
</li>
<li><p>Learn about advanced SQL features and database extensibility.</p>
</li>
<li><p>Grasp the intricacies of database optimisation and performance tuning.</p>
</li>
</ul>
<p><strong>Give PostgreSQL a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/postgres/postgres">https://github.com/postgres/postgres</a></p>
<hr />
<h3 id="heading-9-redishttpsgithubcomredisredis">9. <a target="_blank" href="https://github.com/redis/redis">Redis</a></h3>
<h4 id="heading-explore-the-in-memory-data-structure-for-caching">✴️ Explore the in-memory data structure for caching</h4>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qzdsauh9ozszl6i2d1bl.jpg" alt="Redis" /></p>
<p>{% cta <a target="_blank" href="https://github.com/redis/redis">https://github.com/redis/redis</a> %} Give ⭐ to Redis {% endcta %}</p>
<p>Redis is an open-source, in-memory data structure store used as a database, cache, and message broker. It supports various data structures such as strings, hashes, and lists. Known for its blazing-fast performance, Redis is a favourite for real-time applications.</p>
<p>It allows you to:</p>
<ul>
<li><p>Store and retrieve data with lightning speed.</p>
</li>
<li><p>Implement caching mechanisms to optimise application performance.</p>
</li>
<li><p>Utilise its pub/sub capabilities for real-time messaging.</p>
</li>
</ul>
<p>Contributing to it would help you to:</p>
<ul>
<li><p>Learn about in-memory databases and their advantages.</p>
</li>
<li><p>Understand data structures and their efficient storage.</p>
</li>
<li><p>Delve into real-time application development and optimisation.</p>
</li>
</ul>
<p><strong>Give Redis a ⭐️ on GitHub.</strong> 👇 🔗: <a target="_blank" href="https://github.com/redis/redis">https://github.com/redis/redis</a></p>
<hr />
<h2 id="heading-extra-resources">Extra Resources</h2>
<h3 id="heading-system-design">System Design</h3>
<p>System design defines the architecture, components, and interfaces necessary to meet specific software requirements. It serves as the blueprint for the system and the project, ensuring scalability, performance, and maintainability. Mastering system design is crucial as it directly impacts any software solution's efficiency, reliability, and adaptability.</p>
<p>Here are some resources to get started with system design:</p>
<ul>
<li><p><a target="_blank" href="https://github.com/karanpratapsingh/system-design">A Popular System Design Resources Collection</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/channel/UCRPMAqdtSgd0Ipeef7iFsKw">YouTube Channel for System Design</a></p>
</li>
</ul>
<h3 id="heading-roadmaps-for-development">Roadmaps for Development</h3>
<p>Roadmaps are an exciting way to look at the development landscape. You can take a look at Roadmaps <a target="_blank" href="https://roadmap.sh/">here</a>.</p>
<hr />
<h2 id="heading-become-a-part-of-swirls-thriving-community"><strong>Become a Part of Swirl's Thriving Community</strong></h2>
<p>Connect with us on Swirl's Slack Community. Engage, learn, and collaborate with enthusiasts who, like you, are at the forefront of AI-driven search technology.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/49kcg6spfcdxdire1f1y.png" alt="Join Swirl's Slack Community" /></p>
<p>{% cta <a target="_blank" href="https://join.slack.com/t/swirlmetasearch/shared_invite/zt-1qk7q02eo-kpqFAbiZJGOdqgYVvR1sfw">https://join.slack.com/t/swirlmetasearch/shared_invite/zt-1qk7q02eo-kpqFAbiZJGOdqgYVvR1sfw</a> %} Join Swirl Slack Community 😃{% endcta %}</p>
<hr />
]]></content:encoded></item><item><title><![CDATA[7 Open-Source Search Engines for your website you should know.]]></title><description><![CDATA[A search engine is a software system that finds web pages that match a web search.

Search engines are important pieces of software embedded into every website. They allow the user to interact with all the content on your website at once. They retrie...]]></description><link>https://blog.srbhr.com/7-open-source-search-engines-for-your-website-you-should-know</link><guid isPermaLink="true">https://blog.srbhr.com/7-open-source-search-engines-for-your-website-you-should-know</guid><category><![CDATA[Python]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Search Engines]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Saurabh Rai]]></dc:creator><pubDate>Fri, 27 Oct 2023 15:41:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1698421047518/3a25dcbe-4a02-4c87-9908-a1676a63bac6.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>A search engine is a software system that finds web pages that match a web search.</p>
</blockquote>
<p>Search engines are important pieces of software embedded into every website. They allow the user to interact with all the content on your website at once. They retrieve and display data when a user searches for some information.</p>
<p>Understanding and implementing search bars or searching tools into your website or software is essential. At the same time, there are tools like Google Programmable Search for your specific use case. Bing, DuckDuckGo, and Google Search are widely available to search through the internet and access webpages, videos, etc.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#challenges-with-existing-search-engines">Challenges with existing search engines</a></p>
</li>
<li><p><a class="post-section-overview" href="#open-source-search-engines">Open source search engines</a></p>
</li>
<li><p><a class="post-section-overview" href="#swirl">Swirl</a></p>
</li>
<li><p><a class="post-section-overview" href="#apache-solr">Apache Solr</a></p>
</li>
<li><p><a class="post-section-overview" href="#apache-lucene">Apache Lucene</a></p>
</li>
<li><p><a class="post-section-overview" href="#elasticsearch">Elasticsearch</a></p>
</li>
<li><p><a class="post-section-overview" href="#meilisearch">Meilisearch</a></p>
</li>
<li><p><a class="post-section-overview" href="#typesense">Typesense</a></p>
</li>
<li><p><a class="post-section-overview" href="#opensearch">OpenSearch</a></p>
</li>
</ul>
<h2 id="heading-challenges-with-existing-search-engines">Challenges with existing search engines</h2>
<p>Enterprises and startups generate much data, such as user logs, payment logs, and customer data. This data is essential for modern businesses to stay competitive, but it must also be kept secret for legal and other reasons. Search engines also play a vital role in data management. They’re the accessors to the information stored in the vast databases, warehouses, and siloes.</p>
<p>An important point arises when you want to use a search for your startup, enterprise (big company), or self-hosted project. There are various limitations to using the search above providers, like Google PSE, Bing, etc.</p>
<p>There are many reasons why Enterprises and Startups might not want to use these search offerings:</p>
<ul>
<li><p>Data privacy</p>
</li>
<li><p>Vendor lock-in</p>
</li>
<li><p>Limited capacity</p>
</li>
<li><p>Self-hosting not available, etc.</p>
</li>
</ul>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/054i5wpxdanwamaxpa10.png" alt="Enterprise Search Bucket List that only Swirl Search can satisfy" /></p>
<h2 id="heading-open-source-search-engines">Open-source search engines</h2>
<p>Now, search engines existed since the 1990s. Since the start of the World Wide Web. W3Catalog was created in 1993. Open-source search engines are critical because they offer freedom and data privacy and are self-hosted. Let’s talk about the top 7 open-source search engines you should know (in no particular order).</p>
<h2 id="heading-swirl">Swirl</h2>
<p><a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl</a> is an open-source search platform software that simultaneously searches multiple content sources and returns AI-ranked results. You can also use Generative AI Models to get answers based on your data. It’s written in Python.</p>
<p>Swirl can connect to various data sources like:</p>
<ul>
<li><p>Databases (SQL &amp; NoSQL, Google BigQuery)</p>
</li>
<li><p>Public data services (Google Programmable Search, <a target="_blank" href="http://Arxiv.org">Arxiv.org</a>, etc.)</p>
</li>
<li><p>Enterprise sources (Microsoft 365, Jira, Miro, etc.)</p>
</li>
</ul>
<p>And generate insights with AI and LLMs like ChatGPT. Start discovering and developing the answers you need based on your data. It comes with an Apache 2.0 License and is easy to start. Swirl doesn’t re-index your data and can connect to various sources.</p>
<p><strong>GitHub</strong>: <a target="_blank" href="https://github.com/swirlai/swirl-search">https://github.com/swirlai/swirl-search</a> <strong>Slack</strong>: <a target="_blank" href="https://join.slack.com/t/swirlmetasearch/shared_invite/zt-1qk7q02eo-kpqFAbiZJGOdqgYVvR1sfw">Swirl Community Slack</a></p>
<p><a target="_blank" href="https://github.com/swirlai/swirl-search"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x9ontxlnwqgllg71nm3t.png" alt="Swirl Search" /></a></p>
<p>It’s a powerful search platform aimed at Enterprises and Startups alike. It is a good choice for organizations that need a scalable and reliable search solution.</p>
<hr />
<h2 id="heading-apache-solr">Apache Solr</h2>
<p>Apache Solr is an open-source enterprise search platform written in Java. It is built on top of the Apache Lucene search library and provides a variety of features for searching and indexing documents, including: It can search through the full text of your documents, including the title, body, and metadata. Real-time indexing and distributed search. This means Solr can be deployed in a distributed cluster to scale to meet the needs of large enterprises. It also comes with an Apache 2.0 license.</p>
<p>GitHub: <a target="_blank" href="https://github.com/apache/solr">https://github.com/apache/solr</a></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwesi1jgtfu8hib41nbk.png" alt="Apache Solr" /></p>
<hr />
<h2 id="heading-apache-lucene">Apache Lucene</h2>
<p>Apache Lucene is a high-performance, full-featured text search engine library in Java. It is a technology suitable for nearly any application requiring structured, full-text, faceting, nearest-neighbor search across high-dimensionality vectors, spell correction, or query suggestions.</p>
<p>Various popular search engines and applications use Lucene, including Elasticsearch, Solr, and Hadoop. It is also used in many custom search applications, such as e-commerce sites, news organizations, and enterprise search applications.</p>
<p>GitHub: <a target="_blank" href="https://github.com/apache/lucene">https://github.com/apache/lucene</a></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yfc6pvun40k7mtklckmh.png" alt="Apache Lucene" /></p>
<hr />
<h2 id="heading-elasticsearch">Elasticsearch</h2>
<p>Elasticsearch is a distributed search and analytics engine built on top of Apache Lucene. It is known for its speed, scalability, and ease of use. Various organizations, including e-commerce sites, news organizations, and government agencies use Elasticsearch.</p>
<p>Note: Elasticsearch has undergone a license change, and users might need to check which category they fall into for their particular use case.</p>
<p>GitHub:<a target="_blank" href="https://github.com/elastic/elasticsearch">https://github.com/elastic/elasticsearch</a></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/udgiyid4tcbiw7nh3fnd.png" alt="Image description" /></p>
<hr />
<h2 id="heading-meilisearch">Meilisearch</h2>
<p>Meilisearch is an open-source, lightning-fast search engine that makes adding search to your website or application easy. It is designed to be simple to use and integrate while still being robust and customizable. Meilisearch offers several features that make it a good choice for a variety of use cases, including:</p>
<ul>
<li><p>Speed</p>
</li>
<li><p>Accuracy</p>
</li>
<li><p>Ease of use</p>
</li>
<li><p>Customization</p>
</li>
</ul>
<p>GitHub: <a target="_blank" href="https://github.com/meilisearch/meilisearch">https://github.com/meilisearch/meilisearch</a></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7qqstis8a38dgugwzo5a.png" alt="Meilisearch" /></p>
<hr />
<h2 id="heading-typesense">TypeSense</h2>
<p>Typesense is an open-source, typo-tolerant search engine optimized for instant searches while providing an intuitive developer experience. It is a lightweight yet robust and scalable alternative to Elasticsearch and Algolia.</p>
<p>It's fast, typo-tolerant, easy to use, and scalable.</p>
<p>GitHub: <a target="_blank" href="https://github.com/typesense/typesense">https://github.com/typesense/typesense</a></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9wvfjpboe4vf9v43ih8u.png" alt="typesense" /></p>
<hr />
<h2 id="heading-opensearch">OpenSearch</h2>
<p>OpenSearch is an open-source, community-driven search and analytics suite derived from Elasticsearch. It provides a highly scalable system for fast access and response to large volumes of data with an integrated visualization tool, OpenSearch Dashboards, making it easy for users to explore their data.</p>
<p>OpenSearch indexes your data and stores it in a distributed cluster of nodes. When a user performs a search, OpenSearch queries the cluster and returns a list of results that are relevant to the user's query.</p>
<p>GitHub: <a target="_blank" href="https://github.com/opensearch-project/OpenSearch">https://github.com/opensearch-project/OpenSearch</a></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9imczmw1razllgtcfzsg.png" alt="OpenSearch" /></p>
<hr />
<h2 id="heading-contribute-to-swirl">Contribute to Swirl</h2>
<p>The <a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl</a> search community seeks excellent contributors. There’s a lot of things to learn. Swirl is written in Python and Django. It’s easy and lightweight to get started with. You can:</p>
<ul>
<li><p>Create a tutorial with Swirl.</p>
</li>
<li><p>Contribute to the UI of the Swirl Search, which is in React.</p>
</li>
<li><p>Work on adding a search provider or a connector.</p>
</li>
<li><p>Join our <a target="_blank" href="https://join.slack.com/t/swirlmetasearch/shared_invite/zt-1qk7q02eo-kpqFAbiZJGOdqgYVvR1sfw">Slack</a> and hang around.</p>
</li>
</ul>
<p>Give Swirl a ⭐️ Star on <a target="_blank" href="https://github.com/swirlai/swirl-search">GitHub.</a></p>
]]></content:encoded></item><item><title><![CDATA[Retrieval Augmented Generation (RAG): How to Get Large Language Models Learn Your Data & Give You Answers]]></title><description><![CDATA[With the growing AI and Large Language Models, there is a higher demand for people wanting to get answers from their data sources. Prompting them to integrate various methods to search and retrieve data from different sources and passing them to thes...]]></description><link>https://blog.srbhr.com/retrieval-augmented-generation-rag-how-to-get-large-language-models-learn-your-data-give-you-answers</link><guid isPermaLink="true">https://blog.srbhr.com/retrieval-augmented-generation-rag-how-to-get-large-language-models-learn-your-data-give-you-answers</guid><category><![CDATA[Python]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[Machine Learning]]></category><dc:creator><![CDATA[Saurabh Rai]]></dc:creator><pubDate>Thu, 21 Sep 2023 20:41:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1695327408972/163e1a3a-20df-4b3a-b551-fd66516d1882.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With the growing AI and Large Language Models, there is a higher demand for people wanting to get answers from their data sources. Prompting them to integrate various methods to search and retrieve data from different sources and passing them to these AI Models has become critical. <strong>Retrieval Augmented Generation</strong>, or RAG, is a potential solution for this.</p>
<h2 id="heading-ai-and-generating-human-like-responses">AI and Generating Human-Like Responses.</h2>
<p>Tracing back to 2013, the AI landscape was vastly different. The buzz was about simple neural networks, the foundational building blocks that paved the way for future advancements. People were happy if they could quickly train and get good scores on MNIST.</p>
<p>Later, we got deep neural networks capable of performing tasks in areas like image and speech recognition, outperforming traditional algorithms.</p>
<p>But the real change came in November 2022. When OpenAI launched ChatGPT. It took the world by storm. Amassing 100 Million+ users in just 2 months, this has been the most significant moment in internet and AI history.</p>
<p>Not just because it can perform multiple tasks but because its capability surprised many people. It could understand human-like responses and answer a lot of questions in the same manner. Which earlier wasn't possible.</p>
<p>And after that, large language models have taken the world by storm. We're seeing the rise of AI startups and enterprises developing their own large language models. Companies adopting this technology in their own workspaces. There is a lot of debate on how to fine-tune large language models to improve performance. Generating summaries and what not.</p>
<p>The question becomes, can anyone use their own data, pass it to the LLM, and get it to generate insights on the fly?</p>
<p>Yes, anyone can use their data. PDFs, multiple code files, answers from databases and more. And get answers from your Generative AI tool. But this creates two diverse approaches to this problem. Fine-tuning and Retrieval Augmented Generation.</p>
<h2 id="heading-retrieval-augmented-generation-aka-rag">Retrieval Augmented Generation aka RAG ✨</h2>
<p>Retrieval Augmented Generation (RAG) is a recent advancement in Artificial Intelligence. It's a form of Open Domain Question Answering with a Retriever and a Generative AI Model. It combines a search system with AI models like ChatGPT, Llama2, etc. With RAG, the system searches a vast knowledge base for up-to-date data and articles. This data is then used by the AI to give precise answers. This method helps reduce errors in AI responses and offers more customized solutions.</p>
<p>So, with RAG, the retriever or searcher can access the latest data, sources, and other important articles from a very large knowledge base. And then it provides it as input to the Generative AI Model. Hence the name Retriever Augmented Generation. This approach allows the Large Language Model to tap into a vast knowledge base and provide relevant and to-the-point information.</p>
<p>This significantly improves the problem of hallucination faced by large language models. And can provide tailored answers for you.</p>
<h3 id="heading-why-use-retrieval-augmented-generation-arent-current-ai-models-enough">Why Use Retrieval Augmented Generation? Aren't Current AI Models Enough?</h3>
<p>Current Generation AI Models have a cutoff period after which they stop training. Due to that, I asked for events that happened after that. Attempting to retrieve recent information can be a challenge.</p>
<p><em>Take a look at this example. Asking ChatGPT about BUN</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1695328363705/09fc32be-2c32-468e-8f5c-a0998ec648a7.png" alt class="image--center mx-auto" /></p>
<p>ChatGPT Recommends:</p>
<blockquote>
<p>I would recommend checking the official documentation or repositories, tech news websites, or relevant community forums.</p>
</blockquote>
<p>Can we not send the text of these documents, repositories, websites, and community forums directly into ChatGPT and get the relevant answers? And RAG helps here.</p>
<p>And not just about BUN. But what if, in the same manner, you wanted to query your company's data and know insights and answers relevant to your own data without making it public.</p>
<p>And this is where Retrieval Augmented Generation shines and provides answers with sources. And, while on the question of connecting multiple data sources. Swirl can help you solve the problem quickly.</p>
<ul>
<li><p>Connect to various data sources.</p>
</li>
<li><p>Swirl can perform query processing via ChatGPT.</p>
</li>
<li><p>Re-ranking and getting the top-N answers via spaCy's Large Language Model. (Cosine Relevancy Processor)</p>
</li>
</ul>
<h3 id="heading-rag-vs-fine-tuning">RAG vs. Fine-Tuning</h3>
<h4 id="heading-what-is-fine-tuning">What is Fine Tuning?</h4>
<p>Fine-tuning a Large Language Model means retraining any large language model on a dataset and making it really good for a subtask. People have fine tune LLaMa2 LLM for various tasks like writing SQL, Python Code, etc. <a target="_blank" href="https://www.anyscale.com/blog/fine-tuning-llama-2-a-comprehensive-case-study-for-tailoring-models-to-unique-applications">ref</a></p>
<p>While this is good for tasks with massive and static data like Python syntax, SQL, etc... The problem comes when you want to train it on something new or when no large dataset is available.<br />If the dataset keeps changing, you must retrain the model to keep up with the changes. And this is expensive.</p>
<p>Consider coding it on documentation of BUN, Astro, Swirl, or your company's documents. Also, note fine-tuning makes it good at a specific task. It may be that you won't be able to access the source or get the relevant citations for that source.</p>
<h4 id="heading-can-you-do-fine-tuning">Can you do fine-tuning?</h4>
<p>Answer these questions:</p>
<ol>
<li><p>Do you have the engineers and hardware required for training a Large Language Model?</p>
</li>
<li><p>Do you have the data necessary to get good answers from the Large Language Model?</p>
</li>
<li><p>Do you have Time?</p>
</li>
</ol>
<p>If the answer to any of these three questions is "no." Then, you need to reconsider fine-tuning. And opt-in for a better and more accessible alternative.</p>
<h4 id="heading-rag-fits-the-scenarios-where-fine-tuning-doesnt">RAG Fits the scenarios where Fine Tuning Doesn't.</h4>
<ul>
<li><p>Small documentations.</p>
</li>
<li><p>Articles, research papers, blogs.</p>
</li>
<li><p>Newly created code bases, etc.</p>
</li>
</ul>
<p>Generating answers from them is easier than you think. While there are many options with which you can create a RAG Pipeline. But Swirl makes both the parts, Retrieval and Generation, easier.<br />Swirl can search and provide the top-N best answers from the search query and software models. Check our <a target="_blank" href="https://github.com/swirlai/swirl-search">GitHub</a>.</p>
<h2 id="heading-contribute-to-swirl">Contribute to Swirl 🌌</h2>
<p><a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl</a> is an open-source library in Python 🐍. And we're looking for people to help build this software. Looking for fantastic people who can:</p>
<ul>
<li><p>Create excellent articles, enhance our readme, UI, etc.</p>
</li>
<li><p>Contribute by adding a connector or search provider.</p>
</li>
<li><p>Join our community on <a target="_blank" href="https://join.slack.com/t/swirlmetasearch/shared_invite/zt-1qk7q02eo-kpqFAbiZJGOdqgYVvR1sfw">Slack</a>.</p>
</li>
</ul>
<p><strong>It would mean a lot if you could</strong> <a target="_blank" href="https://github.com/swirlai/swirl-search"><strong>give us a 🌟 on GitHub</strong></a><strong>. Keeps the team motivated.</strong> 🔥</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1695328396618/d45300b5-69e7-449a-83a8-bba5c240d5c6.gif" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Creating an Open Source Search Platform: Search Engines with AI - Swirl]]></title><description><![CDATA[Before wasting time, let me introduce Swirl. This unified open-source search platform built with Python and Django seamlessly unifies searches across databases (SQL and NoSQL), cloud services, search providers, data siloes, and tools like Miro, Jira,...]]></description><link>https://blog.srbhr.com/creating-an-open-source-search-platform-search-engines-with-ai-swirl</link><guid isPermaLink="true">https://blog.srbhr.com/creating-an-open-source-search-platform-search-engines-with-ai-swirl</guid><category><![CDATA[Python]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[chatgpt]]></category><dc:creator><![CDATA[Saurabh Rai]]></dc:creator><pubDate>Fri, 15 Sep 2023 15:00:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1694170039789/ae07511e-f5c8-42c8-a0f7-ac154f1ac372.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Before wasting time, let me introduce <strong>Swirl</strong>. This unified open-source search platform built with Python and Django seamlessly unifies searches across databases (SQL and NoSQL), cloud services, search providers, data siloes, and tools like Miro, Jira, GitHub, etc.</p>
<p>With Swirl, users can conduct a single query, instantly pooling and presenting relevant data from multiple platforms in one consolidated UI.</p>
<h4 id="heading-swirl-on-githubhttpsgithubcomswirlaiswirl-search"><a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl on GitHub</a> 👇</h4>
<p>Link: <a target="_blank" href="https://github.com/swirlai/swirl-search"><strong>https://github.com/swirlai/swirl-search</strong></a> <strong>🌌</strong></p>
<p><a target="_blank" href="https://github.com/swirlai/swirl-search"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694376821293/136c23f2-002b-4d50-90dd-483d2c61b941.png" alt class="image--center mx-auto" /></a></p>
<h2 id="heading-the-hunt-for-open-source-search-platforms">The Hunt for Open Source Search Platforms 🕵️‍♀️</h2>
<p>Search is everywhere in our daily lives. Giants like Google Search, Bing, and Duck Duck make it easy for us to find information at the click of a button.</p>
<p>However, the choices are somewhat limited for businesses, startups, and developers looking to incorporate search functionality into their platforms without being bound to these major players. Most enterprise-level search engines come with licensing fees or restrictions. Integration options such as Google's Programmable Search Engine and Algolia are powerful. Still, they might not always cater to the specific needs of all businesses, especially when customization and self-hosting are concerned.</p>
<p>This brings out the need for open-source search engines. For all the users trying to integrate search into their platforms, <a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl</a> serves as one of the best choices. Built on Python, and it's highly customizable. Being free and open-source, it carries the Apache 2.0 License, which means developers and businesses can utilize and modify it without any licensing costs. The teams can contribute towards its development by doing improvements, bug fixes, and feature enhancements.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694372252401/40c1ce62-0977-486d-acb4-4e1d21f8f61a.png" alt="Swirl is an open source search engine" class="image--center mx-auto" /></p>
<h2 id="heading-dealing-with-many-data-sources-data-bases-and-data-siloes">Dealing with Many Data Sources, Data Bases, and Data Siloes ☹</h2>
<p>As any startup or company grows, so does the size of its data and databases. Eventually, the complexity of finding the correct information increases as well. As these organizations expand, they inevitably accumulate data in various forms – traditional documents, code repositories, spreadsheets, or more structured databases like SQL and NoSQL. The real challenge, however, is not just storing this large volume of data but efficiently retrieving the information when needed.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694372819028/9f4cb99e-d084-46be-862c-7477d03e42c6.jpeg" alt="Where's the data?" class="image--center mx-auto" /></p>
<p><em>So, in which database is our document lying? Is it in USE_CASE_1 or USE_CASE_2?</em><br /><em>A typical scenario is when you need data and don't know where.</em></p>
<p>The diversity of data sources adds another layer of complexity. Imagine sifting through a vast library where books, journals, handwritten notes, and digital records are all stored haphazardly. Sounds daunting, right? That’s precisely the scenario many businesses face today. Different data types, coupled with isolated data siloes, can make it a Herculean task for employees to locate the correct information promptly.</p>
<p>Swirl connects to multiple data sources and can search in all. Swirl is a centralized hub, enabling streamlined searches across all integrated data sources. This simplifies the search process and ensures that no crucial information gets overlooked because of its origin or format.</p>
<h2 id="heading-using-llms-with-search-and-bringing-multiple-data-sources-together">Using LLMs with Search and Bringing Multiple Data Sources Together 🤝</h2>
<p>Swirl distributes user queries to search engines, databases, and other enterprise cloud services using their existing APIs and standards-based security mechanisms like OAuth2. Swirl asynchronously normalizes and re-ranks the unified results using large language models.</p>
<p>Let's understand how Swirl works.</p>
<ol>
<li><p>The user provides the data sources to which Swirl integrates.</p>
</li>
<li><p>The user creates a query to search for.</p>
</li>
<li><p>Swirl sends those queries to each source.</p>
</li>
<li><p>Get the response and find the best using LLMs.</p>
</li>
<li><p>Swirl then gets the citations in an async pipe.</p>
</li>
<li><p>It then fetches the top results and creates a prompt.</p>
</li>
<li><p>It sends the data + prompt to ChatGPT (or any LLM).</p>
</li>
<li><p>Swirl returns answers with ChatGPT insights.</p>
</li>
</ol>
<h4 id="heading-diagram-explaining-swirl-search-with-chatgpt-as-a-configured-llm">Diagram Explaining Swirl Search with ChatGPT as a configured LLM</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694374282995/42f99fa3-a552-4b30-bc1b-7f27267fe79f.png" alt="Diagram explaining Swirl's Process" class="image--center mx-auto" /></p>
<p><em>A diagram explaining how Swirl can work with multiple data sources and provide results with ChatGPT insights.</em></p>
<p>The whole search process is simplified, and setting up Swirl is pretty straightforward. To state Raman Ramanenkou of Sense.</p>
<blockquote>
<p>“<em>Setting up and running Swirl in a Docker container is incredibly straightforward—it takes just a few minutes.</em><br /><em>~</em> Raman Ramanenkou of Sense</p>
</blockquote>
<p>Data privacy and security are essential while searching. People should only be able to search for information they can access in any corporation. Swirl incorporates OAuth2 authentication. This means that the access and visibility of data are tightly controlled based on the credentials of the individual searching. It ensures that sensitive information remains restricted, and only those with the necessary permissions can view it.</p>
<p>Therefore, someone who doesn't have access to critical files cannot search for them or even know that they exist.</p>
<h2 id="heading-retrieval-augmented-generation-rag-using-swirl">Retrieval Augmented Generation (RAG) using Swirl ✨</h2>
<p><a target="_blank" href="https://research.ibm.com/blog/retrieval-augmented-generation-RAG">Retrieval Augmented Generation</a> (RAG) is a technique where information retrieval is combined with text generation. In simpler terms, RAG first fetches relevant data by searching and then crafts an answer based on that data using Large Language Models; a widely popular example is Bing AI Chat. You can create a dynamic knowledge base by implementing RAG on your data sets.</p>
<p>Swirl helps you create a chatbot for your data with ease. You can integrate the power of ChatGPT enterprise with Swirl and then generate answers on the fly. You don't need any extra database to store any information. Just search.</p>
<p>Swirl can retrieve accurate information and obtain answers complete with citations to the original documents. This will supercharge your productivity. And you will have reliable and referenced information at your fingertips.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694376809828/c977af92-3553-437c-a868-298c09b491ab.png" alt="RAG with Swirl" class="image--center mx-auto" /></p>
<p><em>An example is when we search for</em> <a target="_blank" href="https://www.linkedin.com/in/sidprobstein/"><em>Sid Probstein</em></a> <em>using ChatGPT and then search again using Swirl's RAG pipeline. We get the document used for generating the answer in the link at the bottom left.</em></p>
<h2 id="heading-get-started-with-swirl">Get Started with Swirl 💻</h2>
<p>If you want to try Swirl and get it up and running at no cost. Head to the GitHub page and check it out. 👇</p>
<p>GitHub 🔗: <a target="_blank" href="https://github.com/swirlai/swirl-search">Swirl on GitHub 🌌</a></p>
<p>💿Installing instructions: <a target="_blank" href="https://github.com/swirlai/swirl-search#try-swirl-now-in-docker">Getting started with Swirl</a></p>
<p>📃 Documentation: <a target="_blank" href="https://github.com/swirlai/swirl-search/wiki">Swirl Wiki</a></p>
<p>A snapshot of Swirl UI when running</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694376799384/937f5a60-c7c9-47a5-a322-b70ca187f68f.png" alt="Swirl Search Engine" class="image--center mx-auto" /></p>
<p><em>Swirl in Action with the Galaxy UI</em></p>
<hr />
<p>Swirl is a community-driven 👩‍💻 open-source project. We welcome individuals interested in creating a search platform and contributing to the project's development. If you are interested in learning about the project and want to contribute or begin your open-source journey with us. We'd gladly guide you and help you understand and create your first open-source contribution. 🤗</p>
<p><a target="_blank" href="https://join.slack.com/t/swirlmetasearch/shared_invite/zt-22ozfml3o-oqe7sWvB5jw6xEwv1duW4g">Join our Slack Community.</a> 💖</p>
<p>Please give us a Star 🌟 on <a target="_blank" href="https://github.com/swirlai/swirl-search">GitHub</a>.</p>
<p><a target="_blank" href="https://twitter.com/SWIRL_SEARCH">Follow us on Twitter/𝕏</a> for updates.</p>
]]></content:encoded></item><item><title><![CDATA[Understanding Lists in Python: An In-Depth Overview]]></title><description><![CDATA[Python lists are an extremely versatile and extensively used data structure. That can store diverse collections of items, regardless of their type or combination of types. This article aims to dive deep into Python lists, memory management and list c...]]></description><link>https://blog.srbhr.com/understanding-lists-in-python</link><guid isPermaLink="true">https://blog.srbhr.com/understanding-lists-in-python</guid><category><![CDATA[Python]]></category><category><![CDATA[Python 3]]></category><category><![CDATA[data structures]]></category><category><![CDATA[list comprehension]]></category><category><![CDATA[python beginner]]></category><dc:creator><![CDATA[Saurabh Rai]]></dc:creator><pubDate>Tue, 20 Jun 2023 16:30:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1686998048113/c6ef7b4f-80a8-4b63-ae1e-4d6bc8d54032.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Python lists are an extremely versatile and extensively used data structure. That can store diverse collections of items, regardless of their type or combination of types. This article aims to dive deep into Python lists, memory management and list comprehension.</p>
<h2 id="heading-memory-management-of-lists-in-python">Memory Management of Lists in Python</h2>
<p>One thing that makes Python lists so powerful is that they are dynamic. This means that the list size can change during execution. When creating a list, Python allocates more memory than required to accommodate future items. So, when you append new elements, Python doesn't need to allocate more memory, thereby increasing the efficiency of your program. Each item in the list references the actual object stored in memory. For instance, when you create a list with integers, the list does not hold the integer values directly. Instead, it stores the reference (or pointer) to the memory location where the actual integer is stored. This feature allows Python lists to be heterogeneous, i.e., they can store items of different types.</p>
<h2 id="heading-how-python-lists-are-implemented-internally">How Python Lists are Implemented Internally</h2>
<p>Python lists are implemented as dynamic arrays. When you append an item to a list, Python adds it to the end of the array. If the array is full, Python allocates a new, larger array and copies all the old elements to the new array.</p>
<p>This process is optimized by over-allocation. When a new array is needed, Python doesn't just allocate enough space for the current number of elements, but it allocates extra space for future elements. While this over-allocation can seem wasteful, it improves performance when appending elements since a new array is optional for each append operation.</p>
<p>Lists in Python are similar to <code>ArrayLists</code> in Java and <code>Vectors</code> in C++.</p>
<h2 id="heading-python-list-operations-and-their-complexities">Python List Operations and Their Complexities</h2>
<p>Python lists provide several built-in methods for manipulating the list. Let's discuss some of the most common operations:</p>
<ol>
<li><p>Accessing elements (<code>list[index]</code>): Accessing elements in a list is a constant time operation, i.e., O(1), regardless of the list's size.</p>
</li>
<li><p>Appending elements (<code>list.append(item)</code>): As we discussed earlier, due to over-allocation, appending an item to a list is usually a constant time operation, i.e., O(1). But when a new array needs to be allocated, the operation becomes linear time, i.e., O(n) as list items are copied over to a new larger list.</p>
</li>
<li><p>Inserting elements (<code>list.insert(index, item)</code>): Inserting an item requires shifting all subsequent elements by one place, so it's a linear time operation, i.e., O(n).</p>
</li>
<li><p>Removing elements (<code>list.remove(item)</code>): Python needs to search for the item in the list and shift all subsequent elements, so it's also a linear time operation, i.e., O(n).</p>
</li>
<li><p>Searching elements (<code>item in list</code>): Python needs to check each item until it finds the item, so it's a linear time operation, i.e., O(n).</p>
</li>
</ol>
<h2 id="heading-python-list-alternatives-and-efficient-list-operations">Python List Alternatives and Efficient List Operations</h2>
<p>Python lists are amazing data structures available to us. They're very powerful and versatile, and you can see how they can also store multiple data types. This tells us about where we can use Python Lists and where we should think of alternatives.</p>
<p>First, let's talk about <strong>Efficient List Operations:</strong></p>
<ol>
<li>Preallocate List Space: If you know how many items your list will hold, preallocate space for it using the <code>[None] * n</code> syntax. This saves Python from needing to allocate space as you add elements. If you're solving any interview problem, and are sure of a constant memory that will be required to store elements. Then you can do the following:  <pre><code class="lang-python">element_list = [<span class="hljs-number">0</span>] * <span class="hljs-number">26</span>
</code></pre>
</li>
<li><p>Use List Comprehensions: List comprehensions are more readable and faster than using a for-loop to create a list.</p>
</li>
<li><p>Avoid Using <code>insert(0, item)</code> and <code>del list[0]</code>: These operations are slow because they need to shift all other elements. Instead, consider using a <code>collections.deque</code> if you need fast appends or pops from both ends of the list.</p>
</li>
</ol>
<p><strong>Python List Alternatives:</strong></p>
<ol>
<li>If you need fast appends or pops from both ends of the list. Consider using a <code>collections.deque</code> available in Python's Collection Framework.</li>
<li>If you need to search the list frequently, consider using a <code>set</code> or a <code>dict</code>, which offers constant time search operations. </li>
<li>If your list won't change or would be just used for look-ups. Then tuples are also a good option. </li>
</ol>
<p>Remember, Python lists are mutable, ordered collections of items and have several powerful built-in methods for manipulating these items. Understanding how to use lists properly is fundamental to Python programming.</p>
<h2 id="heading-how-to-use-python-lists-code-examples">How To Use Python Lists (Code Examples):</h2>
<pre><code class="lang-python"><span class="hljs-comment"># Creating a List</span>
my_list = [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]
print(my_list)  <span class="hljs-comment"># Output: [1, 2, 3, 4, 5]</span>

<span class="hljs-comment"># Accessing Elements</span>
print(my_list[<span class="hljs-number">0</span>])  <span class="hljs-comment"># Output: 1</span>
print(my_list[<span class="hljs-number">-1</span>])  <span class="hljs-comment"># Output: 5</span>

<span class="hljs-comment"># Modifying an Item</span>
my_list[<span class="hljs-number">0</span>] = <span class="hljs-number">10</span>
print(my_list)  <span class="hljs-comment"># Output: [10, 2, 3, 4, 5]</span>

<span class="hljs-comment"># Appending Elements</span>
my_list.append(<span class="hljs-number">6</span>)
print(my_list)  <span class="hljs-comment"># Output: [10, 2, 3, 4, 5, 6]</span>

<span class="hljs-comment"># Removing Elements</span>
my_list.remove(<span class="hljs-number">10</span>)
print(my_list)  <span class="hljs-comment"># Output: [2, 3, 4, 5, 6]</span>

<span class="hljs-comment"># Inserting Elements</span>
my_list.insert(<span class="hljs-number">0</span>, <span class="hljs-number">1</span>)
print(my_list)  <span class="hljs-comment"># Output: [1, 2, 3, 4, 5, 6]</span>

<span class="hljs-comment"># Checking if an Item Exists</span>
print(<span class="hljs-number">1</span> <span class="hljs-keyword">in</span> my_list)  <span class="hljs-comment"># Output: True</span>
print(<span class="hljs-number">10</span> <span class="hljs-keyword">in</span> my_list)  <span class="hljs-comment"># Output: False</span>

<span class="hljs-comment"># Finding the Length of the List</span>
<span class="hljs-comment"># Note: len() is a built-in function.</span>
print(len(my_list))  <span class="hljs-comment"># Output: 6</span>
</code></pre>
<h2 id="heading-what-are-list-comprehensions-in-python">What are List Comprehensions in Python?</h2>
<p>Suppose you want to traverse a list in Python. And then perform certain operations, say check for even numbers in a list. Here's how you would typically do:</p>
<pre><code class="lang-python">number_list = [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>,  <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">9</span>, <span class="hljs-number">10</span>, <span class="hljs-number">11</span>, <span class="hljs-number">12</span>]

<span class="hljs-keyword">for</span> number <span class="hljs-keyword">in</span> number_list:
    <span class="hljs-keyword">if</span> (number % <span class="hljs-number">2</span> == <span class="hljs-number">0</span>):
        print(number)
<span class="hljs-comment"># ---</span>
<span class="hljs-comment"># Output:</span>
<span class="hljs-comment"># 2</span>
<span class="hljs-comment"># 4</span>
<span class="hljs-comment"># 6</span>
<span class="hljs-comment"># 8</span>
<span class="hljs-comment"># 10</span>
<span class="hljs-comment"># 12</span>
</code></pre>
<p>List Comprehensions are one-liners that improve the performance of looping over a list in Python and allow for more optimized and cleaner-looking code. The same for loop can be easily written using List Comprehensions. </p>
<pre><code class="lang-python">number_list = [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>,  <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">9</span>, <span class="hljs-number">10</span>, <span class="hljs-number">11</span>, <span class="hljs-number">12</span>]

[print(x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> number_list <span class="hljs-keyword">if</span> x % <span class="hljs-number">2</span> == <span class="hljs-number">0</span>]
</code></pre>
<p>List comprehensions follow a simple structure<code>[expression for item in iterable]</code>. We used the <code>print(x)</code> as an expression, followed by a for loop and a condition. Conditions are optional but are used very frequently as well. <code>[expression for item in iterable if condition]</code>.</p>
<p>One example of converting a list of strings of lower case characters to upper case using list comprehensions:</p>
<pre><code class="lang-python">word_list = [<span class="hljs-string">'hello'</span>, <span class="hljs-string">'world'</span>, <span class="hljs-string">'zen'</span>, <span class="hljs-string">'python'</span>]
upper_words = [word.upper() <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_list]
print(upper_words)  
<span class="hljs-comment"># Output: ['HELLO', 'WORLD', 'ZEN', 'PYTHON']</span>
</code></pre>
<p>Nested list comprehensions are also possible. For instance, to flatten a matrix (a list of lists):</p>
<pre><code class="lang-python">matrix = [[<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>], [<span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>], [<span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">9</span>]]
flat = [num <span class="hljs-keyword">for</span> sublist <span class="hljs-keyword">in</span> matrix <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> sublist]
print(flat)  
<span class="hljs-comment"># Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]</span>
</code></pre>
<p>Note that the order of for clauses in a nested list comprehension matches the order you would use for nested for loops.</p>
<p>List comprehensions are potent tools that make your Python code more efficient and readable. However, they can become difficult to understand when overused or used for complex tasks, so it's often a good idea to use them judiciously.</p>
<p>Improving your Python programming skills and writing cleaner, more efficient codes is possible by grasping the concept of Python lists and their features. It is important to consider the computational complexity of your operations and choose the appropriate data structure for your specific needs. Keep coding and for those who keep striving, greatness is coming!</p>
]]></content:encoded></item></channel></rss>