lqc
Reputacja
3,965
Głosów ogółem

- 142

- 95
- Prawdziwe imię
- Łukasz
- Członek od
- 2 lata, 4 miesiące
- Ostatnio widziany
- 4 miesiące, 2 tygodnie temu
- Witryna
- http://www.goog...
- Miejscowość
- Warszawa
- Wiek
- 26
O mnie
Ostatnio webdeveloper Django :)
Pytania: 1
-
2011-02-27 23:25:40
Prezentacja na temat Django
Ostatnio zaproponowano mi żebym przygotował 1.5-2h prezentację dotyczącą Django w ramach serii o różnych zrębach do twor
Odpowiedzi: 152
-
2010-02-07 00:14:07 Czy używacie repozytorium kodu?
Jeśli sobie pomyślisz, że jutro twój dysk twardy padnie, komputer zaleją ci sąsiedzi lub nastąpi inna katastrofa to chyba odpowiedź jest jasna. Jeszcze są ukryte katastrofy pt. "Wczoraj działało, zmieniłem tylko jedną linijkę, nie działa i nie mogę naprawić".
Dlatego od dłuższego czasu korzystam z VCS również w prywatnych projektach (w pracy to praktycznie obowiązek). Aby się uchronić przed utratą danych związaną z awarią mojego komputera (jestem za leniwy, żeby robić backupy na płytki) polecam któryś z tych serwisów:
Update: tutaj jest wersja Git dla Windows nie wymagająca Cygwina.
-
2010-02-02 11:59:41 Znajdowanie zależności w tablicy
Jeżeli nie masz jakiegoś ograniczenia na to jaka jest ta zależność (np. linowa, wielomiany, funkcje elementarne), to problem jest raczej nierozstrzygalny, a już na pewno nie jest jednoznaczny, bo w końcu to tylko 100000 elementów.
Niech pod indeksem
k, znajduje się wartośća_k. Weźmy:L_k(x) = (x-1)(x-2)...(x-k+1)(x-k-1)...(x-100000)/(k-1)(k-2)...(k-100000) L_k(i) = 0, dla każdego i != k L_k(k) = 1Wystarczy wziąć ∑k100000akLk(x) i już masz wielomian opisujący tę tablicę.
Jest to algorytm generowania tablicy jak każdy inny. Ma po prostu 100000 parametrów, tylko które mogłem sobie wziąć z sufitu.
Seed i losowe liczby
Nadal tego jakoś nie widzę. Szansę na sukces masz tylko jeśli okres tego PRNG jest mniejszy niż 100000. Wtedy możesz znaleźć cykl w tej tablicy. Ale w sumie też nie masz pewności, bo może raz na 300000 elementów seed jest przesuwany cyklicznie o 1. Pewności nigdy nie możesz mieć.
-
2010-03-13 01:58:30 Własne wycinki w Pythonie
Istnieje typ wbudowany
slice. Jest on używany w następujący sposób.slownik[1:10:2]Zamieniane jest na:
slownik.__getitem__(slice(1, 10, 2))Ma on trzy atrybuty:
start,stop,stepi metodęindices(N), która dla danego N (np. długości listy, której mają dotyczyć indeksy) zwraca trójkę nadającą się do przekazania dlarange().Tak więc, jeśli chcesz obsługiwać wycinanie:
class A(object): # new-style class def __getitem__(self, index): if isinstance(index, slice): #oblicz wycinek elif isinstance(index, int): # oblicz n-ty element else: raise TypeError # nie obsługuj indeksów innych typów, np. napisówTak naprawdę nie ma żadnego ograniczenia na argumenty dla
__getitem__. Zapis[:]to tylko skrót. Na przykład dla macierzy wielowymiarowych wygodnie jest wprowadzić zapis typu:M[1, 2, 9] M[..., 5] # elementy w wierszu 5 w ostatnim wymiarze -
2010-02-12 12:01:16 Odświeżenie starego kodu HTML
Nie rozumiem zbytnio idei poprawiania dla samego poprawiania. Te tagi są zupełnie poprawne zarówno w HTML4 jak i XHTML1.0. Zostały one usunięte dopiero w HTML5 (i XHTML1.1, ale jakoś wątpię, aby ci był potrzebny do szczęścia), więc myślę, że nie musisz się martwić, iż strona przestanie działać przez następne 10 lat.
Sama zamiana nie poprawi też wyglądu strony w żaden sposób, no bo chcesz zamienić na dokładnie to samo.
Weźmy np. tag
<center>. Robi to samo co<div align="center">, ale align też jest "Deprecated", więc powinieneś to zamienić na styl:<div style="text-align: center">. Poza faktem, że align w stylu nie zadziała na tabele (bo to wyrównanie tekstu), to właściwie nic nie zyskałeś.Twój HTML nadal nie oddziela treści od wyglądu. Jest tak samo zły, przestarzały i niesemantyczny jak był na początku. Należałoby wyciągnąć te style do zewnętrznego szablonu - zrobienie tego automatycznie da ci jakieś koszmarne szablony w których będzie się ciężko połapać (o ile w ogóle będą działać).
Lepiej poczekać na decyzję pt. "Zmieniamy wygląd strony" i wtedy przepisać szablony. Tak to się zupełnie nie opłaca. HTML4 jest dobrym sprawdzonym standardem. Może, że potrzebujesz HTML5, ale wtedy i tak chcesz pewnie zmienić layout.
-
2010-02-17 12:25:31 Django + bazy danych SQLite i MySQL
Ad 1. Problem z SQLite nie leży w samej wydajności, bo ta jest całkiem niezła, ale w skalowalności: gdy jeden proces piszę do bazy, nikt inny nie może z niej czytać. Przy większym ruchu zaczynają się problemy.
Ad 2. Myślę, że możesz spróbować i zobaczyć co wyjdzie. Podmiana backendu w Django jest bardzo łatwa.
Ad 3. Plik z bazą należy trzymać poza bezpośrednim zasięgiem serwera WWW, podobnie jak samą aplikację Django. Przyładowo, to nie Apache ma czytać bazę, tylko proces odpalony przez
mod_python/mod_wsgi.Ad 4.
Jeśli chcesz korzystać z ORMa (a pewnie chcesz, żeby mieć admina), to musisz przenieść schemat istniejącej bazy na definicję w Pythonie.
Edit: za radą mrbox, dobrym wyjściem jest użyć
./manage.py inspectdb. -
2010-02-17 18:29:41 Wyjątki PHP - różnice między wyjątkami z SPL
To są wyjątki, których używa biblioteka standardowa PHP. Oczywiście jest sens używać tych samych wyjątków w pewnych typowych sytuacjach, które masz opisane w dokumentacji.
Tworzenie własnych wyjątków jest jak najbardziej na miejscu jeśli dodają one więcej semantyki do istniejących. Zauważ np., że
LogicExceptionjest dość ogólny.DomainExceptioniBadFunctionCallExceptionto szczególne przypadkiLogicException. Tworzą one pewne drzewo od najbardziej ogólnych do bardziej szczegółowych.Powinieneś się przejmować, co rzucasz. W końcu możesz chcieć zrobić coś innego, gdy jest błąd jest w kodzie, a co innego jak baza danych się wywali.
-
2010-02-21 19:47:43 Python 2.6.4 nie wspiera mod_python ?
Najlepiej
mod_wsgi. WSGI = Web Server Gateway Inteface - pythonowy standard do odpalania usług WWW. Ewentualnie mod_fcgi. -
2010-03-19 23:01:34 Czy to php?
Tak, to jest standard PHP:
http://www.php.net/manual/en/control-structures.alternative-syntax.php
-
2011-01-16 21:42:21 Dodawanie w JavaScript.
Jest to konsekwencja sposobu reprezentacji liczb w Javascript.
Typowym sposobem reprezentacji liczb zmiennoprzecinkowych jest trzymanie ich w postaci wykładnik (E) + mantysa (M) (patrz IEEE-754). W uproszczeniu dostajesz wtedy następujący wzór:
x = (1 + m1
*2-1 + m2*2-2 + ... + m52*2-52) * 2Egdzie m1, m2, ... to kolejne bity mantysy (która w Javascript ma 52 bity), a E jest liczbą całkowitą. Aby zapisać liczbę
0.4musisz znaleźć odpowiednie M. Okaże się, że nie da się tego zrobić i dlatego wartość która dostajesz jest "prawie" jak 0.4. Błąd jest tak mały, że można go pominąć przy wyświetlaniu. Podobnie z0.2i zresztą z0.6też.Po dodaniu, błąd się kumuluje i zaczyna być znaczący, a więc i widoczny przy wypisywaniu. Zauważ też, że:
0.2 + 0.4 != 0.6 // ale: 0.5 + 0.25 == 0.75Ponieważ drugi ciąg wartości to ujemne potęgi dwójki.
-
2010-01-21 16:04:47 Zadanie na długie zimowe popołudnie
Rozwiązanie w Prologu. Niestety nie udało mi się znaleźć przenośnego modułu do arytmetyki na liczbach wymiernych, więc jest dłuższe niż mogłoby być:
:- op(500, 'xfx', '--'). expr([A|T]--X, A) :- T == X. expr([A|B]--T, E) :- B \== T, expr([A|X]--X, B--T, E). expr(LHead--LTail, RHead--RTail, E) :- LHead \== LTail, RHead \== RTail, expr(LHead--LTail, E1), expr(RHead--RTail, E2), myop(X), E =.. [X, E1, E2]. expr(LHead--LTail, RHead--RTail, E) :- LHead \== LTail, RHead \== RTail, RHead = [A|B], LTail = [A|X], expr(LHead--X, B--RTail, E). myop('+'). myop('-'). myop('*'). myop('/'). eval(X, r(X, 1) ) :- integer(X). eval(A + B, r(L, M)) :- eval(A, r(AL, AM)), eval(B, r(BL, BM)), L is AL * BM + BL * AM, M is AM * BM. eval(A - B, r(L, M)) :- eval(A, r(AL, AM)), eval(B, r(BL, BM)), L is AL * BM - BL * AM, M is AM * BM. eval(A * B, r(L, M)) :- eval(A, r(AL, AM)), eval(B, r(BL, BM)), L is AL * BL, M is AM * BM. eval(A / B, r(L, M)) :- eval(A, r(AL, AM)), eval(B, r(BL, BM)), BL \= 0, L is AL * BM, M is AM * BL. year(E, V) :- expr([1,2,3,4,5,6,7,8,9|X]--X, E), eval(E, r(L,M)), 0 is L mod M, % ulamek skracalny do liczby calkowitej V is L // M, V >= 2011, V =< 2100. :- findall(E, (year(E, V), format('~p = ~d~n', [E, V])), _), halt.Poprawka
Poprzednia wersja miała trochę zbyt zachłanną metodę nawiasowania. Teraz powinno być już dobrze. Wyszło mi 32386 wyników (trochę sporo). Oczywiście nie uwzględniam takich rzeczy jak łączność dodawania, więc (1+2)+3 jest różnym nawiasowaniem od 1+(2+3).
Rozwiązanie nie jest zbyt eleganckie, bo wykonanie zajęło przerażające 4.5min :P Jak można przyśpieszyć ? Zamiast liczyć kolejne podproblemy od nowa, należałoby je spamiętywać jako szablony, tzn. nawiasowań 3-ch elementów za pomocą 4-rech operatorów jest 32, nie zależnie od tego jakie to elementy. Żeby wygenerować szablon dla czterech elementów wystarczy odpowiednio połączyć szablony dla 3-ch,2-ch i jednego elemenu. Itd... Oczywiście zużycię pamięci wzrośnie, ale obliczenia będą dużo krótsze.













2
1
363