<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matt Pass</title>
    <description>The latest articles on DEV Community by Matt Pass (@matt_pass).</description>
    <link>https://dev.to/matt_pass</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2737091%2F373492e5-5aa8-4fad-86c9-0991994dda4d.jpg</url>
      <title>DEV Community: Matt Pass</title>
      <link>https://dev.to/matt_pass</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matt_pass"/>
    <language>en</language>
    <item>
      <title>Is this Vibe Coding?</title>
      <dc:creator>Matt Pass</dc:creator>
      <pubDate>Sun, 07 Sep 2025 09:39:26 +0000</pubDate>
      <link>https://dev.to/matt_pass/is-this-vibe-coding-30e3</link>
      <guid>https://dev.to/matt_pass/is-this-vibe-coding-30e3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Vibe Coding&lt;/strong&gt;, has a stigma about it as you're not supposed to care about the code, only getting results.&lt;/p&gt;

&lt;p&gt;This was an instant turn-off for me - I care deeply about the code and the follow on security implications of not caring.&lt;/p&gt;

&lt;p&gt;However, I've started to wonder if I've begun to vibe code, even just a little. Over the last year my development flow has changed a lot - having gone from pressing Tab key to generate next line from AI repeatedly, to now letting AI produce features step by step and writing just about all tests too. The difference is huge over the last 12 months; AI has gone from writing 10% of my code, to around 60%. 😱&lt;/p&gt;

&lt;p&gt;A great example was last week, where on a pair programming session (getting a colleague up to speed on a repo while building a feature) they noted I was hardly coding at all.&lt;/p&gt;

&lt;p&gt;I was instead (as I often do now) taking the time to prompt the AI chat really well and then heavily reviewing what it produced - pretty much how a senior might instruct and assist a junior dev (a very smart and extremely quick junior in this case). The colleague was still where I was a few months ago; pressing Tab, wanting to write their own code and didn't really trust the AI chat yet.&lt;/p&gt;

&lt;p&gt;Thing is - I get their take (I was there not so long ago) and it's hard to let go. It's difficult to trust something else to do what you're so used to doing. While they were still naturally sceptical, they did agree this feature would probably take a full day to build by hand and that it was done perfectly well by prompting AI only, in just 3 hours.&lt;/p&gt;

&lt;p&gt;I wasn't here to sell them the new way of working, but you could rightly question why you should continue to work so hard, and well, slower than you could with such great abilities available. I guess it's a lot like working with powertools than just hand tools... I've learned my craft (for a couple of decades), with helpful tooling and appreciate the speed of the new powertools, plus they're safe to use for me given historical knowledge of the traditional dev tools.&lt;/p&gt;

&lt;p&gt;While the AI was working hard, we also took the time to chat about the codebase, plan next moves and more. I realised in that moment the way were working was so much more chilled than it would have been writing every line myself. I also recognised I'm far more relaxed these past few months working this way and producing twice as much work as a result. Those are both big wins!&lt;/p&gt;

&lt;p&gt;But I took the time since to question - &lt;em&gt;"am I now vibe coding?"&lt;/em&gt; The answer is still a firn "no", as I do look at the code (I will always heavily scrutinise what is produced) but there are slight &lt;em&gt;similarities&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Usually I have a fixed idea in mind of exactly how the code should be but sometimes I think there could be multiple ways and let AI take the lead on deciding approach. It depends on the task - again, making the most of AI to sometimes help "plan" as well as "do"; I was giving it pretty specific "vibes" and then checking all it did.&lt;/p&gt;

&lt;p&gt;It was good to recognise how I now work has changed over the last year and feel I'm getting all the best benefits from AI plus even &lt;em&gt;vibing&lt;/em&gt; with few downsides - all while knowing code review and security is still paramount in all I do.&lt;/p&gt;

&lt;p&gt;Should you not quite be onboard yet, it's worth noting AI is here to stay and can give a real speed boost and quality boost in your dev work.&lt;/p&gt;

