Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - bies

Strony: [1] 2 3 4 5 ... 46
1
Dyskusje / Odp: Jak pracują freelancerzy?
« dnia: Styczeń 25, 2017, 12:55:59 »
Rakieta: ponieważ chyba jeszcze nikt Ci nie zaproponował to może przetestuj w domu słuchawki wytłumiające. Działają całkiem dobrze na gwarnym open space więc może i na dzieci zadziałają.

2
Java / Odp: [Java] Interpretowanie komunikatów sieciowych klient-serwer
« dnia: Sierpień 10, 2016, 15:31:23 »
Takie coś właśnie użyłem i mam problem przy deserializacji, bo nie wiem na samym początku jakie dane zawiera, więc nie wiem jaką klasę podać, np.: LoginRequest, RoomReservationRequest itd. itd.
Dlatego Xion pisał o protokole HTTP (nie HTML). Elementem HTTP jest nagłówek który zawiera np: POST /login lub POST /roomreservation. I to na podstawie tego nagłówka wiesz jaka jest struktura pytania/odpowiedzi. Jeśli nie chcesz używać HTTP (lub innego, ustalonego protokołu -- ale HTTP jest bardzo dobry do takich zastosowań) to musisz zaprogramować swój. Gdzie też będzie jakiś nagłówek oraz dane. Sądząc po tym co piszesz próbujesz oprogramować protokół komunikacji tylko z danymi (na dodatek OOP, WTF!) -- to tak nie działa. Zawsze: nagłówek (który pozwoli zinterpretować dane) oraz dane.

3
C++ / Odp: Wyjątki nie są wolniejsze?
« dnia: Styczeń 05, 2016, 16:25:21 »
No i o to mi właśnie chodziło (...)
Ale w tym miejscu to już nie ma znaczenia. To jest to o czym pisał Albireo, czy będzie if (can_do_it()) do_it() else do_if_cannot(), czy try do_it() catch do_if_cannot(). Czy nawet: if (likely(can_do_it())) do_it() else do_if_cannot(). To tylko kwestia wyboru tego co nam się bardziej podoba (+- te mikro-optymalizacje). Ważne jest, że sytuację obsługujesz lokalnie. Hashedone twierdzi, że można zapomnieć catch. Ale można też zapomnieć if -- to kwestia dyscypliny.

Wyjątki maja dużą przewagę tam gdzie błąd należy propagować. I, znów zgadzając się z Albireo, więcej mam w normalnej pracy takich przypadków. Znacząco więcej.

Podobnie jak więcej mam komunikacji z bazami, systemami trzecimi, filesystemami, siecią czy nawet wątkami niż ,,zwykłej logiki''. Ale to może wynikać, ze specyficznej sytuacji bo piszę głównie rozwiązania serwerowe. Ale nawet w przypadku logiki, jeśli np. nastąpi błąd walidacji jakieś reguły to nie obsługuję tego lokalnie tylko wyrzucam wyjątek aby błąd trafił finalnie do gui (dla użytkownika) albo loggera (dla administratora).

O.o Ok, łatwiej mi sobie wyobrazić siebie z tym pierścieniem i Orodruiną niż to co napisałeś.
Pisałem o tym KrzyśKowi w wątku nt. wyboru języka dla początkującego. Da się. I naprawę uważam że jest to lepsza droga niż z debuggerem na co dzień.

4
C++ / Odp: Wyjątki nie są wolniejsze?
« dnia: Styczeń 05, 2016, 14:49:05 »
(...) faworyzuje kod, który nie jest "referential transparent" (...)
Welcome to the desert of real. Większość programów nie jest "referential transparent" bo nie są skrystalizowanym, idealnym odbiciem ducha programisty tylko czymś co działa w rzeczywistym świecie. Który nie jest "referential transparent".

(...) nie da się pisać w C++ bez debuggera (...)
Piszę, zawodowo, bez debuggera w różnych językach (w tym C++) już od 16 lat -- jakim cudem...

łatwo wydzielić funkcjonalność zależną od hardware'u w całkiem oddzielnym podsystemie, wtedy znika całkiem idea wyjątkowości jakiejś sytuacji poza tym specjalnym modułem.
Na tym polega programowanie strukturalne. I rzeczywiście da się. Tylko jak rozumiem w obrębie podsystemu chciałbyś propagować ręcznie stan błędu. Już to widzę... Transakcja bazodanowa i dokładnie każde odwołanie do sterownika opatrzone obsługą błędu propagowaną do poziomu w którym możesz spróbować zrobić rollback. A zawieść może dokładnie wszystko: może się baza rozłączyć, wywrócić, dane mogą naruszać klucze, możesz mieć inną wersję schematu itp.

