title: Czy układy klawiatury są z natury wadliwe dla programistów?

text: Ostatnio coraz częściej zauważam, jak używam klawiatury i jak wpływa to na moją produktywność. Przypomniało mi się pytanie/problem, który moim zdaniem nie został do końca rozwiązany w środowisku programistycznym (częściowo w oparciu o indywidualne preferencje). **Czy wszystkie/większość układów klawiatury jest z natury wadliwa dla programistów?** Jakie zmiany w układzie klawiatury mogą najbardziej zwiększyć Twoją produktywność? _Edytuj_ Odpowiadając, pamiętaj, że istnieje wiele różnych czynników, które mogą sprawić, że układ klawiatury będzie wadliwy. Na przykład, jeśli piszesz tak szybko, jak uważasz, że musisz, ale naciskanie zwykłych klawiszy jest niewygodne, wspomniany układ klawiatury może zostać uznany za wadliwy.


title: Wskazówki dotyczące wyboru narzędzi do tworzenia wieloplatformowej aplikacji mobilnej

text: Nie mam doświadczenia w tworzeniu aplikacji mobilnych, nie mam nawet bogatego urządzenia mobilnego (mogę wysyłać SMS-y z mojego telefonu komórkowego :) Mam duże doświadczenie w sieci, .NET i Java, ale jestem otwarty na programowanie w dowolnym języku / platformie . Muszę kierować reklamy co najmniej na urządzenia iPhone, Android i Blackberry. Poszukuję wskazówek dotyczących odpowiedniego zestawu narzędzi do opracowania aplikacji przeznaczonej na te urządzenia, biorąc pod uwagę moje wymagania. Dużym plusem byłby łatwy model wdrażania. Mam pewne pojęcie o różnicy między aplikacjami natywnymi a aplikacjami mobilnymi na urządzeniach, a później wydaje się, że może to być dobry wybór pod względem obsługi wielu platform i łatwego wdrażania, ale potrzebuję dostępu do niektórych informacji o urządzeniu. Obecnie mam dość prostą aplikację Java Swing, która jest obsługiwana przez usługi sieciowe JSON. Aplikacja jest uruchamiana automatycznie, gdy użytkownik loguje się na swoim komputerze za pomocą skryptu logowania (jest wdrażany w sieci korporacyjnej). Użytkownik otrzymuje informacje w formacie HTML i klika przycisk, aby odpowiedzieć na pytanie. O to chodzi! Wymagania podstawowe * Musi być w stanie uzyskać informacje identyfikujące użytkownika z urządzenia mobilnego i wysłać je na serwer; klient Swing wysyła konto Windows i nazwę domeny. * Bardzo chciałby pobrać lokalną datę i czas urządzenia mobilnego i wysłać je do serwera * Musi być w stanie mieć opisany wcześniej przepływ pracy GUI: przedstawić zawartość użytkownikowi, użytkownik „klika” przycisk, aby odpowiedzieć. * Musi być w stanie komunikować się z usługą internetową JSON; w razie potrzeby może użyć innego kodowania danych, ale wystarczy być w stanie komunikować się przez HTTP (chyba że w świecie mobilnym rzeczy są bardzo różne i nie wiem, o czym mówię!) Miło mieć wymagania * Render Fragmenty HTML dla treści (jeśli nie jest to możliwe, można je rozebrać do zwykłego tekstu) * Umiejętność „kliknięcia” linku, aby wysłać wiadomość e-mail w celu uzyskania pomocy / opinii * „Kliknij” link do strony internetowej z informacjami o tym, jak dobrze, że użytkownik odpowiada na jego pytania; może również wbudować to w aplikację, jeśli jest to aplikacja mobilna. * Umiejętność budowania pewnego rodzaju opcji użytkownika "dialog" * Renderowanie małych obrazków wraz z treścią; obecnie zdjęcia są tylko zasobami http. Z góry dziękuję!


title: Dlaczego wątki użytkowników są mapowane na wątki jądra

text: Ponieważ wątki użytkownika są mapowane na wątki jądra, dlaczego nie utworzymy wszystkich wątków jako wątków jądra, które są procesem z **zerowym** wątkiem użytkownika. Czy mapowanie wątku użytkownika na wątek jądra nie powoduje narzutu?


title: Czy licencja MIT pozwala mi na stworzenie produktu, który jest front-endem dla innego produktu z licencją MIT?

text: Od kilku lat zmagam się ze strefami czasowymi online. Ponieważ mam tego dość, chcę stworzyć rozszerzenie do Chrome, które wykorzystuje moment.js, aby móc wkleić reprezentację czasu i zwróci czas w bieżącej strefie czasowej użytkownika. Jest to w zasadzie interfejs graficzny dla moment.js. Wypuściłbym to za darmo w sklepie internetowym Chrome (i dziwię się, że takie rozszerzenie do Chrome jeszcze nie istnieje). Czy pozwala na to licencja MIT?


title: Jak pobierać opłaty za projekty freelancerskie?

text: Jestem nowym freelancerem, głównie zajmującym się tworzeniem stron internetowych, a mój pierwszy projekt wykorzystywał (X)HTML/CSS/PHP/MySQL/jQuery do małej niestandardowej sieci społecznościowej, takiej jak system z wyszukiwarką/formularz kontaktowy/system administracyjny. Opłaciłem ten projekt co godzinę około 10 USD/h. Znowu była to moja pierwsza praca na zlecenie i naprawdę uważam, że cena była zbyt niska. Więc jak sugerowałbyś mi, abym kontynuował zarzuty?


title: Ocena przestrzeni nazw PHP

text: Jestem na etapie przedpremierowym projektu PHP o otwartym kodzie źródłowym, który mam nadzieję zostanie wykorzystany przez innych programistów w ich własnych projektach. Projekt obecnie nie obsługuje przestrzeni nazw i próbuję ocenić, czy powinien używać przestrzeni nazw lub konwencji nazewnictwa PEAR z Dir_Subdir_Class, która wydaje się mieć wszystkie te same korzyści techniczne bez niektórych wad. Szczerze mówiąc, nie jest to łatwy wybór. Kilka punktów do rozważenia przeciwko przestrzeniom nazw: * Jeden ze sposobów, w jaki mój projekt próbuje się wyróżnić, dostarczając prostsze API niż inne podobne projekty. Ponieważ przestrzenie nazw są nowe, a także dlatego, że są bardziej skomplikowane niż konwencja nazewnictwa PEAR, wprowadzenie ich do bazy kodu sprawi, że mój projekt będzie mniej prosty w użyciu. Wdrażając je, tracę pewne zróżnicowanie pod względem łatwości obsługi. * Chociaż widzę pewne korzyści dla przestrzeni nazw, nie wydają się one rozwiązywać problemu, który musi być rozwiązany w nowoczesnym produkcie PHP, który używa konwencji nazewnictwa PEAR. Konflikty nazewnictwa podczas korzystania z mojego projektu powinny być minimalne, jeśli nie istnieją. * Ten artykuł daje mi trochę przerwy w przyjmowaniu przestrzeni nazw, ponieważ ich implementacja była mniej niż gwiezdna. * Waham się też, czy nie wskoczyć na modę, która może nigdzie nie iść. Ponieważ przestrzenie nazw są nową funkcją w PHP, nie jestem jeszcze przekonany, że staną się standardem. * Zgodność. Prawie cały kod PHP, jaki kiedykolwiek napisano, nie używa przestrzeni nazw, ponieważ jest to nowa funkcja. Inne biblioteki byłyby niezgodne bez konwersji. Kilka punktów dotyczących używania przestrzeni nazw: * Percepcja. Gdyby przestrzenie nazw stały się standardem i najlepszą praktyką, mój projekt szybko mógłby zostać uznany za nieprofesjonalny i przestarzały bez nich. * Konkurencja. Podczas gdy niektóre konkurencyjne projekty PHP zaczynają używać przestrzeni nazw w swoich najnowszych wersjach, wiele z nich jeszcze nie wykonało tego kroku. Zrobienie tego teraz może dać mojemu projektowi przewagę nad innymi projektami. * Przyszła praca byłaby łatwiejsza, gdybym dokonał zmiany teraz, zanim projekt zostanie upubliczniony, a nie po, gdzie musiałbym przez jakiś czas wspierać dwie wersje. * Chcę wspierać najlepsze praktyki i jeśli przestrzenie nazw stają się najlepszą praktyką dla PHP, mój projekt powinien z nich korzystać. Z tego, co mogę powiedzieć, musisz wybrać jedną lub drugą drogę; nie możesz zrobić obu. Czy są jakieś kwestie, których nie wziąłem pod uwagę? Czy są jakieś obiektywne oznaki (proszę żadnych flamewarów), które wskazują na lub przeciw, aby przestrzenie nazw stały się profesjonalnym standardem dla PHP? Byłbym wdzięczny za wszelkie spostrzeżenia lub zasoby, którymi chciałbyś się podzielić, ponieważ muszę wkrótce podjąć decyzję.


title: Jaki jest dobry sposób na przedstawienie relacji wiele-do-wielu między dwiema klasami?

text: Powiedzmy, że mam dwa typy obiektów, A i B. Relacja między nimi jest typu wiele-do-wielu, ale żaden z nich nie jest właścicielem drugiego. Zarówno instancje A, jak i B muszą być świadome połączenia; to nie tylko jeden sposób. Możemy więc zrobić tak: class A { ... private: std::vector<B *> Bs; } class B { private: std::vector<A *> As; } _**Moje pytanie brzmi:_ gdzie mam umieścić funkcje do tworzenia i niszczenia połączeń?** Czy powinno to być A::Attach(B), które następnie aktualizuje wektory A::Bs i B::As? A może powinien to być B::Attach(A), co wydaje się równie rozsądne. Żadne z tych nie wydaje się właściwe. Jeśli przestanę pracować z kodem i wrócę po tygodniu, na pewno nie będę mógł sobie przypomnieć, czy powinienem robić A.Attach(B) czy B.Attach(A). Być może powinna to być funkcja taka jak ta: CreateConnection(A, B); Ale tworzenie funkcji globalnej również wydaje się niepożądane, biorąc pod uwagę, że jest to funkcja przeznaczona do pracy tylko z klasami A i B. **Inne pytanie:** jeśli często napotykam ten problem/wymaganie, czy mogę jakoś go rozwiązać? ? Być może klasa TwoWayConnection, z której mogę wyprowadzić lub używać w klasach, które współdzielą tego typu relacje? Jakie są dobre sposoby radzenia sobie z tą sytuacją... Wiem, jak poradzić sobie z sytuacją jeden-do-wielu "C jest właścicielem D", ale ta jest trudniejsza. Edycja: żeby było to bardziej jednoznaczne, to pytanie nie dotyczy kwestii własności. Zarówno A, jak i B są własnością innego obiektu Z, a Z zajmuje się wszystkimi kwestiami własnościowymi. Interesuje mnie tylko tworzenie/usuwanie powiązań wiele-do-wielu między A i B.


title: Czy typy są usuwane w Haskell?

text: Haskell ma pojęcie „funkcji ogólnych”, które ma pewne podobieństwo do zwykłego seplenienia – nie mając ani doświadczenia z Haskellem, ani z powszechnym sepleniem, mógłbym być tutaj bardzo przybliżony. Oznacza to, że można zdefiniować ogólne udogodnienie `to_string`, aby zdefiniować reprezentację ciągu dla wszystkich typów. Oczywiście w szczególnych przypadkach funkcja musi być zdefiniowana, ale istnieje funkcja `to_string`, której podpisem jest `α → string`. Czy typy są usuwane w Haskell, tak jak w OCaml? Jeśli tak, w jaki sposób implementacja „funkcji ogólnych” w Haskell różni się od tej w zwykłym sepleniu, gdzie typy są dynamiczne, a zatem nie są wymazane? Rozumiem, że szczegóły implementacji są specyficzne dla kompilatora, ale prawdopodobnie istnieją przepisy wspólne dla wielu lub wszystkich implementacji.


title: Jak przetestować swój kod w Pythonie inaczej niż ręcznie?

text: Jestem przyzwyczajony do testowania użytkowników w Javie, a także ręcznie testuję każdą sekcję kodu, którą piszę, ale teraz chcę to zautomatyzować. Nie ma GUI dla tego projektu, więc testowanie użytkowników nie jest wymagane i mogę skupić się na testowaniu kodu. Faktem jest, że nie wiem, jak testować kod inaczej niż przez ręczne wywołanie metod, przekazanie do nich różnych parametrów i sprawdzenie wartości zwracanej. Przypuszczam, że automatyzacja jest rozwiązaniem, ale nie mam pojęcia, jak przejść z testów ręcznych do zautomatyzowanych. Czy istnieją narzędzia, które mogą stworzyć dla mnie odpowiednie testy, czy też muszę pisać testy ręcznie? Co można zautomatyzować? Oto przykład kodu, który chcę przetestować. Czy muszę go jakoś przerobić, aby mógł być testowany jednostkowo? def netInfoToSend(tm, nasza_lub_wersja_ip, nasza_lub_addr_len, nasza_op_ip, version_their_ips, num_their_ips, len_their_ips, ich_ips): cellNetInfopkt = struct.pack(">I", time.time()) # Liczba adresów [1 kt] #= netstructInfo .pack("B", num_their_ips) # Adresy OR [zmienna] print "peerAddress", peerAddress print "peerAddress type", type(peerAddress) cellNetInfopkt += struct.pack(">B", 4) cellNetInfopkt += struct .pack(">B", 4) cellNetInfopkt += struct.pack("B" * len(peerAddress), *peerAddress) cellNetInfopkt += struct.pack(">B", 1) # Format adresu to typ/ length/value # Adres tego OR [zmienna] cellNetInfopkt += struct.pack(">B", nasza_lub_ip_version) # IPV4 cellNetInfopkt += struct.pack(">B", nasz_lub_addr_len) cellNetInfopkt += struct.pack("B" * len(własny adres), *ow nAdres) zwróć komórkęNetInfopkt


title: Czy złą praktyką jest utrzymywanie skryptów schematu bazy danych (DDL) i skryptów manipulacji (DML) w różnych modułach?

