ScamSense – Daily Financial Fraud and Scam Alerts

Introducing ScamSense: Protecting Seniors from Scams with Alexa

In an increasingly connected world, scams and fraud have become more sophisticated, targeting vulnerable individuals with alarming frequency. Seniors, often less familiar with digital tactics, are particularly at risk. That’s why I created ScamSense — an Alexa skill designed to educate, inform, and empower seniors to recognize and avoid scams.

The Growing Threat of Scams

Scammers are continually finding new ways to exploit trust, from phishing emails to fraudulent phone calls pretending to be government agencies. According to the Federal Trade Commission (FTC), financial losses from scams have reached billions annually, and seniors often bear the brunt of this financial and emotional toll.

But what if there was a simple, accessible tool to help?

What is ScamSense?

ScamSense turns your Alexa-enabled device into a personal scam prevention assistant. It’s easy to use and provides:

  • Daily Scam Alerts: Stay informed about the latest fraud tactics, such as phishing, fake charity schemes, and tech support scams.
  • Identity Protection Tips: Get actionable advice on how to safeguard your personal information.

How It Works

ScamSense draws from reputable resources to deliver accurate and timely information. Every day (at 6AM Central time), it produces a new report of concise updates about recent scams and tips to protect yourself. It integrates with The News API, fetching relevant top stories and then summarizes them using advanced AI (using Llama hosted on SambaNova Cloud).

For example, you might hear:

Empowering Seniors Through Technology

One of the key challenges with senior-focused technology is ensuring it’s user-friendly. Alexa’s voice-first interface makes ScamSense accessible to anyone, even those unfamiliar with smartphones or computers.

ScamSense isn’t just about providing information; it’s about creating peace of mind for seniors and their families.

Try ScamSense Today

ScamSense is available now for Alexa devices. Setting it up is simple:

  1. Enable the skill from the Alexa Skill Store.
  2. Say, “Alexa, open ScamSense,” to start receiving scam alerts and tips.
  3. Stay informed and stay safe!

Enable it on your Alexa device or mobile app today!

You can also check out the source code and see how I deployed it on GitHub!

Making an E-ink ESP32 Credit Card Skimmer Detecting Keychain

My latest project was recently featured on Instructables! In this guide I will show you how to build a low-power credit card skimmer detecting keychain. These skimmers, often found in gas pumps and ATMs, emit a Bluetooth signal that this keychain can detect but that many modern smart phones cannot. There is no need to understand programming and there is no soldering – this guide is suitable for beginners!

Introducing CarbonComponent

I am excited to share that my project, CarbonComponent, was recently selected as a winner of GitLab’s Innovation Pitch Competition! CarbonComponent is a continuous integration/continuous deployment component for GitLab pipelines that allows developers to estimate the carbon emissions caused by visiting their web projects. Using data from The Green Web Foundation it can tell if your web host uses green energy, and will provide you with a Green Webhost badge for your project repository if it does. When a pull request is created, metrics are displayed allowing you to tell at a glance if a change will make your project more carbon intensive. Additionally, it allows developers to offset the emissions from their project through Wren. Check it out! https://devpost.com/software/carboncomponent

LiteNews – a free browser extension to make reading the news fun again

Did you know that many news sites publish text-only versions of their content? These include:

  • CNN
  • The Christian Science Monitor
  • NPR
  • CBC
  • The Daily Mail

What’s great about using them is you avoid the auto-playing video, image carousels, comment sections, and other clutter that not only make the article difficult to read- it makes the page load time go through the roof! Knowing these text-only, or “lite”, versions exist is great, but I get sent a lot of articles via social media and messages. Remembering how to convert the URL for many of these sites is a hassle.

I wrote an open-source and free browser extension called LiteNews! It automatically will redirect you to the lite version of articles for the above news outlets when you click a link. It’s available for Chrome, Firefox, and Edge. It’s the first time I’ve written a cross-platform browser extension, and I can thank the Plasmo Framework for making it easy. I wrote my extension once and published in stores for all three browsers without needing to change a line of code!

The code can be found here on my GitHub. Click here to find download links for your favorite browser!

Maps, Forge, REST APIs, UI kit, Oh My!

