Liczenie ilości użytkowników programu

Liczenie ilości użytkowników programu
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:496
0

Hey,
Napisałem program, udostępniłem go publicznie - jest fajnie... Słoneczko świeci, ptaszki ćwierkają... Pytanie - kto i czy w ogóle ktoś używa mojego programu?
W jaki sposób dowiedzieć się o bazie użytkowników swojego programu? Nie chodzi o żadne szczegóły - po prostu ile osób.

Wydaje mi się, że najprościej pozwolić użytkownikowi na poinformowanie o tym. Jak się to realizuje?
Wymyśliłem, że szybkim i prostym rozwiązaniem przy użyciu Delphi byłoby co następuje:

  • Użytkownik pobiera mój program i instaluje go,
  • Instalator pobiera godzinę i datę instalacji i zapisuje ją do pliku konfiguracyjnego INI na moim serwerze,
  • Mój serwer (prywatna strona internetowa) używa SSL (jeśli ma to znaczenie) - Jak zapisać te dane w tym pliku?

Używany do tego protokołu HTTP? A może FTP?
Chodzi o jak najprostszą implementację - dopisanie danych do pliku INI.

Proszę o jakieś podpowiedzi...

Ps: Tak wiem, prywatność - dane całkowicie anonimowe + za zgodą użytkownika!


edytowany 1x, ostatnio: Riddle
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:minuta
  • Lokalizacja:Gorlice
6

Nie wiem czy dobrze rozumiem ale może zrób instalator który na końcu będzie miał checkbox Poinformuj autora... i jeżeli jest zaznaczony po prostu w przeglądarce otwiera się strona https://przyklad.pl/dodajuzytkowanika?imie=imie&datainstalacji=07-12-2022 oczywiście adres i parametry przykładowe (jak to nie dane wrażliwe to może być taki zwykły GET) a resztę już wykonuje się po stronie serwera nie wiem PHP albo nawet jakiś node.js zależy w czym zrobisz lub masz zrobioną stronę. O imię też możesz pytać w instalatorze albo po prostu formularz do wypełnienia na stronie.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
Pepe
hmm, niezły pomysł. Na stronie mam PHP, więc luz... ale to jest opcja, gdy użytkownik "zobaczy", że coś się dzieje - a bardziej chce to zrobić bezinwazyjnie, bez interakcji z użytkownikiem (ale z opcją w instalatorze).
KA
Bezinwazyjnie to możesz tak samo na taki adres wysłać zapytanie (obojętne GET czy POST to zależy jak zrobisz stronę) np. za pomocą Indy ale jednak nie polecam tego typu praktyk wszystko powinno odbywać się jawnie a takie działania tylko mogą zniechęcić użytkowników.
Miang
kiedyś na takich bezinwazyjnych były firewalle
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około godziny
  • Lokalizacja:Tuchów
  • Postów:12175
6
Pepe napisał(a):

W jaki sposób dowiedzieć się o bazie użytkowników swojego programu? Nie chodzi o żadne szczegóły - po prostu ile osób.

Zacznij od zliczania samych pobrań instalatora, zliczania po stronie serwera.

Wydaje mi się, że najprościej pozwolić użytkownikowi na poinformowanie o tym. Jak się to realizuje?

Po co mu pozwalać? Jeśli nie kradniesz wrażliwych informacji z jego komputera, to możesz w tle takie informacje przesłać, a żeby to było uczciwe, opisać sprawę w licencji widocznej tuż przed właściwym procesem instalacji (jakie dokładnie informacje zostaną przesłane), którą użytkownik musi zaakceptować, aby pchnąć kreator dalej. Możesz też zrobić inaczej, czyli dodać (domyślnie zaznaczony) zwykły checkbox z informacją o tym, że autor otrzyma cynk o danej instalacji, wyłącznie na potrzeby prowadzenia statystyk użytkowania.

Przy czym skup się na tym, aby użytkownik widział jak na dłoni, że instalator powiadomi Cię o danej instalacji. Możesz dać checkbox, możesz go nie dawać i wymuszać przesłanie danych do Twojego serwera. Masz prawo prowadzić statystyki i telemetrię, ale użytkownik ma też prawo o wszystkim wiedzieć, zanim zainstaluje program. Dlatego też zrób czytelny interfejs, tak aby wszystkie informacje były widoczne i opcjonalnie łatwe do zmiany, tak aby użytkownik czuł, że jest traktowany uczciwie i z szacunkiem.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:496
0