text: mamy strukturę projektu, taką jak następujący moduł „wspólny moduł” zależy od modułu „baza danych modułu”, a niektóre inne moduły są zależne od modułu „wspólny moduł”, ale żaden inny moduł nie jest zależny od modułu „baza danych”. Wszystkie skrypty DML SQL są przechowywane w "module-shared", ale DDL są przechowywane w "module-database". * Zaletą tego projektu jest to, że nie musimy wypuszczać bazy danych, jeśli zmiany dotyczą DML w „współdzielonym module” i używać testów integracji bazy danych, aby upewnić się, że są one nadal kompatybilne. * Wadą jest to, że powoduje to pewne zamieszanie w wersjach. Na przykład możesz mieć "module-shared" 2.3.1 zależny od "module-database" 1.4.2 i ostatecznie zapomnimy, która wersja jest kompatybilna z którą. **Pytania:** Czy nie byłoby lepszym projektem, gdybyśmy mieli „bazę danych modułów”, która zawiera zarówno DDL, jak i DML (i wszystkie inne operacje na bazie danych, jeśli takie istnieją), a współdzielone moduły zawierają wszystko, co ma, z wyjątkiem operacji na bazie danych? Jakie masz doświadczenia związane z architekturą wielowarstwową? czy zawsze używasz modułów do segregacji poziomów? Czy masz doświadczenia, w których możesz mieć DAO i usługi w tym samym module? Jeśli tak, gdzie trzymałeś skrypty schematu DDL? **_UPDATE:_** zapomnij wspomnieć, że DDL jest wersjonowany przy użyciu systemu wersjonowania skryptów bazy danych, takiego jak flyway. Aby wszystkie zmiany DDL były przyrostowe Uwaga: np. moduł może być modułem gradle, modułem maven itp. Uwaga: staram się nie być stronniczy podczas zadawania tego pytania. Więc proszę załóż, że nie mam żadnych preferencji co do żadnego rozwiązania. :)


title: Przekazywanie wartości konfiguracyjnych do metody wykorzystującej zasady SOLID

