Skip to content
Kaustubh Patange edited this page Sep 9, 2021 · 25 revisions

FAQs

?> Here are answers to some common questions you might have. If you don't find what you are looking for ask me through Contact form.

Table of contents


Q. Why PC application is a single source of truth?

What does a single source of truth mean? Well, if you say without desktop application there will be no establishment of licensing or connection to the online database i.e synchronization between devices. Why so? It is because of the same fact that there can be multiple Android devices connected to only one PC instance.

What you see is XClipper desktop is responsible for sharing database connectivity details to an Android device (through QR code) & this is possible by initially setting the connection from XClipper desktop, the inverse is not possible. This is the reason why the Android application is not activated but the PC application does! It can be only activated by enabling synchronization to an instance of XClipper desktop which is activated.

Also, if you notice most of the major database related operations like removing multiple devices, setting the required database configuration can only be done from a PC application. Having done this through a mobile app won't make any sense!

You can assume that the XClipper desktop is like a dashboard app.

Q. Why do I need to create my firebase database?

TL;DR. The answer is very simple, a lot of time we tend to ignore our clipboard data like what we copy or save. Sometimes we save private data (like password, bank details, card numbers, etc.) to the clipboard without knowing & these clipboard manager applications save them. Also, if any type of synchronization is enabled they will upload these data to their servers.

No matter what they say that "they don't sell or spy your data" we can't confirm it. Now imagine you accidentally leak your Gmail account password through clipboard and that triggers such application to save it to their online database, they can then do whatever they want without you being aware of! Obviously, nobody wants any third party company to know their password.

Since firebase (which is a Google product) offers free online storage for everyone, why not use it? You can then control your data and XClipper will provide a bridge between your clipboard data and this database.

Q. Why not using Firestore instead of Real-time database?

I get these questions a lot but people need to understand that there are differences between these two databases and none of them is an old technology otherwise Google would've just deprecate it (just like they did to Picasso 😢).

Even though Firestore is a great choice to save data into documents it's not fit for saving clipboard data. Why? Well here is the thing Firestore has certain quota limitations for the free plan. Since they have a limit of read/write it is not fit for clipboard activity.

Imagine how many times you copy something to your clipboard while working on a PC or on a mobile device and if you happen to be a programmer CTRL + C & CTRL + V is your to-go thing. For such a case limitation on read/write is not something anyone wanted.

This is the main reason I moved to a real-time database!

Q. Why does XClipper does not synchronize files to the device?

The answer is pretty straight forward, you can't store files & images onto the clipboard of an Android device. Just think about it, all Android support is only storing text-related data on the clipboard, unlike a desktop. Even if you select the Copy Image button from the Android chrome browser it will set the clipboard as the link of the image, not the actual image bytes.

How can we send and store something which is not defined by Android OS itself? Also, take an example of copying multiple files in a file manager app. It's still irrelevant because the functionality is app-specific. These file managers store the location of these copied files to their buffers & during pasting they just duplicate the files to that location.

What I'm trying to say is all Android clipboard does store text-related data, there can never be a binary data (eg: In Desktop you can store a binary data by pressing PRTSC button).

Q. Why the website isn't hosted on a custom domain?

When we create apps or products we usually don't know if they are going to reach a large amount of audience & if they don't we lose money. This doesn't mean I didn't give my 100% while working on this project (I did), but sometimes things don't work out. Surely we shouldn't get demotivated & continue thinking & building new projects.

That's why when my product will reach to many users I'll buy a separate domain from the money I made.

If this is something keeping you from not buying any paid plan or reflecting a feeling like I'm not enough serious about this (which I'm not), that's just wrong Github sub domains are much secure for carrying out payments. Besides they get don't carried out on Github, PayPal's Checkout API does work like magic.

Q. Last x actions didn't complete. What to do?

So every event you perform through XClipper is a CRUD for Firebase. If like such there are multiple events chaining one to another, XClipper might forget which events are next (& data associated with). To achieve a solution to this problem there are stacks made for Add, Remove & Update events.

XClipper keeps the record of this stack & their success time (if the event has succeeded). For some cases, the stack goes on increasing without poping previous events, why? Because they are not completed due to various reasons. In such case, you should try the following solutions,

  • Check if your internet is active.
  • Check if your Firebase database is valid & visible (visit firebase.google.com).
  • Check the firebase details & credentials are valid especially the token expiry date from %appdata%\XClipper.
  • Always check the latest log XClipper writes to from %appdata%\XClipper\logs.
  • If any of the above conditions fail to solve your problem. Create an issue & attach your log file.

Q. Can we sync data between multiple Android devices?

If you have this question perhaps you still have a doubt on how XClipper works! As said desktop XClipper application is a single source of truth with which you can add multiple Android devices. This means PC application is a hub for all these devices & internally they act as a chain of information transfer.

In short, you can! All you've to do is follow the how-to synchronization guide from here & add another device to the database. You are good to go :)

Q. Why features are not unlimited for premium users?

