Prompt hacks aka make the best coding out of GPT

THIS WILL BE CONSTANT WORK IN PROGRESS

I've been using a paid subscription to ChatGPT Plus since May 2023 and I'm still happy with the usage. It's one of those tools you have to master to get most of the time spent with it. There are a lot of benefits to use it, of course there are also negative aspects and bugs. Some of them can be mitigated, and that's the purpose of the current post.

Disclaimer / Context of use 🧾

  • I'm ChatGPT mostly for scripts and each conversation is focused on singular topics, i.e single-file codebases if possible.
  • I don't use Open API Keys and I'm not interested to use OpenAI directly. I've been on a paid plan for OpenAI and was charged way too much for my needs. I advise anyone to use ChatGPT Plus which remain to this day worth it and good enough both for personal and professional.
  • This article was not written nor reviewed by AI/ChatGPT.

Lessons learned - Do βœ…

  • Shorten your expectations. Timebox your interactions with ChatGPT. If it takes longer than you expect to reach a solution, stop and do your homework instead, debugging yourself or simplify the problem to solve or take a break...
  • Test after each change. ChatGPT will make you lose faith by repeating the same mistakes, by removing sensitive code, by providing incomplete solutions, always verify.
  • Before running or committing anything generated by ChatGPT, always compare with the previous situation you had. Git diff the result of changes. If you have any doubt about a specific change, submit the git diff to ChatGPT for review and ask for explanations while also explaining why you have doubt (failing tests, errors at runtime, weird code removal, ...).
  • Tell ChatGPT to always decouple code in functions.
  • Instruct to use minimalist code, and avoid comments in code, respect your specific style (if you provide examples), instruct to write the code that takes the least amount of lines and space and to avoid long functions.
  • Divide to conquer: Keep one conversation per problem. Once done with the problem, validate the solution (test!), commit locally, and delete or archive the conversation to keep your Chat history clean from everything you don't need.
  • Take steps: Try to limit ChatGPT's attention to one single file or one single function at a time.
  • If you have lot of work you expect ChatGPT to perform for you, be patient and request one change at a time, then review the code diff and then the outcome, and only if it's validated, commit and move to the next step. ChatGPT sucks at multitasking. Keep the rest of your TODO list somewhere else to keep track of what remains to be requested from ChatGPT.
  • You will have a cleaner Chat if you take this habit:
    • Ask something from ChatGPT.
    • ChatGPT will answer you something, whatever it is, you will likely want to correct ChatGPT. Refrain yourself and do this instead: cancel what ChatGPT is doing, edit your last input to be more precise and re-submit it, ChatGPT will replace its unhelpful response with something more clever. And you will improve the overall quality of the discussion.
  • You will be given better results on popular topics than on niche topics / technologies.
  • Ask to only output the code that require change, e.g add this at the end of your prompt :
    just output the function(s) needing change
  • Ask to not change the existing comments, login logic, variables values in the code that is not impacted by the change.
  • If you really want to multitask, open multiple ChatGPT sessions (browser tabs) in parallel, each focused on distinct changes, so you can multitask while ChatGPT stays focused on single tasks πŸ™‚
  • One change at a time. If ChatGPT keeps making error, step back, restart from to the latest stable version of your code, and ask to make minimal changes, step by step, while you validate each increment.
  • When happy with your changes, ask ChatGPT to improve its performance or clean the code or keep it minimal.
  • When debugging your code with ChatGPT, provide stack traces, inputs, outputs and even the copy of the code that seems buggy (based on the stack trace).
  • Be suspicious if ChatGPT changes your code way too much or introduce weird changes to dependencies. Always review, check, investigate.
  • ChatGPT will likely be interesting to use only for writing very small and boring scripts to batch automate some tasks. But you are responsible for the whole, do not forget that. And test. And understand the code. Make it easy to understand and debug. If you can't explain it, rewrite.
  • ChatGPT could be good at documenting tasks or at writing tests, but for working on complex code it will mostly get 70% of the results then will suck your time and patience.

