title: Jak podzielić pracę na sieć komputerów?

text: Wyobraź sobie następujący scenariusz: Załóżmy, że masz centralny komputer, który generuje dużo danych. Dane te muszą przejść pewne przetwarzanie, które niestety trwa dłużej niż wygenerowanie. Aby przetwarzanie nadążało za czasem rzeczywistym, podłączamy więcej komputerów podrzędnych. Co więcej, musimy brać pod uwagę możliwość wypadnięcia niewolników z sieci w trakcie pracy, jak również dodawania dodatkowych niewolników. Centralny komputer powinien zapewnić, że wszystkie zadania zostaną zakończone w sposób zadowalający, a zadania zrzucone przez niewolnika zostaną przeniesione na inne. Główne pytanie brzmi: Jakie podejście powinienem zastosować, aby to osiągnąć? Być może jednak odpowiedź pomogłaby mi w znalezieniu odpowiedzi: Czy istnieje nazwa lub wzorzec projektowy tego, co próbuję zrobić? Jakiej dziedziny wiedzy potrzebuję, aby osiągnąć cel, jakim jest skłonienie tych komputerów do komunikowania się ze sobą? (np. czy wystarczy baza danych, o której mam pewną wiedzę, czy będzie to dotyczyć gniazd, o których jeszcze nie wiem?) Czy są jakieś przykłady takiego systemu? Główne pytanie jest nieco ogólne, więc dobrze byłoby mieć punkt początkowy/punkt odniesienia. Uwaga: zakładam ograniczenia c++ i windows, więc rozwiązania wskazujące w tym kierunku byłyby mile widziane.


title: Jak wyizolować trudne do odtworzenia błędy?

text: W moim programie jest błąd. Nie ma znaczenia, jaka jest platforma. Co jakiś czas wiersz w ListView ma niewłaściwy kolor. Próbowałem ustawić punkt obserwacyjny dla zmiennej, która ma dyktować kolor wiersza i nie zmienia się... Zgaduję, że problem może tkwić w kodzie frameworka. Tylko raz byłem świadkiem, jak to się stało. Mój klient zauważył to i chce to naprawić. Nie mam pojęcia, od czego zacząć. Ktoś mi kazał sztucznie zwiększać obciążenie programu. Jakie są metody wyszukiwania trudnych do znalezienia błędów?


title: Jak rozpocząć karierę w systemach rozproszonych?

text: Jestem zachwycony niezawodnymi systemami rozproszonymi i chcę poświęcić swoją karierę na ich ulepszanie, a nie tylko używać ich do pisania tych samych aplikacji CRUD w kółko. Jakie doświadczenie przekona pracodawcę do pracy nad projektem jego systemów? (Wybierz dowolny przykład, powiedzmy CouchDB.) * Przypuszczalnie napisanie własnego systemu jest najlepszym przykładem, ale zakres tego jest stosunkowo duży i mówiąc pragmatycznie, nie ma sensu wymyślać koła na nowo. * Poznanie bazy kodu istniejącego systemu i praca nad przesłaniem poprawek wydaje się długą drogą do marginalnego wpływu na projekt, przy niewielkiej gwarancji opłacalności pracy. * Większość pracodawców (o ile wiem) chce, abyś był zajęty pracą nad ich aplikacją wysokiego poziomu i nie spędzał czasu na ulepszaniu infrastruktury. Czy te wrażenia są dokładne? Jak inni ludzie zaczynają pracę nad tymi systemami? **EDYTUJ** : Naprawdę chcę zacząć od dołu i pracować przez długi czas. Czy w przestrzeni systemów rozproszonych istnieją konkretne projekty/zadania odpowiednie dla początkującego? Np. wygląda na to, że rozproszone kolejki wiadomości są dobrym projektem startowym i nie są jeszcze w 100% nasycone na wszystkich platformach. Wszelkie myśli są bardzo cenione. Dziękuję Ci!


title: najlepsze zasoby, aby być na bieżąco z algorytmami

text: Na uniwersytecie prowadzę 3 kursy o algorytmach. Coraz więcej uczelni udostępnia program internetowy i slajdy o swoich kursach. Jakie są najlepsze zasoby \- kursy uniwersyteckie umieszczane w sieci \- czasopisma naukowe o algorytmach \- profesor \- specjalista od algorytmów \- itd., itp. do aktualizacji w dziedzinie algorytmów? Na przykład, jeśli wiem, że najważniejszą osobą w dziedzinie algorytmów jest profesor X na uniwersytecie Y. Mogę postępować zgodnie z sugerowaną książką/referencją dotyczącą jego/jej kursów uniwersyteckich i otrzymywać z wyprzedzeniem aktualizacje algorytmów. Ktoś ma jakieś sugestie, aby śledzić postęp w dziedzinie algorytmów?


title: Jak opisujesz sposób, w jaki LinkedIn obsługuje linki URL?

text: Próbuję dowiedzieć się, co się dzieje w adresie URL linków LinkedIN. Link ze społeczności LinkedIN otwiera się z okienkiem (?) zawierającym narzędzia witryny LinkedIN, podobnie jak alerty tutaj w SE. Link docelowy jest osadzony w adresie URL LinkedIN jako zmienna GET. To jest link LinkedIN składający się z trzech części (środkowa część to docelowy adres URL), `http://www.linkedin.com/news?viewArticle=&articleID=5567246644694487049&gid=87719&type=member&item=90729979&articleURL=` **+** ` http%3A%2F%2Fwww.nypl.org%2Fblog%2F2011%2F03%2F24%2Fprecarity-readers-guide` **+** `&urlhash=mQ1h&trk=group_most_recent_rich-0-b-shrttl` 1. Co to jest ten GUI widżet, który nazwałem "zaciemnieniem okna", potocznie zwanym? 2. Co to jest odniesienie do kodu technicznego? 3. Jakim terminem mogę opisać sposób, w jaki LinkedIN wykorzystuje dane GET?


title: Po co używać try… wreszcie bez klauzuli catch?

text: Klasycznym sposobem programowania jest użycie `try` / `catch`, ale kiedy należy używać `try` bez `catch`? W Pythonie następujące wydaje się legalne i może mieć sens: spróbuj: #działaj w końcu: #zrób coś bezwarunkowego Ale nic nie `złapaliśmy`. Podobnie można by pomyśleć, że w Javie byłoby spróbować { //na przykład spróbować uzyskać połączenie z bazą danych } w końcu { //closeConnection(connection) } Wygląda dobrze i nagle nie muszę się martwić o typy wyjątków itp. Ale jeśli to jest dobra praktyka, kiedy jest to dobra praktyka? Lub powody, dla których nie jest to dobra praktyka lub nie jest legalne (nie skompilowałem źródła, o które pytam i może to być błąd składni dla Javy, ale sprawdziłem, czy Python na pewno się kompiluje). Powiązany problem, który uruchomiłem do tego, że kontynuuję pisanie funkcji/metody i na końcu muszę coś zwrócić i jestem w miejscu, do którego nie powinno się dotrzeć i musi to być punkt powrotu, więc nawet jeśli obsłużę powyższe wyjątki, nadal wracam null lub pusty ciąg w pewnym miejscu w kodzie, do którego nie powinno dojść, często koniec metody/funkcji. Zawsze udawało mi się zmienić strukturę na kod, aby nie musiał zwracać wartości null, ponieważ wydaje się to absolutnie nie być dobrą praktyką.


title: Czy Google's Go to bezpieczny język?

text: ta strona http://golang.org/doc/go_faq.html pisze: > chociaż Go ma typy statyczne, język próbuje sprawić, by typy wydawały się > lżejsze niż w typowych językach OO Więc moje pytanie brzmi dokładnie, czy jest bezpiecznie wpisywane za pomocą generyków ( jak C#) lub luźno wpisane (jak javascript) lub opcjonalne (jak opcja strict w Vb.Net)


title: Jak i kiedy wymiary są wypełniane w schemacie hurtowni danych?