Telemetria to słowo, które powoduje strach i zniechęcenie.
Ja chcę tylko wiedzieć, czy czasem nie tracę niepotrzebnie czasu... chyba każdy z nas chciałby wiedzieć, czy dany program pobierają tylko boty, czy może prawdziwi ludzie - którzy naprawdę używają naszego softu.

Zliczanie pobrań instalatora nie ma sensu, ponieważ nie jest on dostępny z jednego źródła.
Zatem najlepszą opcją będzie użycie instalatora (mój jest napisany i tak w Delphi) i wysłanie do skryptu php, który po odebraniu parametrów zapisze dane do pliku...

Sprawdzę INDY i POST...


edytowany 1x, ostatnio: Pepe
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
3

@Pepe:

Po pierwsze, nie myśl w kategoriach PLIKU.
Wywołanie http nie ma nic do pliku, nawet pozornie udostępniony skrypt serwera www (funkcjonalność) nie musi mieć charakteru pliku.
Musisz zmienić sposób myślenia o tych rzeczach, przy złym myśleniu niemożliwe jest dobre wykonanie (chyba że przypadkowo)

Pepe napisał(a):

Używany do tego protokołu HTTP? A może FTP?
Chodzi o jak najprostszą implementację - dopisanie danych do pliku INI.

INI na serwerze ? Na pewno to dobrze przemyślałeś? Masz na to jakieś uzasadnienie ?
FTP dla tego co przedstawiasz top bez sensu
Za pośrednictwiem HTTP(S) wywołanie endpointu (jakkolwiek by to dumnie brzmiało - tutaj bardzo prosty endpouint) i WPIS DO BAZY na serwerze.

Język w jakim działasz na serwerze - obojętny. Poczynając od PHP na biedahostingach, każdy.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
Pepe
Tak, racja. INI dlatego, że mi wygodnie (gdybym czasem potrzebował te dane pobrać i wyświetlić gdzieś w programie) - ale ogólnie to nie ma znaczenia. Najprościej rzeczywiście będzie odpalić stronę php z parametrami, które skrypt który napiszę obsłuży... pozostaje jakoś wysłać te dane - ale to wydaje się być proste. idHTTP i metoda post - będę próbował.
DR
Wywołanie http nie ma nic do pliku - ktoś chyba na studiach spał
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:13 dni
3

Ja do tych celów tworzę .msi który przy odpaleniu dopiero pobiera z serwera najnowszą wersje i ją instaluje, przy okazji zapisując na serwerze informacje które to .msi przekazało do pobrania.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Pepe
tak, to dobry pomysł - ale czy bezpieczny? Skąd użytkownik ma wiedzieć co pobierze Twój instalator? Lokalny instalator może przynajmniej sprawdzić...
_13th_Dragon
Na pierwszym kroku - "Pobierz najnowszą wersje i zainstaluj <Dalej>" Poza tym MS tak robi to czemu ty nie możesz?
Pepe
Myślę, że użytkownik może patrzeć podejrzliwie na takie działanie instalatora, który wydany jest przez jakiegoś "randoma". Microsoft ma jednak ugruntowaną opinię zaufanej firmy. Ale poza tym, świetny pomysł.
PW
  • Rejestracja:ponad 9 lat
  • Ostatnio:5 miesięcy
  • Postów:130
6

Do prowadzenia takiej statystyki aktywności możesz prosty mechanizm sprawdzania czy jest nowa wersja twojego programu. Tym sposobem wilk syty i owca cała... użytkownik zawsze ma informację o najnowszej wersji Twojego programu Ty zaś masz informację ile osób używa twojego softu.

Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:496
0

Przygotowałem testowy skrypt /telemetry.php

Tutaj pobieram wartość parametru "user"

Kopiuj
	if (isset($_GET['user'])) {
		$PHP_TELEMETRY_USER_NAME = $_GET['user'];
	} else {
		$PHP_TELEMETRY_USER_NAME = "-1";
	}