This is one of the common question everyone must have (it's not wrong to have). Basically if I'm paying for certain software I want unlimited number of x things. But let me tell you the reason, the thing is you don't actually need it! How? it is because you forgot that clipboard is always a temporary storage of data. When I was testing the application using internal testers it came out that no one were pasting clip from 100th index. At max, they were going over 50 (that too in extreme cases) because a human brain cannot remember all of it! Yes it's true we use Ctrl + C shortcut more than any other shortcut, it's obvious we don't remember all of the copied data.

Also XClipper is smart enough to sort the data according to the most used clip (descending) hence as per my research this restrictions are made. If I get enough request to increase it as per your use-case I'll consider improving it.

But why not keep it unlimited? Like I said we don't need that much! Also, keeping it unlimited will cause unnecessary delays for XClipper to process it which will cause the functionality to run slow.

Q. Why is the website hosted on Github pages?

There is nothing wrong hosting website on Github pages. Some people even think that I'm not serious about this project that I should buy a domain and host it there. At some extent you are correct, but the whole point of this project is to create a free and open source application for the users.

See, when I was developing this application I never thought that I would commercialize it & will actually sell some license copies for full version. I created this application because it was fun & there are some features which I want but can't find them in similar applications. Seeing the project being evolved everyday for quite a long time it felt necessary to charge some small amount to really show my hardwork behind this project & also to respect the developer in some sense. That's why I made the application open-source, everything including from app to website is open-sourced on Github where users can see me working on new features, fixing bugs & also can contribute if they want.

Remember, my product is Android & Windows application not the website. Having said this, at some point when the application users will grow, I'll move the website to a separate domain but kindly don't think that I'm not serious about this project. If that would really be the case then I would not have created it in the first place.

Q. Why to encrypt database?

When you create a new database by following Data Synchronization guide you sort of make it public & when I say public it means anyone with the credentials or even the database endpoint can easily read or modify your data.

Example:

  • From the guide we have our test endpoint https://test-project-9e017.firebaseio.com/.
  • Now just append users.json at the end so it becomes https://test-project-9e017.firebaseio.com/users.json.
  • Open this url in the browser. All your data is visible to user for reading or to make changes.

Note: The endpoint in this example is a test url & will not work. Try it with with the one you created.

This could be risky in terms of data privacy so we must secure it.

There are many ways you can secure this data, mainly by encryption or to put it behind Google authentication where by logging in with certain gmail will grant access to the data. Read more about the process here.

Q. Why the data synchronization setup process is so long? Why don't use Google Drive instead?

The problem with the Google drive or any other similar cloud storage is that. The data stored there is linear & can be only modified altogether. If there is a file I wan't to modify (patch) I've to re-upload the whole file with new changes which is not suitable for clipboard activity as we want the synchronization feature to work quickly & to consume less bandwidth. Firebase on the other hand is good when it comes to deal with such data & also it's free for everyone to an end where you can create as many as project you want.

What I also wanted is the data transparency. It's same like if I hosted a database myself for you to connect then how are you so sure that I'm not selling your data? If you watched the video for the Data synchronization guide you've seen that when we add a add/edit/delete a data all the changes are visible to you which is what I'm & you should care about i.e data privacy. Only you should be able to access these data &are able to make changes. So to get that security you need to follow these steps but I'm telling you it's worth to give a try.

Q. Will you ever support Mac, Linux or IOS platform?

To understand the problem you need to understand how these applications are made. If you have a little bit of development experience/knowledge you'll notice both these apps (Windows & Android) are developed using the platform's native technology for eg: Android has Kotlin & Windows has DotNet. Due to this limitation I cannot share any existing code between other platforms because they don't understand or can't run this technology. So in a sense I'll need to rewrite these application from ground up to support any platform & these will take years. Since my primary work machine is Windows & Android I can support them but for other platforms they are currently out of scope unless anyone wants to contribute and help.

Before you say anything I know there are many cross platform solutions like React/Flutter for Android & Electron, Tauri, etc. for Windows the reason why I don't chose them is because performance. See these cross platform technologies have a perception filter that they are great & can run anywhere, true about later but not false being "great". These technologies tend to have performance issues & will use way much more RAM than needed which will eventually suck up your battery (well that's not good). Also, by using native technology I can use new frameworks or APIs the team have built for their specific platform! To get this feature on cross platform solutions might take more time you can imagine as they need to align their APIs with other platforms & since other platforms have different working behavior it might become a pain in the ass to implement for the team. That's the reason why I chose native is because great performance, less application size, very less memory/battery consumption & lot of battle tested APIs to use.

Purchase FAQs

Q. Payment completed but premium does not unlock?

This could happen when your internet connection is slow or there is a problem with my server. Read this guide for solution!

Q. Will this license works on all my machines?

Unfortunately no! It will work on only that machine whose Unique Id you've provided. In case, if you changed your CPU or reinstalled Windows which will result in change of Unique Id, you can migrate your previous license by following these steps.

Remember, you can buy a license for one PC & can connect multiple Android devices since they don't require any license to work.

Q. Not able to pay or having problems with purchase.

Currently I accept payments only on PayPal & that to only from the website. The actual payment process is carried & verified on separate server (only a part of UI is shown in the website).

In case of any problem you should contact me through the website's contact form or directly send a mail over xclipper.help@gmail.com.