text: Czytam książki Ralpha Kimballa i obecnie eksploruję następujący schemat hurtowni danych. ![Schemat hurtowni danych AdventureWorks 2008](http://i.stack.imgur.com/GydiG.png) Czy tabele wymiarów i faktów są wypełniane podczas tworzenia/aktualizacji hurtowni danych? Jak często? A co z tabelą DimDate? Czy wypełniamy go wszystkimi możliwymi datami, czy tylko datami używanymi przez tabele faktów? **Jaki jest standardowy proces generowania hurtowni danych?**


title: Czy można zmienić mapowania i właściwości relacji modelu w Entity Framework CodeFirst w czasie wykonywania?

text: Oto sytuacja. Mam aplikację dla przedsiębiorstw, która używa EF Codefirst do mapowania POCO do istniejącej bazy danych. Do tej pory działało to dobrze. Właściwie powiedziałbym, że działa naprawdę dobrze. Wprowadzono sytuację (poza moimi rękami) polegającą na dodawaniu nowych tabel do bazy danych i/lub nowych kolumn do tabel, gdy klient zakupił dodatek. Nie ma wyraźnych granic domen. Tak więc znajduję się w trudnej sytuacji, ponieważ muszę wspierać jednostkę na poziomie produktu bazowego, ale potem muszę wspierać tę samą jednostkę (z naciskiem na to, że ta jednostka jest uważana za tę samą) za pomocą kilku nowych kolumn. Ponadto jednostka może mieć nowe relacje z nowymi tabelami. Wydaje się, że możliwe jest dodawanie encji do schematu (patrz http://romiller.com/2012/03/26/dynamically-building-a-model-with-code-first/ dla ogólnego podejścia), ale nie nie odnoszą się do właściwości i relacji. Czy jest możliwa lub nawet możliwa zmiana schematu i modeli DbContext w czasie wykonywania? Aplikacja używa ASP.NET MVC WebAPI ze wzorcem repozytorium. Tak więc w ostateczności rozważam możliwość, że będę musiał przestać używać EF i zastąpić go ADO.NET, ale będzie to (oczywiście) bardzo pracochłonny i czasochłonny proces. Dzięki za wszelką pomoc.


title: Jakie są możliwe alternatywy dla zapewnienia „Hasła administratora” dla aplikacji komputerowej?

text: Obecnie zarządzam i refaktoryzuję oprogramowanie, które jest używane w mojej firmie od ponad dekady. Jednym z elementów tej aplikacji jest rodzaj trybu administratora lub zaawansowanego użytkownika, który zapewnia takie rzeczy, jak dodatkowe/wewnętrzne dane wejściowe, a także możliwość wyłączenia limitów wejściowych. Historycznie ten tryb był włączany przez umieszczenie konkretnie nazwanego pliku w określonym miejscu w katalogu systemowym Windows (oba zostały na stałe zakodowane w aplikacji), plik o nazwie „something.DLL”, mimo że był pusty Plik ASCII, a nie dll. Więc ostatnio dodałem trochę kodu i mały formularz modalny, który pozwala użytkownikowi wprowadzić hasło administratora, aby włączyć tę funkcjonalność. Jest to ustawione hasło, a nie specyficzne dla użytkownika. Po wprowadzeniu prawidłowego hasła robi to samo, tworząc „plik klucza” w katalogu głównym aplikacji, aby program mógł uruchomić się w trybie administratora, jeśli ten plik jest obecny. Teraz kierownikowi działu, dla którego ten program jest przeznaczony, nie podoba się tak bardzo ten pomysł. Uważa, że jeśli mamy tylko proste, wstępnie ustawione hasło, to z łatwością „wyjdzie” i nie chce, aby niedoświadczeni użytkownicy mieli dostęp do tych dodatkowych funkcji. Więc moje pytanie brzmi, jakie są inne metody zapewniania tego rodzaju dostępu, który byłby nieco bezpieczniejszy? Jeśli chodzi o utrzymanie i zarządzanie tym oprogramowaniem, to właściwie tylko ja, więc wszystko, co nie jest prawie całkowicie wbudowane lub zautomatyzowane, nie pomogłoby (na przykład wysyłanie próśb o „klucze licencyjne” lub coś podobnego). Uwagi: Ta aplikacja jest napisana w VB.NET (.NET 4.0) i obecnie planuję użyć wdrożenia jednokrotnego kliknięcia po zakończeniu nowej wersji.


title: Konwencje nazewnictwa klas Java, które mają statyczną metodę główną?

text: Po przeczytaniu odpowiedzi gnata na pytanie Dlaczego statyczna metoda główna w Javie i C#, a nie konstruktor? Jego odpowiedź oznacza, że celem klasy Javy ze statyczną metodą main jest „zdefiniowanie punktu wejścia programu”, a nie jest to sam program. Może jest lepszy sposób, aby to zrobić, ale zwykle mam klasę ze statyczną metodą main, aby zrobić coś prostego, takiego jak: public class MenuLauncher { public static void main(String[] args) { Menu menu = new Menu() ; menu.uruchom(); } } Czy powyższy kod byłby najlepszą praktyką dla OOP, gdzie klasa ze statycznym main nie robi nic więcej niż uruchamianie lub uruchamianie logiki programu zawartej w oddzielnym niestatycznym obiekcie; mimo wszystko główny jest statyczny, więc czy sama klasa MenuLauncher nie byłaby bardzo ograniczona? Ponieważ main jest punktem wyjścia, nie widzę innego celu dla klasy niż bycie punktem wejścia. **Czy istnieje konwencja nazewnictwa Java powszechnie używana dla klas, które zawierają główną metodę i służą jako punkt wejścia do programu?**


title: Wysyłanie kompletnych powiadomień do klienta

text: Tak więc w przypadku cqrs akceptujemy, że spójność jest ostateczna. Nie oznacza to jednak, że użytkownik musi stale odpytywać, ani że synchronizacja aktualizacji musi trwać dłużej niż 500 ms. W trosce o UX chcemy przynajmniej dać iluzję spójności, a jeśli to niemożliwe, być jak najbardziej transparentnym. Mając to na uwadze, mam następującą konfigurację: * klient sieciowy angularjs, zużywa * usługi restful webapi, wysyła polecenia do * obsługi poleceń nservicebus, zapisuje do * neventstore, wysyła zdarzenia do * obsługi zdarzeń nservicebus, wysyła wiadomość do * centrum sygnalizacyjnego, wysyła powiadomienia do * angularjs web client więc teoretycznie przy takiej konfiguracji * niektórzy inicjują żądanie * serwer waliduje żądanie * wysyła niezbędne polecenia W międzyczasie * klient otrzymuje 200 odpowiedzi * aktualizuje widok: pracując na nim * dostaje wiadomość jakiś czas później: gotowe, oto zaktualizowane dane Tutaj sprawy stają się interesujące, każde polecenie może wywołać wiele zdarzeń. Nie jestem pewien, czy to poważne nie, nie, czy nie, ale tak jest obecnie. Na przykład nowy klient tworzy identyfikator klienta, zaktualizowano nazwę klienta, zaktualizowano adres klienta itd. Która procedura obsługi zdarzeń musi powiadomić klienta? Czy wszystkie z nich w stylu paska postępu powinny zostać zaktualizowane?


title: Czy używanie chronionego dziedziczenia do ukrywania (ale wykorzystywania) zaimplementowanego interfejsu przed publicznością jest w porządku?

text: Ostatnio rozmawialiśmy o kodzie wykorzystującym chronione dziedziczenie w celu ukrycia faktu (do kodu klienta), że klasa dziedziczy po określonej klasie bazowej, ale w celu wykorzystania tego faktu w implementacji. Poniższy kod demonstruje to. Kompiluje się z najnowszymi wersjami GCC i clang++ (używa funkcji C++11): #include <wektor> #include <iostream> class IObserver { public: virtual void update() = 0; }; class Model { std::vector<IObserver*> m_observers; int m_number = 0; public: void addObserver(IObserver&obserwator) { m_observers.push_back(&observer); } void setNumber(int wartość) { m_number = wartość; powiadomićObserwatorów(); } int liczba() const { return m_number; } protected: void notifyObservers() { for (auto pObserver : m_observers) pObserver->update(); } }; // Chcemy ukryć, że klasa faktów „Widok” ma interfejs „IObserver”. class View : protected IObserver { Model* m_pModel; public: View(Model&model) : m_pModel(&model) { model.addObserver(*this); // Wykorzystaj fakt, że jesteśmy 'IObserver'. } protected: void update() override { std::cout << m_pModel->number() << std::endl; } }; int main(int argc, char *argv[]) { Model modelu; Widok widoku (model); //widok.aktualizacja(); // BŁĄD: „update” jest chronionym elementem „View”. model.setNumber(1); model.setNumber(2); } Klasa „View” dziedziczy interfejs „IObserver”, ale używa modyfikatora „protected”. W związku z tym chroniona jest publiczna metoda 'update' odziedziczona z tego interfejsu. W konstruktorze klasa „View” dodaje się jako obserwator do instancji „Model” przekazanej jako parametr. Uruchomienie pliku wykonywalnego spowoduje wyświetlenie '1' i '2' w dwóch oddzielnych wierszach, więc kod będzie działał zgodnie z oczekiwaniami. Teraz to rozwiązanie było intensywnie omawiane w naszym zespole, ale w końcu pojawiły się pytania, na które nie mogliśmy odpowiedzieć za wspólnym porozumieniem: 1. **Czy ten kod jest rzeczywiście legalny w.r.t. do standardu C++?** Problem polega na tym, że w konstruktorze klasa „View” przekazuje referencję do siebie do metody „Model::addOberver”, która oczekuje odwołania do instancji „IObserver” z publiczną aktualizacją ' metoda. Ponieważ jednak klasa „View” używa chronionego dziedziczenia, ta metoda jest teraz chroniona. Więc kiedy metoda 'Model::notifyObservers' jest wywoływana w metodzie 'Model::setNumber', metoda 'update' widoku zostanie wywołana "z zewnątrz", pomimo faktu, że jest faktycznie chroniona. (C++ FAQ Lite stwierdza: _"[chronione dziedziczenie] pozwala klasom pochodnym chronionej klasy pochodnej na **wykorzystywanie** relacji z chronioną klasą bazową"_. Wygląda to na to, że powyższy kod jest odpowiednim przypadkiem użycia. ) 2. **Zakładając, że jest to kodeks prawny, czy to też dobry projekt?** Fakt, że dużo dyskutowaliśmy i nie doszliśmy do porozumienia, może być wskazówką, że tak nie jest. Niektórzy z naszych kolegów byli zdania, że interfejs klasy jest definiowany wyłącznie przez jej publiczne metody. A jeśli klasa „View” chce przekazać referencję do siebie do metody oczekującej wystąpienia „IObserver”, musi użyć publicznego dziedziczenia. Niektórzy (w tym ja) nie zgadzali się z tą ścisłą definicją. Implementacja wie o tym, że ma (i może zapewnić) interfejs „IObserver”, więc dlaczego nie miałaby wykorzystać tej wiedzy i narazić chronionego interfejsu na kod, którego chce? W C++ jesteśmy w stanie zdefiniować zarówno publiczny interfejs dla "normalnego" kodu klienta, jak i chroniony interfejs dla kodu klienta, który chce specjalizować się/rozszerzać klasę. Tak więc z tego punktu widzenia interfejs klasy jest zdefiniowany przez jej publiczny **i** jej chroniony interfejs. Zależy to tylko od tego, jaki rodzaj kodu klienta „patrzy” na interfejs klasy. 3. **Jeśli celem jest ukrycie interfejsu 'IObserver' przed opinią publiczną, to czy warto używać idiomu pImpl wyłącznie do tego celu?** Ponieważ nie byliśmy w stanie dojść do wspólnego wniosku odnośnie dwóch pierwszych pytań, na które zdecydowaliśmy się "obejście" ich za pomocą idiomu pImpl i publicznego dziedziczenia w klasie implementacji. Mamy więc teraz klasę „View”, która w ogóle nie dziedziczy po klasie „IObserver”. Zamiast tego klasa „ViewImpl” dziedziczy teraz publicznie po „IObserver”. Chociaż zgodziliśmy się, że jest to „dobry projekt”, nasza implementacja stała się bardziej złożona, mamy o jeden pośrednik więcej i teraz musimy utrzymywać prawie dwa razy więcej kodu. Ponadto musimy utrzymywać hierarchie dziedziczenia zarówno dla klas publicznych, jak i klas implementacyjnych. (Oczywiście są to dobrze znane wady używania idiomu pImpl.) Bardzo doceniam wasze opinie dotyczące tych trzech pytań!!! Z góry wielkie dzięki :-)


title: Ankieter udziela błędnych odpowiedzi na własne pytania

text: Przeprowadziłem kilka wywiadów w językach C i C++ w Indiach i muszę przyznać, że jestem bardzo rozczarowany pytaniami, jakie zadają indyjscy ankieterzy. Oczekują czarno-białych odpowiedzi na pytania i nie przyjmą żadnego kompromisu. Próbują zmylić cię nawet przy prostych pytaniach, niepotrzebnie próbując skomplikować proste pojęcia. Nie rozumiem też, jak na podstawie takich pytań będą oceniać kogoś jako dobrego lub złego programistę. Na dodatek pokłóciłem się z co najmniej 3 ankieterami, ponieważ zadawali mi pytanie, a potem sami udzielali błędnych odpowiedzi na własne pytania. Oto kilka przykładów naprawdę złych pytań: * "Co to jest p w następującym poleceniu C: int const* p". Prowadzący wywiad był cholernie zdeterminowany, aby udowodnić, że p jest stałym wskaźnikiem do liczby całkowitej (wyraźnie widać wskaźnik do stałej liczby całkowitej). Wyjaśniłem różnicę, ale nie ustąpiła, dopóki nie wyjaśnię jej wszystkich możliwych wyrazów twarzy. * Inny facet zapytał, czy wskaźnik powinien zostać sprawdzony pod kątem NULL przed jego usunięciem. Powiedziałem mu, że standard C++ gwarantuje, że nic złego się nie stanie po usunięciu wskaźnika NULL. Twierdził, że standardową praktyką kodowania jest sprawdzanie NULL i że kompilatory C++ nie są niezawodne (w następującym standardzie c++). * Inny facet zadał mi pytanie, a następnie zapytał, czy wystąpi błąd w czasie wykonywania, czy w czasie kompilacji. Argumentowałem, że po co ktoś miałby pisać taki kod, a ja osobiście nie pisałbym takiego kodu. Ale nalegał, żebym wybrał między błędem w czasie wykonywania a błędem w czasie kompilacji. * Inny facet zaczął mnie pytać, jak czytać parametry wiersza poleceń. Wyjaśniłem mu, że libC zapewnia wygodne narzędzie do obsługi parametrów wiersza poleceń. Ale ten facet był cholernie uparty, pytając mnie o składnię obiektów bibliotecznych. Kazałem mu sprawdzić instrukcję libC i że nie da się zapamiętać szczegółów API. * Inny facet zapytał mnie, co się stanie, jeśli dla klasy singleton usunę statyczny kwalifikator dla wskaźnika instancji i zamiast tego użyję zmiennej składowej, która jest wskaźnikiem do klasy. Powiedziałem, że statyczna metoda getInstance wygeneruje błąd, ponieważ statyczne funkcje składowe nie mogą manipulować niestatycznymi zmiennymi składowymi (w tym przypadku wskaźnikiem instancji). Ciągle upierał się, że się myliłem i że wszystko będzie dobrze działać, i nalegał, żebym wyjaśnił, jak to zrobić. Nie zgodziłem się. * Klasyczne śmieszne pytanie, które zadają indyjscy ankieterzy, dotyczy punktów sekwencji, w których rzucaliby w ciebie niejasnymi wyrażeniami (p += ++p * p-- ;), których programista nigdy nie napisze i dla których zachowanie jest nieokreślone i na dodatek oczekuje znaleźć doskonałe odpowiedzi. Czy ktoś miał podobne doświadczenia podczas rozmowy kwalifikacyjnej, w której pokłóciłeś się z ankieterem lub spotkałeś się z absurdalnymi pytaniami. Proszę Podziel się


title: Nauczyciel żąda nadmiernego/nieuzasadnionego używania Wzorców Projektowych

text: Studiuję informatykę i prowadzę zajęcia o nazwie „Techniki programowania”. Jego celem jest nauczenie (nas) dobrych zasad projektowania obiektowego. W trakcie semestru mamy prace domowe, programy, które musimy napisać, aby zademonstrować to, czego się nauczyliśmy. Asystent laboratoryjny wymaga, aby przy każdym z tych zadań domowych zastosowano określone wzorce projektowe. Na przykład bieżąca praca domowa to aplikacja służąca do przetwarzania zamówień klientów. Wymaga się od nas użycia w tym celu wzorców projektowych „Metoda fabryczna” lub „Fabryka abstrakcyjna”. Jest jeszcze gorzej: pod koniec semestru musimy napisać program (coś bardziej złożonego), który musi wykorzystywać przynajmniej jeden wzorzec twórczy, przynajmniej jeden wzorzec strukturalny i przynajmniej jeden wzorzec behawioralny. Czy to normalne, że tego wymagasz? Mam na myśli, że zmuszanie nas do projektowania naszych programów w taki sposób, aby określony wzorzec projektowy miał sens, wykracza poza to, co uważam za w porządku. Jeśli jestem mechanikiem samochodowym i mam ogromną skrzynkę narzędziową, to użyję określonego narzędzia z tej skrzynki, jeśli i kiedy sytuacja tego wymaga. Nie więcej, nie mniej. Jeśli mój projekt aplikacji w ogóle nie wymaga użycia "Fabryki Abstrakcyjnej" (na przykład), to dlaczego miałbym ją zaimplementować? Nie jestem jeszcze pewien, czy starszy wykładowca zgadza się z żądaniami asystenta laboratorium, ale **chcę z nim o tym porozmawiać i potrzebuję do tego solidnych argumentów. Jak mam z nim podejść do tego problemu?** PS: Jestem pewien, że musi być lepszy sposób na nauczenie nas tych rzeczy. Może zmuszając nas co tydzień do czytania o 3 wzorcach projektowych, a w następnym tygodniu dając nam test z małymi, ale konkretnymi sytuacjami/problemami związanymi z programowaniem lub architekturą. Celem tego testu byłoby zidentyfikowanie, jakie wzorce projektowe miałyby sens i jak można by je wdrożyć. W ten sposób może zobaczyć, czy je rozumiemy. EDYCJA: Te prace domowe to nie tylko 100-liniowe programy, mają one dość wiele wymagań i są dość skomplikowane. Z tego powodu na każdą z nich mamy około 2 - 3 tygodnie. Zgadzam się, że praktykowanie tego jest najlepszym sposobem na naukę. Ale czy nie powinno się do tego używać mniejszych programów/aplikacji? Coś tylko do celów demonstracyjnych. Niewielkie programy z wieloma wymaganiami/klasami/itd.


title: Jak mam zrobić wiadomość "Server over capacity" z Django?

text: To prawdopodobnie nie jest pytanie dotyczące Django, ale zastanawiam się, jak wyświetlane są komunikaty „Server over capacity”. Kilka przykładów: * Niepowodzenie na Twitterze * Ukośnik na stronie Tumblr o przekroczeniu pojemności * Komunikat o przekroczeniu pojemności w Drawception, gdy tworzone są nowe gry.


title: Czy wejście w zarządzanie to zły sposób na poradzenie sobie z wypaleniem rozwojowym?

text: Jestem wypalony na programowaniu. Ostatnio w moim dziale była oferta pracy na kierownika (stanowisko mgr IT). Szef wydziału zachęcił mnie do aplikowania i uważa, że dobrze bym pasował... ale nie jestem pewien. Z drugiej strony nie chcę utknąć pracując dla złego szefa. Co byście zrobili? Ci z Was, którzy zostali awansowani, czy powiedzielibyście, że to była dobra rzecz dla waszej kariery, czy żałujecie tego? * * * EDIT: Dziękuję wszystkim za podzielenie się swoimi doświadczeniami. Ktoś mi powiedział, że jeśli mam o to zapytać, to albo nie jestem gotowy na stanowisko menedżera, albo nie chcę tej pracy. Czy to brzmi dobrze? Po prostu lubię badać, w co się pakuję, zanim podejmę ważną decyzję. Szczerze mówiąc, wydaje się, że jest tyle samo (jeśli nie więcej) wad niż plusów. * * * Nie mogę się zdecydować :( Po porównaniu listy zalet i wad... wydaje się, że jest tyle samo (jeśli nie więcej) wad niż zalet. Płaca na pewno jest lepsza, ale będę spodziewam się, że będę podłączony 24 godziny na dobę przez 7 dni w tygodniu i prawdopodobnie będę pracował więcej godzin. Moje cele są obecnie konkretne, ale w tej roli byłyby bardziej abstrakcyjne. Nienawidzę przepuszczać okazji, zwłaszcza że zachęcono mnie do aplikowania i jest potencjał do rozwoju, ale Po prostu nie wiem, czy warto. Jeśli przyjmę tę pracę i nie wyjdzie, naprawdę nie ma odwrotu, jeśli chcę zostać w firmie. * * * @daupphic - myślę, że jesteś w połowie racja.Prawdopodobnie chce, żebym wyszedł z kodu, ale nie ze względu na wydajność... może planować outsourcing.


title: rzucanie wyjątków runtime w aplikacji Java

text: Pracuję jako wykonawca projektując dla mojego klienta korporacyjną aplikację Java w roli kierownika technicznego. Z aplikacji będą korzystać użytkownicy końcowi i będzie zespół wsparcia, który wesprze aplikację, gdy wyjdziemy. Inni technicy, z którymi pracuję, mają wrażenie, że obsługa wyjątków zabrudzi kod. System powinien zgłaszać sprawdzone wyjątki tylko z warstwy usługi, a reszta kodu powinna zgłaszać wyjątki środowiska uruchomieniowego ze wszystkich innych warstw, aby nie było potrzeby obsługi niesprawdzonych wyjątków. Jaka jest potrzeba zgłoszenia niesprawdzonego wyjątku w aplikacji biznesowej? Z mojego doświadczenia z przeszłości na temat wyjątków wykonawczych: 1) Niesprawdzone wyjątki powodują, że kod jest nieprzewidywalny, ponieważ nie pojawiają się nawet w dokumentacji Javadoc. 2) Zgłaszanie niesprawdzonych wyjątków w aplikacji biznesowej nie ma sensu, ponieważ kiedy je rzucasz i trafiają prosto na twarz użytkownika, jak wytłumaczysz to użytkownikowi? Widziałem wystarczająco dużo aplikacji internetowych, które wyświetlają `500 -Internal Error. Skontaktuj się z Administratorem, co nic nie znaczy dla użytkownika końcowego ani zespołu wsparcia zarządzającego aplikacją. 3) Zgłaszanie wyjątków środowiska wykonawczego zmusza użytkowników klasy zgłaszającej wyjątek do przejrzenia kodu źródłowego w celu debugowania i sprawdzenia, dlaczego wyjątek został zgłoszony. Można tego uniknąć tylko wtedy, gdy dokument Javadoc wyjątku środowiska wykonawczego jest doskonale udokumentowany, co według mnie nigdy nie jest przypadkiem.


title: Affero GPL z aplikacją PHP i kluczami DB w localSettings.php

text: Chcę licencjonować nietrywialną aplikację PHP, nad którą pracowałem, na Affero GPL v3 (ponieważ chcę, aby każdy administrator, który będzie jej używał, wydał również kod źródłowy). Jednak coś mnie niepokoi. Mam plik localSettings.php, w którym administrator ma zapisywać klucze i trochę więcej informacji do bazy danych MySQL oraz kilka innych tajnych informacji w postaci $dbPassword="mojehasło"; i tak dalej. ALE. Czy w ramach AGPL, jeśli to zmieni, nie jest zobowiązany do wydania zmienionego kodu źródłowego wraz z tajnymi danymi uwierzytelniającymi? (Ponieważ plik localSettings.php również jest objęty licencją AGPL.)


title: O konstrukcji AST w nierekurencyjnym parserze LL1

text: Zaimplementowałem parser LL1 w nierekurencyjnym podejściu z jawnym stosem. Poniższy algorytm pochodzi ze Smoczej Księgi: ustaw zp, aby wskazywał na pierwszy symbol w; ustaw X na symbol najwyższego stosu; while ( X != $ ) { /* stos nie jest pusty */ if ( X to a ) zdejmij stos i przejdź dalej zp; else if ( X jest terminalem ) error(); else if ( M[X, a] jest wpisem o błędzie ) error(); else if ( M[X,a] = X -+ Y1Y2 Yk ) { wypisz produkcję X -+ YlY2 - . Yk; pop stos; wciśnij Yk, Yk-1,. . . , Yl na stos, z Yl na górze; ustaw X na symbol najwyższego stosu; } Książka mówi: > Parser jest kontrolowany przez program, który uwzględnia X, symbol na > stosie, oraz a, symbol bieżącego wejścia. Jeśli X jest nieterminalem, parser > wybiera produkcję X, sprawdzając wpis M[X, a] w parsowaniu > tabeli IM. **(Można tu wykonać dodatkowy kod, na przykład kod do > skonstruowania węzła w drzewie analizy.)** W przeciwnym razie sprawdza zgodność > między terminalem X a bieżącym symbolem wejściowym a. Jednak potrzebuję więcej informacji na temat tworzenia węzłów drzewa wyrażeń w ramach tego podejścia. Mam hierarchię węzłów UnaryOperator, BinaryOperator itp., Ale nie wiem, gdzie ją wywołać. Jeszcze nie znalazłem żadnego prostego przykładu (np. z językiem arytmetycznym).


title: Jaka jest dobra struktura do zapisywania i pobierania lokalizacji obrazów?

text: Dostałem aplikację java-ee, w której zbieram informacje o filmach. W moim zapleczu dostarczam dane, takie jak nazwa, opis, gatunek i losowy identyfikator uuid. Mam też wiele powiązanych plików, które są przechowywane na serwerze plików. W tym kilka zrzutów ekranu, okładka DVD lub bluRay i zwiastuny wideo. Moje obecne podejście jest następujące: podczas zapisywania plików na serwerze plików, pobieram losowy identyfikator uuid filmów (który jest kluczem podstawowym btw.). Następnie zmieniam nazwy plików `screenshot_[UUID]_1`, `screenshot_[UUID]_2` ... itd. Teraz jest wiele innych sposobów radzenia sobie z tym, jak zapisanie wszystkich nazw plików w bazie danych lub utworzenie struktury dir na serwer plików dla każdego uuid i np. zwraca wszystkie obrazy w folderze "[uuid]/screenshots" przez REST. Spodziewam się około 30 tys. żądań dziennie, więc usługa musi być całkiem wydajna. Jaki jest najlepszy sposób na rozwiązanie tego problemu?


title: Przekazywanie obiektu złożonego dla parametrów

text: Mam różne moduły danych, które pobierają kilka parametrów z listy konfiguracyjnej. Czy uważasz, że można przekazać obiekt konfiguracyjny jako cały `module1(config)` i pozwolić modułowi wybrać to, czego potrzebuje, czy raczej powinienem przekazać poszczególne parametry `module1(config.a, config.c, config.f )`? Pierwszy przypadek nie wymaga zmiany interfejsów w przypadku, gdy potrzebuję więcej parametrów konfiguracyjnych, ale drugi przypadek zawiera więcej?


title: Segmentacja x86 i wątki

text: Czy jakiś związek między używaniem segmentacji x86 a możliwą implementacją jest pakietem wątków? Powiedziano mi, że zazwyczaj segmentacja x86 jest obecnie implementowana w systemach operacyjnych z funkcją tożsamości (0 offset, nieograniczony limit), ale czy segmentacja może być jakoś przydatna w przypadku wielowątkowości?


title: Czy etyczne jest, aby programista promował własną bibliotekę?

text: Dość niedawno zacząłem utrzymywać własną bibliotekę JavaScript o otwartym kodzie źródłowym. Stworzyłem go, aby rozwiązać dość konkretną potrzebę, ale dość regularnie widzę pytania, które można rozwiązać (w całości/częściowo) za pomocą mojej biblioteki. Zamieszczam swoją odpowiedź i zawsze dopisuję, że prowadzę bibliotekę. Czuję, że dla projektów open source może to nie być taka wielka sprawa, ale gdzie wyznaczasz granicę? (np. produkty komercyjne) Czy programista powinien promować własną bibliotekę? Kiedy nie?


title: Jaka jest najlepsza polityka umożliwiająca klientom zmianę poczty e-mail?

text: Opracowujemy aplikację internetową z dość standardowym procesem rejestracji, który wymaga od klienta/użytkownika weryfikacji adresu e-mail, zanim będzie mógł korzystać z witryny. Witryna umożliwia również użytkownikom zmianę adresu e-mail po weryfikacji (również z polem ponownego wpisywania adresu e-mail). Jakie są plusy i minusy ponownego sprawdzenia przez użytkownika adresu e-mail. Czy to jest w ogóle potrzebne? **EDYCJA:** _Podsumowanie odpowiedzi i komentarzy poniżej:_ * „Nadmierna weryfikacja” denerwuje ludzi, więc nie używaj jej, chyba że jest to krytyczne * Rozważ pole „ponownie wpisz e-mail”, aby zapobiec literówkom, ale użytkownicy nadal mogą kopiować /wklej, czyniąc to dyskusyjnym. * Uważaj na nadpisywanie znanych dobrych danych potencjalnie dobrymi danymi * Wyślij e-mail do starego w celu powiadomienia; na nowy w celu weryfikacji * Nie zakładaj, że użytkownik nadal ma dostęp do starego adresu e-mail * Zidentyfikuj wpływ nieprawidłowego adresu e-mail w przypadku włamania na konto


title: Jak odpowiedzieć „Kiedy to będzie zrobione?”

text: Wszyscy to mamy, problemy, które okazują się trudne do naprawienia i wypracowanie rozwiązania za pomocą niejasnego kodu i dziwacznej, nieoczekiwanej funkcjonalności. Powoli, logicznie pracując, próbując znaleźć wzorce, błędy, pomyłki. Ten proces wymaga czasu, a problemy często nie są łatwo zrozumiałe dla klienta. Jak odpowiedzieć na pytanie „Kiedy to zostanie zrobione?”, zwłaszcza gdy klient może nie rozumieć nieodłącznej złożoności tworzenia oprogramowania?


title: Jak złe jest częste wywoływanie println() niż łączenie łańcuchów razem i wywoływanie go raz?

text: Wiem, że wyjście do konsoli to kosztowna operacja. W interesie czytelności kodu czasami dobrze jest wywołać funkcję wyświetlającą tekst dwa razy, zamiast używać jako argumentu długiego ciągu tekstowego. Na przykład o ile mniej wydajne jest posiadanie System.out.println("Dzień dobry."); System.out.println("Proszę podać swoje imię"); vs. System.out.println("Dzień dobry.\nProszę podać swoje imię"); W przykładzie różnica polega tylko na jednym wywołaniu `println()`, ale co, jeśli jest ich więcej? W związku z tym stwierdzenia dotyczące drukowania tekstu mogą wyglądać dziwnie podczas przeglądania kodu źródłowego, jeśli tekst do wydrukowania jest długi. Zakładając, że samego tekstu nie da się skrócić, co można zrobić? Czy powinno to być przypadkiem, w którym należy wykonać wiele wywołań `println()`? Ktoś kiedyś powiedział mi, że linia kodu nie powinna mieć więcej niż 80 znaków (IIRC), więc co byś zrobił z System.out.println("Dzień dobry wszystkim. Jestem tu dzisiaj, aby przedstawić wam bardzo, bardzo długie zdanie aby udowodnić, jak wygląda dziwnie wśród innych kodów."); Czy to samo dotyczy języków takich jak C/C++, ponieważ za każdym razem, gdy dane są zapisywane w strumieniu wyjściowym, należy wykonać wywołanie systemowe, a proces musi przejść do trybu jądra (co jest bardzo kosztowne)?


title: Jak zdefiniować fragment kodu w Javie?

text: **Znam `static final` równoważny `#define` , ale go nie szukam** Użyłem `#define REP(i,n) for(__typeof(n) i=0; i<( n); i++)` w C++, a potem mogę używać `REP(i,10)` zamiast `for(i=0; i<10; i++)` w całym programie. Ale czy jest na to sposób w Javie? Chcę wersję `#define REP(i,n) for(__typeof(n) i=0;i<(n);i++)`w Javie. Próbuję z „statycznym finałem”, ale nie mogę się domyślić.


title: na jakim poziomie narysowany projekt powinien pasować do rzeczywistej strony internetowej

text: Pracuję nad stroną internetową. Klient narysował go w Microsoft Publisher, a ja używam tego rysunku jako działającego projektu graficznego. Problem polega na tym, że w witrynie internetowej jest wiele miejsc, w których margines bloku tekstu różni się o kilka pikseli lub obraz jest oddalony o kilka pikseli od miejsca, w którym znajduje się na rysunku. Zastanawiam się, czy narysowany projekt naprawdę powinien pasować do strony internetowej piksel do piksela, czy też powszechną praktyką jest, aby niektóre rzeczy różniły się kilkoma pikselami? Naprawdę nie chciałbym tracić czasu na poprawianie tych małych błędów. To jest nudne i wygląda na stratę czasu.


title: Jak mogę rozpocząć swój pierwszy projekt Java o niebanalnej wielkości?

text: Za miesiąc muszę oddać projekt w Javie. Muszę stworzyć program e-sklepu, który ma dwa rodzaje użytkowników (administrator i normalni użytkownicy). Administrator może dodawać / usuwać / uzupełniać zapasy w sklepie, podczas gdy zwykły użytkownik może oglądać produkty i je kupować. Aby kupić produkt, klient musi założyć konto w tym e-sklepie. Nie jestem najlepszym uczniem Java, ale przygotowałem plan zajęć, z których mogę korzystać i tego typu rzeczy. Ale tak naprawdę nie potrafię rozgryźć, jak: 1. sprawić, by użytkownicy zarejestrowali się w e-sklepie 2. stworzyć różne menu bez tworzenia GUI, możemy stworzyć GUI, ale jest to tylko bonus i nie jest naprawdę wymagane. Swoją drogą, nigdy nie próbowałem tworzyć GUI. 3. jak sprawić, by program zapisywał takie rzeczy jak nazwa użytkownika i produkty na dysku twardym. Nie chcę, żeby ktoś to za mnie robił, potrzebuję tylko wskazówek, żeby dowiedzieć się, od czego zacząć i czego powinienem szukać.


title: Dostęp do elementów w tablicach

text: Odczytywałem struktury danych z Code Complete. Właśnie wtedy natknąłem się na ten artykuł o tablicach: > **Myśl o tablicach jako strukturach sekwencyjnych** Niektórzy z najzdolniejszych ludzi w > informatyce sugerowali, że do tablic nigdy nie można uzyskać dostępu losowo, ale > tylko sekwencyjnie (Mills i Linger 1986) . Ich argumentem jest to, że losowe > dostępy w tablicach są podobne do losowych goto w programie: takie dostępy > wydają się być niezdyscyplinowane, podatne na błędy i trudne do udowodnienia poprawności. Zamiast tablic > sugerują używanie zestawów, stosów i kolejek, których elementy są > dostępne sekwencyjnie. Czy dotyczy to klasy `System.Array` w C#?


title: Ukośnik końcowy w RESTful API

text: Prowadziłem debatę na temat tego, co zrobić z końcowym ukośnikiem w interfejsie API RESTful. Powiedzmy, że mam zasób o nazwie psy i podrzędne zasoby dla poszczególnych psów. Możemy zatem wykonać następujące czynności: GET/PUT/POST/DELETE http://example.com/psy GET/PUT/POST/DELETE http://example.com/dogs/{id} Ale co robimy z następujący przypadek szczególny: GET/PUT/POST/DELETE http://example.com/dogs/ Mój osobisty pogląd jest taki, że oznacza to wysłanie żądania do indywidualnego zasobu psa z id = `null`. Myślę, że w tym przypadku API powinno zwrócić błąd 404. Inni twierdzą, że żądanie uzyskuje dostęp do zasobu psów, tj. końcowy ukośnik jest ignorowany. Czy ktoś zna ostateczną odpowiedź?


title: Czy nauka C# jest łatwa, gdy znasz już C++?

text: Chcę nauczyć się języka C# i zastanawiałem się, czy wcześniejsza znajomość C++ ułatwiłaby naukę? Mam duże doświadczenie w Javie i obecnie programuję w (i dlatego ciągle ulepszam) C++. Czy wiedza na temat składni i struktury języka C++ pomogłaby mi szybciej zrozumieć język C#, czy też C# jest bardziej zbliżony do języka Java?


title: Co oznacza bootstrapping w kontekście Laravela?

text: Widzę „proces ładowania początkowego” wspomniany w samouczku Dayle Rees Laravel „Code Bright”, ale nie ma wyjaśnienia, co to właściwie oznacza. Definicje Wikipedii dotyczące Bootstrappingu w informatyce nie wydają się mieć szczególnego znaczenia.


title: Postęp w programowaniu niemenedżerskim?

text: Zastanawiam się nad moją przyszłą karierą. Mam pomysł, że z pozycji zwykłego programisty mogę awansować albo ścieżką zarządzania, albo ścieżką programowania. Tak naprawdę nie interesuje mnie zarządzanie, więc chciałbym wiedzieć, jakie są możliwości rozwoju jako programista. Jakie prace są logicznym kolejnym krokiem w rozwoju?


title: Czy dobrą praktyką jest przechowywanie środowisk uruchomieniowych struktury pod kontrolą źródła?

text: Wiem, że wiele sklepów z oprogramowaniem utrzymuje binaria pod kontrolą źródeł. Jednak nasz sklep przyszedł, aby przechowywać całe frameworki w repozytorium: środowisko wykonawcze DirectX, CUDA, nVidia Optix, cokolwiek. Mówi się, że ułatwia konfigurację maszyny deweloperskiej (podobno pobierz najnowszą wersję i zacznij kodować). Jednak znacznie rozdęje repozytorium i obciąża je nieistotną historią. Nigdy nie widziałem takiego wzorca użytkowania. Czy uważasz to za dobrą praktykę? [EDYTUJ:] Nie mam problemu z kontrolowaniem źródła izolowanych plików binarnych innych firm. Pytanie dotyczy całych środowisk wykonawczych frameworka, zazwyczaj składających się z ponad 10 plików binarnych. Jako skrajny przykład weź Windows SDK (którego nie trzymamy w repozytorium, dzięki Bogu, ale nie widzę żadnej różnicy w zasadzie).


title: Czy istnieje kanoniczna księga dotycząca zbierania wymagań?

text: Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie i inne przydatne informacje dotyczące gromadzenia wymagań dotyczących projektów oprogramowania i baz danych? Co w tej książce czyni ją wyjątkową?


title: Używanie trójskładnikowego operatora PHP z tylko dwoma argumentami

text: Niedawno przeglądałem część mojego kodu i zauważyłem, że w przypływie roztargnienia pozostawiłem strukturę podobną do następującej: $guid = empty($subscription->guid) ? : $subskrypcja->przewodnik; Teraz to _nie robiło tego, co powinno_ i jest **błędne** , ale ponieważ ta właściwość jest zawsze ustawiona, teraz działa dobrze i nie ma błędu składni od wersji 5.3 z powodu następującej zmiany: > Od PHP 5.3, można pominąć środkową część operatora trójskładnikowego >. Wyrażenie wyrażenie1?: wyrażenie3 zwraca wyrażenie1 jeśli wyrażenie1 ma wartość > TRUE, a wyrażenie3 w przeciwnym razie. Nie byłem świadomy tej zmiany, a teraz jestem ciekaw, czy powinienem z niej korzystać, czy nie. To jest coś, czego bardzo brakowało mi w językach takich jak ruby, gdzie można zrobić np. `a = b || c` aby uzyskać albo `b` lub `c` zamiast 'prawdziwej' wartości logicznej. Jednak składnia, którą wybrali dla operatora trójskładnikowego, wydaje mi się nieco sprzeczna z intuicją. Czy powinienem używać tego w kodzie produkcyjnym? Zdecydowanie rzuciłem się, gdy zobaczyłem to przez przypadek.


title: Jak pisać testy integracyjne dla platformy oprogramowania zorientowanej na komponenty?

text: **Sytuacja wyjściowa:** opracowujemy platformę oprogramowania, na której produkty mogą być generowane poprzez konfigurowanie różnych komponentów i dodawanie kolejnych. Platforma jest rozwijana od kilku lat przez niewielki zespół programistów. Teraz platforma jest coraz częściej wykorzystywana, pozyskujemy nowych programistów i testerów. Obecnie opracowujemy koncepcję dla dewelopera. Powodem jest to, że nie mamy zbyt wielu testów deweloperskich dla naszych komponentów. Zespół testerów używa zautomatyzowanych narzędzi do testowania interfejsu użytkownika do testowania produktów emitowanych przez platformę. **Nasz cel:** Chcemy zmotywować członków naszego zespołu do pisania większej liczby testów w celu osiągnięcia * skrócić cykle informacji zwrotnych * zmniejszyć liczbę błędów dla nowych funkcji * zmniejszyć regresje **Pytanie:** Chcemy zacząć opracowywać kruche komponenty. Po ich znalezieniu chcemy napisać testy integracyjne dla komponentu, który opisuje oczekiwane funkcje. Teraz mamy następujący problem: możemy przetestować komponent dla siebie i mockować wszystkie zależności do innych komponentów. Możemy przetestować komponent ze wszystkimi bezpośrednio zależnymi komponentami. Możemy przetestować komponent z całą jego strukturą zależności - czyli jego zależnościami i ich zależnościami... Możemy przetestować komponent w kontekście różnych konfiguracji produktu. Który byłby najlepszy do osiągnięcia naszych celów i jednocześnie zminimalizowania wysiłku potrzebnego członkom naszego zespołu do skonfigurowania testów?


title: Opcje w ramach OpenCV związane z analizą różnic obrazu i raportowaniem

text: **Scenariusz:** widok nieruchomy z sekwencyjnymi próbkami ze znacznikami czasu w kolorze 2D, w którym porównanie odbywa się tylko między jedną parą sąsiednich próbek. **Tło:** * Nigdy wcześniej nie korzystałem z OpenCV, * Ograniczona znajomość wizji komputerowej, * Programy skryptowe o umiarkowanym doświadczeniu. **Pytania:** * Jakie dodatkowe informacje byłyby przydatne, biorąc pod uwagę podane informacje? * Jakimi istniejącymi powiązanymi rozwiązaniami do analizy i raportowania w OpenCV powinienem się dokładniej przyjrzeć? * * * **AKTUALIZACJE:** * **Jakie jest źródło tych obrazów?** Do pewnego stopnia wyabstrahowałem intencję problemu, próbując uniknąć wypaczenia sposobu, w jaki odpowiedzi konceptualizują powiązane rozwiązania. **Disclosure-of-Problem-Domain:** Możliwe, że mylę się co do wartości abstrahowania problematycznej domeny, a ponieważ zostało to już zgadnięte, potwierdzę, że domena jest dowolnym automatycznym testowaniem GUI o wysokiej wartości, ma stosunkowo niewielką złożoność. Obecnie wydaje się, że proste testowanie regresji oparte na zmianie piksel po pikselu, które jest następnie sortowane według procentu zmiany pikseli para po parze, byłoby szybkie i dałoby wartość, ale dopasowanie szablonu sugerowane przez Martina Becketta może pozwolić w przypadku testów międzyplatformowych, choć znowu nie wiemy zbyt wiele o OpenCV lub domenie wizji komputerowej, trudno powiedzieć, że takie podejście może być obecnie złożone lub wartościowe. * **Co to samo?** Zależy od rozwiązań oferowanych przez OpenCV w kontekście analizy i raportowania różnic wizerunkowych. Wszelkie artefakty związane z przechwytywaniem powinny/powinny zostać uwzględnione w analizie porównawczej. W idealnym przypadku raportowanie różnic powinno domyślnie (lub kodowanie predykcyjne) profilować tylko istotne istotne zmiany stanu w sposób, który umożliwia priorytetowe traktowanie ręcznej reakcji na nie. * **Jakie są okoliczności przechwytywania obrazu?** Wszystkie pary są próbkowane w ściśle kontrolowanym środowisku z tym samym nieruchomym widokiem/kątem, oświetleniem, ekspozycjami, ostrością itp.


title: Naprawdę złe przykładowe projekty wykorzystujące sonar

text: Rozważając, czy użyć sonaru, czy nie, byłoby wspaniale zobaczyć zarówno dobry kod, jak i zły kod, który używa sonaru do statycznej analizy kodu. Przeglądałem http://nemo.sonarsource.org/ w poszukiwaniu projektów, które mają złe metryki. Niestety myślę, że naprawdę źli prawdopodobnie w ogóle nie będą korzystać z analizy kodu. Udało mi się znaleźć kilka, ale nie wyglądają tak źle, jak chciałem znaleźć. Jeśli można znaleźć naprawdę źle wyglądający, a następnie porównać go z projektem z dobrymi metrykami, łatwiej byłoby ustalić, dlaczego w ogóle używać sonaru. Czy istnieją jakieś horrorowe projekty z naprawdę złymi metrykami? Wolałbym projekty Java. Znalazłem jeden z gorszymi wskaźnikami niż większość, ale nawet to nie jest dla mnie takie złe: http://nemo.sonarsource.org/dashboard/index/351728?did=1 BRs


title: Czy możliwe jest zamknięcie samego obiektu we właściwości dynamicznej?

text: Zadaję to pytanie z ciekawości. Powiedzmy, że klasa Foo jest singletonem i chcę wywołać Foo zamiast Foo.Instance, aby uzyskać dostęp do obiektu statycznego. Czy byłoby możliwe zamknięcie samego obiektu we właściwości dynamicznej? Czy C# pozwoli mi utworzyć dynamiczną właściwość, która odwołuje się do czegokolwiek poza właściwością wspomnianego obiektu? Podobnie: prywatny statyczny Foo _instance; public static Foo this { get { if (_instance == null) { _instance = new Foo(); } return _instance; } } public void Bar(){} to pozwoliłoby mi wywołać Foo.Bar(); zamiast Foo.Instance.Bar(); Jeśli jest to możliwe, to w takiej sytuacji byłoby możliwe enkapsulacja dowolnego rodzaju obiektu bez użycia np. dziedzictwa zamiast: class Ploof : List{} mielibyśmy: class Ploof { private Lista _list; public Wyświetl to { get { return _list; } } }


title: Czego programista powinien się najpierw nauczyć: algorytmów czy wzorców projektowych?

text: Mam nowych młodszych programistów (nowych absolwentów), którzy właśnie dołączyli do mojego zespołu, niektórzy z nich nie wiedzą zbyt wiele o algorytmach i wzorcach projektowych. Nie jestem pewien, którego mam ich najpierw nauczyć?


title: Jak przekonać Programistów, że „bycie w strefie” [kodowanie] nie zawsze jest korzystne dla projektu?

text: W tej recenzji książki: http://books.slashdot.org/story/11/06/13/1251216/Book-Review-The-Clean-Coder?utm_source=slashdot&utm_medium=twitter > Rozdział 4 mówi o samym procesie kodowania. Jednym z najtrudniejszych stwierdzeń w tej książce jest trzymanie się poza „strefą” podczas kodowania. Bob > zapewnia, że tracisz część większego obrazu, gdy zejdziesz do tego > poziomu. Chociaż mogę zmagać się z tym stwierdzeniem, zgadzam się z jego następnym stwierdzeniem, że czas debugowania jest kosztowny, więc powinieneś unikać > rozwoju sterowanego debugerem, gdy tylko jest to możliwe. Kończy rozdział > przykładami własnego tempa (odchodzenie, branie prysznica) oraz radzenia sobie > ze spóźnianiem się z projektami (pamiętając, że nadzieja nie jest planem i > jasno określić wpływ nadgodzin) oraz przypomnienie, że dobrze jest zarówno dawać, jak i otrzymywać pomoc, niezależnie od tego, czy są to drobne pytania, czy > mentoring. opowiadają o tym, jak „bycie w strefie” może w rzeczywistości zaszkodzić projektowi. Jak przekonać członków swojego zespołu, że tak jest?


title: Dlaczego Mercurial jest uważany za łatwiejszy niż Git?

text: Patrząc na porównania, wydaje mi się, że może istnieć mapowanie 1:1 między ich zestawami funkcji. Jednak często cytowanym stwierdzeniem jest, że „Mercurial jest łatwiejszy”. Jaka jest podstawa tego stwierdzenia? (Jeśli w ogóle)


title: Jak usystematyzować tagowanie w kodzie?

text: W komentarzach używanych jest kilka niemal standardowych tagów: **FIXME** , **TODO** , **BUGBUG**. Jakich innych tagów używasz i do czego? Czy istnieją jakieś standardy ich stosowania, tj. format (uzupełnienie datą i inicjałami), procedury weryfikacji itp.?


title: Czy widok powinien wywoływać funkcję?

text: Czy widok powinien wywoływać funkcję pomocniczą? Powiedzmy, że przekazuję dane z bazy danych do widoku. Dane są uniksowym znacznikiem czasu. Czy powinienem wykonać połączenie, aby przekonwertować go na TS czytelny dla człowieka, czy powinienem przekonwertować go w kontrolerze przed przekazaniem? LUB powinienem stworzyć metodę w modelu, która konwertuje... Szukanie "najlepszej praktyki" lub "bezpiecznego kodowania" dotyczy odpowiedzi.


title: Struktura Programu Selenium-Nunit

text: Moje biuro ma zestaw silników raportowania internetowego napisany w VB. W sumie istnieje około 300 raportów z różnymi widokami w zależności od wprowadzanych do nich danych. Próbuję ustalić skuteczny sposób radzenia sobie z tak dużą różnorodnością, ale zmagam się z tworzeniem systemu, który nie będzie koszmarem kodowania/utrzymywania. Rozważałem wykonanie następujących czynności: 1. Przy uruchomieniu programu przeczytaj kroki wymagane dla każdej strony testowej. Może to mieć wiele testów dla tej samej strony z różnymi danymi wejściowymi. 2. Zapisz każdą iterację testu w pliku XML pod nazwą $env:temp/testname 3. Użyj atrybutu TestCaseSource Nunit, aby umieścić każdy powiązany plik xml jako źródło. Moją główną przeszkodą było przeniesienie tych danych do frameworka Nunit. Czy Nunit jest naprawdę odpowiedni do tego, co próbuję zrobić, czy jest zbyt statyczny?


title: Kontrola wersji i pochodzenie danych na wykresach, slajdach i materiałach marketingowych, które pochodzą z kodu wyjściowego

text: Rozwijam się jako część małego zespołu, który zajmuje się głównie badaniami i statystykami. Ale na podstawie wyników naszego kodu inne zespoły często tworzą materiały promocyjne, slajdy, prezentacje itp. Natrafiamy na duży problem, ponieważ zespół marketingowy (nie-programiści) zwykle używa Excela, produktów Adobe lub innych narzędzi do realizacji ich pracy i po prostu chcą od nas łatwych w użyciu formatów danych. Prowadzi to do problemów z pochodzeniem danych. Widzimy łańcuchy e-maili z załącznikami sprzed 6 miesięcy i ktoś mówi „Hej, kto wygenerował te dane. Czy możesz wygenerować ich więcej z dodanymi wynikami z ostatnich 6 miesięcy?” Chcę pomóc innym zespołom w efektywnym korzystaniu z kontroli wersji (mój zespół używa jej dość dobrze w kodzie, ale każdy inny zespół zwykle wymyśla wiele wymówek, aby tego uniknąć). Jeśli chodzi o kontrolę wersji projektu oprogramowania, którego uczestnikami są programiści, mam pewne rozsądne zrozumienie najlepszych praktyk i tego, co robić. Ale jeśli chodzi o nakłonienie zespołu specjalistów ds. marketingu do kontroli wersji materiałów marketingowych i powiązania metadanych dotyczących oprogramowania używanego do generowania danych do wykresów, jestem trochę zagubiony. Niektóre z celów, które chciałbym osiągnąć: 1. Dane, które wspierały materiał, _nigdy_ nie powinny być kojarzone z osobą. Tak jak w tym przypadku, nigdy nie powinno być tak, że ktoś powie „Hej, osoba XYZ, widzę, że przesłałeś mi te dane jako załącznik 6 miesięcy temu, czy możesz je dla mnie zaktualizować?” Dane powinny być raczej powiązane z kodem i wersją kodu dowolnego kodu, który został użyty do ich pobrania, a być może z zespołem wielu osób, które mogą ten kod utrzymywać. Następnie odwołania do aktualizacji danych dotyczą wykonania określonego fragmentu kodu o znanym numerze wersji. 2. Chciałbym, aby był to proces, który łatwo współpracuje z technologią, z której już korzysta zespół marketingowy (np. pliki Excel, plik Adobe, cokolwiek). Nie chcę obciążać ich potrzebą uczenia się wielu nowych rzeczy tylko po to, aby używać kontroli wersji. To zdolni ludzie, więc uczenie się czegoś jest w porządku. Najlepiej byłoby, gdyby mogli użyć naszego istniejącego frameworka kontroli wersji, ale wiąże się to z pewnymi problemami. Myślę, że znajomość kilku ogólnych dobrych praktyk wystarczy i poradzę sobie z poprawkami do sposobu, w jaki działają teraz nasze rzeczy. Czy są jakieś cele, o których nie myślę? Jakie są sprawdzone sposoby na zrobienie czegoś takiego?


title: Jak oszacować prędkość sprintu przy różnej pojemności zespołu?

text: Jesteśmy małym zespołem 4 deweloperów, raczej zielonych w Scrumie. Przyjeżdżając z całego kraju, często bierzemy wolne dni lub całe tygodnie, aby wrócić do domu. Dlatego zdolność naszego zespołu zmienia się dramatycznie z jednej iteracji na drugą z powodu corocznych urlopów, co prowadzi do bardzo różnych prędkości z jednej iteracji do drugiej. Jak uwzględniamy wydajność zespołu podczas szacowania prędkości na spotkaniu planistycznym? Dane historyczne będą odzwierciedlać bardzo różne pojemności i nie możemy czekać cały rok, aby uzyskać średnią dla naszej oszacowanej prędkości.


title: Jak oszacować skok ograniczony czasowo za pomocą punktów fabularnych?

text: Tak więc mój zespół i ja jesteśmy całkiem nowi w Scrum i dzisiaj przeszliśmy od szacowania godzin idealnych do punktów historii. Wszystko wydaje się rozsądne, ALE z działaniami ograniczonymi czasowo. W tym przypadku mamy niezwykle złożoną historię użytkownika, która potrzebuje skoku, aby zbadać podstawowe niewiadome techniczne. Z Idealnymi godzinami byłoby to łatwe: ustaw czas na jeden idealny dzień (8 idealnych godzin). Teraz chcemy obliczyć pracę eksploracyjną względem naszej prędkości. Tak więc naglące pytanie brzmi: w jaki sposób przyznać Story Points za aktywność ograniczoną czasowo? Ograniczenie: nie wiemy, jak przełożyć ten 1 idealny dzień na Story Points, ponieważ nasze dane historyczne są źle zebrane i nie odzwierciedlają rzeczywistości.


title: Wdrażanie scrum-ale po raz pierwszy: jak radzić sobie z warunkami technicznymi?

text: Po przepracowaniu Scrum(ish) w poprzednim miejscu pracy, staram się wdrożyć go w nowym miejscu pracy do zupełnie nowego projektu (nie jestem ekspertem od scrum). Zanim zaczniemy pracować nad historiami (które są w międzyczasie przygotowywane), mamy pewne warunki wstępne do napisania kodu. Rzeczy takie jak projektowanie baz danych, projektowanie interfejsów API itp. Planujemy użyć dwutygodniowych iteracji i po prostu nie jest dla mnie jasne, w jaki sposób pierwsza (lub dwie) może zapewnić coś użytecznego dla klienta i „potencjalnie możliwe do wysłania”, jeśli najpierw musimy „ położyć jakieś podwaliny" ? Jakieś pomysły, jak to leczyć? \-----edytuj / przeformułuj----- W jaki sposób możemy włączyć wstępne, niewidoczne dla klienta prace wstępne (np. projekt bazy danych, API, itp.) do procesu Scrum?


title: Czy ktoś mógłby zasugerować mi kilka technik manipulacji obrazami, które można dodać do mojej przeglądarki obrazów?

text: Staram się stworzyć małą przeglądarkę zdjęć, jako ćwiczenie, które wyostrzy moje umiejętności programistyczne. Do tej pory wszystkie funkcje, o których mogłem pomyśleć, to powiększanie i pomniejszanie, odwracanie kolorów obrazu i zmiana rozmiaru. Czy ktoś mógłby mi zaproponować kilka dodatkowych funkcji?? Możesz również zasugerować wszystko, co nie zostało jeszcze zaimplementowane. Chciałbym potraktować to jako wyzwanie edukacyjne. Dziękuję.


title: Jak przechowywać stary projekt?

text: Jako freelancer spotykam się z wieloma projektami. Przechowywanie kopii zapasowej wszystkich projektów na moim laptopie jest prawie niemożliwe. Jakie są lepsze opcje ich przechowywania?


title: Jak utworzyć wzajemnie niekompatybilną bibliotekę typów w Javie?

text: Ludzie, wydaje się, że to powinno być proste, ale rysuję tutaj puste miejsce. Jako uproszczony przykład rozważmy klasę abstrakcyjną o nazwie Number z metodą abstrakcyjną add(). Chcę utworzyć dwie konkretne podklasy, Integer i Float, z podpisami metod Integer.add(Integer other) i Float.add(Float other). Nie można dodać liczby zmiennoprzecinkowej do liczby całkowitej. Jaki powinien być podpis metody abstrakcyjnej metody add() w klasie Number, aby wymusić to ograniczenie w czasie kompilacji?


title: Dlaczego zdarzają się tak częste błędy i co możemy zrobić, aby im zapobiec?

text: Wydaje się, że błędy przypadkowe są jednym z najczęstszych (jeśli nie najczęstszych) błędów programistycznych (patrz Jakie są powszechne błędy w kodowaniu? i konwencjonalna mądrość). Jaki jest powód, dla którego są one tak powszechne, czy ma to związek z działaniem ludzkiego mózgu? Co możemy zrobić, aby nie padać ofiarą jednego błędu?


title: rejestruj zmienną w C i C++

text: Znam pojęcie zmiennej rejestru i jej przypadki użycia, ale na podstawie tego, czego próbowałem, mam kilka pytań. 1. Nie mogę uzyskać dostępu do adresu zmiennej rejestru w C, chociaż mogę to zrobić C++! Czemu? Czy jest jakiś problem z dostępem do adresowania zmiennej rejestru? 2. Załóżmy, że jeśli zadeklaruję zmienną typu string w C++ jako rejestr, to gdzie będzie przechowywana ta zmienna? Jaki jest sens w deklarowaniu, że klasa przechowywania nienumerycznych typów danych, takich jak „string” w C++, ma być rejestrowana? **UPDATE:** Myślałem, że C++ pozwala nam pobrać adres zmiennej rejestru, ponieważ nie otrzymuję żadnego błędu w moim programie, który wygląda następująco: #include<iostream> #include<time.h> using namespace std; zegar_t błagam, pl; int main(){ int j, k=0; błagać=zegar(); for(rejestr int i=0;i<10000000;i++){ /*if(k==0){ cout<<&i<<endl; // jeśli ten kod jest odkomentowany, to C++ odrzuca zalecenie uczynienia 'i' rejestrem k++; }*/ } en=zegar(); cout<<en-beg<<endl; cout<<&j<<endl<<&k; zwróć 0; } Zaobserwowałem, że jeśli ustawię zmienną 'i' jako rejestr i nie będę próbował wydrukować adresu za pomocą '&i' to C++ zaakceptuje zalecenie i zapisze 'i' w rejestrze, można to wywnioskować z czasu działania pętli for, która zawsze będzie wynosić około 4-12 ms, jeśli w rejestrze znajduje się 'i'. Ale jeśli spróbuję wypisać adres zmiennej 'i' to wprawdzie nie otrzymuję żadnego błędu, ale C++ odrzuca zalecenie i można to wywnioskować z czasu wykonania pętli, który jest zawsze większy niż 25, jeśli i nie jest zarejestrowany! ! Więc w zasadzie nie mogę pobrać adresu zmiennej z klasą pamięci jako rejestr! DLACZEGO?


title: Jakie są standardowe metody projektowania w celu dodania GUI do aplikacji wiersza poleceń?

text: Mam osadzoną aplikację linux c, która działa z prostym interfejsem wiersza polecenia. Teraz mam za zadanie stworzyć GUI, który spełnia te same funkcje, co program wiersza poleceń. Nie jestem znakomitym projektantem GUI i większość, jeśli mam doświadczenie w głęboko osadzonym kodowaniu c. Moją pierwszą myślą jest użycie qtcreator do stworzenia GUI, ale jest kilka kwestii, nad którymi się zastanawiam. * Idąc dalej, chcę zachować zarówno program CL, jak i program GUI, a najlepiej, aby były dokładnie tym samym plikiem wykonywalnym, który można uruchomić w dowolnym trybie. Chyba że to zły pomysł? * Mój kod jest do tej pory w C, a qt jest natywnie c++ * Chciałbym bezpośredniej korelacji, w której naciśnięcia przycisków w GUI wywołują te same funkcje, które wywołuję z CLI * Jak najlepiej to zrobić czysto i wydajnie? Czy jest jakaś inna tecnologia lub biblioteka, która to upraszcza? Nie muszę używać qt, jeśli jest coś lepszego.


title: Zrozumienie, jak działa kod, jest sposobem na „nauczenie się” programowania, prawda?

text: Mam przyjaciela, który zmaga się z nauką programowania (chce tworzyć gry; tak samo jak ja). Kilka książek, samouczków itp. Jego mentalność jest taka, że musi zapamiętać sam kod, tak jak w dokładnej składni programu. Uważam, że się myli i chodzi bardziej o zrozumienie, co robi kod i jak go zastosować gdzie indziej. Niestety, sam wciąż jestem w fazie uczenia się, więc niewiele mu pomogłem. Liczę na radę od bardziej doświadczonych programistów w tej sprawie. BTW, język, którego się uczymy, to C#, ponieważ jest kompatybilny z Microsoft XNA Framework.


title: Nauka C# i utknięcie w rutynie

text: Uczę się C#/.NET 4.0 od około 2/3 miesięcy, to mój pierwszy poważny język programowania (przyglądałem się wcześniej PHP, HTML, CSS, JavaScript i VBA, ale nigdy nie masowo) i jestem zaczynam trochę utknąć: * Osiągnąłem pułap w nauce z powodu braku "dużego" projektu... * Brak pracy nad złożonymi projektami budzi we mnie wątpliwości co do moich umiejętności... 2 tygodnie temu miałem rozmowa kwalifikacyjna na stanowisko Młodszego Programisty i udało mi się odpowiedzieć na większość pytań, na które odpowiedziałem, ale nadal nie dostałem pracy z powodu braku praktycznego doświadczenia, nie jestem pewien, co robić! Jak powiedziałem wcześniej, nie chciałbym przyczyniać się do projektu Open Source, ale nie wiem od czego zacząć, zakładam, że „duże” projekty chcą tylko dobrych koderów :( Czy istnieje jakakolwiek forma testu programowania online, który pokaż mi, jak „dobry” (lub „zły”) jestem w tej chwili? :) Dzięki za wszelką pomoc.


title: Co jest uważane za najlepszą praktykę dotyczącą korzystania z drukowania / pomocy (--help)?

text: Podczas pisania narzędzi dla CLI systemu UNIX, jak powinienem sprawić, by program wyświetlał pomoc i/lub użycie? Zwykle używam `fprintf(stderr, "tekst pomocy");`, ale jest z tym kilka problemów. * Po pierwsze, nie jestem pewien, czy powinienem używać `stderr`. Czy to OK, czy powinienem użyć `stdout`? * Jak możesz sobie wyobrazić, tekst pomocy jest dość długi, w zależności od tego, ile opcji ma narzędzie. Teraz zwykle umieszczam kilka `"takich ciągów\n"` w drugim parametrze. To jednak wypełnia mój kod źródłowy pięćdziesięcioma lub więcej linijkami tekstu pomocy. Wcale nie jest to łatwe do opanowania. Co powinienem zrobić zamiast tego? * Gdy narzędzie nie jest napisane w C lub języku podobnym do C, staram się używać here-docs tam, gdzie to możliwe (najbardziej w Perlu). Nie mogę tego użyć w C, ale czy jest coś takiego, czego mógłbym użyć? * Zastanawiałem się nad umieszczeniem go w `headerfile.h` wewnątrz `#define HELP "pomoc tekst tutaj"`, nigdy nie widziałem go na wolności, nie wiem, czy powinienem go używać. Idealnie mógłbym umieścić tekst w zewnętrznym pliku i dołączyć go. Jednak użycie `#include` wydaje się niewłaściwe. Więc co powinienem zrobić? Chodzi o to, aby tekst pomocy był łatwy w zarządzaniu. Posiadanie go w kodzie źródłowym nie jest zbyt wygodne.


title: Pokonywanie złożoności: cenne techniki

text: Techniki tworzenia oprogramowania istnieją w celu rozwiązywania problemów. Myślę, że kluczowym problemem, przed którym stoimy, jest pokonanie złożoności. Ponadto programiści muszą często klasyfikować i rozumieć złożone systemy, oddzielając przypadkową złożoność od podstawowej złożoności. Uważam, że na Wikipedii istnieją wystarczająco przydatne definicje tych terminów. Moje pytanie brzmi: jakie techniki są najbardziej wartościowe w pokonywaniu złożoności jako profesjonalny programista i/lub architekt oprogramowania? Przykładowa odpowiedź; wpis na blogu na temat pokonywania złożoności, który wydaje się pochodzić z perspektywy skoncentrowanej na java/c++/OOP.


title: Pytanie dotyczące projektu dziedziczenia/OO

text: Prawdopodobnie będzie to dość proste pytanie, ale najpierw wymaga trochę tła... Modeluję różne przełączniki sprzętowe, które można włączać i wyłączać. Przełączniki są konfigurowalne, co pozwala użytkownikowi określić wartości liczbowe, które są wysyłane do sprzętu, aby zasygnalizować, że powinien się włączyć lub wyłączyć. To jest klasa `Switch`:- public class Switch { public Id { get; ustawić; } public SwitchConfig Config { get; ustawić; } public void TurnOn() { WriteToSerialPort(Id, Config.OnValue); } public void TurnOff() { WriteToSerialPort(Id, Config.OffValue); } } public class SwitchConfig { public int OnValue { get; ustawić; } public int OffValue { get; ustawić; }     }      Na razie w porządku. Teraz muszę zamodelować nowy typ przełącznika, który może być nie tylko włączany i wyłączany, ale także może mieć ustawiony próg temperatury, więc wydaje się rozsądne dziedziczenie z klasy `Switch`. Konfiguracja będzie również wymagała rozszerzenia o minimalne/maksymalne dozwolone temperatury, np.:- public TemperatureSwitchConfig : SwitchConfig { public int MinTemperature { get; ustawić; } public int MaxTemperatura { get; ustawić; } } Wyspecjalizowana klasa przełącznika będzie wyglądać mniej więcej tak:- public TemperatureSwitch : Switch { public void SetTemperature(int temperature) { var temperatureSwitchConfig = Konfiguracja jako TemperatureSwitchConfig; if (temperatura < temperaturaKonfigWłącznika.MinTemperatura || temperatura > temperaturaKonfigWłącznika.MaxTemperatura) { powrót; } WriteToSerialPort(Id, temperatura); } } Nie wydaje się "właściwe" tam, gdzie muszę rzutować właściwość `Config`. Jestem pewien, że musi być jakieś sprytniejsze, OO rozwiązanie, ale myślę, że pojawił się „paraliż analityczny” i nie widzę drewna dla drzew! A może o nic się nie martwię - czy casting jest akceptowalnym rozwiązaniem w tym scenariuszu?


title: Czy „architekt” i „deweloper” są osobnymi rolami?

text: Czy rzeczywiście możliwe jest tworzenie oprogramowania bez jego projektowania?


title: Handel wymienny a gotówka w witrynie e-commerce sprzedawcy

text: Przygotowuję propozycję lokalnego sklepu zarówno stacjonarnego, jak i internetowego. To ekskluzywny sklep, który jest również jednym z ulubionych moich żon. Rozważam zaoferowanie części płatności barterowej. Mam w związku z tym dwa pytania: Jaki byłby rozsądny „kurs wymiany” za taką transakcję? Oznacza to, że zamiast 1000 dolarów w gotówce powinienem zapytać o kwotę kredytu w sklepie? **_Z własnego doświadczenia _** czy stosowanie barteru wprowadziło jakieś komplikacje w relacji z klientem? Czy są jakieś szczególne pułapki, którymi należy się martwić?


title: Role w zespole programistycznym za każdym razem bardziej podzielone

text: Zauważyłem, że role w zespole deweloperskim są za każdym razem bardziej podzielone. Pamiętam, że jakiś czas temu istniała mieszanka między programistami backendowymi i frontendowymi. Ale odkąd interfejsy API do odpoczynku stały się tak popularne, wydaje się, że tendencja jest bardziej związana z podziałami. Obecnie w moim przypadku mamy projektanta, który tworzy układ, html i css, programistę javascript, który traktuje tylko javascript, faceta od backendu Java i kogoś po stronie bazy danych. Wiem, że często to zależy od firmy, wciąż jest kilka firm, które mieszają role. Ale jest tendencja. Jak widzisz przyszłość programistów frontend i backend? Mając na uwadze mobile development, web development. Jak zostanie podzielony frontend i backend? bo kto wie o tych. Czy technologie takie jak: JSF i TAGLIB w Javie i inne podobne w różnych językach nie są sprzeczne z tą tendencją?


title: Zarządzanie UAT / Podnoszenie defektów i błędów

text: Szukam pomocy w ustaleniu najlepszego podejścia do zarządzania Testami Akceptacji Użytkownika (UAT) i tego, jak użytkownicy zgłaszają defekty/błędy - byłem w sytuacji, w której musiałem radzić sobie z każdym małym błędem jest zgłaszany jako błąd, który zajmuje cenny czas od faktycznego naprawiania błędów, podczas gdy ja przesiewam wiele nieprawidłowych defektów/błędów. Nie zrozum mnie źle, nie próbuję skracać użytkowników do zmiany, mówiąc „nie jest to wada”, ale próbuję usprawnić proces, aby wszystko zostało naprawione.


title: Jak ważne jest posprzątanie cudzego kodu w obliczu napiętego terminu?

text: (Mówię o kodzie HTML/CSS (nie o językach programowania), ale myślę, że mamy też ten sam problem, co z programistami.) Jestem starszym projektantem front-end w zespole i często muszę przerabiać moich juniorów ' produkcji w napiętych terminach. Mam do czynienia z 2 problemami: 1. Ich styl kodowania to trochę bałagan. 2. Estetyka nie jest dobra. Uważam, że ich styl kodowania jest mieszaną torbą bez odpowiedniej konwencji / standardu. Jestem rozdarty między czyszczeniem kodu a po prostu zajmowaniem się ich kodem (nawet kopiowaniem tego, jak robią rzeczy). Uważam, że podążanie za ich stylem kodowania jest frustrujące, ponieważ czuję, że mogę nauczyć się złych nawyków. Ale to najszybszy sposób na dotrzymanie terminu. Dla osób z dużo większym doświadczeniem, co jest bardziej efektywne? Czy powinienem zachować sprzątanie na później? Albo posprzątać po drodze, gdy wprowadzam zmiany? (Nie chcę jednak brzmieć arogancko, ale taka jest rzeczywistość. Napisanie lepszego kodu zajmie im więcej lat. Wiem, pisałem niechlujny kod, kiedy zaczynałem.)


title: Jak dołączyć niepełny program studiów matematycznych do wznowienia programowania na poziomie podstawowym?

text: Tworzę CV, abym mógł zacząć aplikować na podstawowe stanowiska programistyczne. Jak mogę uwzględnić czas spędzony jako absolwent czystej matematyki, skoro nie ukończyłem studiów i nie jestem obecnie zapisany? Czy powinienem spróbować to uwzględnić? Otrzymałem sprzeczne rady w tej sprawie. Poza tym bez tych informacji mam ogromną lukę w skończeniu mojego BS i dzisiaj. O mnie: Mam licencjat z matematyki i informatyki. Jako student bardziej zainteresowałem się czystą matematyką niż informatyką. Po ukończeniu studiów zostałem absolwentem matematyki. Jednak zostałem zmuszony do odejścia głównie ze względu na to, że uniwersytet ograniczył moją pozycję w GA z powodu braku funduszy (pochodzę z Illinois). Od zakończenia studiów minęły prawie trzy lata. Od tego czasu skakałem trochę w pracy bez wyjścia, próbując wymyślić, jaka kariera będzie dla mnie najbardziej odpowiednia. Studiowałem aktuariusza, próbowałem stworzyć start-up internetowy i spędziłem czas próbując dowiedzieć się, jak mogę zostać inżynierem przemysłowym.


title: Co to za styl programowania? „Monoidalny”?

text: W dość starym poście na blogu Conal Elliot przedstawia interesujący (choć mniej niż poważny) argument, że C jest językiem czysto funkcjonalnym, kreśląc paralelę między kombinacją preprocesora C i samego C, a kombinacją czystego języka wyrażeń Haskella i jego nieczyste wartości działań IO. W dalszej części zaobserwowano, że separacja faz między składnikami C faktycznie sprawia, że to, co robi `cpp`, jest zupełnie inne niż Haskell, więc `cpp+C` nie jest w końcu monadyczny. W prawdziwych projektach programistycznych programiści C wolą zminimalizować użycie `cpp` tak bardzo, jak to możliwe. Język makro może być zdolny do niesamowitych rzeczy, ale jest to dość wrogie środowisko programistyczne. O ile wiem, ta koncepcja jest w większości niezbadana z perspektywy C. Jednakże, opierając się na przykładzie C, moglibyśmy wyobrazić sobie język, w którym podstawowym sposobem programowania przez programistę jest napisanie czysto funkcjonalnego programu, który _buduje ustaloną sekwencję_ wartości akcji i łączy je razem w gotowy program. Różni się od modelu Haskella tym, że program funkcjonalny istnieje tylko w „czasie kompilacji”, z wyraźnym rozdziałem między dwoma etapami oceny i wykonania; różni się od modelu C (lub Lispa) głównie w nacisku na etap "makro" jako _podstawowe_ narzędzie programistyczne (i z etapem makr, który nie jest... no wiesz, okropny - raczej wygląda i działa jak pełny -fledged) z programem końcowym składającym się z ustalonej sekwencji bloków budulcowych „działania”, których autorzy bezpośrednio zniechęcają (lub nawet uniemożliwiają) autorom. * Czy ten paradygmat programowania istnieje? Jeśli tak, jak się nazywa i jakie są jego przykłady? Czy jest jakaś literatura na ten temat? ("Metaprogramowanie" jest oczywistą odpowiedzią, ale wydaje się to zbyt szerokie i niecelowe: szablony `cpp` lub C++, ponieważ są obecnie lekko używane, również należą do tej kategorii, podczas gdy Haskell IO nie.)


title: Czy istnieje dojrzała, łatwa w użyciu struktura CQRS, która nie jest specyficzna dla platformy Azure, nie jest przestarzała lub nie jest dobrze przyjęta?

text: Prowadziłem badania nad implementacjami .net z CQRS. Albo wszystko, co do tej pory widziałem, jest zrób to sam, charakterystyczne dla błękitu, przestarzałe (chyba) lub nie jest dobrze przyjęte Problemy: * Scratchy - nie jest dobrze przyjęty * NCQRS - wydaje się być nieco starszy? wymaga to również konfiguracji typu „zrób to sam” - co oznacza, że musisz sam stworzyć kilka projektów (choć nie wszystko jest takie straszne). * https://github.com/gregoryyoung/m-r \- bardziej teoretyczne demo niż produkcyjny framework * LOKAD.CQRS - głównie specyficzne dla błękitu * https://github.com/MarkNijhof/Fohjin \- znowu, więcej demo niż framework Pracuję nad nowym projektem. Będzie hostowany w AppHarbor. Chciałbym zastosować podejście CQRS. Wolałbym używać niesamowitego frameworka, niż sam go pisać/kopiować.


title: Inżynier rozwoju oprogramowania firmy Microsoft na stanowisku testowym

text: Ciekawiło mnie stanowisko Inżyniera Rozwoju Oprogramowania MS na stanowisku Test (SDET). Słyszałem, że wiele osób mówi negatywnie i pozytywnie o tym stanowisku. Zastanawiałem się, czy jakikolwiek obecny lub poprzedni SDET mógłby skomentować kilka kwestii. 1) Czy ta pozycja w SM i poza SM jest w jakikolwiek sposób szkodliwa dla rozwoju kariery? 1.5) Czy po byciu SDET trudniej jest zostać zatrudnionym jako programista w innej firmie? 2) W kulturze SM, jak postrzegane jest stanowisko SDET w odniesieniu do PM lub SDE? Czy jest szanowany czy pogardzany? 3) Jeśli pracowałeś jako SDET, czy Ci się podobało?


