Posted on Leave a comment

SpeechKit: A Javascript Package For The Web Speech API (Speech Synthesis & Speech Recognition)

Speech Recognition & Speech Synthesis In The Browser With Web Speech API

Voice apps are now first-class citizens on the web thanks to the Speech Recognition and the Speech Synthesis interfaces which are a part of the bigger Web Speech API. Taken from the MDN docs

The Web Speech API makes web apps able to handle voice data. There are two components to this API:

  • Speech recognition is accessed via the SpeechRecognition interface, which provides the ability to recognize voice context from an audio input (normally via the device’s default speech recognition service) and respond appropriately. Generally you’ll use the interface’s constructor to create a new SpeechRecognition object, which has a number of event handlers available for detecting when speech is input through the device’s microphone. The SpeechGrammar interface represents a container for a particular set of grammar that your app should recognize. Grammar is defined using JSpeech Grammar Format (JSGF.)
  • Speech synthesis is accessed via the SpeechSynthesis interface, a text-to-speech component that allows programs to read out their text content (normally via the device’s default speech synthesizer.) Different voice types are represented by SpeechSynthesisVoice objects, and different parts of text that you want to be spoken are represented by SpeechSynthesisUtterance objects. You can get these spoken by passing them to the SpeechSynthesis.speak() method.
Brief on Web Speech API from MDN

So basically with the Web Speech API you can work with voice data. You can make your apps speak to its users and you can run commands based on what your user speaks. This opens up a host of opportunities for voice-activated CLIENT-SIDE apps. I love building open-source software, so I decided to create an NPM package to work with the Web Speech API called SpeechKit and I couldn’t wait to share it with you! I suppose this is a continuation of Creating A Voice Powered Note App Using Web Speech

Simplifying The Process With SpeechKit

I decided starting this year I would contribute more to the open-source community and provide packages (primarily Javascript, PHP, and Rust) to the world to use. I use the Web Speech API a lot in my personal projects and so why not make it an NPM package? You can find the source code here.

Features

  • Speak Commands
  • Listen for voice commands
  • Add your own grammar
  • Transcribe words and output as file.
  • Generate SSML from text
npm install @mastashake08/speech-kit

Import

import SpeechKit from '@mastashake08/speech-kit'

Instantiate A New Instance

new SpeechKit(options)

listen()

Start listening for speech recognition.

stopListen()

Stop listening for speech recognition.

speak(text)

Use Speech Synthesis to speak text.

Param Type Description
text string Text to be spoken

getResultList() ⇒ SpeechRecognitionResultList

Get current SpeechRecognition resultsList.

Returns: SpeechRecognitionResultList – – List of Speech Recognition results

getText() ⇒ string

Return text

Returns: string – resultList as text string

getTextAsFile() ⇒ Blob

Return text file with results.

Returns: Blob – transcript

getTextAsJson() ⇒ object

Return text as JSON.

Returns: object – transcript

addGrammarFromUri()

Add grammar to the SpeechGrammarList from a URI.

Params: string uri – URI that contains grammar

addGrammarFromString()

Add grammar to the SpeechGrammarList from a Grammar String.

Params: string grammar – String containing grammar

getGrammarList() ⇒ SpeechGrammarList

Return current SpeechGrammarList.

Returns: SpeechGrammarList – current SpeechGrammarList object

getRecognition() ⇒ SpeechRecognition

Return the urrent SpeechRecognition object.

Returns: SpeechRecognition – current SpeechRecognition object

getSynth() ⇒ SpeechSynthesis

Return the current Speech Synthesis object.

Returns: SpeechSynthesis – current instance of Speech Synthesis object

getVoices() ⇒ Array<SpeechSynthesisVoice>

Return the current voices available to the user.

Returns: Array<SpeechSynthesisVoice> – Array of available Speech Synthesis Voices

setSpeechText()

Set the SpeechSynthesisUtterance object with the text that is meant to be spoken.

Params: string text – Text to be spoken

setSpeechVoice()

Set the SpeechSynthesisVoice object with the desired voice.

Params: SpeechSynthesisVoice voice – Voice to be spoken

