Need Advice for my first bigger software project

TL;DR (my questions):

  • How can I best get a virtual filesystem to work in Windows, Mac OS and BSD and what are the caveats? (fuse, dokany, OSXfuse)
  • What libraries should I choose for QT with python (Pyside2?) or would you choose a different framework for cross platform?
  • At what point do I need to worry about licensing? (GPLv2 ?)
  • Should I maybe separate it into frontend and backend to avoid the cross platform problems?
  • Any advice in general for ones first big software project?

Disclaimer: I am (obviously) not a software developer. I don’t know what I am doing. I have coded just enough to be dangerous but not enough to know anything :grin:.

Context:

I want to write a program to organize files and information for projects, documentation and research. I am going to use python and need the following:

  • database
  • virtual filesystem
  • user interface

The hard part: I want this to be cross platform (Linux, BSD, Windows, Mac) At the moment I am looking at MySQL, fuse/dokany and qt for the UI.

At the beginning I’ll start with Linux only but I’d like to get this to work across different platforms without too much hassle, this is the reason I need some advice. So the question is: Which software would you use for database, a virtual filesystem and a UI. I also looked at Electron but I am not really sold on that.

Also, I want to make this opensource. At which point do I need to worry about licensing? The initial plan is to make a simple working prototype as a proof of concept. I expect to fail, but this is partly a learning exersize :stuck_out_tongue: In the event that I get something cobbled together that is good enough to convey what I want to achieve I’ll put it on gitlab and start asking for ideas and some probably much needed help.

What I am trying to make is a crossover between a tagging filesystem, a file manager, knowledgebase software with version control and snapshot capability and a few other things. The intention is to be able to organize files and information for my projects and research and to tie together disjointed information sources in the most general sense. (i.e. bookmarks inside files/videos/webpages/datasets, tags for the directory structure, semantic search, …) I would never hope to be able to write such a thing, but there are a lot of awesome open source projects out there. My intend is to tie all the features together that I want/ find useful.

I kind of want this to be easily installable on different platforms, on the other hand I had a really hard time in the past to get stuff to work only between Windows and Linux. So, my other thought was to separate everything into the UI and a server application that only runs on linux in a container. The two problems there are probably performance and that it is not easily installable by the average user.

Sorry for the long post.

How can I best get a virtual filesystem to work in Windows, Mac OS and BSD and what are the caveats?

From personal experience, the hardest part about writing good software is admitting that most of the times, I’m doing stupid shit.

You think you need a virtual file system. Why does your software project require a virtual filesystem? You think you need one - why?

(Hint, you probably don’t.)

What libraries should I choose for QT with python

PyQt5

At what point do I need to worry about licensing?

When you push your code to a public repository.

Should I maybe separate it into frontend and backend to avoid the cross platform problems?

Not enough information to answer this question.

Any advice in general for ones first big software project?

Don’t write big software projects.

Write several smaller software projects with clean interfaces. It helps with maintability as a developer, it improves reliability as a user, and it means your sysadmins are 50% less likely to murder you in your sleep. See: Composability

Which software would you use for database

If I understand what you’re trying to do correctly, you’ll not want to use a relational database. Something like Solr would be much better for indexing and searching if you’re trying to be generic.

Integration into existing desktop platform’s own search might be a better option. The whole point of open source is that you don’t need to duplicate work; integrating into things like KDE Baloo or Gnome Tracker (and whatever the hell other operating systems use) is probably your best bet.

1 Like

Awesome! Thanks for the detailed answer!

Great advice, I’ll keep that in mind.

That would depend on how strong your definition of require is. I would like to give files and other snippets of information tags (i.e. which projects it is part of). The tags are stored with the path in a database and I would like to have a “virtual” directory where all the files (with the tag that I am looking for) appear so that any other program can use the files like they normally would.

Thanks. I’ll take a closer look. Any special reason over Pyside2? I thought Pyside2 is directly supported by the qt developers?

My thought at one point was to have the virtual filesystem and database on linux and then present the virtual filesystems via i.e. samba to the users side. It would save me some time by not having to make everything work on all OSs.

Looks like sound advice. I am curious how this works out for me in reality. With big I rather meant the scope of what I want to do is quite a bit greater than what I have done so far. In the grand scheme of things it probably won’t be big, but I see what you mean by separating into smaller projects. I’ll try to do that.

Thanks, I’ll take a look at Solr for the search part. I just thought about MySQL for storing the tags and paths because there I would only need relatively standard queries.

Okay, I’ll look in that direction. My biggest problem there would be to get this to work in Windows and MacOS. I just assumed it would be quite difficult and as I need a GUI anyway I thought to put the search functionality on there.

Thanks a lot for your time posting!

Make sure you use an ORM for your database.

I would first decide what your MVP is.

“Minimal Viable Product”

Dont over engineer a product. First make the most simplest product that produces results.

1 Like

hmmm, so MySQL is out the window and postgreSQL it is?

Thanks for the advice! That is exactly the plan. The reason I am mentioning more parts than necessary is that I try to avoid to let myself be maneuvered into a dead-end just because I forgot to mention something when asking you guys. I will likely still hit some avoidable problems because of lack of experience.

ORM abstracts the database into a OOP design. It should make it agnostic to use the database.

An example is knex.js and Library.js.

Should be able to create models to represent the data.

Raw SQL scripts is high technical debt.

1 Like

Also might want to look into test driven development.

So… SQLAlchemy for python?

That may work, should make it to the type of database is agnostic.

1 Like

My search history is going to be a mess again searching test driven developement

Okay, the meaning is what I expected :grin: