Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wygasniecie newsa
Forum PHP.pl > Forum > Przedszkole
dark_lion
Witam mam takie pytanie czy jest możliwe aby ustawić danemu newsowi czas jego wygaśnięcia? załóżmy ze dodałem w poniedziałek tekst na stronę główna i chciałbym żeby zniknęła po 2 dniach od czasu jego nadania.
MateuszS
Możesz to zrobić zwyczajnie sprawdzając datę newsa, lub ilość sekund/minut/godzin jakie on już jest na stronie po czym jeżeli przekroczy zadeklarowaną ilość usunie się (a właściwie zrobi to nieświadomie pierwszy user który wejdzie na stronę i odpali kod) lub ukryje. Można też użyć CRON'a. To takie coś że odpala skrypt kiedy chcesz, nie musisz wchodzić na tę stronę, serwer się tym zajmuje, dokładnie nie wiem jak akurat CRON działa bo się nim nie bawiłem ale jest masa artów na necie i na tym forum o CRONIE.
vokiel
A nie lepiej po prostu wyświetlać newsy, których data opublikowania jest nie starsza niż te 2 dni. Zwykły where w zapytaniu sql.
dark_lion
hm najlepiej jak podam przykład. Chodzi mi o to ze.. załóżmy w CMS użytkownik dodaje newsa i zaznacza tam czas jego wygaśnięcia i po tym czasie albo się usuwa z bazy danych albo nie wyświetla go. zależy mi na tym żeby użytkownik decydował ile ma to potrwać zanim news przestanie być wyświetlany
thek
Najprościej? Niech ustawia datę/czas wygaśnięcia i tyle. Zapytanie sprawdzające będzie pobierało wszystkie aktywne, których czas wygaśnięcia jest większy niż aktualna data. To jest prostsze niż kombinowanie z cronami lub innymi pierdołami.Dodatkowo nawet jeśli ktoś by się uparł i wyświetlił, to możesz dodać, że już jest on nieaktualny.
dark_lion
thek czy mogłbym cie prosic o mały przyklad ? smile.gif nie za bardzo wiem jak sie za to zabrac ..
benio101
Użytkownik dodaje parametr, po jakim czasie ma się artykuł usunąć np. w dniach.
Teraz zapisujesz to do bazy danych.

Przy pobieraniu artykułów, sprawdzasz, czy różnica Czasów jest <= czasu wygaśnięcia artykułu, np.

  1. function roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S){
  2. $dni=Array(13);
  3. $dni[0]=$dni[12]=31; $dni[1]=28; $dni[2]=31; $dni[3]=30; $dni[4]=31; $dni[5]=30; $dni[6]=31; $dni[7]=31; $dni[8]=30; $dni[9]=31; $dni[10]=30; $dni[11]=31;
  4. $roznica=0;
  5. if($R<$r || ($R==$r && $M<$m) || ($R==$r && $M==$m && $D<$d))return "Bł?d: próba podróży w czasie niemożliwa!";
  6. if(!przestepny($R) && $M==1 && $D==29)return "Bł?d: docelowa data nie istnieje!";
  7. if($r<$R){
  8. $_s=$_i=$_h=$ileDniMinelo=0;
  9. $_d=$_m=1;
  10. while($_m<$m){
  11. $ileDniMinelo+=60*60*24*$dni[++$_m-(!(przestepny($r) && $_m==2))];
  12. }
  13. $ileDniMinelo+=60*60*24*($d-$_d);
  14. $ileDniMinelo+=60*60*($h-$_h);
  15. $ileDniMinelo+=60*($i-$_i);
  16. $ileDniMinelo+=$s-$_s;
  17. $s=$i=$h=0;
  18. $d=$m=1;
  19. $roznica+=(365+przestepny(++$r-1))*24*60*60-$ileDniMinelo;
  20. }
  21. while($r<$R){
  22. $roznica+=(365+przestepny(++$r-1))*24*60*60;
  23. }
  24. while($m<$M){
  25. $roznica+=60*60*24*$dni[++$m-(!(przestepny($r) && $m==2))];
  26. }
  27. $roznica+=60*60*24*($D-$d);
  28. $roznica+=60*60*($H-$h);
  29. $roznica+=60*($I-$i);
  30. $roznica+=$S-$s;
  31. return $roznica;
  32. }
  33.  
  34. function przestepny($rok){
  35. return (!$rok%4 && !(!$rok%100 && $rok%400))?1:0;
  36. }
  37.  
  38. $r=$datanapisaniapostu[0].$datanapisaniapostu[1];
  39. $m=$datanapisaniapostu[2].$datanapisaniapostu[3];
  40. $d=$datanapisaniapostu[4].$datanapisaniapostu[5];
  41. $h=$datanapisaniapostu[6].$datanapisaniapostu[7];
  42. $i=$datanapisaniapostu[8].$datanapisaniapostu[9];
  43. $s=$datanapisaniapostu[10].$datanapisaniapostu[11];
  44. $R=date(y);
  45. $M=date(m);
  46. $D=date(d);
  47. $H=date(H);
  48. $I=date(i);
  49. $S=date(s);
  50.  
  51. // $datanapisaniapostu zawiera datę, kiedy post został napisany w formie rrmmddhhiiss, gdzie rr - rok%100, mm - miesiąc, dd - dzień, hh - godzina, ii - minuty, ss - sekundy.
  52. // $limit zawiera liczbę dni, ile artykuł jest aktywny, jest liczbą naturalną
  53.  
  54. // i teraz warunek:
  55.  
  56. if(roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S)<=60*60*24*$limit){
  57. // wyswietl artykuł
  58. } else {
  59. // nie wyświetlaj
  60. }
  61.  