getCurrentVoice() ⇒ SpeechSynthesisVoice

Return the current voice being used in the utterance.

Returns: SpeechSynthesisVoice – current voice

Example Application

In this example vue.js application there will be a text box with three buttons underneath, when the user clicks the listen button, SpeechKit will start listening to the user. As speech is detected, the text will appear in the text box. The first button under the textbox will tell the browser to share the page, the second button will speak the text in the textbox while the third button will control recording.

Home page from the github.io page

I created this in Vue.js and (for sake of time and laziness) I reused all of the defaul components and rewrote the HelloWorld component. So let’s get started by creating a new Vue application.

Creating The Application

Open up your terminal and input the following command to create a new vue application:

vue create speech-kit-demo

It doesn’t really matter what settings you choose, after you get that squared away, now it is time to add our dependecy.

Installing SpeechKit

Still inside your terminal we will add the SpeechKit dependency to our package.json file with the following command:

npm install @mastashake08/speech-kit

Now with that out of the way we can begin creating our component functionality.

Editing HelloWorld.vue

Open up your HelloWorld.vue file in your components/ folder and change it to look like this:

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      Simple demo to demonstrate the Web Speech API using the
      <a href="https://github.com/@mastashake08/speech-kit" target="_blank" rel="noopener">SpeechKit npm package</a>!
    </p>
    <textarea v-model="voiceText"/>
    <ul>
      <button @click="share" >Share</button>
      <button @click="speak">Speak</button>
      <button @click="listen" v-if="!isListen">Listen</button>
      <button @click="stopListen" v-else>Stop Listen</button>
    </ul>
  </div>
</template>