Wpisując w przeglądarce zapytanie: https://pawelporwisz.pl/telemetry.php?user=Lala
uzyskuję wpis w pliku na serwerze, np:
[Lala]
User=Lala
Date=Środa, 7 grudnia 2022 (17:08:57)

Wartość "Lala" jest poprawnie przekazywana do funkcji zapisującej plik

Teraz aplikacja w Delphi z idHTTP (Indy):

Kopiuj
var
   SL_LIST  : TStringList;
begin
   SL_LIST := TStringList.Create;
   try
      IdOpenSSLSetLibPath(ExcludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)));

      SL_LIST.Add('user=' + 'TEST'); // to można usunąć
      try
         result := Form1.IdHTTP.Post('https://pawelporwisz.pl/telemetry.php', SL_LIST);
         result := Form1.IdHTTP.Post('https://pawelporwisz.pl/telemetry.php?user=BYLE_CO', SL_LIST); // to dziala...

         Form1.Memo1.Lines.Add(Result); // tutaj dostaje wynik
      except
         Form1.Memo1.Lines.Add( SysErrorMessage(GetLastError));
      end;
   finally
      SL_LIST.Free;
   end;
end;

Po pierwsze, działa to tylko jak używam bibliotek SSL (libeay32.dll, ssleay32.dll) - wolę bez SSL, bo i po co mi to...
Nie jestem pewien, ale jak usunę https z adresu, to chyba też działa, tylko musze dać linię: Form1.IdHTTP.HandleRedirects := True;
Program działa - zapisuje dane do pliku - ale nie działa obsługa parametru -> user jest pusty (czyli zmienna $PHP_TELEMETRY_USER_NAME przyjmuje -1)!
Dlaczego?

Czyli przeglądarka prawidłowo interpretuje zapytanie, a program nie - dlaczego - coś trzeba przekazać dodatkowo?

EDIT:
result := Form1.IdHTTP.Post('https://pawelporwisz.pl/telemetry.php?user=Test', SL_LIST);
Taki zapis działa - wystarczy przekazać pustą listę, a parametry wpisać w adresie...


edytowany 4x, ostatnio: Pepe
ZD
Ale dlaczego plik a nie baza, bo zapomniałem? M.in. jak będziesz mial powodzenie, plik nie jest współbieżny, część wpisów utraci
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 8 godzin
2
     result := Form1.IdHTTP.Post('https://pawelporwisz.pl/telemetry.php?user=BYLE_CO', SL_LIST); // to dziala...

zamiast metody POST możesz użyć prostszej w użyciu metody GET. Tym samym SL_LIST jest zbędne

Kopiuj
 result := Form1.IdHTTP.get('https://pawelporwisz.pl/telemetry.php?user=BYLE_CO');

Zapis danych do pliku jest słabym rozwiązaniem ponieważ masz wtedy problem z wielodostępem i coś może być albo nadpisane albo nie zapisane

edytowany 1x, ostatnio: grzegorz_so
Pepe
Sprawdzę. Ruch na mojej stronie jest znikomy... program pobiera mała ilość osób, więc myślę, że nie będzie problemu z jednoczesnym dostępem. Mam nadzieję, że phpowe flock($file, LOCK_EX); i flock($file, LOCK_UN); da radę...
GS
Racja. To nie jest transakcyjny system bankowy w którym każda transakcja MUSI być zapisana
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:496
0

Dziękuję wszystkim za pomoc!
@kAzek: Twoja metoda wygrywa :)

W ostateczności do obsługi protokołu HTTP użyłem komponentów:

  • NetHTTPClient
  • NetHTTPRequest

Dane zapisuje sobie do pliku, który ma strukturę INI (dzięki temu, jak pobiorę ten plik do bardzo łatwo mi parsować wyniki, ewentualnie w przyszłości).
Sekcją jest Data i Godzina
Plik zawiera informacje typu:

[07.12.2022 19:14:28]
User=Pawel
Date=Środa, 7 grudnia 2022 (19:14:30)
IP=
Host=
Port=13401
UserAgent=