title: Czy powinienem dodawać notatki MSDN lub łącza Stack Overflow do kodu źródłowego?

text: > **Możliwy duplikat:** > Czy można umieszczać łącze do witryn z pytaniami i odpowiedziami w komentarzach do programu? Tworzę host powershell / C# i chcę dodać następujący komentarz // Ta metoda nie może być wielokrotnie wywoływana w danym potoku. Stan // potoku musi być NotStarted po wywołaniu Invoke. Wywołanie tej metody powoduje // zmianę stanu potoku na Uruchomiony. // zobacz http://msdn.microsoft.com/en-us/library/windows/desktop/ms569128(v=vs.85).aspx if (pipeline.PipelineStateInfo.State == PipelineState.NotStarted) { Collection<PSObject > wyniki = potok.Invoke(); } Czy to odpowiedni komentarz? Co byś w tym ulepszył?


title: Poza polimorfizmem, co jest przekonującego w OOP?

text: Kiedy po raz pierwszy doszedłem do OOP (najpierw w Javie, a potem w C++) po latach pracy w C i VB, było to niesamowite. Pomysł rozszerzenia istniejącego zachowania i działania w sposób ogólny na rzeczach pokrewnych typów był bardzo pociągający i prawie od razu zrozumiałem, dlaczego tego chciałem. Oznacza to, że moją motywacją do OOP było podtypowanie polimorfizmu i dziedziczenia. Przewiń do przodu i regularnie korzystam z rozwiązań polimorfizmu ad-hoc (typeclass i kaczki), które rozwiązują problemy, które pierwotnie podobały mi się w podtypach, w bardzo elegancki sposób. W większości moich środowisk mam dostęp do polimorfizmu parametrycznego. Programowanie ogólnie z tymi różnymi rodzajami polimorfizmu daje mi całą rozszerzalność i dziedziczenie wielokrotnego użytku, a nawet więcej. Więc moje pytanie brzmi: dlaczego powinienem nadal dbać o OOP? Jakie zastosowania OOP są naprawdę świetne poza dziedziczeniem i podtypowaniem? Nie liczy się również „ponieważ jest popularny i będziesz musiał z niego skorzystać”. Jestem już dość dobrze zaznajomiony z OOP i używam go w mojej codziennej pracy, ponieważ używa go baza kodu. Dla nowego projektu lub dla siebie, o to właśnie pytam.