&lt;p&gt;If you're using AI, how are you using it and if you're not using AI much, why?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I quit my perm job 1 year ago, here's how it went since</title>
      <dc:creator>Matt Pass</dc:creator>
      <pubDate>Wed, 26 Feb 2025 15:16:06 +0000</pubDate>
      <link>https://dev.to/matt_pass/i-quit-my-perm-job-1-year-ago-heres-how-it-went-since-4ike</link>
      <guid>https://dev.to/matt_pass/i-quit-my-perm-job-1-year-ago-heres-how-it-went-since-4ike</guid>
      <description>&lt;p&gt;It's been exactly 1 year today since I quit my permanent role as a Senior Full Stack Developer. I still remember the day vividly - being told (again) I didn't have the skills needed to get the promotion I felt I very much deserved. Sigh. Let's go back a year.&lt;/p&gt;

&lt;h1&gt;
  
  
  Background
&lt;/h1&gt;

&lt;p&gt;I already decided if this meeting didn't go the way I wanted, I'd throw in the towel. For the previous 9 months I'd done everything I believed was needed and more. But it wasn't enough apparantly and so this was it - the end of the road for me at this company. It was honestly a relief to finally say during the meeting "I quit" and it didn't appear to come as a surprise to my superior. We both knew I'd had enough.&lt;/p&gt;

&lt;p&gt;Despite the awkward stalemate, it was an amicale split and there was no bad feeling whatsoever. They just wanted me to be something different to what I was and I believed I was doing enough to justify the role. We didn't agree on each others point of view and that was fine, not everyone agrees and things aren't always destined to work out.&lt;/p&gt;

&lt;p&gt;Cool. So, I'd now quit. What next?&lt;/p&gt;

&lt;h1&gt;
  
  
  Be cool and do good things!
&lt;/h1&gt;

&lt;p&gt;My first thought was for my employer and current role. That may seem weird, but I'm a professional and taking care of my current work was crucial to me. I wanted to leave with my head held high, knowing I'd done great work right up till the end and handed over all info &amp;amp; knowledge needed for a smooth transition.&lt;/p&gt;

&lt;p&gt;There was zero point leaving on bad terms or doing a bad job, plus that just wasn't me.&lt;/p&gt;

&lt;h1&gt;
  
  
  Trust in thyself
&lt;/h1&gt;

&lt;p&gt;I didn't have a role to go onto, but knew what I wanted to do - I wanted to go contracting. I've previously ran my own web design &amp;amp; dev agencies for 12+ years, plus with 24 years straight industry experience I had not just the tech skills and experience, but business sense and drive to go it alone.&lt;/p&gt;

&lt;p&gt;Working on contracts was going to be a little different to running an agency however, so there was some learning to do, as my new focus would be on lengths of time rather than set projects. I'd for the previous 2 months studied hard to read up about contracting and it just sounded like "me", so I'd immersed myself in all the reading I could do on it and knew what differences to get used to.&lt;/p&gt;

&lt;p&gt;My employer was kind enough to let me go at a shorter notice if I found a contract I liked, which I did within just a few days and a couple of weeks after that, I was gone. From memory, from the time I said "I quit!" to working on my first contract was just 3 weeks. There was no downtime, I finished on a Friday and starting my next adventure on the Monday.&lt;/p&gt;

&lt;p&gt;So how did it go and what did I learn?&lt;/p&gt;

&lt;h1&gt;
  
  
  Looking back
&lt;/h1&gt;

&lt;p&gt;I'm very pleased to say just about everything has gone perfectly, thankfully I can only think of a couple of very minor items I could have done better. But it's been 99% awesome really.&lt;/p&gt;

&lt;p&gt;Firstly, my stress levels dropped almost instantly. I no longer needed to prove my worth for a role I was chasing, that fight was over. I could now focus on being the best contractor I could. I only had to prove myself to &lt;strong&gt;&lt;em&gt;myself&lt;/em&gt;&lt;/strong&gt; (...plus of course my clients, super important!).&lt;/p&gt;

