title: czy powinienem rozszerzyć czy utworzyć instancję klasy?

text: Mam dwie klasy Klasa A i Klasa B w Klasie A, mam trzy metody, które wykonują operacje zapisywania, usuwania i wybierania w oparciu o przekazany przeze mnie obiekt. w klasie B wykonuję operacje logiczne, takie jak modyfikacja właściwości obiektu przed przekazaniem do metod klasy A, Mój problem jest w klasie B, jeśli rozszerzy klasę A i wywołam metody klasy A przez rodzica ::methodName lub utwórz instancję klasy A, a następnie wywołaj klasę A nie zawiera żadnych właściwości, tylko metody. class A{ funkcja publiczna save($obj){ //kod tutaj } funkcja public delete($obj){ //kod tutaj } funkcja public select($obj){ //kod tutaj } } //Czy powinienem rozszerzyć klasę A i wywołaj metodę przez parent::methodName($obj) lub utwórz instancję klasy A, wywołaj metodę $instanceOfA->methodName($obj); klasa B rozszerza A{ funkcja publiczna checkIfHasSaved($obj){ if($obj->saved == 'Tak'){ parent::save($obj); //**czy powinienem wywołać tę metodę** $instanceOFA = new A(); //**lub utwórz instancję klasy A i wywołaj bez rozszerzania klasy A** instanceOFA->save($obj); } //inne operacje logiczne tutaj } }


title: Czy wykorzystałbyś czas „Google 20%”, gdyby Twój pracodawca zachęcał go i finansował?

text: Wiemy o 20% projektach Google, w których programista może poświęcić do 20% swojego czasu na osobisty projekt, który go interesuje. Gdyby twój pracodawca pozwolił ci spędzić 20% czasu nad projektem, który nie był częścią twojej codziennej pracy, czy wykorzystałbyś to? Przychodzi mi do głowy kilka powodów, dla których nie: * Sprawiłoby to, że Twoja normalna praca trwałaby o 20% dłużej (wydłużony termin) * Możesz chcieć zachować swój osobisty pomysł jako „osobisty”.


title: Jakie są najczęstsze sposoby stopniowej migracji aplikacji Delphi do .NET?

text: Jeśli masz kilka milionów linii kodu Delphi i chcesz stopniowo migrować do .NET/C#, jakiej strategii byś użył?


title: Częstotliwość obsługi wyjątków/Szczegóły dziennika

text: Pracuję nad dość złożoną aplikacją .NET, która współdziała z inną aplikacją. Wiele jednowierszowych instrukcji może być przyczyną zgłaszania wyjątków i często nie mogę nic zrobić, aby sprawdzić stan przed ich wykonaniem, aby zapobiec tym wyjątkom. Pytanie brzmi, opierając się na najlepszych praktykach i doświadczonym doświadczeniu, jak często powinienem łączyć kod z blokami try/catch? Poniżej wymieniłem trzy przykłady, ale jestem otwarty na wszelkie porady. Naprawdę mam nadzieję, że zdobędę kilka zalet / wad różnych podejść. Z pewnością mogę wymyślić własne (większa szczegółowość logów dla podejścia O-C, lepsza wydajność dla podejścia Monolithic), więc szukam _doświadczenia_ nad opinią. * * * **EDYTUJ:** Powinienem dodać, że ta aplikacja jest programem wsadowym. Jedynym niezbędnym „odzyskiwaniem” w większości przypadków jest zarejestrowanie błędu, łagodne oczyszczenie i zamknięcie. Tak więc może to być postrzegane jako kwestia granulacji dziennika, jak obsługa wyjątków. Oczyma wyobraźni potrafię sobie wyobrazić dobre powody obu, dlatego szukam kilku ogólnych rad, które pomogą mi znaleźć odpowiednią równowagę. * * * ## Monolitich Approach class Program{ public static void Main(){ try{ Step1(); Krok 2(); Krok 3(); } catch (Wyjątek e) { Log(e); } wreszcie { CleanUp(); } } public static void Step1(){ ExternalApp.Dangerous1(); ZewnętrznaAplikacja.Niebezpieczna2(); } public static void Step2(){ ExternalApp.Dangerous3(); ZewnętrznaAplikacja.Niebezpieczna4(); } public static void Step3(){ ExternalApp.Dangerous5(); Aplikacja zewnętrzna.Niebezpieczna6(); } } ## Podejście delegowane klasa Program{ public static void Main(){ try{ Step1(); Krok 2(); Krok 3(); } wreszcie { CleanUp(); } } public static void Step1(){ try{ ExternalApp.Dangerous1(); ZewnętrznaAplikacja.Niebezpieczna2(); } catch (Wyjątek e) { Log(e); rzucić; } } public static void Step2(){ try{ ExternalApp.Dangerous3(); ZewnętrznaAplikacja.Niebezpieczna4(); } catch (Wyjątek e) { Log(e); rzucić; } } public static void Step3(){ try{ ExternalApp.Dangerous5(); Aplikacja zewnętrzna.Niebezpieczna6(); } catch (Wyjątek e) { Log(e); rzucić; } } } ## Podejście obsesyjno-kompulsywne class Program{ public static void Main(){ try{ Step1(); Krok 2(); Krok 3(); } wreszcie { CleanUp(); } } public static void Step1(){ try{ ExternalApp.Dangerous1(); } catch (Wyjątek e) { Log(e); rzucić; } spróbuj{ ZewnętrznaAplikacja.Niebezpieczna2(); } catch (Wyjątek e) { Log(e); rzucić; } } public static void Step2(){ try{ ExternalApp.Dangerous3(); } catch (Wyjątek e) { Log(e); rzucić; } spróbuj{ ZewnętrznaAplikacja.Niebezpieczna4(); } catch (Wyjątek e) { Log(e); rzucić; } } public static void Step3(){ try{ ExternalApp.Dangerous5(); } catch (Wyjątek e) { Log(e); rzucić; } spróbuj{ ZewnętrznaAplikacja.Niebezpieczna6(); } catch (Wyjątek e) { Log(e); rzucić; } } } ** Inne podejścia są mile widziane i zachęcane. Powyżej są tylko przykłady.**


title: Aktualizacja wiedzy o Java SE i Java EE

text: Zastanawiam się, jak codziennie aktualizujecie swoją wiedzę techniczną. Na pewno będzie z internetu. Ale jakie są te źródła? Np. Nie wiedziałem o technologii DWR, ale wiedziałem od kolegi i używałem jej w swojej pracy. Lubię wiedzieć o takich technologiach, aby używać ich w naszych projektach Java SE i Java EE, gdy tylko będą one dostępne dla społeczności.


title: Wzorzec "Pula obiektów roboczych"?

text: W mojej aplikacji żądania są przetwarzane przez obiekty klas pochodnych `Processor`, np. `CreateItemProcessor` lub `MoveItemToGroupProcessor`. Klasa Base Processor implementuje większość typowej logiki przetwarzania, a pochodne tworzą pewne specyficzne zadania związane z logiką biznesową. Obiekt określonego typu procesora jest tworzony przed przetwarzaniem żądania, a następnie usuwany. W końcu doszło do sytuacji, w której stworzenie pojedynczego obiektu procesorowego zajmowało większą część czasu przetwarzania żądania. Więc teraz myślę o stworzeniu puli obiektów procesora żądań i ponownym wykorzystaniu ich zamiast używania podejścia tworzenia/usuwania. Problem polega na tym, że żaden pojedynczy obiekt `Processor` nie jest bezpieczny dla wątków i właściwie nie powinien być bezpieczny dla bieżnika: przechowuje w nim dane specyficzne dla żądania. Więc moje ogólne podejście do tego jest następujące: * Spróbuj nabyć „procesor” z puli; * Jeśli nie ma żadnych dostępnych, poczekaj; * Gdy mamy dostępny procesor, oznacz go jako „działający” i rozpocznij przetwarzanie; * Po zakończeniu zadania "zwróć" procesor do puli; * Powiadom pulę, że dostępny jest bezpłatny procesor. Czy jest na to jakiś wzorzec projektowy? Czy brakuje mi czegoś z istniejących wzorców GoF? Jakieś szczegóły implementacji związane z językiem C#?


title: Dlaczego kolekcje Java zostały zaimplementowane z "metodami opcjonalnymi" w interfejsie?

text: Podczas mojej pierwszej implementacji rozszerzającej framework kolekcji Java, byłem dość zaskoczony, widząc, że interfejs kolekcji zawiera metody zadeklarowane jako opcjonalne. Oczekuje się, że realizator zgłosi UnsupportedOperationExceptions, jeśli nie jest to obsługiwane. Od razu uderzyło mnie to jako kiepski wybór projektu API. Po przeczytaniu dużej części znakomitej książki Joshuy Blocha „Efektywna Java”, a później dowiedzeniu się, że może on być odpowiedzialny za te decyzje, nie wydawało się, aby zgadzała się z zasadami przedstawionymi w książce. Myślę, że zadeklarowanie dwóch interfejsów: Collection i MutableCollection, które rozszerzają kolekcję metodami „opcjonalnymi”, doprowadziłoby do znacznie łatwiejszego w utrzymaniu kodu klienta. Tutaj jest doskonałe podsumowanie problemów. Czy istniał dobry powód, dla którego wybrano metody opcjonalne zamiast implementacji dwóch interfejsów?


title: W c++ różnica między łączeniem obiektu klasy a jego dołączaniem.

text: to jest mój pierwszy raz tutaj. Jestem studentem fizyki i niedawno znalazłem grupę badawczą, z którą mogę pracować. Badamy mechanikę statystyczną za pomocą modeli komputerowych, więc jest w tym istotny aspekt programistyczny. Moim pierwszym zadaniem było pobranie starego kodu do analizy danych (napisanego w java) i wyczyszczenie go w c++. Facet przede mną, który napisał oryginalny program, używał tradycyjnej metody fizyki, używając ogromnej ilości kodu spaghetti i umieszczając to wszystko w konstruktorze. Trochę mnie to zirytowało, więc podzieliłem go na osobne klasy i teraz ma rozsądną strukturę klas. W przeszłości za każdym razem, gdy definiowaliśmy klasę, umieszczaliśmy jej definicje i jej metody w funkcji nagłówka, a żeby jej użyć, po prostu ją dołączaliśmy. Wiem, że to łamie zasady korzystania z plików .h i .cpp, ale czy istnieje inny powód niż etykieta kodu, aby skompilować i połączyć obiekt klasy, zamiast go dołączać? Przepraszam za długie pytanie.


title: Używasz mocków do ustawiania obiektu, nawet jeśli nie będziesz kpił z żadnego zachowania ani nie weryfikował interakcji z nim?

text: Tworząc test jednostkowy, **czy warto użyć narzędzia do drwin, które pomoże Ci skonfigurować obiekt**, nawet jeśli nie będziesz kpił z żadnego zachowania ani nie weryfikował interakcji z tym obiektem? Oto prosty przykład w pseudokodzie: //obiekt, który chcemy zakpić Object someMockedObject = Mock(Object.class); EqualityChecker checker = new EqualityChecker(someMockedObject); //obiekt, z którego wyśmiewamy się tylko po to, aby uniknąć zastanawiania się, jak utworzyć instancję lub //związać się z jakimś konstruktorem, który może zostać usunięty w przyszłości ComplicatedObject someObjectThatIsHardToInstantiate = Mock(ComplicatedObject.class); //ustaw oczekiwanie na próbie When(someMockedObject).equals(someObjectThatIsHardToInstantiate).return(false); Assert(equalityChecker.check(jakiśObiekt, który jest trudny do wystąpienia)).isFalse(); //zweryfikuj, czy makieta działała poprawnie z Verify(someMockedObject).equals(someObjectThatIsHardToInstantiate).oneTime(); Czy w tym scenariuszu należy zakpić ComplicatedObject?


title: jaki jest termin techniczny tego modelu prezentacji?

text: Mam odziedziczoną aplikację, którą nazwałbym "proto-MVC" i uwielbiam koncepcję MVC, ale jestem w niej nowy. W moim idealnym śnie o lekkiej aplikacji cała zawartość dokumentu jest przechowywana w tablicy: <script> var MVCDocument={ DOM:{ ... }, listeners[ {..}, {..}] } </ skrypt> Ta tablica definiuje zawartość i strukturę strony, a także jakie zasoby programistyczne są w danym momencie obecne. Następnie miałbym słuchaczy lub uruchamiające procesy, które monitorują strukturę MVCDocument i reagują na wszelkie zmiany w nim. Te procesy to „mózgi”. Wywołania Ajax będą modyfikować lub dodawać adnotacje do MVCDocument. Zmiany w obiekcie MVCDocument mogą z kolei modyfikować odbiorniki/"Mózgi". CSS będzie funkcjonować w stylizacji warstwy prezentacji. Problem w tym, że nie znam odpowiednich terminów, by szukać przykładów tego, co chcę rozwijać. Wolę NIE wymyślać koła na nowo. Jakie są dobre przykłady aplikacji działających w oparciu o tę przesłankę? i czy istnieje więcej elementów niż tylko kości (tablica dokumentów), mózgi (kodowanie javascript) i ubrania (css)?


title: Czy wewnętrzne testy nie pociągają za sobą starannej refaktoryzacji i/lub nie polegają na talencie programisty?

text: Nie pytam tutaj, jakie są argumenty za/przeciw testowaniu metod wewnętrznych (choć niektóre powtórzę i nie mam nic przeciwko wysłuchaniu innych). Moje pytania dotyczą implikacji testowania tylko publicznego interfejsu. Zwłaszcza, czy rozumiem zakres „refaktoryzacji” części Red-Green-Refactor w typowym TDD i czy istnieją techniki inne niż TDD, których używają praktycy TDD, które rozwiązują problemy, które sprawiają, że chcę testować elementy wewnętrzne. Moje pytanie brzmi: jeśli piszesz możliwie najprostszy kod, aby uzyskać jasnozielony kolor, i jeśli nie testujesz metod wewnętrznych, to czy to oznacza, że od czasu do czasu pozwalasz sobie zacząć od napisania klasy, która potrafi znacznie więcej niż powinno z wieloma zmiennymi składowymi, o których wiesz, że nie przetrwają refaktoryzacji? I skończyć po refaktoryzacji z kilkoma metodami, które nie są jawnie testowane? Kiedy zapoznaję się z TDD, wydaje mi się, że każdy miałby przynajmniej pokusę przetestowania wewnętrznych metod. A wielu praktykujących kategorycznie mówi, że nie powinieneś. Np. (z około 23 milionów wyników): Pozycja 2 tutaj i to komentarze i ten post StackOverflow Biorąc pod uwagę, że implementacja będzie obejmować więcej niż jeden nietrywialny problem, jeśli testujesz tylko interfejs publiczny, istnieją dwie możliwości: 1) nietrywialna logika kończy się testowaniem tylko pośrednio ORAZ testowaniem w tych samych wywołaniach, co inne nietrywialne logiki. 2) upubliczniasz metody, których nie oczekujesz od klientów innych niż SUT i testy. Myślę, że to, co słyszę od zwolenników formalnego TDD, to „1 ma rację. Tak, wiele nietrywialnych kodów jest testowanych tylko pośrednio, a to nie jest problem. W końcu nie chcesz Twoje testy zaczną kończyć się niepowodzeniem, gdy poprawisz implementację. Nawet jeśli nie zawodzą, nie jest nieszkodliwe, jeśli testy nadal przechodzą, gdy są skierowane na grupę nieużywanego już kodu, ponieważ testy pokazują, jak używać Twojej klasy . Należy testować tylko interfejs publiczny”. I brzmi to jak rozsądna rzecz do powiedzenia, ale nie widziałem, żeby zostało to powiedziane wprost. Ale nawet jeśli brzmi to rozsądnie -- jeśli nie testuję elementów wewnętrznych, czuję, że tracę część tego, co pomaga w utrzymaniu testów NAPĘDZAJĄC kodowanie (może część moich trudności w stosowaniu wskazań polega na tym, że nie rozróżniam między kodowaniem a rozwojem ). Jeśli istnieje jakaś wewnętrzna logika, która musi zmienić String na prawidłową wartość int32, int64 lub dziesiętną w zależności od tego, co jest w ciągu i typu jakiegoś innego obiektu, chcę przetestować ten mały fragment logiki, a nie tylko dowiedzieć się, że cała metoda zawiodła. Chcę, aby jeden test wskazał te kilka linijek kodu i sprawdził, co powinno się nie udać. Myślenie w podwójnie przegłosowanej odpowiedzi wydaje się tak oczywiście atrakcyjne, że muszę się zastanowić, czy koledzy z książki nie zapominają wspomnieć o jakimś kodzie oprzyrządowania/śledzenia/logowania, którego używają oprócz TDD, czy też obserwują, jak to działa w symboliczny debugger. A może po prostu uznają to za punkt niepowodzenia i napiszą test z danymi wejściowymi, które spowodują awarię, wskazując te kilka linijek kodu? Jeśli to zrobią, to testowanie implementacji. Wydaje się tak naturalne, że chcieć przetestować ten kod w izolacji i sprawdzić, czy nie powiedzie się tam, gdzie powinien, nawet jeśli jest to szczegół implementacji. Przypuszczam, że z talentem i doświadczeniem można zaklasyfikować większe fragmenty kodu jako „nietrywialne”, ale nie widziałem nikogo, kto by wprost lub protekcjonalnie sugerował, że właśnie dlatego nie muszą testować szczegółów implementacji. Przez wiele czasu testowanie interfejsu publicznego ma dla mnie sens, wiele metod naprawdę przypomina to, co widać w przykładach TDD. Ale żeby poczuć, gdzie się zastanawiam, czy puryści robią coś więcej niż pisanie testów na członkach publicznych: powiedzmy, że chcesz umieścić dane z pliku ISAM w bazie danych. Istnieje jedna metoda publiczna dla przewidywanego konsumenta kodu: public void LoadIt(SqlConnection c). „Loadit” ma wiele innych zależności, które zostaną rozwiązane za pomocą plików konfiguracyjnych i zmiennych środowiskowych: część kodu musi określić, czy może znaleźć nazwę folderu, w którym znajdują się moduły ISAM; znaleźć, załadować i przeanalizować plik schematu dla isamów przy użyciu biblioteki DDL dostawcy ISAM; tak dalej + tak dalej. Ale nic z tego nie jest interesujące dla jakiegokolwiek wyobrażonego kodu wywołującego. Moim jedynym powodem przeniesienia programów rozpoznawania zależności z klasy Loadit byłoby to, abym mógł je przetestować LUB, aby kod był łatwiejszy do zrozumienia/utrzymania. Przejście do innej klasy w celu uczynienia ich testowalnymi to Doing It Wrong — tak naprawdę to tylko szczegóły implementacji LoadIt. A w mojej pierwszej implementacji po prostu próbuję napisać wystarczająco dużo kodu, aby światło zmieniło się na zielone. Więc nie napiszę niczego z rozsądną łatwością utrzymania, jeśli łatwiej jest po prostu obsłużyć kilka zmiennych w dużej metodzie lub dwóch. Nie będę pisał klas pomocniczych. Zamiast tego dostanę jasnozielony, a następnie pilnie wykonam część Refactor. Nawet kiedy to posprzątam, wszelkie wprowadzone klasy zachowują dostępność "wewnętrzne/przyjacielskie" i są testowane tylko przez wywołanie LoadIt. Dzięki za przeczytanie do tej pory; dla przypomnienia moje pytanie znajduje się w drugim akapicie.


