A rules-based chatbot allows for rapid development. Adding rules as you go, some of which can contain complex logic. Rules-based systems do not use large amounts of computation and especially don’t require GPUs, cheaper running costs and more responsive replies. As powerful as rules-based chatbots are, they also come with downsides. Creating rules is time-consuming and challenging to cover all the scenarios. The rules files quickly become quite large and cumbersome. Workarounds such as having a final catch-all rule can somewhat mitigate this.Read More about Combining an LLM and a Rules-based Chatbot
“I love the Chatbot, and it has been something I’ve been trying to replicate. There is so much noise. I’m finding it hard to find a good solution. I’d be grateful if you could point me in any direction, tools or what to search for.”
I had always intended to write about it. The scope may have expanded a little since then into a short series. This post covers some background on chatbots, a few principles for conversational interfaces and building a basic chatbot.Read More about Chatbots
I started programming with graphics and also a former games developer, so over the years I collected a number of resources. Recently I’ve seen a couple of people asking for some resource to get started.
- Real-Time Rendering
- Physically Based Rendering: From Theory To Implementation
- Ray Tracing in One Weekend
- Texturing and Modeling: A Procedural Approach
- The Nature of Code (also The Coding Train on YouTube)
- The Computational Beauty of Nature
- Generative Art: A practical guide using Processing
- AI and Games and YouTube channel particularly the AI101 series
- The Total Beginner’s Guide to Game AI
- OpenBOR a 2D side scrolling engine for beat em’ ups, shooters
- Level Design Patterns in 2D Games
- The guide to implementing 2D platformers
- Shmup Dev
Retro Game Development
Very much a part two of ‘Mistakes I’ve made in my career (so far)’
I am expanding on my Twitter thread.
At a previous start-up. Greenfield project. New team. We got started with building version one. We began as a free for all. The mindset was the best tool for the job. Resulting in every service being in a different language. Node, Go, Haskell, Python.
For the MVP, everything was in containers, so deploying and running the system was not that bad. Maybe a little too complex for the features we had but nothing too horrible. Engineers worked on the same service most of the time. No one was switching back and forth between services. Maintenance or anything post-demo got zero thought. We needed to ship sometime that vaguely worked.
Post MVP. Maintenance was a problem; only certain people could work on certain services. Hiring was the other major problem and ultimately forced the issue. No one knew all those languages. Even people that knew two or three of them were not at the same level in all the languages. Mentally switching between different languages is tiring.
We took the difficult decision to standardise on Go. The largest and most active service used that. Everyone on the project would work in Go at least sometimes. We still had some other languages but only for specific uses. For example, python for data science tasks, but the default was Go for everything. We took the hit of rewriting services not already in Go over time. In the end, it cost a couple of months to get back to where we were for the MVP.
I do not think anyone thought the MVP code would survive long-term. I certainly did not. We were always going to rewrite, expand the services and remove all the last-minute fixes we needed to get the project out the door. If those services had already been in Go, that would have been an incremental refactoring process. We would always build a shippable version of the project. Instead, we broke everything and could not ship anything for what seemed like aeons. in start-up time. We were lucky and only needed to demonstrate the project on one or two occasions. Each time was a painful experience until we had finished the rewrite.
Hiring was more focused. We had less of a laundry list of skills and languages—this ultimately allowed us to hire some junior engineers. You can not expect someone at the start of their career to be able to write production code in three or four languages. Maintenance was more manageable with only a single language. Everyone in engineering could help each other. The general quality of code went up.
Painful lesson learnt.
At my current place we started off standardising on Node. Not because it is my favourite language but because the centre of gravity in the project is around Node. The same with yarn.
“Be good to hear your thoughts on something I think could benefit you – can you spare a minute?”
I get a regular stream of messages like this, sometimes multiple ones a day. The text provided zero context. About the only thing I learn is some random person I don’t know wants to have a call with me. A half an hour call isn’t only half an hour of my time. I need to read your material to prepare questions. Check the service is relevant to the company.
I know times are tough. Running a business is challenging at the best of times. These aren’t the best of times. Cold calling is hard. Messaging many people hoping a few will say yes, has got to be pretty soul-destroying work. Low effort, one-line, no-context messages don’t put me in the best mood if I reply to you. Block, report as spam and move on seems a more straightforward response.
Seeing generic messages like these are so frustrating. I’m an optimist. Anyone that starts a business is worth celebrating. I want you to be more successful. I know you can do better.
I’m going to look at your message and ask a few questions:
Is your product relevant to the company? Have a quick look at the company’s website to check we are the correct type of company for your product. if we are in the wrong area or have no use for your services. Messaging wastes your and my time.
Will your product save time or money? Tell the story of how you will make my life simpler. I’m always interested in hearing about that.
How can I get an overview of your product? Give me a one-page summary of what you offer as an attachment or a link to a landing page. Make it easy for me to see the value you can provide.
- The Engineer/Manager Pendulum
- An Engineer’s Bill of Rights (and Responsibilities)
- A Manager’s Bill of Responsibilities (and Rights)
- The Seven Habits of One Highly Effective Manager of Managers
Here are a few resources I found useful when making that switch.
- Rands in Repose
- The Pragmatic Engineer (Disclosure I used to work with Gergely at Skype)
- The Engineering Manager (More disclosure, James is a friend of a friend, we have met a couple of times)
- Elided Branches
- CTO Craft
- Ask a Manager
- progression.fyi, a collection of open source progression frameworks
- Increment, particularly How to build a startup engineering team and A guide to distributed teams
- Manager’s Playbook
Starting at the beginning, what is blockchain?
Read More about Blockchain 101