&lt;p&gt;I decided early on to be entirely cloud based, compared to how I ran my agencies which were a hybrid of cloud and on-prem based. I love my new approach of having everything available for myself entirely online - it makes for very convinient updating of just about anything; from finances to accounting, legal to documentation, code to collaboration and more from any device.&lt;/p&gt;

&lt;p&gt;One of the very best additions I have this time is a "to do" app. Previously I'd worked from paper lists and calendars, but a great app to handle my scheduled tasks has been game changing. I now know exactly what to do daily and often work in "circles" of repeating tasks to keep ontop of ever changing aspects of running my business. It's pretty much my new boss. 😆&lt;/p&gt;

&lt;p&gt;I'm a little better off financially. Not much, but a little, so that's great. But quitting and working for myself was always about being &lt;em&gt;happier&lt;/em&gt; each day and I've certainly achieved that.&lt;/p&gt;

&lt;p&gt;So - I'm much happier, more independent and financially a little better - what are the downsides?&lt;/p&gt;

&lt;h1&gt;
  
  
  Downsides - some, but not many!
&lt;/h1&gt;

&lt;p&gt;The biggest downside, which is likely very obvious, is the responsibility. I'm now responsible for so much more than just the tech side of my role. I'm a director and so there's now the financial, legal, sales, documentation and more to contend with. But, running my own companies for many years, I knew all this already and all those years were great training for to really do things perfectly this time.&lt;/p&gt;

&lt;p&gt;Having no &lt;em&gt;team mates&lt;/em&gt; is a drawback I guess. But really, I have a team I work with, they're the fantastic people I collaborate with daily. So I'm not isolated at all, in-fact I'm very much engaged with others every day, maybe even more than before. I work on an amazing app, learn something new almost every day and have people to bounce ideas off, help and ask for help.&lt;/p&gt;

&lt;p&gt;I could say there's no personal growth plans, development plans, training etc? However, that's not true - they're no longer set out for you by someone else, but you can set your own ...and most definitely should! Don't get stale by just doing your job - learn, achieve and grow every day. Set yourself goals.&lt;/p&gt;

&lt;h1&gt;
  
  
  The right decision?
&lt;/h1&gt;

&lt;p&gt;I knew quitting and going contracting were suitable for me. I am highly driven, have experience with running businesses and a lot of experience in the industry. The big unknown was if I could get a contract fairly quickly and I did, plus quicker than expected.&lt;/p&gt;

&lt;p&gt;I'm thankful I've made great decisions for the last year, but it wasn't without preperation, working extremely hard (especially the initial 3 months). I feel I've through through 3 big stages so far  of (1) survival, (2) stabilisation and now onto (3) evolving. I'm certainly proud of all I've achieved, but there's ever more to do. I know it never ends and that's something to not just be comfortable with, but relish in.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final thoughts
&lt;/h1&gt;

&lt;p&gt;Is what I did right for everyone? Absolutely not! Do I recommend it for you? That's not my call to make, it'd be up to you. But, I would say, there are independent approaches to being a professional, you don't &lt;strong&gt;&lt;em&gt;have&lt;/em&gt;&lt;/strong&gt; to be a permanent employee.&lt;/p&gt;

&lt;p&gt;If you're considering going it alone as a web dev, with the right circumstances and attitude, it can be very much worthwhile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;As a contractor, success depends only on you.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What about you? Are you considering carving your own path? Maybe you're already a contractor? How have you found things and do you have advice to give?&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>leadership</category>
      <category>startup</category>
    </item>
    <item>
      <title>Perplexity is now my default search engine</title>
      <dc:creator>Matt Pass</dc:creator>
      <pubDate>Wed, 12 Feb 2025 11:55:15 +0000</pubDate>
      <link>https://dev.to/matt_pass/perplexity-is-now-my-default-search-engine-1ai2</link>
      <guid>https://dev.to/matt_pass/perplexity-is-now-my-default-search-engine-1ai2</guid>
      <description>&lt;p&gt;I've long been a fan of Google and the results it gives. It was a game changer when it launched in the mid 90's and Lycos, AltaVista, Ask Jeeves, Yahoo and were around; it just seemed to provide better results and people gravitated to it for its simple, clean approach and great suggestions for your given search.&lt;/p&gt;