title: Jak odpowiedni jest D2 do pracy numerycznej?

text: Interesuje mnie praca z językiem programowania D do symulacji fizyki. Jak to jest odpowiednie? Czy generowanie kodu zmiennoprzecinkowego DMD jest wystarczająco dojrzałe, aby konkurować z kompilatorami dostępnymi dla c++ i fortran? Czy szybkie biblioteki macierzy zostały przeniesione do D (lub są dostępne z D)? Czy w samym języku jest coś, co hamuje/poprawia wydajność zmiennoprzecinkową języka? Uwielbiam programować w tym języku, jednak obawiam się, że kompilatory/biblioteki mogą nie nadawać się jeszcze do pracy numerycznej.


title: Jak wdrożyć heterogeniczną aplikację serwerową u klientów?

text: Mamy większy serwer aplikacji, który klienci chcieliby wdrożyć lokalnie. Składa się z bazy danych serwera MySQL, bazy danych REDIS, wielu serwerów WWW dla podczęści, odwrotnego proxy NGINX, dzięki czemu te serwery WWW są dostępne z portu 80 i domowego serwera C++. Wszystkie podczęści (DB, serwery WWW, ...) muszą być skonfigurowane tak, aby były dostępne dla siebie nawzajem. Obecnie (do użytku domowego) wdrażanie i konfiguracja odbywa się ręcznie; ale aby udostępnić go klientom, chcielibyśmy mieć gotowe rozwiązanie, które jest składane przez jakiś skrypt kompilacji. Co byś zasugerował? 1. Utrzymywanie maszyny wirtualnej, która dopiero zostanie skonfigurowana, a następnie wdrożona? 2. Utrzymanie skryptu lub pakietu instalacyjnego 3. Coś jeszcze? Zwykle wolelibyśmy 2. ponieważ wydaje się to bardziej naturalny sposób i pozwolić klientowi zdecydować, czy chce użyć prawdziwego serwera, czy maszyny wirtualnej. Brzmi również, że automatyczne tworzenie maszyn wirtualnych jest dość czasochłonne. Problemy, z którymi mamy do czynienia, to zwykle nie do osadzania komponenty, takie jak MySQL i NGINX. Konfiguracja NGINX jest przechowywana w /etc/nginx/. Nie sądzę, aby pakiety .DEB mogły nadpisywać obcą konfigurację NGINX, ani nie jest to dobra praktyka. To samo z MySQL. Możliwe jest również osadzenie MySQL/NGINX/Redis, ale nie jest to trywialne zadanie.


title: A co z systemami ALM, ERP i produktami wbudowanymi?

text: Pracujemy nad uzyskaniem nowego systemu zarządzania cyklem życia aplikacji (ALM), w tym bug trackera, systemu dokumentacji, zarządzania projektami itp. Obawiamy się, że mamy do czynienia z dość złożonymi systemami wbudowanymi i chcielibyśmy mieć jak najlepszą integrację różnych usług (zarządzanie projektami, śledzenie problemów/zadań, dokumentacja itp.). Gdyby to było tylko oprogramowanie kupiłbym po prostu coś takiego jak JIRA, ale fakt, że chcielibyśmy zarządzać oprogramowaniem, firmware (tam nie ma większego problemu) i sprzętem w tym samym systemie trochę wątpię. Szukam porady w następujących kwestiach: * A co z zarządzaniem „błędami” w produktach wbudowanych? W oprogramowaniu masz wersje modułów, których dotyczy problem. W produktach wbudowanych masz różne oprogramowanie, często różne oprogramowanie układowe, a czasami inny sprzęt. Czy w praktyce dobrze jest po prostu traktować części sprzętowe tak, jakby były modułami oprogramowania w systemie przeznaczonym do oprogramowania? Wydaje mi się, że doda to wiele niestandardowych pól do interfejsu śledzenia błędów i w konsekwencji nie będzie promować jego systematycznego używania. * Niektórzy chcieliby przenieść integrację do poziomu, na którym inwentaryzacja sprzętu jest zintegrowana z resztą. Oznacza to, że projekt w ALM (pomyśl JIRA) musiałby zarezerwować swoje komponenty sprzętowe na podstawie podkomponentów. Oznaczałoby to również, że na przykład ALM, o którym mowa, musiałby być w stanie zarządzać dostawcami części i oferować ułatwienia w zakresie łatwego tworzenia, wysyłania i zarządzania zamówieniami zakupu. Zastanawiam się w tym momencie, czy wszystko w osadzonym procesie zarządzania projektami można zintegrować w jednym systemie zarządzania, czy też należy wytyczyć granicę między 1) śledzeniem błędów/zadań (prawdopodobnie oprogramowaniem i sprzętem) a zarządzaniem projektami i 2) zarządzanie projektami na wysokim poziomie, śledzenie zapasów, zamówień sprzedaży/kupna itp. To, czego ostatecznie oczekujemy, to nic innego jak zintegrowane JIRA i ERP. Czy jest możliwe zrobienie właściwego ALM w istniejącym ERP lub posiadanie już przyzwoitego ERP w systemie ALM? Moją osobistą opinią, z tego co wiem w tej chwili, byłoby oddzielenie spraw i zarządzania projektami (ALM + dokumentacja +...) od ERP. Problem polega na tym, że istnieje dokumentacja dotycząca projektu zarówno w ERP, jak i w zarządzaniu projektem ALM (która byłaby używana do oprogramowania, oprogramowania układowego, sprzętu, ...). Co zabawne, na początku niektóre rzeczy mogą wydawać się bardzo niepowiązane, na przykład arkusze czasu pracy (ERP) i problem (śledzenie błędów w ALM), ale w końcu może to być bardzo interesujące, pożądane, a nawet wymagane wiedzieć, ile czasu poświęcono na błąd lub cały projekt (błędy, problemy, funkcje, inne zadania). Daje to punkt do całkowitej unifikacji ERP/ALM... W tym momencie powinieneś wyczuć moje pytania. Każdy pomocny wkład jest bardzo mile widziany. Dziękuję!


title: LINQPad nadal jest często używany?

text: Próbuję ocenić, jak popularny i jak używany jest dzisiaj LINQPad. Zastanawiam się tylko, czy nadal jest to przydatne narzędzie, czy nie, ponieważ VS i inne narzędzia stały się lepsze. Ponadto koduję przez LLBGen, pracując z LINQ to SQL. Widzę, że jest wtyczka do LLBGen i LINQPad. Nadal zastanawiam się, czy LINQPad jest naprawdę tego wart lub jakie korzyści może mi dać, lub czy nadal jest wysoce zalecany dla ORM itp.


title: W jakim języku jest napisany CLR?

text: Z ciekawości, w jakim języku jest napisany CLR? Czytałem we wpisie wikipedii Java Virtual Machine, że jest zaprogramowany w C++; czy to samo dotyczy CLR? Przepraszam, jeśli jest to nie na temat, nie uważałem, że to pytanie jest wystarczająco techniczne, aby przejść do Stack Overflow. Dziękuję! :)


title: Dlaczego interfejs w Javie nie może mieć stanu?

text: Musi istnieć dobry powód, dla którego projektanci Javy nie pozwalali na definiowanie żadnego stanu w interfejsach. Czy możesz rzucić trochę światła na ten aspekt decyzji projektowej?


title: Kiedy nie używać Google Web Toolkit?

text: Rozważam użycie GWT w dużym wewnętrznym projekcie tworzenia aplikacji internetowych, a mianowicie jego główną zaletą w moich oczach jest kompilacja krzyżowa do JavaScript, która (przynajmniej teoretycznie) pomogłaby mojemu zespołowi zmniejszyć rozmiar stosu technologicznego o jeden . Jednakże, ponieważ zostałem wcześniej spalony (jak większość deweloperów), chciałbym usłyszeć od programistów, którzy faktycznie używali go w przypadku jakichkolwiek problemów z GWT, które utrudniałyby lub ograniczały jego użycie w określonej dziedzinie problemów. Jakie są argumenty przeciwko używaniu GWT i dlaczego?


title: CakePHP: Automatyzacja wyzwala się po zapisaniu - najlepiej zrobić jako komponent lub zachowanie?

text: Ludzie, pierwszy raz w CodeReview - po prostu szukam wkładu w tworzenie automatyzacji w CakePHP, zastanawiając się, czy najlepiej użyć tego komponentu lub zachowania. Jest oparty na modelu, ale obejmuje logikę i przetwarzanie. Oto sens: Aplikacja, którą tworzę, wymaga powiadomienia użytkownika, gdy model spełnia określone warunki — dodatkowo dane w modelu, którego dotyczy problem, lub powiązanym modelu mogą wymagać zmiany. Na przykład, jeśli model klienta jest zapisany z określonym stanem/prowincją, przypisz tego klienta do przedstawiciela handlowego (zmieniając pole relacyjne) i powiadom go za pomocą Growl lub e-maila. Tak więc jest to na pewno oparte na danych, sugerujące zachowanie, przypuszczalnie afterSave() Ale wymaga również logiki i innych narzędzi, które nie są zwykle używane w modelu lub zachowaniu (na przykład poczta e-mail i konfiguracja sesji/systemu/preferencje użytkownika) - funkcjonalność zwykle znajdująca się w kontroler/komponent i nie jest łatwo dostępny dla modelu lub zachowania. Czy najlepiej jest to opracować jako zachowanie czy komponent? Wszelkie wskazówki, jak podejść do Cake Guru, byłyby bardzo mile widziane. Z góry dziękuję.