edit: Poprawiłem linijkę, bo wdarła się literówka. Tak to jest, jak się pisze na pół przytomnym.
vokiel
@benio101, nie zrozum mnie źle, ale co to jest?

3 różne propozycje, limit ważności ustawiony na 7 dni
  1. SELECT * FROM 'aktualnosci' WHERE DATEDIFF(CURDATE(),DATE('data_stop'))<7;
  2. SELECT * FROM 'aktualnosci' WHERE CURDATE()>DATE_ADD(DATE('data_stop'),INTERVAL 7 DAY);
  3. SELECT * FROM 'aktualnosci' WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY)>DATE('data_stop');


Pobranie gdzie limit ważności jest ustawiony na stałe
  1. SELECT * FROM 'aktualnosci' WHERE DATE_SUB(CURDATE(),DATE('data_stop'))>0;
thek
A po co aż takie kombinowanie vokiel? Jeśli data jest na stałe to wystarczy porównac datę aktualną z datą stopu. Nie trzeba nic odejmować smile.gif
  1. ... WHERE date(date_stop) > curdate()
A jeszcze lepiej to zamiast curdate() obliczyć datę w php i od razu posłać do skryptu.

A już całkiem pewnie będzie happy gdy mu podrzucisz datepickera w jQuery (czy innym ustrojstwie) by sobie tę datę kliknął smile.gif
vokiel
Cytat(thek @ 11.01.2011, 00:29:40 ) *
A po co aż takie kombinowanie vokiel? Jeśli data jest na stałe to wystarczy porównac datę aktualną z datą stopu. Nie trzeba nic odejmować smile.gif

Zależy od tego jak chce te limity ustawiać, czy na sztywno na ileś dni, czy wpisywać w configu po ilu dniach wpisy przestają być newsami, czy będzie podawał sztywną datę zakończenia ważności. Podałem kilka opcji, żeby można było sobie wybrać. Jeśli np ustawi sobie w configu ilość dni do dezaktualizacji newsa, to wtedy może sobie tą ilość dni przekazać jako parametr i odejmowanie/dodawanie się przyda.
thek
Z doświadczenia Ci powiem vokiel, że dodawanie i odejmowanie nie zdaje rezultatu. Zbyt łatwo o błąd. Zauważ, że przy dodawaniu i odejmowaniu musisz mieć zewnętrzny proces, który to nadzoruje (cron). Jeśli nastąpi awaria to masz dodawanie i odejmowanie załatwione na amen. jeszcze gorzej gdy ktoś "przejmie" ów zewnętrzny proces i zacznie się nim bawić. Za cholerę nie dojdziesz kto, kiedy i ile jakich modyfikacji dokonał. Co jeszcze ważniejsze... Dodawanie i odejmowanie konkretnej liczby sprawia, że tracisz informację o tym od kiedy do kiedy post był wyświetlany. W jednym z serwisów firmy w jakiej pracuję istnieją ogłoszenia, którym użytkownik może nadawać dowolne poprawne czasy ich wyświetlania. Jeśli czas aktualny zbiega się z podanym, to staje się nieautualny, mimo iż jest wciąż aktywny. "Znika" z serwisu, wyszukiwarki itp, ale mając jego link jest on nadal dostępny, tyle że pojawia się nad nim dodatkowa warstwa z przekreślonym napisem "Nieaktualna oferta". Dodatkowo każdy z terminów ma własne dane określone, czyli nie jest to "duplicate content", choć wiele rzeczy jest między terminami wspólnych. I NIGDY nie było problemów.