&lt;p&gt;But times have moved on and the era of AI is truly here, in so many ways. Google still sticks to its 10 results per page approach seemingly to appease long time users but often shoehorns some AI result above these site links. This, along with 3-4 sponsored links taking pole position (even above the AI Overview), is all starting to feel like an annoying and lackluster experience.&lt;/p&gt;

&lt;p&gt;So, pleased with the use of &lt;a href="https://www.perplexity.ai" rel="noopener noreferrer"&gt;Perplexity&lt;/a&gt; recently (see &lt;a href="https://dev.to/matt_pass/how-and-where-i-use-ai-for-web-dev-2ob7"&gt;here&lt;/a&gt;) I've decided to make it my default search engine now. 🤩&lt;/p&gt;

&lt;p&gt;It was very simple to do (in Chrome, will be similar approach for other browsers), I simply went here to begin:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Settings &amp;gt; Search Engine &amp;gt; Manage search engines and site search&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next to &lt;strong&gt;Site Search&lt;/strong&gt; I clicked &lt;strong&gt;Add&lt;/strong&gt; and set the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmr2xuss16iay0e3ngk5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmr2xuss16iay0e3ngk5w.png" alt="Changing site search settings" width="529" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means in the address bar I can now type &lt;strong&gt;@p&lt;/strong&gt; and hit &lt;strong&gt;Tab&lt;/strong&gt; or &lt;strong&gt;Space&lt;/strong&gt; key and it'll show I'm going to direct my query at Perplexity and then just type your query, ie:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbw93sfk0u69z7vs45s7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbw93sfk0u69z7vs45s7l.png" alt="Perplexity search query in address bar" width="437" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hitting the &lt;strong&gt;Enter&lt;/strong&gt; key does what you expect - searches at Perplexity for that query. It's worth noting there's a 2-3 second pause while it checks you're not a bot (I'm sure this will be reduced in time), but within maybe 4 seconds since sending my query it gives exactly what I wanted, with an explanation, image and video options, related searches and asks if I want to ask a follow up query:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwi846wcwjygg64t1sew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwi846wcwjygg64t1sew.png" alt="FizzBuzz result in TypeScript" width="800" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked the follow up query &lt;strong&gt;Can you now provide it in Python&lt;/strong&gt; and it does a similar thing to before, but this time there's no 2-3 second pause now (as I'm already on the site) and seems to return what I asked for in under a second. Pretty neat! 🌈🦄😎👍&lt;/p&gt;

&lt;p&gt;The slight pause from hitting the site from a fresh start could be a little irratating (as a search a lot during the day), but I already know it'll be a faster choice than Google's mix of sponsored links, AI overview and sometimes lacking site links which I need to fish around in to get what I want. Perplexity seems to provide exactly what I need, all packaged up into a great response. So I'll try it as my default search engine for the foreseeable future. Sorry Google, but after 25 years of use, you're no longer my default search engine.&lt;/p&gt;

&lt;p&gt;However, I do want options, should Perplexity not live up to my hopes. So the last change I've made is to make Perplexity the default search engine (by clicking the 3 dots next to it and choosing &lt;strong&gt;Make default&lt;/strong&gt; but I'm keeping &lt;strong&gt;Google&lt;/strong&gt; and &lt;strong&gt;DuckDuckGo&lt;/strong&gt; as options for me, with the shortcuts &lt;strong&gt;@g&lt;/strong&gt; and &lt;strong&gt;@d&lt;/strong&gt; respectively:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5xjvwwp2cqbjtl6q3fy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5xjvwwp2cqbjtl6q3fy.png" alt="Search engine choices" width="662" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So from here on, I can search using:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjp70i91c5sjxgetdxrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjp70i91c5sjxgetdxrq.png" alt="Table of search examples using default and shortcuts" width="421" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This all feels like a pretty neat setup for an AI driven, clutter feel search experience in 2025.&lt;/p&gt;

