How to Prevent a Button from Changing its Border Color and Background Color When Clicked in CSS

This code snippet is brought to you by the developer of MoneyPhone, a personal expenses tracking app for Android and iOS. Quit living paycheck to paycheck and get your personal finances under control when you start monitoring your spending with MoneyPhone!

Okay, so you want your HTML <button> tag to stop displaying a solid border and changing its background color when clicked (using CSS). Here’s the quick fix for iOS & Android =>

<!DOCTYPE html>
<html>
<head>
<style>
.noFlash {
/* Remove onclick Background Color Change */
/* REFERENCE: https://bit.ly/2Yc95wR */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
.noFlash:focus {
/* Remove onclick Border Color Change */
/* REFERENCE: https://bit.ly/2KFgNG7 */
outline: none;
background-color: white!important;
}
</style>
</head>
<body>
<button class="noFlash">CLICK ME</button>
</body>
</html>
 

Marketing Like Dr. Squatch

This really great ad from a soap company called Dr. Squatch keeps popping up in my YouTube feed, and I just wanted to bookmark it here on the blog for reference. Here in a couple of weeks I plan on “re-launching” my personal finance app, MoneyPhone, and I’d like to shoot a similar style ad for MoneyPhone:

And no, I didn’t purchase a bar because it’s kind of expensive. But I still love the ad. #CopyWhatYouLike => http://paulgraham.com/copy.html

 

A Mix of Entertainment & Education

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

Almost everything I do I try to have a mix of entertainment and education. There’s a sweet spot between those… If it’s too entertaining you don’t learn anything, and if it’s too educational nobody listens.

Russ Roberts
 

How to Build a RESTful API in Python with Flask in 50 Lines or Less

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

Really simple example of how to build an API with Python and Flask that listens for HTTP requests and spits out JSON. The hard part of all of this is building the JSON with python. For really simple JSON we can just use a dictionary. However, where things get complicated is if you want your JSON objects to contain objects. The work around I’ve found is to simply create a dictionary of dictionaries, where we will use dictionaries instead of objects. In the example below first_category, second_category, and third_category would normally be represented as objects, but have been converted to dictionaries instead:

# Import Flask
from flask import Flask, render_template, request, jsonify, session, redirect, url_for, Response
app = Flask(__name__)
# REFERENCE: http://blog.luisrei.com/articles/flaskrest.html
@app.route('/dictionary-to-json-test', methods=['GET', 'POST'])
def dictionary_to_json_test():
list_of_categories = []
first_category = {
"name": "Fast Food",
"number_of_transactions": 13,
"amount_spent": 427.33
}
second_category = {
"name": "Restaurants",
"number_of_transactions": 1,
"amount_spent": 54.0
}
third_category = {
"name": "Entertainment",
"number_of_transactions": 2,
"amount_spent": 125.0
}
list_of_categories.append(first_category)
list_of_categories.append(second_category)
list_of_categories.append(third_category)
dictionary_of_dictionaries = {
"category": list_of_categories
}
# Convert Dictionary to JSON
json_obj = json.dumps(dictionary_of_dictionaries)
# Create Response Object
response_obj = Response(json_obj, status=200, mimetype='application/json')
# Return JSON (Response Object)
return response_obj
if __name__ == "__main__":
app.run()
 

MoneyPhone Feature Requests and Bug Tracking

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

Hello Internet Friends,

This post isn’t really for you. I just wanted to jot down a few notes on feature requests and bugs that need to be addressed with my app MoneyPhone before I forget:

Feature Requests

  1. Allow users to edit transactions
  2. Add spending categories
  3. Include pending payments (accurately)
  4. Bring back “money spent yesterday” sms feature
  5. Add category budgets

Bug Tracking

  1. Figure out how to handle expired access_tokens

 

Get Year Month & Day as Integers from an ISO 8601 Date String in Python

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

date_str = "2017-01-29"
year_str = date_str[0] + date_str[1] + date_str[2] + date_str[3]
month_str = date_str[5] + date_str[6]
day_str = date_str[8] + date_str[9]
year_int = int(year_str)
month_int = int(month_str)
day_int = int(day_str)
print(year_int)
print(month_int)
print(day_int)
 

The Beautiful Thing About Programming & Startups

 

Free Marketing on Quora— a Traction Channel Experiment

Dear Internet Friends,

Tonight I wanted to write a real quick post on an experiment I’m conducting. I’m still struggling to find a traction channel for promoting my personal finance app, MoneyPhone, so on a whim I decided maybe I should try answering some questions regarding the topic of personal finance on Quora. To my surprise the site actually has a pretty decent Personal Finance / Budgeting section with many recent unanswered questions on the topic. And since I’m actually using MoneyPhone successfully to solve my own personal finance and budgeting problems, I decided to answer a couple of questions suggesting the OPs try my app. Not sure if my answers will get any views, or result in any downloads, but it’s worth a shot right?

So without further ado, here are the links to my two answers:

Read topherPedersen's answer to How do you avoid spending the next month’s budget this month? on Quora Read topherPedersen's answer to How do I create a monthly budget? on Quora

Sincerely,

Your Friend Topher

UPDATE (8/3/2019): I woke up the day after posting my two Quora answers and found that Quora moderators had deleted one of my answers. I sort of assumed that this would be a possibility considering they need to make money from people looking to market/advertise on their platform. However, I don’t think its a very good policy as I was ready to start spending money on their platform to promote some answers but have now changed my mind. Really, it was quite unnecessary. They easily could just push answers from marketers down the page unless they pay to push their answers up to the top. O well! On to the next traction channel.

 

Get Fired Up Like Jorge Masvidal

Feeling fired up, like Jorge Masvidal.

 

SpaceWalk PhaserJS Tutorial

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

Cool “spacewalk” PhaserJS tutorial for use with my students @ theCoderSchool:

Repl.it Starter Template (Includes Game Assets, No Code)

<!DOCTYPE html>
<html>
<head>
<script src="//cdn.jsdelivr.net/npm/phaser@3.18.0/dist/phaser.js"></script>
<!-- import phaser (phaser.js) -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/phaser-ce/2.13.2/phaser.min.js"></script> -->
<style>
body {
margin: 0;
overflow: hidden;
}
</style>
</head>
<body>
<script>
var config = {
type: Phaser.AUTO,
width: window.outerWidth,
height: window.innerHeight,
physics: {
default: 'arcade',
arcade: {
/* gravity: { y: 300 }, */
debug: false
}
},
scene: {
preload: preload,
create: create,
update: update
}
};
// DECLARE GLOBAL VARIABLES
var spaceMan;
var game = new Phaser.Game(config);
function preload() {
// do stuff
this.load.image('space', 'assets/high-res-space.jpg');
// LOAD SPRITE
this.load.image('spaceMan', 'assets/spaceMan.png');
}
function create() {
// do stuff
this.add.image(window.outerWidth / 2, window.innerHeight / 2, 'space');
spaceMan = this.physics.add.sprite(window.outerWidth / 2, window.innerHeight / 2, 'spaceMan');
spaceMan.angle = 270;
// ADD CURSORS (USER INPUT / CONTROLS)
cursors = this.input.keyboard.createCursorKeys();
// SET SPACEMAN VELOCITY
spaceMan.body.velocity.x = 0;
spaceMan.body.velocity.y = 0;
spaceMan.body.angularVelocity = 0;
spaceMan.body.velocityFromAngle = 0;
spaceMan.setDamping(true);
spaceMan.setDrag(0.99);
spaceMan.setMaxVelocity(200);
}
var coordinatesDisplayed = false;
var centerX;
var centerY;
function update() {
// ROTATIONAL THRUST
if (cursors.left.isDown) {
spaceMan.angle -= 0.5;
} else if (cursors.right.isDown) {
spaceMan.angle += 0.5;
}
// FORWARD THRUST
if (cursors.up.isDown) {
this.physics.velocityFromRotation(spaceMan.rotation, 200, spaceMan.body.acceleration);
// DOWNWARD THRUST
} else if (cursors.down.isDown) {
this.physics.velocityFromRotation(spaceMan.rotation, -200, spaceMan.body.acceleration);
} else {
spaceMan.setAcceleration(0);
}
this.physics.world.wrap(spaceMan, 250);
}
</script>
</body>
</html>
view raw spacewalk.html hosted with ❤ by GitHub