Skip to main content

Posts

Hobby project - Next experiments

This is ChatGPTs suggestions on what could be some next experiments. 1. Add a queue system for async job processing and retries 2. Automate scheduled scraping with cron-based GitHub Actions 3. Create notification rules/alerts for exchange rate thresholds 4. Add authentication with Supabase Auth or OAuth 5. Build an admin dashboard with logs and controls 6. Version your API endpoints (/v1, /v2) 7. Implement webhooks for outbound event notifications 8. Add rate limiting and API security protections 9. Experiment with serverless/edge functions 10. Add real-time updates using websockets or Supabase realtime 11. Build a small ETL pipeline for transforming scraped data 12. Add monitoring, logging, and failure alerts 13. Intentionally test failures and recovery handling 14. Compare JSON storage vs databases like SQLite/Postgres 15. Add analytics and metrics collection 16. Store historical exchange rate snapshots and graph trends 17. Add caching layers and cache invalidation strategies 18. Cre...

Hobby project - Store and view exchange rates

The next step in my project was to test out being able store and display the rates in a database. I decided to use nodejs and supabase for this. Everything worked beautifully. Only hickup was the following error due to my package.json not being correct. SyntaxError: Cannot use import statement outside a module Added this to package.json   "type": "module" This works beautifully. Right now I am just testing fragments of what could be part of a bigger system to see what is possible and what works and how easy to code on a mobile. There is no fully functioning integrated end to end system just yet. This is also what I tested. A serverless append-only database using GitHub + Actions + Pages. That’s basically a lightweight backend system. This was the ChatGPT prompt I used. Guide me through each step. This is what I want. A manually run github actions that adds to docs/data.json with the current date and time. docs/index.html displays all the entries in data.json. Make s...

Hobby project - Sending exchange rates via SMS

Continuing from last blog post , I was able to send an SMS to myself using twilio and nodejs. So now I have the capability to send email or sms with data scraped from a website and schedule this to happen daily for example. And I coded all this from my android phone using termux and vim. Pretty cool. Next up I want to be able to store the exchange rates in a database and display it on a webpage to show historical values. See results below This is my code require("dotenv").config(); const axios = require("axios"); const twilio = require("twilio"); const client = twilio(   process.env.TWILIO_ACCOUNT_SID,   process.env.TWILIO_AUTH_TOKEN ); async function sendUsdRate() {   try {     const response = await axios.get(       process.env.MY_API     );     // Get USD row     const usdRow = response.data.data.find(       row => row[0] === "United States Dollar"     );     const buyingRate =...

Hobby coding project - exchange rate api

I used ChatGPT to provide the guidance. Basically I created a serverless api endpoint (using Vercel) to share the exchange rate data from the front page of the central bank website. I will contact the Central Bank to ask if they plan to provide public APIs for their data in the future. The project uses Axios + Cheerio, the Requests + BeautifulSoup of the Node.js world. Axios handles HTTP requests with a clean promise-based API. Cheerio provides jQuery-style HTML parsing without a browser. So my api endpoint serves up json exchange rate data. Next, what I did was create a Github actions to read data from the api endpoint and send it to my email address. I used resend for this and nodejs. Now I could easily send the exchange rates data to my email address on a daily basis by scheduling the action in Github. Next I am going to test out sending the data via sms if I can find a good free sms sending api. See results below.

Hobby coding project - Queries for play whe data

I have an interest in open data and being able to query that data and gain beautiful insights. One data set that would be interesting is the play whe results data. Our open data is lacking in Trinidad and I will try to contact NLCB to see if they can provide and maintain the data online. But in the meanwhile I will use randomised data to create the website and do my testing. First thing I did was install sqlite on termux pkg update && pkg upgrade pkg install sqlite sqlite3 --version Create my database in my project folder sqlite3 results.db Useful commands .exit .quit Exit from multiline prompt ; SQL to create my table (create_tbl_results.sql) CREATE TABLE DrawResults (     DrawNo INTEGER PRIMARY KEY,                           DrawDate DATE,     ResultNo INTEGER CHECK (ResultNo BETWEEN 1 AND 36),     DrawTime INTEGER CHECK (DrawTime BETWEEN 1 AND 4) ); SQL to create the random dat...

Leaders versus dealers

It is 3:55am and I have decided to write. We all should be the leaders of our own lives. Good leaders allow us to develop ourselves to the point where we can become our own leaders. Too often, what we see instead are die-hard followers and fans of leaders who are not allowed to question anything, but are expected to blindly support. If I rearrange the letters of "leader" I can get "dealer". We need leaders, not dealers. Dealers trade in influence, emotions, loyalty, and power for personal gain, while leaders elevate people beyond dependence. There is a difference between leadership that empowers and leadership that creates dependency. This made me think about God as the grand example of good leadership. I think the same principle applies. God gave us free will, and we are told that God helps those who help themselves. If God gave human beings minds, curiosity, conscience, and moral awareness, then perhaps faith was never meant to replace them, but to guide them. I t...

What is important

Every now and again, I get reminded of the why. Why I have handed my life over to God. It is 3:08 p.m. and I have decided to write. Honestly, I feel like I could end this blog post right here. What more is there to say? God above all else. God is our compass on this journey called life. Everything else can become a distraction. Maybe not everything, but certainly many things. You get the point. What is important? What do we prioritise? What do we make time for? The answers look different for everyone. Our lives are different. We are tested differently. We are all products of our circumstances, and those circumstances vary from person to person. Yet God is the common thread across humanity and throughout time. God always was and always will be. One day, we will answer to God. We will give account to God. We cannot live without food, water, and oxygen, but all of those things come from God. So how can we live without God? How timely. I just received a notification from the Quranly app: S...