&lt;p&gt;Hope this is helpful to you? Have you done anything similar? Let me know in the comments!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>search</category>
      <category>ai</category>
    </item>
    <item>
      <title>How and where I use AI for web dev</title>
      <dc:creator>Matt Pass</dc:creator>
      <pubDate>Sun, 09 Feb 2025 11:32:56 +0000</pubDate>
      <link>https://dev.to/matt_pass/how-and-where-i-use-ai-for-web-dev-2ob7</link>
      <guid>https://dev.to/matt_pass/how-and-where-i-use-ai-for-web-dev-2ob7</guid>
      <description>&lt;p&gt;The uses of AI in web development have really exploded over the last few years and show no sign of slowing down, if anything just seems to be accelerating. That said, there's some pretty far fetched examples online supposedly producing entire apps with a prompt and a single click. One day, that might be the case - but we're still some way off that being a sensible reality right now.&lt;/p&gt;

&lt;p&gt;So I thought I'd pay attention during my week to see how and where I use AI and found it's in surprisingly few, but targeted areas.&lt;/p&gt;

&lt;h2&gt;
  
  
  How and where?
&lt;/h2&gt;

&lt;p&gt;Over the last couple of years I've gravitated towards thinking of AI like a really smart assistant. I get it to do the mundane tasks, explain code to me and to improve what I have... and that works pretty well for me!&lt;/p&gt;

&lt;p&gt;Here's how I used it during a typical week:&lt;/p&gt;

&lt;h2&gt;
  
  
  Copilot - for assisting while coding
&lt;/h2&gt;

&lt;p&gt;This is by far my biggest use of AI. As I code I pause for a second to give &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;Copilot&lt;/a&gt; chance to continue what I'm coding. About half the time it guesses perfectly, which is then highly satisfying when you hit the Tab key to apply that in your code. The other half of the time, it's provided something which isn't right, so I'll code a little more and again wait, to give it another 50/50 chance.&lt;/p&gt;

&lt;p&gt;I've now learned to spot very quickly if it's right or not and this binary "yes, that's it, accepted" or "no, I'll code more" rinse and repeat cycle has become quite normal to me now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copilot - for chat
&lt;/h2&gt;

&lt;p&gt;Sometimes when working on a tricky aspect I know would take me a little time and Copilot likely isn't going to provide what I need in the editor pane, I'll pop open the Copilot chat window. Sure, I could probably explain in a comment to help it assist directly in the editor, but it feels messy to add a comment you know you'll delete, plus the chat pane keeps your past discussions.&lt;/p&gt;

&lt;p&gt;Typical uses are when I'd like to refactor some code, or maybe help assist with a regex pattern. A quick explanation, ensuring you choose what it should use for context (from the tabs you have open, and what you've selected) I find it can help produce not just the code you need, but an explanation as to why also.&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT - for natural language generation
&lt;/h2&gt;

&lt;p&gt;Aside from code, sometimes a little content needs to be written. I do okay with copywriting (in my very humble opinion), but occasionally want to get some extra perspectives, sometimes to shorten content, or maybe to elaborate on an area and &lt;a href="https://chatgpt.com" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt; still proves to be an excellent resource for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perplexity - to give a deeper understanding
&lt;/h2&gt;

&lt;p&gt;I still use Google for search, as the "usually always on screen" address bar of my browser provides a handy, instant way to search, so for ease of access I think I'll use Google for some time to come. The quality of results can be a little frustrating however and sometimes I'll need to click a number of links before I might get the answers I was seeking, perhaps needing to piece together those answers mentally if overall a few sites were needed for the answer.&lt;/p&gt;

&lt;p&gt;So recently I've been using &lt;a href="https://www.perplexity.ai/" rel="noopener noreferrer"&gt;Perplexity&lt;/a&gt; more and more. I find it can save time by collating information from many sources and providing a very well written response to my question, which includes links to all the places it sourced information from. It's like all the juggling of info I had to do in my mind is no longer needed, it's all laid out for me.&lt;/p&gt;

