diff --git a/README.md b/README.md index 1518e1a..9ad927f 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,42 @@ -# FreeCompetitors +# Free Competitors -A search tool for free software replacements. +![](screen_shot_01.png) -# CONTRIBUTE! +**Free Competitors** - is a server software to make websites that help users find [Free Software](https://gnu.org) replacements to proprietary software. And search Free Software alternatives to other Free Software. -## How to add new software: +# Name -In the [apps](apps) folder there are a bunch of json files for software. Here is an example: +FSF likes the word "Replacement" more then "Alternative" since "Alternative" means that both are equally good. And non-free software is not good. But in my opinion both "Alternative" and "Replacement" tells the user that Non-Free Software is the default option. While I want to shatter this idea a bit by using "Competitor". I think it's the best I can do yet. But perhaps there is a better word. Please tell me if you know one. -- `names` what the software is called. -- `comment` about the software. -- `links` to learn more about the software e.g. `git` (where the source code can be found if it it's available), `website` (software's website if it exists) and `wikipedia` if there is some wiki. At least one of these needs to be there. -- `icon` a **link** to the icon of the software. For now no images will be stored in the repository so it takes up less space. -- `platforms` where the software can be accessed from e.g. Linux, Windows, Android, iOS, Mac. For websites just write `Web`. -- `interface` used to access the software, e.g. GTK, HTML5, JavaScript, Touch -- `languages` the main programming languages 40% or above that the software is made out of. -- `networks_read` if the software uses something like a [network](https://en.wikipedia.org/wiki/Social_networking_service). This means the software is able to view content on that network. -- `networks_write` if the software uses something like a [network](https://en.wikipedia.org/wiki/Social_networking_service). This means the software is able to do stuff like publish or write comments on the network. -- `formats_write` if the software can write files to your system what formats does it support. -- `generic_name` names that can be used to describe what the software is. -- `issues` if the software has privacy related issues. +# License -```json -{"names":["YouTube", - "You Tube", - "youtube.com", - "youtu.be"], - "comment":"A platform for uploading and watching videos.", - "links":{"website":"https://youtube.com", - "wikipedia":"https://en.wikipedia.org/wiki/YouTube", - "icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/YouTube_full-color_icon_%282017%29.svg/120px-YouTube_full-color_icon_%282017%29.svg.png"}, - "platforms":["Android", "iOS","Web"], - "networks_read":["youtube"], - "networks_write":["youtube"], - "formats_read":[], - "formats_write":[], - "generic_name":["Video Player", "YouTube Client", "Music Player", "Publication"], - "issues":["Surveillance", "Non-Free Software", "Non-Free JavaScript", "DRM"]} -``` +This software is under the terms of AGPLv3 or any later version. So image GPLv3 or later with one more requirement. You need to publish the source code of the website, if you are serving it. It has a handy button for source if you change nothing. If you change something, please upload your own version to some place and link to your source instead. Please see LICENSE file for more info. -## Create a `port.json` -When modifying the code, in order to test changes you need to rerun and put in the port number over and over. To solve this you can create a file called `port.json`: -```json -{ - "port": "8080" -} -``` -Now it will stop asking for port numbers and use the port you put in the json file. +# Installation + +The software is built on Python. So you will need to have python3 installed. Then you run the software by doing: + +`python3 server.py` + +It will prompt you to select a `PORT`. To which on your end to bind the server. For now it binds it to your localhost. You can edit that part. We are using a standard SimpleHTTPServer python module for it. + +# How it works + +In [apps](apps) folder there are a bunch of .json files with different data about various software. When the user types in the name of the software, it looks for a closest match of the name. So the user can slightly misspell the name and it will give him the software. Like somebody can type "What's Up" and get "WhatsApp". + +Next, based on the other data, like features, file formats and supported networks it finds from the list, software that have some or all of the features. And sorts them based on how similar the feature set is. + +The algorithm avoids recommending Non-Free Software. So if you type "WhatsApp" it will recommend you "Element" and other Free Software messengers. But if you write "Element" it will recommend you only Free Software messengers. "WhatsApp" will be excluded. It is done by referencing the "licenses" data-point. + +It is quite important to fill as much as possible data about Non-Free Software too. Even though the data will never be shown to the user. Because we want to compare the features and the formats to find Competitors. And later other functions may be added that use such a data. + +# Help this project! + +To help this project you may do one of three things: + + - **Host it:** Open a website with this server software and make it be available to the public. Please tell us if you do it, we will include you in here. + - **Add software:** Add more software into the database. See the files in [apps](apps) for it. Please study multiple files before making new ones. And please check them by running the server and going to `localhost:[port]` in your browser. Sometimes you may make syntax errors in the json. It will fail to load the file. If there will be an error like this, it will output the filename and the line where the error occurred into the terminal. + - **Contribute to Server Software:** We need things like CSS work, better looks. One requirement: it has to not have any JavaScript what so ever. But as long as it HTML5 and CSS it's fine. Also please look at the algorithms themselves. They may need a bit of work. -# TO DO -- [x] Add interfaces and language parameters in json -- [x] Documentation parameter in json -- [ ] Make creating json files easier. Somehow...... -## New software ideas -- [ ] Gitea -- [ ] Emacs -- [ ] Blender -- [ ] Krita -- [ ] PixelFeed -- [ ] Bibliogram -- [ ] Nitter -- [ ] proxitok -- [ ] librarian -- [ ] fastlbry-terminal -- [ ] lyberry-qt -- [ ] palemoon -- [ ] icecat -## Nice to have -- [ ] Make a way on the website editor to submit json files diff --git a/modules/__pycache__/render.cpython-38.pyc b/modules/__pycache__/render.cpython-38.pyc index 0b0bcbd..2770097 100644 Binary files a/modules/__pycache__/render.cpython-38.pyc and b/modules/__pycache__/render.cpython-38.pyc differ diff --git a/modules/render.py b/modules/render.py index e764475..253ffa5 100644 --- a/modules/render.py +++ b/modules/render.py @@ -12,6 +12,11 @@ def html(page, json): # This function adds a rendering of the json into the page + # TODO: Add a more complex algorithm of checking if software is + # free or not. There are plenty of semi-free software like + # Unreal Engine. They have licenses but they do not give the users + # the four essential freedoms. + free = False if "licenses" in json and json["licenses"]: free = True @@ -109,7 +114,7 @@ def suggestions(page, json): # This function will render suggestions - page = page + "

Replacements:



" + page = page + "

Free Competitors:



" found = search.suggest(json) diff --git a/screen_shot_01.png b/screen_shot_01.png new file mode 100644 index 0000000..d46777f Binary files /dev/null and b/screen_shot_01.png differ