W innym, mającym już wiele lat, jest niestety metoda z ilością dni pozostałą do wyświetlania. To co z nim już cyrków było to dziękuję. A to provider miał w nocy jakieś konserwacje i kilka dni cron nie działał jak powinien i dni nie odejmowało. A to innym razem crony przez tydzień wywoływały się kilkukrotnie, przez co odejmowało te dni znacznie szybciej. Po prostu jaja :) Dlatego nie mam zaufania do modyfikacji bazy zewnętrznymi procesami. Tylko i wyłącznie SELECTY oraz określone na sztywno ramy do porównywania.
vokiel
Tu się chyba thek nie zrozumieliśmy. Miałem na myśli taką sytuację:
W aplikacji jest opcja ustawienia czasu ważności newsów. Czyli np admin systemu ustala, że teraz news jest newsem przez 7 dni - taką wartość ustawia. Następnie przy pobieraniu newsów pobierana jest liczba dni, gdy news jest aktualny i pobierane są tylko te, które spełniają warunek (konieczne jest oczywiście zapisywanie daty utworzenia newsa). Nie ma tu żadnego corna, procesów, usuwania, etc. Po prostu select, z tym, że zamiast ustawiania na sztywno - ważność jest pobierana z konfiga aplikacji.

W większości przypadków najlepiej jest ustawiać termin ważności dla każdego news'a osobno, indywidualnie, ale są też przypadki/systemy/wymagania, gdzie lepiej jak jest limit ustawiony odgórnie z łatwą możliwością zmiany.
thek
Ok... Takie coś ma sens jak napisałeś, ale jedynie gdy wszystkie mają te ograniczenie. A co jeśli nie ma tak być? Będziesz wprowadzał kolejne typy by rozróżniać, iż news admina lub moda ma być aktywny wiecznie, albo ma mieć ten czas dłuższy, lub wprowadzisz różne typy dla różnych użytkowników by rozpoznawać i nadasz im inne w konfiguracji zezwolenia czasowe? A co z newsami sensownymi tylko dla określonego momentu, okienka czasowego? Przypuśćmy sytuacja jest taka, że news ma być wyświetlany od X do Y, ale nie wcześniej, ani nie później, a dodatkowo zawsze jako przyklejony. Jeśli zechcę, to mogę nawet życzenia noworoczne ustawić sobie w takim systemie nadając postowi kilka kolejnych corocznych okresów wyświetlania i mogę zapomnieć o wszystkim winksmiley.jpg Tak więc jest całość tylko zależna od faktu JAK on chce problem wygasania załatwić. Czy bardzo prosto, czy już w jakiś inteligentniejszy sposób.
benio101
Cytat(vokiel @ 10.01.2011, 21:56:02 ) *
@benio101, nie zrozum mnie źle, ale co to jest?

Kod PHP, który w zależności od daty wyświetla post lub nie, tak jak chciał autor tematu.
Wasze propozycje są również dobre, choć o bardziej czasochłonne.

edit: faktycznie, do kodu wdarła się literówka. Już poprawiona smile.gif
A mój kod jest nadal lepszy, bo szybszy haha.gif
vokiel
Cytat(benio101 @ 11.01.2011, 15:32:01 ) *
Wasze propozycje są również dobre, choć o bardziej czasochłonne.

A mój kod jest nadal lepszy, bo szybszy haha.gif