&lt;p&gt;Some of the greatest uses I've found for Perplexity, are not just to provide answers, but explain &lt;em&gt;why&lt;/em&gt; something is the way it is or give comparisons across information. A great example of this, is recently I needed to understand the differences between GitHub Flavored Markdown and CommonMark. Google did't help much - the search results explained each, but not comparitively. Perplexity laid it all out for me to show all those differences in an easy to digest way, plus a shareable URL too: &lt;a href="https://www.perplexity.ai/search/what-are-the-differences-betwe-DMZ1oLbDTmKDOgVwh0hXqg" rel="noopener noreferrer"&gt;https://www.perplexity.ai/search/what-are-the-differences-betwe-DMZ1oLbDTmKDOgVwh0hXqg&lt;/a&gt; - pretty awesome!&lt;/p&gt;

&lt;h2&gt;
  
  
  Canva - for image creation
&lt;/h2&gt;

&lt;p&gt;Perhaps once a week I need a royalty free image of something specific (like the image used in this article). It can be a hassle to head to the various royalty free image sites, struggle to find what you'd like, then need to pay for it, etc.&lt;/p&gt;

&lt;p&gt;I've no preference to any image generating AI solution right now, but &lt;a href="https://www.canva.com" rel="noopener noreferrer"&gt;Canva&lt;/a&gt; is perhaps my preference for now. They do a pretty good job, but could produce better images for my needs. However, I very much suspect that's me not providing specific enough prompts - after all, they're not mind readers, I need to actually explain what I'd like (ie, what the image should include, the style of it and more). A skill I should improve on for sure.&lt;/p&gt;

&lt;h2&gt;
  
  
  That's it!
&lt;/h2&gt;