Użyłem metody Get - dzięki @grzegorz_so
Lista w metodzie Post służy do określenia pliku, a ja tego nie potrzebuję, w moim trywialnym przypadku.
Mimo adresu https, program działa i nie wymaga bibliotek SSL. Czyli wydaje się, że wszystko działa.
Jeszcze potestuję i jestem gotowy do implementacji (jeśli się na nią zdecyduję).


_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:13 dni
2
Pepe napisał(a):

@kAzek: Twoja metoda wygrywa :)

To było wiadomo od początku.

[07.12.2022 19:14:28]
User=Pawel
Date=Środa, 7 grudnia 2022 (19:14:30)
IP=
Host=
Port=13401
UserAgent=

Czy rozumiesz że jak dwóch klientów jednocześnie pobiorą twój program to masz szansę cały plik INI stracić bo będzie tam kaszana?
Po kiego ci podwójna data w pliku?
Już 3-osoby poradziło ci użyć bazy zamiast pliku, myślisz że są to głupie nieprzemyślane rady nie poparte doświadczeniem?
UserAgent zawsze będzie znany, aczkolwiek nie koniecznie musi to być zgodne z prawdą.
Po kiego ci IP i Host razem? (Czasami Host nie jest zdefiniowany, zaś wg IP dostaniesz host w prosty sposób, aczkolwiek pamiętaj o proxy oraz maskardzie)
Dodaj jeszcze pole ProgramCode i używaj tą bazę dla wszystkich swoich produktów.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
Pepe
To co podałem to przykład na teraz. Sposób zapisu i jakie dane tam powędrują zmienią się. Czas wykonania na serwerze i czas wysłania jest różny (do testów mi to pasuje). Nie będę stosował żadnej bazy danych bo ich nie używam! Moja strona internetowa to prosta strona - nie potrzebuje przechowywania danych, a to co muszę trzymam w plikach tekstowych. Tak wiem, lata 90'te, ale wystarczy.
ZD
"Nie będę stosował żadnej bazy danych bo ich nie używam!" Piękna logika. Jakoś tak jest, że ci co nie używają narzędzi mają najbardziej wyrobioną opinię ...
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 8 godzin
2

@Pepe Jeśli koniecznie chcesz trzymać dane w pliku, to zapisuj dane każdego użytkownika w oddzielnym pliku. Nazwę pliku możesz wygenerować w oparciu o treść parametru ?user=
To nie jest dobre rozwiązanie, ale gwarantuje Ci że plik z danymi użytkownika nie wysypie się

edytowany 1x, ostatnio: grzegorz_so
ZD
Aż pewnego pięknego dnia ... cokolwiek, choćby ilosc plikwów w katalogu, albo powielona nazwa ... a parsowanie 1000 plików to sama rozkosz dla HDD i CPU
GS
@ZrobieDobrze: a parsowanie 1000 plików to sama rozkosz dla HDD i CPU, tak może być:) . Wszystko zależy od skali, liczby plików. Aż pewnego pięknego dnia ... cokolwiek, choćby ilosc plikwów w katalogu, albo powielona nazwa ... W przypadku błędu, np. konfliktu nazwy, wysypie się tylko jeden plik. Rozmawiamy o czymś innym niż np. transakcyjny system bankowy w którym każda operacja MUSI być zapisana
robertz68
  • Rejestracja:ponad 18 lat
  • Ostatnio:około godziny
  • Lokalizacja:Zielona Góra
1

Jak @PrzemysławWiśniewski napisał, niech program sprawdza czy jest nowa wersja. Ja tak robię po 10 sekundach od uruchomienia programów. Oczywiście użytkownicy są powiadomieni dlaczego muszą puścić program na zaporze (lub nie jeśli nie chcą sprawdzania).
Podsunąłeś mi pomysł co do statystyk. Ja jednak załatwię to chyba REST-em i w ten sposób stworzę sobie bazę użytkowania programu.
Powiadomię o tym użytkowników i nawet dam możliwość zablokowania przekazywania tych danych.

Co do danych, nie jestem pazerny. Pobiorę coś unikatowego, np. numer seryjny dysku twardego aby z tej danej utworzyć klucz w bazie danych, oraz datę uruchomienia programu.

_13th_Dragon
Czemu wszyscy na tym RESTie zwariowali? Ja tam zrobiłem automat który z podanych nazw tablic, sięga do bazy analizuje wszystkie constraint'y łącznie z foreign key i tworzy mi klasę która załatwia całą obsługę. Owszem czasami automat trochę "nie dociąga" ale jak kilka razy "nie dociągnął" z tego samego powodu to wymyślam jak to załatwić i robię upgrade autoamtu.
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:496
1

Panowie,
Widzę, że niektórzy koniecznie chcę udowodnić mi że nie mam racji i koniecznie muszę użyć baz danych.
Pisząc, że nie używam baz danych na mojej stronie, nie znaczy że ich nie znam, lub nie potrafię obsługiwać. Po prostu nie potrzebuję tej funkcjonalności, dla tak prostego zastosowania.
Mój plik tekstowy się nie wysypie. Bo nie ma takiej opcji. Od 20 lat stosuje podobny zapis dla pobieranych plików i nie zdarzyło się to. Plik jest blokowany na czas zapisu - prawdopodobieństwo, że w tym samym czasie więcej niż jedna osoba zechce instalować mój program jest znikome. Jeśli nawet się to zdarzy i coś się stanie (dane się nie zapiszą, plik się uszkodzi) - nic się nie stanie! To nie bank, nic od tego nie zależy. Te dane są tylko dla mojej wiadomości - próba dowiedzenia się czy jest sens tworzyć za darmo oprogramowanie, używane przez być może 10 osób.

Zatem, dziękuję za troskę. Wiem co robię. Wątek miał pomóc mi jak zrealizować to jak najprościej - dzięki waszej pomocy udało się to. Nie idźmy ta drogą :)

@robertz68: Mój program aktualizujący (z którego jestem dumny :P) również uruchamiany jest z pewnym ustalonym opóźnieniem i owszem, mógłby realizować tę funkcjonalność... Problem jest taki, że jest on konfigurowalny i można go wyłączyć (poza tym, uruchamia się przy każdym otwarciu programu (lub co ustalony czas) - zatem nie spełnia to moich wymagań). Pomysł z unikalnym numerem jako ID jest bardzo dobry (na czas testów przyjąłem datę i czas odpalenia, co jest wystarczająco unikalne).


GS
jeśli wiesz co robisz, znasz zalety i ograniczenia tego rozwiązania, a widzę że tak jest, to masz rację :)
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około godziny
  • Lokalizacja:Tuchów
  • Postów:12175
4
Pepe napisał(a):

[07.12.2022 19:14:28]
User=Pawel
Date=Środa, 7 grudnia 2022 (19:14:30)
IP=
Host=
Port=13401
UserAgent=

Jeśli kiedykolwiek przyjdzie Ci do głowy trzymać datę w pliku tekstowym (obojętnie w jakim celu i formacie), to broń bug nie trzymaj takich informacji jako formatowanych dat, czyli tak jak wyżej w kluczu Date — zmienisz peceta lub localsy i to jebnie. Jeśli już, to trzymaj liczbowe time stampy — są w bibliotece standardowej funkcje do takich konwersji.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
Pepe
Wiem o tym. Bardzo ładnie to opisałeś :) Jeszcze nie zdecydowałem o formacie danych. Dzisiaj, moim celem było dowiedzieć się, jak te dane wysłać. Okazało się to bardzo proste. Ale, nawet gdybym zostawił jak jest, to nie ma to dla mnie znaczenia - bo obojętne mi co jest w nazwie sekcji, byle było unikalne - jeśli nie użyje jakiegoś identyfikatora, typu numer seryjny, to rozłożę datę/godzinę na liczby i posklejam wg przyjętego dla mnie formatu, np: 07.12.2022 19:14:28 --> 07122022_191428, lub jakkolwiek inaczej.
flowCRANE
Miałem na myśli wbudowane funkcje konwersji, np. DateTimeToUnix i UnixToDateTime. ;)
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 8 godzin
0

@furious programming:

Jeśli już, to trzymaj liczbowe time stampy

Zgoda. Tylko że plik tekstowy z takim zapisem daty jest nieczytelny dla użytkownika. Mam na myśli podgląd takiego pliku.
Zawsze można timestamp zapisać w niezależnej od locals'u znormalizowanej postaci tekstowej . Np. "2022-02-15T09:30:47Z" albo
"2022-02-15 09:30:47"

