<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Parth Miglani on Medium]]></title>
        <description><![CDATA[Stories by Parth Miglani on Medium]]></description>
        <link>https://medium.com/@parthmig?source=rss-3e58cd305b3f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*GNyT_QN3MzkPlO0yqlqtAg.jpeg</url>
            <title>Stories by Parth Miglani on Medium</title>
            <link>https://medium.com/@parthmig?source=rss-3e58cd305b3f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 06 May 2026 15:34:05 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@parthmig/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[I taught my AI Chatbot to Read Wikipedia and Answer Like an Expert]]></title>
            <link>https://medium.com/push-2-prod/i-taught-my-ai-chatbot-to-read-wikipedia-and-answer-like-an-expert-e92ff1b99927?source=rss-3e58cd305b3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e92ff1b99927</guid>
            <category><![CDATA[llm-applications]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[langchain]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[rag-chatbot]]></category>
            <dc:creator><![CDATA[Parth Miglani]]></dc:creator>
            <pubDate>Fri, 18 Jul 2025 23:42:53 GMT</pubDate>
            <atom:updated>2026-04-12T16:26:48.207Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>I taught my AI to Answer Like an Expert</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*slB4Hdrb_ptl03xSnzHsOw@2x.jpeg" /></figure><h3>What’s a RAG</h3><p>I like the analogy of “writing an open-book exam” when thinking about RAGs. RAG stands for <strong>Retrieval Augmented Generation</strong>. In a RAG system, LLM uses added context (which can be documents or databases) to give a more accurate and up-to-date answer, instead of just data it has been trained on.</p><p>RAG is one of few techniques (and one of the relatively simpler ones when compared to model fine-tuning) that addresses some key limitations of LLMs including:</p><ul><li><strong>Knowledge cutoff</strong>: To access information beyond the model’s training data</li><li><strong>Hallucination</strong>: Reduces false information by grounding responses in real documents</li><li><strong>Domain specificity</strong>: Creates chatbots that are experts in a specific field</li></ul><h3>What is LangChain and why use it</h3><p>LangChain is a framework that saves you from writing boilerplate code and provides the building blocks for connecting an LLM to different data sources. It allows you to build a “chain”, or a set of actions to be performed by the LLM.</p><p>There are other frameworks like CrewAI and LlamaIndex, but I went with LangChain as it is one of the more popular and mature frameworks in this space. LangChain also offers another framework called <strong>LangGraph</strong> to build more complex AI agents, so LangChain is a great starting point for something simple that I can build on.</p><h3>Core concepts</h3><p><strong>Document loaders </strong>— These are components that ingest various file types (PDFs, text files, web pages, etc.) and convert them into LangChain <strong>Document objects</strong>. Each Document contains content and metadata.</p><pre>loader = WebBaseLoader(WIKIPEDIA_URL)<br>docs = loader.load()</pre><p><strong>Vector Stores</strong> — Databases that store document embeddings for similarity search. I used <strong>FAISS</strong> which is an open-source library from Facebook. Vector Stores enable finding relevant documents based on semantic similarity to your prompt.</p><p><strong>Embeddings</strong> — They convert text into numerical vector representations. LangChain supports various embedding models like OpenAI’s text-embedding-ada-002 or open-source alternatives like Sentence Transformers. I used Google’s <strong>embedding-001 model</strong>.</p><p><strong>Chain Orchestration — </strong>Chains are sequences of operations that combine multiple components. We can use prompt templates to structure how information is presented to the LLM. For RAG, you would use a template that includes the retrieved context and user question in a format that encourages accurate, context-based responses. I used <strong>LangChain Expression Language</strong>, or LCEL for this purpose as it is the modern, declarative way to compose and chain the core RAG components together.</p><pre>rag_chain = (<br>        {&quot;context&quot;: retriever | format_docs, &quot;question&quot;: RunnablePassthrough()}<br>        | prompt<br>        | model<br>        | StrOutputParser()<br>    )</pre><h3>My simple RAG chatbot</h3><p>I built a RAG chatbot to answer questions about my favourite commercial aircraft — the marvellous Airbus A350. Some notes on my implementation-</p><ul><li>Wikipedia provides comprehensive, well-structured information that’s perfect for demonstrating RAG capabilities, so I used the <em>WebBaseLoader</em> to read data from <a href="https://en.wikipedia.org/wiki/Airbus_A350"><em>https://en.wikipedia.org/wiki/Airbus_A350</em></a> and the <em>RecursiveCharacterTextSplitter</em> to break it into chunks.</li><li>After playing around with simple retrieval strategies that did not yield any results, I implemented an Advanced Retrieval Strategy using <em>ParentDocumentRetriever</em>. This approach stores small chunks (400 chars) in the vector store for precise matching but retrieves larger parent chunks (2000 chars) to pass to the LLM for better context. This often provides more comprehensive answers.</li></ul><pre>vectorstore = FAISS.from_documents(<br>    documents=child_splitter.split_documents(docs),<br>    embedding=embeddings,<br>)<br><br>retriever = ParentDocumentRetriever(<br>    vectorstore=vectorstore,<br>    docstore=store,<br>    child_splitter=child_splitter,<br>    parent_splitter=parent_splitter,<br>)</pre><ul><li>As mentioned before, I used LCEL to build the core RAG chain. This pipeline demonstrates parallel execution where context is retrieved and formatted while the question passes through unchanged.</li><li>I used Google’s <em>Gemini 2.5 Flash</em> model with their embedding service, which strikes a balance between being performative and cost-effective</li><li>In the prompt template, I include specific instructions for the model to acknowledge when it can’t answer based on the available context, reducing hallucinations.</li></ul><pre>prompt_template = &quot;&quot;&quot;<br>Answer the question as detailed as possible from the provided context, make sure to provide all the details, if the answer is not in<br>provided context just say, &quot;Sorry, I can&#39;t answer that based on the available context&quot;, don&#39;t provide the wrong answer<br><br>Context:<br> {context}?<br><br>Question:<br>{question}<br><br>Answer:<br>&quot;&quot;&quot;</pre><h3>Key Features</h3><p>To sum up, my simple chatbot includes some features including:</p><ul><li><strong>Persistent vector store</strong> that loads quickly on subsequent runs</li><li><strong>Graceful handling</strong> of questions outside the knowledge base</li><li>Clear <strong>separation of concerns</strong> in the code structure</li><li>Interactive <strong>command-line interface</strong> for easy testing</li></ul><h3>What’s next</h3><p>A simple chatbot like this one is just the beginning. LangChain offers several constructs to build on this to improve accuracy and add more advanced features. Here’s a few I’m excited to explore-</p><ol><li><strong>Enhanced retrieval strategies</strong> for better accuracy. This can be done by implementing hybrid search that combines semantic and keyword matching.</li><li>Developing a more <strong>sophisticated prompt</strong> and multi-step reasoning chain to decompose and accurately answer more complex queries</li><li><strong>Memory</strong>. I’d like to add the ability to maintain context across multiple prompts, allowing for follow-up questions and more natural conversations.</li><li><strong>Multi-source and citations</strong>. Expanding beyond a single Wikipedia page to multiple sources and source types, and implementing source attribution in the outputs so users can verify information directly.</li></ol><h3>Pushing 2 Prod</h3><p>As a software developer committed to driving shareholder value, I take joy in building fun projects but even more enjoyment in pushing them to prod and having other people try them. So what does it take for a RAG chatbot to be productionized? Below are a few considerations,</p><p><strong>Scalability</strong>: Moving from local FAISS to cloud-based vector stores like Pinecone or Weaviate for production scale.</p><p><strong>API Development</strong>: Creating RESTful APIs using FastAPI to serve the chatbot functionality.</p><p><strong>Monitoring and Evaluation</strong>: Implementing metrics to track retrieval quality, response accuracy, and user satisfaction.</p><p><strong>Cost Optimization</strong>: Balancing performance with API costs through smart caching and efficient retrieval strategies.</p><p><strong>Security</strong>: Adding authentication, rate limiting, and content filtering for production deployment.</p><h3>Conclusion</h3><p>This simple RAG chatbot demonstrates the power of <strong>combining</strong> large language models with <strong>external knowledge sources</strong>. LangChain’s rich ecosystem of components makes it straightforward to create sophisticated LLM applications that can answer questions about specific domains with high accuracy.</p><p>I started with this project to understand the core concepts of LangChain — from document processing to chain orchestration, and I’m looking forward to using these foundations to experiment and build chatbots that are not only knowledgeable but also reliable and maintainable.</p><p>You can view the complete code for this project <a href="https://colab.research.google.com/drive/17-ztulKxoGoA29yqTEgsr8gQrslT2Yi7?usp=sharing">here</a>, and I’d love to hear about your own RAG implementations and the challenges you’ve encountered.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e92ff1b99927" width="1" height="1" alt=""><hr><p><a href="https://medium.com/push-2-prod/i-taught-my-ai-chatbot-to-read-wikipedia-and-answer-like-an-expert-e92ff1b99927">I taught my AI Chatbot to Read Wikipedia and Answer Like an Expert</a> was originally published in <a href="https://medium.com/push-2-prod">Push 2 Prod</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[You should try Gemini CLI]]></title>
            <link>https://medium.com/push-2-prod/you-should-try-gemini-cli-a4c695364269?source=rss-3e58cd305b3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/a4c695364269</guid>
            <category><![CDATA[llm-applications]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[google]]></category>
            <category><![CDATA[gemini]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Parth Miglani]]></dc:creator>
            <pubDate>Thu, 03 Jul 2025 01:34:06 GMT</pubDate>
            <atom:updated>2025-07-03T01:40:21.318Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZaQde3sHa4U0ms-PmaEeFA.png" /></figure><p>If you’re here you have probably heard of Claude Code and other software development ai tools like Cursor and Windsurf — and now in the last few weeks, Gemini CLI has started populating your media feeds.</p><p>Or this article just popped up on your Medium recommendations — either way — let’s talk about Gemini CLI.</p><h3><strong>What is Gemini CLI</strong></h3><p>Gemini CLI, as the name suggests, is Gemini in your CLI of choice. Claude Code launched a few months ago and took the software engineering world by storm, performing better than other popular tools like Cursor, and taking vibe coding to the next level. Gemini CLI seems like a cheeky copy of Claude Code at first glance — but my two cents — it’s a lot more.</p><p>Whether or not it performs better, worse or just as good as Claude Code depends on a lot of factors, like the specific task and your prompting skills. That aside, here’s what’s true about this new tool-</p><ol><li>It’s free to get started (unlike Claude which requires at least a $30 subscription, higher for more usage)</li><li>You can use it A LOT (offers 1000 requests per day)</li><li>It is Open source (this one might not matter to a lot of people but as I’ve matured as a developer I’ve become a fan of open source)</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*28HLOYNyLoS2y6lu" /></figure><p>PS: before you come for me, no shade on Claude Code, i’m sure it is AMAZING, but i’m not the target user for it &amp; i refuse to pay 30$ a month to use it.</p><h3><strong>How to use it</strong></h3><p>You need the following-</p><ol><li>Terminal of your choice (I use iTerm 2)</li><li>A google account</li></ol><p>Follow the instructions <a href="https://github.com/google-gemini/gemini-cli">here</a> to install and get started. Installation and setup takes just a couple minutes, and once you log in with your google account, type gemini or gemini -s (to run in a sandboxed environment) in your cli and you are ready to go.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*LXjjYBxM4WticFrU" /></figure><h3><strong>My experience</strong></h3><p>I haven’t used the tool extensively but in my couple hours of testing I was impressed (hence this write up). In hindsight this is quite obvious, but I was surprised how good it is at keeping context and in turn presenting a better solution (while using Gemini 2.5 pro) in the CLI vs on Gemini web chat. I had been trying to fix a bug in my chrome extension (try it <a href="https://chromewebstore.google.com/detail/arc-tabs/bhpinmhcdfbfndoeogikcbnbjedjgpie?authuser=0&amp;hl=en">here</a>) that the web chat could NOT fix after multiple attempts, and the same prompt in the CLI fixed the bug in one shot.</p><p>Besides, nothing like coding in a CLI. Just feels a lot cooler. And yes, it’s more efficient (sometimes).</p><p>One of many things I liked about Gemini CLI is the usage statistics at the end of a session, like below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Lhoy0riBZ-EWTBN-" /></figure><p>My AI code editor of choice has been Windsurf for the last few months. I’ve done my share of vibe coding on it, and used its tab and chat features for day-to-day development. I’m looking forward to comparing its performance to Gemini CLI.</p><h3><strong>Big Picture</strong></h3><p>These AI tools are here to stay. AI is not “just another tool” but <em>it is a tool</em> like Postman or VS Code or Jenkins. And I think it’s a great idea to get really good at using tools like Gemini CLI, because they will be part of our dev toolkit going forward, whether you like it or not.</p><p>Staying relevant aside, it’s amusing playing with these LLMs to make quick, fun and sometimes even useful apps. It’s even more fun figuring out the right prompts to get what you are looking for out of them.</p><p>So Gemini CLI is worth a shot!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a4c695364269" width="1" height="1" alt=""><hr><p><a href="https://medium.com/push-2-prod/you-should-try-gemini-cli-a4c695364269">You should try Gemini CLI</a> was originally published in <a href="https://medium.com/push-2-prod">Push 2 Prod</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The web browser, reimagined]]></title>
            <link>https://parthmig.medium.com/the-web-browser-reimagined-529929618ca3?source=rss-3e58cd305b3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/529929618ca3</guid>
            <category><![CDATA[arc-browser]]></category>
            <category><![CDATA[internet]]></category>
            <category><![CDATA[chrome]]></category>
            <category><![CDATA[productivity-apps]]></category>
            <category><![CDATA[browsers]]></category>
            <dc:creator><![CDATA[Parth Miglani]]></dc:creator>
            <pubDate>Wed, 01 May 2024 00:29:04 GMT</pubDate>
            <atom:updated>2024-05-01T00:29:04.292Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ev7hVhq-zMuIgr_YvR1Ifw.jpeg" /></figure><p>Arc by The Browser Company is changing the way we surf the internet</p><p>I’ve been using Arc for over a year now and it has changed the way I think about and use the web browser. But what can a browser really do differently you might ask? Web browsers are a well developed product category — Google Chrome, the most popular browser, launched in 2008. All the browsers look similar and haven’t changed much in the last few years — they are all somewhat boring but they get the job done. So again, what could a browser do differently to stand out… to reimagine how you use the internet? Let’s get into it.</p><h3><strong>Features</strong></h3><p>Arc has a few features that make it stand out</p><ol><li><strong>Spaces</strong></li></ol><p>You can have a dedicated space for every area of your life that you don’t want mingling — “work”, “personal”, and any projects. For example, I use three spaces — a default personal space, one for iOS app development and another one for everything else — writing, research, browsing.</p><p>And if you want even more separation, like separate logins and sessions for apps, you could use profiles.</p><p>2.<strong> Favorites</strong></p><p>These sit at the top of the sidebar and are shared across spaces. So you could add any website or app you use frequently and doesn’t belong to just one space as a favorite.</p><p>3. <strong>Pinned tabs</strong></p><p>Like bookmarks, these are tabs you want for quick access in any specific space. Each space will have its own set of pinned tabs.</p><p>4. <strong>Features</strong></p><p>AI is all the hype, and most products tend to just slap AI onto their name for the cout- but Arc is using AI in a way that makes sense, and improves the user experience. The suite of AI features, called Arc Max, include renaming tabs and downloads to be more intuitive and cleaner, organizing and grouping tabs, access to ChatGPT using the command bar, and my favorites — using Command F for not just keyword search, but asking question about page content, and showing page summaries when using google search.</p><p>5. <strong>Customization</strong></p><p>I’m a sucker for gradients. Arc gives you a lot of customization options to make your space look the way you want it to using gradients and icons, it makes the browser feel like more than just a utility, but an enjoyable and inspiring experience.</p><h3>Changing the way I use the browser</h3><ol><li><strong>Web vs native apps</strong></li></ol><p>Ever since I started using arc, I prefer using web versions of apps more than the native mac apps. For example, I switched to using Notion on the web. The quick and easy access through Favorites or Pinned tabs,, and the Arc UI which allows for an experience similar to native apps nudged me to make the call.</p><p>2. <strong>Shortcuts</strong></p><p>I’ve also started using shortcuts more often — partly because arc suggests it often when you perform an action that could more easily be done using a keyboard shortcut, and partly because they seem more intuitive on Arc. Since I started using Arc, I tend to only use shortcuts for actions like creating new tabs, copying the current URL, etc.</p><p>3. <strong>Cleaner windows</strong></p><p>Arc is excellent at organization — mostly because of features including spaces and favorites, as well as automatically archiving tabs and AI features like tidy tabs. Let’s not forget little arc — which is where external links open by default — and you can choose to close them for eternity or open in the space of choice. All of these features together make for a cleaner and more productive browser experience.</p><h3>Arc Search for iOS</h3><p>The Browser Company recently launched a mobile browser app as well — Arc Search — with the idea that it is “browser that browses for you”. So the “browse for me” feature looks at a bunch of websites for any query you submit, and makes a custom webpage summarizing the results. Like any AI answer engine/chatbot, it’s not a hundred percent accurate, but definitely useful. They also recently added sync with desktop (finally!) so you can access tabs from your spaces.</p><p>And the mobile app follows the theme of a well designed and fun to use interface, that I enjoy using more than any other mobile browser I’ve tried. It’s now my default browser on iOS (au revoir, Safari!).</p><p>I like it when software not only does the job it was built to do but makes for a fun and enjoyable experience — and Arc is doing just that. Now it is by no means perfect but what excites me is how The Browsing Company has reinvented the browsing experience and I can’t wait to see what they build next.</p><p>For now, Arc is a great browser, and given its skyrocketing popularity, I’m not the only one that thinks so. So to The Browser Company, Thank you — keep listening to the feedback (but please ignore the naysayers that shit on you), keep innovating and building cool software. And… if you’re hiring… let’s chat?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=529929618ca3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apps that keep me productive]]></title>
            <link>https://parthmig.medium.com/apps-that-keep-me-productive-9b2ea26bad95?source=rss-3e58cd305b3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/9b2ea26bad95</guid>
            <category><![CDATA[apps]]></category>
            <category><![CDATA[software-developer]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[apple]]></category>
            <dc:creator><![CDATA[Parth Miglani]]></dc:creator>
            <pubDate>Sun, 17 Mar 2024 03:38:16 GMT</pubDate>
            <atom:updated>2024-03-17T03:38:16.462Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cePTKKt18vAbcpYPdhNrKg.jpeg" /></figure><p>What does productivity really mean? And I’m not asking for the definition. What does being productive mean to me and YOU?</p><p>That’s a deeper question that will take more brain cells than I have at the moment, so here’s 4 apps instead that I use everyday, and you can use as well to keep you from doom scrolling and do something “productive” instead.</p><ol><li><strong>Notes</strong></li></ol><p>Like my fellow productivity savants, I have tried quite a few notes apps. I extensively used Goodnotes when I was in University as it was great for taking notes that included hand drawn figures, images and notes all on the same canvas, and I would still recommend it for students and more niche use case.</p><p>But, I keep coming back to the stock Apple Notes app. It does everything most of us need a notes app to do and it does it really well, across all your Apple devices. It has features like tags and folders to organize your notes, and rather basic but good enough capabilities to add tables, files, etc to your notes. I use it on the daily to jot down everything from quick notes to keeping track of work and projects.</p><p><strong>2. Reminders</strong></p><p>There’s a lot of task tracking and reminder apps out there — and everyone can tell you how the app they use is the best one. But trust me, the stock Apple Reminders app is great. And it is all most people need.</p><p>I’ve tried apps like Todoist and Tick Tick, and for some use cases those are the best apps out there. But I cannot justify their premium subscription costs (which you need if you want to hide the constant subscription popups and add customizations) when the stock app does everything I need, from the ability to make different lists, to organizing tasks by date, priority and tags, as well as sync across all my Apple devices.</p><p><strong>3. Google Calendar</strong></p><p>Why don’t I use the stock calendar app? I could. But I wanted to keep things interesting for myself so my calendar app of choice is Google Calendar (partially because I had too switch when I was using the Pixel 7 for a few months). I also prefer the UI of Google Calendar over the stock Apple Calendar app.</p><p><strong>4. Arc</strong></p><p>Arc is “just a browser”, but it redefines how you browse the internet (not an ad). I started using arc on my Mac, and more recently Arc Search on my iPhone, and it has become my default browser alongside Safari.</p><p>Arc is not just more fun to use with all its gradients and customization features, but it truly makes browsing more enjoyable and faster thanks to Spaces, Favourites and Pinned tabs. And it also makes really great use of AI — not just by slapping “AI” on its features list, but integrating AI into the browser to make the user experience better. Can’t recommend it enough. @TheBrowserCompany iPad app when?</p><p><strong>5. Perplexity</strong></p><p>Perplexity is my digital assistant of choice. It is like ChatGPT, but better (depending on the use case). I primarily use it for research, and in a lot of instances it has replaced Google.</p><p>They call themselves an answer engine, and essentially browse and look at multiple different sources for you when you ask a question. Perplexity gives you a succinct summary of what it finds, with citations. It also gives you the option of choosing the primary model you want to use (although I’ve found all the other models besides GPT-4 to be immensely useless). It is my go to tool for looking up information, getting help with coding, and even looking up news.</p><p>I have tried a lot of different productivity apps, and I can say for certain I will try many more. I can also say for certain that a lot of these apps are overkill and just a different wrapper on the same candy. But why should that stop us from moving our whole life off to another app, just to realize it’s not worth it and come back to good old Reminders, right? Right.</p><p>So I’ll leave you with this — I don’t think productivity is just about being efficient with your time, as the dictionary would define it, but being intentional (as Ali Abdaal defines it). Whether that means trying all 500 productivity apps on the App Store, watching Reels till 1 am, and smashing out that assignment the day you get it, that’s your call to make.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9b2ea26bad95" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gradients in SwiftUI]]></title>
            <link>https://medium.com/push-2-prod/gradients-in-swiftui-e3481685cb9d?source=rss-3e58cd305b3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e3481685cb9d</guid>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Parth Miglani]]></dc:creator>
            <pubDate>Sat, 02 Mar 2024 22:13:53 GMT</pubDate>
            <atom:updated>2024-03-02T22:17:27.929Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1XwavWFlVAYQpYUQ" /><figcaption>Photo by <a href="https://unsplash.com/@lukechesser?utm_source=medium&amp;utm_medium=referral">Luke Chesser</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>I love it when developers make their apps fun and inspiring by adding design elements that improve the UI and thus, the overall user experience. One of my favorite apps that does this really well, by using animations and gradients, is the Arc Search app on the iPhone. The recently launched Apple Sports app uses gradient backgrounds too, that change depending on the team or league you are viewing.</p><p>I think we can all agree that a gradient implemented well, is magnitudes more appealing than a plain background. It feels clean and adds a touch of elegance to your app. So let’s see how we can use gradients in SwiftUI, and easily implement our own gradient background to elevate our app UI.</p><h3>Types of Gradients</h3><p>There are 3 primary gradient types in SwiftUI: <strong><em>LinearGradient</em></strong>, <strong><em>RadialGradient</em></strong> and <strong><em>AngularGradient</em></strong>. There are also two more specialized gradients derived from radial and angular types respectively; <em>EllipticalGradient</em> and <em>ConicGradient</em>.</p><p>Let’s look examples of each of the three primary types:</p><ol><li><a href="https://developer.apple.com/documentation/swiftui/lineargradient/#topics">LinearGradient</a></li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/314/1*tNMfYjc3FgFbsYh5HULi5Q.png" /></figure><pre>VStack {<br>    LinearGradient(gradient: Gradient(colors: [.white, .blue, .black]), startPoint: .top, endPoint: .bottom)<br>}<br>.edgesIgnoringSafeArea(.all)</pre><p>2. <a href="https://developer.apple.com/documentation/swiftui/radialgradient">RadialGradient</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/314/1*BzgeMZHlNR0v0DKYFqjMfQ.png" /></figure><pre>VStack {<br>    Circle()<br>        .fill(<br>            RadialGradient(colors: [.white, .yellow, .blue], center: .center, startRadius: 15, endRadius: 150)<br>        )<br>        .frame(width: 375, height: 375)<br>}</pre><p>3. <a href="https://developer.apple.com/documentation/swiftui/angulargradient">AngularGradient</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/314/1*gKErAUcaPoQdb48AyGPZSg.png" /></figure><pre>VStack {<br>    AngularGradient(colors: [.red, .teal, .blue, .black, .indigo, .red], center: .center)<br>}<br>.edgesIgnoringSafeArea(.all)</pre><h3>Gradient Background</h3><p>Now let’s use a Linear gradient to add a background that looks similar to the Apple Sports app.</p><p>We will use two colours - <em>blue</em> with opacity 0.8 (so the colour appear darker) and <em>clear </em>in our LinearGradient.</p><pre>var body: some View {<br>    ZStack(alignment: .top) {<br>        Color.black.edgesIgnoringSafeArea(.all)<br><br>        LinearGradient(gradient: Gradient(colors: [Color.blue.opacity(0.8), Color.clear]), startPoint: .top, endPoint: .bottom)<br>            .frame(height: 200)<br>            .edgesIgnoringSafeArea(.all)<br>    }<br>}</pre><p>We use the .<em>frame(height: 200)</em> modifier to limit the blue to the upper part of the screen. You can play around with it to set the desired height for the first colour. Using <em>.edgesIgnoringSafeArea</em> ensures the gradient background will extend to the end of the screen.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*s5YcIR6S4KrlNFgvd_Mn9Q.jpeg" /></figure><p>You can customize your view by adding elements as desired under the <em>LinearGradient</em> within the <em>ZStack</em>, so they appear over the background.</p><p>As you can see, adding gradients to your iOS app is fairly straightforward. All gradients accept a list of colours as arguments, along with gradient specific parameters like <em>start</em> and <em>endPoint</em>, <em>radius</em>, <em>angle</em>, etc.</p><p>You can use gradients to add a modern aesthetic to your app, as well as introduce depth and emphasize certain elements. I hope this article helps you get started with using gradients.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e3481685cb9d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/push-2-prod/gradients-in-swiftui-e3481685cb9d">Gradients in SwiftUI</a> was originally published in <a href="https://medium.com/push-2-prod">Push 2 Prod</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Getting started as an iOS developer]]></title>
            <link>https://medium.com/push-2-prod/getting-started-as-an-ios-developer-c8c2a40fb2a2?source=rss-3e58cd305b3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/c8c2a40fb2a2</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[app-development]]></category>
            <dc:creator><![CDATA[Parth Miglani]]></dc:creator>
            <pubDate>Sun, 04 Feb 2024 17:25:01 GMT</pubDate>
            <atom:updated>2024-02-04T17:25:01.596Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QtYyuZt36Z9k_92Y" /><figcaption>Photo by <a href="https://unsplash.com/@abeso?utm_source=medium&amp;utm_medium=referral">Sebastian Bednarek</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>So you want to learn how to make iOS apps? It might be because you’re an Apple fan boy like me, or perhaps because you have spare time on your hands and want to pick up a new skill. Either way, It hasn’t been long since I was in your shoes so you’ve come to the right place.</p><p>First things first, you need a Mac. Once you’ve acquired a capable machine running macOS, here are the 5 things you need to learn to get started as an iOS developer in 2024:</p><p><strong>1. Xcode</strong></p><p>Xcode is the preferred IDE (integrate development environment) for developing apps for Apple platforms. You can do everything from writing code to distributing apps using Xcode.</p><p>In addition to building, running and testing your app, Xcode has CI/CD features (you don’t need to worry about these just yet) and you also need it to package your app as for distribution on TestFlight and App Store.</p><p><strong>2. Swift</strong></p><p>Swift is the programming language of choice for Apple platforms. It shares basic constructs and features with other programming languages like Python, but has a lot of great features and syntactical peculiarities that make it different.</p><p>Apple used Objective-C in the past, but Swift is the present and the future, so if you are getting started, it is the way to go. Knowledge of Objective-C although would not hurt since a lot of iOS apps have been written in Objective-C.</p><p>Even if you already have some programming experience, I would recommend giving the Swift documentation a Quick Look before you start developing your first iOS app.</p><p><a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/aboutswift">https://docs.swift.org/swift-book/documentation/the-swift-programming-language/aboutswift</a></p><p><strong>3. SwiftUI</strong></p><p>SwiftUI is a declarative ui framework built on top of the swift programming language. It is the preferred way of developing user interfaces for Apple platforms, and includes features over its predecessor UIKit, including live previews, built-in transitions, cross platform compatibility, etc.</p><p>A good way to get going would be following one of Apple’s tutorials — <a href="https://developer.apple.com/tutorials/swiftui">https://developer.apple.com/tutorials/swiftui</a></p><p><strong>4. XCtest</strong></p><p>An essential skill to have as a developer is knowing what to test and how to test it. XCTest is a framework to write unit tests in Swift, so you can make sure your app is reliable and stands its ground in user’s hands. And icing on the cake, it integrates really well with Xcode. You can develop everything from unit tests to performance and UI tests using the framework, and once you have a somewhat solid grip on swift, swift and iOS app development principles, don’t wait too long to get testing.</p><p><strong>5. API/Third party integration</strong></p><p>Most, if not all apps present some dynamic content to users. That is achieved using third party APIs and SDKs. It is very important to learn how to make network calls, process responses and present relate data to users. For something even as simple as user authentication, you might need to integrate a tool like Firebase with your app. You will need to add packages and libraries to your iOS app to enhance it’s functionality and develop cool features, and for that you will also need to get comfortable using Swift package Manager (new and preferred) or CocoaPods.</p><p>Now these are some of the most important things you will need to learn, but remember — becoming a GREAT iOS developer is a marathon, not s sprint. It will involve wearing multiple hats, and consistently learning and picking up new tools and frameworks. And that’s what makes it fun.</p><p>Follow for more helpful articles and tutorials to help you out on your iOS developer journey. And as always, let Tim Cook.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c8c2a40fb2a2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/push-2-prod/getting-started-as-an-ios-developer-c8c2a40fb2a2">Getting started as an iOS developer</a> was originally published in <a href="https://medium.com/push-2-prod">Push 2 Prod</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>