title: Aktualizacja w tworzeniu stron internetowych w języku Java

text: Jestem web developerem Java od prawie 3 lat. Zawsze staram się uczyć więcej i być lepszym, ale wciąż czuję, że ilość wiedzy nie jest tak dobra, jak bym chciał. Wiedza w niektórych miejscach nadal wydaje się nieusystematyzowana i nie daje bardzo mocnej podstawy do rozwiązywania problemów tak dobrze, jak ja tego chcę. Przykładem jest mój starszy programista, którego rozwiązania są zawsze wydajniejsze i piękniejsze. Tak więc pytanie jest jednocześnie dość proste i trudne. Jaki jest właściwy sposób zdobywania wiedzy, być bardziej systematycznym, a tym samym poprawiać jej jakość. Rozumiem, że nie ma praktycznie dobrej odpowiedzi na całe programowanie java, więc skupmy się na nowoczesnych technologiach internetowych java lub prawie webowych: 1. JSF 2.0 2. JPA2 i Hibernate jako dostawca trwałości 3. Usługi sieciowe 4. i Java SE jako rdzeń. Jakie metodologie, książki lub techniki uczenia się prowadzą do silnej bazy wiedzy w danym obszarze wiedzy?


title: WinRT: Jak będzie użyteczny?

text: WinRT: czy naprawdę chodzi o wywołanie WIN32 (opakowanego w COM (ujawnionego jako .NET)) przez _zastrzeżone rozszerzenie_ C++? To wygląda na wiele otoczek i warstw między programistą a rzeczywistą funkcjonalnością. Czy ktoś, kto próbuje się z tym pogodzić, ma szansę na dogłębne zrozumienie ekosystemu (jeśli jego nazwisko nie brzmi „Petzold”)?


