My First Programming Project: The Tarot App
atombabble Code and Eng DK30 Fall 2023 3 2
Description
The Tarot App aims to supply users with readings as well as a deciphering of cards pulled from a physical deck.
I dream of this returning a sort of ‘Tarot verbatim’ assessment of the cards, where users can give certain information and get hyper detailed explanations of the cards back. However, for DK30 I want a decent first version.
As such, the primary objective of this project is simply to program more. The secondary objective is to end up with something I am confident enough in to post publicly on GitHub.
Recent Updates
Final Update!: I am very pleased with the first draft of the Tarot App. This is the first python project I have ever written completely on my own, and I am floored. Everything I wanted out of this project I got. I have a much clearer idea of where I want to take this app and am genuinely enjoying the work. Not only did I get the first version finished, but I also took a wild detour and decided to learn SQL (I realized I could have a bunch of dictionaries, or I could try out a database). Since I am a self-taught programmer I know I am missing a lot of foundational knowledge (folder directory organization, why my .exe doesn’t have images, if I should use a database or not etc.), but I am still quite pleased with this project and my progress!
That being said here is a quick breakdown/review of my project:
Objectives Complete:
- write my first project
- program more in general
- create something reasonably well executed enough to commit to git (ie write something that doesn’t completely embarrass me, though idk is it embarrassing to write a tarot card app in the tech world? XD )
- find gaps in my knowledge
- push to gitHub (here https://github.com/bugSlayer88/FoolsJourney if anyone wants to see or hire me for baby programmer jobs)
Bonus Objectives:
- work on my writing and tarot reading skills for the descriptions
- learn about UI (boy howdy did I think UI was going to be simple… o.o)
- learn SQL lol
- discover I want to take this much further (and that I love programming I had so much fun writing this)
- chance to reread some favorite tarot literature
Objectives I missed:
- build a single window to work in
- write meanings for each card position in the reading (past, present, obstacle etc - this is when instead of several dictionaries I think a database would be better. I also think I might want to look into language models for this.)
- implement the ‘Get Summary’ button for each reading
Shoutout to Arachezy as my awesome accountabilibuddy, and my new, inspiring friend sd(staydynamic).
Below are a few quick screen-gifs of what it looks like:
Okay so - I just got (Udemy) certified in SQL lol now I can move forward with this project… XD
Quick update!: I am going through and adding error warnings, and tying up all loose ends. I also found a flaw in the foundational method which creates the deck D: So I am also dealing with that! I rewrote my Deck class (I thought I was making it simpler and in turn the program was noticeably faster but then I discovered a slight bug so I now have to revert).
Additionally, I have started taking some SQL classes online because I am realizing I want to have a database of the cards. I may have gotten slightly distracted but overall the project is on track to be completed.
QUick error pop up preview:
I had initially hoped to add all functionality into one big UI window but as I took this on I found out I really do not have the skills to do this in a timely fashion. Instead I have moved on to refining what I do have working. I worked on updating my UI elements focusing on making all windows a little more uniform.
My next steps include - adding more spreads, maybe some more layout design and shifting my focus from ui to deciphering the cards in a more useful way.
Going down the list of what is defined as Week 1 Goals: Capture base functionality - done Collect all pieces needed - done? (This is kind of hard to gage) Add favorite spreads - 85% done Finish base card description dictionary - 85% done
This past week’s work gets a solid A!
Below are a few recordings of where the project currently is.
Get Single Card Reading/ Decipher a Single Card:
Get Three Card Reading/ Decipher Three Cards:
Get a Celtic Cross Reading:
Decipher a Celtic Cross Reading:
There are a few outstanding points I’d like to cover but overall - it’s basically there for a first version.
Also, I must make a point to learn about the Python/Pycharm profiler. There is significant lag after I launch the main window and when UI elements actually show up, you can see this most obviously in the first screen recording posted below.
I promise I know what transparency is and how to export animation from after effects.
Below I decided to mess around with the potential animating of a card flip. I exported a very (very) simple animation of a card flip and attempted to set it up in my app.
Other than the obvious problems - I am currently running into some issues stemming from my lack of understanding of Qt and their documentation. I believe QMovie only plays gifs, for example. Regardless, now that I know I can indeed play a gif I opted to keep things simple for now and use a still image of the back of the card, see second video.
Much better. For now this is a fine substitute to the card flip animation. I think I can call this a mini win as I did indeed learn about QMovie vs QPixmap. Baby programming steps.
Alright - first update; here is a quick screen recording of the very basic functionality of the app I am writing. I feel I have met the simple goal of just writing something that works. That being said, I am definitely getting hung up on the flow of user interactivity. I think I should start to explore other ways to layout this process. I am also kind of bummed that it’s super obvious this is my first programming project lol
Estimated Timeframe
Nov 14th - Dec 20th
Week 1 Goal
Basic First Version:
- Capture base functionality
- Collect all the pieces needed
- Add favorite spreads
- Finish base card description dictionary
Week 2 Goal
UI Week:
- Is PyQt the best GUI Framework?
- Bring in Tkinter?
- Are all these pop-up windows the way to do this?
- Sketch up different options for UI
- What is MVC? Should I do MVC?
Week 3 Goal
Reassessment Week:
- Course correct as needed
Week 4 Goal
Final To Do List:
- Define what needs to happen to get project to a decent state