Utilizare aplicatie online

Started by NicoNicol, Mar 25, 2024, 10:10 AM

Previous topic - Next topic

NicoNicol

Buna ziua,
Exista o versiune online? Sau o aplicatie pe telefon? Ar fi mult mai usor de folosit deoarece nu suntem in permanenta la birou.
Multumesc.

Serghei

Buna ziua,

Am în lucru o versiune pentru iOS, problema este că nu știm cum o să facem cu baza de date, că nu prea vrem să ținem la noi pe server datele clienților, din motive de confidențialitate...

macmac

Poate e fezabila folosirea unui serviciu comun de stocare online (gdrive, icloud etc) pentru stocare si sincronizare intre device-uri. Icefact doar sa poate fi pus sa foloseasca locatia data pentru stocare (adica ceva mai elegant decat symlink-uri / hardlink-uri spre path-ul hardcodat), iar configurarea serviciului sa ramana in sarcina utilizatorului.

Serghei

Din pacate genul asta de sincronizare nu prea functioneaza cand este vorba de baze de date relationale. Daca sync-ul se executa exact in mijlocul unei tranzactii, exista sanse foarte mari ca baza de date sa fie corupta si sa se piarda toate datele.

SOMI

Corect, aveți mare dreptate.

macmac

Fisierul sqlite nu poate fi corupt de catre sync in sine, pentru ca sync-ul va "impinge" tot fisierul.
Singura problema este atunci cand sunt pornite instante multiple ale aplicatiei / bazei de date in acelasi timp. Fisierul intr-adevar poate fi suprascris de oricare dintre instante si se pot pierde date.
Dar cat timp utilizatorul / utilizatorii inteleg aceasta limitare si se asigura ca nu mai are nimeni altcineva deschisa aplicatia, treaba cu stocarea shared functioneaza cu absolut zero probleme.

Serghei

Era bine sa fie atat de simplu, din pacate mecanismul la baze de date relationale este ceva mai complicat.

Scrierea in baza de date se face in mai multi pasi, in cadrul unei tranzactii. In momentul tranzactiei (dintre BEGIN si COMMIT), baza de date este intr-o stare inconsistenta. Daca sync-ul incepe exact in mijlocul unei tranzactii, dezastrul este garantat.

Din acest motiv nu este recomandat ca bazele de date sa fie copiate direct sau sa fie pe fileshare.

Mai mult, va fi imposibil de lucrat cu mai multe device-uri simultan, pentru ca se vor desincroniza numerele de ordine, vor aparea conflicte etc.

macmac

Quote from: Serghei on Apr 10, 2024, 10:34 AMIn momentul tranzactiei (dintre BEGIN si COMMIT), baza de date este intr-o stare inconsistenta.
Cred ca ne invartim un pic in jurul cozii. :) Inconsistenta poate exista doar din prisma unei alte instante a aplicatiei care ar accesa-o in acea stare.
Clientul de sync lucreaza pe fisier doar cand un mecanism care detecteaza modificari pe el (i.e. inotify) ii semnaleaza acest lucru. Daca avem o singura instanta de aplicatie deschisa, doar scrierile ei in fisierul sqlite va genera sincronizari spre server. Care sunt foarte rapide si pot fi considerate instantanee. Practic serverul, apoi si ceilalti clienti ai storage-ului vor primi imediat si ei modificarile.
Quote from: Serghei on Apr 10, 2024, 10:34 AMDaca sync-ul incepe exact in mijlocul unei tranzactii, dezastrul este garantat.
Dezastru pentru cine? Daca nimeni altcineva nu are aplicatia deschisa (ceea ce am zis ca ar trebui sa te asiguri oricum cand folosesti un astfel de setup, pentru a asigura integritatea datelor), continutul fisierului dintr-un moment dat e irelevant. Aplicatia va executa COMMIT-ul, tranzactia se va finaliza si starea finala a fisierului va fi impinsa in stocarea shared, iar ceilalti clienti ai stocarii o vor primi si ei.

Serghei

Corect, soluția ar putea funcționa DACĂ și NUMAI DACĂ utilizatorii se asigură că IceFact rulează pe un singur device la un moment dat.

Ok... în versiunea următoare o sa adăugăm un parametru de genul "-d /director/baze/de/date" și vedem ce-o ieși.