Wiec nie bawię się w żadne kody błędów tylko rzucam wyjątek, który leci aż do granicy transakcji. Tam jest próba rollback (bo dokładanie każdy wyjątek nieobsłużony lokalnie musi tym skutkować w transakcji). A jeśli rollback się nie powiedzie to rzucam inny wyjątek który wychodzi z podsystemu i leci do momentu obsługi błędów krytycznych.

Dokładnie tak samo jest w przypadku protokołów komunikacyjnych które mogą być przerwane (bo sieć). W przypadku dostępu do filesystemu (bo uprawnienia, bo braki plików, bo znów sieć). Itd. Schemat jest jasny -- wszystko to zależy świata zewnętrznego i jest nieoczekiwane.

Żadnego z tych przypadków nie da się obsłużyć lokalnie w sensowny sposób. Bo mamy możliwości: propagacja kodu błędu przez nie wiadomo ile warstw, wywoływanie tego kodu obsługi błędu z wielu miejsc i propagacja błędu, longjmp().

Natomiast należy odróżnić przypadek kiedy stan błędny jest oczekiwany. Nie mamy wtedy sytuacji wyjątkowej ale jasno opisany przebieg programu. Klasyczny przykład: ładowanie tekstury. Jeśli jej nie ma ładujemy różową, domyślną teksturę aby wiedzieć, czego brakuje. I tutaj można zwracać MayFail<T> (ale wolę if (can_do_it()) do_it() else do_if_cannot().

5
C++ / Odp: Wyjątki nie są wolniejsze?
« dnia: Styczeń 03, 2016, 14:45:53 »
Nie wiem jak w innych kompilatorach (...)
Gcc i clang używają tego samego modelu zero-cost od dawna. A Inne kompilatory... Jakie inne kompilatory?

6
Językoznawstwo / Odp: Języka dla początkującego
« dnia: Grudzień 21, 2015, 17:29:23 »
Uwaga, wall-of-text na dodatek off-topic.

Wszystko poniżej też nie dotyczy początkujących programistów ale kogoś kto ma już parę (tak z 5 minimum) lat doświadczenie za pasem i więcej niż kilka języków za sobą.

Podobne tezy można wysnuć o każdej rzeczy coś ułatwiającej lub automatyzującej - chociażby kalkulatory ogłupiają w porównaniu z liczeniem w pamięci.
Tak! Tylko wydaję mi się, że nie pamiętasz, że nóż potrzebuje ostrzenia. A mózg to nie jest coś co dostałeś na całe życie. Tylko organ który się degeneruje (jesteśmy obaj już w tym wieku, że tendencja jest spadkowa, niestety). I owszem, używając kalkulatora Twój mózg przestanie sobie radzić z liczbami. Znam takie przypadki, nie potrafią oszacować (nie policzyć, oszacować) przychodu rocznego jeśli tygodniowy, średni jest np. 8650 EUR. Nie bez Excela. I teraz, jeśli nie masz problemu z takim stanem swojej głowy to OK. Dla mnie to upośledzenie.

Nie wiem dlaczego nikt się nie oburza na to, że warto czasami zostawić samochód i przejść się pieszo a że warto czasami zostawić kalkulator już wydaje się dziwne...

Z używaniem IDE jest podobnie. Ale to nie wszystko. Ten podlinkowany artykuł był naprawdę sensowny. Otóż chodzi o to, że masz w głowie pewną ,,przestrzeń mentalną'' takie ,,rejestry'' na których możesz operować. I to nie jest bynajmniej duża przestrzeń. A na dodatek maleje z wiekiem. Wiec jak jej nie wykorzystujesz (a IDE właśnie na to Ci pozwala -- na mentalne lenistwo) to się degraduje.

Druga sprawa jest taka, że ta przestrzeń jest skończona i mała. W związku z tym rozwiązania które tworzysz muszą się w niej mieścić -- są mniejsze, zgrabniejsze i lepiej przemyślane (to jest właśnie teza z artykułu). IDE sztucznie poszerza Ci przestrzeń w której pracujesz, co może prowadzić do zmutowanej kupy... kodu.

Przykład, zachwycasz się debuggerem -- ja nie debuguję swojego kodu. Po co? Przecież napisałem ten kod. A skoro go napisałem to go znam (jest w moich ,,rejestrach'' lub jestem go w stanie ,,załadować''). Po opisie błędu, czasami stack-trace'ie lub logu wiem na czym polega błąd. I nawet nie chodzi o to, że nie mam dobrego debuggera -- mam. Piszę głównie pod JVM ostatnio a wiele mogę złego powiedzieć o Eclipse ale nie to, że debugger dla JVM jest słaby. I znów, możesz nie mieć problemu z tym, że debugger jest pierwszą rzeczą po którą sięgasz jak masz błąd. Ale dla mnie to kolejne upośledzenie -- ja sięgam do swojej głowy.

Inna sprawa że debugger (i jakieś IDE do nawigacji po kodzie) jest bardzo przydatny do czytania ze zrozumieniem kiepsko napisanej papki.

7
C# / Odp: GTK# Jak to ruszyć ?
« dnia: Grudzień 12, 2015, 15:14:54 »
W skrócie filozofia Gtk jest dziwna. Najłatwiej to ogarniesz jak ściągniesz sobie glade i się pobawisz. I tak jak napisał rastabaddon: więcej kontenerów.

8
Skrypty / Odp: Python obliczanie wyrażenia
« dnia: Listopad 01, 2015, 00:09:37 »
To, czego bardziej brakuje C++ to raczej łatwy i przenośny mechanizm zarządzania paczkami/modułami/etc. w stylu Maven/pip/gem/cabal/leiningen/npm
To też, zgadza się.

program/skrypt, który użytkownicy uruchamiają na własnym Pythonie (np. jakiś command line tool) -- ponieważ sytuacja z Pythonem na *niksach jest pogmatwana (zgadnij dlaczego), 2&3 to najbardziej sensowna opcja
Eeee, mi się nigdy nie chce -- zawsze piszę pod 2.7 a jak ktoś ma problem z uruchamianiem na 3 to niech go sobie rozwiąże sam. Nie, nie twierdzę, że jestem deweloperem ,,przyjaznym społeczności''. ;)