edytowany 3x, ostatnio: grzegorz_so
Miang
  • Rejestracja:około 7 lat
  • Ostatnio:3 minuty
  • Postów:1682
0

a log z php i sprawdzenie wywołań skrypt_szpiegujacy_usera.php nie wystarczy?


dzisiaj programiści uwielbiają przepisywać kod z jednego języka do drugiego, tylko po to by z projektem nadal stać w miejscu ale na nowej technologii
Pepe
Nie. Moim celem jest szpiegować ile wlezie, szczególnie użytkowników z loginem Miang... A na serio, wytłumaczę ponownie - nie interesują mnie żadne informacje o użytkowniku, mam gdzieś na czym i po co używają mój program - interesuje mnie natomiast czy użytkownik używa mojego softu czy nie. Takie informacje da tylko moment instalacji (oczywiście, wystarczy firewall i blokada ruchu wychodzącego).
Miang
no to bez parametru
Pepe
może jednak ja zdecyduje co będzie parametrem, a co nie... pobieram nazwę użytkownika, bo mi się podoba jej różnorodność. Rzeczywiście, w teorii nie potrzebuję żadnego bo i tak odpalę skrypt php, który może o wiele więcej.
Miang
a tak w ogóle dlaczego to niby jest pytanie z Delphi?
SK
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Postów:99
0

Jeśli instalator musi zostać pobrany, to wystarczy, że zobaczysz ile razy to wystąpiło, np. z loga serwera WWW. Liczba użytkowników programu na pewno będzie nie większa niż ilość pobrań. To pozwoli zorientować się, czy warto "iść dalej" i sprawdzać ilość faktycznych instalacji.
Jeśli twój program jest już używany, to ani zliczanie ilości pobrań, ani faktycznych instalacji nie da ci rzetelnej informacji, której potrzebujesz, bo będzie dotyczyć tylko nowych użytkowników.
Trzeba jeszcze rozwiązać problem aktualizacji, aby nie zaliczyć po raz kolejny użytkownika, który już był już "policzony" :)

Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:496
0

@skrzat Tak, w przypadku, gdy program pobierany jest tylko z mojej strony to prawda. Mogę potrzebne informacje pobrać z logów serwera. Ale, program można pobrać z różnych źródeł, choćby z torrentów.
W miarę rzetelne dane dostarczy tylko instalacja programu (oczywiście, można instalator rozpakować, ale to bez sensu) - mam wtedy pewność, że ktoś przynajmniej spróbował :P
Pobieram unikalny identyfikator PC, więc nawet jak się powtórzy (ktoś ponownie pobierze i zainstaluje) to będę o tym wiedział (albo jak ktoś zainstaluje aktualizacje). Na dzień dzisiejszy to niewinna zabawa - jak będę miał milion użytkowników, to się będę martwił - przy tych kilku-setkach nic naprawdę nie ma znaczenia...


WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

Taki Lamerski 😂 sposób jaki miałem ale w innej sprawie. Bardzo proste ale skuteczne jest użycie synapse i ftpsend do wysyłania na serwer do jednego katalogu krótkiego pliku txt z danymi jakimi chcesz, żeby kopie Twojego programu przesyłały. Każdy pliczek z katalogu powinien mieć inną nazwę aby nie było powtórzeń (bo pliki się ponadpisują )
Następnie tworzysz malutki programik który działa tylko u Ciebie i scala te małe pliki tekstowe(kasując oryginał i zwalniając nazwę) w prostą baze danych gdzie masz wszystko zliczone. Albo wyświetla Tobie scalone dane w formie linijek tekstu z danymi.
Numerowałem swoje pliki jako np 1.txt, 2.txt itd a następnie zwalniałem. Pozwala to generować nazwy plików za pomocą pętli while…np
Do przesyłania dużych ilości danych , połączeń itd to się nie nadaje bo jest powolne. Ale dla jednego połączenia z informacją o instalacji jest mega proste i dość szybkie. Nie wymaga sporych umiejętności programistycznych.

edytowany 5x, ostatnio: Windowbee

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.