title: Kiedy używamy int jako wartości logicznych, czy jest to kiepska forma bezpośredniego używania zer i 1?

text: Czy lepiej to zrobić #define INT_TRUE 1 #define INT_FALSE 0 int jakaśFunkcjonalnośćIsEnabled = INT_TRUE; albo to? int jakaśFunkcjonalnośćjestWłączona = 1; Można bezpiecznie założyć, że fałsz zawsze będzie równy zero, a prawda będzie niezerowy.


title: Gdybyś mógł mieć na swojej półce tylko jedną książkę o programowaniu, co by to było i dlaczego?

text: Poproszę jedną na odpowiedź. Dodam mój ulubiony jako odpowiedź.


title: Czy lokalne prawa „użytkownika” wystarczą, czy programiści potrzebują lokalnego administratora lub zaawansowanego użytkownika podczas kodowania?

text: Mamy ekipę programistów offshore, która ma zły nawyk instalowania nonsensownego oprogramowania na korporacyjnych komputerach stacjonarnych (co nie ma nic wspólnego z ich funkcją pracy), dlatego rozważa usunięcie swoich praw administratora lokalnego. Czy lokalny administrator lub lokalny użytkownik zaawansowany jest wymagany w przypadku VS2010? Jak biegać bez podwyższonych uprawnień? Jakie problemy napotkasz?


title: Ustalona nazwa antywzorca? Tylko kaczki danych z rzędu tuż przed ich potrzebą

text: Ten jest w całej naszej bazie kodu, ale nie jestem pewien, czy kiedykolwiek słyszałem, jak to się nazywa. Mamy C# i Javę (i Railsy, ale nie musimy ich zbyt często dotykać), więc powiem bardziej ogólnie. To tak, jakby problemy z danymi nigdy nie zostały w pełni ustalone, dopóki dosłownie nie masz racji w kontrolerze widoku, przygotowującym się do upuszczenia go na stronie (uwaga: w większości przypadków jesteśmy daleko poza rzeczywistymi zapytaniami SQL). Na przykład, mamy dane dla określonego typu produktu pochodzące z CRM, ze skanów wykonanych za pomocą naszej aplikacji mobilnej i ściągniętych z zapasów w bazach danych, a jednak jakoś nie jest tak, dopóki nie dotrzemy do miejsca, w którym dosłownie mamy zamiar spaść to na stronie, na której nagle odkrywamy, że jest logika biznesowa, którą należy się zająć. Nasze działania i kontrolery widoku są GIGANTYCZNE. Zadajemy wszelkiego rodzaju pytania dotyczące każdego obiektu i rozgałęziając się na nie, czy to jest to czy ma to, źródła danych, preferencje klientów, a czasem rzeczy tak pozornie arbitralne, że równie dobrze może to być faza księżyca, zwyczaje migracyjne gatunków, które mam nigdy nawet nie słyszałem o najczęściej wyszukiwanych gwiazdach filmowych... I nie zawsze kończy się to na kontrolerze. W szczególności Java jest znana z tego, że pozwala, aby wszystko rozlało się na JSP, a następnie nawet po stronie klienta w JS. To zjawisko musi mieć nazwę, ale nigdy tego nie słyszałem. Co to jest?


title: Odzyskać iskrę w projekcie

text: Więc jestem w małej marynacie. Przypuszczam, że niektórzy ludzie znaleźli się w mojej sytuacji w pewnym momencie, wiem, ale przynajmniej tyle samo z różnych powodów. Krótko mówiąc; Utknąłem w projekcie, który po kilku próbach "nowego świeżego podejścia" skończył się wyczerpany energią i kreatywnością i był mniej produktywny niż bym chciał. Scenariusz jest taki; Dostałem wcześniej, moim zdaniem, w połowie gotowy projekt wykonany w Drupalu. Na początku miał naprawdę okropny kod, ale udało mi się najpierw go trochę oczyścić. Nie trzeba dodawać, że źle zbudowany dom pełen używanych ubrań i śmieci jest nadal źle zbudowanym domem, nawet bez używanych ubrań i śmieci. Mam obecnie nadzieję, że odzyskam tę iskrę, którą mam dla wszystkich innych moich projektów, która pozwala mi wydajnie pracować i przede wszystkim załatwiać sprawy. W tym przypadku nie mam zainteresowania pracą z tym projektem. Oto kilka powodów: * Kod ma sporo miejsca na ulepszenia. Jedyne rzeczy, które uważam za akceptowalne, to rzeczy wniesione przez Drupala, które są po prostu zaimplementowane w tym projekcie. Większość niestandardowych rzeczy w nim wykonanych to nic, co cenię. * Nie mogę się zmusić, żeby to znieść, bo wiem, że ten projekt będzie czymś, nad czym będę musiał pracować na dłuższą metę. W ten sam sposób nie mogę zmusić się do szybszego przebiegnięcia ostatniego kilometra maratonu, jeśli wiem, że później muszę przejść całą drogę do domu. * Czytałem sporo na temat opinii ludzi na temat Drupala i doszedłem do wniosku, że Drupal jest świetny, jeśli masz do tego odpowiednie nastawienie. Nie mam takiego nastawienia. Wolę sam tworzyć jak najwięcej i po prostu pozwolić, aby framework taki jak CodeIgniter martwił się o cały proces. Pomaga mi to być bardziej pewnym swojego kodu i mniej zależnym od modułu pobranego skądś. * Generalnie nie wierzę w projekt. Załadowanie trwa głupio długo, od czasu do czasu pojawiają się dziwne błędy, których nie mogę nawet skutecznie rozwiązać przez google. Wydaje mi się, że najlepszą rzeczą, jaką mogę zrobić z tym projektem, jest załatanie go, ale staram się tworzyć świetne strony internetowe, a nie czynić złe mniej złymi. * Drupal ma długi proces uczenia się, a ja zostałem umieszczony w połowie gotowego projektu i mam zaimplementować bardziej zaawansowane funkcje. Zwykle nie mam problemu z dodaniem tych rzeczy w innych moich projektach, ale w Drupalu często wydaje się to prawie niemożliwe. Poza tym dodam, że obecnie jestem niezależna ekonomicznie i nie boję się utraty pracy z tego powodu. Generalnie mam fajnych kolegów, ale pracuję sam jako programista i wolałbym mieć przynajmniej kogoś, z kim mógłbym porozmawiać o rozwiązaniach technicznych. Ten projekt nie jest czymś, co odbiega od mojego zrozumienia, usiadłem z moim szefem, wyjaśniając, jak się czuję w związku z tym projektem, ale wszystko, co otrzymuję, to „Poświęciliśmy za dużo czasu i pieniędzy na ten projekt . Musi zostać ukończony”. Z mojego punktu widzenia obecnie wrzucamy pieniądze do dołu, mając nadzieję, że prędzej czy później wypłyną na powierzchnię. **Pytanie:** Jak odzyskać iskrę dla tego projektu? Po prostu nie ma dla mnie kreatywności. Ten projekt nie da mi wiele wiedzy, którą będę mógł wykorzystać w przyszłości (mnóstwo kodu utrzymywałem przez 3 lata) i nie prowadzi mnie do celu; stworzyć „idealną stronę internetową”. Jeśli nie mogę odzyskać iskry, jakie inne alternatywy powinienem rozważyć? **Uwaga:** zdaję sobie sprawę, że to pytanie może wydawać się zbyt zlokalizowane, ale myślę, że moje główne pytanie może pomóc wielu osobom w podobnej sytuacji. Przepraszam, jeśli brzmię jak rozpieszczony programista, który chce podjąć się tylko określonych zadań, ale _tak_ pracuję znacznie lepiej z projektem, z którym czuję się komfortowo i lubię też być produktywny.


title: Czy jest jakaś sytuacja, w której wypadałoby użyć chyba... inna?

text: Ta konstrukcja jest uważana za błędną, chyba że #.. else #.. end Jest to spowodowane ogólnym powodem pomyłek w postaci podwójnie ujemnych. Przekłada się to na: if not #.. if not #.. end _Wszyscy zgadzamy się, że jest to mylące._ * * * Czy jest jakaś sytuacja (w tym semantyczna), że konstrukcja `chyba że..else` byłaby bardziej odpowiednia?


title: Jak zapytać lub zostać poproszony o przemówienie na konferencji oprogramowania?

text: To jest w moim TODO.txt. Jak byś podszedł do osiągnięcia tego celu?


title: Jak uwzględnić modele innych firm w moim modelu domeny?

text: Obecnie próbuję zaprojektować małą aplikację przy użyciu Domain Driven Design, ale obawiam się, że tak naprawdę nie rozumiem jeszcze koncepcji. Postaram się to jak najdokładniej wyjaśnić. interfejs publiczny IMyDomainRepository { void Add(IAnInterfaceFromAThirdParty element); } Powyższy interfejs jest zdefiniowany w moim modelu domeny i będzie używany w innym projekcie o nazwie `ThirdPartyImplementionVersionX`. Teraz `IAnInterfaceFromAThirdParty` nie jest zdefiniowany w moim modelu domeny, ale pochodzi z mojej biblioteki innej firmy. Mógłbym stworzyć klasę/interfejs w moim modelu domeny, który implementuje te same właściwości i metody, co interfejs `IAnInterfaceFromAThirdParty`, ale ten interfejs ma zdefiniowanych 20 metod, co utrudnia implementację tej samej logiki. Czy to jest droga do zrobienia, czy czegoś mi brakuje?


title: Zarządzanie kodem wielokrotnego użytku w zwinnych historiach zorientowanych na użytkownika?

text: Pracuję w zwinnym zespole w momencie, w którym nasze historie są pisane przede wszystkim z perspektywy użytkownika, a także testowe. Na przykład możemy mieć prośbę o selektor dat. Historia wyglądałaby mniej więcej tak: Użytkownik przechodzi na stronę x i klika datę, aby uruchomić natywny selektor dat. Wszystko w porządku i dobrze, ale problem polega na tym, jak przekazać, co to jest z POV programistycznego. Na przykład problemy, które chcielibyśmy rozwiązać: * musimy obsługiwać wiele urządzeń * mimo że użytkownik widzi „natywny” widżet, często musimy budować emulowane wersje w JS * chcielibyśmy używać wspomniany widżet na wielu innych stronach niż tylko x i chciałby włączyć odmiany potrzebne na stronie y i z do tego jednego komponentu. Z trudem zastanawiamy się, jak najlepiej sobie z tym poradzić, aby umożliwić zespołowi programistów. Wydaje się, że jedną z opcji dla naszego zespołu programistów jest zbudowanie własnych bibliotek komponentów i wzorców. Następnie wzięlibyśmy historyjki użytkowników i wykorzystali te dane do ulepszenia naszej własnej biblioteki komponentów/wzorców. Czy napotkałeś ten problem, a jeśli tak, czy znalazłeś sposób na konsolidację rozbieżności między historyjkami użytkowników a koncepcją kodu komponentów wielokrotnego użytku dla zespołu programistów?


title: Zespół Charlesa Barkleya

text: Charles Barkley był znakomitym koszykarzem, sławą i wymarzonym członkiem zespołu. Grał dla 76ers, Suns i Rockets. Jednak nigdy nie wygrał mistrzostw NBA. Niektórzy mogą argumentować, że to dlatego, że nigdy nie był otoczony przez innych graczy swojego kalibru, aw NBA nie można wygrać samemu. Więc co to ma wspólnego z programowaniem? Ilu z was czuje się jak sir Charles? Prowadzenie swojego zespołu w każdej kategorii, KLOC, naprawione błędy, skonfigurowane systemy... Zawsze ten, kto dąży do ulepszeń, unowocześnia systemy, negocjuje z klientami... Czujesz się, jakbyś prowadził zespół. Gniew tuż pod powierzchnią. Tylko po to, by ostatecznie przejść na emeryturę, bez „pierścienia”1. * * * 1: Pamiętaj, że Charles nigdy nie obwiniał swojego zespołu. Po prostu grał najlepiej, jak potrafił.


title: Zrozumienie przepływu pracy w plikach DVD

text: Zamierzamy zbudować nowy projekt wykorzystując Mercurial jako nasz system kontroli wersji. Nadal próbuję w pełni zrozumieć, jak powinien wyglądać mój przepływ pracy, więc poniżej wymieniłem przypadek, w którym potrzebuję pomocy w zrozumieniu. Pojedyncza aplikacja z wieloma modułami (każdy moduł jest hostowany we własnym repozytorium) Wielu programistów musi wprowadzać zmiany w tym samym module. Jak należy tym zarządzać? * Jeśli zostanie wykonane hg pull, a wszystkie zmiany zostaną wprowadzone na maszynie lokalnego dewelopera. Po wprowadzeniu tych zmian zmiany są przekazywane do dev. * Jeśli każda poprawka funkcji/błędu otrzyma nowe repozytorium lub gałąź na serwerze, a programista wypchnie swoje zmiany z lokalnego serwera na zdalny serwer. Gdy funkcja zostanie ukończona, to repozytorium/oddział zostanie z powrotem scalony z dev. * Lub połączenie obu. Małe zmiany trafiają od razu do dev, a funkcja, która może zająć trochę czasu, otrzymuje własną gałąź/repozytorium. * Lub inne strategie, które Twoim zdaniem są bardziej odpowiednie.


title: Jak cenne są konferencje programistyczne?

text: Zainspirowane tym, jak przydatne są różnego rodzaju konferencje programistyczne? Co oferują, czego nie można uzyskać po prostu czytając i badając temat online?


title: Czy jakieś firmy przechodzą z DVCS na CVCS?

text: Czy istnieją jakieś rzeczywiste przypadki biznesowe, które sprawiły, że jakakolwiek firma przeszła z DVCS do CVCS (niezależnie od tego, czy pierwotnie była w CVCS)?. Poza zamkniętym umysłem i całkowitym odrzuceniem zmiany paradygmatu (w konkretnym przypadku firm pochodzących z CVCS) nie mogę wymyślić żadnej przyczyny takiego stanu rzeczy. Podwójne czekoladowe ciastko dla każdego, kto ma dowody empiryczne.


title: Stałe wartości w interfejsie

