DataFile - sposob przechowywania danych, 4fun |
DataFile - sposob przechowywania danych, 4fun |
16.05.2017, 16:17:22
Post
#1
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Czesc,
Tym razem prosta klaska do przechowywania danych w plikach w nowym formacie. Plik ma 2 naglowki oraz dane. Pierwszy naglowek w calosci jest sygnatura na podstawie ktorej sprawdzamy czy plik jest poprawny. Nastepnie naglowek zawiera informacje jak: * suma kontrolna naglowka * Identyfikator naglowka * Flagi (obecnie nie uzywane, chce za ich pomoca rozrozniac typ szyfrowania / kompresji) * System na jakim plik zostal utworzony, chociazby aby wiedziec ze trzeba zamienic \ na / * Wersja pliku (nowsza wersja bedzie wymagala klasy w nowszej wersji) * Rozmiar danych * Suma kontrolna danych Dane po zapisie do pliku sa od razu walidowane. Kod: http://wklej.org/hash/8de4c3a48f3/ Jak zwykle krytyka mile widziana Pozdrawiam |
|
|
17.05.2017, 09:11:42
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Mozesz mi napisac co robi ten kod:
? W klasie uzywasz stalej DATAFILE_VERSION Ale chyba slepne bo nie widze bys gdziekolwiek ja ustawial No i najwazniejsze: po co? Ja rozumiem, ze w ramach nauki, ale co to robi? W jakim nowym formacie te dane sa przechowywane? Po co przechowywac te dane w jakims nowym formacie? Cytat System na jakim plik zostal utworzony, chociazby aby wiedziec ze trzeba zamienic \ na / Tak klasa przechowuje jakies dane. Guzik ja powinno obchodzic na jakim systemie te dane zostaly zapisane. Ta klasa nie przetwarza sciezek plikow. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
17.05.2017, 10:03:08
Post
#3
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Mozesz mi napisac co robi ten kod:
? Nic, nadaje sie do wywalenia, moje przeoczenie poprostu. Dzieki za zwrocenie uwagi. W klasie uzywasz stalej DATAFILE_VERSION Ale chyba slepne bo nie widze bys gdziekolwiek ja ustawial Zwykla stala ktora zapomnalem przekleic, bo zdefiniowana jest w osobnym pliku: define('DATAFILE_VERSION' 1.0); No i najwazniejsze: po co? Ja rozumiem, ze w ramach nauki, ale co to robi? W jakim nowym formacie te dane sa przechowywane? Po co przechowywac te dane w jakims nowym formacie? Dokladnie tak - w celach edukacyjnych. Dane mozna w niej przechowywac, chociazby po to, aby miec od razu ich sume kontrolna zapisana w tym samym, pojedynczym pliku, czy dodatkowe informacje jak chociazby system na jakim zostal utworzony. Poza tym docelowo bedziesz mogl wlaczyc/wylaczyc kompresje i zaoszczedzic troche miejsca na dysku/transferu w sieci. Tak klasa przechowuje jakies dane. Guzik ja powinno obchodzic na jakim systemie te dane zostaly zapisane. Ta klasa nie przetwarza sciezek plikow. Ta klasa nie - ale zapisuje taka informacje do pliku wraz z danymi i mozesz z niej zawsze skorzystac. Masz taka mozliwosc. To tylko 1 bajt wiecej, a nie musisz pozniej zachodzic w glowe jaki bedzie znak konca linii, separator w sciezce, itp. Ten post edytował q.michal 17.05.2017, 10:03:58 |
|
|
17.05.2017, 10:27:29
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Cytat Zwykla stala ktora zapomnalem przekleic, bo zdefiniowana jest w osobnym pliku: define('DATAFILE_VERSION' 1.0); Ta informacja ma byc w klasie a nie w jakims osobnym pliku.-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
17.05.2017, 10:40:34
Post
#5
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Jakiej znowu tablicy $dane? Mozesz w pliku zapisac dowolne dane, jakie chcesz, w tym dowolna ilosc tablic. To o czym mowisz jest zapisane w naglowku pliku. Masz tam sume kontrolna, rozmiar danych, OS, wersje pliku (nie date utworzenia a wersje formatu). Nie widze powodu dla ktorego ktos mialby sobie tworzyc tablice w postaci:
i ja zapisywac do pliku. Format pliku sam w sobie przewiduje przechowanie takiej informacji w naglowku, bez wzgledu na to czy jest potrzebna czy nie. Mozesz z niej skorzystac lub nie. To ze klasa ma metode ktora zwraca rodzaj systemu wynika jedynie z faktu, ze jest to informacja o tym na jakim systemie powstal plik. Jest to fragment metadanych i skoro klasa takie metadane zapisuje w naglowku - to uwazam ze powinna byc metoda, ktora pozniej pozwoli je odczytac. Co wiecej, juz teraz w naglowku sa przechowywane flagi (obecnie 0x0000), ale w przyszlosci na podstawie tych danych klasa ma rozpoznawac sposob kompresji i szyfrowania. Ten post edytował q.michal 17.05.2017, 10:42:22 |
|
|
17.05.2017, 10:42:34
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Cytat Jakiej znowu tablicy $dane? public function saveData($data) { edit: wybacz, usunalem cos zanim napisales, bo sie rozmyslilem. Ale widze juz to doczytales i odpowiedziales -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
17.05.2017, 10:51:34
Post
#7
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Spoko, tak jak napisalem sa to metadane zapisane w naglowku pliku.
Jest to wstepna wersja tego formatu danych. Docelowo chce zaimplementowac jeszcze na pewno kompresje i szyfrowanie. Jezeli uwazasz ze cos jeszcze warto dodac, to jestem otwarty na propozycje |
|
|
17.05.2017, 10:58:08
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Cytat tak jak napisalem sa to metadane zapisane w naglowku pliku. Ja wiedzialem ze to sa metadane naglowka. NIe mniej jednak nie uwazalem ze ta informacja jest tam potrzebna. Po namysle, doszedlem do wniosku ze moze jednak Takie rzeczy jak 0x22 ktore powtarzasz w kilku miejscach powinny byc stalymi w klasie Skoro sie uczysz, dobrze by bylo uczyc sie na najnowszym php7 a nie brnac w php5 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
17.05.2017, 15:36:43
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Kod return ($this->getVersion() && $this->getVersion() <= DATAFILE_VERSION); To przeczy kompatybilności. Skoro nowszy format pliku będzie wymagał nowszej klasy to nowsza klasa nie odczyta nr. wersji. W nowych wersjach będziesz musiał stosować inne sprawdzania wersji więc od razu zainteresuj się http://php.net/manual/en/function.version-compare.php isValid() - sugeruje raczej czy plik jest w całości poprawny Przydało by sie szyfrowanie (kompresja w sumie też może być). W sumie taki format może się nadać do transferowania danych pomiędzy api, ale SSL też załatwia robotę(no chyba ze z jakichś powodów nie mamy). Pola możesz (i raczej powinieneś) zainicjować od razu przed konstruktorem, nie ma sensu robić tego w konstruktorze. |
|
|
17.05.2017, 16:15:50
Post
#10
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Kod return ($this->getVersion() && $this->getVersion() <= DATAFILE_VERSION); To przeczy kompatybilności. Skoro nowszy format pliku będzie wymagał nowszej klasy to nowsza klasa nie odczyta nr. wersji. W nowych wersjach będziesz musiał stosować inne sprawdzania wersji więc od razu zainteresuj się http://php.net/manual/en/function.version-compare.php Chyba nie do konca rozumiem? isValid() - sugeruje raczej czy plik jest w całości poprawny Moze byc poprawny i jednoczesnie w niewspieranej wersji. Zastanawiam sie jeszcze cemu w linii 255 przy wywolaniu $this->checksum($store) dostaje ostrzezenie w IDE: Expected Datafile got string? Ten post edytował q.michal 17.05.2017, 16:24:39 |
|
|
23.05.2017, 14:19:02
Post
#11
|
|
Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) |
Kompletnie idiotyczne rozwiązanie, nie da się dla tego znaleźć żadnego sensownego zastosowania.
Ale... żeby nie było, że OT: - poczytaj sobie o pack i unpack - poczytaj o różnicach == i === - poczytaj o class constants (zamiast używać stałych definiowanych gdzieś globalnie) Fragmentu nawet nie chcę komentować. Nie mam nic przeciwko programowaniu głupot dla samej nauki ale... serio, po co coś tak kompletnie nieprzydatnego i nieoptymalnego?! Ten post edytował mls 23.05.2017, 14:19:22 -------------------- |
|
|
23.05.2017, 18:44:59
Post
#12
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Nie chce byc zlosliwy, ale sens pewnie taki sam jak pisanie svn-sync (https://gist.github.com/mlask/6954a8f5f8525193379ac51f2d930432) w PHP ;-)
Da sie? Da. Tylko po co, skoro takie rozwiazanie wymaga dodatkowych zaleznosci w postaci interpretera i jest nieoptymalne? Takie skrypty pisze sie chociazby w Bashu/AWK a nie w PHP. |
|
|
24.05.2017, 16:20:39
Post
#13
|
|
Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) |
Nie chce byc zlosliwy, ale sens pewnie taki sam jak pisanie svn-sync (https://gist.github.com/mlask/6954a8f5f8525193379ac51f2d930432) w PHP ;-) Da sie? Da. Tylko po co, skoro takie rozwiazanie wymaga dodatkowych zaleznosci w postaci interpretera i jest nieoptymalne? Nie zrozumiałeś. Twoje rozwiązanie nie jest do niczego potrzebne. Nie ma żadnego sensownego zastosowania. Przytaczanie mojego kodu z Gista jako "przykładu" o czym ma świadczyć? O dalszym twoim braku zrozumienia? Jeszcze rozumiem, gdybym wystawiał ten kod do oceny czy coś. Ale to jest mój prywatny kod na prywatny użytek, który wykorzystują również moi współpracownicy - stąd jest publicznie dostępny. Nic ponad to. A argument o zależnościach też nie do końca trafiony, bo kod pisany był (i jest użytkowany) na środowiskach z systemem macOS, gdzie PHP jest standardowo dostępne Cytat Takie skrypty pisze sie chociazby w Bashu/AWK a nie w PHP. Że co?! A kto tak powiedział? Pisze się w tym, w czym jest prościej i wygodniej. Nie widzę powodu dla którego miałbym tego nie pisać w PHP (który znam wystarczająco dobrze) czy jakimkolwiek innym języku programowania. W pierwszym poście tego wątku pisałeś, że "krytyka mile widziana". Więc ją łaskawie przyjmij Ten post edytował mls 24.05.2017, 16:22:43 -------------------- |
|
|
24.05.2017, 17:09:51
Post
#14
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Konstruktywna krytyka tak, natomiast Twoj post niewiele wnosi do tematu.
To, ze nie znajdujesz dla niego zastosowania, nie znaczy ze nikt nie znajdzie. Jest to wylacznie Twoja opinia, o ktora nie dbam. Czytajac natomaist Twoja ostatnia wypowiedz, odnosze wrazenie ze sam masz problem ze zrozumieniem. Jestes podobno programista z 15-letnim doswiadczeniem. Powinienes wiec wiedziec, ze pisanie takich skryptow w PHP jest nieoptymalne. A suma sumarum ostatecznie i tak wykonujesz polecenia powloki forkujac poraz kolejny proces basha/sh/ksh/cokolwiek masz w OSX. Jaki wiec jest sens uruchamiac z konsoli interpreter PHP, by z niego poraz kolejny wywolywac shella? Zaden - dlatego taki skrypt powinien byc napisany w bashu, a nie w PHP. Zreszta przegladajac Twoj kod PHP i patrzac jak usilnie dolaczasz go do OSXa podczepiajac skrypty pod akcje wnioskuje ze innego jezyka chyba nie znasz. Moglby zatem smialo rzec, ze przygania kociol garnkowi. Koniec tematu z mojej strony. |
|
|
25.05.2017, 22:13:21
Post
#15
|
|
Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) |
Konstruktywna krytyka tak, natomiast Twoj post niewiele wnosi do tematu. To ty zacząłeś odbiegać od tematu... Cytat Zreszta przegladajac Twoj kod PHP i patrzac jak usilnie dolaczasz go do OSXa podczepiajac skrypty pod akcje wnioskuje ze innego jezyka chyba nie znasz. Znam parę innych mniej lub bardziej popularnych języków programowania, ale z PHP korzystam na codzień i w tym pisze mi się najbardziej "neutralnie" - dlaczego więc nie miałbym go używać na własny użytek również do innych celów? Tak przy okazji, nie wiem czy wiesz, ale ogrom ludzi tak robi - ułatwia sobie życie pisząc proste "programiki" w językach, w których jest im najwygodniej. Równie dobrze jak PHP może to być Python, Ruby, cokolwiek. Odwróciłeś kota ogonem, bezmyślnie przyczepiasz się do mojego prywatnego kodu którego nikomu celowo nie daję do oceny (bo i nie ma czego oceniać), ale sam żadnej krytyki nie przyjmujesz, w żadnym wątku. Dalsza dyskusja faktycznie nie ma sensu bo to jak gadanie do ściany... Ten post edytował mls 25.05.2017, 22:21:56 -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 01:49 |