<script>
import SpeechKit from '@mastashake08/speech-kit'
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  mounted () {
    this.sk = new SpeechKit({rate: 0.85})
    document.addEventListener('onspeechkitresult', (e) => this.getText(e))
  },
  data () {
    return {
      voiceText: 'SPEAK ME',
      sk: {},
      isListen: false
    }
  },
  methods: {
    share () {
      const text = `Check out the SpeechKit Demo and speak this text! ${this.voiceText} ${document.URL}`
      try {
        if (!navigator.canShare) {
          this.clipBoard(text)
        } else {
          navigator.share({
            text: text,
            url: document.URL
          })
        }
      } catch (e) {
        this.clipBoard(text)
      }
    },
    async clipBoard (text) {
      const type = "text/plain";
      const blob = new Blob([text], { type });

      const data = [new window.ClipboardItem({ [type]: blob })];
      await navigator.clipboard.write(data)
      alert ('Text copied to clipboard')
    },
    speak () {
      this.sk.speak(this.voiceText)
    },
    listen () {
      this.sk.listen()
      this.isListen = !this.isListen
    },
    stopListen () {
      this.sk.stopListen()
      this.isListen = !this.isListen
    },
    getText (evt) {
      this.voiceText = evt.detail.transcript
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

As you can see the almost all of the functionality is being offloaded to the SpeechKit library. You can see a live version of this at https://mastashake08.github.io/speech-kit-demo/ . In the mount() method we initialize our SpeechKit instance and add an event listener on the document to listen for the onspeechkitresult event emitted from the SpeechKit class which dispatches everytime there is an availble transcript from speech recognition. The listen() and stopListen() functions simply call the SpeechKit functions and toggle a boolean indicating recording is in process. Finally the share() function uses the Web Share API to share the URL if available, otherwise it defaults to using the Clipboard API and copying the text to the user’s clipboard for manual sharing.

Want To See More Tutorials?

Join my newsletter and get weekly updates from my blog delivered straight to your inbox.

Check The Shop!

Consider purchasing an item from the #CodeLife shop, all proceeds go towards our coding initiatives.

Open-source work is free to use but it is not free to develop. If you enjoy my content and would like to see more please consider becoming a sponsor on Github! Not only do you support me but you are funding tech programs for at risk youth in Louisville, Kentucky.

Posted on Leave a comment

How To Prepare for a Successful Entrepreneurial Journey

a man glancing out the airplane window

How To Prepare for a Successful Entrepreneurial Journey

So you want to be your own boss? Great! Making the leap into entrepreneurship is an exciting and rewarding process. But it’s not without its challenges. 

Fortunately, there are a few things you can do to set yourself up for success. In this blog post, Jyrone Parker shares six tips for preparing to become an entrepreneur. From getting an online degree to funding your business, these strategies will put you on the path to greatness:

1. Get an Online Degree To Sharpen Your Business Skills

If you’re serious about becoming a successful entrepreneur, consider getting an online degree in business or a related field. Many accredited online programs can help you gain the skills and knowledge you need to run a successful business. Not to mention, having a degree can make you more attractive to potential investors and customers. 

With today’s technology, there’s no excuse not to take advantage of online education opportunities. When looking at the options, only consider accredited universities with tuition rates you can afford. Studying online will strengthen your business acumen without hindering you from your job or family commitments. 

2. Learn About the Different Business Structures 

There are several different business structures you can choose from when starting your own company. These include sole proprietorships, partnerships, limited liability companies (LLCs), and corporations. It’s important to learn about the pros and cons of each structure so you can choose the option that makes the most sense for your particular business.

Many entrepreneurs form LLCs because it protects them from personal liability for the debts and obligations of the company. This can prove invaluable if your company is sued or goes bankrupt. Also, you can choose how the company is taxed and take advantage of certain tax deductions and credits. Research the LLC rules in your state, and hire a formation service to do the heavy lifting. 

3. How To Create a Productive Work Space or Find an Office Space  

One of the challenges of working from home is creating a productive work environment. It can be tempting to lounge in your PJs all day or take work calls from bed, but this isn’t conducive to a productive workday. Instead, try to create a dedicated workspace in your home, such as a spare bedroom or home office. 

If you struggle with distractions, you might want to find an office space outside of your home so you can separate your work life from your personal life. Spend time looking into your options, and ensure your office space is the size you need, especially if you plan on hiring employees. 

4. How To Get the Funding You Need  

Many aspiring entrepreneurs quit on their dreams because they don’t have the capital necessary to get their businesses off the ground. If this is something you battle, you have several options. You could apply for small business loans, look into venture capital firms, or launch a crowdfunding campaign. Do some research and see which options make the most sense for your business. 

5. Types of Tech Tools That Can Help  

Technology has come a long way in recent years, and many different tech tools are available to help entrepreneurs run their businesses more efficiently. Some examples include project management, invoicing, customer relationship management (CRM), and accounting software. Take time to research the wealth of tech tools on the market that can streamline your operations. 

6. How To Create a Routine and Schedule  

One of the benefits of being your own boss is having flexibility with your schedule. However, this can also be a challenge. Without set office hours, it’s easy to let work consume your entire day—and night! To avoid burnout, you must set some parameters around when and how often you’ll work each day, week, and month.  

Conclusion

Congratulations—you’re on your way to becoming an entrepreneur! Keep these tips in mind as you prepare for this exciting journey, and with some hard work and dedication, you’ll be running your own successful business in no time. Just remember to believe in yourself and stay true to your core values, and you’ll maintain the motivation necessary to thrive. 

If you like this content, check out my startup MobiSnacks available for iOS and Android!

Posted on Leave a comment

Tech Upgrades to Boost Business Productivity and Save Money

Tech Upgrades to Boost Business Productivity and Save Money

Taking advantage of modern technology is important for keeping your business competitive. However, many business owners are hesitant to spend money on the latest tech. What if your investment doesn’t pay off? As a small business owner, you can’t afford to waste capital on fancy new tools and equipment just for the sake of being innovative. Your tech investments need to save you enough money that they pay for themselves in the long run. 

The good news is that there are several tools out there that can do just that! You just have to know where to look—and how to pick the right technology for your unique business needs. Are you ready to invest in some new technology and take your business to the next level? Here are a few tools that are bound to pay off!

Project Management Software

Project management tools can make your life a lot easier. Even if you have a small team, good project management software will help you stay on schedule, optimize the use of your available resources, and monitor progress from one centralized platform. This will save you the headache of constant back-and-forth emails and enable your team to get work done more quickly. Look for project management software that allows you to collaborate in real-time with your team members. 

Meeting Scheduling Platforms

Scheduling meetings with team members and clients is another common business task that can take a lot of unnecessary time. How many emails do you have to send before you land at a meeting time that works for everyone? According to Boomerang, it takes an average of 8 emails to schedule a single meeting! Instead, take advantage of meeting scheduling apps and tools. For example, Calendly lets people schedule meetings based on their availability, which is ideal for business owners who get a lot of meeting requests.

Accounting Apps

Accounting is yet another one of those administrative tasks that take a lot of time. And when you don’t know what you’re doing, accounting mistakes can wind up costing a lot of money! Take advantage of accounting software to save time and keep more money in your business. With accounting software for your SMB, you will be able to automate a lot of your accounting processes so you can spend less time calculating taxes and more time focusing on big-picture projects. You’ll also be able to track expenses and inventory and send electronic invoices to get paid faster.

Email Marketing Software

If you collect emails from your customers—and you should—email marketing software will help you extract the most value out of your list. Email marketing tools make it easy to store, organize, and segment your audience so you can promote your business more effectively. At the same time, you’ll be able to use your email tools to schedule automatic abandoned cart emails and drip campaigns to improve your customer conversions!

Social Media Scheduling Tools

Posting on social media and engaging with your followers is one of the most affordable ways to advertise your business. But staying on top of your social media marketing tasks can be challenging. Thankfully, there are many social media management tools that allow you to create and schedule posts in advance. These social tools also make it easier for team members to respond to customers on social media from one easy-to-use platform.

The right technology can make your small business much more productive. Tech tools will help you automate time-consuming tasks, avoid common human errors, manage your finances, and save money across all areas of your business. Start exploring small business tech tools today so you can catch up with your competitors!

Work with software entrepreneur Jyrone Parker to take your business to the next level!

Posted on Leave a comment

Teaching Your Employees to Recognize and Avoid Common Internet Scams 

woman holding macbook

Teaching Your Employees to Recognize and Avoid Common Internet Scams

An informed workforce is your best defense against cyberattacks. Every time your employees go online, whether to check their email or conduct a search, they could encounter internet scams that put your business at risk. Cybercriminals like to target employees, especially those with access to sensitive financial information. Because your employees are your first line of defense against threats, you must empower them to protect your company!

Here are some tips presented by JyroneParker.com to help you teach your employees to avoid common cybersecurity threats. 

Start with a Recovery Plan

Every business needs a cybersecurity disaster recovery plan. Employee education and vigilance aren’t always enough to prevent cybercriminals from bypassing your defenses. Don’t wait for a disaster to happen to formulate a recovery plan! If your business experiences a cyber-attack, your recovery plan will enable you to get back up and running as quickly as possible so you can avoid angering your customers or disrupting your cash flow. When it comes to planning for potential cyber security threats, be sure to identify which data you will need to recover first in the event of an attack. This way, you’ll be able to put together a recovery plan that will help restore trust among your clients and customers.

Of course, creating a disaster recovery plan is no mean feat. With the level of detail, research, and strategizing that goes into it, you’ll definitely find your hands full. If you find yourself needing to reshuffle your work tasks to get this vital measure in place, you’ll need to find ways to organize your time differently. Download a planner template and use visual elements like sticky notes to keep you on track without taking much away from your other tasks.

Phishing Attacks

Phishing attacks are some of the most common internet scams. In a phishing scam, an attacker tricks their victim into clicking a link or downloading a file, resulting in any manner of damaging attacks. These attacks usually occur over email, but social media, instant messaging services, and apps are also frequently used in phishing attempts. Phishing emails often look like they’ve been sent by a company you know, so it’s important to know how to identify them.

Trojan Horse Software

Trojan horse software is a malicious program that appears legitimate but can take control of your computer after being downloaded. Trojans can do different things, from stealing sensitive information to freezing important data. Make sure your employees know not to click on pop-up windows, download programs from unknown publishers or click links in emails from people they don’t recognize. 

Tech Support Scams

The Federal Trade Commission explains that tech support scammers will lead you to believe that there’s something wrong with your computer and you will have to pay for tech support services to fix the issue. These scams often appear as pop-up warnings that look like error messages on your computer. Show your employees some examples of these scam attempts so they know what to look out for when working online.

Public Wi-Fi Scams

If your employees work remotely some or part of the time, make sure they know how to avoid public Wi-Fi scams. In public places, like coffee shops or airports, scammers may set up Wi-Fi networks with a name similar to one you would expect. Once you connect to this network, the hacker can steal your passwords, scan emails, or otherwise access your sensitive data. Discourage your employees from using public Wi-Fi for sensitive business tasks, like accessing business bank accounts or making purchases. You may also want to provide your employees with a VPN service to encrypt their connections and make public Wi-Fi safer.

Commit to Regular Cybersecurity Training

Teaching your employees how to avoid internet scams should be an ongoing process. Hackers are getting increasingly skilled and attacks are becoming more sophisticated by the day. Protect your business from these ever-evolving threats by committing to regular employee education. Make cybersecurity a common topic to address in team meetings so you can remind your employees how they can best protect themselves and your company from threats. Importantly, ensure your cybersecurity messages are understandable and relatable. You want your employees to feel responsible for their stake in your company’s security plan.

Cybersecurity is an important topic that’s often overlooked by small business owners. Even if you did everything in your power to shield your business from online threats, your employees still create points of vulnerability. Commit to cybersecurity training so your employees know how to reduce their risk of falling for internet scams.

Posted on Leave a comment

Adding Google Drive Functionality To Screen Recorder Pro

You All Requested Google Drive Functionality!

In my last YouTube video, I was asked to implement Google Drive upload functionality for saving screen recordings. I thought this was a marvelous idea and immediately got to work! We already added OAuth login via Google and Laravel in the last tutorial to interact with the Youtube Data v3 API, so with a few simple backend tweaks, we can add Google Drive as well!

Steps To Accomplish

The functionality I want to add to this is going to be just uploading to Google Drive, with no editing or listing. Keep things simple! This is going to require the following steps

  • Adding Google Drive scopes to Laravel Socialite
  • Create a function to upload file to Google API endpoint

Pretty easy if I do say so myself. Let’s get started with the backend.

Adding Google Drive Scopes To Laravel Socialite

We already added scopes for YouTube in the last tutorial so thankfully not a whole lot of work is needed to add Google Drive scopes. Open up your routes/api.php file and update the scopes array to include the new scopes needed to interact with Google Drive

Route::get('/login/youtube', function (Request $request) {
  return Socialite::driver('youtube')->scopes(['https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/youtube.upload', 'https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.metadata', 'https://www.googleapis.com/auth/drive.metadata.readonly'])->stateless()->redirect();
});

Make sure you enable the API in the Google cloud console! Now we head over to the frontend Vue application and let’s add our markup and functions.

Open the Home.vue and we are going to add a button in our list of actions for uploading to Google Drive

<t-button v-on:click="uploadToDrive" v-if="uploadReady" class="ml-10">Upload To Drive 🗄️</t-button>
    

In the methods add a function called uploadToDrive() inside put the following

  async uploadToDrive () {
      let metadata = {
          'name': 'Screen Recorder Pro - ' + new Date(), // Filename at Google Drive
          'mimeType': 'application/zip', // mimeType at Google Drive
      }
      let form = new FormData();
      form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
      form.append('file', this.file);
      await fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart', {
        method: 'POST', // *GET, POST, PUT, DELETE, etc.
        mode: 'cors', // no-cors, *cors, same-origin
        cache: 'no-cache',
        headers: {
          'Content-Length': this.file.length,
          Authorization: `Bearer ${this.yt_token}`
        },
        body: form
      })
      alert('Video uploaded to Google Drive!')
    }