title: Dlaczego niektóre witryny zapobiegają spacji w hasłach?

text: Wydaje się to mniej powszechne w przypadku nowszych stron internetowych, ale wiele stron, na których potrzebuję konta (np. do płacenia rachunków itp.), uniemożliwia mi utworzenie hasła ze spacjami. To tylko sprawia, że trudno jest zapamiętać, i nie jestem świadomy żadnych ograniczeń bazy danych lub programowania dotyczących spacji w hasłach, zaszyfrowanych lub (niech Bóg broni) w inny sposób. Dlaczego więc spacja jest tak powszechnie dyskryminowana, jeśli chodzi o rejestrację w witrynie?


title: Kod do symulacji działań użytkownika, takich jak logowanie

text: Niedawno rozpocząłem pracę nad aplikacją PHP, zastępując innego programistę. Wierzyłem, że aplikacja używa interfejsu API do komunikacji ze zdalną usługą, ale kiedy przejrzałem kod, stwierdziłem, że używa zestawu funkcji do logowania, wypełniania formularzy i przesyłania ich tak, jak użytkownik może to zrobić w przeglądarce . Moim zamiarem jest zastąpienie tego kodu, aby zamiast tego korzystać z API usług. Rozważałem pozostawienie kodu bez zmian i nie zastępowanie go. Zastanawiam się jednak, czy jest to powszechna praktyka w branży oprogramowania? Aby program symulował działania użytkownika w przeglądarce, aby wykonać zestaw działań? Wydaje mi się, że to sprytne, ale słabe programowanie. Czy widzieli to jacyś inni programiści? Edycja: przepraszam, powinienem był dodać to w pierwszej kolejności, kod, który opisuję, nie jest częścią zestawu testowego, jego kodu na żywo.