text: Mam klasę pomocniczą poczty e-mail, która ma metodę, która wysyła e-mail: private static class EmailHelper { public static void SendEmail(string from, string to, string subject, string message) { MailMessage msg = new MailMessage(from, to, subject, body ); var klient = nowy SmtpClient("my.smpthost.com"); //to zostanie przeniesione do konfiguracji. klient.Wyślij(msg); } } Mój ciąg hosta SMTP zostanie umieszczony w moim pliku konfiguracyjnym. Pytanie brzmi, jaki jest zalecany sposób przekazania hosta smtp do tej metody? Czy powinienem mieć konstruktora w tej klasie, który pobiera ciąg SMTP? A może powinienem przekazać smtp jako piąty parametr? A może ta metoda powinna bezpośrednio czytać z konfiguracji? (Zdaję sobie sprawę, że może być kilka różnych sposobów, aby to zrobić, ale staram się zrozumieć zalecane podejście, a przynajmniej podejścia, które NIE są zalecane, pamiętając o zasadach SOLID.)


title: Ograniczenie pracy w toku – czy ktoś naprawdę powinien podjąć jakieś zadanie?

text: Pracuję w środowisku Scrum i otrzymujemy informację zwrotną od PO, że wszystkie historie, które są w toku, powinny zostać zamknięte przed wprowadzeniem kolejnych historii. Celem jest zmniejszenie WIP i akceptacja historii, co jest dobrym celem. Ale czy naprawdę byłoby mądrze, aby na przykład administrator DBA uruchamiał ręczny skrypt testowy, aby zamknąć konkretną historię, kiedy licznik czasu, który wykonuje różne zadania „grunt”, będzie dostępny jutro? Wydaje się, że w tym kierunku chce podążać nasza PO, ale wydaje mi się, że jest nieefektywny. Dzieje się tak, że jutro czas na część etatu jest dostępny, ale nie ma dla nich zadań, jedyne zaległe są „powyżej ich poziomu płac”. Wygląda więc na napięcie pomiędzy redukcją WIP a tym, aby ludzie pracowali nad rzeczami, które „mają sens”. Czy uważasz, że lepiej dla zespołu jest, aby ktoś pracował nad jakimkolwiek zadaniem? A może dłużej pracujesz, aby niektórzy ludzie robili to, co robią najlepiej?


title: Czy mogę sprawdzić wygenerowany kod w kontroli źródła, czy nie?

text: Zajmuję się tworzeniem aplikacji .Net, która używa buforów protokołu Google. W przeszłości aplikacja wykorzystywała podejście zalecane przez zespół protobuf-net polegające na dekorowaniu klas atrybutami zamiast używania plików .proto. Obecnie jestem w trakcie migracji części klienta aplikacji do innej technologii i istnieje silne pragnienie, aby zacząć używać plików .proto jako autorytetu, aby te dwie technologie mogły ze sobą współpracować. Moim planem jest automatyczne generowanie C# z .proto, jednak moje pytanie brzmi, czy powinienem sprawdzić pliki wynikowe z powrotem w kontroli źródła? Uwaga Spodziewam się, że proces generowania kodu będzie szybki. Jak wybrać odpowiednie podejście do powyższego przypadku? Co jest uważane za najlepszą praktykę?


title: Czy mogę używać zmiennych klasy podrzędnej w jej klasie nadrzędnej?

text: Programuję w Objective C, iOS. Tworzę „Klasę A”, która jest klasą nadrzędną, a „Klasa B” dziedziczy po „Klasie A”. Teraz mam zmienne `Class B`, których muszę również użyć w `Class A`. A także „Klasa C”, „Klasa A” dodają „Klasę C” (nie dziedziczy), a ja chcę używać zmiennych „Klasy B” w „Klasie C”. Jak mogę uzyskać dostęp? Utworzyłem również obiekt, ale nie działa, czy jest to możliwe?


title: Uruchom na zdaniach w piśmie technicznym

text: To tylko pytanie do przemyślenia. Kiedy piszesz dokumentację techniczną i komentarze programistyczne, czy zdarza Ci się pisać powtarzające się zdania, aby być bardziej precyzyjnym? Czy pakowanie większej ilości informacji technicznych w jedno zdanie jest lepsze niż tworzenie wielu małych zdań z odrobiną informacji technicznych? Wiem, że lepiej mieć wiele małych klas w swoich własnych plikach. Może to nie dotyczy pisania?


title: Zaplanuj zmienne i zależności połączeń

text: Chciałbym napisać projekt mojego programu, aby lepiej zrozumieć zależności i wywołania. Wiem, że istnieją diagramy klas, które pokazują zmienne dziedziczenia i atrybutów. Jednak chciałbym również udokumentować parametry wejściowe do funkcji metod, a w szczególności, które wywołują funkcje metody wykonywane wewnątrz (np. na parametrach wejściowych). Czasami może być przydatne pokazanie, w jaki sposób rzeczywiste obiekty są połączone (jeśli istnieje standardowa struktura). W ten sposób mogę lepiej zrozumieć moduły i projekt przed rozpoczęciem programowania. Czy możesz zaproponować metodę wykonania tego projektu oprogramowania? Powinno to być _jeden do jednego_ do programowania struktury kodu, aby naprawdę zauważyłem wszystkie dziwactwa wcześniej (zamiast projektowania wysokiego poziomu, w którym trudno jest zaimplementować bez dalszej pracy). Może jakiś specjalny schemat lub narzędzie lub kombinacja? Jest to _statyczna_ zależność i projektowanie wywołań, a nie monitorowanie wykonania zależne od czasu. (Używam Pythona, jeśli masz jakieś specjalistyczne zalecenia).


title: Jakie korzyści przyniosło Ci dbanie o dług techniczny?

text: Ten artykuł o długu technicznym ma kilka dobrych punktów, w tym: > Praca nad „sprawami technicznymi” działa najlepiej, gdy opiera się na historiach. > Baza kodu prawdopodobnie wszędzie wymaga pracy, ale zapłata zostanie > otrzymana tylko tam, gdzie kod będzie pracował > z powodów skierowanych > do użytkownika. Jeśli żadne historie nie przejdą przez jakiś brudny obszar, praca > nad nim jest w dużej mierze zmarnowana. > > Dlatego wolę podejście polegające na przyjmowaniu historii jak zwykle (ale prawdopodobnie > mniej) i przestrzeganiu "zasady skautów" opuszczenia kempingu > > lepiej niż je znalazłeś. Innymi słowy, gdziekolwiek prowadzą nas historie, > piszmy więcej testów, refaktoryzujmy bardziej agresywnie. > > To podejście ma co najmniej następujące zalety: > > * utrzymuje „najrozsądniejszy” przepływ historii; > * zapewnia pomoc wszystkich talentów zespołu; > * umożliwia całemu zespołowi nauczenie się, jak zachować czystość kodu; > * skupia się na doskonaleniu dokładnie tam, gdzie jest to potrzebne; > * nie marnuje ulepszeń, które „mogą” być potrzebne; > Widziałem, że jakość kodu ma bardzo duży wpływ na długoterminową produktywność, więc uważam, że należy zająć się długiem technicznym. Myślę, że powyższy post ma sens, ale nie jestem pewien co do dwóch ostatnich punktów. Interesuje mnie poznanie prawdziwych doświadczeń związanych z czyszczeniem długu technicznego, nawet jeśli nie było to związane z historyjkami użytkowników. **Jakie pozytywne korzyści zaobserwowałeś dzięki uporządkowaniu bazy kodu i pozbyciu się długu technicznego? Jakich metod użyłeś do wykonania pracy?**


title: Różnica między Handlerem, Menadżerem i Kontrolerem

text: Czy jest jakaś różnica między nazwaniem klasy „Handler”, „Manager” lub „Controller”? IE: `Menedżer zakupów`, `PurchaseHandler`, `PurchaseController`. Czy te wystarczające przekazują to samo znaczenie, czy jest między nimi wyraźna różnica? Jeśli nie ma odpowiedzi niezależnej od języka, rozważ Javę jako język.


title: Jak rozumiem kod projektu open source?

text: Otwieram kod źródłowy i jest to folder po folderze nieskończonych plików, każdy z nieskończonymi liniami kodu, co nie ma dla mnie większego sensu, ponieważ nie mam kontekstu, a połowa z nich korzysta z funkcji importowanych z innych plików tylko po to, by było więcej mylące. Czy istnieje prosty sposób na poznanie struktury kodu aplikacji open source?


title: Jak często oczekuje się, że przeciętny programista osiągnie przepływ?

text: Ostatnio czytałem o flow i odkąd kilka razy doświadczyłem tego stanu, zastanawiałem się, jak często przeciętny programista jest w stanie pracować w tak skupiony i zrównoważony sposób. Czy wiesz, czy istnieją jakieś **badania empiryczne** na temat tego, jak często przeciętni programiści osiągają przepływ w swojej codziennej aktywności i jak może to wpłynąć na produktywność? Nie proszę o zwykłą listę odniesień do literatury (choć byłoby to ciekawe), ale także o krótki opis takich badań, jeśli takie istnieją.


title: Konkretne typy - zgodnie z opisem Stroustrup - C++ Programming Language 4th ed

text: Mam trudności z tą koncepcją. Do czego zmierza Stroustrup? Co jest szczególnego w klasie, której „reprezentacja jest częścią jej definicji”? Z czym kontrastuje „typ betonu”? (Zakładam, że kontrastuje to z „typem abstrakcyjnym”, ale ponieważ, AFAIK, nie możesz nawet stworzyć instancji typu abstrakcyjnego, wydaje się oczywiste, że nie możesz umieścić _tego_ na stosie, zainicjować go itp.) Czy istnieje coś takiego jak klasa, którą mógłbym utworzyć, co NIE pasowałoby do opisu „konkretnej klasy”? Zwykle uważam, że BS jest bardzo łatwe do naśladowania, ale brakuje mi tutaj sedna. > Podstawową ideą klas konkretnych jest to, że zachowują się „tak jak typy > wbudowane”. Na przykład liczba zespolona i liczba całkowita > o nieskończonej precyzji są bardzo podobne do wbudowanego int, z wyjątkiem tego, że mają swoją własną semantykę > i zestawy operacji. Podobnie wektor i łańcuch są > podobne do tablic wbudowanych, z wyjątkiem tego, że zachowują się lepiej (§ 4.2, 4.3.2, § > 4.4.1). > > Cechą charakterystyczną konkretnego typu jest to, że jego reprezentacja jest > częścią jego definicji. W wielu ważnych przypadkach, takich jak wektor, który > reprezentuje tylko jeden lub więcej wskaźników do większej liczby danych przechowywanych gdzie indziej, > ale jest obecny w każdym obiekcie konkretnej klasy.... W szczególności > pozwala nam > > • umieszczaj obiekty konkretnych typów na stosie, w statycznie przydzielonej > pamięci oraz w innych obiektach (§ 6.4.2); > > • odnoszą się bezpośrednio do obiektów (a nie tylko poprzez wskaźniki lub referencje); > > • inicjalizuj obiekty natychmiast i całkowicie (np. za pomocą konstruktorów; § > 2.3.2); oraz > > • kopiować obiekty (§ 3.3). > > Stroustrup, Bjarne (2013-07-10). Język programowania C++ (4th Edition) > (sekcja 16.3 konkretne klasy; lokalizacje Kindle 2373-2386). Pearson > Edukacja. Wersja Kindle.


title: Skuteczne strategie lokalizacji w .NET

text: Zajmuję się tworzeniem interfejsu użytkownika dla aplikacji .NET MVC, która w niedalekiej przyszłości będzie wymagała międzynarodowej lokalizacji wszystkich treści. Ogólnie dobrze znam .NET, ale nigdy nie miałem projektu, który wymagałby tak dużego skupienia się na dostępności międzynarodowej. Projekt jest początkowo wykonywany w języku angielskim. Jakie działania powinienem podjąć w tym momencie, aby ułatwić wdrożenie lokalizacji w przyszłości?


title: Czy poniższe diagramy są poprawne dla metodologii RAD i Agile?

text: Nie wiem, czy byłaby to właściwa strona wymiany stosów, aby zadać to pytanie, ale badałem metodologie RAD (Rapid Application Development) i Agile i próbowałem znaleźć ich diagramy, ale jeśli google obrazy to wymyślę wiele różnych schematów. Więc na podstawie obrazów narysowałem własne diagramy. Diagram RAD jest podobny do tego pokazanego w wikipedii, ale jedyną różnicą jest to, że zmieniam dolne kółko z przełączenia na implementację. W przypadku metody Agile, ponieważ jest taka sama jak metoda kaskadowa, ale jedyną różnicą jest to, że możesz cofnąć się do poprzednich kroków, w zasadzie narysowałem diagram kaskadowy, ale zmieniłem strzałki, aby wskazać, że możesz się cofnąć. Moje pytanie czy poniższe schematy są odpowiednie dla zamierzonych metodologii? RAD: ![podaj tutaj opis obrazka](http://i.stack.imgur.com/4MejT.png) Agile: ![podaj tutaj opis obrazka](http://i.stack.imgur.com/2Tlar. png) AKTUALIZACJA: Metoda wodospadu: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/xiA2v.png)


title: Czy do dobrych testów jednostkowych wymagane są dane specyficzne dla aplikacji?

text: Piszę testy jednostkowe dla dość prostej funkcji, która zależy od dość skomplikowanego zestawu danych. Zasadniczo obiekt, którym manipuluję, reprezentuje wykres, a ta funkcja określa, czy wykreślić wykres liniowy, słupkowy lub kołowy na podstawie danych, które wróciły z serwera. Jest to uproszczona wersja, wykorzystująca jQuery: setDefaultChartType: function (graphObject) { var prop1 = graphObject.properties.key; var numCols = 0; $.each(graphObject.columns, function (colIndex, column) { numCols++; }); if ( numCols > 6 || ( prop1 > 1 && graphObject.data.length == 1) ) { graphObject.setChartType("linia"); } else if ( numCols <=6 && prop1 == 1 ) { graphObject.setChartType("bar"); } else if ( numCols <=6 && prop1 > 1 ) { graphObject.setChartType("pie"); } } Moje pytanie brzmi, czy powinienem używać danych pozornych, które są pobierane z rzeczywistej bazy danych? Czy mogę po prostu sfabrykować dane pasujące do różnych przypadków? Obawiam się, że fabrykowanie danych nie ujawni błędów wynikających ze zmian w bazie danych, ale z drugiej strony wymagałoby to dużo więcej wysiłku, aby dane testowe były aktualne, co nie wydaje mi się konieczne.


title: Rzeczy do przejęcia kontroli, gdy zespół nie radzi sobie dobrze?

text: Pracuję nad projektem ERP, w którym dwóch członków (odświeżaczy) w moim zespole nie radzi sobie dobrze (w przypadku małych zadań). Ich praca jest zaśmiecona błędami i innymi problemami. Ponieważ jestem kierownikiem zespołu w tym projekcie, muszę napisać ich kod/zadania. To może być dla mnie dużym obciążeniem, ponieważ muszę codziennie przyspieszać rzeczy, aby wykonać moją pracę, a potem ich! > Co byś zrobił w tej sytuacji. Właściwie czuję się dobrze w tej pozycji, ponieważ uczę się wielu rzeczy, ale czasami nie mogę tego tolerować!


title: Jak nazywasz programistów pakietu testowego, uruchamianych przed zameldowaniem?

text: Pracuję nad projektem, w którym dodajemy automatyczne testowanie do istniejącego projektu. Zaczynamy od centralnego komponentu i konfigurujemy zarówno testy jednostkowe na poziomie modułu kodu, jak i testy, które działają na całym komponencie, aczkolwiek w środowisku deweloperskim. Intencją jest, że ten zestaw testów musi przejść przed zaewidencjonowaniem kodu i będzie uruchamiany przez system ciągłej integracji w każdej gałęzi programistycznej. Jak powinniśmy to nazwać? W tej chwili nazywamy to „deweloperskimi testami jednostkowymi”, ale pedantyczna strona mnie mówi, że to nie jest w porządku, ponieważ zawiera więcej niż testy jednostkowe. Nasza wizja jest taka, że z czasem ten pakiet będzie się powiększał i zawierał pełne testy akceptacyjne produktu. Jakieś dane wejściowe? A może powinniśmy przestać się kłócić o nazwiska i iść pisać testy? ### Zaktualizuj Wszystkim, dzięki za dobrą dyskusję! Myślę, że wniosek, do którego dochodzę, jest taki, że tak naprawdę nie ma „wspólnej” definicji – każdy projekt/zespół wymyśla nazwy, które są najbardziej sensowne dla tego projektu, w zależności od technologii (Java, C#, ruby itp.) i metodologie (old-skool waterfall, Scrum, XP, itp.) w użyciu.


title: Czy programiści czasami celowo nadmiernie komplikują kod?

text: Wiele razy wydaje się, że na stackoverflow ludzie (zwłaszcza programiści) mają tendencję do nadmiernego komplikowania rozwiązania problemu, gdy rozwiązanie jest znacznie bardziej skomplikowane niż pierwotny problem? W żadnym wypadku nie jestem ekspertem, ale wiele razy staram się zastosować najprostsze rozwiązanie, które działa (i oczywiście to nie działa WSZĘDZIE), ale odniosłem całkiem niezły sukces w sugerowaniu prostych rozwiązań w pracy, które wydają się ludziom przeoczyć dla DUŻO bardziej skomplikowanych rozwiązań? Czy to normalna rzecz dla programistów… czy po prostu nie myślę we właściwej perspektywie.


title: Jak radzić sobie z pracoholikiem Supervisor, który jest twoim dobrym przyjacielem?

text: Największy problem, jaki ktokolwiek może kiedykolwiek napotkać… czyli główny przypadek problemu, o którym wspomniałem w poprzednim pytaniu. Ten człowiek był jednym z moich najlepszych kolegów, z którymi pracowałem 2 lata temu, gdzie nie był odpowiedzialny za kierownika zespołu. Po 2 latach dostałam szansę pracy w podobnym projekcie pod jego okiem. Znałem go w dawnych czasach projektowych i jest PRACOHOLIKIEM, ale nigdy nawet nie przyśniło mi się, że będzie taki sam po zostaniu przełożonym i zrujnuje sen moim i moim kolegom. Jak radzę sobie z jego zachowaniami, takimi jak: 1. Uważa, że powinniśmy codziennie głosić nasz kodeks i to jest nasz chleb powszedni. 2. Traktuje wszystkich swoich podwładnych jako podrzędnych, a jego pomysł/rozwiązanie jest ostateczne. Silny ważny i bojowy punkt (który w większości wymyśliłem) może tylko zmienić jego zdanie. 3. Żal mi moich współtwórców, kiedy traktuje ich jak niewolników, którzy piszą kod na życie. 4. Nigdy nie zachęca współpracowników, wątpi w pracę wszystkich... dla niego 100% wydajności to 100xN% wysiłku włożonego przez programistę. 5. Nigdy nie uważa nikogo za indywidualność lub wolność wyrażania się... demotywuje do piekła. 6. Weekendy to jego ulubione dni pracy... wysyła maile, przegląda komentarze itp., które wywierają dodatkową presję na grupę rówieśniczą. 7. Nie ma nic przeciwko temu, jak długo palimy lampkę nocną... ale powinniśmy być w biurze następnego dnia punktualnie o 8:30. 8. Jest jedyną osobą, którą widziałem, która pracuje przez co najmniej 8 godzin, kiedy bierze urlop i oczekuje, że inni będą pracować, nawet jeśli jesteś na wakacjach lub w domu. 9. Deweloper, który jest dla niego faworytem, ma zawsze rację.. reszta wszyscy się mylą. 10. Jeśli może pracować przez 10 godzin, oczekuje, że każdy będzie z nim pracował. Jeśli nie śpi w wieku 12 lat, to dlaczego programista miałby spać... powinni z nim czuwać. Jedynym człowiekiem, który był w stanie sobie z nim poradzić i przy minimalnym doświadczeniu, jak wspomniałem powyżej, z jego zachowaniem, jestem ja, tylko dlatego, że jest moim dobrym przyjacielem. Moi rówieśnicy i ja nie znajdujemy żadnego pożytku z udzielania informacji zwrotnych na temat jego zachowania, ponieważ zawsze mówi, że jestem bardzo surowy i nikt nie może zmienić mojej decyzji. Jak mogę mu pomóc zmienić podejście do pracy... czy się mylę?


title: Jak sprawić, by aplikacja internetowa komunikowała się między użytkownikami?

text: Zajmuję się tworzeniem multipalyerowej aplikacji internetowej dla Anti-Chess. Będzie hostowany w Google App Engine. Mam kilka pytań: Jak skłonić dwóch różnych użytkowników, którzy otworzyli aplikację internetową w swojej przeglądarce, aby komunikowali się ze sobą. P2P lub przez serwer. Jeśli przez serwer, czy mogę przechowywać na nim jakieś ruchy (w szczególności mówiąc o GAE), aby później testować boty? Jak zaimplementować to połączenie P2P/serwer. Jako programista znam Jacka na temat sieci. Ale słyszałem o rzeczach takich jak programowanie gniazd, żądanie HTTP itp., czego mogę / powinienem użyć. I gdzie mogę o tym przeczytać! Jeśli nie zdecyduję się na GAE, czy kosztowałoby mnie zbyt dużo miejsca na serwerze i możliwości hostingu? A ludzie mówią mi, że wdrożenie aplikacji jest trudniejsze niż na GAE. Czy tak jest. Gdzie mogę przeczytać na temat wdrażania aplikacji internetowej na serwerach. Gdzie idzie kod do sieci? Będę używał Django z pythonem jako frameworkiem internetowym, front-end to HTML, CSS i JavaScript. Czy powinienem stworzyć osobny moduł dla metod sieciowych, a następnie wprowadzić wywołania metod tam, gdzie jest to potrzebne w grze? Ktoś zasugerował mi użycie oprogramowania Unity do programowania. Czy to dobrze, czy ułatwia pracę? Czy obejmie wszystkie części rozwoju, front-end i back-end oraz wdrożenie? Uwaga: jestem pierwszym zegarem w aplikacji internetowej, wcześniej kodowałem gry, ale zawsze bez GUI. A także bez trybu wieloosobowego przez możliwości sieciowe!


title: Czy mogę przekonwertować sekcje ALL CAPS licencji OSI na zwykłą wielkość liter (i pogrubioną)?

text: **Aktualizacja:** Mam odpowiedź od FSF na ten temat w odpowiedziach Od odpowiedzi do Czy mogę usunąć wersaliki i skrócić zastrzeżenie na mojej licencji?, wygląda na to, że sekcje APP CAPS w oprogramowaniu Licencja ma głównie na celu dostarczenie dodatkowej legalnej amunicji i zwiększenie wagi tych sekcji. Z drugiej strony TEKST WIELKIMI LITERAMI jest trudniejszy do odczytania w formie akapitu. Co więcej, dzięki formatom takim jak przecena, możemy zapewnić czystsze alternatywy dla pogrubiania tekstu wielkimi literami. Tak więc chciałbym zamienić (na przykład) klauzulę gwarancyjną licencji MIT z: OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI SPRZEDAŻY, PRZYDATNOŚĆ DO OKREŚLONEGO CELU I NIENARUSZALNOŚCI. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY NA TEMAT UMOWY, CZYNNEGO CZYNNOŚCI, WYNIKAJĄCEJ Z OPROGRAMOWANIA LUB W ZWIĄZKU Z UŻYTKOWANIEM LUB INNYCH OPROGRAMOWANIE. to (przecena): **Oprogramowanie jest dostarczane „tak jak jest”, bez jakiejkolwiek gwarancji, wyraźnej lub dorozumianej, w tym między innymi gwarancji przydatności do obrotu, przydatności do określonego celu i nienaruszania praw. W żadnym wypadku autorzy lub właściciele praw autorskich nie ponoszą odpowiedzialności za jakiekolwiek roszczenia, szkody lub inną odpowiedzialność, czy to z tytułu umowy, czynu niedozwolonego, czy w inny sposób, wynikającą z, z lub w związku z oprogramowaniem lub użytkowaniem lub innymi transakcjami w oprogramowanie.** Czy jest to legalnie zaciemnione terytorium? (szczególnie z GPL?)


title: Co to jest „delegowanie składniowe”

text: Steve Yegge wspomina o tym w When Polymorphism Fails: > ... Myślę, że oznacza to, że typ jest najlepiej reprezentowany przez właściwości, a nie przez klasy, ze względu na wrodzoną nieelastyczność klas. Ale w > "tradycyjnych" językach, takich jak C++ i Java, sprawia to, że udostępnianie kodu jest nieco > trudniejsze z powodu braku obsługi **delegacji składniowej**. ... (podkreślenie dodane) Wyszukiwarka Google pokazuje adres Stanu Cebuli przy ścianie Larry'ego.


title: Połączenia proxy nie działają zgodnie z oczekiwaniami

text: Modyfikowałem aplikację, aby mieć czystszy podział klient/serwer, aby umożliwić dzielenie obciążenia i udostępnianie zasobów itp. Wszystko jest napisane w interfejsie, więc łatwo było dodać warstwę zdalnego dostępu do interfejsu za pomocą proxy. Wszystko działało dobrze. Następną fazą było dodanie warstwy pamięci podręcznej do interfejsu i znowu działało to dobrze, a prędkość została poprawiona, ale nie tak bardzo, jak bym się spodziewał. Po oględzinach stało się jasne, co się dzieje. Jestem pewien, że takie zachowanie było już wielokrotnie widziane i prawdopodobnie istnieje wzorzec projektowy do rozwiązania problemu, ale umyka mi i nie jestem nawet pewien, jak to opisać. Najłatwiej to wyjaśnić na przykładzie. Wyobraźmy sobie interfejs IMyCode { List<IThing> getLots( List<String> ); Irzecz getOne ( id ciągu ); } Metoda getLots() wywołuje getOne() i wypełnia listę przed zwróceniem. Interfejs jest implementowany na kliencie, który jest proxy do klienta zdalnego, który następnie wywołuje serwer zdalny, który z kolei wywołuje implementację na serwerze. Na warstwie klienta i serwera znajduje się również pamięć podręczna. Mamy więc :- Interfejs klienta | Pamięć podręczna klienta | Klient zdalny | Serwer zdalny | Pamięć podręczna serwera | Interfejs serwera Jeśli wywołamy getOne("A") na interfejsie klienta, wywołanie zostanie przekazane do pamięci podręcznej klienta, co powoduje błąd. To następnie wywołuje klienta zdalnego, który przekazuje wywołanie do zdalnego serwera. To następnie wywołuje pamięć podręczną serwera, która również powoduje błędy, a więc wywołanie jest ostatecznie przekazywane do interfejsu serwera, który faktycznie pobiera IThing. Z kolei pamięć podręczna serwera jest wypełniona iw końcu również pamięć podręczna klienta. Jeśli getOne("A") zostanie ponownie wywołane w interfejsie klienta, pamięć podręczna klienta zawiera dane i są one natychmiast zwracane. Gdyby drugi klient nazwał getOne("B"), wypełniłby pamięć podręczną serwera literą "B", jak również własną pamięć podręczną klienta. Następnie, gdy pierwszy klient wywołuje getOne("B"), pamięć podręczna klienta nie działa, ale pamięć podręczna serwera zawiera dane. To wszystko zgodnie z oczekiwaniami i działa dobrze. Teraz wywołajmy getLots( [ "C", "D" ] ). Działa to tak, jak można by się spodziewać, wywołując dwukrotnie getOne(), ale jest tu subtelność. Wywołanie getLots() nie może bezpośrednio korzystać z pamięci podręcznej. Dlatego kolejność polega na wywołaniu interfejsu klienta, który z kolei wywołuje klienta zdalnego, a następnie serwera zdalnego i ostatecznie interfejsu serwera. To następnie wywołuje getOne() w celu wypełnienia listy przed powrotem. Problem polega na tym, że wywołania getOne() są spełnione na serwerze, podczas gdy w idealnym przypadku powinny być spełnione przez klienta. Jeśli wyobrazisz sobie, że łącze klient/serwer jest naprawdę wolne, staje się jasne, dlaczego wywołanie klienta jest bardziej wydajne niż wywołanie serwera, gdy pamięć podręczna klienta zawiera dane. Ten przykład ma na celu zilustrowanie tej kwestii. Bardziej ogólny problem polega na tym, że nie można po prostu dodawać do interfejsu warstw proxy i oczekiwać, że będzie działać tak, jak można sobie wyobrazić. Gdy tylko połączenie przechodzi „przez” proxy, kolejne połączenia są po stronie proxy, a nie „własnej”. Czy nie nauczyłem się lub nie nauczyłem się czegoś poprawnie? Wszystko to jest zaimplementowane w Javie i nie korzystałem z EJB. Wydaje się, że przykład może być mylący. Problem nie ma nic wspólnego z wydajnością pamięci podręcznej. Jest to bardziej związane z iluzją stworzoną przez użycie proxy lub ogólnie technik AOP. Gdy masz obiekt, którego klasa implementuje interfejs, istnieje założenie, że wywołanie tego obiektu może wykonać dalsze wywołania tego samego obiektu. Na przykład public String getInternalString() { return InetAddress.getLocalHost().toString(); } public String getString() { return getInternalString(); } Jeśli otrzymasz obiekt i wywołasz getString(), wynik zależy od tego, gdzie działa kod. Jeśli dodasz zdalny serwer proxy do klasy, wynik może być inny dla wywołań getString() i getInternalString() w tym samym obiekcie. Dzieje się tak, ponieważ początkowe wywołanie zostaje „odblokowane” przed wywołaniem rzeczywistej metody. Uważam, że jest to nie tylko mylące, ale zastanawiam się, jak mogę kontrolować to zachowanie, zwłaszcza że korzystanie z serwera proxy może być wykonywane przez stronę trzecią. Koncepcja jest w porządku, ale praktyka z pewnością nie jest taka, jakiej się spodziewałem. Czy gdzieś pominąłem punkt?


Chcę, aby element pojawiał się w przypadku, gdy witryna nie była używana przez jakiś czas i aby znikał po ponownym użyciu. Czy istnieje sposób na wykrycie na stronie internetowej, czy mysz nie była przez jakiś czas poruszana?


title: Jak radzić sobie z pytaniami z rozmowy kwalifikacyjnej na temat stylu programowania

text: Jako programista C++ w wywiadach wielokrotnie znajdowałem się w sytuacjach, w których ankieter chciał sprawdzić moją wiedzę na temat dobrego stylu programowania. Zazwyczaj skupiały się one na podstawowej wiedzy z zakresu OOP. Wiem, że OOP jest przydatne do enkapsulacji pojęć i używam go codziennie. Ponieważ jednak język taki jak C++ pozwala na wiele różnych stylów, a niektóre podejścia C++, takie jak algorytmy TMP lub STL, w ogóle nie są OOP (ale raczej bardziej jak programowanie funkcjonalne), utknąłem w tym, jak najlepiej „sprzedać” moją wiedzę o innych podejściach, ponieważ dobrze bez wychodzenia na arogancję lub kogoś, kto nie docenia podstaw. Obawiam się, że ten nacisk na OOP pytających pochodzi z ich socjalizacji w latach 90., gdzie OOP uważano za lekarstwo, ale jest to arogancki punkt widzenia. Jak najlepiej odpowiedzieć na takie pytania?


title: Jak przekazać swoją rolę w projekcie innym członkom zespołu?

text: Ostatnio pracowałem ze współpracownikiem nad opracowaniem nowego komponentu. Powiedziałbym, że nasz wkład wynosił około 80/20, ponieważ ja wniosłem 80% pracy nad komponentem. Mój współpracownik lubi spamować innych programistów w dziale informacjami i aktualizacjami na temat tego, nad czym pracuje, w tym e-mailami omawiającymi szczegółowo nasz nowy komponent. To zachowanie spowodowało, że moi współpracownicy (w tym kierownictwo) błędnie uwierzyli, że jest on głównym i najbardziej autorytatywnym kontaktem w dyskusjach na temat tego komponentu, pomimo faktu, że był współpracownikiem mniejszościowym. Czuję, że jego ciągłe aktualizacje dały mu wyższy profil niż ja w odniesieniu do tego projektu. Czy mogę z tego wyjść, a jeśli tak, to jak to zrobić? Nie sądzę, aby spamowanie spamera było skuteczne, ani nie lubię dodawać dodatkowego szumu do skrzynek odbiorczych moich kolegów. **EDYTUJ:** Dzięki za dotychczasowe odpowiedzi, wszystkie są naprawdę dobre. Aby pomóc wyjaśnić sytuację, chciałbym podać dodatkowe informacje na temat jego komunikacji. Po pierwsze, zazwyczaj nie mówi mi, kiedy ma wysłać e-mail, a tym bardziej nie uruchamia go przeze mnie do sprawdzenia przed wysłaniem; Nie wiem o tych wiadomościach, dopóki nie dotrą do mojej skrzynki odbiorczej. Po drugie, niejednokrotnie jego komunikat zawierał informacje, które są całkowicie błędne; nie jest zaznajomiony z częścią kodu, o którym mówi. Nie miałbym nic przeciwko temu, by był punktem kontaktowym, gdyby nie fakt, że dzięki temu w zasadzie zyskuje uznanie za projekt. Kierownictwo postrzega sytuację tak, jakby to on napisał 80%, a ja 20%, podczas gdy w rzeczywistości jest na odwrót.


title: Prosta biblioteka C wypełniająca luki w standardowych (C, POSIX) bibliotekach?

text: Szukam biblioteki funkcji C, która zawierałaby kolekcję funkcji narzędziowych _simple i plain_ „brakujących” ze standardów C lub POSIX. Znalazłem to wcześniejsze pytanie, ale odpowiedzi tam wymieniają tylko pełne frameworki lub biblioteki zaprojektowane do zastępowania/duplikowania standardowych bibliotek zamiast bezproblemowego wypełniania luk. Aby dać przykład funkcji, których często mi brakuje, a chciałbym znaleźć bibliotekę z przetestowanymi implementacjami: * `afgets`, `afread`: czyta linię lub cały plik, jak `fgets` i `fread`, z wyjątkiem naprawdę czyta wszystko i zwraca bufor „malloc” w duchu GNU „asprintf”. * Wybór funkcji przycinania łańcuchów * `systemf`, `popenf`: Podobnie jak `system` i `popen`, ale jako polecenie przyjmują łańcuch formatujący podobny do `printf`. * `strjoin`: łączenie wielu łańcuchów podanych jako vararg/array (co jest trudne w przypadku `snprintf`) * `struct timeval` arytmetyka To tylko przykłady funkcji, za którymi często brakuje mi szybkich rzeczy. Następnie kilka funkcji, których pragnę (nieobowiązkowe): * Dostępne w popularnych dystrybucjach Linuksa od razu po wyjęciu z pudełka, ze stronami podręcznika itp. * Działa również w systemie Windows/Visual C * Brak dodatkowych zależności, samowystarczalny * Tak użyteczny jak istniejące funkcje C lib w C++ * Najlepiej na licencji LGPL lub podobnej do BSD, ale GPL też jest w porządku Rzeczy, których _nie_ szukam: * Biblioteka ciągów z własnym typem ciągu * Biblioteka struktury danych * Biblioteka frameworka, która ma specjalna inicjalizacja, może nawet pętla zdarzeń itp. Pytanie brzmi, co tam jest? Nazwa biblioteki, link do strony głównej, link do github, zduplikowany link do pytania... Jeśli stworzyłeś własny i masz go w publicznym repozytorium, możesz też do niego linkować, jeśli odważysz się ujawnić go wielu oczom.


title: Czy różne dostępne języki programowania są zbędne?

text: Oczywiście nie dotyczy to wszystkich języków. Ale zastanawiałem się, czy niektóre języki istnieją tylko dzięki kulturze rynkowej współbieżności. Na przykład wszyscy wiemy, że C jest szeroko stosowany w systemach wbudowanych i lekkich. I o ile wiem, nikt ich nie ugryzł. Ale co powiesz na JAVA, C#, Ruby, PHP, ASP.NET, Python, Perl i dalej? Wiem, że PHP jest znacznie lżejsze niż ASP.NET i JAVA, a niektórzy powiedzieliby, że jest to jego różnica, ponieważ aplikacje można wdrażać znacznie szybciej. Inni powiedzieliby, że mimo to w przyszłości zdasz sobie sprawę, że będziesz potrzebować solidniejszego języka. Są różne przypadki, jak w przypadku Twittera, z użyciem SCALA. Co byś powiedział, gdyby na przykład jutro obudziłeś się w Garden of Eden, gdzie wszyscy pracują razem bez konkurencji. Jakie języki programowania byś scalił lub zaprzestał? Chodzi mi o to: czy istnieją języki programowania, które istnieją tylko dzięki konkurencji, czy też wszystkie mają bardzo specyficzne zastosowania i nie można ich wyrzucić lub połączyć ich funkcjonalności? Moje pytanie jest w pewnym stopniu równe Jak duże są różne „światy” programowania? ale domagając się innego punktu.


title: Czy istnieje odpowiednik Build-Operate-Transfer do tworzenia oprogramowania?

text: Czy istnieje odpowiednik Build-Operate-Transfer lub Build-Lease-Transfer w tworzeniu oprogramowania? Czy w ogóle ma sens operowanie takim projektem w oprogramowaniu? Czy w swoim doświadczeniu znasz jakieś projekty, które zostały uruchomione jako takie? Inaczej mówiąc: w przypadku dużego projektu systemu oprogramowania, dlaczego firma nie miałaby licytować go stronom trzecim, aby zbudowały i działały przez pewien czas (tj. strona trzecia będzie odpowiedzialna za bieżące utrzymanie i działanie systemu), do czasu wygaśnięcia koncesji? Strona trzecia odzyskuje wydatki z rozwoju oprogramowania poprzez działanie systemu; pierwotna firma może w tym okresie zarabiać na pozostałościach, a następnie wchłonąć dochód z systemu, gdy koncesja zostanie zrealizowana. Czy to w ogóle ma sens?


title: Podsumuj zmiany (wstawienia i usunięcia) w Git

text: Chcę się przyjrzeć, jak z biegiem czasu rozrosła się moja baza kodu. GitHub ma ładny ekran `+/-` na liście checkinów, który daje tego sens. Czy jest coś podobnego, którego mogę używać z moim repozytorium hostowanym przez Google Code lub w trybie offline?


title: Dlaczego DataContractJsonSerializer nie zawiera ogólnych, takich jak JavaScriptSerializer?

text: Dlatego JavaScriptSerializer został przestarzały na rzecz DataContractJsonSerializer. var klient = nowy WebClient(); var json = czekaj na klienta.DownloadStringTaskAsync(url); // http://example.com/api/people/1 // Przestarzałe, ale czysto wyglądające i ogólnie dobrze pasuje do // innego kodu w mojej domenie aplikacji, który korzysta z generycznych var serializer = new JavaScriptSerializer(); Osoba p = serializer.Deserialize<osoba>(json); // Teraz trzeba użyć brzydkiego typeof, aby uzyskać typ, // kiedy już znam typ przy kompilacji. Dlaczego nie ma ogólnego typu T? var serializer = new DataContractJsonSerializer(typeof(osoba)); Osoba p = serializer.ReadObject(json) as Person; JavaScriptSerializer jest fajny i pozwala na deserializację przy użyciu typu ogólnego T w nazwie funkcji. Zrozumiałe, że został przestarzały z ważnego powodu, za pomocą DataContractJsonSerializer możesz ozdobić swój typ do deserializacji różnymi rzeczami, aby nie był tak kruchy jak JavaScriptSerializer, na przykład [DataMember(name = "personName")] ciąg publiczny Nazwa { Dostawać; ustawić; } Czy jest jakiś konkretny powód, dla którego zdecydowali się zezwolić tylko użytkownikom na przekazywanie typu? Typ typu = typeof(osoba); var serializer = new DataContractJsonSerializer(typ); Osoba p = serializer.ReadObject(json) as Person; Dlaczego nie to? var serializer = new DataContractJsonSerializer(); Osoba p = serializer.ReadObject<osoba>(json); Nadal mogą używać odbicia z atrybutami dekorowanymi DataContract na podstawie `T`, które określiłem w `.ReadObject<T>(json)`


title: Pojedyncza odpowiedzialność a programowanie proceduralne

text: Pojedyncza odpowiedzialność (z SOLID) jest jak zmuszanie mnie do tworzenia klas tylko jedną publiczną metodą. Ale jeśli tak, to można by użyć metod statycznych i wrócić do programowania proceduralnego. Co za różnica?


title: Jaki procent błędów powinien zostać usunięty, zanim projekt zostanie zaakceptowany jako wydanie stabilne?

text: Pracowaliśmy z koszykiem na zakupy dla DotNetNuke i mieliśmy niekończące się problemy z wydaniami ich produktów przez deweloperów. Każde wydanie naprawia jedną rzecz, ale nowe błędy pojawiają się gdzie indziej. Wiem, że błędy są nieuniknione i nie możemy ich wszystkich zdusić, ale czy ktoś może mi powiedzieć, jaki procent błędów powinien zostać usunięty, zanim produkt zostanie zaakceptowany jako stabilne wydanie?


title: Jak nazwać różne gałęzie o identycznej funkcjonalności w wersjonowaniu semantycznym?

text: W przypadku oprogramowania mam dwie różne gałęzie, które różnią się tylko używaniem różnych wersji bibliotek pakietu, z których korzysta moje oprogramowanie. API tej biblioteki zmieniło się pomiędzy wersjami w sposób niekompatybilny. Obecnie rozwijam się w obu wersjach z identyczną funkcjonalnością w różnych gałęziach, jedyna różnica występuje podczas budowania i ładowania bibliotek współdzielonych. Czy powinienem wydać te pakiety z różnymi nazwami wersji przy użyciu wersjonowania semantycznego? Moim zdaniem tak, ale co z nazewnictwem tych różnych wersji? Obecnie korzystam z "normalnej" numeracji, korzystając z nowej wersji biblioteki firm trzecich, m.in. 1.0.0 oraz sufiks dla wersji korzystającej ze starszej biblioteki innej firmy, np. 1.0.0-json-c-0.10, zobacz https://github.com/residuum/PuRestJson/releases


title: Dostęp farmy internetowej do puli zasobów

text: Uczę się struktury aplikacji przy użyciu farmy sieci web (dla wysokiej dostępności, a nie ładowania). Mam pulę zasobów, w której jeden użytkownik może w dowolnym momencie uzyskać dostęp do jednego elementu w puli zasobów. Moje ograniczenia/wymagania to: * Brak bazy danych (cóż, mam dostęp do bazy danych tego produktu innej firmy. Ale nie mamy żadnej kontroli z powodu problemów z obsługą itp., więc załóżmy, że nie ma bazy danych) * Pesymistyczna strategia blokowania * Obsługuje dostęp z jednego lub więcej źródła * Żadnych zależności od stron trzecich, chcę mieć kontrolę nad rozwojem Mój obecny proces myślowy to mieć archekturę podobną do następującej: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/ jIrbg.png) W powyższym przykładzie miałbym centralny "serwer blokady", który zajmowałby się blokowaniem z jednego lub więcej źródeł. Miałbym wtedy jednego lub więcej niewolników, które skutecznie wykonałyby kopię wszystkich transakcji w przypadku scenariusza awaryjnego. Serwer blokady byłby podejściem „kto pierwszy, ten lepszy”. Moje pytanie, biorąc pod uwagę moje ograniczenia/wymagania, czy jest to najlepszy projekt dla tego problemu? _Jeśli mogę poprawić pytanie, proszę o komentarz, dzięki_


title: DRY z Dynamic SQL vs. gotowe zestawienia

text: Kiedy mamy do czynienia z danymi, można zauważyć, że zasadniczo ten sam kod powtarza się w różnych wcieleniach: -- MySQL: CREATE TABLE users ( id int NOT NULL auto_increment PRIMARY KEY, nazwa varchar(255) NOT NULL, email varchar(255) NOT NULL, UNIQUE KEY akUser (e-mail) ) // Klasa PHP Użytkownik rozszerza DBModel { protected $id; chronione $nazwa; chroniony $e-mail; function __construct() { $this->queries = array( 'getById' => 'SELECT id, name, email FROM users WHERE id = :id', 'addUser' => 'INSERT INTO users (imię, email) WARTOŚCI ( :name, :email)', 'updateUser' => 'UPDATE users SET name = :name, email = :email WHERE id = :id', ); } funkcja publiczna loadById($id) { $stmt = $this->getPreparedStatement('getById'); $stmt->bindValue(':id', $id); $stmt->wykonaj(); $stmt->setFetchMode(PDO::FETCH_INTO, $this); return $stmt->fetch(); } public function save() { if ($this->id === NULL) { $this->add(); } else { $to->aktualizacja(); } } public function add() { $stmt = $this->getPreparedStatement('addUser'); $stmt->bindValue(':nazwa', $this->nazwa); $stmt->bindValue(':email', $this->email); $stmt->wykonaj(); } public function update() { $stmt = $this->getPreparedStatement('updateUser'); $stmt->bindValue(':nazwa', $this->nazwa); $stmt->bindValue(':email', $this->email); $stmt->bindValue(':id', $ten-id); $stmt->wykonaj(); } } Jeśli zauważysz, pola 'name' i 'email' występują po 7 razy w PHP i MySQL. Chociaż nie stanowi to większego problemu w tym małym przykładzie, przy dużych stołach i dużej liczbie stołów, dość szybko wymyka się to spod kontroli. _Krótka uwaga: przy PHP działającym jako usługa sieciowa czas życia aplikacji jest bardzo krótki. Wiele zapytań, które są wykonywane — na przykład dodanie użytkownika — zostałoby wykonane tylko raz w czasie życia aplikacji, więc przygotowane instrukcje nie dają wiele korzyści. Nawet przy współdzieleniu połączenia, poszczególne instancje nie mają dostępu do wcześniej przygotowanej instrukcji (chyba, że czegoś mi brakuje), więc i tak ją ponownie przygotuje._ Z pewnym podstawowym odbiciem na poziomie bazy danych (którego wyniki są buforowane lub generowane automatycznie przed wdrożeniem), instrukcje SQL mogą być tworzone automatycznie, eliminując potrzebę indywidualnego kodowania podstawowych instrukcji SELECT/INSERT/UPDATE/DELETE - znacznie zmniejszając ilość kodu. -- (oczywiście instrukcja tworzenia tabeli pozostaje taka sama) class User { protected $id; chronione $nazwa; chroniony $e-mail; funkcja publiczna getById($id) { return MyDb::getById('Users', $id, $this); } public function save() { return MyDb::save('Users', $this); } } **Moje pytanie** : czy powielanie kodu jest warte kilku cykli procesora i bardziej złożonego kodu i potrzeb związanych z konserwacją?


title: Jak radzisz sobie z naprawdę dziwacznymi błędami, które intrygują Cię przez ponad 10 godzin?

text: Znasz je, te błędy, które NIE mają sensu. Gdzie wydaje się, że gremlin po prostu wskoczył głęboko do twoich żetonów i coś zepsuł. Chodzisz na spacer, piszesz, dzwonisz do wujka? Potrzebuję pomocy!!


title: Czy twórcy kompilatorów rzeczywiście muszą „rozumieć” kod maszynowy?

text: To może być dziwne pytanie. Facet piszący kompilator C++ (lub inny język inny niż VM): Czy musi umieć czytać/pisać surowy język maszynowy? Jak to działa? EDYCJA: Mam na myśli konkretnie kompilatory, które kompilują się do kodu maszynowego, a nie do innego języka programowania.


title: Znak wodny obrazu z tekstem podanym jako dane wejściowe

text: Chcę stworzyć prostą aplikację internetową, w której mogę przeciągnąć obraz i oznaczyć róg podanym tekstem. Od czego powinienem zacząć coś takiego? Posiadam wiedzę w Javie i Ruby.


title: Skalowalny rozproszony system plików dla obiektów blob, takich jak obrazy i inne dokumenty

text: Cassandra i HBase nie obsługują wydajnie przechowywania obiektów blob, takich jak obrazy. Przechowywanie bezpośrednio na HDFS obciąża Namenode z powodu ogromnej liczby plików. Facebook używa Haystack do przechowywania obrazów i załączników, ale nie jest to oprogramowanie typu open source. Czy Luster to dobry wybór dla rozproszonego magazynu obiektów blob? Czytałem, że Amazon S3 jest używany przez wielu, ale to kosztowałoby pieniądze i osobiście nie chciałbym polegać na systemie firm trzecich. Jakie są inne sugestie?


title: Wymyślanie koła na nowo, bo ono nie istnieje

text: Jednym z języków, których używam w pracy, jest bardzo mały, niszowy język zwany psl. Jednym z największych zarzutów, jakie mam na to jako język, jest to, że biblioteki są bardzo ograniczone. Chociaż jest to zrozumiałe w przypadku małego języka opracowanego przez kilku facetów, sprawia mi to pewne dylematy. W szczególności uważam, że „przepisuję” funkcje, które są standardowe w innych językach, ponieważ tutaj nie istnieją. Jest to szczególnie problematyczne, gdy próbuję napisać funkcję do rozwiązania problemu, a kierownictwo nie chce poświęcać na to czasu. Chcą, żebym zamiast tego używał zakodowanych na stałe magicznych liczb, które, jak wiem, będą musiały zmieniać się wielokrotnie w ciągu życia kodu. To nie do końca pasuje do antywzorca wymyślającego koło na nowo, ponieważ w ogóle tu nie było. Jaki rodzaj anty-wzoru by to pasowało?


title: Jakie jest pochodzenie i znaczenie wyrażenia „Lambda ostateczna”?

text: Od kilku lat zajmuję się funkcjonalnymi językami programowania i ciągle spotykam się z tym zwrotem. Na przykład jest to rozdział „Mała intryga, który z pewnością poprzedza blog o tej nazwie. (Nie, rozdział nie pomaga odpowiedzieć na moje pytanie.) Rozumiem, co oznacza lambda, idea funkcji anonimowej to jedno i drugie proste i potężne, ale nie rozumiem, co w tym kontekście oznacza „ostateczny". Miejsca, w których widziałem to zdanie: 1. Tytuł rozdziału 8 The Little intrygant 2. Blog: http://lambda- the-ultimate.org/ 3. Seria artykułów „Lambda the ultimate X”: http://library.readscheme.org/page1.html Czuję, że brakuje mi tutaj odniesienia, czy ktoś może mi pomóc?


title: Alternatywy dla Agile Scrum

text: Zaczęliśmy stosować metodykę Agile Scrum i zrealizowaliśmy około 10 sprintów. Jedną z moich obserwacji było to, że nie wszyscy w zespole biorą na siebie odpowiedzialność za wykonywanie zadań i historyjek użytkownika i za każdym razem muszą być poinstruowani lub przydzieleni do jakichś zadań. Również szacunki, które podają, nie są zbyt zwinne. Zawsze istnieje potrzeba, aby ktoś zajął się wszystkimi historyjkami użytkownika, stanem ich ukończenia, zadaniami, które jeszcze nie zostały wykonane itp. i przydzielił je członkom zespołu, którzy nie są zajęci. Czuję też, że moglibyśmy szybciej realizować zadania, gdybyśmy mieli jedną osobę, która tworzyłaby zadania i przydzielała je osobom wraz z terminami ich wykonania (rola kierownika projektu). I tego właśnie brakuje mi w Agile Scrum. Biorąc pod uwagę, że zespół nie podejmuje zadań i nie ryzykuje podejmowania wąskich szacunków, jakich alternatyw możemy szukać? A może są jakieś przepisy w Agile Scrum, aby zapiąć rzeczy?


title: Jaki jest zalecany sposób uczenia się klasy .NET w pewnych regularnych odstępach czasu?

text: Jak wszystko w życiu, to, czego nie wiesz, nie pomaga, a jako nowy programista wiem, że im więcej dowiaduję się o różnych klasach .NET i ich zastosowaniach, tym więcej mam w swoim zestawie narzędzi. Jednak trochę jak ocean, gdzie po prostu nie wiesz, od czego zacząć, pomyślałem, że zapytam społeczność, czy ktoś wie: * jakieś zalecenia dotyczące podziału biblioteki .NET na klasę (lub mniejszą), od czego zacząć? * Witryna, która może to zrobić na podstawie artykułu/bloga Lub inne zalecenia dotyczące regularnego (tj. Codziennego/tygodniowego) uczenia się nowej klasy w .NET? Którą bibliotekę zacząć… itd.? **UWAGA** : Czytam dużo lub regularnie, ale pomyślałem, że wysiłek nastawiony bezpośrednio na poznanie nowej klasy i jej regularnych zastosowań pomoże. Dziękuję,


title: Pomóż mi nadrobić zaległości od wersji Java 1.4.2

text: Zaraz rozpoczynam swoją pierwszą karierę zawodową jako programista i prawdopodobnie będę pisał dużo kodu w Javie. Nie wiem zbyt wiele o tym, co konkretnie będę pisać, a poza tym mam dość szerokie zainteresowania, jeśli chodzi o kod. Z powodów nie wartych dyskusji, podczas mojego ostatniego stażu programowałem tylko dla pakietów Java 1.3 i 1.4 SDK. Ponadto moja edukacja uniwersytecka skupiała się głównie na algorytmach, strukturach danych i innej teorii, a nie na funkcjach językowych czy bibliotekach. Mając powyższe na uwadze, jakie funkcje, klasy itp. w obecnej wersji Javy (na jakim numerze jesteśmy teraz?) byłyby warte mojego czasu, aby przeczytać i dlaczego? Czego brakowało mi od wersji 1.4.2, co ułatwiło Ci życie jako programisty? Przykłady i historie o tym, jak odkryłeś konkretny pakiet lub coś podobnego i wykorzystałeś go, również byłyby świetne.


title: Dlaczego freeware (closed-source) zamiast open-source?

text: Zastanawiam się, dlaczego niektórzy ludzie wypuszczają oprogramowanie jako freeware, ale nie udostępniają kodu źródłowego. Dlaczego? Przychodzi mi do głowy kilka powodów, ale większość z nich nie ma większego sensu. Dlaczego miałbyś chcieć zamknąć źródło, ale pozwolić programowi być swobodnie dostępnym (bezpłatnie, a nie za darmo jak w wolności)?


title: Porady dotyczące prostego protokołu komunikacyjnego (iPod i Arduino)

text: Podłączyłem iPoda z Arduino za pomocą połączenia szeregowego (UART). Arduino wysyła liczbę 0-1023 (a więc dwa bajty) podczas próbkowania wartości czujnika światła. Proszę o porady dotyczące prostego i niezawodnego protokołu komunikacyjnego. 1. Czy potrzebuję magicznych stałych, aby rozpocząć/zatrzymać komunikację. 2. Może potrzebuję wysłanych danych o małych porcjach. Teraz mam: while (1) { data = getData(); // dwa bajty 0-1024 Serial.write((data) & 0xFF)) ; Serial.write((dane) & 0x300)) ; } Wszelkie sugestie, jak zaimplementować prosty i niezawodny protokół? Obraz mojego urządzenia: http://cl.ly/image/051f370v3e0g Dzięki


title: Kiedy powinienem przestać zobowiązywać się do opanowania nowych projektów?

text: Za każdym razem, gdy zaczyna się nowy projekt, zwykle ma sens zacząć od bezpośredniego zaangażowania w mastering, dopóki nie uzyskasz czegoś „stabilnego”, a następnie zaczniesz pracować w oddziałach. Przynajmniej tak to zwykle robię. Czy istnieje sposób na natychmiastowe uruchomienie gałęzi od drugiego zatwierdzenia? Czy ma sens robienie tego w ten sposób? Oczywiście, "Initial Commit" zawsze będzie na masterze, ale po tym, kiedy będę wiedział, że nadszedł właściwy czas, aby zacząć tworzyć gałęzie dla nowych funkcji?


title: Czy PHP jest złym językiem obiektowym?

text: Miałem okazję przeprowadzić ciekawą rozmowę z moimi współpracownikami. Większość z nich to flashowe skrypty akcji lub programiści Java. Rozmawialiśmy o tym, jak dobrze php obsługuje OOP. Powiedziałem, że PHP może obsłużyć prawie wszystkie rzeczy związane z OOP od PHP 5.2 lub 5.3. Czy się mylę? Nie próbuję uzyskać odpowiedzi tak/nie, ale chciałbym usłyszeć więcej opinii od deweloperów.


title: replikacja bazy danych lub niestandardowe rozwiązanie, takie jak tworzenie „busu” przedsiębiorstwa

text: Chciałbym uzyskać informacje o tym, jak synchronizować bazy danych działające na różnych serwerach w całej naszej organizacji. Mamy swego rodzaju system rejestracji, a gdy użytkownik „John Doe” rejestruje się na serwerze 1, te informacje rejestracyjne muszą być natychmiast dostępne na serwerze 2 i 3. Obecnie nasi administratorzy sieci skonfigurowali replikację postgresql, aby to zrobić, i to wydaje się działać dobrze. Gdy to rozwiązanie zostanie uruchomione i będzie działać w pełnej skali, będziemy mieć 2 bazy danych, które będą replikowane na potencjalnie 4 lub 5 różnych serwerów. Dwie bazy danych, ponieważ informacje rejestracyjne są zapisywane w dwóch różnych bazach danych. Jedna baza danych to CRM, druga to aplikacja rezerwacyjna. (BTW. To wszystko jest w sieci LAN, a nie WAN) To, co próbuję rozgryźć w mojej głowie, to czy replikacja postgresql jest najlepszym sposobem na zrobienie tego, czy też powinniśmy przyjrzeć się rozwiązaniu programowemu. Widziałem tutaj jeden post, w którym ktoś pytał o ETL vs. REST API. Myślę, że REST może być dobrą opcją. Nie jestem pewien, czy w pełni odpowiada naszym potrzebom... Będę musiał się nad tym zastanowić... Ale myślę też o oprogramowaniu do integracji Enterprise... jak iway lub coś w tym rodzaju, gdzie można by zidentyfikować źródłowej bazy danych, zidentyfikuj docelową bazę danych... a następnie zdefiniuj interwał. Narzędzie będzie następnie monitorować źródłową bazę danych pod kątem zmian co X minut. Za każdym razem, gdy nastąpi zmiana, zaktualizuje docelowe bazy danych. Ale nie jestem pewien, czy zadaję sobie wszystkie właściwe pytania, aby dokonać właściwej oceny. Oto kilka, o których myślałem do tej pory: 1. Jak świeże muszą być dane na serwerach? Musi być „dość” w czasie rzeczywistym... Powiedziałbym, że w ciągu kilku sekund. 2. Jaka jest ilość informacji? co kilka sekund w źródłowej bazie danych mogło powstać kilka rekordów. Co jeszcze powinienem rozważyć? Dziękuję.


title: Jaka jest różnica między kombinatorem a łączeniem funkcji?

text: Więc z tego, co przeczytałem o kombinatorach, nie mogę do końca powiedzieć, czym różnią się one od zwykłego łączenia wywołań funkcji. Wiem, że czegoś mi brakuje, ale nie rozumiem, czego mi brakuje. Chodzi mi o to, czy g(f(x)) (gdzie _f_ i _g_ są funkcjami) skutecznie byłoby kombinatorem, gdybym nadał mu inną nazwę?


title: Empiryczne badanie rozkładu aktywności programisty?

text: Poszukuję wykresów, tabel i innych dowodów empirycznych dotyczących rozkładu działań typowego programisty (na dzień, na projekt itp.). Przykładowe czynności to programowanie, rozmowy telefoniczne, czytanie dokumentacji, pisanie dokumentacji, naprawianie błędów, inżynieria wymagań, testy, spotkania itp. W szczególności interesuje mnie ilość czasu, przez jaki programista faktycznie pracuje nad rzeczami _wykonywalnymi_.


title: Sponsorzy i Reklama w aplikacjach winform

text: W nowej aplikacji winform, którą wciąż przygotowuję, wpadłem na pomysł, że mógłbym zasponsorować lub mieć jakieś logo firm, które chcą tam umieścić swoje logo. Aplikacja służy do zarządzania treningami sportowymi i ukończeniami, zarządzania karierą itp. Jak ktoś widział coś takiego? Jak można to zrobić? Jak mogę zainteresować firmy sponsorowaniem aplikacji? AKTUALIZACJA ----------------------------------------- Anulowałem ten. Zapytałem kilku moich klientów, którzy na co dzień zajmują się sponsorami, a oni sprawiają, że robisz głupie rzeczy w swoim projekcie. Dow byłoby miło mieć dodatkową beczkę, aby obniżyć cenę aplikacji i móc uzyskać więcej rynku. Przekażę to. Jedyne intromisje, które lubię w moich projektach, pochodzą od ludzi, z których korzystam na co dzień.


title: rzeczy do przemyślenia podczas przeprowadzki do C-land

text: **Cześć** Przez lata odbyłem podróż programistyczną od C w 1990 roku do Pascala, C++ z programowaniem komercyjnym, java VHDL, C#, a teraz przyglądam się F#. Wiosną wrócę do studiowania programowania wbudowanego w C na kursie uniwersyteckim, więc zanim to zrobię, odświeżę swoją wiedzę w C. Nie pamiętam zbyt wiele z C, którego się nauczyłem i myślę, że jestem za to wdzięczny bo prawdopodobnie nauczyłem się wtedy jakichś złych nawyków. Mam kilka pytań, które pomogą mi ruszyć w drogę. **\--edit--** Aby wyjaśnić: Jestem wdzięczny za wskazówki dotyczące programowania wbudowanego, ale teraz bardziej interesuje mnie ponowne nauczenie się C w ogóle. Przepraszam, jeśli moje pytanie było niejasne, 1. Kompilator, Debugger, IDE? Jako microslave myślałem o 2010 C++ Express, jakieś alternatywy? 2. Gdzie znaleźć dobre biblioteki z kodem dla C. Myślę coś podobnego do Boost, POCO w C++ 3. Źródło wzorców programowania proceduralnego i najlepszych praktyk. Skąd można się nauczyć dobrego kodu? Z góry dzięki Gorgen


title: Refleksja i LGPL

text: Po prostu, jeśli użyję refleksji, aby dodać metody lub funkcje do klasy zdefiniowanej w bibliotece objętej LGPL, do której się łączę, czy liczy się to jako modyfikacja istniejącej biblioteki i czy mój kod odblaskowy musiałby zostać wydany na licencji LGPL?


title: Jak sprawić, by planowanie sprintu było zabawne

text: Nasze spotkania dotyczące planowania sprintu nie tylko nie są zabawne, ale wręcz przerażające. Spotkania są żmudne, nudne i trwają wiecznie (dzień, ale wydaje się, że to dużo dłużej). Twórcy narzekają na to i obawiają się nadchodzących planów. Nasza rutyna jest dość standardowa (historyjka użytkownika wstawiana do backlogu sprintu według priorytetu >> historia jest rozdzielana na zadania >> zadania są szacowane w godzinach >> powtórzenie) i nie wiem, co robimy źle. Jak możemy uatrakcyjnić spotkania? ... Więcej szczegółów, w odpowiedzi na prośby o więcej informacji: **Dlaczego pozycje zaległości nie są wstawiane i mają priorytet przed rozpoczęciem sprintu?** Historyjki użytkowników rzeczywiście mają priorytet; nie mamy pojęcia, ile czasu zajmie im rozbicie ich na zadania! Z (doskonałych) odpowiedzi widzę, że może nie powinniśmy w ogóle szacować zadań, a jedynie historyjki użytkowników. Powodem, dla którego oceniamy zadania (a nie historie), jest to, że strasznie źle oceniamy historie – ale myślę, że to temat na zupełnie inne pytanie. **Dlaczego programiści narzekają?** 1. Spotkania są długie. 2. Spotkania są monotonne. Historia po historii, zadanie po zadaniu, zmaganie się (tak, zmaganie się), aby oszacować, ile czasu to zajmie i z czym się wiąże. 3. Szacowanie zadań sprawia, że szacowanie user-story wydaje się bezcelowe. 4. Im dłuższe spotkanie, tym mniej skupienia na sali. Im mniej skupieni są koledzy, tym dłużej trwa spotkanie. Powstaje rekurencyjna spirala nienawiści. Rozważaliśmy podzielenie spotkania na dwa dni, aby ludzie byli skupieni, ale programiści nie chcieli o tym słyszeć. Jeden dzień planowania jest wystarczająco zły; teraz będziemy mieli _dwa_?! Częścią naszego problemu jest to, że wchodzimy w bardzo małe szczegóły (aby uzyskać dokładniejsze oszacowania). Ale kiedy szacujemy z grubsza, idziemy daleko od celu! **Podsumowując pytanie:** * Co robimy źle? * Jakie są dodatkowe sposoby na uatrakcyjnienie spotkania?


title: W jaki sposób użycie #define for pętli i ograniczeń warunków w C zwiększa bezpieczeństwo?

text: Mój program używa następujących instrukcji define: #define LOWEST_PATIENT_ID 10000 #define HIGHEST_PATIENT_ID 99999 #define LOWEST_CRITICAL_STATUS 1 #define HIGHEST_CRITICAL_STATUS 100 używany w tego typu kodzie: do{ scanf("%d", &c_status); }while((c_status<NAJNIŻSZY_STATUS_KRYTYCZNY) ||(c_status>WYSOKI_STATUS_KRYTYCZNY)); Nie wiem, w jaki sposób jest to bezpieczniejsze. czy jest to instrukcja typedef, która jest bezpieczna?


title: Jakie pytania kierują decyzją, czy podobny kod jest odrębny czy wspólny?

text: W swojej karierze programistycznej wielokrotnie spotykałem się z następującym problemem pod różnymi postaciami. Jako prosty przykład rozważmy następujące: Załóżmy, że istnieje metoda (B), która może się różnić w zależności od wymagań klienta. Może to być z wielu powodów. Zdrowy rozsądek podpowiada, że tak jak teraz, powinieneś napisać je jako powszechną metodę i dodać kod rozgałęziający w przyszłości, aby obsłużyć wszelkie przyszłe przypadki brzegowe. Klient 1: A-->B-->C Klient 2: A-->B-->C Jednak z Twojego doświadczenia wynika, że ten konkretny fragment kodu prawdopodobnie się zmieni, więc łatwiej byłoby mieć oddzielne metody ( B1 i B2) i zmieniaj logikę dla jednego klienta, zamiast ciągle dodawać rozgałęzione metody tworzenia kodu (B) nieogólne. Klient 1: A-->B1-->C Klient 2: A-->B2-->C Czy istnieją jakieś praktyczne zasady, które można zastosować w takich przypadkach, czy też każdy przypadek musi być rozpatrywany indywidualnie? Nawiasem mówiąc, spotkałem wielu ludzi, którzy stanowczo opowiadają się za jednym podejściem nad drugim i widzę zalety obu. Ale czy jest jakiś środek, do którego można dojść na podstawie uzasadnionych argumentów?


title: Jak zarządzać transakcjami za pomocą Springa bez adnotacji?

text: Używam Hibernate4.2 i Spring3.2 i zarządzam transakcjami za pomocą Springa bez adnotacji (czyli bez `@Transactional`). Jak mogę korzystać z zarządzania transakcjami Spring bez adnotacji i bez DaoSupport?


title: Zarządzanie wieloma wersjami aplikacji internetowej za pomocą Git

text: Mamy rodzinę aplikacji, z których wszystkie mają tę samą podstawę. Do tej pory rozwijałem tę bazę, a przepływ pracy Git był bardzo prosty: * Rozwój odbywa się w gałęzi `develop` * Nowe funkcje są rozwijane w gałęzi `name-of-the-feature` * Wydania są tworzone w `release -**` branch Do tej pory kod był taki sam dla każdej aplikacji z rodziny. Załóżmy, że wspólna baza jest już kompletna i od teraz kod będzie inny dla każdej aplikacji. Nie jestem pewien, jak mam sobie radzić z **git** i tym **wieloma aplikacjami**, które mają tę samą bazę. * Czy każdy z nich powinien mieć swój **własny projekt git**? * Czy powinny znajdować się w tym samym projekcie, ale każdy w swoim **własnym oddziale**? Chodzi o to, że jeśli umieszczę je na osobnych projektach, każda modyfikacja dokonana w **bazie** aplikacji będzie musiała zostać powtórzona w każdej z aplikacji. Nie jestem za bardzo zaznajomiony z **git** , ale jeśli przechowuję każdy projekt w **gałęzi** , czy będzie możliwe scalenie podstawowej modyfikacji z każdą aplikacją? Czy ktoś doświadczył takiej sytuacji? Nie wiem, jak postępować. Dziękuję! **EDYTOWANE** Kiedy powiedziałem **wersja**, nie miałem na myśli numerów wersji. W rzeczywistości są to różne aplikacje, które mają tę samą bazę.


title: Czy tworzenie gier to najlepszy sposób na naukę programowania?

text: Słyszałem ostatnio, że instruktor wspomniał, że tworzenie gier to najlepszy sposób na naukę programowania. Poza tym, że wszystko musiało być stworzone w kodzie, powiedział, że naprawdę można w pełni doświadczyć i zaimplementować OOP w swoich programach. Innymi słowy, wszystko, co tworzysz w grze, jest obiektem dosłownym, zarówno pod względem technicznym, jak i koncepcyjnym. Czy takie założenie jest bezpieczne? A może zawsze są wyjątki podczas nauki programowania? **Uwaga** był nastawiony na rozwój .net / xna / c#.


title: Jaka jest różnica między kontrolerem w MVC a ViewModel w MVVM?

text: Nie widzę wyraźnie różnicy między MVC i MVVM. Czuję, że Command w ViewModel jest jak metoda Action w kontrolerze. Zarówno kontroler, jak i ViewModel powiadomią widok, aby odświeżył się po zmodyfikowaniu stanu modelu za pomocą powiązania danych. Jaka jest główna różnica między tymi dwoma wzorami?


title: Dlaczego nie zaleca się zamieszczania kilku usterek w tym samym wydaniu/bilecie?

text: Nie jestem pewien, czy to jest miejsce na zadanie następującego pytania koncepcyjnego (Stackoverflow zdecydowanie nie jest). Widziałem to pytanie w egzaminie wielokrotnego wyboru (pojedyncza odpowiedź), podobnym do egzaminów ISTQB: > _Dlaczego nie zaleca się zgłaszania kilku defektów w tym samym wydaniu / > biletu ?_ > > a. Aby raport był zwięzły i przejrzysty. > > b. Ponieważ programiści mogą naprawić tylko jeden błąd. > > do. Ponieważ testerzy grupy testowej są oceniani na podstawie liczby znalezionych błędów. > > re. Systemy zarządzania błędami nie obsługują tej funkcji wielu błędów. Moją jedyną opinią jest to, że „a” jest poprawną odpowiedzią. `b` \- nie może tak być, ponieważ _fix-feedback-resolved-closed_ powinien tego uniknąć. `c` \- Oczywiście źle. `d` \- Wtyczki Redmine / Trac obsługują wiele pól. Odpowiedź zgodnie z arkuszem odpowiedzi brzmi „b”. Czy ktoś może wyjaśnić dlaczego? Mile widziane są komentarze z opinią o odpowiedziach.


title: Wzorzec projektowy do blokowania operacji asynchronicznych w Objective-C

text: Piszę swoją pierwszą klasę Objective-C. Odpowiada za interakcję z usługą uwierzytelniania HTTP SSO. Proces wymaga wielu transakcji HTTP w celu jego zakończenia. Klasa działa jako `NSURLConnectionDelegate` dla własnego obiektu `NSURLConnection`. Obiekt `NSURLConnectionDelegate` działa asynchronicznie. Muszę zabronić próby uwierzytelnienia, gdy inna jest w toku. Sam mam pomysł, jak to zrobić, ale chcę poznać wzorce projektowe w takiej sytuacji. Mój obecny pomysł polega na sprawdzeniu zmiennej instancji, aby zobaczyć, czy uwierzytelnianie jest w toku, a jeśli tak, po prostu nie uruchamiaj kolejnej. Jednak nie jestem pewien, jak przekazać to z powrotem do klasy dzwoniącej. Moja metoda obecnie zwraca void. Czy powinienem użyć NSError i zwrócić go, jeśli trwa kolejna próba uwierzytelnienia?


title: Pytanie dotyczące projektu: Zachowaj 1000 najnowszych przedmiotów; DB a aplikacja

text: Mam aplikację Qt, która wysyła i odbiera wiadomości. Wiadomości są przechowywane w lokalnej bazie danych MongoDB. Aplikacja posiada okno listy wiadomości, które pokazuje wysłane, odebrane i wszystkie wiadomości (w zależności od widoku). Ze względu na wydajność aplikacja posiada QList, który przechowuje QPairs z Mongo ID i samą wiadomość, więc mniej więcej wszystkie wiadomości są dostępne w aplikacji. Chcemy ograniczyć nie. wyświetlanych wiadomości, ponieważ widok staje się wolniejszy dla 1000 i więcej wiadomości. Proste podejście polegało tylko na ograniczeniu nie. par przechowywanych w QList. Nie jestem jednak pewien, czy to prawda. Niedawno przeczytałem tutaj (**EDIT:** to znalazłem) pytanie, które zasadniczo mówiło: „Twój kod aplikacji nie będzie mądrzejszy/szybszy/lepszy dla rzeczy, do których jest przeznaczona baza danych (np. sortowanie, pobieranie podzbioru itp. .)". Ponadto utrzymywanie synchronizacji QList z bazą danych przyprawia nas o bóle głowy i mamy kilka narożnych przypadków, takich jak bardzo stara wiadomość, którą można zaktualizować, a następnie ponownie wyświetlić. Pytanie brzmi więc, czy podejście tylko do bazy danych (np. zapytanie bazy danych o 1000 wiadomości za każdym razem, gdy widok musi zostać zaktualizowany) byłoby szybsze niż przechowywanie faktycznie pokazanych wiadomości w QList i próbowanie ich zsynchronizowania.


title: Dlaczego nie ma API dla programistów w C++ dla poczty Google lub Yahoo?

text: Próbowałem wykonać kodowanie w C++, które może wysyłać pliki z mojego laptopa na moje konto poczty internetowej. Zajęło mi około 10 minut, aby zdać sobie sprawę, że nie ma na to łatwego sposobu. Zajrzyj do tych linków: 1. GMAIL: http://code.google.com/apis/gmail/oauth/code.html 2. YAHOO: http://developer.yahoo.com/mail/ Próbuję zrozumieć dlaczego Obsługa PHP, Pythona lub Java istnieje, ale nie ma C++. Żadnych ognistych wojen, kocham wszystkie języki programowania i ich twórców jednakowo, ale jestem ciekaw, jaka jest logika takich wyborów implementacyjnych.


title: Dlaczego właściwie PHP nie może mieć pełnej obsługi Unicode?

text: Wszyscy wiedzą, że PHP ma problemy z Unicode. Wersja 6 została skutecznie porzucona z powodu trudności w implementacji Unicode. Ale zastanawiam się, czy ktoś wie, jakie są **dokładne** powody? Problemy z architekturą/projektem, problemy z wydajnością, problemy społeczności (założę się, że nie), coś innego?


title: Czy w Ruby on Rails powinienem używać rusztowania, czy nie?

text: Uczę się Ruby on Rails dla mojego nowego projektu. Mam na myśli książkę 'Agile Web Development with Rails', która pokazuje, jak zbudować koszyk na zakupy i używać rusztowania. Jestem dość zaznajomiony z architekturą MVC i używałem kilku frameworków w PHP do tworzenia aplikacji. Nigdy nie korzystałem z rusztowania i nie jestem pewien, czy to najlepszy sposób na rozpoczęcie budowania aplikacji. Doświadczeni użytkownicy, proszę zasugerować, czy powinienem używać rusztowania, czy powinienem kodować ręcznie.


title: Kompatybilność licencji MPL 1.1 i APL 2.0

text: Pracuję nad projektem, który jest licencjonowany pod MPL 1.1 i chciałbym dołączyć trochę kodu, który jest licencjonowany pod APL 2.0. Wiem, że w 2010 roku Mozilla ogłosiła, że aktualizuje MPL, aby była między innymi bardziej "kompatybilna z Apache". Nie jestem prawnikiem. Dokładnie, które części MPL 1.1 nie pasują do APL 2.0 i na odwrót? Projekt ma bardzo niewielu pierwotnych współtwórców nadal aktywnie zaangażowanych, więc wątpię, czy byłbym w stanie skontaktować się z nimi wszystkimi, aby uzyskać pozwolenie na zmianę licencji.


title: czy prawidłowe zastosowanie licencji open source wymaga wyznaczenia posiadacza praw autorskich?

text: Powiedzmy, że chcę rozpocząć publikację jakiegoś kodu źródłowego na licencji open source, takiej jak Apache lub MIT, ale wiem, że jestem tylko twórcą kodu źródłowego w jego pierwotnej formie i raczej nie jestem tym jedynym kto utrzymuje to na dłuższą metę. Chcę tylko go udostępnić i upewnić się, że jest bezpłatny dla innych osób na podstawie jednej z tych licencji. Co muszę zrobić, jeśli chodzi o oświadczenie o prawach autorskich? Czy muszę podać swoje imię i nazwisko lub firmę, aby móc zastosować licencję open source? Czy istnieje sposób, aby kod źródłowy mógł zostać opublikowany anonimowo lub bez wyznaczonego „właściciela”? Ewentualnie, jeśli zapiszę swoje imię i nazwisko lub firmę, czy to prawo własności można później ponownie przypisać?


title: Jakie byłoby najlepsze podejście do wprowadzania zmian w treści użytkownika?

text: Szukałem i nie mogłem znaleźć żadnych informacji na ten temat. Jakie jest najlepsze podejście do przechowywania wersji? Mam stronę internetową, na której użytkownik może napisać dokument, który może być dość długi (200-300 linii). Jak ustalasz, kiedy dokonać korekty? Czy nie jest to skalowalne rozwiązanie do tworzenia nowego za każdym razem, gdy zapisuje, ponieważ byłoby to bezużyteczne dla użytkownika, gdy chciałby spojrzeć wstecz, a wymagałoby sporo miejsca. Mógłbyś wykorzystać czas i powiedzieć, że za każde 15 minut, nad którym pracują, będzie korekta, ale czasami byłoby to nic lub cały dokument uległby całkowitej zmianie. Mógłbym dokonać porównania z poprzednią wersją i porównać wiersze i sprawdzić, ile procent wierszy zostało zmienionych. Co robią inne zmiany?


title: NSException w init, gdy masz niestandardowe wyznaczone inicjatory?

text: Mam niestandardowy kontroler widoku, który jest podklasą UIViewController, która wymaga prawidłowego skonfigurowania obiektu danych. Bez tego obiektu pokazywanie VC nie ma sensu. Stworzyłem więc niestandardowy inicjator, który wymaga przekazania tego obiektu jako parametru/argumentu. Nie ma również „domyślnego” obiektu danych, więc nie ma sensu zastępować odziedziczonego init i implementować przekazywanie tego domyślnego obiektu danych wewnętrznie z init do niestandardowego init. Zamiast tego podnoszę wyjątek, który wyjaśnia, że musisz dodać obiekt w wyznaczonym niestandardowym inicjatorze zamiast używać dziedziczonej metody init. Jednak moi koledzy sprzeciwiają się, że powinienem po prostu zwrócić zero w nadpisanym standardowym init. Nie podają mi jednak żadnych argumentów, mówią mi tylko, że taka jest konwencja. Co nie jest dla mnie argumentem ściśle mówiąc. Nie zrobię rzeczy tylko dlatego, że to tradycja. Po co zwracać zero i dlaczego zgłaszanie niestandardowego wyjątku jest złe?


title: Co sprawia, że język Turinga jest kompletny?

text: Jaki jest minimalny zestaw cech/struktur językowych, które czynią go kompletnym pod względem Turinga?


title: Strategia komunikacji internetowej z interfejsem API na tym samym serwerze

text: Mam RESTful API, które umożliwia pobieranie danych za pomocą żądań, takich jak `GET http://example.com/users/id/1` (kodowane zgodnie z tym samouczkiem). Kontroler rozpalacza kodu wygląda tak: class Example_api extends REST_Controller { function user_get() { $data = array('returned:'. $this->get('id')); $to->odpowiedź($dane); } Ten interfejs API został napisany specjalnie z tego powodu, że powinienem mieć dostęp do tej samej logiki kodu z interfejsu internetowego, aplikacji mobilnych itp. Teraz aplikacja mobilna jest łatwa do napisania, ale chcę znaleźć strategię użycia API ze strony internetowej. Witryna zasadniczo znajduje się na tym samym serwerze, który oferuje to API, i wydaje mi się, że nie wypada wysyłać żądania HTTP do API z kodu i ponownie przechodzić przez sieć. Tak więc pytanie brzmi, jak korzystać z API z kodu php w tej samej witrynie bez przechodzenia przez sieć.


title: Różnica między szablonami w JavaScript a wzorcami projektowymi

text: Jaka jest różnica między szablonami a wzorcami projektowymi w JavaScript? Czytałem o wzorcu projektowym metody szablonów i teraz zastanawiam się, jak ma się on do szablonów JavaScript (jeśli w ogóle).


title: Gdzie była „async” przez te wszystkie dni?

text: Zaczęło się od nowego słowa kluczowego C# 5 „async”. A teraz widzę to programowanie asynchroniczne wszędzie, od JavaScriptu do C++, głównie od Microsoftu. Z różnych dyskusji dowiedziałem się, że jest to bardzo przydatna technika, która pozwala uniknąć wątków, a jednocześnie utrzymać działanie procesora, podczas gdy inne rzeczy są pobierane z dysku twardego lub sieci. Moje pytanie brzmi, dlaczego tak ważny temat był przez te wszystkie dni ignorowany? A może to tylko hype od Microsoftu?


title: Czy potrafisz napisać jednoznaczną specyfikację w języku naturalnym, takim jak angielski?

text: Wydaje mi się, że niemożliwe jest napisanie specyfikacji oprogramowania w języku angielskim, która byłaby całkowicie wolna od niejasności, po prostu ze względu na nieformalny charakter języka naturalnego - i dlatego naprawdę jednoznaczna specyfikacja musi zawierać kod napisany w formalnie określonym języku. Czy to znany wynik, czy coś mi brakuje?


title: Przyjazny dla testów jednostkowych projekt oparty na domenie

text: Wiele z odczytów, które przeprowadziłem na DDD, zarówno w książkach, jak i w Internecie, wydaje się przedstawiać kod, który często jest trudny lub niemożliwy do przetestowania jednostkowego. Na przykład istnieje wiele przykładów ze statycznymi fabrykami, wywołaniami konkretnych klas domen i statycznymi metodami rozszerzającymi (tylko w próbkach C#). Uważam, że to frustrujące i obciążające, że muszę ciągle ponownie oceniać kod, aby można go było przetestować w moim umyśle. Czy ktoś może zaproponować materiał, który demonstruje kod DDD z myślą o 100% testowalności (najlepiej w C#)? Trochę się też zastanawiam: czy fakt, że wiele próbek kodu nie jest przyjaznych dla testów, jest oznaką (zapachu), że DDD staje się przestarzałe?


title: jaki jest najlepszy sposób na zapewnienie odpowiedzialności podczas sprawdzania kodu?

text: Uwaga: po napisaniu tego zdaję sobie sprawę, że to pytanie może być filozoficzne, ale interesuje mnie, jak branża radzi sobie z tym scenariuszem niezależnie. Ostatnio pracowałem z bazą kodu, która nie jest jeszcze tak testowalna, jak powinna. Widziałem kilku młodszych programistów sprawdzających kod, który łamie przypadki użycia, co zwykle jest identyfikowane przez innego programistę kilka dni po zameldowaniu. Zakładając, że nie możemy jeszcze osiągnąć pokrycia kodu, czy istnieją rozwiązania techniczne pozwalające na pociągnięcie programistów do odpowiedzialności za złe check-in oprócz nietechnicznego podejścia; omówienie zatwierdzenia i poproszenie dewelopera o rozwiązanie problemu w nowym zatwierdzeniu.


title: Nazwa błędu, który znika, gdy ktoś na niego spojrzy

text: Czy ktoś zna istniejącą nazwę błędu, która znika w momencie, gdy zadzwonisz do kogoś, aby go obejrzeć? To zabawne zjawisko, ale od czasu do czasu zdarzyło mi się pracować nad błędem, który stale się pojawia, ale gdy tylko zadzwonię do znajomego, aby go ze mną popatrzył, zachowanie bugów ustaje i nie pojawia się ponownie . Różni się to od wszystkich innych dziwnych nazw błędów, które znalazłem, takich jak heisenbug lub mandelbug, ponieważ zdecydowanie tam jest, nawet gdy próbuję go zbadać, dopóki nie zostanie pokazany komuś innemu. Mój współpracownik zaproponował dla tego zjawiska nazwę „Calvinbug”, za Calvinem i Hobbesem. Myśli? I nie, nie jestem szalony. :)


title: Efektywność REST w metodach liczebnościowych i sumarycznych

text: Na przykład, jeśli mam tabelę transakcji klienta i utworzę dla niej REST. Pola to: data, opis i suma_kwoty. Próbuję dowiedzieć się, który z nich jest o wiele bardziej wydajny, gdy otrzymujesz sumę i liczbę transakcji: 1. Tworzysz REST dla URI `/transactons` i zawiera on listę wszystkich transakcji. Następnie „sumujesz” wszystkie transakcje za pomocą javascript i „liczysz” wszystkie transakcje za pomocą javascript. 2. Tworzysz REST dla URI `/transactions/count` i `/transactions/sum` i wyświetlasz liczbę i sumę dla wszystkich transakcji. Następnie uzyskaj liczbę i sumę za pomocą javascript. Zastanawiam się, który z nich jest lepszy.


title: Czym różni się tworzenie aplikacji dla Windows Phone 8 od Windows Phone 7.x?

text: Co się zmieniło w odniesieniu do wzorców projektowych? Czy obaj używają tych samych technik programistycznych? Jeśli mam do czynienia z opcją nauki `Windows Phone 7` vs `Windows Phone 8`, czy nauka Windows Phone 7 zakwalifikuje mnie do bezpośredniego rozpoczęcia rozwoju Windows Phone 8?


title: Jaka jest najlepsza struktura adresu URL RESTful dla zasobu rekurencyjnego?

text: Tworzę usługę RESTfull dla struktury zasobów podobnej do drzewa i zastanawiałem się, jaka byłaby najlepsza struktura adresu URL? Mam trzy wymagania: 1. być w stanie uzyskać kolekcję zasobów root 2. być w stanie uzyskać pojedynczy zasób 3. być w stanie uzyskać kolekcję zasobów potomnych Moja obecna myśl to: /odpoczynek/dokumenty /odpoczynek/dokumenty/ {id} /rest/documents/{id}/documents Myślałem również o skorzystaniu z tras w liczbie pojedynczej / mnogiej do oznaczania list lub pojedynczych elementów, ale wiem, że będę miał zasób, który jest w tej samej liczbie mnogiej, co jest pojedyncza, więc zdecydowaliśmy się tego nie robić. Czy ktoś ma jakieś przemyślenia na ten temat? lub masz inny / lepszy sposób na zorganizowanie tego? Wielkie dzięki Matt


title: Porównując kombinację literałów String, czy jest konwencją wywoływanie .equals() na literale?

text: Każda z nich ma swoje zalety i rozumiem różnice – ale co jest uważane za najlepszą/standardową praktykę? Czemu? `"myString".equals(myStringVar)` * Unika potencjalnego NPE i nie wymaga sprawdzania wartości NULL. (Dobra rzecz?) * Czystsze do czytania, ponieważ sprawdzanie wartości zerowej nie jest wymagane. * Jeśli null nie jest oczekiwaną wartością, program może się psuć, nie będąc mądrzejszym. `myStringVar.equals("myString")` * Wymaga sprawdzenia null, jeśli null jest oczekiwaną wartością. (Dobra rzecz?) * Czy można zaśmiecać złożone warunki warunkowe sprawdzaniem wartości null. * Pozwala NPE poinformować nas, jeśli coś się zepsuło.


title: Czy Java, J2EE i Java Web stają się z czasem coraz lepsze? Po miesiącach nadal wydaje mi się to problematyczne

text: Jestem trochę nowy w Java Web Development. JSF, JSP, Servlets, Hibernate itp. Naprawdę dobrze rozumiem OOP i C++. Mam wieloletnie doświadczenie w tworzeniu stron internetowych w PHP i MySQL. Mam również doświadczenie z C# i ASP.NET oraz jestem studentem inżynierii oprogramowania. Nie chcę kontynuować mojej kariery z PHP, ponieważ staje się on bardzo popularny, jest wielu ludzi, którzy go używają, a ja nie mogę w pełni wykorzystać mojej wiedzy inżynierskiej w PHP. Jest bardziej podstawowy. Potrzebuję bardziej korporacyjnego środowiska, Java EE jest dokładnie taka. Ale... Przez te ostatnie tygodnie zastanawiałem się nad kontynuowaniem moich postępów w Java EE. Mam te **problemy wymienione poniżej** i chciałbym poznać Twoje przemyślenia, zwłaszcza jeśli jesteś doświadczonym użytkownikiem Java EE. Najbardziej prymitywne pytanie brzmi: ** czy z czasem stają się coraz lepsi z przyzwyczajaniem się do Javy jako programiści? Czy, jeśli masz doświadczenie w Javie EE, nadal masz do czynienia z tego rodzaju problemami po latach?** * Zawsze istnieje „konflikt wersji” między jarami, który trzeba rozwiązać. * Zawsze pojawia się błąd z powodu brakującego lub dodatkowego słoika. * Jest tak wiele plików jar... To naprawdę przytłaczające. Używam Hibernate, JSF i CXF w Tomcat i mam ponad 100 plików jar w WEB-INF/lib. Dwa wymienione powyżej problemy zwiększają się wraz ze wzrostem liczby słoików. * Tomcat lub Glassfish nie wystarczą do rozwoju. Zwłaszcza Tomcat jest gorszy. Jest wiele problemów. Powiedzmy, że Tomcat nie aktualizuje zawsze katalogu wtpwebapps. Czasami ręcznie kopiuję i wklejam słoiki. Eclipse 80% przypadków restartuje Tomcata po zapisaniu plików .java i nie aktualizuje się w trybie hot-replace, ale czasami to robi. (Tak, zawsze w trybie debugowania) * Istnieje wiele implementacji. To dobrze, ale skonfigurowanie jednego z nich zajmuje co najmniej godziny lub dni. Jak usługi internetowe. Jakie wdrożenie? Właśnie otrzymałem błąd, ponieważ najnowsza wersja Axis2 nie obsługuje Dynamic Web Module 3.0. * Konfiguracja środowiska programistycznego zajmuje wiele godzin. Jeśli muszę pracować na innym komputerze, sprawdzam repozytorium SVN i konfiguruję biblioteki w ścieżce budowania, serwerze i rozwiązuję nowe błędy zależności, co zajmuje dużo czasu. Nadal nie mam pojęcia, jak radzić sobie z różnymi ścieżkami bibliotek na różnych komputerach (niektóre ścieżki nie są względne, jak ustawienie folderu projektu Axis2). * Po miesiącach system logowania Tomcat lub Glassfish wciąż wydaje mi się skomplikowany. Mam dość sprawdzania zakładki Konsola w Eclipse, jeśli jest błąd/wyjątek. Nawet połowa wyjątków nie opisuje jasno problemu. * Nie ma stabilności jak Apache Web Server (lub binarny php w tym sensie) w Tomcat i Glassfish. Możesz bardzo łatwo zawiesić cały Web App Server z drobnym błędem. (Nawet aplikacja nie powinna się zawiesić. Tylko że żądanie powinno zostać zawieszone.) * Używam PHP od lat i żadne błędy nie wpłynęły na mój rozwój lub produkcję. Ale po zaledwie 5-6 miesiącach z javą dostałem kilka błędów, które mnie spowolniły. Nawet Eclipse ma krytyczne błędy w swoich podstawowych funkcjach. (tj. Emulator Androida nie wdraża mojego pliku .apk i muszę zabić adb.exe za każdym razem po uruchomieniu emulatora. To nie jest dokładnie Java EE, ale dobry przykład. Były inne błędy Java EE, na które natknąłem się.) * Są zawsze problem wsparcia dla nowych wydań. (tj. najnowsze środowisko Eclipse nie obsługuje narzędzi Hiberbate). * Wszędzie jest wiele plików konfiguracyjnych. * Pliki konfiguracyjne są naprawdę różne. Nawet użycie samego systemu logowania, takiego jak log4j, zajmuje wiele godzin, aby zrozumieć jego konfigurację i wdrożenie w systemie projektu. To właśnie wyleciało mi z głowy. Są oczywiście inne problemy. Każdy język ma, ale wydaje mi się, że Java ma więcej niż inne. **Więc, czy z czasem stają się lepsze dla mnie jako programisty? 2-3 lata później, jeśli będę kontynuował korzystanie z Javy i J2EE, czy pozbędę się większości tych irytujących rzeczy dzięki większemu doświadczeniu?**


title: Czy kod związany w WPF powinien być uważany za część widoku?

text: Przeczytałem wiele artykułów dotyczących różnych wzorców używanych z WPF i jest to coś, czego jeszcze nie rozumiem: **czy plik związany z kodem powinien być uważany za część widoku?** W konsekwencji powinien pliki mogą wykorzystywać wiedzę o konkretnych elementach znaczników? Mam kilka scenariuszy, w których na kontrolki obecne w widoku mają wpływ dane w modelu widoku (np. przycisk dla każdego elementu listy). Obecnie radzę sobie z tego rodzaju scenariuszami w odpowiednim pliku związanym z kodem. Dla mnie wydaje się to szczegółem implementacji widoku, a zatem jego częścią; inny widok tego samego modelu widoku może na przykład wybrać pole listy elementów listy).


title: Czy para dwóch ściśle powiązanych klas jest lepsza niż jedna, większa klasa?

text: W tej chwili przepisuję czyjś kod i natrafiłem na dwie klasy, które odwołują się do siebie bezpośrednio i wywołują metody na sobie. Podobnie (przykład w C#): class A { B otherClass; public A() { this.otherClass = new B(this); } // Inne metody wywołują tutaj metody na B } class B { A otherClass; public B(A otherClass) { this.otherClass = otherClass; } // Inne metody wywołują tutaj metody na A } Czytając jego kod i próbując go zrozumieć, muszę przechodzić między dwiema klasami, gdy się nawzajem wywołują. Te klasy nie mogą być ponownie używane niezależnie bez użycia innych. Zdaję sobie sprawę, że uważa się, że najlepszym rozwiązaniem jest unikanie odwołań cyklicznych (i jest to po prostu niedozwolone między projektami C# w programie Visual Studio), ale czy jest to lub może to być w twoim doświadczeniu lepsze niż posiadanie jednej - większej - klasy?


title: Jak w praktyce działa utrzymanie OpenJDK?

text: W szczególności chciałbym zrozumieć różnicę między Oracle JDK i OpenJDK pod względem poprawek i innych poprawek. Która gałąź otrzymuje poprawki jako pierwsza i czy Oracle ma zwyczaj robienia łat, które nigdy nie trafiają do OpenJDK?


title: Czy jestem za młody, żeby się wypalić?

text: Czuję się tak, jakbym się wypalił, mimo że skończyłem studia dopiero od 5 lat. Przez pierwsze 3 lata mojej kariery wszystko układało się świetnie. W szkole nigdy nie byłam kimś wyjątkowym, ale czułam się wyjątkowa w moim towarzystwie. Patrząc wstecz, mogłem powiedzieć, że wykonałem wszystkie właściwe ruchy: * Codziennie aktywnie starałem się poprawiać. * Postarałem się pomóc każdemu, kogo mogłem. * Zwróciłem uwagę (i przeczytałem książki o tym), że jestem dobrym członkiem zespołu. * Dobrze się bawiłem. Po 3 latach z rzędu jako najlepszy pracownik zamieniłem ten kapitał polityczny na pracę nad interesującym, efektownym projektem z tylko 2 programistami: mną i bardzo szanowanym starszym kierownikiem technicznym. Ciężko pracowałem nad tym projektem i odniósł ogromny sukces. Wysoka jakość, mało błędów, brak opóźnień itp. Starszy lider techniczny otrzymał poważną promocję i GIGANTYCZNY bonus. Nie mam niczego. Byłem tak rozczarowany, że po prostu przestałem się tym przejmować. Przez ostatni rok po prostu pływałem. Przez pierwsze 4 lata czułem się pełen energii po 10 godzinnym dniu pracy. Teraz ledwo mogę pracować 6 godzin dziennie. Jakakolwiek rada? Nawet nie wiem, o co pytam. Mam tylko nadzieję, że sprytni ludzie to zobaczą i podrzucą mi kilka mądrości.


title: Projekt bazy danych ERD: 2 typy użytkowników w jednej tabeli

text: Przeczytałem to (Projekt bazy danych: 3 typy użytkowników, oddzielna czy jedna tabela?) Postanowiłem umieścić admina i zwykłego użytkownika w jednej tabeli, ponieważ atrybuty są podobne: imię i nazwisko, adres, telefon, e-mail, płeć ... Potem ja chcę narysować ERD, nagle w mojej głowie pojawia się pytanie. Jak rysować? Klient umawia się na spotkanie, a administrator zatwierdza spotkanie. teraz tylko dwa stoły, a administrator, klient w tym samym stole. Pomoc.


title: Obsługa wielu metod logowania

text: Obecnie używam Parse do obsługi mojego backendu i mam wiele sposobów logowania -> przez zwykły e-mail/hasło i przez linkedin. Parse posiada specyficzną metodę logowania wymagającą podania nazwy użytkownika/hasła. Jeśli użytkownik zarejestruje się przez linkedin, mieszam kombinację jego informacji jako hasło i loguję się przez parsowanie. (tj. nazwa użytkownika: konto linkedin użytkownika / hasło: zaszyfrowana wersja informacji o użytkowniku). Jeśli użytkownik rejestruje się przez e-mail, ustawia własne hasło, loguje się przez parse (tj. nazwa użytkownika: e-mail użytkownika / hasło: predefiniowane hasło użytkownika). Nie ma możliwości odzyskania hasła w postaci zwykłego tekstu, więc jaki byłby dobry sposób na obsługę logowania przez linkedin, gdy użytkownik zarejestrował się regularnie (ustaw własne hasło) i odwrotnie?


title: Eksperymentujesz z niekonwencjonalnymi sposobami wykorzystania wzorców projektowych?

text: Trzymamy się standardowych zastosowań i najlepszych praktyk, ponieważ dobrze działają i komunikują intencje, ale bez próbowania nowych rzeczy nie możemy się rozwijać. Czy kiedykolwiek próbowałeś czegoś, co wydawało się absurdalne, ale zadziałało naprawdę dobrze? Kiedy to działa, jak uniknąć mylenia innych programistów z niestandardowymi zastosowaniami? A co robisz, gdy coś idzie strasznie źle – refaktoryzuj, zacznij od nowa lub po prostu idź z tym?