&lt;p&gt;It's been interesting to find I use AI all day, every day, but in surprisingly few areas and for specific needs. I've not got caught up with the hype of magic solutions out there, but over time have selectively chosen to use AI how and where I need it. From assisting while coding, to explaining tricky areas, to saving time on mundane tasks. It helps give me new considerations in written content, deeper understanding and comparisons where I want them and saves a bunch of time creating images (that I'm not creative enough to produce anyway). &lt;/p&gt;

&lt;h2&gt;
  
  
  How and where do you use AI?
&lt;/h2&gt;

&lt;p&gt;So, during an average week, how and where do you use AI? Do you use AI more or less than you were expecting and have you gravitated towards selective uses? Are there any great tools or uses I'm missing out on? It'd be great to know in the comments!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>coding</category>
      <category>development</category>
    </item>
    <item>
      <title>Get a Git productivity boost with FZF</title>
      <dc:creator>Matt Pass</dc:creator>
      <pubDate>Mon, 20 Jan 2025 11:30:24 +0000</pubDate>
      <link>https://dev.to/matt_pass/get-a-git-productivity-boost-with-fzf-3ok2</link>
      <guid>https://dev.to/matt_pass/get-a-git-productivity-boost-with-fzf-3ok2</guid>
      <description>&lt;p&gt;There are some common Git tasks that developers do daily - commiting code, pushing to a central repository, switching  branches and more. Many do this in the IDE or code editor and some prefer to do this via the command line.&lt;/p&gt;

&lt;p&gt;I fall into the latter category. I guess I like the control and the daily exercise of working with Git, so if I need to do something complex with Git itself, I'm well used to using it directly.&lt;/p&gt;

&lt;p&gt;However, the common tasks of committing, switching branches, pushing code and more can feel like a bit of a chore and typos can get a little annoying, so I thought I'd level up by automating some parts for efficiency and to avoid typing errors.&lt;/p&gt;

&lt;p&gt;I'll show what I came up with shortly, but first let's look at FZF.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is FZF?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;FZF&lt;/a&gt; is a command line fuzzy finder. It's an incredibly powerful tool that you can use (at its simplest) to filter lists as you type.&lt;/p&gt;

&lt;p&gt;We're going to use this to display a list of branches available, to switch from (when switching branches) and also display a list of files that have changed, to select from (when choosing files to commit).&lt;/p&gt;

&lt;p&gt;Okay, let's get to it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Changing branches using FZF
&lt;/h2&gt;

&lt;p&gt;You can add something like this to your "RC file" in your Home directory (whether that's &lt;code&gt;~/.bashrc&lt;/code&gt;, &lt;code&gt;~/.zshrc&lt;/code&gt; or something else):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Checkout git branches interactively with fzf (fuzzy finder)&lt;/span&gt;
&lt;span class="k"&gt;function &lt;/span&gt;gcb&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"all"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;BRANCHFOCUS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-a"&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;git checkout &lt;span class="nv"&gt;$1&lt;/span&gt;
        &lt;span class="k"&gt;return
    else
        &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;BRANCHFOCUS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;
    &lt;span class="k"&gt;fi
    &lt;/span&gt;git branch &lt;span class="nv"&gt;$BRANCHFOCUS&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; | fzf &lt;span class="nt"&gt;--header&lt;/span&gt; Checkout | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/remotes\/origin\///'&lt;/span&gt; | xargs git checkout
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll need to open a new terminal window after adding this for it to take effect.&lt;/p&gt;

&lt;p&gt;Okay, let's look at the code here to explain what's going on. We've a new function, which I've called &lt;code&gt;gcb&lt;/code&gt; (for "git change branch", but it can be called whatever you like).&lt;/p&gt;

&lt;p&gt;If the 1st argument you provide is &lt;code&gt;all&lt;/code&gt; (that is, you executed &lt;code&gt;gcb all&lt;/code&gt;), then the variable &lt;code&gt;BRANCHFOCUS&lt;/code&gt; will contain the value &lt;code&gt;-a&lt;/code&gt; (meaning "all"), we'll get to use of that shortly.&lt;/p&gt;

&lt;p&gt;If the 1st argument wasn't that, but is provided - eg &lt;code&gt;gcb main&lt;/code&gt;, we provided the branch name and should switch to that and return straight away.&lt;/p&gt;

&lt;p&gt;Otherwise, we didn't provide an argument, we only executed &lt;code&gt;gcb&lt;/code&gt; so set &lt;code&gt;BRANCHFOCUS&lt;/code&gt; to an empty string and let's continue. So &lt;code&gt;BRANCHFOCUS&lt;/code&gt; is either &lt;code&gt;-a&lt;/code&gt; or an empty string as we move forward.&lt;/p&gt;

&lt;p&gt;The last line to consider is the most complex one, we'll run &lt;code&gt;git branch&lt;/code&gt; (to get branches) with either the &lt;code&gt;-a&lt;/code&gt; flag or nothing extra, to either get all branches (including remote branches), or just the local ones on your machine. We'll sort that list in reverse order and pass to FZF with the title "Checkout", that'll display our list of branches for us to pick from. From the choice picked, we'll use &lt;code&gt;sed&lt;/code&gt; to remove any &lt;code&gt;remotes/origin/&lt;/code&gt; prefix and finally, pass the name chosen to &lt;code&gt;git checkout&lt;/code&gt; using &lt;code&gt;xargs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Wow, that was a lot to explain, but the result is pretty awesome:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcb         # Shows a list of local branches to pick from
gcb all     # Shows a list of local + remote branches to pick from
gcb &amp;lt;name&amp;gt;  # Will instantly switch to that branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's an example of running &lt;code&gt;gcb all&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8rfw3oxkf5b6ncwkfyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8rfw3oxkf5b6ncwkfyc.png" alt="Image description" width="419" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It initially shows all 682 available branches and as we type, shows branches that match. Use your arrow keys (or mouse) to select a choice and hit Enter to switch to it. No more trying to find branch names, copy &amp;amp; paste them or even type and get typo errors.&lt;/p&gt;

&lt;p&gt;Much simpler!&lt;/p&gt;

&lt;h2&gt;
  
  
  Committing code using FZF
&lt;/h2&gt;

&lt;p&gt;This next example is just as useful and contains even less code. Here we'll use FZF to display a list of changed files available for committing and then also ask for a commit message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Commit file(s) to Git interactively with fzf (fuzzy finder)&lt;/span&gt;
&lt;span class="k"&gt;function &lt;/span&gt;gc&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;GC_ARGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;git diff &lt;span class="nt"&gt;--name-only&lt;/span&gt; | fzf &lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="si"&gt;))&lt;/span&gt;
    print &lt;span class="nt"&gt;-P&lt;/span&gt; &lt;span class="s2"&gt;"Enter commit message:"&lt;/span&gt;
    /bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'read -e COMMIT_MESSAGE &amp;amp;&amp;amp; git commit $1 -m "$COMMIT_MESSAGE"'&lt;/span&gt; _ &lt;span class="nv"&gt;$GC_ARGS&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hopefully the code is mostly understandable, but let's look at it. Again, we start a new function, called &lt;code&gt;gc&lt;/code&gt; (for "git commit") but call it what you'd like.&lt;/p&gt;