biggrin.gif To nie jest dział Humor
thek
Tu się zgodzę z vokielem. Bez urazy benio, ale Twój skrypt naprawdę nadaje się do działu humor. Nie będę wymieniał wszystkich przeciw, ale podpowiem choćby... Po co matematycznie sprawdzać przestępność roku, skoro można użyć choćby date('L', $rok) ? Po co liczyć różnicę tak, skoro można skonwertować datę do timestamp i to policzyć w góra 2 linijkach? Są także gotowe funkcje do tego jak date_diff Nawet nie mówię że i tak masz małe problemy w związku z przestawianiem godzin 2 razy w roku. Po co tworzyć problematyczne funkcje w miejscach, gdzie można się zdać na funkcje wbudowane? Lubisz utrudniać sobie życie?
melkorm
Albo użyć chociażby obiektu DateTime gdzie przy użyciu DateInterval i diff (szkoda że dopiero od 5.3 :/) można napisać to w 2 linijkach i to w dodatku bez żadnego mnożenia/liczenia itp.
thek
Byłbym zapomniał benio.... Nie widzisz skali problemu poruszonego. Ty podałeś jedną funkcję do liczenia różnicy czasu pomiędzy dwoma znacznikami czasowymi i skończyłeś. To co ja czy vokiel poruszyliśmy jest o przynajmniej 1 lub 2 poziomy wyżej, gdyż poruszyliśmy nie "jak napisać funkcję", ale "jak rozwiązać problem wyświetlania od strony aplikacji", w którym liczenie różnicy jest składową i to wcale nie najważniejszą. Pisząc bardziej obrazowo: zająłeś się wyjaśnianiem co to jest koło, podczas gdy vokiel lub ja podajemy autorowi co zrobić, by jego pojazd zaczął jeździć i wspominamy, że można użyć choćby koła winksmiley.jpg
benio101
Tyle tylko, że rozwiązałem całkowicie problem tak, jak Wy, a nie tylko jego część.
To, że korzystam z własnych skryptów w żaden sposób nie jest złe, wręcz przeciwnie, świadczy o moim zaangażowaniu i zrozumieniu programowania od podstaw.
Wy tylko byście korzystali z obiektów i gotowych już funkcji napisanych przez innych.

Tak, jak dobrego kierowcę rozpoznaje się po parkowaniu,
tak dobrego informatyka po własnych funkcji programowaniu.

I nie dość, że moja funkcja jest szybsza, to tak naprawdę zajmuje mniej miejsca.
Korzystanie z jakiejś funkcji includuje ją do kodu maszynowego, więc ta czy owak, moja funkcja zajmuje mniej miejsca niż Wasze.

