Alternative(s)?
ab763 opened this issue · comments
First off, nice job on this. I've had it bookmarked since your first Reddit post about it, and I'm a long-time fan of Doctor of Credit as well.
I am _not _ suggesting that anyone switch to it instead, but I did want to briefly check if you had seen https://github.com/ab763/finance-transact ? (Finance-transact is, in turn, a fork of the older https://github.com/everettsouthwick/amazon-auto-reload )
It started as Python code with the same goal as yours before everettsouthwick rewrote it for Node.JS (and I had then subsequently moved it to TypeScript).
I like that you store state and that you've been attempting to resolve hurdles that website operators have put up.
I like our class/file organization/hierarchy/inheritance. I earlier moved our code to use a generic config file loader so we ended up with the config file format https://github.com/ab763/finance-transact/tree/master/config
I had thought it a pretty clean approach, although it might not have worked well for the more ambitious multi-merchant approach you're doing.
Although we started focused on Amazon, like you I also implemented additional merchant(s).
I enjoy the large number of community packages available in npm, although personally I'd prefer to be using a language with stronger type checking than TypeScript.
But my code varied in that I also implemented logging into a number of different financial institutions to check for existing activity before proceeding (Bank of America, Capital One, U.S. Bank, Discover, Barclaycard, and more). As this gave me an existing tool that logged into some of the same financial institutions I needed, I then expanded it to handle another finance function I needed - transferring excess available cash into a central account. I implemented this for Schwab, TD Ameritrade, E*Trade, Merrill Edge, Wealthfront, All America Bank, and a couple of smaller banks. However, that extra code is either commented in the public repo or not committed to that repo, as I didn't think there was an audience for it.
A graphical interface is on my todo list.
I just wrapped up a different project so I'm looking to get back into things, and I just wanted to check if you had seen this other solution, and if you've considered any other programming languages for debbit in the future. Thank you again.
I had not found your project before. I tried searching around so much for existing solutions but could only find projects more than a few years old that were abandoned.
Haha the class/file organization/hierarchy/inheritance of debbit isn't its strongest trait. I just wanted to get a script working for myself and then expanded it into what is is today. I'm good with Python for scripting but I've never built out an application with it before. I've learned a lot while writing debbit, but it's certainly not a proper codebase. Since it's not a large project with lots of people working concurrently I focused more on just getting something out the door that works. I'm certainly more strict about project layouts in my day job.
I think Python's dynamic typing is a downside. I'm wary about using anything with npm though since the ecosystem has many stability issues and revisiting projects years later becomes dependency hell. I'm even concerned about pipenv as the dependency manager for debbit for getting reproducible builds. I'm more trusting of Maven/Gradle with JVM language projects which have treated me well in the past.
If I were to write debbit again I'd spend some time seeing if Kotlin would fit the bill. I'm using Pyinstaller to get cross platform binaries. It works, but there are OS version problems and I had to figure out a couple runtime hacks to get debbit to behave consistently across source and binaries on mac/windows/linux. I've never distributed a desktop JVM application but I'm guessing it's better suited than Python.
I'm really not all that happy with the config file for debbit. I'm betting it's hard for people to get all the line breaks and indentation right for yaml. But json isn't really any better there either due to the comma requirements. Plus discoverability in config files is hard. So I put sane defaults and documented all the config here with the hopes that people can figure it out.
That's pretty impressive you integrated with all those financial institutions. Integrations are such a pain, ESPECIALLY the web scraping ones. I built out an error reporting system that takes screenshots, dumps the dom, saves the stacktrace, and uses a code coverage library to show which lines/branches were taken. Still though, even with incessant pleading people still report bugs without including those files. Probably in a future update I'll put an opt-in config option to auto-send error reports to me. In lieu of the financial institution integration, the state storage and scheduler keeps debbit running predictably. Worst case scenario a few more cents are spent than necessary. I chose to prioritize maintainability since this is just a side project.
Thanks. I agree with you on most of it. 👍
I'm wary about using anything with npm though since the ecosystem has many stability issues and revisiting projects years later becomes dependency hell.
I think those issues have been somewhat overblown by others, especially as you say, this is a hobby project. I don't know how much you've worked with the npm ecosystem, my apologies. There have been a couple high-profile cases of authors taking down their work and therefore breaking other high-profile software. Projects using npm can specify particular version(s) of dependencies to utilize as well. Of course, over time those versions may have security issues, etc. However, I'd imagine most of these issues could affect other languages' ecosystems as well?
Ha, I just realized that you also do displayplacer. What a small world. I've previously submitted code for displayplacer under a different GitHub ID haha.
I agree that both YAML and JSON have downsides. Perhaps TOML? 😊 (Regardless, I had previously seen your config documentation as thought it excellent.) Or an even better solution would be a configuration GUI.
I haven't done a project before using the Electron cross-platform desktop app or Angular frameworks, but I am thinking to try them next for this.
I had been focused more on my use cases around a number of transactions, but typically only one transaction per financial account, as opposed to many transactions for a single financial account. Do you (/ your users?) leave debbit running continually?
Even once I'd done those integrations, the companies change their sites over time so the integrations can break. Your extensive logging and offer to add integrations for others is impressive as well.