Adobe PhoneGap Hello, World APK

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 experimenting at work with Apache-Cordova/Adobe-PhoneGap and am trying to find an easy way to distribute APKS generated using Adobe’s build service. Setting up development machines is probably too much work for the kids I teach, so just wanted to see if I can post an APK easily on my WordPress blog. So without futher ado… My Adobe PhoneGap Build Service Hello World APK =>

Download AdobePhoneGapHelloWorld

 

Wrapping up my Multiplayer PhaserJS/Socket.io Project, and Moving on to Photon

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

Just finished up with the multiplayer PhaserJS/Socket.io tutorial that I’ve been following along with and using in one of my classes that I teach. If you want to check out the finished project it’s hosted here => http://multiplayerdemo.xyz

I personally was really excited about playing around with NodeJS & Express & Socket.io, but my student happens to be really good at Unity3D and has happened to find a serverless platform-as-a-service style option for multiplayer called Photon that he really likes so… looks like it’s time to learn Photon!

I still don’t know exactly what all of our options are as far as multiplayer client-server options go, but apparently people have a lot of good things to say about Photon Unity 3D Networking (PUN).

 

12 Tutorials on How to Deploy an ExpressJS App to Production Using NGINX

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

  1. Configure Nginx as a web server and reverse proxy for Nodejs application on AWS Ubuntu 16.04 server
  2. Deploying Express.js website to VPS with Nginx, PM2 and Ubuntu 18.04
  3. Setting up Express with nginx and pm2
  4. How to run node.js server with Nginx
  5. How To Set Up a Node.js Application for Production on Ubuntu 16.04
  6. Production best practices: performance and reliability
  7. Deploying NodeJS using Express with NginX and Let’s Encrypt
  8. Installing Express/Nginx app with SSL using Certbot on Ubuntu 18.04
  9. Node.js Express Nginx

Working with the most advanced student at our school tomorrow and need to post a few references for our lesson, deploying an expressjs app to production. While the above 9 tutorials are pretty good, it looks like this 10th and 11th tutorials from DigitalOcean is probably the best:

And one last tutorial you’ll need to get NGINX setup and configured properly:

 

Smooth Turtle Graphics in Python

My coworker John has been doing some really nice projects with smooth graphics in python using the turtle graphics library lately, so I just wanted to bookmark this series of blog posts I stumbled upon which demonstrates how to smooth out your animations in turtle =>

 

How to turn your Python Script into a Windows Executable (.exe)

Quick little tutorial on how to turn your python script into a real program:

  1. Install PyInstaller using pip
  2. Navigate to the directory containing your python script.
  3. Run PyInstaller
  4. Double click your newly created .exe file located in the dist subdirectory and enjoy!
$ pip install pyinstaller
# make cool python program
$ cd Desktop/PythonPlayground
$ pyinstaller --onefile cool_python_program.py
# double click cool_python_program.py in Desktop/PythonPlayground/dist directory
 

Simple Leaderboard Tutorial in PHP & JS

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 tutorial on creating a leaderboard for a PhaserJS game with PHP and a little JS =>

// Guys, we need to write a little javascript here
// to add the user's score to our database
var playerName = "nUb";
var score = points;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// document.getElementById("demo").innerHTML = this.responseText;
alert(this.responseText);
}
};
xhttp.open("POST", "add_score_to_leaderboard.php", true);
var myFormData = new FormData();
myFormData.append("playerName", playerName);
myFormData.append("score", score);
xhttp.send(myFormData);
<?php
$playerName = $_POST['playerName'];
$score = $_POST["score"];
$servername = "localhost";
$username = "shranos_admin";
$password = "letsgo";
$dbname = "shranos_db";
// Create connection
$conn = new mysqli($servername,$username,$password,$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: ".$conn->connect_error);
}
// $sql = "INSERT INTO leaderboard_table (username_column, highscore_column) VALUES ('aNub', 0)";
$sql = "INSERT INTO leaderboard_table (username_column, highscore_column) VALUES ('" . $playerName . "', " . $score . ")";
if ($conn->query($sql)===TRUE) {
// echo "New record created successfully";
echo "your moms score added to leaderboard, thx noob";
} else {
// echo "Error: ".$sql."<br>".$conn_error;
echo "ERROR: PC LOAD LETTER";
}
$conn->close();
?>
 

Introduction to Game Development Lesson 0: Pong

Simple Pong by Peter Kwak (Edited by Topher Pedersen)

On my way back to Dallas from Austin on Labor Day I happened to hear about this really awesome course on game development from Harvard University taught by David Malan (of CS50) and Colton Ogden. I immediately enrolled in the course via edX.org on my phone, and jumped right into lesson 0 after I arrived back in Dallas.

One of the things that I really liked about the course is that they kick things off with one of the original video games, Pong. When I first started teaching at theCoderSchool this was one of the first games I built myself to make sure I knew what I was doing when it game to programming simple 2D games in Python with my students. That first summer of teaching we actually used an extremely slimmed down ~100 line version of the game one of my coworkers Peter Kwak wrote for our summer camp.

Fast forward a few hours though, and I’ve quickly fallen out of love with Malan & Ogden’s course. While the Lua programming language and Love2D game engine seem really promising, their code examples haven’t been updated in two years, and include bugs that prevent them from running. While I was able to find a bug fix that someone posted in the YouTube comments for the course lecture, I realized that the 100 line program that Peter wrote is actually a lot better for teaching purposes than the one used in the Harvard CS50 Game Development Course on edX. So…