title: Porady dla ambitnego studenta na temat budowania własnego jądra

text: Jestem bardzo ambitnym studentem, który chce dowiedzieć się praktycznie wszystkiego o komputerach (zwal mnie, jeśli chcesz, uwielbiam się uczyć). Ostatnio pomyślałem, że to będzie fajny projekt (choć długi) zaprojektowanie i zbudowanie własnego jądra. Mam kilka podstawowych informacji i dowiedziałem się, że muszę opanować assembler i C/C++, aby to naprawdę zadziałało. Podczas pracy nad nimi chciałbym się dowiedzieć, JAK jądro faktycznie działa z perspektywy programowania. Spędziłem godziny na przeglądaniu kodu jądra Linuksa, ale to może zabrać cię tylko do tej pory. Jakie są podstawowe kroki w budowaniu jądra? Rzeczy, którymi musisz się zająć? Zamawiać czy robić rzeczy? Wiem, że dużo odgryzam, ale jestem wystarczająco zdeterminowany, by sobie z tym poradzić.


title: Jakie funkcje zawiera WebStorm, których nie posiada RubyMine?

text: Patrzę na kupno Rubymine, ponieważ robię małą ilość ruby, ale dużą ilość html5/javascript. Miałem zamiar zdobyć Webstorm, ponieważ mam wiele czystych frameworków/aplikacji opartych na html5/js, nad którymi pracuję, jednak potem przeczytałem, że WebStorm/PhpStorm/Rubymine itp. są oparte na ich frameworku IDEA i są wykonane w taki sposób każdy framework i tak zawierał funkcjonalność WebStorma, poza kilkoma funkcjami, które nie były dostępne po wyjęciu z pudełka, ale można je było dodać za pomocą wtyczek. Główne cechy, które mnie interesują w WebStorm to: * Testowanie jednostkowe JS z IDE * Pokrycie JS Lint/Hint w interfejsie użytkownika * Refaktoryzacja DOM/JS/Intellisense * Obsługa Coffeescript * Integracja SVN/Git * FTP i synchronizacja zdalna (choć nie tak ważne jak reszta) Więc biorąc pod uwagę powyższe, czy Rubymine zapewni również powyższą funkcjonalność? ponieważ wolałbym mieć 1 IDE, w którym mogę robić oba, niż mieć 2 IDE, które mają wiele nakładających się funkcji. Czy jest jakaś konkretna funkcja, która jest dostępna TYLKO w Webstorm, ale nie jest dostępna w żadnym innym środowisku IDE?