Lessons learned - Avoid ❌

  • Don't trust ChatGPT outputs. OpenAI is known for dreaming and also tends to complexify solutions to simple problems.
  • Don't run nor commit anything generated by ChatGPT that you don't understand and always compare ChatGPT's solution with what you had before.
  • Don't ask too many improvements or bug fixes at once or be prepared to deal with many new errors and regressions.
  • Don't keep conversations for too long, as all the initial context will likely be forgotten about by ChatGPT and you will suffer, also it will cause a lot of scrolling and augment the size of the web page which will be slower to load and will likely crash your browser tab at some point.
  • Don't switch context / files / problems in the same conversation. It's a waste of time and you will suffer later when trying to source specific content or make sense of anything.
  • Don't share secrets/passwords with ChatGPT.
  • Don't waste your time when the LLM seems confused or unable to solve your problem. Either reshape your problem statement or restart from the latest known stable state, ideally in a new conversation. Be confident in your own abilities. Don't be too dependent on any LLM. I once wasted a whole evening and night trying to get ChatGPT to write the solution for me then trying to use it to fix the problems it caused, I was too lazy to code something by myself from the start.
  • Don't expect ChatGPT to be as efficient on big codebases and complex problems as it is on small scripts and simple problems. So use it more often for the latter and keep the fun of solving the big problems yourself.
  • Don't expect ChatGPT to understand a single thing you do nor why he generates his code. it's a dumb machine without creativity built in. It has to be treated as such and with caution.
  • When trying to help you fixing problems caused by its previous solutions, ChatGPT may enter and endless loop of replacing one solution with another, without understanding the context. Before copy pasting anything from ChatGPT, make your own investigation and check the logs of the apps that do not behave as expected, before touching the code. If you find interesting logs, then provide those to ChatGPT or make your own investigation. Do not depend on ChatGPT for too much grunt and research work. You are better than that.
  • Don't expect ChatGPT to run well and fast on huge bloated scripts. That should encourage you to decouple your code into functions and modules and specialized files/modules/components/...

Relevant references

  • The 70% problem: Hard truths about AI-assisted coding (substack.com)
  • ChatGPT could be used to address the fact that solving some problems is costly in term of engineering. This XKCD meme below should be likely made obsolete if LLMs are used to provide the programs to automate the tasks. For instance when faced with some painful work, I rather use LLM to write me a script to tackle the task. It will be faster than me on some occasions, which itself help removing the need for manual work for tedious tasks, also help removing the need to prompt LLM in the future for that same task, since the script is already provided.
Automation (by XKCD)

Legend: "I spend a lot of time on this task. I should write a program automating it!"

via https://xkcd.com/1319/

is It Worth the Time? (by XKCD)

Legend: "How long can you work on making a routine task more efficient before you're spending more time than you save? (across five years)"

via https://xkcd.com/1205/

Extras

  • If you lose focus on the ChatGPT session in your browser, it's likely the calculation process will interrupt.
  • ChatGPT seems stuck at generating the output ? Refreshing the page might be enough, in other cases ChatGPT might automatically continue the generation or will show a button you can hit to force this action.
  • I recommend trying ollama so you can work offline and without feeding all your sensitive data into OpenAI.

Thank you πŸ™‚


Dark patterns collection

i.e UX patterns that make me feel like I should report to https://grumpy.website/.

I'm regularly battling to browse the web like before and maintain Inbox Zero for my work and personal mailboxes and I have to say it's not a fun game. Especially when some crappy tactics at are play like below.

Let's start a collection with the patterns I criticize and update this post regularly with findings.

CloudFlare (via RYM / rateyourmusic.com and many others)

Every few clicks when browsing their website with my paid account, I'm facing this "human status check" which is a big annoyance. I've informed them it's a pain, especially every few clicks and as a subscribed user. They promise their developers are working on it. We will see...

Elastic.co

First example is Elastic (elastic.co), with a work email I never asked for, inviting me to a local event. The email is long and I don't care about the Pizza party at all which is the first thing they mention in their agenda. I want to stop receiving such emails.

Looking at the bottom of their email, I notice a first unsubscribe button.

It redirects to a subscription page... (see below). Clever... !

When looking more closely, there is a second unsubscribe button, very hard to see due to the lack of contrast.

Who has then time to fill their unsubscribe form ? Not every weirdo. But that's it seems the effort which is due just for allowing me to regain a little more quiet in my mailbox. So now you know.

Homebrew (Mac)

You use brew install to run a small utility binary and ... you scroll through 630 lines of output and recompilation to see if your utility is finally there. WHY. SO. MUCH. OUTPUT.

Medium

No, you shall not ask my private data show me some HTML on the web. Well tried but nope.

I won't trust your doomed kingdom. Related: Don’t build your castle in other people’s kingdoms.

