Practical Project Final Info

Created Sunday 20 March 2022

Project Rubric


For your project, your team will work towards a documented implementation (or proof-of-concept) of any IT/Computer related task or service: The catch is; it must be "self-hosted." — or at least self-hostable.

Self-hosted is the most important part; let's talk about what that means. Roughly, it will likely be the kind of thing that's associated with "hosting" or "the cloud" — but unlike many of those, you do, or you can, have full access to the code running the project on a computer you own or control.

A short list of examples might be:
- A file synchronization service (e.g. Syncthing or Nextcloud as a Dropbox replacement)
- A music server (e.g. Funkwhale or MPD as a Spotify replacement)
- A media server (e.g. Plex or Jellyfin as a Netflix replacement)
- A voice controlled assistant (e.g. Mycroft or json2voice as a Siri/Alexa replacement)
- Self Hosted AI ?( e.g. LLama or Vicuna or Stable Diffusion as a ChatGPT replacement)

You are by no means llmited to the choices here. Below is a large list of possible ideas.
Self-Hosted Ideas and Resources

https://github.com/awesome-selfhosted/awesome-selfhosted
https://www.reddit.com/r/selfhosted/

IMPORTANT: The PRIMARY goal is to work on something that you or someone you know personally might ACTUALLY use regularly.
Resist the very strong urge to treat and write this up as if it were going to be a PRODUCT to sell to someone who isn't you.
(Note, this gives you FREEDOM. After you try it, you might decide it sucks. Thats fine! You can be honest here!)

Docker


The small bit of Linux skill you have learned in this class will probably prove useful — but is mostly no longer absolutely necessary. The generally fantastic tool Docker has *greatly* streamlined the processes involved with installing, testing, and running tools such as those required for this project.

Unfortunately, installing it has gotten a bit needlessly complicated: More info here:

Tech Guides:On Docker


Networking


Perhaps the most unnecessarily difficult thing about "self-hosting" isn't the software itself, but getting it on the internet so that anyone can use it. Setting this up long term is a great goal and I will provide this information; but for purposes of the assignment, using a short term testing system like "ngrok" or "pinggy.io" is sufficient. More info here:

Tech Guides:Exposing your server to the internet


DELIVERABLE

What you will deliver to me is documentation and proof of effort. Text only is sufficient, but I anticipate that many of may find the inclusion of examples and screenshots of your work to be beneficial as well. Either way, please provide your final documentation as a pdf, one per TEAM.

You should provide:

I. An Introduction.

The introduction should state the general area you began looking into. Describe what "thing" you'd like the technology to do generally. Talk about what it actually does, and brainstorm possible advantages and drawbacks of doing it in a "self-hosted" way. Be prepared to comment later on whether your predictions were correct.

Name the technologies you propose to actually use or attempt to use in the beginning, including the "machine" and the "software." There should be AT LEAST 3, and at least 2 of them should be "self-hosted," i.e. the third may either be self-hosted OR "cloud" or "private company," e.g. Spotify/Youtube/Twitter etc

While you need not hit all of these perfectly, the below is a good guide for questions that should be addressed.

What is it?
Why is the thing generally useful or interesting?
What may be the advantages or disadvantages of self-hosting?
Explain what (possible) paid or cloud service this might replace, if applicable.
Provide other possible options and possibilities.
Who are ALL the users (e.g. will there be administrators vs regular users?)
Where will it be hosted, ideally and/or practically?
When will it be active, ideally and/or practically?


II. The process


Document your experiences of getting these things up and running; please definitely include mistakes and problems you encountered along the way as proof of work.

You should strive to

(A good example of something to comment on for external testing is how well it works on a phone as well as on a computer.)

Screenshots may be very helpful here.

Note, extreme pivots are very welcome! If you started somewhere and ended up doing or working on something very different, that is fine! Again, effort is key.

III. Conclusions

How did it go? Compare all of your solutions and give me conclusions. Which were easy to get up and running? Do you think this could possibly replace what most people use now? Do you think, like Linux, perhaps the presence of them might help anyway by providing competition? Are there missing features or changes you would make? What would make them perfect, etc?




Backlinks: FSU Courses:LIS3353