Inside this function we create an HTTP POST request to the Google Drive endpoint for uploading files. We pass a FormData object that contains some metadata about the object and the actual file itself. After the file is uploaded the user is alerted that their video is stored!

Screen Recorder Pro Google Drive upload confirmation

What’s Next?

Next, we will add cloud storage you will be able to share with Amazon S3 and WebShare API! Finally we will add monetization and this project will be wrapped up! If you enjoyed this please give the app a try at https://recorder.jcompsolu.com

Posted on Leave a comment

Finding An App Niche: On Screen Recorder Pro

It All Started Because I Needed A Screen Recorder

I do screen records all the time for my business J Computer Solutions LLC, especially in today’s remote work environment it is often the only way I can efficiently send my clients’ demos! I usually have to go through the same tedious process to get work done.

  • Open QuickTime
  • Record screen capture
  • Save file
  • Open up email
  • Upload file
  • Send to client

I eventually got very bored of it and wrote a progressive web app called Screen Recorder Pro to simplify the process and make it easier. Using the MediaRecorder API I capture the screen, save the output as a webm video file and from there I can take one of the following actions:

  • Share direct link with client
  • Download the file
  • Email the file
  • Upload the file to Google Drive
  • Upload the file to YouTube
Screen Recorder Pro in action

This was saving me precious time in getting work done as well as feedback. I started to ponder on how useful this would be for other users and decided to package it up. This PWA can be used on any Windows, Mac OSX or Linux desktop computer (mobile does not support MediaRecorder yet). I monetized the web app with Google Adsense and put it out to the world. To my surprise, it has gotten very positive feedback processing gigabytes worth of video data so far! This blog post isn’t so much about a screen recording software as it is about creating niche products of value.