OpenAI / ChatGPT

I regularly have to play a few puzzles successively. In average 2 or 5. If you fail, you start over. It's very time consuming.

OrbStack updates

Leave me develop please.

RateYourMusic / Sonemic

This ones make me sad as RYM belongs to my favorite bookmarks. We are punished with this "prove you are human" form every few clicks. So annoying.

And also, from time to time.... Thank you CloudFlare.

NodeBB

Preventing users from contributing a forum for some arbitrary period is quite stupid especially if done AFTER you accept their account registration.

Once the waiting period is completed, the post is queued. This is better, yet annoying of course.

OVH

After months with Contabo (VPS), I decided it was time to close my domain and hosting subscriptions managed at OVH. I disabled the automated renewal a few weeks ago, and managed to setup redirects on my old websites. My subscriptions should be cancelled automatically but I can't wait and I want to get that out of my mind, so I want to force a manual cancellation.

To my surprise, it took me a lot of emails and exchanges with support. I understand the security measures and no one would like its accounts and services revoked by accident.

The problem is mostly the poor UX and customer support for getting this done. Let dig deeper.

When trying to cancel any service, I just get error without explanation nor resolution steps.

Later did I find emails from OVH asking me to confirm my revocation, so I could at least complete some of the steps, but it required me to leave my workflow and switch from my admin panel to emails, then manage those emails, then double check my admin panels for updates of services statuses...

In the end I opened a ticket to OVH support asking them to delete my account and the related services. They closed the ticket asking me to close my account only after services are revoked, which let me again with an unresolved solution.

I had to reopen the ticket and provide them the evidence above so they know I can't close some of my services. Closing a customer complaint on user's behalf without asking feedback is probably a tactic for improving their KPIs, but it ultimately tell they consider their customers to be nothing more than complainers with no real problem to be solved. This also tell the culture of OVH has diverged from customer first. No wonder I'm leaving you, OVH, as I'm expecting more from a service provider.


Effective content curation

I went up with this workflow that seem to pass the test of time and I'm sharing it with you :

  • I manage to keep up with Inbox zero, almost. The only mails I keep are mostly invoices/accounting related and require sometimes discussion with accountant and my partner. I try anyway to snooze them for later and schedule them as tasks.
  • I'm using ChatGPT Β» Summarize & Chat extension for Brave/Chromium (browsers) in order to save time at scrolling long articles in my inbox but yet it's important to note it's shrinking content more than summarizing it.
  • I'm not subscribing to any newsletter, everything is read through MiniFlux (RSS curator. If you don't know about that, read -> what is RSS?), combined with RSS-Bridge and ChangeDetection and some tips, all self-hosted. For any newsletter that cannot be replaced with RSS feed, I rely on my hero https://kill-the-newsletter.com/. And if email has your preference over RSS, I recommend you BlogToTrottr to follow RSS/Atom in real-time by email.
  • I edit my Feed titles with emojis expressing how I feel about their interest : πŸ˜• (Boring?) πŸ˜ƒ (Joyful read) etc.
  • I categorize feeds and label them also with emojis and sort them from the best to the worst. Those visuals clues really help. When I see nothing interesting for a while in any RSS I've subscribed to, I remove it from Miniflux.
  • I'm customizing my RSS curation in Miniflux through some hacks.
  • I dreaming to keep a maximum of 20/30 RSS feeds of interest but reality is I have hundred. Among those, I find maybe a dozen to be absolutely fantastic and I'm even sharing them in my /links section.
  • I've configured Tampermonkey browser extension to take control of the rendering of my RSS feeds list and replace the whole page with "FOCUS", at least 80% of time.
  • Something too long to read but that looks interesting is immediately dropped from Miniflux and shared/saved into Shaarli for later read. The goal is to declutter my subscriptions inbox.
  • Articles I browser randomly and are already saved in Shaarli are saved with tags like "x2" if it's second time I save them, "x3" if it's the third save I save them, etc.
  • If I find any image or PDF of interest, I save them locally to my Dropbox folder of interest. I have a folder for Books, which is subject to automatic triage with some scripting, also my ePubs are automatically converted to PDF. Duplicate files are moved to subfolders like "x2" if it's second time I save the same book, "x3" if it's third time, etc.
  • Everything in Shaarli is manually labelled based on keywords because Shaarli does not support automatic labelling like Wallabag. I don't want to waste anytime adding manual labels so I'm likely about to integrate similar features either as a plugin for Shaarli, either in Tapas which is my new project I elaborate in Ideas.
  • I subscribe to only 1 podcast which is Bombo Podcast, the one of my partner.
  • I want to take time for whatever is worth reading, and skip the rest fast.
  • Whatever is not worth is submitted to shrinking.