text: Jakiś czas temu przeczytałem dwie różne książki i każda z nich daje zupełnie inną odpowiedź na pytanie, czy jest to dobry wzorzec do definiowania stałych wartości w interfejsie (w javie). Jestem więc ciekaw twoich opinii z kilkoma rozsądnymi argumentami. Czy definiowanie stałych wartości w interfejsach w javie jest dobrym nawykiem/wzorem? Czy ogólnie jest dobrze, ogólnie źle, czy to zależy?


title: Jak bezpiecznie obejść zepsuty kod?

text: Raz na jakiś czas współpracownik zaewidencjonuje zły kod, który blokuje prawidłowe inicjowanie mojej aplikacji. Aby szybko obejść ten problem, komentuję obraźliwy kod. Następnie zapominam odkomentować obraźliwy kod w momencie zameldowania, więc chcę, aby to się nie powtórzyło. Czy masz jakieś sugestie, jak: 1. Wyłączyć zły kod, który uniemożliwia pracę 2. Uniemożliwić sobie wprowadzanie niechcianych zmian? Obecnie używam programu Visual Studio jako mojego IDE i TFS jako mojego repozytorium kodu źródłowego.


title: Inni bez wcięcia

text: Piszę kod od około 18 lat. Ostatnio przyzwyczaiłem się nie wcinać innych i kiedy patrzę na kod, martwi mnie trochę głównie to, że ktoś, kto może spojrzeć na kod, może płakać wulgarnie. Poniższy fragment wyjaśnia potrzebę stylu if(condition) { ... } //1 if(condition) { // Nie chcę, aby ten drugi blok był wprowadzany niepotrzebnie ... } Więc umieściłem inny w miejscu komentarz oznaczony 1 to if(warunek) { ... } else if(warunek) { ... } Umieszczenie tam innego pomaga zachować czytelność, zwłaszcza gdy zapomnienie o wstawieniu nie musi niczego zepsuć. To, z czym jestem zaniepokojony, to to, że nie przestrzega ściśle konwencji (w tym przypadku Sun) na dwa różne sposoby - 1) prawidłowe wcięcie 2) mając otwarty nawias klamrowy po drugim, myślę, że staram się zapobiec posiadanie ogromnych wcięć, co naprawdę robi różnicę w blokach, które mają wiele warunków - 5 lub więcej, chociaż poniżej pokazano tylko trzy. if (warunek) { ... } else { if (warunek) { ... } else { if (warunek) { ... } else { ... } } } Uważam, że o wiele lepiej jest mieć niewcięte i bez nawiasu. Jakie są Twoje myśli?


title: Jak mogę zaimplementować bazę danych TableView podobną do rzeczy w C++?

text: Jak zaimplementować coś podobnego do TableView w C++? Chcę emulować małą relacyjną bazę danych, taką jak w C++. Mam tabele danych i chcę je jakoś przekształcić, więc potrzebuję klasy TableView. Chcę filtrować, sortować, dowolnie dodawać i usuwać elementy oraz przekształcać (np. wyświetlać jako WIELKIE LITERY i tak dalej). Całość znajduje się w aplikacji GUI, więc tabele danych i widoki są dołączone do GUI (lub HTML lub coś takiego). Jak więc zidentyfikować element w widoku? Jak mogę to zasygnalizować, gdy stół zostanie zmieniony? Czy jest na to jakiś wzorzec projektowy? Oto prosta tabela i prosty element danych: #include <string> #include <boost/multi_index_container.hpp> #include <boost/multi_index/member.hpp> #include <boost/multi_index/ordered_index.hpp> #include <boost/multi_index/random_access_index.hpp> przy użyciu boost::multi_index_container; używanie zwiększania przestrzeni nazw::multi_index; struct Data { Data() {} int id; std::nazwa ciągu; }; struct wiersz{}; identyfikator struktury{}; nazwa struktury{}; typedef boost::multi_index_container< Data, indexed_by< random_access<znacznik<wiersz> >, order_unique<znacznik<id>, member<Data, int, &Data::id> >, order_unique<znacznik<nazwa>, member<Data, std ::string, &Data::name> > > > TDataTable; class DataTable { public: typedef Data item_type; typedef TDataTable::value_type value_type; typedef TDataTable::const_reference const_reference; typedef TDataTable::index<wiersz>::type TRowIndex; typedef TDataTable::index<id>::type TIdIndex; typedef TDataTable::index<nazwa>::type TNameIndex; typedef TRowIndex::iterator iterator; DataTable() : row_index(rule_table.get<row>()), id_index(rule_table.get<id>()), name_index(rule_table.get<name>()), row_index_writeable(rule_table.get<row>() ) { } TDataTable::const_reference operator[](TDataTable::size_type n) const { return rule_table[n]; } std::pair<iterator,bool> push_back(const value_type& x) { return row_index_writeable.push_back(x); } iterator erase(iterator position) { return row_index_writeable.erase(pozycja); } bool replace(itter position,const value_type& x) { return row_index_writeable.replace(position, x); } template<nazwa typu InputIterator> void rerange(InputIterator pierwszy) { return row_index_writeable.rearrange(first); } void print_table() const; unsigned size() const { return row_index.size(); } TDataTable table_table; const TRowIndex& row_index; const TIdIndex& id_index; const TNameIndex& name_index; prywatne: TRowIndex& row_index_writeable; }; class DataTableView { DataTableView(const DataTable& source_table) {} // Jak mogę to zaimplementować? // Chcę filtrować, sortować, sygnalizować wyższą warstwę GUI, sortować i... }; int main() { Dane dane1; data1.id = 1; data1.nazwa = "nazwa1"; Dane danych2; data2.id = 2; data2.nazwa = "nazwa2"; Tabela DataTable; table.push_back(dane1); DataTable::iterator it1 = table.row_index.iterator_to(table[0]); table.erase(it1); table.push_back(dane1); Dane nowe_dane(tabela[0]); nowa_nazwa.nazwa = "nowa_nazwa"; table.replace(table.row_index.iterator_to(table[0]), nowe_dane); for (unsigned i = 0; i < table.size(); ++i) std::cout << table[i].name << std::endl; #if 0 // wykorzystanie scenariuszy: DataTableView table_view(table); table_view.fill_from_source(); // synchronizacja ze źródłem table_view.remove(data_item1); // usuń element z widoku table_view.add(data_item2); // dodaj element z tabeli źródłowej table_view.filter(filterfunc); // filtrowanie table_view.sort(sortfunc); // sortowanie // modyfikacja z source_able, hot, aby zasygnalizować table_view? // FYI: widok tabeli jest dołączony do elementu GUI table.erase(data); table.replace(dane); #endif zwróć 0; }


title: XDIME dla aplikacji mobilnych

text: Jestem zaangażowany w projekt, który wymaga obsługi urządzeń mobilnych niektórych wcześniej opracowanych Portletów. Portlety są wdrażane w produkcie WebSphere Portal, a kontener oferuje technologię o nazwie IBM Mobile Portal Accelerator, która wykorzystuje XDIME do renderowania stron mobilnych zgodnie z urządzeniem. Próbuję udokumentować siebie w technologii i źle się bawię: Google pokazuje tylko niektóre nieaktualne strony IBM i nawet starsze posty Volantis, innej firmy zajmującej się technologią (Amazon nie pokazuje powiązanych książek). Więc... jaki jest obecny stan tej technologii? Czy ma jakiś przyzwoity poziom adopcji?


title: Jakich odpowiedników javadoc używasz w .net?

text: Programiści Java używają Javadoc do pisania dokumentacji w swoich komentarzach. Jakie są alternatywy dla .net — konkretnie c# i VB.net, których ludzie faktycznie używają w rzeczywistych projektach?


title: Losowa funkcja skrótu bez kolizji

text: Związane z pytaniem Który algorytm mieszający jest najlepszy ze względu na unikalność i szybkość? Czy istnieje sposób na utworzenie funkcji skrótu lub znalezienie takiej, której długość skrótu zależy całkowicie od długości wejściowej, ma regulowany zestaw znaków skrótu (ponieważ musi to być funkcja 1 do 1, dane wejściowe muszą być zgodne z tym ograniczeniem zestawu znaków również). Co więcej, najważniejszą częścią jest to, że funkcja haszująca generuje tak **losowe** jak to możliwe ciągi. Na przykład możliwe byłoby uzyskanie następujących dwóch różnych wyników. Hash(aaaa)->niebieski // dla zestawu znaków a-z i Hash(aaaz)->różowy // dla zestawu znaków a-z Więcej przykładów: Hash(aa@12a)->dakj@4 // dla zestawu znaków a-z, @, 0-9 i Hash(a2#46Ww)->@3#0Pdw // dla zestawu znaków a-z A-Z, !-), 0-9 **Zauważ** długość znaków między wejściem i wyjściem oraz zestawy znaków. To, co do tej pory myślałem, że jest funkcją rozkładu prawdopodobieństwa, są funkcje rozkładu losowego, ale nie jestem pewien, jak się tam dostać. http://en.wikipedia.org/wiki/Probability_distribution http://en.wikipedia.org/wiki/Normal_distribution


title: Dlaczego interfejsy są bardziej pomocne niż superklasy w osiąganiu luźnego sprzężenia?

text: ( _Na potrzeby tego pytania, kiedy mówię „interfejs” ** mam na myśli konstrukcję językową „interfejs”**, a nie „interfejs” w innym znaczeniu tego słowa, tj. publiczne metody, które klasa oferuje na zewnątrz świat w celu komunikowania się z nim i manipulowania nim._) Luźne sprzężenie można osiągnąć poprzez uzależnienie obiektu od abstrakcji, a nie od konkretnego typu. Pozwala to na luźne sprzężenie z dwóch głównych powodów: **1-** abstrakcje są mniej podatne na zmiany niż typy konkretne, co oznacza, że kod zależny jest mniej podatny na zerwanie. **2-** W czasie wykonywania można używać różnych typów konkretnych, ponieważ wszystkie pasują do abstrakcji. Nowe typy betonu można również dodać później, bez konieczności zmiany istniejącego kodu zależnego. Rozważmy na przykład klasę „Samochód” i dwie podklasy „Volvo” i „Mazda”. Jeśli Twój kod zależy od „Samochodu”, może użyć „Volvo” lub „Mazda” w czasie działania. Również później można było dodać dodatkowe podklasy bez konieczności zmiany kodu zależnego. Również `Car` \-, który jest abstrakcją, ma mniejsze szanse na zmianę niż `Volvo` czy `Mazda`. Samochody od dłuższego czasu są takie same, ale Volvo i Mazda znacznie częściej się zmieniają. Tj. abstrakcje są bardziej stabilne niż typy konkretne. Wszystko po to, by pokazać, że rozumiem, czym jest luźne sprzężenie i jak je osiąga się poprzez uzależnienie od abstrakcji, a nie konkrecji. (Jeśli napisałem coś niedokładnego, proszę to powiedzieć). **Nie rozumiem tego:** **Abstrakcje mogą być superklasami lub interfejsami.** **Jeśli tak, to dlaczego interfejsy są szczególnie chwalone za ich zdolność do luźnego łączenia? Nie widzę, jak to się różni od używania superklasy.** Jedyne różnice, jakie widzę, to: 1- Interfejsy nie są ograniczone pojedynczym dziedziczeniem, ale nie ma to wiele wspólnego z tematem luźnego łączenia. 2- Interfejsy są bardziej „abstrakcyjne”, ponieważ w ogóle nie mają logiki implementacji. Ale nadal nie rozumiem, dlaczego to robi tak dużą różnicę. **Proszę wyjaśnić, dlaczego mówi się, że interfejsy są świetne w umożliwianiu luźnego łączenia, podczas gdy proste superklasy już nie.**


title: Jak cechy w Scali pozwalają uniknąć „błędu diamentu”?

text: _(Uwaga: z oczywistych powodów użyłem 'błąd' zamiast 'problem' w tytule.. ;) )._ Zrobiłem trochę podstawowej lektury na temat cech w Scali. Są podobne do interfejsów w Javie lub C#, ale pozwalają na domyślną implementację metody. Zastanawiałem się: czy nie może to spowodować przypadku „diamentowego problemu”, dlatego wiele języków w pierwszej kolejności unika dziedziczenia wielokrotnego? Jeśli tak, jak radzi sobie z tym Scala?


title: Jeden kontroler na stronę czy wiele stron w jednym kontrolerze?

text: Chciałem tylko porady dotyczącej sposobu działania MVC. Używam codeignitera i zastanawiałem się, czy lepiej mieć jeden kontroler na stronę dla _website_, czy mieć jeden kontroler dla wszystkich stron? Załóżmy, że mam prostą stronę internetową, na której możesz odwiedzić stronę główną, zalogować się, utworzyć konto i skontaktować się z administratorem. 1. Czy lepiej byłoby mieć takie kontrolery: frontend(index), login, konto, kontakt LUB jeden kontroler o nazwie frontend lub cokolwiek z akcjami typu login, createAccount, contact? 2. Kiedy wiesz, czy w danej sytuacji lepiej użyć jednego kontrolera?


title: Jaka jest różnica między planowaniem opartym na testach akceptacyjnych a tworzeniem opartym na testach akceptacyjnych?

text: Jaka jest różnica między planowaniem opartym na testach akceptacyjnych a programowaniem sterowanym testami akceptacyjnymi? Czy oni są tacy sami?


title: Enterprise VS Regularny programista korporacyjny

text: Ok, " _prawie_ " straciłem ofertę pracy, ponieważ " ** _nie mam wystarczającego doświadczenia jako inżynier oprogramowania dla przedsiębiorstw_** ". Jestem programistą od ponad 16 lat, a ostatnie 12-14 zawodowo, w dużych i małych firmach. To sprawiło, że pomyślałem o tym pytaniu: Jaka jest różnica między inżynierem oprogramowania a inżynierem oprogramowania dla przedsiębiorstw? Czy naprawdę istnieje różnica między architekturą oprogramowania a architekturą korporacyjną? BTW: Staram się robić to, co robi każdy inny DOBRY programista, na przykład architektura, tdd, SDLC itp.


title: Tygodniowy cykl wydawniczy: jak to umożliwić?