&lt;p&gt;It starts another shell inside a shell, which runs &lt;code&gt;git diff&lt;/code&gt; and asks for the names only of files that have changed. This list is passed along to FZF using &lt;code&gt;-m&lt;/code&gt; ("multi select") so from this list we can pick not just one but many (using the &lt;code&gt;Tab&lt;/code&gt; key and &lt;code&gt;Enter&lt;/code&gt; to confirm selections).&lt;/p&gt;

&lt;p&gt;The choices you make are passed to it's parent shell which echo's them out onto a single line. That's then our list of space separated files we'd like to commit, as the value of &lt;code&gt;GC_ARGS&lt;/code&gt;, eg &lt;code&gt;file-abc.js some-other-file.json&lt;/code&gt; etc.&lt;/p&gt;

&lt;p&gt;Finally, we display some text, which asks to for a commit message, which we'll get keyboard input for using &lt;code&gt;read -e&lt;/code&gt;. (We need to do using inside &lt;code&gt;bash&lt;/code&gt;, as other shells such as ZShell don't work as you'd probably like with arrow keys if you'd like to traverse your text while editing your message). So we execute the &lt;code&gt;/bin/bash&lt;/code&gt; shell with &lt;code&gt;-c&lt;/code&gt; to state we're providing a command, and the first part of what we provide is &lt;code&gt;read -e&lt;/code&gt; ...so Bash is executing this for us.&lt;/p&gt;

&lt;p&gt;The result of the keyboard input is stored in variable &lt;code&gt;COMMIT_MESSAGE&lt;/code&gt; and finally we use &lt;code&gt;git commit&lt;/code&gt; with that message, on the files within &lt;code&gt;GC_ARGS&lt;/code&gt; - which are passed along to the Bash shell as &lt;code&gt;$1&lt;/code&gt; as the first argument. (Note that &lt;code&gt;_&lt;/code&gt; is just a placeholder for the name of the shell being used, not important to us).&lt;/p&gt;

&lt;p&gt;Here's an example of usage, after I amended 3 files, so they're ready to commit and running &lt;code&gt;gc&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckag8lbh8lt2jiihqc9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckag8lbh8lt2jiihqc9i.png" alt="Image description" width="140" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fantastic - it shows the 3 files I changed, can use &lt;code&gt;Tab&lt;/code&gt; to select files (here I selected &lt;code&gt;tsconfig.json&lt;/code&gt; and &lt;code&gt;.typos.toml&lt;/code&gt;) and when I hit the &lt;code&gt;Enter&lt;/code&gt; key it asks for a commit message, which will then commit those couple of files, with that commit message. Sweet!&lt;/p&gt;

&lt;h1&gt;
  
  
  Wrapping up
&lt;/h1&gt;

&lt;p&gt;Shell code can feel a little complex, but in a relatively small amount of code (and with the help of FZF) we can have a more efficient, dynamic dev experience that helps in everyday tasks such as changing branches and commiting files that we select.&lt;/p&gt;

&lt;p&gt;This really only scratches the surface of what FZF can do, but hopefully this shows a couple of uses that can save you time (and frustration) during your dev day!&lt;/p&gt;

&lt;p&gt;Let me know your thoughts and if you've any other great use cases.&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>linux</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