title: Zwróć typy z interfejsów usług w warstwie usług: Mapper jest wymagany dla obiektów warstwy interfejsu użytkownika?

text: Projektuję system oparty na komponentach przy użyciu JSF2 na szczycie kontenera IoC Springa. Jest to zastosowanie warstwy usług między kontrolerem a warstwą domeny/biznesu (przypuszczam, że kontroler to nic innego jak powiązanie JSF Servlet w pliku web.xml). Uzasadnieniem dla warstwy usługowej (która jest zgodna z interfejsem dla każdej usługi) jest umożliwienie zmiany usług. Przyszło mi do głowy, że typy obiektów zwracanych z obiektów warstwy usług prawdopodobnie będą obiektami biznesowymi z warstwy biznesowej, które następnie zostaną użyte w komponentach bean wspierających widok JSF do zapełnienia komponentów interfejsu użytkownika na stronach. _Pomysły:_ * Czy standardową praktyką dla tych warstw biznesowych jest akceptacja obiektu Customer() wracającego z usługi FindCustomerService w celu przekazania go z powrotem do zapasowego komponentu warstwy prezentacji? Czy warstwa prezentacji może wiedzieć o obiektach biznesowych, czy też nie są one częścią usługi/zdefiniowane do użytku w interfejsie usługi, a zatem są częścią umowy na wdrożenie usługi? * Alternatywnie, czy powinienem pomyśleć o reprezentowaniu komponentów w interfejsie użytkownika przy użyciu ogólnego zestawu klas interfejsu użytkownika w ramach fasoli, które są następnie mapowane na typy zwracane z warstwy usług w innej warstwie między kontrolerem a warstwą usługi? (Prawdopodobnie wymagałoby to przeprojektowania, gdyby usługa została zmieniona?) * Być może standardową praktyką jest zwracanie za pomocą skalarów języka standardowego i czasów powrotu obiektów z warstwy usługi, aby uniknąć konieczności stosowania warstwy tłumaczenia? Pierwszy projekt SOA. Pomyślałem, że byłoby to miłe pytanie do archiwum, a linki do odpowiednich wzorców byłyby bardzo mile widziane.


title: Kiedy używasz nowej technologii i skomplikowanych zasad projektowania w aplikacji LOB (przy użyciu WPF)?

text: Buduję aplikację LOB dla bardzo dużego i poważnego klienta, sama aplikacja nie jest duża, ale mój klient jest, więc muszę to zrobić dobrze. Ogólnie kusi mnie, aby zawsze korzystać z najnowszych rzeczy i uczyć się na bieżąco, czasami kończy się to dobrą produktywnością. Podobnie jak wtedy, gdy pisałem większość z usługami danych WCF przez usługi asmx, a następnie używałem Silverlight przez ajax/asp.net, okazały się to dobre decyzje, chociaż początkowy ból był początkowy. W szczególności myślę o użyciu WPF zamiast formularzy wygranych, nigdy nie używałem WPF, ale czy krzywa uczenia się przeważy korzyści? Czy generalnie byłoby to złym posunięciem, gdy jesteśmy bardzo napięci na czas? **Drugi:** Jeśli chodzi o zasady projektowania, jak np. **przykład** przy użyciu MVVM w moim przypadku. Czy to znowu byłoby przesadą dla małej aplikacji? (4000 wierszy jako złe oszacowanie?) Na pewno mój kod nie będzie testowalny, ale czy potrzebowałbym nawet tak małej aplikacji, aby była testowalna? Ogólnie staram się, aby mój kod bazowy był schludny, a warstwa interfejsu użytkownika była cienka. **Moje pytanie:** Generalnie chcę wiedzieć, jak wielu poważnych deweloperów/małych firm przechodzi na nowsze technologie lub wzorce projektowe hard core, praktyki, frameworki (Prism, CAB) lub modele (MVVM) dla mniejsze aplikacje? Jak wywołać >> złożoność + krzywa uczenia się _vs_ korzyści **Edytuj** * * * 1. Mam około 1-2 miesięcy, dużo kodu podstawowego i prawie całe planowanie i projektowanie jest już gotowe. 2. Naliczam stałą opłatę, która jest do bani, ale zaczynają mieć kilka planów, aby zbudować więcej funkcji na górze. 3. Ja (jedyny programista) będę go utrzymywać. 4. Częściowo chcę wybrać WPF, aby zapewnić również lepszy, bardziej profesjonalny wygląd, aby kupili ode mnie więcej aktualizacji/ulepszeń funkcjonalności. 5. Właściwie próbowałem napisać własny szalony framework MVC w formularzach win, był bałagan, mam „przeczucie”, że mój kod będzie lepszy w WPF? 6. Jakieś przemyślenia na temat korzystania z MVVM Light?


title: Czy programowanie w parach zamienia się kiedykolwiek w długą bezproduktywną dyskusję?

text: Właśnie myślałem o programowaniu w parach i wpadła mi do głowy jedna myśl, że na pewno kiedyś dwóch programistów nie będzie się zgadzać i przerodzi się to w długą (może gorąca) dyskusję na temat implementacji paradygmatu lub algorytmu itp. Spodziewam się, że mogą to być „religijne” wojny o rzeczy? Czy tak się dzieje? Ponieważ nigdy nie „zaprogramowano pary”, czy to coś, co się dzieje? Czy istnieją procesy, aby zatrzymać długie dyskusje?


title: MVC: modele w pełni wypełnione czy modele częściowo wypełnione?

text: Ten od tak dawna mnie prześladował. Kiedy robisz programowanie MVC, jak myślisz, co jest lepszą praktyką programistyczną? Czy należy używać modeli w pełni wypełnionych, czy częściowo wypełnionych, zwłaszcza gdy wiem, że do tego konkretnego zadania będę potrzebować tylko 2 pól z obiektu modelu, który ma 5 innych? Czasami wydaje się, że wypełnianie listy 20 obiektów modelowych wszystkimi wartościami z bazy danych, gdy wiesz, że będziesz potrzebować tylko kilku z nich, wydaje się przestępstwem. Oczywiście model częściowy oznacza, że będziesz musiał napisać jeszcze jedną metodę w swoim DAO oprócz tej, która pobiera wszystko. Co oznacza więcej kodu do utrzymania? Z drugiej strony ciągnięcie wszystkiego z DB z w pełni zapełnionymi modelami oznacza, że jedna metoda służy wszystkim, ale to oczywiście zapewni trochę narzutu wydajności. Widzę, że ORM (takie jak Hibernate lub ActiveRecord of Rails) faworyzuje trendy w programowaniu MVC i bazach danych, takich jak pełne modele Google BigTable, jest akceptowanym trendem. Ale co, jeśli nadal używasz starego dobrego JDBC? Sprzęt jest tani, rozwój jest kosztowny. Czy to prawda, nawet jeśli aplikacja musi skalować się do kilkuset tysięcy żądań na godzinę?


title: Dziedziczenie z samych obiektów