Ale że programujecie tak od początku, to konserwatywnie nie zmienicie swoich poglądów i pomimo braku racji będziecie uważać się za "lepszych".
thek
Kompletnie mylisz pojęcia "dobrego i złego programisty". Dobry, to niekoniecznie taki, który potrafi napisać coś sam, ale taki, który ma na tyle szeroką wiedzę, że nie będzie wymyślać koła od nowa, ale także skorzystać potrafi z poprawnego kodu już istniejącego. Poza tym zadam Ci pytanie... Jeśli jakaś funkcja weszła jako wbudowana do języka to będzie ona wydajniejsza czy nie od samodzielnie napisanej? Zwróć uwagę, że Ty w tej jednej używasz 3 pętli i 6 razy wbudowanej date() okraszonych masą działań matematycznych, także w pętlach. Co będzie wydajniejsze? Dodam, że z Twojej strony kompletnie olewasz walidację, nie zwracasz uwagi na daty wcześniejsze niż rok 2000 i wiele dupereli. Uważasz, że masz szybszą? Zrobiłem test prosty... 100000 wywołań mojej i Twojej. Tu masz kod by to sobie przetestować:
  1. <?php
  2. function diff( $data, $data2, $type = 's') {
  3. if( !$start = strtotime($data) ) {
  4. throw new Exception('Data początkowa nie jest prawidłowa!');
  5. } elseif( !$end = strtotime($data2) ) {
  6. throw new Exception('Data końcowa nie jest prawidłowa!');
  7. } else {
  8. $sekund = abs( $start-$end );
  9. switch( $type ) {
  10. case 'w': //weeks
  11. return $sekund/604800;
  12. case 'd': //days
  13. return $sekund/86400;
  14. case 'h': //hours
  15. return $sekund/3600;
  16. case 'm': //minutes
  17. return $sekund/60;
  18. case 's': //seconds
  19. default:
  20. return $sekund;
  21. }
  22. }
  23. }
  24.  
  25. function roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S){
  26. $dni=Array(13);
  27. $dni[0]=$dni[12]=31; $dni[1]=28; $dni[2]=31; $dni[3]=30; $dni[4]=31; $dni[5]=30; $dni[6]=31; $dni[7]=31; $dni[8]=30; $dni[9]=31; $dni[10]=30; $dni[11]=31;
  28. $roznica=0;
  29. if($R<$r || ($R==$r && $M<$m) || ($R==$r && $M==$m && $D<$d))return "Błąd: próba podróży w czasie niemożliwa!";
  30. if(!przestepny($R) && $M==1 && $D==29)return "Bł?d: docelowa data nie istnieje!";
  31. if($r<$R){
  32. $_s=$_i=$_h=$ileDniMinelo=0;
  33. $_d=$_m=1;
  34. while($_m<$m){
  35. $ileDniMinelo+=60*60*24*$dni[++$_m-(!(przestepny($r) && $_m==2))];
  36. }
  37. $ileDniMinelo+=60*60*24*($d-$_d);
  38. $ileDniMinelo+=60*60*($h-$_h);
  39. $ileDniMinelo+=60*($i-$_i);
  40. $ileDniMinelo+=$s-$_s;
  41. $s=$i=$h=0;
  42. $d=$m=1;
  43. $roznica+=(365+przestepny(++$r-1))*24*60*60-$ileDniMinelo;
  44. }
  45. while($r<$R){
  46. $roznica+=(365+przestepny(++$r-1))*24*60*60;
  47. }
  48. while($m<$M){
  49. $roznica+=60*60*24*$dni[++$m-(!(przestepny($r) && $m==2))];
  50. }
  51. $roznica+=60*60*24*($D-$d);
  52. $roznica+=60*60*($H-$h);
  53. $roznica+=60*($I-$i);
  54. $roznica+=$S-$s;
  55. return $roznica;
  56. }
  57. function przestepny($rok){
  58. return (!$rok%4 && !(!$rok%100 && $rok%400))?1:0;
  59. }
  60.  
  61. $start1 = microtime(true);
  62. for($i = 0; $i<100000; $i++) {
  63. try {
  64. diff('2010-10-10 10:10:10', date('Y-m-d H:i:s'), 'd');
  65. } catch (Exception $e) {
  66. echo $e->getMessage();
  67. }
  68. }
  69. $stop1 = microtime(true);
  70. $start2 = microtime(true);
  71. for($j = 0; $j<100000; $j++) {
  72. $r=10;
  73. $m=10;
  74. $d=10;
  75. $h=10;
  76. $i=10;
  77. $s=10;
  78. $R=date('y');
  79. $M=date('m');
  80. $D=date('d');
  81. $H=date('H');
  82. $I=date('i');
  83. $S=date('s');
  84. roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S);
  85. }
  86. $stop2 = microtime(true);
  87. echo 'thek: '.($stop1-$start1).'<br />benio: '.($stop2-$start2);
  88. ?>

Cytat
thek: 5.2500369548798
benio: 9.1759741306305
Nadal uważasz, że Twoja jest szybsza? Jak dla mnie 2-krotnie wolniejsza. Dlatego zanim zaczniesz uważać, że masz lepszy "skill" po potrafisz napisać sam - przetestuj się i swoje funkcje a potem porównaj przejrzystość kodu... Moje 22 krótkie i bardzo czytelne oraz schludne linijki kodu czy 35 Twojego "nie wiem co się dzieje"?

Dodajmy, że Twój "skill" nie pozwolił Ci zauważyć, iż nie masz nawet swojego skryptu choć pobieżnie optymalizowanego pod katem przejrzystości i poprawności.
$dni[0]=$dni[12]=31; $dni[1]=28; $dni[2]=31; $dni[3]=30; $dni[4]=31; $dni[5]=30; $dni[6]=31; $dni[7]=31; $dni[8]=30; $dni[9]=31; $dni[10]=30; $dni[11]=31;
a
$dni[0]=$dni[2]=$dni[4]=$dni[6]=$dni[7]=$dni[9]=$dni[11]=31; $dni[1]=28; $dni[3]=$dni[5]=$dni[8]=$dni[10]=30;
krócej i bez błędu. Nie zauważyłeś, że nie ma miesiąca po grudniu -> $dni[12]
Do tego data musi być podana w formacie 'yymmddhhiiss' co jest kompletnie nieprzejrzyste, że o poprawieniu po Tobie błędów typu Notice nie wspomnę. I tak poszedłem na rękę bo nie walnąłem w wywołaniu tak jak sobie życzyłeś:
  1. $datanapisaniapostu = '101010101010';
  2. $r=$datanapisaniapostu[0].$datanapisaniapostu[1];
  3. $m=$datanapisaniapostu[2].$datanapisaniapostu[3];
  4. $d=$datanapisaniapostu[4].$datanapisaniapostu[5];
  5. $h=$datanapisaniapostu[6].$datanapisaniapostu[7];
  6. $i=$datanapisaniapostu[8].$datanapisaniapostu[9];
  7. $s=$datanapisaniapostu[10].$datanapisaniapostu[11];
  8. $R=date('y');
  9. $M=date('m');
  10. $D=date('d');
  11. $H=date('H');
  12. $I=date('i');
  13. $S=date('s');
