This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Welcome back internet friend,
At the moment I’m currently doing a little hacking in Golang, and just wanted to post this quick little example of how to work with an api and parse json data in Go. Unlike some of the other languages I’ve worked with, in Golang you will need to create a struct to represent the JSON data you are receiving from the API endpoint you are hitting. That’s the trickiest part in my opinion. Also, the JSON data you will be working with is going to be an array of bytes, not a string. Last, you’ll use json.Unmarshal to parse your JSON and extract the information you are looking for.
Unfortunately, I don’t have time to write up a detailed post about how all of this works. However, I think the code snippet below is pretty cool and should provide a good reference if you happen to be playing around with APIs and JSON using Go. Note, the code below is using RapidAPI’s Hacker News endpoint to provide the JSON data. So if you’d like to try running this code yourself, make sure to visit rapidapi.com, register for an account, and replace the API key below with your own. Enjoy!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
UPDATE (1/27/2020): Remember to use a JSON to Golang Struct Conversion Tool such as JSON-to-Go to easily map Golang Structs to the JSON objects you want to decode. The code snippet below provides a good example of a struct created with JSON-to-Go:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Welcome back dear internet friend!
Having trouble getting started with WebSockets in React Native? I’ve got the answer you’re looking for! After many hours of messing around with WebSockets in React Native for the first time today I’ve made some discoveries that hopefully will be of use to someone else out there on the internet.
First, avoid Socket.IO. When attempting to tackle this problem I naturally started with Socket.IO as I’ve used it before in the past, it’s sort of the #1 name in WebSocket programming, so it would make sense as a good starting point. However, I had a little trouble getting it to work. Now in all fairness to Socket.IO, their WebSocket library may not have been the problem in my setup. But along my winding path today I discovered that Socket.IO doesn’t work “out of the box” in React Native, and while it does work, it actually falls back upon HTTP Long Polling if you simply install it in your project with modification. Furthermore, the official React Native documentation specifically mentions the built-in WebSocket API that comes with JavaScript, so I would recommend using that.
The next stumbling block you might run into is setting up your own WebSocket server. For me, this ended up being a lot trickier than simply setting up a WebSocket server for a web app. I have setup WebSocket servers for both NodeJS and Flask web apps fairly easily, but doing the same with React Native gave me a lot of problems. So what I found extremely helpful was to use a test endpoint from a 3rd party that simply echos back any WebSocket messages sent from my app.
After a days work fumbling around, riding the struggle bus, I present a super simple quick start template for getting up and running with WebSockets in React Native. The endpoint URL in the code points to the 3rd party WebSocket test endpoint described above, so the solution below should work as is with no modification necessary. Just create a new React Native app, delete the contents of your App.js file, and copy & paste the code below, and you should be well on your way! (and this way, you will know your React Native app is working properly and playing nice with WebSockets before you start messing around with your server side code. Also, remember to avoid Socket.IO if you want to use the built-in WebSocket API like in my example:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Cheatsheet reference for handling command line user input in Golang:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Over the past two days I’ve been pretty stumped working on this new database for my latest app, Moolabeast. I’ve been experimenting with different table designs etc., and discovered what I really need is a FULL JOIN. Great! But just one problem… MySQL doesn’t support FULL JOINS. Yikes!
On StackOverflow I found a bunch of different posts from developers describing how to “fake” a FULL JOIN using various SQL statements that were a little beyond my comprehension. However, I finally found an excellent blog post from TablePlus explaining how this works.
Therefore, if you find yourself struggling to do a FULL JOIN in MySQL, I suggest checking out TablePlus’s explanation. I don’t think I could do it justice! It took me a while to find a really good post on the subject, thus that’s why I wanted to write this post to point more people in the right direction.
Essentially you need to do a LEFT JOIN, and a RIGHT JOIN, and then a UNION which will merge the results of the two joins. Now it isn’t perfect, but it’s probably close enough:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Having trouble dismissing the keyboard in your React Native app on iOS? Would you like the keyboard to simply go away after a user taps somewhere else on the screen after entering some text into a TextInput? Here’s what you’re looking for: <TouchableWithoutFeedback> and Keyboard.dismiss() are the React Native equivalents of Tap Gesture Recognizer and resignFirstResponder. Simply wrap your view in a <TouchableWithoutFeedback> component and call the Keyboard.dismiss() method onPress and the keyboard will automatically dismiss itself when a user taps an area of the screen outside of the currently selected <TextInput>:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Quick little rant and opinion piece here tonight on the blog. I’ve been programming a lot lately in ReactJS and React-Native, following along with all of the various quickstart guides and tutorials related to the React tech stack, and have found myself thrust into this brave new world of JavaScript where variables do not exist. In this new world var is out, and const is in!
At least that’s how it appears looking at all of this “modern” JavaScript code I’ve been working with. I can’t remember the last time I saw the keyword var. But tonight I sort of had an epiphany: These constants don’t seem very constant to me. We’re using them just like variables!
To test this out, I fired up repl to see, can you just write over a constant whenever you feel like it? Or if you declare a new constant with the same name, is all forgiven? Well here’s what I found out. The JavaScript interpreter will get mad at you and crash if you try to write over a constant, or declare a new constant with the same name. But, if you declare a new constant inside a function you can write over it as many times as you like!
So… essentially this is what I’ve been seeing in all the modern JavaScript code I’ve been looking at. People are using constants just like variables, except the constants are always inside of a render() function or something similar so you can keep writing over it over and over and over again.
I’m sure most professional React developers know this. However, this seems pretty stupid to me. Why use a constant if you actually want a variable? I’m sure the answer has something to do with immutability! and functional programming! But I’m not buying it. const is not constant, and the emperor has no clothes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Quick post here tonight on how to setup a new flask app for development on a Mac. In the past I’ve done all of my Python/Flask development on a Windows desktop computer, but since I’m now doing all of my development on a Macbook Pro, I wanted to write another little quickstart reference for myself or anyone else out there on the internet to get up and running with Python and Flask on a Mac (assumes you’ve already installed Python 3, if you haven’t, please visit https://python.org):
First, create a directory for your new Flask project
$ mkdir MyNewFlaskApp
Navigate to your newly created directory
$ cd MyNewFlaskApp
Create your virtual environment
$ python3 -m venv venv
Activate the virtual environment
$ source venv/bin/activate
Make sure Flask is installed
(venv) $ pip3 install Flask
Now write the actual python code for your flask application. We’ll call our python script my_new_flask_app.py. Save this script in your MyNewFlaskApp directory.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
I’ve been working with a student of mine recently in Golang and noticed that my skills were sort of lacking! So here’s a quick little cheat sheet reference for coding in Golang. If you need any help getting your computer setup to run Golang, check out Learn Go in 12 Minutes on YouTube.
If you haven’t already installed Golang and set up your environment, do that first…
Step 1: Install Golang
Then, create your “go” directory where you will store all of your golang projects on your local machine:
$ cd $HOME
$ mkdir go
$ cd go
$ mkdir src
$ cd src
Next, create a subdirectory for your project:
$ mkdir hello
$ cd hello
Now create a file called hello.go which will contain our hello, world program:
package main
import "fmt"
func main() {
fmt.Printf("hello, golang\n")
}
Compile & Run:
$ go build
$ ./hello
Last, check out the example below (based on Learn Golang in 12 Minutes) as a reference/cheatsheet:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Need to work with command line user input? Another cheatsheet:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Need to ping a JSON API? More cheatsheet goodness from the folks at RapidAPI:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
Tonight using Auth0 I started integrating social login with Google, Facebook, and Twitter into the latest development version of my personal finance app, Moolabeast, and found myself wondering: Do users need to signup? Or can they just log in?
While testing this new integration it appears there is no difference between signing up and logging in using a social media account. However, I really wanted to make sure that I get this right so I decided to dig a little deeper into the issue. Long story short: there is no difference between signing up and logging in. If a user clicks on “log in” instead of “sign up”, the end result is the same. Apparently Auth0 has just stuck with this old signup/login paradigm as it’s what internet users are used to. First I sign up, then I log in.
So I hope this clears up some confusion if you happen to be integrating social login with Auth0 into your app. Happy hacking my friend!
This blog post is brought to you by the developer of BitBudget. BitBudget is an automated budgeting app for Android and iOS which syncs with your bank account and helps you avoid overspending. If you’d like to quit living paycheck-to-paycheck and get a better handle on your finances, download it today! https://bitbudget.io
This is actually a cross-post of a comment I posted recently to Hacker News. Unsurprisingly, the comment received negative 1 upvotes. However, I think this is an import piece of information that has gone missing from the World Wide Web, so I wanted to bring it back: The 100 Year Historic Decline of Dividend Payout Ratios for S&P 500 Companies
The hacker news thread on which I commented was regarding a recent headline on increasing S&P 500 Buybacks, but what I think is more troubling is the decline in dividend payout ratios, not the increase in buybacks. But the two are closely related, so let’s take a look:
100 years ago, companies on average dispersed 90% of their earnings back to shareholders as dividends. But by the 1970’s however that number fell to below 50%. Fast forward to the 2000’s and the payout ratio is down to around ~30%.
What happened? Companies used to distribute their profits back to their owners, the shareholders. But that isn’t what’s happening anymore. In my amateur historical analysis, I believe there are two causes for this disastrous trend:
1) Tax dodging 2) The Casino/Gambling Mentality of Stock Market Investing
My theory is that the trend started with investors 50 to 100 years ago looking to dodge taxes, and gain a little free compounding. Makes sense! Right?
But it’s just gone too far. Now investors receive almost nothing for owning a stock. Take Apple Inc. for example. In 2019 Apple made a profit of $55 billion. How much of that did they pay back to their shareholders? $14 billion.
And Apple isn’t even the most egregious case. They at least pay a dividend. Google, Amazon, and Facebook combined paid $0 back to their shareholders this year!
So how has this insanity continued to go on for so long? The answer is simple: Adults don’t know what stocks are. They think that a stock is a thing that you buy, its price goes up and down, and the game is to try and sell the stock when the price goes up, and hope that the price doesn’t go down. And the machine that keeps the whole thing moving along is the Stock Buyback.