Serghei

UPDATE: am publicat o versiune beta care printre altele suporta parametrul --dbdir.

https://icesoft.ro/downloads/icefact-1.8.5.2-win64.exe

DragosP

Întreb și eu ca prostu': de ce n-ar fi făcută aplicația să se conecteze la icefact-srv?

sepromsrl

#11
Noi in firma folosim icefact online cu ajutorul urmatoarelor ingrediente:

- mini-laptop cu programele icefact si openVPN-client + conexiune la internet prin telefon hot-spot;
- sistem de tip Linux la birou STRICT cu icefact-srv si cu openVPN-server (merge si Windows dar e mare pacat);
- abonament de internet la firma cu IP fix (business) sau abonament normal dar cu serviciu "Dinamic DNS" activat (firma_srl.dyndns.com;  aprozar.no-ip.com);
- ruterul de la birou face port-forward la portul openVPN (prea cald, nu il tin minte) catre adresa interna IP a serverului Linux.

Cum functioneaza:
- pornesc minilaptopul, dau drumu la hot-spot pe telefon, ii dau net;
- pe minilaptop click pe iconita "openvpn-client", ma conectez la "purcelusi_srl.dyndns.org" adica la serveru linux de la birou. In momentul asta laptopul este cuplat in reteaua locala de la birou, exact cum in mod normal sta cuplat pe wifi de la sediu;
- pe mini-laptop click pe icefact - el se cupleaza automat in reteaua locala (prin tunelul creat de OpenVPN) la serverul Linux cu icefact-srv la fel cum face in mod normal cand se afla fizic la sediu;
- emit facturi de oriunde am acoperire cu semnal ca si cum as fi in biroul de la sediu.
- la sfarsit inchid icefact si click pe "disconnect" in clientul openVPN.

Prin hot-spot pe telefon functioneaza perfect. Daca ma cuplez la alte rutere cu wifi sau la wifi public, setarile de "firewall" din rutere s-ar putea sa nu imi dea voie sa ma leg cu OpenVPN. Sau sa ma deconecteze din 2 in 2 minute. Ruterele de la Digi vin uneori cu asemenea setari.

Asa ca Windows, Linux de acum si Android sau IOS pe viitor - prin openVPN "se vede" cu icefact-server fara nici o problema.
De unde umblu pe toate coclaurile, OpenVPN "lungeste conexiunea wifi" pana la ruterul de la sediu. Icefact functioneaza perfect in toata splendoarea - adica cu toate masurile de siguranta gandite si implementate de autor - si astfel evitam tot ce ati povestit mai sus cu coruperea bazei de date.

De asemenea:
1.  <<BACKUP PERIODIC>> de cel putin 2 ori pe zi la baza de date (atentie, icefact-server trebuie oprit inainte). Treaba asta ne-a scapat de multe probleme mai ales de cand sunt caldurile astea mari si fac becurile in tavan ca pomul de craciun;

2. La configurarea OpenVPN, numarul portului TCP/IP nu trebuie sa fie ala standard, alegeti ceva aleator intre 10000 (zece mii) pana in 65535 (maxim posibil). Non-standard pentru ca pe alea standard le cauta "botzii" care sunt pusi pe facut rautati;

3. Tot la configurarea OpenVPN se genereaza cheia privata iar mai tarziu pentru clienti (mini-laptopul, in viitor telefonul cu Android, etc), niste chei publice. Fiecare cheie publica trebuie distribuita la fiecare calculator care se cupleaza cu OpenVPN-client. Se intampla fenomenul ca acele chei publice au valabilitatea sa zicem de 10 ani dar dupa o juma de an.... un an nu se mai conecteaza nici cu slujba. Problema e din cheia privata de la instalare, aia are termenul de valabilitate mai mic. Este scris totul in manual.

Tot ce trebuie in firma este un "aitist" serios cu un pic de pregatire pe partea de retelistica.

Daca arde tare si aveti nevoie de explicat pas cu pas instalarea openVPN-server, configurarea, generarea cheilor, distribuirea catre statiile de lucru, programelul "script" de dez-instalare rapida si re-instalare (in cazul in care pica toate cheile si nu mai functioneaza cele nou-generate)  dati-mi de stire si vad cum imi fac timp sa explic la sectiunea de Linux.