Solve One Problem At A Time

I have been saying this ever since my first days of making app revenue. The apps that make the most money tend to be the simpliest. They solve one problem and solve that problem very well. It’s the Unix philosophy at scale! Also if you are struggling with coming up with a concept, create an app that solves a PERSONAL problem for you first! Chances are if it solved a problem for you, then there are 1000s of other people whose problems you just solved as well! Once you find that pain point and solve it, you can monetize. From there iterate and create more features that solve more problems in that realm. In regards to Screen Recorder Pro, the next features I plan on adding is the ability to stream to YouTube and Twitch directly in the browser. No need for any downloads, I have given streamers the ability to set up anywhere and get to work! I plan on keeping this web app free monetized with ads. I don’t believe people should have to pay service fees monthly for the vast majority of software (but that’s another blog article entirely). Due to the nature of the app, it’s feasible to believe there will be enough screen time on the app where I don’t have to monetize in other ways but we will see. Do me a favor and check out Screen Recorder Pro and while you are at it cop some #CodeLife swag!

Posted on Leave a comment

This Might Be My Biggest Success Yet: A MobiSnacks Story!

MobiSnacks Was Conceptualized In 2015

I was working at Sephora in San Fransico working as a senior software engineer. I had a daily routine after coming home after work. I would go to the corner store, get some snacks, then proceed to walk to my condo get blazed then have a munchie feast. During one of my cannabis epiphanies I had an idea. Why not create an app that allows you to order your snacks from local corner stores and have delivery drivers drop off the merch? I went and wrote a demo and showed it to my homie Shay the next day at Sephora. He thought it was a solid concept so I decided to show it to the aforementioned corner store.