text: W mojej firmie (trzyletni startup branży internetowej) często mamy problemy z zespołem ds. produktu, mówiącym „aaaah, to jest teraz łata kryzysowa!” (czy nie wszyscy?) Ma to wpływ na produktywność (i morale) kadry inżynierskiej, w tym również. Kierownictwo spędziło trochę czasu zastanawiając się, jak zmniejszyć częstotliwość tych jednodniowych próśb i wymyśliło rozwiązanie, że będziemy publikować co tydzień. (Wcześniej robiliśmy jeden co dwa tygodnie, co zwykle spadało o kilka dni lub coś koło tego.) Jest 13 programistów i 6 lokalnych / 9 testerów offshore; teoria jest taka, że tylko 4 programistów (i wszyscy testerzy) będą pracować nad wydaniami parzystymi, chyba że pojawi się praca, która naprawdę wymaga pewnej specjalistycznej wiedzy od jednego z pozostałych programistów. Każdy cykl będzie zawierał dwa dni pracy programistów i dwa dni pracy QA (plus 1 dzień scopingu/triage/…). Moje pytania to: (a) Czy ktoś ma doświadczenie z tak długim cyklem wydawniczym? (b) Czy ktoś słyszał o próbie podjęcia takiej długości cyklu wydawniczego? (c) Jeśli (a) lub (b), jak u licha sprawiasz, że to działa? (Wszelkie pułapki, których należy unikać itp., są również mile widziane.) (d) Jak możemy zminimalizować szkody, jeśli ten wysiłek się nie powiedzie?


title: Python : jak mogę zaimponować ludziom korzystającym z Ruby/Java?

text: Przygotowuję prezentację o Pythonie dla mojej firmy i chciałbym pokazać wspaniałość Pythona programistom używającym Java lub Ruby ! Myślę, że bardzo łatwo będzie napisać krótsze i czyściej wyglądające rzeczy niż w Javie, jednak nigdy nie kodowałem w Ruby (no cóż, tylko kilka rzeczy z railami, ale nie znam języka) ! **UWAGA** : Ten temat **NIE JEST** o tym, który język jest najlepszy. Chcę tylko przekonać ludzi, którzy w ogóle nie znają Pythona, a nawet - dla niektórych - uważają, że jest to dziwne, że też jest godne zainteresowania (tak samo jak Ruby, Java itp...). A do tego potrzebuję wkładu od ludzi, którzy znają Rubiego (lub Javę) i Pythona ... Szukam łatwego do zrozumienia fragmentu kodu lub aplikacji, która pokaże, gdzie błyszczy Python. Myślałem o kilku zrozumieniach list, ponieważ uważam, że jest to naprawdę świetne. Niektóre nadpisywanie operatorów, ponieważ wygląda to na bardzo proste w Pythonie, może jakieś programowanie metaklas i/lub dlaczego nie przykład doctest/sphinx ... Jakieś inne/lepsze sugestie? PS: ludzie są programistami backendowymi


title: "Aby kodować szybko, musisz przestać kodować"

text: Po pierwsze, nie moje zdanie: http://www.whattofix.com/blog/archives/2010/11/to-code-quickly.php Rekwizyty dla pana Markhama. ALE skłoniło mnie to do zastanowienia się nad wieloma pytaniami, które widziałem na temat możliwości załatwienia spraw. Zalecane podejście (ustawienie timera na określony czas, w tym przypadku 50 minut, ale widziałem ludzi mówiących o przerwaniu prokrastynacji przez ustawienie czasu tak krótkiego jak pięć minut na zadania, do których po prostu nie możesz się zmusić, a następnie podjęcie krótka przerwa) wydaje się być zdrowym rozsądkiem, ale wiele osób opowiada się za wejściem w „strefę” i pozostanie tam jak najdłużej, może przez wiele godzin, zamiast przerywać swój rytm. Próbuję różnych podejść i odkrywam, że każde ma swoje mocne i słabe strony. Jakiej techniki używasz, aby być bardziej EFEKTYWNYM (tj. wykonać pracę na poziomie jakości wymaganym przez Twojego klienta / szefa / itp. w dozwolonym czasie) w tworzeniu oprogramowania, a nie tylko po to, aby spędzać więcej czasu przy klawiaturze ?


title: Czy nawiasy klamrowe powinny pojawiać się na własnej linii?

text: Czy nawiasy klamrowe powinny być na własnej linii, czy nie? Co o tym myślisz? if (ty.hasAnswer()) { ty.postAnswer(); } else { ty.zróbcoś(); } czy powinno być jeśli (ty.hasAnswer()) { ty.postAnswer(); } else { ty.zróbcoś(); } lub nawet jeśli (ty.hasAnswer()) you.postAnswer(); w przeciwnym razie ty.zróbCoś(); Proszę bądź konstruktywny! Wyjaśnij dlaczego, dziel się doświadczeniami, poprzyj to faktami i odniesieniami.


title: Dobra praktyka i terminologia aparatów ortodontycznych

text: > **Możliwe zduplikowanie:** > Czy nawiasy klamrowe powinny pojawiać się w osobnej linii? Natknąłem się na dwie metody używania nawiasów klamrowych z blokami if/for/switch/while/funkcji w Javie, JS, C++ i PHP (każdy język, który używa nawiasów klamrowych do tworzenia scopeblocków) Jedna z nich jest taka: If(. ..){ ... }else{ ... } Zawsze z tego korzystałem, stało się to dla mnie niezłomnym nawykiem. Prowadzi to do zwięzłego kodu, ale wiele osób, które patrzą na mój kod, jest zdezorientowanych, ponieważ nie zdają sobie sprawy, że istnieje nawias otwierający. Osobiście nazywam tę metodę "odbijającymi nawiasami klamrowymi" (nie wiem dlaczego) Inna metoda jest następująca: If(...) { ... } else { ... } Jest to mniej zwięzłe, ale bardziej przejrzyste. To jest to, czego większość ludzi wydaje się oczekiwać (z tego, co widziałem – a nie widziałem wiele). Jeśli nie widzą nawiasu otwierającego poniżej jeśli, myślą, że go brakuje. Mam więc dwa pytania: * Jak nazywają się te dwie praktyki (jeśli mają nazwy)? * Który z nich jest lepszą praktyką?


title: Web a desktop development – czy web development jest gorszy?

text: Jako długoletni programista zajmujący się tworzeniem naszej pierwszej aplikacji internetowej na dużą skalę, jakie są zalety i wady tworzenia aplikacji internetowych? Czy tworzenie aplikacji internetowej jest znacznie gorsze niż tworzenie aplikacji komputerowej? Np. czy jest to bardziej nużące czy denerwujące? Czy czas na wprowadzenie na rynek jest znacznie gorszy? Czy platforma internetowa nadmiernie ogranicza? Jeśli odpowiedź na którekolwiek z tych pytań brzmi tak, to dlaczego? (A jak wypada tworzenie aplikacji Flash lub Silverlight?)


title: Kiedy należy wykonywać obliczenia we front-endzie?

text: Mój zespół opracowuje aplikację finansową opartą na WEB i była trochę kłótni z kolegą, gdzie przechowywać obliczenia - tylko w back-endzie, czy też zachować trochę we front-endzie? Krótkie wyjaśnienie: Używamy Javy (ZK, Spring) dla front-endu i Progress 4gl dla back-endu. Obliczenia, które wymagają jakiejś hardkorowej matematyki i danych z bazy danych, są przechowywane na zapleczu, więc nie mówię o nich. Mówię o sytuacji, w której użytkownik wpisuje wartość X, następnie jest ona dodawana do wartości Y (widocznej na ekranie) i wynik jest pokazywany w polu Z. Mam na myśli czyste i proste operacje jQuery. Więc jaka byłaby najlepsza praktyka tutaj: 1) Dodaj wartości za pomocą JavaScriptu, który chroni przed przechodzeniem do zaplecza iz powrotem, a następnie zweryfikuj je na zapleczu „przy zapisie”? 2) Utrzymuj całą logikę biznesową w tym samym miejscu - dlatego przenieś wartości na zaplecze i tam wykonaj obliczenia? 3) Wykonaj obliczenia w interfejsie; następnie wyślij dane do back-endu, tam je zweryfikuj, wykonaj obliczenia ponownie i tylko jeśli wyniki są prawidłowe i równe, wyświetl je użytkownikowi? 4) Coś jeszcze? Uwaga: W Javie przeprowadzamy kilka podstawowych walidacji, ale większość z nich nadal znajduje się w zapleczu, podobnie jak cała inna logika biznesowa. Zwiększenie ilości przesyłanych danych poprzez ponowne przeliczenie wszystkiego w back-endzie nie stanowiłoby problemu (mały rozmiar XML; serwery i przepustowość wytrzymałyby zwiększoną ilość operacji wykonywanych przez użytkowników).


title: Dlaczego wiele witryn hostujących projekty nie ma funkcji forum?

text: Rozważam rozpoczęcie projektu open-source, więc rozejrzałem się po popularnych witrynach hostingowych. Zaskakujące jest dla mnie to, że wiele (patrz tutaj ładna tabela funkcji) popularnych serwisów hostingowych (np. GitHub, BitBucket) nie ma funkcji forum, tj. miejsca, w którym użytkownicy mogą rozmawiać z twórcami, zadawać pytania, podnosić pomysły itp. IMHO aktywne forum jest ważnym czynnikiem w tworzeniu społeczności użytkowników wokół projektu, więc spodziewam się, że większość właścicieli projektów byłaby zainteresowana taką funkcją. Zauważyłem też, że niektóre projekty _do_ mają fora wsparcia (lub listy mailingowe) hostowane gdzie indziej - np. Ruby on Rails jest hostowany na GitHub, ale ma grupę wsparcia Grup dyskusyjnych Google, a TortoiseHG jest hostowany na BitBucket, ale ma listę mailingową na SourceForge - więc nie jest tak, że ta funkcja jest niepotrzebna. Dlaczego więc wiele witryn hostujących projekty nie ma funkcji forum?


title: Czy istnieje jakaś taksonomia/język opisujący interfejsy użytkownika?

text: Obecnie badam możliwości, które posiadam, aby zbudować „System pomocy online”. System ten powinien oferować użytkownikowi informacje o oknach dialogowych - które składają się głównie z formularzy. Więc moje główne pytanie brzmi: czy istnieje jakaś taksonomia/język opisujący interfejsy użytkownika? Dużo szukałem na ten temat, ale skończyłem na rzeczach takich jak XUL. Nie tego szukam. Poszukuję struktury/języka/taksonomii opisującej interfejs użytkownika (okna dialogowe). Nie jestem jednak pewien jego istnienia. Ponieważ tak nie jest, byłbym również zadowolony z wszelkich (wyszukiwanych) haseł, które w tym przypadku są warte zbadania. Poza tym szukam również języków/taksonomii używanych w zwykłych systemach pomocy online. Rzeczy, na które natknąłem się to: DocBook, DITA i MAML. Czy na tym „rynku” są jacyś inni wielcy gracze?


title: Cloud Newbie… co powinienem wiedzieć podczas tworzenia mojej aplikacji

text: Nigdy nie tworzyłem dla chmury i prawdę mówiąc nie jestem w 100% pewien, czym jest chmura, jeśli chodzi o serwery i usługi. Zaczynam opracowywać aplikację, w której będę musiał być w stanie skalować w razie potrzeby. Aplikacja zawiera wiele wpisów Użytkowników, a także przesyłanych plików. Myśl jest jak „forum” (jest to najbliższy model, jaki myślę, że dotyczy mojej aplikacji). Użytkownik będzie mógł się zarejestrować, tworzyć "wątki", tworzyć "ankiety", odpowiadać i głosować. Mogą również przesyłać obrazy, filmy i pliki audio. Osoba, która wcześniej utworzyła witrynę, używała pól „Auto-increment" do śledzenia identyfikatorów użytkowników. Podczas przebudowy strony myślałem o porzuceniu tej części i użyciu UUID() dla wszystkich wpisów użytkowników, to, jak sądzę, może rozwiązać współbieżność wpisów w tej samej milisekundzie lub dziwne blokady lub zduplikowane identyfikatory lub możliwe inne problemy... ale... poza tym nie mam pojęcia, co zrobi "chmura". Oto moje pytania: * Użyję MySQL jako DB, czy będę musiał łączyć się z różnymi bazami danych, aby pisać, aby złagodzić stres, czy nawet nie powinienem się tym martwić, ponieważ „chmura” o to zadba?(Będę miał replikację do odczytów)* Czy podczas uzyskiwania dostępu do plików będę musiał wiedzieć, na który serwer zostały przesłane pliki, aby móc je obsługiwać, czy też „chmura” magicznie to zrobi? * Jeśli zwiększę przestrzeń „chmury” dodając nowy serwer, co powinno Wiem o tym? po prostu wdroż go i wszystko działa, czy będę musiał coś zrobić z moim c Oda do powiedzenia "hej, jest jeszcze jeden przypadek, teraz zrób to i tamto inaczej" Dziękuję i mam nadzieję, że zrozumiałeś, o co mi chodziło.


title: Czy mogę legalnie opublikować opakowania Fortran 90 w bibliotece CUFFT Nvidias (z pakietu CUDA SDK)?