What it breaks and what it brings

Changes are not good or bad and not every success means perfection.

Some will revolutionize your habits, your workflow. The good or bad perception of the change depends surely on your own experience, your functioning.

Since recently I've turned my smartphone and laptop screens to grayscale.

Is it any good or better ? Sure, for making everything more boring and fight screen addiction, it helps (archived). I also turned Dark mode on in every app and websites that support it. And even this blog now is turned black & white, for the best I hope.

Changes can break compatibility, readability, harm productivity for instance I had to restore colors just for when my little one watches videos or when I edit some colorful documents we share with my partner. Using Grayscale the web extension on my Brave instance also caused my screen to blink a lot and I had to find an alternative. After a few days of experimenting with grayscale on all my devices, I really enjoy the experience especially in public areas, and I tend to find colorful screens more painful to watch.

Another example is that I use SyncThing with success for keeping my Obsidian in sync between my mobile and my laptops. It worked great at first, but then things mixed up between Obsidian Git based Sync and SyncThing, and I almost lost weeks of work. As a result I limit Git based sync solely to one instance of Obsidian, and also had to tune SyncThing to ignore some changes (similar to .gitignore).

Speaking of Obsidian, I'm recently starting to use Dataview a lot for generating dynamic content in notes with content extracted from other notes. It works super great but cumulating multiple dataviews in a document makes everything quite slow. Yet I'm not giving up on them, with time I'll find solutions.

In the end, it's a matter of tradeoffs, and be able to try, evaluate and adjust to your needs.

Nerds Against Clutter: My Digital Downsizing Diary

Declutter and letting go.

  • Dropping Discord, Diaspora, Daily.dev, maybe Pixelfed and Mastodon next (done, by March 2024). Too buggy, too noisy.
  • Kissed Google Keep goodbye and embraced Obsidian even more, thanks to the Importer plugin.
  • Trying to escape the WhatsApp surveillance state. I'm axing useless groups left and right.
  • Scrubbing my old web presence. It's like digital housekeeping.
  • Using Syncthing now. Real-time sync across devices without cloud middlemen. Dropbox, you're on notice.
  • Deploying FDUPES (check here for MacOS) for disk decluttering – it's a duplicate file slaughterhouse. Throwing inotifywait into the mix for smart folder monitoring, because who likes manual mess management?
  • Cut down on RSS. I've dropped Wallabag (done by November 2024). I'm still using Miniflux. and Shaarli with their weaknesses. Thinking about it. Bookmarking tools still suck somehow and I can't see a better alternative (yet) for my needs... yuck, so I'm working on my own thing, Tapas. Looking at the market for knowledge and bookmarks management tools, there is room for improvement in how we manage and consume information. Most of the hard work is on you for years with tools that connect to information.
  • Harnessing RSS-Bridge and Miniflux for streamlined info feeds. Using Changedetection for the unRSS-able stuff, i.e to monitor some indexes, lists, legal terms, release pages.
  • My tab hoarding was legendary, now capped at 18 with Tab Limiter. Browser zen achieved.
  • I have been known by my colleagues and partner to keep too many tabs open. My nerves cracked at reading other folks suffering same issue. So I decided to close a number of them, and limit each Window to 18 tabs with Tab Limiter.

Exploring and creating.

  • Blogging's up, but it's a discipline game. Need to turn Obsidian hoarding into public wisdom. Notebooks over phones, knowledge over scrolling.
  • Taming my Brave extension zoo with Context. It's like a digital bouncer for my browser. Funny, now I've more UX/Privacy oriented extensions than tabs.
  • Eyeing Geeqie to outsmart duplicate photos. Even my pixels need to be minimal.
  • cron jobs executing php scripts on a Cloudron LAMP instance is new digital butler, still a bit rough around the edges. Coding my own automation magic because their recipes are just appetizers for my needs.
  • Diving back into Rust. Cooking up something for productivity and knowledge management. Stay tuned.
  • And of course, some snowballs and video gaming to keep things balanced and fun.

To be continued.