ale już kulturalnie podałem policzone wartości jako 10 typu int, a więc bez dodatkowej konwersji typów. I tak kod poległ wolniejszy. Nadal masz wątpliwości czy test przeprowadzisz tym razem bez tekstów: "Wasze propozycje są również dobre, choć o bardziej czasochłonne." i PO testach czasowych. To, że ja wolę wykorzystać sprawdzone metody, zamiast po raz 1000 wymyślać koło na nowo nie świadczy o mojej ułomności, ale fakcie, że jestem inteligentny na tyle, by tego nie robić. Znam model matematyczny obliczania dni i co z tego? To koniecznie powód, by z niego korzystać? Zrobię to wtedy, gdy PHP nie udostępni mi gotowego lub zaproponowany przez język sposób/funkcja nie będą odpowiednio wydajne dla moich potrzeb.

To co zrobiłeś to "sztuka dla sztuki" i każdy przeglądający Twój kod będzie się zastanawiał CO Ty właściwie zrobiłeś. Mój czyta się po prostu wygodnie. Jest przejrzysty niemal do bólu. Jedyny zgryz może mieć człowiek gdy natknie się na abs. A zastosowałem to tylko po to, by można było stosować daty zamiennie. Twój kod wysypie wtedy tekstem o "podróży w czasie". Tak więc kolejny "minus" na konto Twojej funkcji. Jedyną osoą w temacie, która uważa że robi coś lepiej jesteś Ty. Nie mając bowiem nawet kodu z naszej strony założyłeś, że i tak Twój sposób jest lepszy. Do tego oczywiście nie wiesz chyba, że obliczenia silnika bazy danych są wielokrotnie szybsze niż obliczenia php jako języka interpretowanego. Nawet kilkunastokrotnie. No ale lepiej sypnąć, że się jest mastahem, kompletnie olewając testy jakiekolwiek. Ja Ci tylko zrobiłem test po stronie php. Gdybym miał zrobić test kodu php z zapytaniem sql, to byś się pogrążył. A czemu? Bo byś miał taki ciąg u siebie:
a) pobierz rekordy
b) policz czy można je wyświetlić (wolniejsze niż sprawdzenie w bazie)
c) wyświetl możliwe
versus
a) pobierz rekordy pasujące (tu są obliczenia wiele razy szybsze, bo na poziomie silnika, a nie interpretera języka)
b) wyświetl je

Dalej mam Ci wyjaśniać różnice czy już wystarczająco mocno pokazałem, że co jak co, ale zaledwie musnąłeś problem, który vokiel czy ja rozwiązaliśmy obszerniej, a na dodatek bez tekstów "mój kod lepszy i koniec"?


PS: z parkowaniem mnie rozwaliłeś :D Właśnie akurat teraz zdaję kurs prawa jazdy i wiesz co? Instruktor na kursie gdy widział jak parkuję stwierdził, że "gdyby kursanci robili to tak bezproblemowo jak Ty, to nie musiałbym parkowania uczyć". Dodam, że powiedział to gdy pierwszy raz miałem równoległe, czyli popularna "kopertę". Czyli jestem zajebistym kierowcą? Akurat tego bym nie twierdził, bo już po chwili przejeżdżałem na 4 biegu przez skrzyżowanie na pomarańczowym, a na następnej godzinie wchodziłem poślizgiem w zakręt 90 stopni mając 50 na liczniku i nogę na gazie, co on prawie palpitacjami przypłacił.
vokiel
Po pierwsze benio101 przyjrzyj się tematowi, i przedstawionemu problemowi. Jak widzisz nie ma w nim nic na temat funkcji liczenia różnicy czasów. Zatem uważam, że skupianie się na zajebistości Twojego szybkiego, mniej zajmującego, całkowitego rozwiązania jest trochę nie na miejscu. W żaden sposób nie skoncentrowałeś się na rozwiązaniu problemu, tylko przedstawiłeś jeden z możliwych sposobów rozwiązania wyliczenia różnicy czasu pomiędzy dwoma datami. Jak się okazuje (o czym dowodzi thek) nie jest to ani szybkie, ani niezawodne rozwiązanie. Tym bardziej nie jest całkowite.