Going forward a few months I had a few sales and things were going good….until they weren’t. I moved back to Kentucky and quickly things fell apart and I lost a lot of time and money. It was such a hit actually that I trashed the app, then a couple years later goPuff came out and essentially MobiSnacks was dead in the water. I was so embittered by the experience that I vowed to never touch the source code again.

The 2020 Resurrection

From 2017 – 2020 one of my best friends would occasionally ask me “Hey what’s going on with MobiSnacks?“. I knew he thought it was a good idea but I was done. One day we are chilling at his place and we are talking about startups and his wife cooked for us. While eating I had the thought “man screw UberEats I wish I could just order directly from chefs!”. At that moment a lightning strike hit my brain and MobiSnacks was reborn. I told my homie and asked him if he wanted to come on-board! During this time we were a couple weeks away from the lockdown from COVID-19. In hindsight the timing was perfect. We were approached by another local startup called Quarantine and Eatz; a platform where they cook the food and throw a virtual Instagram live party. They needed logistics and drivers and first day MobiSnacks did over 200 orders on the website! That was all the motivation I needed to go back full swing.

Building The Brand

Over the past year, the app has a little over 200 downloads with a growing social media presence. I didn’t want to repeat the mistakes of the past so I’m taking everything slow. Talking to each driver, talking to each chef, and talking to each customer. It was during this time that I realized things about this platform I created I never considered. The first was that I was serving food deserts. Last May I got a order notification and when reviewing the order I realized I had NO IDEA who this woman is. I decided to give her a call and introduce myself as the CEO of MobiSnacks and ask her how she found out about our platform. She told me Facebook, which made me elated. I told her I would personally deliver the order and I drove out. I arrived to an independent senior citizen complex and met the lady. She told me that since the shutdown she hasn’t been allowed to see her adult children who normally grocery shop for her. The buses weren’t running at the time and she couldn’t drive. She was literally starving and was on a budget that UberEats was too expensive for her. This brought tears to my eyes and was the first time I heard the term “food desert”. I would have never thought that I would build something that literrally made a life-changing difference in someone’s life. I knew at that moment that I had something and I had to keep going.