I’ve spent the last few days learning about my new favorite serverless app development platform, Atlassian Forge. It lets you easily develop apps for Confluence, JIRA, and more using JavaScript, and even comes with some really nice UI widgets you can use in their UI kit. While not the main subject of this article, one of my favorite things about their tools is that they make it very simple to store credentials encrypted for use with your Forge app – it’s built into the Forge CLI and is a breath of fresh air for those familiar with more complicated solutions like Amazon’s Key Management Service. Anything to make it easier for folks not to accidentally commit their tokens to GitHub!

Those snazzy UI elements may start to feel a bit constricting if you’re looking to display the results from your favorite REST API. Take for example the Table widget. The docs are very helpful explaining all the features, but what if you don’t know how many elements you’re going to have? What if you have a key that stores a list with a variable number of objects, and maybe you don’t know what their attributes are going to be yet? Maybe there’s a computation you need to do with the data and display the result? What if you don’t want to have any degree of repetition, defining each row yourself? We need a way to programmatically create a table (or similar container- doing this for a button set or tag group is left as an exercise to the reader!).

This is where the humble map comes in. Maps are common in JavaScript- they hold key value pairs. You can build a map that then lets you iterate over all the objects you want to display- even if you don’t know how many there are going to be! The UI kit markdown can look static but you can actually use JavaScript like maps inside your UI kit responses from Forge! You can also compute new results not in your data source right in line. If you didn’t know this, you may be tempted to do something like the following. Let’s say you have an API that returns some team group members for a given project. It has a list of team members under the key ‘members’. You may be tempted to write a return like this in your Forge app to put them in a table inside an inline dialogue:

const response = await fetch(myfaketeamqueryurl, {
    method: "get",
    headers: { "Content-Type": "application/json" },
});
const data = await response.text();
const App = () => (
  <Table>
    <Head>
      <Cell>
        <Text>Name</Text>
      </Cell>
      <Cell>
        <Text>Task Completion (out of 100%)</Text>
      </Cell>
    </Head>
    <Row>
      <Cell>
        <Text>data.members[0].name</Text>
      </Cell>
      <Cell>
        <Text>data.members[0].tasksCompleted</Text>
      </Cell>
    </Row>
    <Row>
      <Cell>
        <Text>data.members[1].name</Text>
      </Cell>
      <Cell>
        <Text>data.members[1].tasksCompleted</Text>
      </Cell>
    </Row>
    <Row>
      <Cell>
        <Text>data.members[2].name</Text>
      </Cell>
      <Cell>
        <Text>data.members[2].tasksCompleted</Text>
      </Cell>
    </Row>
  </Table>
);

And so on, and so forth, until you’re writing markup all day, your boss is mad, and you still haven’t solved the issue that you don’t know how long the ‘members’ list is. You also are just putting the number of tasks completed- no the percentage score your API doesn’t return and you need to find a way to compute within Forge.

Well it turns out the following will work just fine, and is far shorter:

const response = await fetch(myfaketeamqueryurl, {
    method: "get",
    headers: { "Content-Type": "application/json" },
});
const data = await response.text();
const numberOfTasks = 15;
const App = () => (
  <Table>
    <Head>
      <Cell>
        <Text>Name</Text>
      </Cell>
      <Cell>
        <Text>Email</Text>
      </Cell>
    </Head>
    {Object.keys(data).map(members => (
    <Row>
        <Cell>
            <Text>{name}</Text>
        </Cell>
        <Cell>
            <Text>{Math.round(tasksCompleted / numberOfTasks * 100)}%</Text>
        </Cell>
    </Row>
    ))}   
  </Table>
);

We now accommodate however many members there are (even 0!) and do the math for our score right in line. Forge will evaluate all of this JavaScript and programmatically create as many lines as you want.

Why am I sharing this? It’s a key part of the UI of my new Forge app PriorWise! As part of my submission to the 2023 Codegeist Unleashed Hackathon I use this trick to list as many patents and papers as I can based on a user’s query. It lets you highlight some text or even search a full page for relevant patents and research papers, known as prior art. This helps innovators find out if they are infringing on an existing idea, or inform new avenues of research and collaboration. It uses AI to find results that are similar in terms of meaning and topic. While I don’t always know how many results I’ll get back, if they will have images or not, and I still need to compute a similarity score for the user, I know Forge and UI kit will take care of all of this and display an organized result for my users. This stumped me for a bit, don’t let it stump you!