Cytat(benio101 @ 12.01.2011, 12:42:57 ) *
Tyle tylko, że rozwiązałem całkowicie problem tak, jak Wy, a nie tylko jego część.
To, że korzystam z własnych skryptów w żaden sposób nie jest złe, wręcz przeciwnie, świadczy o moim zaangażowaniu i zrozumieniu programowania od podstaw.
I nie dość, że moja funkcja jest szybsza, to tak naprawdę zajmuje mniej miejsca.

Ilość zajmowanego miejsca nie jest miarą jakości kodu. Na jakość kodu (odwrotnie proporcjonalnie) wpływa ilość WTF w komentarzach.
Reszty nie będę pisał, bo thek wystarczająco wiele kwestii wyjasnił.

Że też thek masz siłę, żeby takie rzeczy tłumaczyć.

Cytat(thek @ 12.01.2011, 15:05:30 ) *
PS: z parkowaniem mnie rozwaliłeś biggrin.gif Właśnie akurat teraz zdaję kurs prawa jazdy i wiesz co? Instruktor na kursie gdy widział jak parkuję stwierdził, że "gdyby kursanci robili to tak bezproblemowo jak Ty, to nie musiałbym parkowania uczyć". Dodam, że powiedział to gdy pierwszy raz miałem równoległe, czyli popularna "kopertę". Czyli jestem zajebistym kierowcą? Akurat tego bym nie twierdził, bo już po chwili przejeżdżałem na 4 biegu przez skrzyżowanie na pomarańczowym, a na następnej godzinie wchodziłem poślizgiem w zakręt 90 stopni mając 50 na liczniku i nogę na gazie, co on prawie palpitacjami przypłacił.

Btw, nie szalej tak za kierownicą, jeszcze nie jesteś kierowcą (chyba, że już zdałeś ten egzamin)
thek
@vokiel: Celna uwaga smile.gif Temat jak widzisz nie jest o różnicy czasu między datami, ale o podejściu jak problem wygasania postów ugryźć w aplikacji. mamy z vokielem inne podejście do tematu nieco, ale podchodzimy do niego od strony najbardziej ogólnej (jak można określić czy post powinien być wyświetlony - analiza przypadków) do szczegółowej (zapytania po stronie bazy - konkretne implementacja i kod). Nie skupiliśmy się tylko na tym jak jeden z aspektów można rozwiązać, ale podaliśmy szerszy wachlarz możliwych podejść. Ty dałeś jedną funkcję i uważasz, że rozwiązałeś CAŁY problem. Na dodatek bez żadnego uzasadnienia uważasz, że jest ono najwydajniejsze/najlepsze.

Ilość kodu jest wyznacznikiem programisty?
  1. while($_m<$m){
  2. $ileDniMinelo+=60*60*24*$dni[++$_m-(!(przestepny($r) && $_m==2))];
  3. }
Wytłumacz komuś co TU zrobiłeś. Bo jest to tak zapisane, że osoba widząca to pierwszy raz i niezbyt kumająca PHP zgłupieje. Ja patrząc pierwszy raz na to przecierałem oczy dlaczego w wywołaniu elementu tablicy obliczającego sobie dodatkowo indeks jest operator logiczny AND.
Takie coś "z marszu" oznacza się komentarzem, bo za kilka tygodni sam nie będziesz rozumiał co tu zrobiłeś. Optymalizacji pokroju przestępny($r) na samym początku kodu nie uświadczysz, choć w pętlach są one wywoływane wielokrotnie. Jak więc widzisz nawet Twój "zajebisty" kod bym jeszcze bez problemu optymalizował, a i tak raczej mojego byś nie dogonił. Jaki wywodzę wniosek z tego? Napisałeś kod, którego sam do pewnego stopnia nie rozumiesz. Ja widząc go po raz pierwszy od razu widzę gdzie go jeszcze można poprawiać, choć nie ja go napisałem. Zachwycasz się więc czymś nadmiernie, a na dodatek kompletnie bez powodu.

A tłumaczę, bo jednak nie jestem tu modem tylko by dawać warny, ale i początkujących czegoś nauczyć. A taki kod nie nauczy ich niczego.

Co do egzaminu to teorię mam 22 stycznia winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.