Going Forward

MobiSnacks has a new feature called MobiSnacks TV, a platform that allows you to view pre-recorded and live-streamed content from chefs all around the world! The content line up comes out June 1st and I couldn’t be more excited. In addition there will be MobiSnacks+ the premium subscription service where you can get the fresh ingridents for the shows sent directly to your door. Also there will be updates including meal prep, 1-1 cooking classes and more! I am often asked what my exit strategy is, do I want to sell or do I want to run it in perpetuity. To be honest I go back and forth between the two options. I would love to sell to a Food Network or UberEats but I also wouldn’t mind running it if the numbers make sense. In either case MobiSnacks is a success and I couldn’t be happier. If you haven’t downloaded the app on iOS or Android then do so and leave feedback!

Posted on Leave a comment

Fixing A Hacked WordPress Site

Hacked WordPress Sites Suck!

Back in November my company J Computer Solutions LLC was the subject of a WordPress hack that affected all of my client and personal websites! This was an expensive lesson in security and eventually I recovered my client data! As a result of this experience I have decided to share with you what I did to help those who are also experiencing the same thing. I’m even going to throw in some tips to prevent this from happening in the first place!

How It All Started

So one day I get a bunch of emails from my monitoring app that is telling me that not one, not two but ALL OF MY WORDPRESS sites were down. No sooner I start getting a barage of calls and texts from my clients complaining that their websites (many of whom, these sites were the backbone of their businesses) where down. After talking to each client individually I narrowed down the cause. One of my clients had installed a cracked plugin to avoid paying the original developer. I promptly removed him from my service.

What Was The Hack

The hack would place <script> tags on every .php page and in every post in the database that would cause a series of redirects to a bunch of spam sites. This happened on all of my WordPress sites and the first thing I noticed was that all of the sites were going redirecting to the same series of three URLs. Knowing that the hack was caused by a plugin and not a human meant that if I could reverse engineer the hack, I could come up with a algorithmic solution to fix all of my hacked WordPress sites.

wordpress hack redirect
An example of one of my client sites doing redirects

Fix: wp export & RegEx

I knew I wasn’t going to go through all the .php files and remove the malware; way too many files and the database is more important I can always reinstall WordPress. That being said I decided the best thing to do was the following

  • Install a fresh version of the website on a new server
  • Export the post, page and product data using the wp cli
  • Use RegEx to find and replace malware data with appropriate data

Luckily I use Laravel Forge and can manage my WordPress installations from a dashboard. I created a fresh database and fresh WordPress instance.

On the old instance, I SSH’d into the machine and ran the following command in the website directory

wp export

This will generate a .xml file that contains all of the post, page and product data. After opening the .xml file in Atom I see one of the URLs immediately

Ya.....that is not my URL

Atom has some great RegEx find and replace functionality I needed to replace all these URLs with the URL of the website here is an example for this site.

After replacing all malware URLs you can save the .xml file and head back to your fresh installation. Head over to tools -> import and select the default WordPress importer. Simply upload the XML file and you should have your site back hack free!

Hacks Are Horrible