text: Z prawnego punktu widzenia (kwestie licencyjne), czy mogę legalnie, w zgodzie z licencją, opublikować wrappery (wiązania) Fortran 90 do biblioteki CUFFT z Nvidia CUDA Toolkit, na podstawie jakiejś licencji open source (albo CC0, czyli domeny publicznej, lub jakaś licencja zezwalająca, taka jak BSD)? Nvidia dostarcza tylko wiązania C z pakietem CUDA SDK. Pliki nagłówkowe zawierają następujący tekst. /* * Prawa autorskie 1993-2011 NVIDIA Corporation. Wszelkie prawa zastrzeżone. * * INFORMACJA DLA LICENCJOBIORCY: * * Ten kod źródłowy i/lub dokumentacja („Licencjonowane Materiały do Dostawy”) * podlegają prawom własności intelektualnej firmy NVIDIA zgodnie z amerykańskimi i * międzynarodowymi przepisami dotyczącymi praw autorskich. * * Te Licencjonowane materiały zawarte w niniejszym dokumencie są ZASTRZEŻONE i * POUFNE dla firmy NVIDIA i są dostarczane zgodnie z warunkami i * warunkami formy umowy licencyjnej na oprogramowanie firmy NVIDIA zawartej między firmą NVIDIA a licencjobiorcą ("Umowa licencyjna") lub elektronicznie * zaakceptowanej przez Właściciel. Bez względu na jakiekolwiek warunki * stanowiące inaczej w Umowie licencyjnej, powielanie lub ujawnianie * Licencjonowanych Produktów jakiejkolwiek stronie trzeciej bez wyraźnej * pisemnej zgody firmy NVIDIA jest zabronione. Plik `License.txt` zawiera następujący fragment > Kod źródłowy: Deweloper ma prawo do modyfikowania i tworzenia prac pochodnych > prac z Kodem źródłowym. Programista będzie właścicielem wszelkich dzieł pochodnych > („Pochodne”), które tworzy w odniesieniu do Kodu źródłowego, pod warunkiem, że Programista używa > Materiałów zgodnie z warunkami niniejszej Umowy. > Deweloper może rozpowszechniać Pochodne, pod warunkiem, że wszystkie informacje o prawach autorskich > NVIDIA i znaki towarowe są propagowane i używane prawidłowo, a Pochodne > zawierają następujące oświadczenie: „To oprogramowanie zawiera kod źródłowy > dostarczony przez NVIDIA Corporation”.


title: Na jakim etapie procesu tworzysz projekt wizualny?

text: Lubię zrobić szkielet, zanim zacznę kodować i od tego zacząć. Ale kiedy powinienem zacząć się martwić o projekt graficzny? Kiedy powinienem wziąć pod uwagę kolory, czcionkę, czy rogi powinny być zaokrąglone czy ostre, projekt ikon itp.? Czy to ostatnia rzecz do zrobienia przed premierą? A może jest jakiś powód, aby nad tym pracować, gdy jesteś jeszcze w fazie kodowania lub fazy testowania i debugowania?


title: Jaka jest rola QA w projekcie opartym na BDD?

text: Jaka byłaby rola testera / osoby odpowiedzialnej za zapewnienie jakości, gdyby prowadziła projekt z wykorzystaniem BDD ze 100% pokryciem historyjek użytkownika automatycznymi testami akceptacyjnymi? Myślę, że wyobrażam sobie, że programiści napisaliby testy akceptacyjne we współpracy z właścicielem produktu, daj mi znać, jeśli wydaje się to głupim założeniem.


title: Jak długofalowo działa zarządzanie wymaganiami w projektach Agile?

text: Zarządzanie wymaganiami w krótkiej perspektywie dla projektów Agile wydaje mi się rozwiązanym problemem. Z punktu widzenia Scrum nowe wymagania lub zmiany w istniejących wymaganiach są dostarczane przez historie użytkowników. Historie użytkowników zgrupowane w epopei lub funkcji ułatwiają realizację większych, bardziej złożonych wymagań. Oczywiście User Story nie jest technicznie dokumentem wymagań. Jest to łatwe do zarządzania grupowanie pracy, które odwzorowuje to, co często nazywa się _Pionowym fragmentem_ funkcjonalności. A zakres tych historii można jednoznacznie określić za pomocą Kryteriów Akceptacji (AC). Tak więc, chociaż Historie użytkowników nie są formalnymi wymaganiami, przeglądanie ich może dać ci dość jasne wyobrażenie o ich podstawowych wymaganiach. W krótkim terminie. Mówię krótkoterminowo, ponieważ wraz z postępem projektu rośnie liczba historii użytkownika. W ten sposób przeglądanie stale rosnącej listy Stories w celu znalezienia Wymagania staje się z czasem coraz mniej wydajne. Ten problem komplikuje się, gdy weźmiesz pod uwagę historyjki użytkownika, które rozwijają się, zastępują lub nawet negują poprzednie historie. Teraz wyobraź sobie dwuletnią przerwę między iteracjami rozwoju projektu (stabilnymi w produkcji). Oryginalna drużyna zniknęła, podobnie jak cała ich wiedza. Jeśli pierwotny zespół wiedział, że tak się stanie (np. taka jest natura firmy), to jakie środki mogliby podjąć, aby pomóc kolejnym zespołom? Jasne, backlog dostarczy pewnych informacji, ale nie jest to łatwe do przeglądania. Co zatem można zrobić, aby kolejne zespoły mogły zrozumieć stan projektu, w tym _dlaczego_ i _jak_ się tam dostał? Z mojego doświadczenia wynika, że następujące rzeczy nie działają: * **Grooming Backlog**, aby usunąć lub zaktualizować poprzednie historie użytkowników, tak aby Backlog mógł być odczytany jako dokument wymagań. * **Sprinty dokumentacyjne**, w których członkowie zespołu mają za zadanie udokumentować aktualny stan systemu. * **Dokumentacja poprzez testy zachowania**. To podejście jest jedynym, które zbliżyło się do działania. Niestety, testy kodowanego zachowania są ofiarami problemu nazewnictwa. Chociaż testy mogą właściwie dokumentować system, nakłonienie zmiennego zespołu programistów do pisania testów zgodnie z tą samą terminologią domeny, sformułowaniami i stylem jest prawie niemożliwe. Powtórzmy więc: Jak długoterminowo zarządzać wymaganiami projektu Agile?


title: Poprawianie algorytmu rankingu z kilku zmiennych

text: Będę miał tabelę mySQL z elementami i chciałbym je uszeregować w taki sam sposób jak Reddit, ale nie do końca. Chciałbym wiedzieć, jak dodać lub usunąć znaczenie zmiennej w moim algorytmie rankingu. Na przykład to, co mam, to czas (sygnatura czasowa, więc duża wartość) i liczba głosów za (mała wartość, poniżej 50). Jak nadać większą wagę głosom za, a mniej czasowi?


title: Co jest złego w komentarzach wyjaśniających złożony kod?

text: Wiele osób twierdzi, że „komentarz powinien wyjaśniać „dlaczego”, a nie „jak”. Inni twierdzą, że „kod powinien być samodokumentujący”, a komentarzy powinno być niewiele. Robert C. Martin twierdzi, że (przeformułując moje własne słowa) często „komentarze są przeprosinami za źle napisany kod”. Moje pytanie brzmi: Co złego jest w wyjaśnianiu złożonego algorytmu lub długiego i zawiłego fragmentu kodu z opisowym komentarzem? W ten sposób, zamiast aby inni programiści (w tym Ty) musieli czytać cały algorytm linijka po linijce, aby dowiedzieć się, co robi, mogą po prostu przeczytać przyjazny opisowy komentarz, który napisałeś prostym angielskim. Angielski jest „zaprojektowany” tak, aby był łatwo zrozumiały dla ludzi. Java, Ruby lub Perl zostały jednak zaprojektowane tak, aby zrównoważyć czytelność dla człowieka i czytelność dla komputera, co zagraża czytelności tekstu dla człowieka. Człowiek może zrozumieć fragment angielskiego znacznie szybciej niż fragment kodu o tym samym znaczeniu (o ile operacja nie jest trywialna). Więc po napisaniu złożonego fragmentu kodu napisanego w częściowo czytelnym dla człowieka języku programowania, dlaczego nie dodać opisowego i zwięzłego komentarza wyjaśniającego działanie kodu w przyjaznym i zrozumiałym języku angielskim? Niektórzy powiedzą, że „kod nie powinien być trudny do zrozumienia”, „zmniejszaj funkcje”, „użyj opisowych nazw”, „nie pisz kodu spaghetti”. Ale wszyscy wiemy, że to nie wystarczy. Są to tylko wskazówki - ważne i przydatne - _ale nie zmieniają one faktu, że niektóre algorytmy są złożone._ I dlatego trudno je zrozumieć czytając je wiersz po wierszu. Czy naprawdę tak źle jest wyjaśniać skomplikowany algorytm kilkoma linijkami komentarzy na temat jego ogólnego działania? Co jest złego w wyjaśnianiu skomplikowanego kodu komentarzem?


title: Czy wolałbyś, aby prywatne rzeczy były wewnętrzne/publiczne do testów, czy użyć jakiegoś hacka, takiego jak PrivateObject?

text: Jestem całkiem nowicjuszką w testowaniu kodu i wcześniej byłam „asertną” dziwką. Jedną z rzeczy, która mnie martwi w testach jednostkowych, jest to, że często wymaga od ciebie utworzenia `publicznych` (lub przynajmniej `wewnętrznych`) pól, które w przeciwnym razie byłyby `prywatne`, aby je usunąć z `tylko do odczytu`, utworzyć `prywatne` metody` zamiast tego chroniony virtual` itp. Niedawno odkryłem, że można tego uniknąć, używając takich rzeczy jak klasa PrivateObject, aby uzyskać dostęp do czegokolwiek w obiekcie poprzez odbicie. Ale to sprawia, że twoje testy są mniej konserwowalne (rzeczy zakończą się niepowodzeniem podczas wykonywania, a nie podczas kompilacji, zostanie to zepsute przez prostą zmianę nazwy, trudniej będzie debugować ...). Jaka jest twoja opinia na ten temat ? Jakie są najlepsze praktyki w testach jednostkowych dotyczące ograniczeń dostępu? edit : rozważ na przykład, że masz klasę z pamięcią podręczną w pliku na dysku, aw swoich testach chcesz zamiast tego zapisywać do pamięci.


title: Czy istnieje kanoniczna książka na temat programowania w C w systemie GNU/Linux?

text: Szukam dobrego ebooka (lub dwóch) do nauki języka programowania C, a konkretnie programowania w środowisku GNU/Linux. Nie jestem początkującym programistą, ale prawie nie mam doświadczenia w tej konkretnej dziedzinie. Muszę nauczyć się zarówno podstaw języka C, jak i łańcucha narzędzi GNU (gcc, gdb i make). Jeśli chodzi o język C, wiem, że K&R jest wysoce zalecane, ale nie wydaje mi się to szczególnie praktyczne, biorąc pod uwagę, że nie opisuje nowoczesnych najlepszych praktyk, bieżących bibliotek ani żadnych szczegółów dotyczących programowania w GNU/Linuksie. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat programowania w C w GNU/Linuksie oraz opisujące łańcuch narzędzi GNU? Co w tej książce czyni ją wyjątkową?


title: Interfejs API Bluetooth czy Bump do obsługi kart członkowskich?

text: Zamierzam wdrożyć funkcjonalność karty członkowskiej w aplikacji mobilnej dla lokalnej kawiarni. Ideą jest dokonywanie płatności w punkcie sprzedaży i potrącanie kwoty z przedpłaconego konta klienta. Szukałem funkcjonalności NFC, ale tylko kilka urządzeń je obsługuje (i większość nie jest jeszcze dostępna w Montrealu). Drugim pomysłem jest użycie Bump API, które świetnie działałoby na iOS i Androida. Ostatnią deską ratunku byłoby wykorzystanie jakoś Bluetootha. Wszelkie przemyślenia na temat któregokolwiek z tych podejść lub dla tych, którzy tego próbowali, wszelkie zalety i wady tych pomysłów.


title: Implementacja podstawowych struktur danych w programowaniu wywiadów

text: Przygotowuję się do mojej pierwszej technicznej rozmowy kwalifikacyjnej od miesiąca i mam pytanie dotyczące implementacji typowych struktur danych, takich jak stosy lub listy połączone. Mam zamiar przeprowadzić wywiad w Pythonie lub Javie, ale nie jestem jeszcze pewien, którego użyć. Ćwiczyłem i próbowałem zaimplementować stos w Pythonie, używając już wbudowanych list. Jednak listy w Pythonie mają już wszystkie metody stosu, podczas gdy tablice w Javie są używane do implementacji stosu, jest jeszcze trochę do zrobienia. Jeśli poproszono mnie o zaimplementowanie stosu, a moim wybranym językiem jest Python, co powinienem zrobić? Czy powinienem zdefiniować klasę Node? Czy i tak nie zostałbym poproszony o zaimplementowanie tak niskopoziomowej struktury danych w Pythonie?


title: Czy zduplikowana składnia do definiowania nazwanych funkcji jest złą decyzją projektową języka?

text: Dla zabawy modeluję język programowania, a na składnię duży wpływ ma Scala - w szczególności definicje funkcji. Napotkałem problem projektowy, ponieważ mój język **nie rozróżnia** między funkcjami zdefiniowanymi za pomocą składni `def` (metody klas) a anonimowymi funkcjami przypisanymi do wartości (utworzonymi za pomocą `=>`) - usuwa różnice w obu wdrażanie i zachowanie. W rezultacie następujące dwie definicje oznaczają to samo: def kwadrat(x: Int) = x*x val kwadrat = (x: Int) => x*x Nie ma powodu dla tej drugiej formy (natychmiastowe anonimowe przypisanie funkcji ) do użycia w każdej normalnej sytuacji - po prostu _możliwe_ jest użycie go zamiast formy `def`. **Czy taka zduplikowana składnia do definiowania nazwanych funkcji zaszkodziłaby ortogonalności języka lub innym aspektom projektowania?** Wolę to rozwiązanie, ponieważ pozwala na krótkie i intuicyjne definiowanie metod i nazwanych funkcji (poprzez `def`) oraz krótkie definicje funkcji anonimowych (za pomocą `=>`). Edycja: **Scala _does_ rozróżnia te dwie** \- anonimowe funkcje to nie to samo, co metody zdefiniowane za pomocą `def` w Scali. Różnice są jednak stosunkowo subtelne - zobacz posty, które zalinkowałem wcześniej.


title: Jak poradzić sobie z sortowaniem złożonych obiektów?

text: Jak posortować listę obiektów, które mają więcej niż jeden element, który można sortować? Załóżmy, że masz prosty obiekt „Samochód”, a samochód jest zdefiniowany w następujący sposób: class Car { public String make; publiczny model String; publiczny int rok; publiczny kolor ciągu; // ... Żadnych metod, tylko struktura / kontener } Zaprojektowałem prosty framework, który umożliwiałby dostarczenie wielu `SortOption` do `Sortera`, który następnie sortowałby listę. interface ISorter<T> { List<T> sort(List<T> items); void addSortOption (opcja ISortOption<T>); ISortOption<T>[] getSortOptions(); void setSortOption (opcja ISortOption<T>); } interfejs ISortOption<T> { String getLabel(); int porównaj (T t1, T t2); } Przykład use class SimpleStringSorter extends MergeSorter<String> { { addSorter(new AlphaSorter()); } private static final class AlphaSorter implementuje ISortOption<String> { // ... implementacja alpha porównaj i pobierz etykietę } } Problem z tym rozwiązaniem polega na tym, że nie jest łatwo rozszerzalne. Gdyby samochód miał kiedykolwiek otrzymać nowe pole, powiedzmy, obecnyWłaściciel. Musiałbym dodać pole, a następnie wyśledzić plik klasy sortera, zaimplementować nową klasę opcji sortowania, a następnie ponownie skompilować aplikację do redystrybucji. Czy istnieje łatwiejszy, bardziej rozszerzalny/praktyczny sposób sortowania danych w ten sposób?


title: Jaka jest korzyść z włączenia ciągów w Javie 7?

text: Kiedy zaczynałem programować w Javie, frustrowało mnie to, że instrukcje switch nie przyjmują ciągów znaków. Następnie korzystając z Enums, zdałem sobie sprawę z korzyści, jakie dzięki nim uzyskujesz, zamiast przekazywać surowe wartości — bezpieczeństwo typów (co ułatwia refaktoryzację) oraz przejrzystość dla innych programistów. Trudno mi wymyślić sytuację, w której w SE7 zdecyduję się teraz użyć przełącznika z ciągami jako danymi wejściowymi, a nie Enumami. Jeśli są one zaimplementowane poprzez włączanie całych ciągów (np. zamiast dopasowań częściowych lub wyrażeń regularnych), wydaje się, że nie ma to mniejszego powodu do zmiany kodu. A dzięki narzędziom IDE i współczynnikowi odczytu i zapisu kodowania byłbym o wiele szczęśliwszy, gdyby automatycznie wygenerował dodatkowy Enum niż przekazywać wartości ciągów. Jakie korzyści przynoszą nam jako programistom? Mniej płyty kotłowej? Nie wydaje się, żeby język wołał o tę funkcję. Chociaż może istnieje przypadek użycia, który przeoczam.


title: Rzeczywisty node.js

text: Mam 14 lat i studiuję tworzenie stron internetowych/aplikacji/oprogramowania. Próbuję nauczyć się języka zaplecza i rozważam node.js. Słyszałem o nim niesamowite rzeczy, a dodatkowo podoba mi się to, że mogę już używać w nim JS, który znam. Obawiam się jednak, że może to być po prostu „modna/modna” technologia i że może nie być tak często używana w prawdziwym świecie. Czy ludzie naprawdę używają node.js w środowisku produkcyjnym? A może jest teraz po prostu modny?


title: Jak nazwiesz crona, który sumuje wszystkie twoje pliki i zapisuje je w bazie danych?

text: Jest to sposób na inwentaryzację wielu skryptów cgi i aplikacji internetowych w środowisku Software Service. Będzie to sposób na tworzenie dzienników zmian i śledzenie, którzy klienci mają jakie programy i będą używać diff i cksum do zauważania, porównywania i identyfikowania wersji. „Przeprowadza inwentaryzację”, ale w rzeczywistości mamy systemy inwentaryzacyjne dla firm innych niż oprogramowanie (dystrybutorzy itp.). Więc wolałbym nie mieć mylących nazw. Edycja: Nie używamy repozytorium kodu. Tak więc nie chodzi o sprawdzanie skompromitowanych plików (chociaż jest to całkiem fajne, że zostanie to omówione), ale w rzeczywistości jest to bardziej zamiennik repozytorium i sposób na śledzenie, którzy klienci mają jakie produkty, aby upewnić się, że my nie trać synchronizacji z rozliczeniami. Właściwie większość naszych modyfikacji wykonujemy na żywo. Ponieważ nie są to systemy publiczne, nie ma to aż takiego znaczenia. Jeśli jest publiczny, albo tworzymy kopie programu, albo uruchamiamy program na komputerze, a następnie testujemy go, a następnie przesyłamy, aby był dostępny.


title: Testowanie jednostkowe obiektów dostępu do danych

text: Niedawno zacząłem używać programowania opartego na testach i testowania jednostkowego, co ogromnie się opłaciło w obszarach, w których je zastosowałem. Jednym z obszarów, w którym był pomocny, jest dostęp do bazy danych. Kiedy wyabstrahuję dostęp do danych, testowanie metod, które potrzebują danych, staje się niemal absurdalnie łatwe. Jednak nie byłem w stanie znaleźć ani wymyślić sposobu na przetestowanie samych DAO. (Wyabstrahowanie ich byłoby samobójcze!) DAO powinno w teorii po prostu przenosić dane między bazą danych a aplikacją; czy można to uznać za zbyt proste do przetestowania? Eksperymentowałem z konfiguracją bazy danych Derby na moim lokalnym komputerze do testów, ale trudno jest zautomatyzować uruchamianie serwera, tworzenie baz danych i tworzenie tabel. Czy istnieje sposób na zautomatyzowanie testowania obiektów dostępu do danych?


title: Dlaczego przewodnik po Scrumie mówi, że nie ma testerów?

text: Czytałem Scrum Guide ze scrum.org, który mówi: > Zespoły Deweloperskie nie zawierają podzespołów dedykowanych poszczególnym domenom > jak testowanie czy analiza biznesowa. W dosłownym tłumaczeniu oznacza to, że nie ma testerów, co jest mylące. Jak mogą to sugerować?


title: Czy podczas korzystania z ORM mapowania powinny być zdefiniowane w pliku kodu?

text: Doctrine oferuje trzy sposoby definiowania właściwości mapowania obiektów: w XML, w YAML oraz jako wbudowane adnotacje docblock w kodzie. Dokumentacja Doctrine nie daje żadnych porad dotyczących wyboru spośród nich, ale szczególnie zastanawiam się, czy istnieje ogólnie przyjęta najlepsza praktyka w odniesieniu do przechowywania metadanych mapowania dla systemu ORM w pliku, w którym zdefiniowane są obiekty, w porównaniu z ich przechowywaniem w osobnym pliku danych. Jest tu?


title: Jak stworzyć w Pythonie Tkinter widget, który będzie działał jak drzewo wyboru?

text: Chciałbym wiedzieć, czy taki widżet jest w tk (lub w innym standardowym module Pythona 3) lub jak go utworzyć: ![wpisz tutaj opis obrazu](http://i.stack.imgur.com/sg5g9 .png) Oczywiście nie musi to tak wyglądać, ale powinno oferować taką samą funkcjonalność. Niestety PyQT, wxWidgets lub inne niestandardowe moduły, których nie mogę użyć.


title: Jakie ramy testów jednostkowych istnieją dla Javy?

text: Użyłem TestNG i JUnit. Jakie są inne frameworki? Co sprawia, że są wyjątkowe i/lub różnią się od reszty?


title: FP i OO ortogonalne?

text: Słyszałem to wielokrotnie i próbuję zrozumieć i potwierdzić ideę, że FP i OO są ortogonalne. Przede wszystkim, co to znaczy, że 2 pojęcia są ortogonalne? FP zachęca do niezmienności i czystości tak bardzo, jak to możliwe. a OO wydaje się być czymś zbudowanym dla stanu i mutacji (lekko zorganizowana wersja programowania imperatywnego?). I zdaję sobie sprawę, że przedmioty mogą być niezmienne. Ale OO wydaje mi się sugerować stan/zmianę. Wydają się być przeciwieństwami. Czy to oznacza, że są ortogonalne? Język taki jak Scala ułatwia wykonywanie zarówno OO, jak i FP, czy to wpływa na ortogonalność dwóch metod?


title: Test Driven Development: dobry/akceptowany sposób testowania działania systemu plików?

text: W tej chwili pracuję nad projektem, który generuje tabelę (między innymi) na podstawie zawartości systemu plików, a następnie dokonuje pewnych modyfikacji metadanych znalezionych rzeczy. Pytanie brzmi: jak wokół tego należy napisać testy lub skonfigurować? Czy jest łatwy sposób na wyśmiewanie tego? A może powinienem skonfigurować „piaskownicę”?


title: Organizacja rozwiązania

text: Zajmuję się aplikacjami asp.net od 6 lat, ale prawie przez cały czas rozbudowuję i utrzymuję istniejące aplikacje. Mam teraz potrzebę stworzenia nowej aplikacji i drapię się po głowie :( Jest dużo materiałów na temat zasad i wzorców projektowania oprogramowania, ale niewiele treści dotyczących organizacji. Czy poszczególne warstwy powinny znajdować się w oddzielnych przestrzeniach nazw, folderach lub projektach? Planuję utworzyć WCF w przyszłości, więc posiadanie warstwy usług jako projektu ma sens, ale nie jestem pewien, ile projektów powinienem mieć?Domyślnie witryna internetowa MVC 3 ma modele i kontrolery w tym samym projekcie, czy ma sens oddzielenie do różnych projektów?Byłbym bardzo wdzięczny, gdyby ktoś mógł opublikować zrzut ekranu dobrze zorganizowanego rozwiązania MVC 3.Rozumiem, że to prawdopodobnie zależy od osobistych preferencji i wielkości projektu, ale potrzebuję pewnych wskazówek.Nasza główna aplikacja ma ponad 70 projektów w mamutowym rozwiązaniu...Proszę pomóż mi tego uniknąć.Wielkie dzięki.


title: Czy zmiana licencji na OSS obejmuje wszystkie wersje, w tym poprzednie?

text: Jeśli zdecydujemy się na użycie fragmentu oprogramowania open source, które jest obecnie udostępniane na podstawie licencji, która pozwala na włączenie do wewnętrznego systemu zamkniętego źródła, jaką ochronę oferujemy, jeśli właściciele oprogramowania open source zdecydują się na zmianę licencji? Zazwyczaj myślę o tym, gdzie nowa licencja nie pozwala na włączenie do oprogramowania o zamkniętym kodzie źródłowym (myślę, że api iText generacji PDF zrobił to w 2009 roku). Czy nową licencję można zastosować wstecznie do starych wersji? Domyślam się, że może, ale często nie jest. Patrzymy po prostu na najgorszy scenariusz, czy znaleźlibyśmy się w sytuacji, w której moglibyśmy nadal używać starej wersji tak długo, jak będzie to potrzebne, a następnie podjąć decyzję dotyczącą przyszłości - czy też bylibyśmy w sytuacji, w której moglibyśmy muszą zdecydować, czy zapłacić opłatę komercyjną, która jest często dostępna, czy znaleźć inną „darmową” alternatywę.


title: Jeśli chcę, aby mój program kliencki był wolnym oprogramowaniem, czy muszę również wydać oprogramowanie serwera jako wolne oprogramowanie?

text: Wyobraź sobie, że napisałem grę i chcę, aby była ona wolnym oprogramowaniem. Czy muszę również udostępnić oprogramowanie serwera gier jako wolne oprogramowanie, ponieważ gra używa go do łączenia się z innymi graczami, przeciwko którym mogę grać? Wyobraź sobie, że napisałem notowania giełdowe i chciałbym, aby było to wolne oprogramowanie. Czy mogę pobierać opłaty za subskrypcję informacji giełdowych, mimo że oprogramowanie nie ma większego sensu bez płacenia za taką subskrypcję? Interesują mnie również źródła przychodów z bezpłatnego oprogramowania, które wykraczają poza pobieranie opłat za dystrybucję lub wsparcie, które przeciwdziałają kupowaniu oprogramowania przez jedną osobę, a następnie ich samodzielnej dystrybucji i obniżaniu cen.


title: Czy zrozumienie programowania funkcjonalnego pomaga w zrozumieniu popularnych bibliotek javascript?

text: Nie mam doświadczenia w javascript. Staram się korzystać z popularnych bibliotek javascript, takich jak jQuery, Angular.js i Meteor.js. Zastanawiam się, czy zrozumienie logiki programowania funkcyjnego (oczywiście w javascript) pomoże w lepszym zrozumieniu i korzystaniu z tych bibliotek?


title: Strategia testów jednostkowych dla wywołań metod warstwowych (lub pochodnych)

text: Wybacz tytuł – wymaga pracy. Staram się znaleźć lepszy angielski, aby wyrazić mój problem. Zachęcamy do edycji. Przykład opisujący mój problem: ## Metoda sprawdzania Mam metodę sprawdzania argumentów o nazwie `public static void StringArgs.checkIndexAndCount(String, int, int)`. Biorąc pod uwagę ciąg, indeks i liczbę, upewnij się, że ciąg nie jest pusty, a indeks i liczby są rozsądne. Niesprawdzone wyjątki (w czasie wykonywania) są używane do zgłaszania błędów. Istnieje zestaw testów jednostkowych napisanych w celu sprawdzenia wszystkich kątów tej metody. ## Metoda warstwowa (lub pochodna) Metoda sprawdzania jest wywoływana przez inne metody, takie jak `public static String removeByIndexAndCount(String, int, int)`. Pierwszy wiersz tej metody sprawdza argumenty, wywołując powyższy program do sprawdzania. ## Strategia testów jednostkowych Kiedy piszę testy jednostkowe dla metody drugiej/warstwowej/pochodnej, jak mam uwzględnić istniejący zestaw testów jednostkowych dla metody sprawdzającej? Wydaje się, że łamanie zasad kopiowania/kopiowania i wklejania jest proste, ponowne dodawanie tych samych testów jednostkowych (nieznacznie zmodyfikowanych) z metody sprawdzania do drugiej metody. Proszę doradź. Mój kod to Java, ale nie wydaje mi się to szczególnie istotne, ponieważ ten sam problem może wystąpić w dowolnym języku.


title: Jak nazywamy encję tabeli bazy danych w Javie?

text: Dla każdej tabeli bazy danych tworzę encję (obiekt), która zawiera wszystkie kolumny bazy danych jako pola klasy. Jak nazywamy te encje w Javie? Nie mogłem znaleźć oficjalnego terminu, więc czytałem na forach, że ludzie nazywają je „bytami”, „modelami” itp. Chciałbym znać albo termin standardowy Java, albo termin akceptowany przez społeczność Java.


title: Używanie Mocka dla detektorów zdarzeń w testach jednostkowych

text: Ciągle testuję ten rodzaj kodu (nieistotny język): public class Foo() { public Foo(IDependency1 dep1) { this.dep1 = dep1; } public void setUpListeners() { this.dep1.addSomeEventListener(.... jakiś kod nasłuchiwania ...); } } Zazwyczaj chcesz przetestować, co kiedy zależność odpala zdarzenie, testowana klasa reaguje odpowiednio (w niektórych sytuacjach _jedynym_ celem takich klas jest podłączenie wielu innych komponentów, które można niezależnie przetestować. Jak dotąd, aby to przetestować, zawsze robię coś takiego: * tworzenie „stub”, który implementuje zarówno `addXXXXLlistener`, który po prostu przechowuje wywołanie zwrotne, jak i `fireXXXX`, który po prostu wywołuje każdego zarejestrowanego słuchacza. Jest to trochę nudne ponieważ musisz stworzyć mock z odpowiednim interfejsem, ale to może zrobić * użyj introspektywnego frameworka, który może „szpiegować” metodę i wstrzyknąć prawdziwą zależność w testach Czy istnieje czystszy sposób na robienie tego rodzaju rzeczy? : aby wyjaśnić, co mam na myśli, mój problem polega na tym, że gdybym mógł napisać coś takiego: public class FooTest() { public void testListensToDependencies() { IDependency mockDependency = createMock(IDependency.class) Foo testowane = nowy Foo(mockDependency); testowane.setUpListeners(); oczekiwać(mockDependency.addSomeEventListener).toHaveBeenCalled(); } } Jednak oczywiście ten test przeszedłby _niezależnie od tego, co robi słuchacz_. Niepokoi mnie to, ponieważ chcę sprawdzić, czy podłączam swoje obiekty do właściwych rzeczy. Następna najlepsza rzecz to: public class Foo() { public Foo(IDependency1 deps) { .... } public void setUpListeners() { // W języku z funkcją pierwszej klasy: this.dep1.addSomeEventListener(this.handleSomeEvent ); // W języku bez tego : this.dep1.addSomeEventListener(new Foo.SomeEventHandler()); } A potem napisałbym testy, aby: * sprawdzić, czy 'addSomeEventListener' został wywołany albo z właściwą funkcją obsługi, albo z instancją właściwej klasy obsługi zdarzeń * sprawdzić, czy funkcja obsługi lub klasa obsługi zdarzeń faktycznie implementuje oczekiwane zachowanie. Teraz nie jestem pewien, czy byłoby to jaśniejsze, czy też jest to znak, że podłączam moje przedmioty w niewłaściwym miejscu....


title: Co oznacza najnowszy „Renesans C++”?

text: Ostatnio pojawiły się głosy o renesansie C++, wśród których najbardziej godny uwagi jest głos Herba Suttera, Przewodniczącego Komitetu Standardów C++. Możesz wyszukać „C++ renaissance” w Google, a znajdziesz kilka linków, w tym wykład Herba na temat „C++ and Beyond” i inne wykłady na Channel9 firmy Microsoft. Kluczowym argumentem jest tutaj to, że trend w chmurze staje się wyraźniejszy i bardziej popularny niż kiedykolwiek, wiele prac programistów po stronie chmury wymaga wysokowydajnych języków natywnych, co na pewnym poziomie oznacza w zasadzie C/C++. Nie mam zamiaru rozpoczynać od nowa wojny ognia o C vs C++. Ale chcę wiedzieć, w jakim stopniu ten trend wpływa na rosnącą i rozszerzającą się społeczność i popularność C++. Jak dokładnie C++ jest używany po stronie chmury? wydajny backend? jeszcze? Jak duży jest właściwie rynek deweloperów w chmurze? PS Miałem szczęście, że ostatnio mogłem używać C++0x w moim projekcie i _jest_ *niesamowity* (VC++10). Najbardziej przydatną funkcją do codziennego programowania jest oczywiście lambda. Drugim, który powiedziałbym, jest referencja rvalue (w końcu miałem odwagę zwrócić wektor!!) Poniżej znajdują się słowa Herba C++ i Beyond: > Zostałem poproszony o otwarcie „Witajcie wszyscy!” porozmawiaj na C&B 2011, > i nadszedł czas na ujawnienie coraz bardziej otwartej tajemnicy: po dziesięcioletnim romansie z językami zarządzanymi, gdzie niemodne stało się zainteresowanie > C++, moc i wydajność C++ znów stają się bardzo modne. > Jednocześnie C++ staje się coraz łatwiejszy w użyciu; Kluczowa produktywność > funkcje ze standardu C++0x (aka C++11), takie jak auto i lambdas, są > coraz szerzej dostępne w komercyjnych kompilatorach i sprawiają, że korzystanie z C++ > jest łatwiejsze niż kiedykolwiek wcześniej bez poświęcania jego fundamentu — wydajności. > > Ten otwierający 40-minutowy wykład przedstawia powody, dla których C++ przeżywa obecnie wielki renesans i dlaczego będzie się on rozwijać w ciągu najbliższych kilku > lat z powodu trendów w branży, od projektowania procesorów przez komputery mobilne po środowiska chmurowe i centra danych . >> Wiemy już, że C++ jest „językiem z wyboru” dla wymagających aplikacji. Tutaj omówimy, dlaczego „wymagające aplikacje” coraz częściej > oznaczają „większość zastosowań” i będą chlebem powszednim naszej branży > w najbliższej przyszłości. Zobaczymy, dlaczego i gdzie inne języki są > nadal odpowiednie, ale dlaczego stosowalność i popyt na C++ znów wzrasta > bardziej niż przez ponad dekadę.


title: Czy SOA to utopia?

text: Przez lata uczestniczyłem w wielu prezentacjach i prezentacjach związanych z SOA. Projekty SOA umarły z powodu braku zainteresowania lub z powodu imponujących zakresów. Samo modne hasło straciło na sile. Czy ktoś widział zaimplementowane SOA? A może jest to rodzaj utopijnej wizji, do której należy dążyć? Czy trzeba wierzyć w SOA, nie dotykając go i nie widząc?


title: Front-End Java Web App Framework

text: Od trzech lat nie zajmowałem się tworzeniem stron internetowych w Javie, a teraz muszę go użyć do projektu, nad którym pracuję. Mam na myśli użycie Seam, Flex + BlazeDS, Struts2 lub Spring MVC. Najbardziej atrakcyjnym z czterech jest Flex, jednak staram się trzymać od niego z daleka, ponieważ aplikacja będzie w całości we Flashu. Struts2 i Seam są dojrzałe, ale nauka może wymagać więcej czasu. W przeszłości miałem podstawowe doświadczenie z frameworkiem Spring, więc rozważam również jego MVC. Czy powinienem użyć jednego z nich, czy wybrać inny framework?


title: Wykorzystanie ukończonych historii użytkowników do szacowania przyszłych historii użytkowników

text: W Scrum/Agile złożoność historyjki użytkownika można oszacować w punktach narracyjnych. Po ukończeniu kilku historyjek użytkownika programista lub zespół programistów może wykorzystać te doświadczenia, aby lepiej oszacować, ile czasu może zająć ukończenie przyszłej historyjki użytkownika. **Czy istnieje metodologia podziału złożoności historyjek użytkownika na wymierne lub wymierne atrybuty?** Na przykład User Story X wymaga rozbudowanego, nowego widoku w GUI, ale User Story X może wykonywać większość swoich funkcji przy użyciu istniejących logika biznesowa na serwerze. W skali od 1 do 10, User Story X ma złożoność 7 na kliencie i złożoność 2 na serwerze. Po ukończeniu User Story X ktoś pyta, ile czasu zajmie ukończenie User Story Y, która ma złożoność 3 na kliencie i 6 na serwerze. Patrząc na to, ile czasu zajęło ukończenie User Story X, możemy oszacować, ile czasu zajmie ukończenie User Story Y. Mogę sobie wyobrazić inne szczegóły: * Złożoność jednego atrybutu (np. złożoność klienta) mogą mieć atrybuty podrzędne, takie jak liczba kroków w sekwencji, punkty funkcyjne itp. * Kilka innych atrybutów, które również można wziąć pod uwagę, takie jak znajomość systemu przez programistę lub liczba zaangażowanych komponentów/interfejsów * Te atrybuty mogą być gromadzone w formie listy kontrolnej historii użytkownika. Powtórzmy: **czy istnieje metodologia rozkładania złożoności historyjek użytkownika na złożoność atrybutów/podatrybutów**, czy też wykorzystanie ukończonych historyjek użytkownika jako wskaźników w szacowaniu przyszłych historyjek użytkownika jest bardziej nieformalnym procesem?


title: Używasz losowego ciągu do uwierzytelniania HMAC?

text: Projektuję prosty webservice i chcę używać HMAC do uwierzytelniania w usłudze. Na potrzeby tego pytania mamy: * usługę sieciową na example.com * tajny klucz dzielony między użytkownikiem a serwerem [K] * identyfikator klienta, który jest znany użytkownikowi i serwerowi (ale niekoniecznie jest tajny ) [D] * wiadomość, którą chcemy wysłać do serwera [M] Standardowa implementacja HMAC wymagałaby użycia tajnego klucza [K] i wiadomości [M] do utworzenia skrótu [H], ale natrafiam na problemy z tym. Wiadomość [M] może być dość długa i zwykle jest odczytywana z pliku. Uważam, że bardzo trudno jest konsekwentnie utworzyć poprawny skrót w wielu systemach operacyjnych i językach programowania z powodu ukrytych znaków, które tworzą różne formaty plików. Jest to oczywiście kiepska implementacja po stronie klienta (100%), ale chciałbym aby ta usługa była łatwo dostępna i nie miała problemów z różnymi formatami plików. Myślałem o alternatywie, która pozwoliłaby na użycie krótkiego (5-10 znaków) losowego ciągu znaków [R] zamiast wiadomości do uwierzytelnienia, np. H = HMAC(K,R) Następnie użytkownik przekazuje losowy ciąg do serwera, a serwer sprawdza stronę serwera HMAC (przy użyciu losowego ciągu + wspólnego hasła). Z tego co widzę, powoduje to następujące problemy: * Brak integralności wiadomości – wszystko jest w porządku. widzi 2 sposoby na obejście tego 1. Połącz losowy ciąg ze znacznikiem czasu, aby hash był ważny tylko przez określony czas 2. Zezwól na użycie każdego losowego ciągu tylko raz * Ponieważ klient kontroluje losowy ciąg, łatwiej szukać kolizji Zwracam uwagę, że głównym powodem uwierzytelniania jest zaimplementowanie limitowania szybkości w usłudze API. Nie ma potrzeby zachowania integralności wiadomości i nie jest to wielka sprawa, jeśli ktoś może sfałszować pojedyncze żądanie (ale jest tak, jeśli może bardzo szybko sfałszować bardzo dużą liczbę). Wiem, że **prawidłowa** odpowiedź to upewnienie się, że wiadomość [M] jest taka sama na wszystkich platformach/językach przed jej zahaszowaniem. Ale, biorąc to z równania, czy powyższa propozycja jest akceptowalną drugą najlepszą?


title: Czy ta technika jest wzorcem projektowym? Jeśli tak, jak to się nazywa?

text: Jako przykładu użyję C#, ale powinien on obowiązywać globalnie. Powiedzmy, że mam wartość ciągu, która powinna być jedną z kilku stałych, ale chcę również, aby klient ustawił, której wartości ciągu użyć: private int foo; prywatny pasek strunowy; public int Foo { get { return foo; } ustaw { foo = wartość; bar = getStringValueFromDatabase(wartość); } } public string Bar { get { return bar; } } Często używam tej techniki i chcę wiedzieć, czy jest ona uważana za jakąkolwiek koncepcję formalną.


title: ruby do tworzenia aplikacji komputerowych lub aplikacji internetowych

text: jestem początkującym Rubinem. Właśnie zrobiłem kilka drobnych badań, dlaczego RUBY? dlaczego wybrać RUBY? co nowego w nim. Ilekroć wpisuję słowo RUBY w wyszukiwarce Google, pojawia się sugestia, taka jak RUBY on RAILS. więc zmieniłem zdanie, aby dowiedzieć się rzeczy o rubinach na szynach. Przeszedłem przez kilka forów, ale otrzymałem tę samą odpowiedź od wszystkich. RUBY ON RAILS to FRAMEWORK do tworzenia stron internetowych. po raz kolejny dowiedziałem się, czym jest framework. Jest wiele pytań, o których wiesz, że swędzą mnie w głowie. Różne odpowiedzi od wszystkich. nie wiem, który jest właściwy. najpierw jeśli ktoś chce dać mi odpowiedź .. powiedz mi rozwiązanie tego. podobnie jak java uruchamiamy programy ruby w wierszu poleceń, przechodząc do katalogu w cmd, w którym jest zainstalowany ruby.it jest podobny do javy. więc czy możemy stworzyć aplikację desktopową za pomocą it.mam na myśli jak program do wyszukiwania plików, który jest domyślny w systemie Windows. Możemy stworzyć ten sam program do wyszukiwania plików używając java swing i bawiąc się niektórymi funkcjami strunowy, prawda? czy możemy zrobić to samo z rubinem.? to mój pierwszy. Podniosę wątpliwości dotyczące ruby on rails po tym, jak wyjaśnię powyższe pytanie.


title: Zostań freelancerem w niepełnym wymiarze godzin

text: Pracuję na pełen etat jako starszy programista. Dobrze się opłaca, ale praca jest niezadowalająca z wielu powodów. Często marzę o tym, żeby zostać freelancerem, ale nie chcę wyrzucać stabilnej wypłaty bez uprzedniego zanurzenia palca w wodzie freelancera. Niedawno w wolnym czasie opracowałem aplikację klasy komercyjnej, więc mam zdrowy szacunek dla stylu życia, do którego mogą prowadzić dwie prace, ale doświadczenie dało mi również pewność, że mogę to zrobić, przynajmniej na chwilę . Dołączyłem do eLance, ale szybko zniechęciła mnie liczba ofert po bardzo niskich cenach od dobrze ugruntowanych studiów i zespołów programistów z dobrymi ocenami. Jak mogę konkurować z innymi freelancerami, jeśli chcę pracować tylko wieczorami i w weekendy? Potrafię przygotować solidne portfolio, które z pewnością da mi przewagę nad „sweatshopami” w krajach trzeciego świata, ale wciąż nie rozumiem, dlaczego ktokolwiek miałby mnie zatrudnić, skoro mógłby zrealizować swój projekt w krótszym czasie, zatrudniając na pełen etat programistę lub dedykowane studio. Czy powinienem „nie wspomnieć”, że mam już pracę na pełen etat? Nie wydaje się to jednak uczciwe i nie chcę, aby zleceniobiorcy dzwonili do mnie, gdy jestem w pracy. Na początku jestem gotów pracować tanio. Wykluczone są kontrakty i podróże. Gdzie mogę znaleźć pracę programistyczną w niepełnym wymiarze godzin w domu?


title: Czy pracodawcy i headhunterzy prowadzą gdzieś bazę danych o programistach?

text: Czy istnieje gdzieś utrzymywana strona internetowa, na której pracodawcy i headhunterzy wnoszą bzdury i nieprzyjemne oskarżenia o pracownikach, coś w rodzaju odwróconego glassdoor.com? Pytam o to jako pracownik, NIE jako pracodawca.