Example of a programmatically generated list of patents returned in an inline modal from PriorWise

Deploy Free-tier Tor bridges on AWS

What if you could help journalists and activists in places like Iran and Russia with a few clicks? Tor is an anonymity network run by volunteers that protects the location and identity of users while they use the internet for research, messaging, and organizing. Unfortunately oppressive regimes block the access points to Tor. My project, Bridge Buttons, lets you deploy a Tor bridge for free to Amazon’s cloud. A bridge helps users connect to Tor by first connecting to an innocuous looking server, making it hard to block! I’ve preconfigured these bridges so that it can run for free for up to a year, making this the cheapest and easiest way to get started.

Direct link to Bridge Buttons where you can get started with just a few clicks!

Code and template on GitHub

Happy Halloween – Multiplayer Death Race (1976) Remake

This Halloween I have a new treat for everyone- a multiplayer remake of Death Race, an infamous arcade game from 1976. Video game developer Exidy built the game as a modification of their popular Destruction Derby game in which drivers hit cars to win points. In Death Race they instead were challenged to run over monsters called “gremlins”, which in the primitive graphics of the time looked like stick figures that resemble people. To add to the confusion the “gremlins” give out a high pitched scream when hit. This game marks the earliest controversy regarding video game violence and as such has a special place in video game and computer software history, as never before had a program been as attacked in the media as Death Race. Now you and your friends can play against each other in a web-optimized multiplayer remake!

Click here to play now!

The game is also fully open source and was developed using Phaser and Socket.IO!

Make Children’s Artwork look like Eric Carle Illustrations

v_hungry_caterpillar
The Very Hungry Caterpillar, by Eric Carle

Famous author and artist Eric Carle turns 91 today. I remember loving his books when I was a kid, especially The Very Hungry Caterpillar and Brown Bear, Brown Bear, What Do You See?. Each book features his distinctive art style. The images are collages composed of tissue paper and acrylic paint, producing vivid depictions of animals and nature.

THE PROBLEM

Carle’s work is as complex as it is beautiful. How can we make it easier for children to produce their own homages to his creations?

THE SOLUTION

Neural style transfer is a technique that allows you to compose images in another’s style using deep learning. That is, you teach a computer to identify key elements of an image’s style and redraw that image in that style it has just learned.

I found this excellent Google Colab notebook which taught me all about how to do this with tf.Keras!

Taking the code from the tutorial I built a website that lets you upload images, have the style of Eric Carle’s The Very Hungry Caterpillar transferred to it, and display it for the world to see and for you to download! At any given time the latest 10 images will be displayed for any visitors to see. The website is built in one of my favorite frameworks, Flask.

You can access the website at ericcarletransfer.ml. Be warned, the transfer time can be in excess of 10 minutes- it is very computationally intensive.

The results have been encouraging though! Take a look:

The neural network is picking up on the look of the tissue paper and paint. In the future I want to work on reducing the amount of noise seen in the backgrounds.

SHARING THE SOLUTION

The URL again is http://ericcarlearttransfer.ml/

As always, the entire project is opens source and can be found here on GitHub!

Text to Word Search!

Try it out for free here!

wordsearchgif

THE PROBLEM

Word searches can be a great way to build a summary activity for reading a story, article, or book. However, they are time consuming and difficult to make.

THE SOLUTION

text2wordsearch uses the Rapid Automatic Keyword Extraction (RAKE) algorithm to automatically extract the top key words from a blob of text! Simply copy the text from the article or story and choose how many words you want in your word search. Then copy the word search into your favorite word processor (be sure to use a monospace font!). The keywords selected are found in the bottom box.

The technical details are that this uses an AWS Lambda function to run the RAKE algorithm and generate the word search, ingesting the text from the web interface above which is deployed on AWS API Gateway. The Lambda function is written in Python and leverages two excellent packages: python-rake and word-search-puzzle. Because it is a Lambda function they had to be installed to a directory and uploaded as part of a zip bundle along with my function code. This zip is included in the repo linked below for you to deploy and play with yourselves!

SHARING THE SOLUTION

Try it for free here!

As always, the code is available to browse and deploy yourselves!