I busted out Peter Kwak’s old code, and modified it a little bit so I can run it using real Python instead of the trinket.io web based stuff we were using at camp. I imagine I will probably need to make a lot of tweaks to this code, however, I’m tossing two of my 10 year old students into the deep end of the pool tomorrow with Lesson 0: Pong =>

# Copyright (c) 2018 Peter Kwak (Edited by Chris Pedersen)
# This is free and unencumbered software released into the public domain.
# For more information, please refer to <http://unlicense.org/>
import turtle
# Create Game Window
screen = turtle.Screen()
# screen.setup(500, 400)
screen.screensize(500, 500, "black")
screen.bgcolor("black")
# screen.addshape("Paddle.jpg")
# Create Ping Pong Ball
ball = turtle.Turtle()
ball.penup()
ball.speed(0)
ball.shape("circle")
ball.color("white")
# Create Left Ping Pong Paddle
paddle1 = turtle.Turtle()
paddle1.penup()
paddle1.speed(0)
paddle1.setx(-200)
paddle1.shape("square")
paddle1.shapesize(4.5, 1, 0)
paddle1.fillcolor("white")
# Create Right Ping Pong Paddle
paddle2 = turtle.Turtle()
paddle2.penup()
paddle2.speed(0)
paddle2.setx(200)
paddle2.shape("square")
paddle2.shapesize(4.5, 1, 0)
paddle2.fillcolor("white")
# Create Scoreboard
scoreWriter = turtle.Turtle()
scoreWriter.penup()
scoreWriter.speed(0)
scoreWriter.hideturtle()
scoreWriter.color("white")
# Set Ball Trajectory
rise = 3
run = 3
# Set Score
score1 = 0
score2 = 0
# Create Function Which Will Move Player 1's Paddle Up
def up1():
paddle1.sety(paddle1.ycor() + 50)
# Create Function Which Will Move Player 1's Paddle Down
def down1():
paddle1.sety(paddle1.ycor() - 50)
# Create Function Which Will Move Player 2's Paddle Up
def up2():
paddle2.sety(paddle2.ycor() + 50)
# Create Function Which Will Move Player 2's Paddle Down
def down2():
paddle2.sety(paddle2.ycor() - 50)
# Create Function To Update Scoreboard
def updateScoreboard():
global scoreWriter
global score1
global score2
global ball
scoreWriter.clear()
myFont = ("Arial", 40, "bold")
scoreWriter.goto(-100, 150)
scoreWriter.write(score1, font=myFont)
scoreWriter.goto(100, 150)
scoreWriter.write(score2, font=myFont)
ball.goto(0, 0)
# Set Event Listeners
# These event listeners will listen for button presses (up, down, etc.)
screen.onkey(up1, "w")
screen.onkey(down1, "s")
screen.onkey(up2, "Up")
screen.onkey(down2, "Down")
screen.listen()
# Create Main Game Loop (Simulates Time, Keeps Game Running)
while True:
# Move Ball
ball.goto(ball.xcor() + run, ball.ycor() + rise)
# Detect Top or Bottom Boundary Strike
# (Reverses the Ball's Direction of Travel)
if ball.ycor() > 200 or ball.ycor() < -200:
rise = -rise
# Detect Paddle Strike (Player 1)
# (Also Reverses the Ball's Direction of Travel)
if abs(paddle1.xcor() - ball.xcor()) < 15:
if abs(paddle1.ycor() - ball.ycor()) < 50:
run = -run
# Detect Paddle Strike (Player 2)
# (Also Reverses the Ball's Direction of Travel)
if abs(paddle2.xcor() - ball.xcor()) < 15:
if abs(paddle2.ycor() - ball.ycor()) < 50:
run = -run
# Detect When A Player Scores a Point
if ball.xcor() > 250:
# Increment player1's score by 1 point when his ball
# travels past the paddle of his opponent, player 2.
score1 = score1 + 1
updateScoreboard()
ball.goto(0, 0)
elif ball.xcor() < -250:
# Increment player2's score by 1 point when his ball
# travels past the paddle of his opponent, player 1.
score2 = score2 + 1
updateScoreboard()
ball.goto(0, 0)
# Christine, My Super Sweet AI Goes HERE...
if ball.ycor() > paddle2.ycor() + 25:
paddle2.sety(paddle2.ycor() + 15)
elif ball.ycor() < paddle2.ycor() - 25:
paddle2.sety(paddle2.ycor() - 15)
view raw pong.py hosted with ❤ by GitHub
 

MoneyPhone, the First Official Sponsor of BudgetMealPlanner.com

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

A few weeks ago I decided to give Gabriel Weinberg’s book, Traction, a second read. Long story short: Weinberg suggests trying many many different marketing channels when launching a startup. Shortly after picking the book back up I heard about a blog that I was particularly interested in sponsoring on the Indie Hackers Podcast called BudgetMealPlanner.com.

If you haven’t heard of it, BudgetMealPlanner.com is a blog with recipes or meal plans for eating on $5 a day! Pretty neat right? Personally I try to stay under $6 per meal, but BudgetMealPlanner is all about $5 for the whole day, which I think is really incredible and definitely falls into the same sort of category as my app, Frugal Living, Minimalism, Etc.

So without further ado, my first email marketing campaign =>

 

Smart Dumbbells

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

A friend of mine and I have been bouncing this idea around about trying to see if we can build a pair of smart dumbbells. The idea is: Strava for Weight Lifting. Anyway, I happened to stumble upon this cool blog post about such a dumbbell built a hackathon in 24 hours, and wanted to bookmark it here for future reference => Arduino Integrated Dumbbell — The dumbbell that’s not dumb! Rep counting has never been easier!

 

RIP Peter Fonda

” I never wanted to be anybody else.” ⁠— Captain America