I have been trying to teach myself game development using Unity for a few weeks now. I’ve put together a project that I’m calling “Robot Slayer”: a FPS that I created to be test environment for my script writing. Then Unity decided to pull the rug out from under all developers this week with their predatory pricing changes, and I expect a lot of studios will abandon the platform moving forward. I think I am going to switch to learning Unreal and C++, and keep an eye on how Godot develops now that Unity is imploding. So instead of further developing my Unity game, I am putting what I’ve made so far on my site here: RobotSlayer. It’s just one small level and a bit janky, but it’s playable and you can run it in your browser. I’ve also put the code for it up on GitHub.
I have begun teaching myself C# game dev within Unity. After watching several tutorials and reading “Unity in Action” by Joseph Hocking, I started by creating an arena where I could test attaching scripts to game objects. I experimented with textures and skyboxes a bit. A script for player movement was easy enough to get working. Then I wrote a basic script (based on an example in the book) to have objects move through the environment while avoiding obstacles via Raycasting. That looked like this:
I'm teaching myself #gamedevelopment in Unity and this is my current experiment. I made a basic environment, so I could test a simple AI script that makes the boxes avoid the player and navigate away from walls. It's janky, but it's a start. #indiedevpic.twitter.com/m2PRvGvpPu
Next, I created a proper enemy, with a bit of basic AI. Using the code for avoiding obstacles, I added a function to cause the enemy to stalk the player through the environment and to attack when the player is spotted. Then I created a simple weapons system and armed the enemy and the player. (This also gave me a chance to play with Bloom post-processing to get the projectiles “glowy”.) This is where I’m at now:
Some progress on the #Unity game I'm making to teach myself #gamedev: I made an enemy with some limited AI that can track the player and avoid obstacles. I also created a weapons system. pic.twitter.com/3aZdY4gyvf
I consider myself something of a videogame historian: I like to collect and restore vintage computers, and then run original games on the original hardware. One of my recent adventures has been exploring the world of Commodore 64’s. I purchased my first C64 from a local Frameshop that used it as their primary computer for about 32 years, until the store owner recently passed away. The new owner wasn’t interested in using a Commodore as her Point-Of-Sale system, so she sold me the computer and even threw in the POS software (on a 5.25″ floppy) that the previous owner had written himself.
Since I now own the only copy of this software, I felt that I should try preserving it. To that end, I began experimenting, and I was eventually able to use a SD2IEC in combination with CBM Command to save a d64 image of the floppy disk onto a SD card. Then, I uploaded the Frameshop POS to Internet Archive.
While I was at it, I also uploaded some other obscure C64 files I happen to have in my collection: COSMI Top 20 Tools for Commodore 64/128 (has a neat spinning menu), and MFJ MultiCom64 (software for controlling Ham Radio).
I find fictional advertising really interesting. I’ve noticed that several modern videogames include fictional advertising for fictional products as a type of world building. In the real world, thriving economies are underscored by a background of ads, so seeing ads in a fictional world makes it seem a little more real.
As an advertising nerd though, I like to stop and admire these ads and wonder about the thought process behind them. Are they simply mimicking a real world advertisement, or has some zealous designer invented an entire fictional ad campaign, complete with an original brand strategy? Usually these ads take the form of posters plastered throughout the environment, though I have also come across tv commercials and radio ads. Next time you are playing a game that creates a believable virtual world, look around and see if you can spot the advertising.
For many years, my wife and I have enjoyed spending our weekends at estate sales, yard sales, auctions, and thrift stores. It’s fun treasure hunting for the rare and unusual, and antiques give you a physical connection to the past that I find worthwhile. I collect old books, vintage technology, art supplies, pencils, and whatever else I happen to find interesting. At some point, I started routinely culling my collections so they wouldn’t get out of hand. Then I began looking for things I could sell for a profit to fund other purchases. I sold smaller items in my eBay store, and larger items locally on Facebook Marketplace. At a certain point, I realized that my side hustle was generating enough revenue that I could quit my day job as a Web App Dev and become a full-time e-commerce business owner. So I did. This is what I learned from that experience:
Become an Industry Expert
I thought that I was in the business of flipping rare antiques for profit. What I came to realize is, I was really in the business of leveraging knowledge. In order to acquire valuable inventory, I needed to be able to identify value where most people saw trash. Moving items from a market where they are under-valued to a market where they are highly sought. This is difficult to do, and requires a great deal of knowledge.
I studied certain areas in great depth. I read books and blogs, I watched videos, I joined online groups, I pulled sales data from various sources… I made myself an expert on the sorts of things I could likely find in the places I most often looked. Not just the monetary value, but also the market trends for those categories.
For example, some items sell for a high rate, but don’t sell very quickly, so you have to account for how long your funds will be tied up in that piece of merchandise. Every dollar trapped in inventory is a dollar that you can’t spend on acquiring new inventory. Some items you might be able to buy for $50 and sell for $500, a healthy ROI, but the customers for that item are few and difficult to reach. Some items are so rare that it’s impossible to find data on previous sales, which creates an element of risk that must be accounted for. Data is king.
I’ll give you a real example. There was a certain model of Polaroid camera that I would occasionally come across, usually for about $5. Most people saw Polaroids as virtually worthless since they require a special film that hasn’t been produced in decades, making the camera essentially a paper weight. However, I knew that a new company had recently sprung up to cater to the vintage camera enthusiast market, and this company was now producing film for old Polaroid cameras. Suddenly, these “worthless” cameras were in high demand in certain circles. They would sell almost instantly for around $80, meaning every time I came across one for $5 I knew that I would make a quick return of 16 times my investment. I did this many times. Knowledge equals profit.
Find Passionate Niche Markets
My specialty was finding hard-to-find, high-value antiques, and selling those antiques to passionate collectors. I sold fountain pens, movie props, cameras, books, art, industrial decor, and anything else I knew a collector would highly prize. Truly obscure items don’t pop up on eBay as often as common items, and when they do, they are often not optimized in such a way that collectors can easily find the listing. This can make it difficult for collectors to find the items they are the most motivated to acquire, and with the economics of supply-and-demand, the more difficult it is to acquire an item the more a collector is willing to pay for it. Connecting these motivated collectors with their holy grail equals profit. Thankfully, groups of like-minded collectors tend to gather on social media platforms, which made my job easier. To reach them:
I joined niche collector groups on Facebook, Reddit, and certain forums.
I posted quality pictures of my inventory on Instagram, with hashtags that would attract the attention of collectors, and descriptions that indicated that the items were for sale.
I marketed my social media accounts to grow followers, who would eagerly watch to see if I posted the items they collected.
I kept lists of good customers so I could send them special offers.
When you sell common items, there is a larger market, but also a greater level of competition. Greater supply, less demand. On the other hand, passionate niche markets have less supply and greater demand, but you have to work harder to reach those customers. You have to go where the customers are.
Know when to Pivot
I enjoyed running my own company. I learned a great deal, and I earned enough money to live pretty comfortably. But I also came to the realization that what I was doing was not scalable. There is only one of me and only so many hours in a day. Unfortunately, that means there is a limit to how much I could conceivably earn (since the nature of the business wasn’t conducive to expansion), and I also knew that my personal income potential was higher than this business could provide. Besides this, I found myself ready to take on a new challenge. After running my company for a few years, I decided to pivot and channel the passion I had devolved for business and marketing into a new career. (However, I still sell as a side hustle, and likely always will.)
I wanted to play around with Sentiment Analysis of Tweets; specifically, I wanted to try the Python TextBlob library, which has a built-in function that performs text analysis to determine if a string has a positive or negative sentiment. After pondering a bit, I decided it would be fun to search for tweets that were created specifically within the city limits of Tuscaloosa, where I am currently attending school. I wrote a script that scrapes Twitter and returns tweets by geolocation, and then uses TextBlob on the results.
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 6 15:58:58 2022
@author: austin
"""
import snscrape.modules.twitter as sntwitter #Social Network Scraping Library
import pandas as pd #so I can make a dataframe of results
from textblob import TextBlob
import csv
import time
#Tuscaloosa = geocode:33.23726448661455,-87.58279011262114,20km
query = "geocode:33.23726448661455,-87.58279011262114,20km"
tweets = []
combinedtweets = []
limit = 10000000 #set a limit on how many results I want to pull
for tweet in sntwitter.TwitterSearchScraper(query).get_items():
if len(tweets) == limit:
break
else:
# set sentiment
text = tweet.content
analysis = TextBlob(text)
if analysis.sentiment.polarity >= 0:
sentiment = 'positive'
else:
sentiment = 'negative'
tweets.append([tweet.date, tweet.user.username, tweet.content, sentiment])
df = pd.DataFrame(tweets, columns=['Date', 'User','Tweet', 'Sentiment'])
df.to_csv('twitter_scrape_results.csv') #save dataframe as csv
print("\014") #clear console
time.sleep(10)
print("CSV Successfully Created")
The results were pretty interesting (I uploaded the dataset to Kaggle if anyone is interested). It seems sentiment stays roughly the same each year, hovering around 85% positive and 15% negative. I really would have thought negative sentiment would be much higher based on my personal observations of Twitter content: makes me wonder if Tuscaloosa is an unusually happy place, or if my Twitter observations are influenced by negative bias…
In any case, perhaps a more interesting bit of data is that the total amount of Tweets seems to decline quite a bit each year. This raises the question, why are Tuscaloosians tweeting less often? I put the results into this Tableau dashboard, which displays just how steady and steep a decline there has been.
×
Update:
I decided to test a hypothesis: perhaps the high level of positive tweet sentiment is due to the fact that this is a college town, and numerous tweets were posted by official University of Alabama departments? I used OpenRefine to filter out official UA accounts, which was easy enough to do since their usernames seem to either begin with “UA_” or end with “_UA”. Surprisingly though, that didn’t change the sentiment percentages at all. I now suspect that even if you factor in all official UA Twitter accounts, you would also have to factor for the fact that a large number of Tuscaloosians work for UA (45,000 employees). I know many of my professors post UA related content using their personal Twitter accounts, and by design this content will logically slant positive.
As the famous American writer Mark Twain is believed to have once stated: “The man who does not read good books is no better than the man who can’t.” Perhaps you are an avid reader, or like most you may only read books rarely if at all. There is a great benefit however in building a quality personal library and reading from it regularly. In fact, I am going to argue that this is critically vital if you wish to be successful in your career. If you don’t start building your own personal library now, and adopt an aggressive pattern of daily reading, then you simply won’t be competitive with other prospective employees in the marketplace.
For example, I personally read 45 mins every morning, of a book that I believe will be beneficial to my career. I take Saturdays off, so that is 4.5 hours of reading a week, or 234 hours of reading per year. I average 2 books a month, or 24 books a year. Meaning that in four years, someone following this same regiment would have read 96 books in their field of study. That is a lot of self-study. And when you are interviewing for jobs, you will be up against interviewees like me who use their free time to get a leg-up on their future competition. As Amitesh Jasrotia says in a 2021 blog post for Bookjelly.com, “your library can be your armory of knowledge with which to aim at higher things in life.”
So allow me to share the many benefits of building your own personal library, how to find relevant books to buy, and what sort of books you may want to start with.
A lack of reading is a critical problem in modern society. According to a 2021 article by Pew Research, titled “Who doesn’t read books in America?”, roughly a quarter of American adults (23%) say they haven’t read a book in the past year. Maybe this describes you. You may think to yourself that you can just google any information you need. Living in the modern digital age, it is easy to get into the mindset that any question can be answered with a few keystrokes, but this simply isn’t the case. For starters, there is a lot of information that can only be found in the pages of a book. Most books have never been digitized, and books tend to explore subjects at a much greater depth than an online article or YouTube video. Some books are rare and difficult to acquire, full of information difficult to find elsewhere. It may be that reading such a book gives you an advantage over people who don’t have access to that knowledge. That is one of the reasons that I like to search for and collect rare books that are relevant to my field of study. The extra effort it takes to hunt down and read a rare book might just pay dividends in the future, when you know things that people that you are in competition with don’t. As historian Matthew Muller stated in a 2020 blog post, “collecting actual books is a great way to gain access to knowledge and preserve it over time.”
There is also a psychological difference in absorbing information from a book rather than from a computer screen. The media theorist Marshall McLuhan wrote an entire book, “The Guttenberg Galaxy”, on the power of the printed page. It’s a rare book, difficult to find. I am lucky enough to own a copy. McLuhan states in this book that when we read text off a page of a book, that our brain processes that information differently than when we absorb content through electronic mediums. In other words, the method that we take in information has a degree of influence over how we understand it. So we can’t equate googling an answer to finding answers from a book, as they are quite different things.
So why build a library and not simply check books out at your local library? There certainly is a financial benefit to using your local library, however it isn’t a great substitute for building your own library. For one, it isn’t very efficient. Every time you are ready to pick up a new book to read, or anytime you need a quick reference, you would have to jump into your car and drive to your nearest library. With the price of gas being what it is, this is quickly becoming less economical than it may have originally seemed. You are also at the mercy of what the library has in stock, which means the books most beneficial to you might not be accessible to you. Furthermore, especially niche books or truly rare books aren’t often stocked by libraries. Building your own personal library will allow you to select the books most relevant to your own needs, and you will have instant access to them 24/7.
There are lots of ways to help offset the cost of books if that is a concern. Frequenting used bookstores and searching auction sites like eBay will often allow a frugal book buyer the opportunity to amass a large collection quite economically. But how do you figure out what books to buy? There is after all an almost limitless number of books, and a finite amount of time to read them, and certainly a finite budget to spend on them. Surely it would be wise to sort through them all and make a list of the most beneficial books? Well, one way that I like to do this is my searching appropriate subreddits and forums for recommended books. The social media platform Goodreads also contains user recommended lists for any number of book subjects. Sometimes with a bit of googling you can find blog posts or YouTube videos where content creators share books that were helpful to them. I also find that as I am reading, it is often the case that an author might suggest another book to read on the subject, so I keep a notepad next to my reading chair so I can jot these recommendations down to find later.
Now you may be wondering where to start? Well, lets take my own library as an example. Your library should be unique to you and your own goals, however there will likely be a good deal of commonality with other libraries as there are certain topics and genres that have universal benefit. Your library should also reflect a diverse range of subjects, so you can be a well-rounded reader. According to Justin Brown’s 2018 blog post for IdeaPod, titled “15 incredible benefits from reading every day”, being a well-rounded reader will lead to you being better equipped to handle many of life’s challenges. I have a number of books always at hand, and they are organized by category. One shelf is entirely fiction, including a number of the classics and many science fiction and fantasy. You may think that reading fiction won’t be any help to you professionally, but I beg to differ. Fiction opens your mind to places, cultures, and circumstances. It places you in the shoes of others, and lets you explore different points of view. This experience can be beneficial to us in a lot of ways.
The next bookcase mostly contains books that are directly relevant to my career. I am an Advertising Major, so the first row contains books on Communication Theory and Media Ecology and the second row contains the most recommended books on Advertising. Then, because I am interested the data analytics side of things, we have a row of books about Programming and Databases, and a row about Math and Statistics. The last two rows are Religion.
The third bookcase is where I keep books on subjects that I find personally interesting. Including Art books, Graphic Design, and Typography on the top shelf. The next row of books are all about Economics, and finally a row of books about Politics and American History.
As you can see, there is a great deal of variety in my library. The goal is to become well-rounded in your reading, while still being relevant for your personal career goals. I implore you to begin constructing your own library, one that is inline with your own goals and aspirations, and that will give you a well-rounded base of knowledge. And as you build this library, read from it, every day. This will give you a competitive advantage that can’t be acquired adequately in any other way.
Developers tend to take their keyboards seriously. I have been using classic buckling spring IBM Model M computer keyboards since I first began programming. These are great to type on, and I still love them (kind of feels like typing on a typewriter), but I decided recently that I should upgrade to a compact keyboard that uses modern mechanical switches. This would give me more space on my desk, and allow for some customization. There seems to be an endless sea of options to choose from, though; the first step in my consumer journey is to narrow my options down to a few top brands, so what is a developer to do? I thought a good way to cut through the clutter would be to scrape the r/MechanicalKeyboards subreddit to see what brands are the most talked about currently. So I wrote this Python script that uses Reddit’s API to scrape the subreddit.
import praw
from praw.models import MoreComments
import datetime
import pandas as pd
# Lets use PRAW (a Python wrapper for the Reddit API)
reddit = praw.Reddit(client_id='', client_secret='', user_agent='')
# Scraping the posts
posts = reddit.subreddit('MechanicalKeyboards').hot(limit=None) # Sorted by hottest
posts_dict = {"Title": [], "Post Text": [], "Date":[],
"Score": [], "ID": [],
"Total Comments": [], "Post URL": []
}
comments_dict = {"Title": [], "Comment": [], "Date":[],
"Score": [], "ID": [], "Post URL": []
}
for post in posts:
# Title of each post
posts_dict["Title"].append(post.title)
# Text inside a post
posts_dict["Post Text"].append(post.selftext)
# Date of each post
dt = datetime.date.fromtimestamp(post.created_utc) # Convert UTC to DateTime
posts_dict["Date"].append(dt)
# The score of a post
posts_dict["Score"].append(post.score)
# Unique ID of each post
posts_dict["ID"].append(post.id)
# Total number of comments inside the post
posts_dict["Total Comments"].append(post.num_comments)
# URL of each post
posts_dict["Post URL"].append(post.url)
# Now we need to scrape the comments on the posts
id = post.id
submission = reddit.submission(id)
submission.comments.replace_more(limit=0) # Use replace_more to remove all MoreComments
# Use .list() method to also get the comments of the comments
for comment in submission.comments.list():
# Title of each post
comments_dict["Title"].append(post.title)
# The comment
comments_dict["Comment"].append(comment.body)
# Date of each comment
dt = datetime.date.fromtimestamp(comment.created_utc) # Convert UTC to DateTime
comments_dict["Date"].append(dt)
# The score of a comment
comments_dict["Score"].append(comment.score)
# Unique ID of each post
comments_dict["ID"].append(post.id)
# URL of each post
comments_dict["Post URL"].append(post.url)
# Saving the data in pandas dataframes
allPosts = pd.DataFrame(posts_dict)
allPosts
allComments = pd.DataFrame(comments_dict)
allComments
# Time to output everything to csv files
allPosts.to_csv("MechanicalKeyboards_Posts.csv", index=True)
allComments.to_csv("MechanicalKeyboards_Comments.csv", index=True)
Reddit limits API requests to 1000 posts, so the most current 1000 posts is my sample size. My code outputs two files: the last 1000 posts, and more importantly the comments on those 1000 posts, which ended up being 9042 rows of data. (I posted the files to Kaggle if anyone would like to play with them.) Then I imported my comments dataset into OpenRefine so I could run text filters to find brand names, and I recorded the number of mentions for each brand. Finally, using Tableau, I created a couple of Data Visualization charts to express my findings. Here are the most talked about keyboard brands on r/MechanicalKeyboards currently:
×
×
Update:
I decided to go with the Keychron keyboard that my research found to be the most discussed (and I also added Glorious Panda Switches and HK Gaming PBT Keycaps). Couldn’t be happier; it’s a pleasure to type on.
I was going to use this cool computer cart I bought at a surplus auction as a Raspberry Pi station, but I found myself needing a decent Linux server for a project, so I decided to rethink my plans. Being on a budget, I repurposed a 2012 Mac Mini I bought off eBay by installing Ubuntu on it and fitting it into the cart. I was lucky to find a Quad-Core i7 Mac Mini that was already tricked-out with 16GB RAM, a 1 TB SSD, and an additional 1TB HDD for storage. This makes it a surprisingly swift little machine, despite its age. I had to find the right networking drivers to get the Wi-Fi working, but otherwise it was a pretty painless installation. I’m going to use this for running longer Python scripts, so I don’t have to use up my main computer’s resources. It also means I have a handy computer in my workshop now.
Due to recent progress in the fields of Artificial Intelligence (AI) and Machine Learning, many of the creative tasks within advertising, such as writing ad copy or ad image selection, are increasingly being performed by machine rather than by humans. The rise of AI generated content stands to shake the advertising world, as some professional roles become obsolete. The ways that consumers and brands interact are also rapidly changing as a result. To understand this phenomenon, we must delve into the benefits and pitfalls of AI generated content.
Some advertisers dream of a time when they can enjoy a three-hour work week, utilizing a myriad of AI tools to streamline and automate their workflows to extreme lengths. While this particular scenario isn’t very likely to happen, it’s not hard to understand the desire: This would be quite the leap from the current day-to-day slog that many advertisers find themselves struggling through. In the digital era, marketing departments must churn out dizzying numbers of variations of digital ads for the various social media platforms currently popular, each with slightly different imagery and calls to action. Wouldn’t it be nice to automate this process, and let robots handle the boring bits? Well, that might seem like some manner of science-fiction futurism, but it is actually a possibility today.
AI can be used to completely generate both the advertising copy and the visual imagery for the ad, and when combined with customer profile data, AI can even customize the ad to be more persuasive to that particular viewer. These ads do not exist before the target consumer is ready to view the ad, then in an instant an ad is automatically generated just for that particular viewer. The AI takes into account the viewer’s interests, behaviors, and demographics. The result is a very tailored communication, which will likely be more effective than a traditional one-size-fits-all ad. It also has the benefit of saving the brand a fortune in advertising costs. All the man hours that would have traditionally been spent in crafting the ad, and then creating endless derivatives for every possible platform, was all accomplished without any man hours spent at all (well, besides the initial setup of the AI campaign that is).
Multiple AI technologies can be used in tandem for particularly creative results. Companies like DataGrid and Rosebud.ai have developed AI technology that allows advertisers to utilize completely artificial models that are almost indistinguishable from real, human models. These virtual models can be used as actors in commercials, or as fashion models for brands. You could even showcase fashion products on a generated model that looks identical to the viewer, letting the viewer know how those items would look on them specifically. The possibilities are almost endless. Albert.ai is another AI brand, one that autonomously plans and executes paid search and social media campaigns. Tech company OpenAI (co-founded by Elon Musk) launched the AI tool “GPT-3,” which can write copy so well that it’s hard to tell that the text wasn’t written by an actual human. Using tools like these, brands can save advertising costs, allowing smaller brands the ability to make advertisements that rival the quality of larger brands. They will also be able to experiment with more creative advertising, since the cost to experiment will be much lower than using traditional methods.
However, the technology isn’t all AI generated roses. For example, according to Google’s Search Advocate John Mueller, content automatically generated with AI writing tools is considered spam and against webmaster guidelines. It is possible platforms will begin banning AI generated content in the future, which would certainly dampen the technology’s potential. As of now though, no ban exists for this emerging technology, and platforms like Google are unable to detect if ads were AI generated or human created. Another concern is that AI generation tools might lead to a stall in the advertising job market, as many traditional roles are replaced with AI counterparts. However, it is also possible that freeing advertisers from the more tedious aspects of ad creation will have a positive effect, allowing them to spend more time and resources on more creative pursuits. This could lead to higher quality advertising for consumers, and more high-level positions for prospective advertisers. A more pressing fear is that AI generated content might lead to empty, uncreative, repetitive advertising. This could further crowd an already crowded market, and could erode brand trust with consumers, if the technology is used to generate low-quality content.
Despite these potential pitfalls though, the future of AI generated content is going to be too lucrative to ignore. Advertisers that learn how to put these new tools to work for them will enjoy an advantage over brands who aren’t able to capitalize on the power of generated content. And as this technology matures, that will only increasingly be the case. Even as it stands now, if some parts of this paper were AI generated using the tools currently available, would you be able to tell?