text: Tworzenie nowej hierarchii dziedziczenia za pomocą C++ Zastanawiam się nad: > Dlaczego nie ma dziedziczenia po obiektach klas? Abstrakcyjny przykład (z > abstract C++): > > > struct Foo { int v; Foo(int a): v(a) {} }; > struct Buz : public Foo(2) { ... } > > > Tak więc `Buz` jest dziedziczony tylko z instancji `Foo` \- `Foo(2)`. Czy taki pomysł może się przydać? Czy są jakieś możliwe wdrożenia lub powiązane pomysły?


title: Czy programowanie zorientowane na język jest praktyczne?

text: Przeczytałem ten artykuł na temat programowania zorientowanego na język. Wskazuje on pewne słabości w nowoczesnych podejściach proceduralnych/OOP do programowania i proponuje nowy paradygmat programowania, który je rozwiąże. których użyjesz, niż kilka dużych rzeczy, których używasz tylko w kawałkach. Czytając artykuł, odniosłem wrażenie, że autor promował jedną z dwóch rzeczy: * Mnogość łatwo tworzonych języków skryptowych * Pojedynczy, łatwo rozszerzalny język, który może się sam przepisać, aby zaspokoić potrzeby programisty. Jeśli sugeruje drugą, ja odpowiedziałby "Już zrobione!" i podaj Lisp jako przykład. Jak sugeruje Paul Graham, języki wydają się i tak nieustannie zmierzać w tym kierunku. Jeśli chodzi o pierwszy, myślę, że to dobry pomysł, jeśli istnieje ukryty język, który łączy je wszystkie razem. Wydaje mi się, że jest to słaby punkt: komunikacja między językami. Czy użyłbyś połączeń, które są koncepcją proceduralną lub przekazywania komunikatów, co przypomina mi komunikację międzyprocesową? Z radością przyjmę możliwość pracy z małymi językami specyficznymi dla domeny, jeśli łatwo jest używać ich wszystkich jednocześnie. Czy takie podejście (LOP) byłoby praktyczne?


title: Równoległa hierarchia klas/interfejsów z wzorcem projektowania elewacji?

text: Około jedna trzecia mojego kodu jest opakowana w klasę Facade. Zauważ, że nie jest to klasa „Bóg”, ale w rzeczywistości reprezentuje jedną rzecz (zwaną `Linią`). Oczywiście deleguje odpowiedzialność na stojący za nim podsystem. W efekcie dwie klasy podsystemów (`Output` i `Timeline`) mają wszystkie swoje metody zduplikowane w klasie `Line`, co w efekcie sprawia, że `Line` jest zarówno `Output`, jak i `Timeline`. Wydaje się sensowne stworzenie interfejsów `Output` i `Timeline`, tak aby klasa `Line` mogła zaimplementować je oba. Jednocześnie obawiam się tworzenia równoległych struktur klas i interfejsów. Widzisz, istnieją różne typy linii `AudioLine`, `VideoLine`, które używają tego samego typu `Timeline`, ale różnych typów `Output` (odpowiednio `AudioOutput` i `VideoOutput`). Oznaczałoby to, że musiałbym również utworzyć interfejsy `AudioOutputInterface` i `VideoOutputInterface`. Więc nie tylko musiałbym mieć równoległą hierarchię klas, ale byłaby też równoległa hierarchia interfejsów. Czy jest jakieś rozwiązanie tej wady konstrukcyjnej? Oto obraz podstawowej struktury (bez klasy Timeline, ale wiedz, że każda linia ma oś czasu): ![wprowadź tutaj opis obrazu](http://i.stack.imgur.com/JEwCv.png) UWAGA: Właśnie zdałem sobie sprawę, że słowo 'line' w 'Timeline' może brzmieć tak, jakby is pełniło podobną funkcję jak klasa 'Line'. Nie, tylko dla wyjaśnienia.


title: Jak testujesz jednostkowo interfejs użytkownika?

text: Używam JavaScript z JQuery dla aplikacji Rails. Mam w tym pewne dynamiczne zachowanie. Jako programista Ruby lubię TDD/BDD, szczególnie z RSpec. Na razie ręcznie testuję swój JavaScript. To nie jest najlepszy sposób, ponieważ zmiana gdzieś może złamać kod gdzie indziej. Korzystanie z TDD ma wiele zalet. Testowanie w javascript wydaje się być skomplikowane, ponieważ powinno testować dużo interakcji z użytkownikiem. Mogę przetestować zachowanie w pełnej integracji, na przykład z Capybara, ale moje testy będą bardzo powolne. Na przykład mam formularz z zachowaniem dynamicznym. W tym formularzu mam 5 lub 6 pól dynamicznych, które zmieniają się, gdy wybieram opcję, wybieram przycisk opcji lub zaznaczam checkbox. W niektórych przypadkach są wywołania ajax. Dla tego formularza myślę, że mogę zrobić około 20 testów tylko dla formularza. Czy naprawdę przydatne są te testy? Więc jakie są twoje zasady dla standardowej aplikacji internetowej?


title: Jakie jest właściwe podejście Subversion podczas korzystania z DLL

text: **Tło:** Nasz zespół opracowuje rozwiązanie i zawiera szereg projektów. Większość projektów jest budowana jako biblioteki DLL, a te biblioteki DLL są używane przez pozostałe projekty. Obecnie używamy Subversion do zarządzania kodem i proszę innych o usunięcie bibliotek DLL z Subversion, ponieważ nie musimy przechowywać historii bibliotek DLL. Dlatego proszę mój zespół, aby każdego ranka aktualizował swoje źródła z Subversion i kompilował każdy projekt, aby uzyskać DLL z wczorajszymi zmianami. **Problem:** Ta procedura była bardzo dobra na początku projektu. ale teraz każdy projekt rozwiązania staje się coraz większy. Dostaje też więcej czasu na kompilację. teraz każdy programista marnuje około 20 minut każdego ranka na kompilację rozwiązania na swoim lokalnym komputerze. Teraz znowu myślę o poproszeniu każdego programisty o przesłanie swoich zbudowanych bibliotek DLL do Subversion pod koniec dnia, a następnego ranka pozostali użytkownicy będą mogli pobrać te DLLe bezpośrednio z Subversion. Ale czuję, że coś jest nie tak z tą procedurą. Ponieważ Subversion marnuje miejsce na przechowywanie historii wszystkich bibliotek DLL. Teraz szukam lepszego rozwiązania. Czy macie jakiś pomysł na swoje doświadczenie?


title: Automatyczne generowanie kodu: "praca pochodna"?

text: Na przykład mam oprogramowanie na licencji GPL. Jestem autorem tego oprogramowania na licencji GPL. To oprogramowanie na licencji GPL zawiera między swoim kodem komentarze Doxygen. Te komentarze Doxygen są napisane w celu wygenerowania strony html CC-BY-SA, aby przesłać wygenerowaną dokumentację na moją stronę internetową projektu na licencji CC-BY-SA. Ale wynik dokumentacji Doxygena jest "dziełem pochodnym"? W końcu ta dokumentacja jest oparta na moim kodzie źródłowym GPL. W takim przypadku dokumentacja musi być na licencji GPL. Ale chcę, żeby dokumentacja była CC-BY-SA, ponieważ jest dokumentacją. GFDL nie pomaga. Kod GPL nie może stać się GFDL (odwrotnie tak). Jeśli ten wynik jest rzeczywiście dziełem pochodnym, myślę, że stwarza to dziwną sytuację, ponieważ jeśli rozpowszechniam moją pracę, użytkownicy-odbiorcy nie mogą legalnie rozpowszechniać wygenerowanej dokumentacji: podczas gdy z moją pracą mogę zrobić, co chcę, użytkownicy nie W związku z tym muszą rozpowszechniać wszelkie prace pochodne na tej samej licencji, którą im oferuję. Jakie jest rozwiązanie?


title: Dlaczego sekcja kodu nazywana jest sekcją tekstową?

text: Sekcja pliku wykonywalnego zawierająca kod jest czasami nazywana sekcją `.text`. W architekturach pamięci segmentowej segment mapowany jako kod jest czasami nazywany segmentem tekstowym. Uniksowy komunikat o błędzie „plik tekstowy zajęty” (`ETXTBSY`) oznacza, że „ten plik jest programem, który jest wykonywany”. W jaki sposób _tekst_ zaczął oznaczać _kod wykonywalny (maszynowy)_? Idealną odpowiedzią byłoby: wyjaśnić związek między słowem a jego znaczeniem; podać źródło pochodzenia lub przynajmniej historię terminu; podaj pewne wyobrażenie o społecznościach, które z niego korzystają.


title: Jak skutecznie nawiązać sieć kontaktów, aby znaleźć pracę

text: Obecnie pracuję od 5 lat w tej samej firmie. Chcę iść i znaleźć nową pracę. Znalezienie pracy lub uzyskanie rozmów kwalifikacyjnych było trudne, jest ich bardzo mało. A żeby pogłębić problem, do pracy potrzebuję pozwolenia na pracę (H1b). Moje pytanie brzmi, jak współpracować z innymi programistami i zwiększyć moje szanse na znalezienie pracy/rozmowy kwalifikacyjnej. A po drugie jak zwiększyć moją sieć?? Dziękuję


title: NP twardy/kompletny

text: Nigdy nie wyraziłem jasno tej koncepcji. Proszę o pomoc: pod koniec dnia powinniśmy chcieć zidentyfikować przydatne problemy, dla których do tej pory nie mamy rozwiązania wielomianowego, a mamy tylko rozwiązania wykładnicze. Chcemy nadal szukać, czy możemy znaleźć rozwiązanie wielomianowe dla tych problemów i zastosowanie redukcji ma na celu jedynie zidentyfikowanie nowych, tylko wykładniczych, rozwiązywalnych problemów za pomocą istniejących znanych problemów wykładniczych. Dlaczego koncepcja determinizmu i niedeterminizmu została wciągnięta do całej tej koncepcji problemów rozwiązywalnych wykładniczo i wielomianowo? Jak przydatne jest to pojęcie? Jak nazywamy problemy, dla których do tej pory mamy tylko wykładnicze rozwiązanie, ale nie udało nam się znaleźć redukcji do znanego NP - problemy twarde/całkowite..?? Dziękuję,


title: Dlaczego warto używać Scali zamiast Javy

text: Całkowicie interesuję się Scala jako językiem ... i nadal zmagam się z tym, dlaczego jakakolwiek firma powinna przejść z Javy na Scala. Czy Scala jest tylko cukrem składniowym na górze JVM, czy też istnieją fundamentalne ulepszenia w Scali w stosunku do Javy, które poprawiłyby aplikacje w świecie rzeczywistym?


title: Deklaratywny UML

text: Szukam czegoś na wzór WebSequenceDiagram dla innych typów diagramów UML - w szczególności przypadków użycia i diagramów klas. Na przykład usługa zaakceptowałaby wprowadzanie zwykłego tekstu, takie jak: user = Actor(); administrator = aktor(); rejestr = PrzypadekUżycia(użytkownik); post = PrzypadekUżycia(użytkownik, administrator); post_poll = UseCase(użytkownik, administrator).extend(post); ... i uzyskaj odpowiedni obraz, nie martwiąc się o układanie wyniku.


title: Zachowanie obiektu czy oddzielna klasa?

text: Jeśli chodzi o dostęp do bazy danych OO, widzisz dwa popularne podejścia - pierwsze to dostarczenie klasy (powiedzmy "Klient") z metodami takimi jak Retrieve(), Update(), Delete() itp. Drugim jest zachowanie Klasa klienta dość lekka (w zasadzie tylko właściwości) i wykonuje dostęp do bazy danych gdzie indziej, np. za pomocą repozytorium. Ten wybór podejść nie dotyczy tylko dostępu do bazy danych, może pojawić się w wielu różnych scenariuszach OOD. Zastanawiałem się więc, czy jeden sposób jest lepszy od drugiego (chociaż podejrzewam, że odpowiedź będzie brzmiała „to zależy”)! Inny twórca z naszego zespołu twierdzi, że aby być naprawdę OO, klasa powinna być „samodzielna”, tj. zapewniać wszystkie metody niezbędne do manipulowania i interakcji z tym obiektem. Osobiście wolę podejście oparte na repozytorium - nie lubię nadużywać klasy Customer całą tą funkcjonalnością i czuję, że powoduje to czystszy kod mający go gdzie indziej, ale nie mogę przestać myśleć, że poważnie naruszam podstawowe koncepcje OO! A co z implikacjami pamięciowymi? Jeśli pobiorę tysiące obiektów Customer, zakładam, że te z metodami dostępu do danych zajmą znacznie więcej pamięci niż obiekty zawierające tylko właściwości?


title: Pod jaką licencją wydawany jest HTML?

text: Wygląda na to, że wszystkie produkty są wydawane z licencją, jestem ciekaw, jak postąpić w poszukiwaniu licencji na technologie takie jak HTML, CSS i JavaScript?


title: Enkapsulacja w modelach Domain Driven Design?

text: Używam EF Code First i miałem model jak poniżej. public class Konto { [Wymagane] public string AccountNo { get; ustawić; } [Wymagane] publiczne saldo dziesiętne { get; ustawić; } } Użyłem klasy Service do wypłaty i wpłaty kwoty na Konto. Potem natknąłem się na to i zdałem sobie sprawę, że konto jest anemiczne. Z radością dodałem więc metody wypłat i wpłat do konta. public class Konto { [Wymagane] public string AccountNo { get; ustawić; } [Wymagane] publiczne saldo dziesiętne { get; ustawić; } public void Wypłata(kwota dziesiętna) { // DO ZROBIENIA: Sprawdź, czy dostępne jest wystarczające saldo Saldo -= kwota; } public void Kaucja(kwota dziesiętna) { Saldo += kwota; } } Byłem z tego bardzo zadowolony, dopóki nie zdałem sobie sprawy, że to nie implementuje poprawnie enkapsulacji. Nie powinieneś mieć możliwości bezpośredniej modyfikacji salda - powinieneś skorzystać z metod Wypłata i Depozyt. Ale w moim rozwiązaniu możesz bezpośrednio zmodyfikować wagę. Ale nie mogę uczynić Balance właściwością tylko do odczytu, ponieważ używam pierwszego podejścia do kodu EF, a właściwości tylko do odczytu nie spowodują utworzenia kolumny w tabeli bazy danych. Pomyślałem o pozostawieniu konta jako anemicznego i stworzeniu klasy Account wyższego poziomu, która implementuje metody enkapsulacji i Withdraw/Deposit. Ale w takim przypadku klasa wyższego poziomu nie miałaby adnotacji danych walidacyjnych i nie otrzymam darmowej funkcjonalności zapewnianej przez framework. Jakie jest rozwiązanie?