9
Skrypty / Odp: Python obliczanie wyrażenia
« dnia: Październik 30, 2015, 21:12:21 »
Nie wnikam w ,,błędy projektowe'' C++ bo okazałoby się, że nie rozumiemy ,,błędów'' tak samo (np. dla mnie zgodność z C to bardzo duża zaleta a nie błąd projektowy). Odniosę się zatem tylko do komunikatów:
#include <vector>
class A {
    A(const A&){}
public:
    A(){}
};

int main() {
    std::vector<A> vecA(10);
    vecA.resize(20);
    return vecA.size();
}
Cytat: lukasz@moria
# clang++ -std=c++14 a.cc
In file included from a.cc:1:
In file included from /usr/bin/../lib64/gcc/x86_64-pld-linux/5.2.0/../../../../include/c++/5.2.0/vector:62:
/usr/bin/../lib64/gcc/x86_64-pld-linux/5.2.0/../../../../include/c++/5.2.0/bits/stl_construct.h:75:38: error:
      calling a private constructor of class 'A'
    { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
                                     ^
...
a.cc:10:7: note: in instantiation of member function 'std::vector<A, std::allocator<A>
      >::resize' requested here
        vecA.resize(20);
             ^
a.cc:3:2: note: implicitly declared private here
        A(const A&){}
        ^
Jak dla mnie to zupełnie czytelny komunikat. Więc stawiałbym na niedopracowane raportowanie w kompilatorach (tak, wiem użyłem takiego który ma najlepsze komunikaty).

// edit
Jeszcze co do biblioteki standardowej: nie, nie sądzę że lifting jest potrzebny. C++ potrzebuje raczej tego co ma Python -- dużej biblioteki standardowej, filozofii batteries included.

Owszem, mogę sobie przy piwie pogadać o tym, że std::string ma kiepskawy interfejs ale to w rzeczywistości jest nieistotne. Język programowania nie ma naprawiać świata i być doskonałym. Ma pozwalać sprawnie pisać sensowne programy.

10
Skrypty / Odp: Python obliczanie wyrażenia
« dnia: Październik 30, 2015, 20:03:03 »
Co z kolei skutecznie wiąże ręce jeśli chodzi o naprawianie decyzji projektowych.
Jaaaasne... Java mogła, C++ mógł, Perl mógł a Python nie. A Java5, C++11 i Perl5 wcale nie przyniosły rewolucyjnych zmian...

Nieprawda. To jest kwestia dojrzałości i Python jest jeszcze językiem nastoletnim (nie chodzi o rzeczywisty wiek ale o stan umysłu) ze wszystkimi swoimi buntami i wyskokami.

11
Skrypty / Odp: Python obliczanie wyrażenia
« dnia: Październik 30, 2015, 19:35:19 »
Jeszcze nigdy nie widziałem szybkiej i masowej migracji istniejących rozwiązań.
A ja widziałem. Z Java2 na Java5. Masowa -- check. Migracja -- check. Szybka (w porównaniu do Pythona3) -- check. Wiesz dlaczego? Bo Sun nie zawalił sprawy i dał wsteczną kompatybilność.

Owszem, znam przypadki gdzie utrzymuje się kod Java2 (sam to robię w jednym projekcie) ale wynika to zazwyczaj z jakiejś niszy na której nie ma sensownego JVM v5 (np. IBM OS 4690). Ale to są przypadki incydentalne. Nikt nie mówi: wystartujmy projekt w J2 bo z J5 jest tyyyle problemów.

// edit
,,wsparcie'' == ,,minor release''
,,rozwój'' == ,,major release''

12
Skrypty / Odp: Python obliczanie wyrażenia
« dnia: Październik 29, 2015, 22:29:08 »
Społeczność Pythona nie kończy się na /r/Python i okolicach. Mnóstwo projektów jest w 2 i wciąż powstaje, i to się raczej szybko nie zmieni.
Ditto. Nastawienie w biznesie (tym z którym ma jakąś styczność) jest takie, że Python2 jest fajny i stabilny. I wszystko działa. A Python3 to jeszcze niedorobiony badziew. Nie powiem żebym się nie zgadzał. Liczba problemów nawet z najprostszymi rzeczami w 3 (jakiś ipython i interaktywne obliczenia na units) spowodowały że mam 2.7 i jest mi z nim dobrze.

// edit
Z resztą chrzanić biznes, konserwatyzm jest silny w nim. Ale nie znam nawet żadnego distro Linuksa która przeszłoby na Python3 (nie, że python3 jest w repo tylko, że wszystko chodzi na 3).

13
OpenGL / Odp: Program z każdym uruchomieniem wygląda inaczej
« dnia: Wrzesień 19, 2015, 18:54:17 »
Dodaj sobie -fsanitize=address do opcji kompilatora. To powinno Ci wykryć cześć problemów z pamięcią i jest ,,odrobinę'' szybsze od Valgrinda. (see: https://en.wikipedia.org/wiki/AddressSanitizer)

14
Silniki / Odp: Profesjonalny, komercyjny silnik
« dnia: Wrzesień 07, 2015, 13:00:57 »
Heartstone to nie gra, bardziej minigierka :D
Chciałbym wydać minigierkę która na Twitchu spokojnie konkuruje z Dota2 i CS:GO... ;) I jest w tej chwili najpopularniejszą grą Blizzarda (tak, WoW+Diablo3+SC2 mają łącznie mnie graczy).

// edit
Heartstone to akurat bardzo dobry argument, że nie kod (rozmiar, rozmach) buduje wartość firmy. Jest to najprawdopodobniej najlepsza gra Blizzarda z punktu budowania wartości firmy z ostatnio wydanych (i pewnie druga po WoW ogólnie).

15
Silniki / Odp: Profesjonalny, komercyjny silnik
« dnia: Wrzesień 06, 2015, 22:19:52 »
Jak cofniemy się wstecz (...)
Jak cofnę się do 2004 w którym zakładałem swoją firmę z kolegami to wtedy też mój/nasz kod nie był wiele wart. Po tych 11 latach, mając około 50 deweloperów i konsultantów u siebie nic się nie zmieniło. Kod nie ma znaczenia. Tzw. przewaga konkurencyjna nie wynika z kodu tylko z synergii marketingu, marki, znajomości zagadnień poruszanych i zarządzania ludźmi. Drucker (taki dość sławny profesor od marketingu i zarządzania) redukuję ją wręcz tylko do marketingu i innowacji (w sensie pomysłu, nie kodu źródłowego) rozumując (bardzo sensownie), że wykonanie i zarządzanie to commodity.

Nie chcę wchodzić w długą dyskusję ale chciałbym tylko aby początkujący deweloperzy nie tracili czasu na niepotrzebną ochronę kodu źródłowego. Oczywiście YMMV.

Strony: [1] 2 3 4 5 ... 46