However they can be mitigated, I hope this tutorial helps anyone who experienced the same hack I did and can get their sites back up. If this did help you please share the blog post!

Posted on Leave a comment

Why You Should Use Twitter Fleets To Promote Your Apps

Twitter Fleets Are Here

Twitter has introduces a “Stories” like feature today called Fleets. Essentially they are tweets that disappear after 24 hours. Yours and all of the people you follow’s Fleets appear on the top of the timeline. While many people were upset they got stories instead of an edit button (it’s a stupid idea and will never happen stop asking) content creators and entrepreneurs such as myself were elated. Twitter is where most of my reach happens personally, I average 200K impressions per month and most of my clients come from the platform. In this article I will explain why you should be using Twitter Fleets to promote your apps and help you continue to live a #CodeLife

Twitter launched Fleets today and it is awesome!

Fleets Offer An Incentive Of Time

The number one reason I feel Fleets are a great addition to app developers trying to promote their apps and brands is because of the fact that they disappear after 24 hours. This creates a sense of urgency for your followers to see your content. Take the scenario below:

You are a game developer and want to promote your latest DLC content. You have a decent sized following on Twitter. You tell your followers that over the next 5 days you will be posting Fleets with bits of a coupon code and if you have all the pieces you can get the new DLC for free.

Over the next 5 days your followers who want this new DLC will be anxiously waiting for you to post your next Fleet, thus creating user engagement. This is just one example but it can be extrapolated and juxtaposed across many.

Another way that app developers can use Fleets is for promotions of upcoming events such as app launches. Instead of clogging the TL with simple tweets such as ” X launches in Y days!” You can make a story, still gets the message across to your audience while leaving your timeline open to more quality posts.

How will you use Fleets to promote your apps? Leave a comment below and don’t forget to sign up for the #CodeLife investment group and start earning residual income with apps!

Posted on 1 Comment

Building A Twitter Discord Bot In Node.JS

UPDATES FOR V2 TWITTER API!!!!

Discord Is Awesome, So Is Twitter

I have a discord server and I have a pretty decent sized Twitter following. I wanted to add a bot that followed my tweets and sent them as messages in my #twitter channel on my server. I refuse to pay for software and I have a hyper distrust of other’s software so I wrote my own. In this node.js script I have one file main.js that uses 3 dependencies: twit (for Twitter streaming API), Discord.js (for well….Discord) and dotenv (to load environment variables). The script is ~30 lines long and is available on my Github.

Create a Discord Bot using the Twitter Streaming API

Main.js

require('dotenv').config()
const Twit = require('twit')
const Discord = require('discord.js');
const client = new Discord.Client();
var T = new Twit({
  consumer_key:         process.env.TWITTER_CONSUMER_KEY,
  consumer_secret:      process.env.TWITTER_CONSUMER_SECRET,
  access_token:         process.env.TWITTER_ACCESS_TOKEN,
  access_token_secret:  process.env.TWITTER_ACCESS_TOKEN_SECRET,
  timeout_ms:           60*1000,  // optional HTTP request timeout to apply to all requests.
  strictSSL:            true,     // optional - requires SSL certificates to be valid.
})
client.login(process.env.DISCORD_TOKEN);
client.once('ready', () => {
  var stream = T.stream('statuses/filter', { follow: [process.env.TWITTER_USER_ID] })
  stream.on('tweet', function (tweet) {
    //...
    var url = "https://twitter.com/" + tweet.user.screen_name + "/status/" + tweet.id_str;
    try {
        let channel = client.channels.fetch(process.env.DISCORD_CHANNEL_ID).then(channel => {
          channel.send(url)
        }).catch(err => {
          console.log(err)
        })
    } catch (error) {
            console.error(error);
    }
  })
})

.env file to load variables.

TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=
TWITTER_USER_ID=
DISCORD_TOKEN=
DISCORD_CHANNEL_ID=

Now all you have to do is run it using the following command

node main.js

Don’t forget to get your application keys from the Discord developer portal and the Twitter developer portal. I made a Youtube video showing the process in detail. Want to start making money and living a #CodeLife? Join the group today!