For most recent proposal, go here: https://docs.google.com/document/d/1t4eH7e7wANkSSfCm5pTCcD9JlTdhxVgVbo7ItMz5cTM/edit?usp=sharing
Description: Alien Spoilers is a web app that will manage a user’s Reddit subscriptions to avoid “spoilers” for things like tv shows or live sports events. Say a new episode of Game of Thrones is about to air and you know you won’t be able to watch it until two days later. You can tell Alien Spoilers to automatically unsubscribe you from /r/gameofthrones for the next two days. This way, when normally browsing reddit for the next two days, your front page will not be littered with spoilers. Anyone who uses Reddit and also watches tv is a perfect potential user. Initially, users will be able to set dates / times for when they would like to be unsubscribed from a particular subreddit. Next, simple repeatability would be added to these events upon creation (ie. unsubscribe from /r/gameofthrones every sunday night for two days). The next iteration would involve one-click “subscription” to a schedule for a “season” of events, such as the Formula 1 calendar, where the dates are more spread out and less regular than a weekly television program. These subscription based events will be made visible to other users, allowing other users to take advantage of the events made by other users.
Tech Stack: Django - python based web framework SQLite - DB for users / managing of their subscriptions (plays well with python / django) PRAW - Python Reddit API Wrapper HTML / CSS
Side note: In addition to the above goals for Alien Spoilers in its functions, I would also like to focus on incorporating formal unit-testing into my project, something that I have not done in my previous projects. As a result I have added dedicated time into my proposed schedule for to ensure that I do this. I have given myself ample time to complete these tasks as I would like to make sure that the code that I create is well documented and tested and ensure that I am using best practices as I am learning to use these new (to me) tools.
Timeline*: Weeks 1-2: Basic django framework with user accounts / logins Week 3: Allow users to link their Reddit accounts to their Alien Spoiler account via OAuth Week 4: Allow users to add events to their account corresponding to a time period where they will be unsubscribed from a given subreddit Weeks 5-6: Find a way to have the system check every so often to see if it needs to subscribe / unsubscribe from subreddits for each user and then perform that action Week 7: Allow for repeatable events (ie. tv shows) Weeks 8-9: Add ability to have seasonal events (ie. formula 1 calendar) Weeks 10-11: Allow users to browse the seasonal scheduled events created by other users and add them to their own schedules Week 12-13: Additional “social” features, such as suggestions for subscriptions based on your subreddits and the subscriptions of other users with similar subreddits Weeks 14-15: Bug fixes / catch up time
*Disclaimer: I have basically no experience with django or web frameworks in general (which is why I want to tackle this project) so this timeline may be wildly inaccurate
Some challenges I faced during this project is the problem of how to quantify the audio data in such a way that it is clearly and ascetically visible.
This is a big problem because I found that most songs cause the system to report that it is at 100%. This means that a linear scale would be really boring to look at...
A logarithmic scale would be ideal because of how audio is usually reported, but we want the differential to decrease as we approach the maximum.
What I did in the end was do a logarithmic scale, but instead of trying to find a complex way to reverse it, I just subtracted this value from the max and created a reverse scale this way.
It's a simple solution, but it is very effective; though, I should probably appropriately label everything. :)
The chip that I use for ethernet connecticity is the ENC28J60. It is a pretty dumb chip, and does just some basic filtering of incoming packets and helps take care of a few things with ethernet packet construction, so it doesnt have a TCP/IP stack at all.
There is an arduino compatible library, called EtherCard, that handles all of this, but it is very heavy for this application. It does have a really good basic driver for the chip that I can use though. I decided that I will take that and build a TCP stack on top of it. Since the Neptune device can be assumed to always be on a local network, I wont be needing IP, and it will save me a bunch of space and overhead.
I can also use this in my Bootloader (ENCBoot), which will need TCP to self program over the network.
So, it seems that the total current limit from the digital I/O pins on the Arduino is accepted to be 200mA. While that limits the Arduino to directly power 10 LEDs. I've decided to use MOSFETs to limit the current that is being used by the Arduino.
The LEDs still require power, but that power will most likely be supplied by an external power source. The Analog Discovery board offers a 5V, 50mA voltage source, so I'll probably be hooking two of the LEDs (the red one and the yellow one, for consistency sake) to MOSFETs.
Hopefully, you will still be seeing updates throughout the Winter Break. So, while I will not be able to enjoy your physical presence, I hope those of you who are following Observatory during the Winter Break will grace me with your digital presence.