title: decydująca różnica między LGPL a AGPL

text: Jaka jest decydująca różnica między LGPL(v3) a AGPL(v3)? Oba mogą być używane w produkcji komercyjnej, oba mogą być również pakowane w płatny produkt. Dopóki nie zmienię ich kodu źródłowego, nie jestem zmuszony do dołączenia kodu źródłowego do mojego produktu. Więc gdzie leży najważniejsza różnica? (Zapytałem o to również na http://stackoverflow.com/questions/10996160/the-decisive-diference-between-lgpl-and-agpl, ale użytkownik zasugerował, aby zapytać o to tutaj.)


title: Jak zorganizować ćwiczenie z programowania?

text: W związku z moimi słabymi wynikami na poprzednich rozmowach kwalifikacyjnych, postanowiłem wykonywać codzienne ćwiczenia programistyczne z mojej pracy. Obecnie koncentruję się na algorytmach, wzorcach projektowych i testowaniu jednostkowym na platformie języka C++. Ale chciałbym zachować równowagę w ważniejszych obszarach. Więc jeśli mogę, chciałbym wiedzieć, jak inni programiści organizują swoje ćwiczenia programistyczne.


title: Ryzyko związane z przekazaniem certyfikatu dystrybucji/klucza prywatnego/profilu udostępniania freelancerowi

text: Czy istnieje jakiekolwiek ryzyko związane z przyznawaniem certyfikatu dystrybucji/klucza prywatnego/profilu udostępniania freelancerowi? Freelancer musi zbudować plik binarny, abym mógł go przesłać (jest to w porządku, ponieważ nie jestem właścicielem kodu źródłowego aplikacji), chcę tylko wiedzieć, czy istnieje jakiekolwiek ryzyko związane z wysłaniem certyfikatu dystrybucji/klucza prywatnego /dostarczasz mu profil? p.s. Nie mają loginu do połączenia/portalu iTunes. Zaktualizowano: Freelancer zbuduje dla mnie plik binarny, a ja go prześlę.


title: Co nazywam wzorcem innym niż MVC?

text: Kończę projekt i w swojej pracy dyplomowej wyjaśniam, dlaczego do budowy strony internetowej użyłem wzorca **MVC** i wymieniłem zalety takiego zaprojektowania. Jednakże, gdybym **nie** używał MVC i zbudował swoją witrynę od zera ze wszystkimi funkcjami danych, przetwarzania i wyświetlania na każdej stronie, jak by to nazwano pod względem architektury? Na przykład miałbym jeden plik PHP, który zawiera cały kod i funkcje, których potrzebuje. Czy nazwano by ją „standardową architekturą witryny”?


title: Jak zarządzać sukcesem jako niezależny wykonawca?

text: Naprawiam błędy dla firmy programistycznej jako wykonawca na godzinę (pierwszy raz dla mnie). Dzisiaj w 6 godzin załatwiłem dwie sprawy, które były zaplanowane na 32 i 40 godzin każda. Dni wcześniej (pracowałem tu około tygodnia) wzór był taki sam. Nie planowałem czasu na naprawienie tych problemów i nie wiedziałem, jakie są problemy przed podpisaniem umowy. Znalazłem JIRA ze wszystkimi zaplanowanymi godzinami: niektóre z tych kwestii czekały na pracę od lat. Podpisałem kontrakt na dwa miesiące, ale obawiam się, że dużo szybciej skończę mi się praca.


title: Ewolucje w dziedzinie rozwoju Agile

text: Niedawno wyciągnąłem spod dziesięciu cali kurzu jedną z moich zwinnych książek. Książka ma już sześć lat; wydana w 2008 roku. Wolę zachować to anonimowo, aby nie dopuścić do powstania partyzantki, z której wyda się najlepszą książkę na ten temat. W tym celu jestem w stanie wykonać proste wyszukiwanie z Amazon lub Gooble, aby znaleźć najlepszą książkę. Widziałem kilka książek o agile wydanych w ciągu ostatnich 2-3 lat i zastanawiam się, czy zakup nowszej książki niż starej będzie dobrą inwestycją. Chodzi mi o to, czy są jakieś wielkie postępy w ciągu ostatnich kilku lat w świecie agile, które warto kupić nowszą książkę? Dziękuję Ci.


title: Czy struktura mojej klasy jest wystarczająco dobra?

text: Chciałem więc wypróbować to wyzwanie na reddicie, które dotyczy głównie tego, jak najlepiej ustrukturyzować swoje dane. Postanowiłem rzucić wyzwanie moim umiejętnościom C++. Oto jak to zaplanowałem. * Najpierw jest klasa **Gra**. Zajmuje się czasem i jest jedyną klasą, do której ma dostęp. * Gra ma **Las**. Na razie ta klasa nie ma wielu rzeczy, tylko _rozmiar_ i _Fabryka_. Przypuszczam, że zostanie lepiej wykorzystany, gdy dojdzie do SDL. * **Fabryka** to rzecz, która zajmuje się _Obiektami gry_ (znanymi również jako Drzewa, Drwal i Niedźwiedzie). Posiada wektor wszystkich _GameObjects_ i kolejkę _Events_, które będą zarządzane pod koniec miesiąca. * **GameObject** to abstrakcyjna klasa, która może być aktualizowana i która może _powiadamiać_ _EventListener_ * **EventListener** to klasa, która obsługuje wszystkie _Zdarzenia_ symulacji. Może odbierać zdarzenia z obiektu gry i w razie potrzeby powiadamiać _Fabrykę_, która prawidłowo zarządza zdarzeniem. Tak więc klasy **Drzewo** , **Drwal** i **Niedźwiedź** dziedziczą po **GameObject**. A **Salonka** i **Elder Tree** dziedziczą po **Drzewie**. Wreszcie, **Event** jest definiowane przez wyliczenie _event_type_ (LUMBERJACK_MAWED, SAPPLING_EVOLUTION, ...) i związek _event_protagonists_ (GameObject lub para GameObject (kto zabił kogo?)). * * * Na początku byłem z tego zadowolony, ponieważ wydaje się to dość logiczne i elastyczne. Ale skończyło się na kwestionowaniu tej struktury. Oto dlaczego: 1. Nie podoba mi się fakt, że **GameObject** musi wiedzieć o Fabryce. Rzeczywiście, kiedy niedźwiedź gdzieś się porusza, musi wiedzieć, czy jest tam drwal ! Albo jest to Fabryka, która zajmuje się miejscami i przedmiotami. Byłoby wspaniale, gdyby GameObject mógł wchodzić w interakcję tylko z EventListener... a może to nie jest wielka sprawa. 2. Czy nie byłoby lepiej, gdybym podzielił Fabrykę na trzy wektory ? Po jednym dla każdego rodzaju GameObject. Chodziłoby o optymalizację badań. Jeśli szukam usunięcia martwego drwala, musiałbym patrzeć tylko na jeden krótszy wektor, a nie na bardzo długi wektor. 3. Kolejny problem pojawia się, gdy chcę wiedzieć, czy w danym przypadku jest jakiś konkretny obiekt, ponieważ muszę szukać _wszystkich_ gameObjects i sprawdzić, czy są one w danym przypadku. Wydaje mi się, że innym pomysłem byłoby użycie macierzy, ale wtedy problem polegałby na tym, że miałbym puste przypadki (a zatem niewykorzystaną przestrzeń). 4. Naprawdę nie wiem, czy **Sapling** i **Elder Tree** powinny dziedziczyć po **Drzewie**. Rzeczywiście, drzewko jest drzewem, ale co z jego ewolucją? Czy powinienem po prostu usunąć sadzonkę i powiedzieć do fabryki, aby stworzyła nowe Drzewo dokładnie w tym samym miejscu? Nie wydaje mi się to naturalne. Jak mogę to poprawić? 5. Czy projekt **Eventu** jest całkiem dobry? Nigdy wcześniej nie używałem _związków_ w C++, ale nie miałem żadnych innych pomysłów na to, czego użyć. * * * Cóż, mam nadzieję, że wyraziłem się wystarczająco jasno. Dziękuję za poświęcenie czasu, aby mi pomóc!


title: Gdzie szukać partnera programistycznego?

text: Powiedz, że chcesz rozpocząć nowy projekt (mówię o _poważnym_ projekcie – np. jeśli masz pomysł, który wydaje się dobry i opłacalny – nie o czymś, co zaczynasz tylko po to, by nauczyć się nowej technologii lub po prostu dla własnej przyjemności) ale nie czujesz, że możesz to zrobić sam, ponieważ na przykład brakuje Ci doświadczenia lub umiejętności technicznych, aby przejść przez wszystkie etapy potrzebne do przejścia od pomysłu do produktu końcowego. Powiedz także, że nie chcesz po prostu kogoś zatrudnić. Potrzebujesz kogoś, kto może być tak samo pasjonatem pracy jak Ty, który jest „biegły” i entuzjasta tych samych technologii co Ty i który prawdopodobnie ma podobne doświadczenie (np. oboje jesteście studentami, oboje pochodzicie z prestiżowym uniwersytecie lub po prostu oboje jesteście nerdami ze Star Trek). Tak więc zasadniczo nie chcesz, aby osoba mówiła, co ma robić (np. „wdroż to i tamto, niewolniku!”), ale ktoś, kto może być inspirujący i wnieść coś nowego i ważnego do twojego projektu. Kogoś, kto pójdzie z tobą od najwcześniejszych etapów - od jasnego kształtowania filozofii projektu po rysowanie makiet itp. Kogoś, kto zgadza się podzielić rezultatem projektu, kto mocno wierzy w ideę, która za nim stoi i jest z tobą całkowicie 50-50. Teraz pytanie brzmi: jak zwiększyć swoje szanse na znalezienie tej osoby (lub osób)? Gdzie byś najpierw spojrzał? Na przykład, jeśli miałeś dużo funduszy i szukałeś kogoś do zatrudnienia, być może zamieściłbyś ogłoszenie w SO kariera lub praca.73sygnały; jeśli miałeś już zespół i szukałeś finansowania, zacząłbyś projekt na kickstarterze lub indiegogo, albo poszedłbyś na jakieś wydarzenie startupowe. Ale gdybyś musiał znaleźć dobrego partnera (i oczywiście programistę) do swojego projektu, od czego zacząłbyś szukać? Jakich strategii byś użył?


title: Współbieżność pamięci podręcznej: zapewnienie najnowszej wersji w pamięci podręcznej

text: Mamy aplikację do obsługi danych działającą na wykresach obiektów. Umieszczamy złożone wykresy w warstwie pamięci podręcznej (pamięci) jako pojedynczy element danych, aby uniknąć czasu potrzebnego na pobieranie każdego pojedynczego elementu danych z pamięci dyskowej w celu zbudowania całej hierarchii. Oznacza to, że za każdym razem, gdy którykolwiek z elementów danych ulegnie zmianie, wyzwalane jest zdarzenie ponownego buforowania — ponowne ładowanie wszystkiego w hierarchii i przechowywanie nowszej wersji w pamięci podręcznej. Ostatnio wprowadziliśmy poprawki do usługi, aby zwiększyć jej współbieżność operacji asynchronicznych (głównie sieci we/wy) i zaobserwowaliśmy zachowanie rywalizacji, jeśli wiele przychodzących żądań spowodowało aktualizacje elementów w zasadniczo tym samym grafie obiektów. Każda operacja aktualizacji jest nieświadoma innych współbieżnych aktualizacji. Na poziomie trwałości magazynu infrastruktura ma sygnatury czasowe w wierszach danych; co pozwala nam stosować optymistyczne techniki współbieżności, zapewniając, że nikt nie zapisuje przestarzałej wersji z powrotem do pamięci masowej. Zmiana w jakimkolwiek obiekcie podrzędnym powoduje, że obiekt główny zwiększa numer wersji, a tym samym ponowne buforowanie. Podczas takiego zdarzenia, inne współbieżne aktualizacje mogą mieć miejsce dla dowolnego innego obiektu podrzędnego (lub nawet tego samego), co utrudnia stwierdzenie, jaka dana wersja obiektu głównego powinna być naprawdę (w momencie aktualizacji). Co gorsza i głównym problemem jest to, że z powodu współbieżnej rywalizacji wątków o uwagę procesora, próba buforowania starszej wersji może nastąpić _po_ próbie buforowania nowszej wersji. W tej chwili zminimalizowaliśmy to zachowanie, sprawdzając, czy wersja obiektu głównego podczas zdarzenia ponownego buforowania nadal jest zgodna z wersją zapisaną podczas własnej operacji aktualizacji. Jeśli numer wersji nie jest taki sam, oznacza to, że kolejna współbieżna aktualizacja zmieniła go dalej i ponowne buforowanie nie powinno być kontynuowane - niech ostatnia operacja aktualizacji wykona ponowne buforowanie. To oczywiście minimalizuje szanse, ale nie eliminuje całkowicie; nadal może być możliwe, że obiekt główny zachowa swój oryginalny numer wersji po ponownym pobraniu, a podczas ponownego pobierania wszystkich obiektów potomnych następuje kolejna aktualizacja i przez przypadek (niefortunnego) szczęścia udaje się ukończyć i ponownie buforować przed tym trwająca próba ponownego buforowania zakończyła swoją rundę. Aby jeszcze bardziej skomplikować problem, ta usługa danych jest wdrażana jako klaster serwerów bez wiedzy o wzajemnym rodzeństwie. Zastanawiałeś się, czy istnieje skuteczny sposób zarządzania współbieżnymi aktualizacjami w wielu wątkach i serwerach, aby upewnić się, że buforowana kopia jest rzeczywiście zawsze najnowszą kopią?


title: Czy przechodzenie w przedsprzedaży jest takie samo jak wyszukiwanie na podstawie głębokości?

text: Wydaje mi się, że przechodzenie w przedsprzedaży i DFS są takie same, ponieważ w obu przypadkach przechodzimy rekurencyjnie od korzenia do lewej gałęzi i z powrotem do korzenia, a następnie do prawej gałęzi. Czy ktoś mógłby mnie poprawić, jeśli się mylę? Z góry dziękuję!


title: Jak ustala się pierwszeństwo we wskaźnikach C?

text: Natknąłem się na dwie deklaracje wskaźnikowe, których nie mogę zrozumieć. Moje rozumienie reguł pierwszeństwa wygląda mniej więcej tak: Asocjatywność pierwszeństwa operatora (), [ ] 1 Od lewej do prawej *, identyfikator 2 Od prawej do lewej Typ danych 3 Ale nawet biorąc pod uwagę to, wydaje mi się, że nie mogę zrozumieć, jak ocenić następujące przykłady poprawnie: ### Pierwszy przykład float * (* (*ptr)(int))(double **,char c) Moja ocena: 1. `*(ptr)` 2. `(int)` 3. `* (*ptr)(int)` 4. `*(*(*ptr)(int))` Następnie 1. `double **` 2. `char c` ### Drugi przykład bez znaku **( * (* ptr) [5] ) (znak const *,int *) 1. `*(ptr)` 2. `[5]` 3. `*(*ptr)[5]` 4. `*(*(*ptr) )[5])` 5. `**(*(*ptr)[5])` Jak _powinien_ je czytać?


Dlaczego jQuery jest wydawane na licencji MIT, a nie na licencji LGPL? Jakie są korzyści z używania MIT w porównaniu z LGPL dla frameworka?


title: Jak radzisz sobie z lękiem, że nie wiesz wystarczająco dużo?

text: Kilka miesięcy temu skończyłem szkołę i szukam czasu, aby poszerzyć swoją wiedzę. Uwielbiam programować, ale czuję, że nie wiem wystarczająco, by być pewnym, jeśli pójdę na rozmowę kwalifikacyjną. Wczoraj wieczorem przeglądałem pytania i natknąłem się na pytanie, które pyta rozmówców, jak opracować listę z linkami. Nauczyłem się tego na studiach, ale gdybym został zapytany na miejscu, jak to zrobić, nie wiedziałbym. To kolejna rzecz dodana do listy tego, czego należy się nauczyć. Wtedy uderzył mnie niepokój, ponieważ w tak krótkim czasie muszę się tak wiele nauczyć (przynajmniej tak się czuję). Po introspekcji myślę, że ten niepokój jest związany z moim perfekcjonizmem, chociaż bycie doskonałym nie jest racjonalne, np. Szekspir i Einstein zawiedli w 80% przypadków. Więc pytania brzmią, czy czułeś ten niepokój, że nie wiesz wystarczająco dużo? Jeśli tak, jak sobie z tym poradziłeś? Przypuszczam, że nadszedł moment, w którym zaczynasz czuć się komfortowo w swoich umiejętnościach?


title: Jak rozwiązuje się „problem ze zbieraniem pizzy” za pomocą dynamicznych technik programowania?

text: Problem zbierania pizzy Winklera: * Okrągły placek do pizzy składający się z `n` plasterków, gdzie plaster `i` ma obszar `S_i` tj. obszar jest inny dla każdego kawałka ciasta. * Zjadacze Alice i Bob na zmianę zbierają plasterki, ale niegrzecznie jest tworzyć wiele luk w torcie (uważaj, że jest to niedozwolone). * W ten sposób każdy zjadacz jest ograniczony do pobrania jednego z dwóch plasterków sąsiadujących z otwartym obszarem. Alicja idzie pierwsza, a obie zjadacze szukają jak największej ilości ciasta. W jaki sposób algorytm programowania dynamicznego określi, ile ciasta zje Alicja, jeśli zarówno Alicja, jak i Bob grają perfekcyjnie, aby zmaksymalizować spożycie pizzy? Moje rozumienie: W ogólnym problemie DP idziemy dalej od znalezienia podproblemów, które można wizualizować za pomocą drzewa rekurencji lub, ściślej, za pomocą DAG. Tutaj nie znajduję żadnego tropu, aby znaleźć tutaj podproblemy. Tutaj, dla danego zbioru S_i s, musimy zmaksymalizować powierzchnię plastrów zjedzonych przez Alicję. Będzie to zależało od wybrania permutacji kawałków pizzy z (n-1) permutacji. Wybranie maksymalnego wycinka obszaru spośród dwóch opcji dostępnych w każdych n\2 turach, jakie otrzymuje Alicja, da nam całkowitą powierzchnię wycinka dla permutacji. Musimy znaleźć pole przekroju dla wszystkich takich permutacji. A potem maksimum z nich. Czy ktoś może mi pomóc, jak iść do przodu?


title: Czy klucze PGP są tak samo dobre dla certyfikatów jak klucze X.509?

text: Pracuję nad zdecentralizowanym systemem przetwarzania transakcji, który wymaga zarówno uwierzytelniania, jak i ogólnego szyfrowania, i mam do podjęcia decyzję projektową: czy powinienem używać certyfikatów PGP czy X.509? Chociaż świat ma tendencję do używania X.509 do uwierzytelniania (zwłaszcza w przeglądarkach), opierają się one na zasadzie posiadania poręczenia _centralnego_ dla każdego certyfikatu, co oznacza, że system potrzebowałby urzędu certyfikacji, a każdy, kto chciałby uczestniczyć w systemie, musiałby muszą mieć swoje klucze podpisane przez ten urząd certyfikacji. Z drugiej strony PGP opiera się na "sieci zaufania", w której strony, które chcą się komunikować, muszą mieć wspólnego zaufanego partnera, który podpisze oba klucze. W tym przypadku urząd certyfikacji nie jest konieczny. Moje ogólne cele projektowe wolą model Web-of-Trust, aby system był zdecentralizowany, ale mogę też mieć klientów, którzy wolą model scentralizowany i nie chcę zabronić tej możliwości. Czy coś powstrzymuje zasadę Web-of-Trust przed działaniem z X.509? Podobnie, czy naśladowanie urzędów certyfikacji w kryptosystemie PGP jest łatwe i proste? Czy w praktyce są wymienne? (Z jakiegoś powodu przywodzi mi to na myśl fałszywą dychtomię: „Próbuję wbić gwóźdź, użyć butelki po piwie czy obcasa buta?”)


title: Czy powinienem używać interfejsu, gdy metody są tylko podobne?

text: Wpadłem na pomysł stworzenia obiektu, który sprawdza, czy punkt zderzy się z linią: public class PointAndLineSegmentCollisionDetector { public void Collides(Point p, LineSegment s) { // ... } } postanowiłem utworzyć obiekt **Box**, wtedy będę potrzebował **PointAndBoxCollisionDetector** i **LineSegmentAndBoxCollisionDetector**. Mogę nawet zdać sobie sprawę, że powinienem mieć **BoxAndBoxCollisionDetector** i **LineSegmentAndLineSegmentCollisionDetector**. A kiedy dodam nowe obiekty, które mogą się zderzać, musiałbym dodać ich jeszcze więcej. Ale wszystkie mają metodę **Collides**, więc wszystko, czego nauczyłem się o abstrakcji, mówi mi: _"Utwórz interfejs."_ public interface CollisionDetector { public void Collides(Spatial s1, Spatial s2); } Ale teraz mam funkcję, która wykrywa tylko jakąś klasę abstrakcyjną lub interfejs, który jest używany przez **Point** , **LineSegment** , **Box** , itd. Więc gdybym to zrobił, to każda implementacja miałaby do sprawdzenia typu, aby upewnić się, że typy są odpowiedniego typu, ponieważ algorytm kolizji jest inny dla każdego innego typu dopasowania. Innym rozwiązaniem mogłoby być to: public class CollisionDetector { public void Collides(Point p, LineSegment s) { ... } public void Collides(LineSegment s, Box b) { ... } public void Collides(Point p, Box b) { ... } // ... } Może to jednak skończyć się ogromną klasą, która wydaje się nieporęczna, chociaż byłaby uproszczona, ponieważ jest to tylko kilka metod **Zderzenia**. Jest to podobne do klasy **Convert** języka C#. Co jest miłe, ponieważ jest duże, ale łatwo zrozumieć, jak to działa. To wydaje się być lepszym rozwiązaniem, ale pomyślałem, że powinienem otworzyć je do dyskusji jako wiki, aby uzyskać inne opinie.


title: Co się stanie, jeśli nie mogę sprawić, by mój test jednostkowy zakończył się niepowodzeniem w „czerwonym, zielonym, refaktoryzacji” TDD?

text: Powiedzmy, że mam test: @Test public void MoveY_MoveZero_DoesNotMove() { Point p = new Point(50.0, 50.0); p.PrzesuńY(0.0); Assert.assertAreEqual(50,0, p.Y); } Ten test powoduje następnie utworzenie klasy **Point** : public class Point { double X; podwójne Y; public void MoveY(double yDisplace) { rzucić nowy NotYetImplementedException(); }     }      Ok. To nie wyszło. Dobrze. Następnie usuwam wyjątek i robię się zielony. Świetnie, ale oczywiście muszę sprawdzić, czy zmienia się wartość. Więc piszę test, który wywołuje _p.MoveY(10.0)_ i sprawdza, czy _p.Y_ jest równe 60.0. To się nie udaje, więc zmieniam funkcję, aby wyglądała tak: public void MoveY(double yDisplace) { Y += yDisplace; } Świetnie, teraz znowu mam zielone i mogę iść dalej. Testowałem nie poruszanie się i poruszanie się w kierunku dodatnim, więc naturalnie powinienem przetestować wartość ujemną. Jedyny problem z tym testem polega na tym, że jeśli napisałem test poprawnie, to na początku nie zawodzi. Oznacza to, że nie pasowałem do zasady „czerwony, zielony, refaktor”. Oczywiście jest to problem pierwszego świata TDD, ale pierwsze niepowodzenie jest pomocne, ponieważ pokazuje, że twój test może się nie udać. W przeciwnym razie ten pozornie niewinny test, który przechodzi z niewłaściwych powodów, może później zawieść, ponieważ został napisany źle. Może to nie stanowić problemu, jeśli wydarzy się to 5 minut później, ale co, jeśli stanie się z biednym sokiem, który odziedziczył twój kod dwa lata później. Wie tylko, że MoveY nie działa z wartościami ujemnymi, ponieważ właśnie to mówi mu test. Ale to naprawdę może działać i być tylko błędem w teście. Nie sądzę, że tak by się stało w tym konkretnym przypadku, ponieważ próbka kodu jest tak prosta, ale gdyby był to duży skomplikowany system, może tak nie być. Wydaje się szaleństwem mówić, że chcę oblać moje testy, ale jest to ważny krok w TDD, z dobrych powodów.


title: Debuger w pamięci dla platformy .NET?

text: Nie wiem, czy "debugger w pamięci" jest naprawdę tym, o czym mówię, czy w ogóle można go wyprodukować, ale to najlepsza nazwa, jaką mogłem wymyślić... Oto narzędzie, którego szukam: * Biorąc pod uwagę nazwę zmiennej, zamień tę nazwę na referencję * Biorąc pod uwagę to odwołanie, być w stanie obserwować obiekt, do którego się odwołujemy * Biorąc pod uwagę zegarek, być w stanie zwizualizować go w użyteczny sposób, np. * przeglądaj właściwości obiektu, tak jak możesz w programie Visual Studio, * otrzymuj powiadomienia, gdy obiekt, do którego się odwołuje, zostanie zmieniony. Oto przypadek użycia tego hipotetycznego narzędzia. Spędziłem cały dzisiejszy dzień próbując wyśledzić ObjectDisposedException w mojej aplikacji sieci web C#. Usuwany obiekt jest WindowsIdentity bieżącego użytkownika i wydaje się, że istnieje sytuacja wyścigu powodująca usunięcie WindowsIdentity przed użyciem. Gdybym mógł oglądać konkretne odwołanie do pamięci w inteligentny sposób, a nie zmienną w określonym zakresie, myślę, że pomogłoby mi to łatwiej określić źródło tego rodzaju błędu. Czy takie narzędzie istnieje dla .NET?


title: Jaki test należy poddać programistom Java EE?

text: Zatrudnię programistów i chcę ich przetestować. Mój szef szczególnie powiedział mi, że powinniśmy mieć na pokładzie programistów, którzy mogą konsultować się z oprogramowaniem dla sektora bankowego, a ja mam wymyślić test. Teraz nigdy nie zajmowałem się dogłębnie rozwojem Java EE i moja wiedza na ten temat nie jest najlepsza, ale nie miałem żadnych problemów ze zrozumieniem tego, co do tej pory przeczytałem. Teraz zastanawiam się, jak skonstruować test sprawdzający kandydatów na znajomość Java EE oraz doświadczenie. A jeśli powinienem uczynić test bardziej konceptualnym, takim jak logiczne rozumowanie i wykrywanie wzorców itp.


title: Jaki jest najlepszy sposób na wstawienie zakresu wartości do struktury danych?

text: Jeśli mam strukturę danych, która jest najszybszym sposobem, w jaki mogę wstawić do niej wartości w określonym zakresie? Na przykład gdybym miał metodę: myDatastructure var=new myDataStructure(); var.insert(2,1000); oznaczałoby to, że otrzymuję najbardziej zoptymalizowany sposób uzyskiwania struktury danych przechowującej sekwencyjnie wartości od 2 do 1000 w każdym z indeksów.


title: Jak pisać funkcjonalnie w webowym frameworku

text: Uwielbiam Richa Hickeya, Clojure i Haskella i rozumiem, kiedy mówi o funkcjach i zawodności kodu powodującego efekty uboczne. Jednak pracuję w środowisku, w którym prawie wszystkie funkcje, które piszę, muszą czytać z bazy danych, zapisywać do bazy danych, wykonywać żądania HTTP, zmniejszać saldo użytkownika, modyfikować komponent HTML frontendu w oparciu o akcję kliknięcia, zwracać różne wyniki na podstawie identyfikator URI lub treść POST. Używamy również PHP do frontendu, który jest zaśmiecony funkcjami takimi jak parse_str(), które modyfikują obiekt w miejscu. Wszystkie te są skutkiem ubocznym w takim czy innym stopniu. Biorąc pod uwagę te ograniczenia i efekt uboczny kodowanej przeze mnie logiki, co mogę zrobić, aby mój kod był bardziej niezawodny i „funkcjonalny”?


title: czy obowiązkiem programisty jest wyłączenie listy katalogów?

text: Ostatnio mam projekt, w którym włączony jest listing katalogów, dzięki czemu niektóre skrypty są widoczne dla świata zewnętrznego. Zapytałem administratora strony i powiedział, że to nie jego odpowiedzialność, to zadanie programisty. Zapytałem też o to programistę i powiedział, że skrypt to tak naprawdę praca cron i według niego musi przetestować skrypt na serwerze WWW, ponieważ jest różnica między środowiskiem programistycznym a produkcyjnym, więc umieścił tam, aby to przetestować. Według niego nie było bezpośredniego linku, ponieważ zakładał, że lista katalogów jest wyłączona i opiekuje się nią administrator. Kto jest właściwą osobą do tego?


title: PHP i Ruby: jak wykorzystać oba? i czy warto?

text: Jak mogłeś zauważyć po tytule, nie jest to pytanie „PHP lub Ruby” ani „PHP kontra Ruby”. To jest pytanie, jak wykorzystać PHP + Ruby w tym samym biznesie. Sam jestem programistą PHP, uwielbiam język ze względu na jego wygodę i szczególnie kocham ekosystem zasobów, które go otaczają: Joomla, Drupal, Wordpress, Symfony2, Doctrine2 itp. Jednak sam język może czasami trochę rozczarowywać . OTOH, Ruby wygląda jak bardzo piękny język i – z powierzchownego studiowania go w kilku aspektach – mogę powiedzieć, że jest szczuplejszy niż Python jako język per se. Jednak z tego, co widziałem, jest w zasadzie tylko RoR, który wydaje hałas, a ja tak bardzo RoR nie lubię (głównie z powodu jego warstwy modelowej). Jako Co-CEO i CTO w mojej firmie staram się myśleć nieszablonowo, ponieważ chcę skupić się na ludzkiej stronie technologii i sprawdzić, czy rozsądne jest używanie zarówno PHP, jak i Ruby. Oto kilka przypadkowych myśli: * Ruby folk wydaje się być ogólnie lepszymi programistami niż PHP folk (pod względem średnich), wiem, że poprzednie stwierdzenie jest trochę bzdury, ponieważ można napisać bardzo dobre i dobrze zaprojektowane PHP, ale powiedziałbym kultura programistów Ruby jest lepsza niż PHP. * Chodzi o to, że Ruby wydaje się lepiej przystosowany do szybkiego rozwoju, tak naprawdę nie wiem, czy tak jest tylko w przypadku RoR, ale wiem, że istnieją pewne praktyki (może nie tak dobre), jak łatanie małp, które pozwalają potrzeby biznesowe zostaną zaspokojone szybciej. * Z marketingowego punktu widzenia (tak, czasami musisz wykorzystać marketingowe BS dla dobra swojej firmy) Ruby wydaje się lepszy, podczas gdy PHP niesie ze sobą pewne piętno. * PHP 5.4 wnosi cechy i jest lepsze/czystsze niż mixiny. To może naprawdę sprawić, że PHP będzie tak szczupłe jak Ruby — lub więcej — w przypadku niektórych rzeczy. Teraz, konkretnie, moje pytania: * Czy programista PHP chciałby nauczyć się Rubiego?, wiem, że tak, ale odwrotnie, czy programista Ruby chciałby nauczyć się PHP?. * Jakie rodzaje projektów lub sytuacji byłyby lepsze dla Rubiego, które nie są przystosowane do PHP? * Jaki jest rzeczywisty ekosystem Ruby?, poza RoR, nie widziałem innych przereklamowanych technologii/frameworków (widziałem RSpec, ale przyznaję, że jestem totalnym głupcem w kwestii tego, z czego naprawdę składa się BDD i jakie są jego implikacje). * Zakładając, że istnieje pewien typ projektów idealnych dla Rubiego, czy byłby moment, w którym lepiej byłoby przenieść go do PHP?. Wiem, że PHP radzi sobie z wieloma rzeczami, ale czytałem, że Ruby ma swoje ograniczenia podczas skalowania (czy to jest RoR?, czy to bzdura dla obu?). * Na koniec i co najważniejsze, czy rozsądne byłoby utrzymywanie projektów w dwóch językach?, czy to po prostu głupie. Jak powiedziałem, wygląda na to, że Ruby jest szczuplejszy na krótką metę i to może sprawić, że projekt się uda, ale nie jestem tego taki pewien na dłuższą metę. Szukam spostrzeżeń głównie od ludzi, którzy dobrze znają mocne i słabe strony języków — najlepiej obu — oraz ekosystem Ruby w praktyce, czyli: frameworki i aplikacje takie jak te, które cytowałem z ekosystemu PHP.


title: Dlaczego jest tak ograniczone wsparcie dla Design by Contract w większości nowoczesnych języków programowania?

text: Niedawno odkryłem Design by Contract (DbC) i uważam, że jest to niezwykle interesujący sposób pisania kodu. Między innymi wydaje się oferować: * Lepszą dokumentację. Ponieważ umowa jest dokumentacją, nie jest możliwe, aby była nieaktualna. Dodatkowo, ponieważ umowa dokładnie określa, co robi rutyna, pomaga wspierać ponowne użycie. * Prostsze debugowanie. Ponieważ wykonywanie programu zatrzymuje się w momencie niepowodzenia kontraktu, błędy nie mogą się rozprzestrzeniać, a określone naruszone potwierdzenie zostanie prawdopodobnie podświetlone. Zapewnia to wsparcie podczas rozwoju i konserwacji. * Lepsza analiza statyczna. DbC jest w zasadzie tylko implementacją logiki Hoare'a i powinny obowiązywać te same zasady. Koszty w porównaniu wydają się raczej niewielkie: * Dodatkowe pisanie palcami. Ponieważ umowy muszą być sprecyzowane. * Wymaga pewnego treningu, aby poczuć się komfortowo z pisaniem umów. Teraz, znając przede wszystkim Pythona, zdaję sobie sprawę, że w rzeczywistości możliwe jest napisanie warunków wstępnych (po prostu rzucanie wyjątków dla nieodpowiednich danych wejściowych), a nawet możliwe jest użycie asercji do ponownego przetestowania pewnych warunków końcowych. Ale nie jest możliwe symulowanie niektórych funkcji, takich jak „stary” lub „wynik” bez dodatkowej magii, która ostatecznie zostałaby uznana za nie-pythoniczną. (Ponadto jest kilka bibliotek, które oferują wsparcie, ale ostatecznie mam wrażenie, że korzystanie z nich byłoby błędem, ponieważ większość programistów tego nie robi.) Zakładam, że jest to podobny problem dla wszystkich innych języków (z wyjątkiem oczywiście , Eiffla). Intuicja podpowiada mi, że brak wsparcia musi być wynikiem jakiegoś odrzucenia praktyki, ale wyszukiwanie w Internecie nie było owocne. Zastanawiam się, czy ktoś może wyjaśnić, dlaczego większość współczesnych języków wydaje się oferować tak małe wsparcie? Czy DbC jest wadliwe lub zbyt drogie? A może jest po prostu przestarzały ze względu na ekstremalne programowanie i inne metodologie?


title: Czy programowanie jako kariera w USA jest niszczone przez konkurencję ze strony programistów z Indii?

text: nie chcę być obraźliwy; ludzie w Indiach liczą się tak samo jak ludzie w USA, a także potrzebują pracy. Jednak jestem jedną z osób w USA. Czy w USA jest mniej miejsc pracy w programowaniu ze względu na konkurencję z Indii? Czy praca programistyczna w USA jest mniej dochodowa z powodu konkurencji ze strony Indii? Czy programowanie to dobry wybór kariery w USA (pod względem możliwości zarobienia naprawdę sporych pieniędzy)?


title: Czy Xcode został utworzony za pomocą Xcode?

text: Nie chcę być tutaj zbyt filozoficzny (jak Bóg stworzył Boga?), ale jak Apple stworzył Xcode? Czy mogliby użyć Xcode do stworzenia Xcode? A może musieliby użyć innego programu kodującego (i co to może być?). Ogólnie rzecz biorąc, jak to działa z edytorami kodu?


title: Różnica między ustawiaczem sprężyny a wtryskiem interfejsu?

text: Wiem jak działa konstruktor i ustawiacz wtrysku na wiosnę. Normalnie używam interfejsów zamiast klas do wstrzykiwania ziaren za pomocą settera i uważam to za wstrzykiwanie interfejsów, ale w przypadku konstruktora również używamy interfejsów (jestem zdezorientowany). W poniższym przykładzie używam interfejsu `JobProcessor` zamiast klasy `JobProcessorImpl`. public class JobScheduler { // Interfejs JobProcessor private JobProcessor jobProcessor; // Wstrzyknięcie zależne od wartości public void setJobProcessor(JobProcessor jobProcessor){ this.jobProcessor = jobProcessor; } } Próbowałem znaleźć rozwiązanie przez googlowanie, ale autorzy mają różne opinie. Nawet niektórzy twierdzą, że Spring nie obsługuje wstrzykiwania interfejsu w ich blogach/wypowiedziach. Czy ktoś może mi pomóc na przykładzie?


title: Jak sprawić, by tagowanie działało dla pojęcia „wszystkie”?

text: Istnieje podejście do porządkowania informacji, które mówi, że hierarchia jest narzędziem diabła, a przynajmniej jest przereklamowana. Rozumiem to w przypadku witryny opartej na danych, nad którą pracuję, która ma ustalony zestaw administratorów, którzy tworzą i tagują dane, oraz nieco mniej stałą grupę odbiorców danych. Wykorzystuje tagowanie i wyszukiwanie do informowania odbiorców danych, kiedy informacja jest związana z tym, co czytają lub szukają (w przeciwieństwie do oczekiwania, że administratorzy spoza 1337 będą utrzymywać hierarchię w stylu obiektowym). Mam teraz do czynienia z sytuacją, w której potrzebuję pewnych informacji, aby odnieść się do „wszystkich” innych pod jednym względem. Nie mogę oczekiwać, że twórcy treści będą oznaczać swoje „wszystkie” wpisy każdym tematem w domenie, a gdyby to zrobili, sama waga tagów w tej domenie zagłuszyłaby informacje implikowane przez inne tagi we wpisie. Opcje, które do tej pory przychodzą mi do głowy (wszystkie nieatrakcyjne) to: * Utworzenie pola wyboru „wszystkie”, które może przypisać dowolnie wyższy wynik do wpisu przy rozważaniu trafności * Utwórz różne kategorie tagów, tj. jedno pole tagu na wyraźnie określoną grupę tematów * Zastąp tagowanie bardziej tradycyjną hierarchią * Utwórz magiczne „wszystkie” tagi, które są inaczej obsługiwane przez mój kod (nie mogę uwierzyć, że nawet myślę o tym głośno) Czy istnieją inne podejścia, które mogłyby zadziałać? Czy jeden z nich jest wyraźnym zwycięzcą?


title: Co to jest plik README „w formacie przecen” na Github?

text: Nie jest dla mnie jasne, jaki jest format, czy istnieją wymagania systemowe/linii poleceń do jego tworzenia itp. Zasadniczo, wystarczy znać specyfikację i czy istnieją techniczne kroki w celu wygenerowania pliku README.


title: Jak aplikacja Metro w systemie Windows 8 może obsługiwać dostęp do wewnętrznej bazy danych?

text: Podczas badania Metro i WinRT nie udało mi się znaleźć niczego na temat aplikacji korporacyjnych i dostępu do baz danych. Wszystko, o czym słyszę, to rozwój front-endu. Czy ktoś ma pojęcie, w jaki sposób aplikacja Metro uzyska dostęp do serwera bazy danych? Czy nadal będzie to realizowane za pośrednictwem ASP.Net i ADO.Net? Jeśli nie, to czy ktoś ma jakiś pomysł lub domyśla się, jak?


title: Ilu programistów ASP.NET korzysta z czystego OO?

text: Ilu programistów ASP.NET programuje używając OO (np. używając get, set)? 6 lat temu opracowałem i utrzymywałem aplikację intranetową .Net 1.1, która nie miała funkcji get/set. A co powiesz na dzisiaj? Warto spróbować czystej trasy OO? Dzięki, TDG


title: Jak zdobyć koncepcje programowania obiektowego?

text: Jaki jest najlepszy sposób lub najlepsze zasoby lub samouczki do nauki programowania obiektowego? Na przykład, kiedy zaczynam program w Javie i cały mój kod trafia tylko do jednej klasy i nie mogę oszacować, kiedy muszę utworzyć nowe klasy i operować na tych klasach razem.


title: Nazywanie modułu nadawczego/odbiorczego. Czy wzór ma nazwę?

text: Pracuję nad prostą funkcją (właściwie klejnotem rubinowym, ale to nie ma sensu), która może być używana do * odbierania i utrwalania wiadomości przychodzących * wysyłania i utrwalania wiadomości wychodzących * dostarcza zaczep do kodu implementującego w celu wykonania pewne działanie na podstawie otrzymanej wiadomości. Może na przykład wysłać odpowiedź, ale także wykonać inne czynności. Mam problem ze znalezieniem krótkiej i zwięzłej nazwy dla tej funkcjonalności. Czy to tylko podobieństwo do jakichkolwiek nazwanych wzorców, a jeśli tak to do jakich? ******* AKTUALIZACJA ******* Mówiąc dokładniej, to, co tutaj robię, to otrzymywanie i wysyłanie SMS-ów. Zaczyna się zastanawiać, czy być może najwłaściwszą nazwą dla tej funkcjonalności byłby dyspozytor SMS. Ze strony Dyspozytor na wikipedii (chociaż nie ma to nic wspólnego z informatyką): > Dyspozytorzy to pracownicy ds. komunikacji odpowiedzialni za odbieranie i > przesyłanie czystych i niezawodnych komunikatów Czy użycie nazwy dyspozytora dla tego pojęcia spowodowałoby zamieszanie z innymi wzorcami projektowymi?


title: Java: metoda przyjmuje varargi niepowiązanych typów

text: Mam metodę fabryki Java z tablicą varargs obiektów `Object`s na końcu. Tablica może zawierać dowolną kombinację „String” i „ScaledJpeg”. Teoria mówi, że komórka tabeli HTML może zawierać dowolną liczbę węzłów tekstowych lub węzłów `<image>` i będzie zawijać obrazy tak, jakby były po prostu śmiesznie ukształtowanymi słowami. // konstruktor public Cell(TextStyle ts, float w, CellStyle cs, Object... r) { if (w < 0) { throw new IllegalArgumentException("Komórka nie może mieć ujemnej szerokości"); } if (r != null) { for (Object o : r) { if ( (o != null) && !(o instancja String) && !(o instancja ScaledJpeg) ) { wyrzuć nowy IllegalArgumentException(INVALID_ROW_TYPE_STR); } } } styl tekstu = ts; szerokość = w; styl komórki = cs; wiersze = r; avgCharsForWidth = (int) ((szerokość * 1220) / textStyle.avgCharWidth()); } W Scali mógłbym użyć listy `Either[String,ScaledJpeg]`. Ale pewnego dnia prawdopodobnie sprawię, że ta metoda zezwoli na coś innego, powiedzmy inną zagnieżdżoną `Cell`, ale zrobienie tego zniszczy istniejący kod, który oczekiwał tylko dwóch możliwych typów. Przynajmniej tak jest, przyszłe zmiany nie spowodują złamania istniejącego kodu. Obecne rozwiązanie działa, pozwala na rozbudowę i jest stosunkowo łatwe w użyciu, z wyjątkiem tego, że obala bezpieczeństwo typów i może zgłosić wyjątek tylko w czasie wykonywania, jeśli ktoś przekaże coś nieoczekiwanego jako vararg. Na przykład po prostu zapomniałem dodać `toString()` do `StringBuilder` i wybuchł w czasie wykonywania. Jest to już trzecia klasa, którą należy uwzględnić (ponieważ `toString()` jest zdefiniowana w każdym obiekcie, nie chcę wywoływać jej dla tego, co jest przekazywane, ponieważ zrobienie tego dla większości typów obiektów byłoby błędem znacznie dalej w kod naruszający szybkie zachowanie w tym przykładzie). `java.lang.String` nie może zaimplementować żadnych nowych interfejsów i to prawdopodobnie dobrze. Nawet gdybym mógł stworzyć klasę opakowującą, wszystko w sposobie, w jaki tekst i obrazy są traktowane przez tę klasę, jest zupełnie inne _z wyjątkiem_, że są one zawijane razem tak, jak byłyby w HTML (lub w dokumencie Word). Kiedy to piszę, przychodzi mi do głowy, że powinienem prawdopodobnie użyć wzorca Builder, stworzyć klasę `CellBuilder`, która ma metody `addText()` i `addImage()`, które usuwają konstruktor varargs. Spowodowałoby to hermetyzację bazowej listy w taki sposób, że użytkownik interfejsu API uzyskuje 100% bezpieczeństwa typów w czasie kompilacji. Ale z ciekawości nadal publikuję to na wypadek, gdyby pojawiły się inne kreatywne i prawdopodobnie lepsze rozwiązania.


title: Jak programiści radzą sobie z Liderem/Kierownikami Projektu?

text: Menedżerowie projektów / kierownicy techniczni czasami są zbyt entuzjastyczni, jeśli chodzi o oprogramowanie. Ale podczas przeglądów kodu, jeśli zamiast funkcjonalności kodu słyszy się tylko narzekanie na formatowanie/odstępy i tym podobne błahostki, gdy są o wiele lepsze rzeczy do omówienia (m.in. zauważyłem czasami podczas tzw. pojawiają się sugestie, że implementacja wymaga przepisania tylko dlatego, że nie korzysta z najbardziej popularnej technologii/słowo popularnej) Jak inni programiści radzą sobie z takimi scenariuszami? czy to tylko jednorazowe? (czy to wina całkowicie po mojej stronie ) Czy masz podobne doświadczenia i co zrobiłeś, żeby je przezwyciężyć? Zapraszam do dzielenia się.


Czy programista powinien zamknąć zgłoszenie w narzędziu do śledzenia błędów? A może powinien to robić tylko scrum master lub testerzy? Jakie są najlepsze praktyki?


title: Czym dokładnie są wartości relacji łącza?

text: Z REST w praktyce: Hipermedia i architektura systemów: > W przypadku interakcji między komputerami ogłaszamy informacje o protokołach przez > osadzanie łączy w reprezentacjach, podobnie jak robimy to w ludzkiej sieci. Aby > opisać przeznaczenie linku, umieszczamy na nim adnotacje. Adnotacje wskazują, co > połączony zasób oznacza dla bieżącego zasobu: „status zamówienia kawy” > „płatność” i tak dalej. Takie linki z adnotacjami nazywamy **kontrolami hipermediów** , > odzwierciedlając ich rozszerzone możliwości w stosunku do surowych identyfikatorów URI. > > ... **wartości relacji linków** , które opisują role powiązanych zasobów > ... **wartości relacji linków** pomagają konsumentom zrozumieć, dlaczego mogą chcieć > aktywować kontrolę hipermediów. Robią to, wskazując rolę > połączonego zasobu w kontekście aktualnej reprezentacji. Interpretuję powyższe cytaty jako mówiące, że **Kontrola hipermediów** zawiera zarówno _link do zasobu_, jak i _adnotację opisującą rolę połączonego zasobu w kontekście bieżącej reprezentacji_. I nazywamy tę adnotację ( opisującą rolę połączonego zasobu ) **wartością relacji linku**. Czy moje założenie jest poprawne, czy też termin **wartość relacji linków** faktycznie opisuje coś innego? Dziękuję Ci


title: Na co zwrócić uwagę przy wyborze języka do handlu algorytmicznego/wysokiej częstotliwości?

text: Gdyby ktoś był programistą ilościowym, jakie czynniki są brane pod uwagę przy wyborze języka? Mówię o handlu wysokiej częstotliwości w skali banków inwestycyjnych. Wiem, że opóźnienie jest zdecydowanie czynnikiem i być może czytelnością kodu (nie jestem pewien, jak bardzo kod został zmieniony, w takim przypadku byłoby to duże). Ktoś, kto ma większą wiedzę na ten temat, zna wady i zalety poszukiwane w rozwoju?


title: Lokalny system wersjonowania specjalnie zaprojektowany dla dokumentów

text: Muszę popracować nad kilkoma dokumentami, potrzebuję oprogramowania, które może śledzić wszystkie modyfikacje, które wprowadzę w konkretnym pliku lub projekcie (grupie plików): czy jest coś takiego? Ważne jest to, że muszę to zrobić na jednej maszynie, więc nie potrzebuję rozwiązania rozproszonego, muszę tylko pracować z plikami txt z kodowaniem UTF-8 i plikami pdf.


title: Architektura oprogramowania dla dwóch podobnych klas, które wymagają różnych parametrów wejściowych dla tej samej metody

text: Piszę kod Java do symulacji łańcucha dostaw. Łańcuch dostaw można symulować w konfiguracji pośredniego składowania lub cross-dockingu. Napisałem więc dwa obiekty symulatora `IstockSimulator` i `XdockSimulator`. Ponieważ te dwa obiekty mają pewne wspólne zachowania (np. wykonywanie wysyłek, przybycie popytu), napisałem abstrakcyjny obiekt symulatora `AbstractSimulator`, który jest klasą nadrzędną dwóch obiektów symulatora. Abstrakcyjny obiekt symulatora posiada metodę `runSimulation()`, która pobiera parametr wejściowy klasy `SimulationParameters`. Do tej pory parametry symulacji zawierały tylko pola, które są wspólne dla obu obiektów symulatora, takie jak `randomSeed`, `simulationStartPeriod` i `simulationEndPeriod`. Jednak teraz chcę uwzględnić pola, które są specyficzne dla typu uruchamianej symulacji, tj. klasę `IstockSimulationParameters` dla pośredniej symulacji magazynowania i klasę `XdockSimulationParameters` dla symulacji przeładunkowej. Moim obecnym pomysłem jest wyjęcie metody `runSimulation()` z klasy `AbstractSimulator`, ale umieszczenie metody `runSimulation(IstockSimulationParameters)` w klasie `IstockSimulator` oraz metody `runSimulation(XdockSimulationParameters)`” w ` Klasa IstockSimulator. Martwię się jednak, że takie podejście doprowadzi do duplikacji kodu. Co powinienem zrobić? ### Edytowane Obecnie klasa `AbstractSimulator` definiuje metodę `runSimulation`, która wywołuje inne abstrakcyjne metody, które są zdefiniowane tylko przez konkretne klasy potomne. public abstract class AbstractSimulator { public void runSimulation(SimulationParameters params) { int startPeriod = params.startPeriod; int okreszakończ = params.okreszakończenia; for (int t = początekokres; t < koniecokres; ++t) { prześlijRaporty(t); dokonywaćPrzesyłek(t); popytPrzybywa(t); } } protected abstract void submitReports(int t); chronione abstrakcyjne void makeShipments(int t); } Jedną z różnic między `IstockSimulator` a `XdockSimulator` jest to, że w konfiguracji pośredniego magazynowania, zakłady poziomu 3 przesyłają raporty do zakładów poziomu 2, podczas gdy w konfiguracji cross-dockingu zakłady poziomu 3 przesyłają raporty do zakładów poziomu 1 . Zatem `IstockSimulator` i `XdockSimulator` mają własne implementacje metod `submitReports` i `makeShipments`. ### Co dla mnie zadziałało Dziękuję za odpowiedzi. Zainspirowany Twoimi odpowiedziami i po przespaniu tego, wymyśliłem własną odpowiedź opartą na refaktoryzacji. Zobacz poniżej.


title: Cienka przeglądarka internetowa klienta?

text: Wiele razy słyszałem, jak ludzie mówili, że konkretny sprzęt ma działać z przeglądarką internetową typu cienki klient. Ale czy z definicji „cienkiego klienta” wszystkie przeglądarki nie kwalifikują się jako cienki klient? ponieważ jedyne, co robią, to renderowanie informacji przesyłanych ze zdalnego serwera, minimalizując pracę po stronie przeglądarki?


title: Skompilowany kod jak zarządzanie komórkami w arkuszu kalkulacyjnym? (automatyczna aktualizacja)

text: Okej, więc jestem w pełni świadomy, jak arkusze kalkulacyjne zarządzają komórkami, budują wykresy zależności, gdzie gdy jedna komórka się zmienia, informuje wszystkie inne komórki, które są od niej zależne, że się zmieniła. Więc mogą stamtąd aktualizować. Myślę, że sposób, w jaki aktualizują, obejmuje ponowną ocenę formuł przechowywanych jako ciągi lub ponowną ocenę abstrakcyjnego drzewa składni, które moim zdaniem jest przechowywane inaczej i może być szybsze. Coś w tym stylu. To, co chcę zrobić, to zarządzać kilkoma zmiennymi w moim kodzie, więc nie muszę ich aktualizować we właściwy sposób, co byłoby koszmarem. Ale chcę też, żeby był znacznie szybszy niż arkusze kalkulacyjne. A ponieważ nie szukam żadnej funkcjonalności tak wspaniałej, jak w tych arkuszach kalkulacyjnych, po prostu doszedłem do wniosku, że musi być sposób na bardzo szybką implementację tej funkcjonalności. Zwłaszcza, że nie muszę modyfikować komórek po kompilacji, chyba że byłoby to możliwe. Jestem bardzo nowy w programowaniu, więc nie mam pojęcia. Jednym z przykładów może być posiadanie generatora kodu, który generuje kod, który robi to za mnie. Ale nie mam pojęcia, jak wyglądałby wygenerowany kod. W szczególności, jak dokładnie zmienne informują innych o konieczności aktualizacji i co te zmienne robią, aby zaktualizować? Szukam wszelkiego rodzaju pomysłów. Programowanie nie jest moją pracą, ale mimo wszystko miałem nadzieję, że będę miał jakiś system, który bardzo by mi pomógł z niektórymi rzeczami. Oczywiście ostatnio dużo programuję, więc nadal mogę programować. Po prostu nie mam pełnego zakresu rzeczy. Szukam wszelkiego rodzaju pomysłów, z góry bardzo dziękuję! Pomóż mi również z tagami. Znam głównie C# i Javę i mam nadzieję, że zaimplementuję to w jednym z tych języków i mam nadzieję, że zostanie to w tych tagach. Wymuszenie tego w jakimś tagu arkusza kalkulacyjnego nie byłoby dokładne.


title: Jak poprawnie pracować w lokalnym hoście?

text: Używam MAMP (tylko i na przykład) do tworzenia aplikacji internetowych bez konieczności ciągłego przesyłania i pobierania przez FTP. Jestem pewien, że to właściwy sposób na przetestowanie projektu, ale nie jestem pewien, czy robię to dobrze. Po tym, jak jestem zadowolony z projektu, muszę zmienić na każdej stronie bazy danych MySQL i większość linków itp. Czy istnieje obejście tego? Jak należy tego używać? Z góry dziękuję!


title: Jak reklamować się jako programista?

text: Zauważyłem, że jest to częsty problem wśród _młodzieży_ z dziedzin technicznych takich jak nasza. Na początku naszej kariery po prostu nie wiemy, jak sprzedać się naszym pracodawcom, a przypadkowy facet #57 (który jest programistą, ale nie tak dobry jak ty - technicznie) kończy się podwyżką lub awansem, ponieważ jest wie, jak się komunikować i promować lepiej niż ty. Wielu prawdopodobnie widziało to w przeszłości, a z pewnością o wiele więcej będzie w przyszłości. Jaki rodzaj umiejętności/zdolności (technicznych lub innego rodzaju) Twoim zdaniem należy wskazać podczas rozmowy kwalifikacyjnej lub prośby o podwyżkę, poza wymienieniem wszystkich języków programowania i bibliotek, które znasz?


title: Weryfikacja jako QA - ma sens?

text: Przygotowując pracę magisterską znalazłem kolejną interesującą rozbieżność. Podczas gdy niektóre książki mówią, że weryfikacja w warunkach statycznej analizy produktów pracy jest kontrolą jakości (poszukiwaniem defektów), inne mówią, że jest to w rzeczywistości zapewnienie jakości, ponieważ proces sprawdzania zmniejsza prawdopodobieństwo wystąpienia rzeczywistych wad, gdy te produkty zostaną wykorzystane do produkcji produktu . Waham się, ponieważ oba wydają się poprawne: jest to sposób na sprawdzenie pod kątem wad (odstępstw od wymagań, wad projektowych itp.), więc wygląda to na kontrolę jakości, ale jest to również proces, którego nie trzeba robić, a jeśli jest , może dać lepszą jakość.


title: Jak wygenerować „bezpieczne językowo” UUID?

text: Zawsze chciałem używać losowo generowanych ciągów dla identyfikatorów moich zasobów, więc mogłem mieć krótsze adresy URL, takie jak ten: /user/4jz0k1 Ale nigdy tego nie robiłem, ponieważ martwiłem się o losowe generowanie ciągów tworzących rzeczywiste słowa, np.: /user/ chuj. Wiąże się to z dwoma problemami: może być mylące lub nawet obraźliwe dla użytkowników, a także może zepsuć SEO. Potem pomyślałem, że wszystko, co muszę zrobić, to ustawić stały wzór, taki jak dodawanie liczby co 2 litery. Byłem bardzo zadowolony z mojej metody 'generate_safe_uuid', ale potem zdałem sobie sprawę, że jest ona lepsza tylko dla SEO, a gorsza dla użytkowników, ponieważ zwiększyła proporcję faktycznie generowanych słów, np.: /user/g4yd1ck5 Teraz myślę, że ja może utworzyć metodę 'replace_numbers_with_letters' i sprawdzić, czy nie utworzyła żadnych słów względem słownika lub czegoś podobnego. Jakieś inne pomysły? ps. Kiedy to piszę, zdałem sobie również sprawę, że sprawdzanie słów w więcej niż jednym języku (np. angielskim i francuskim, hiszpańskim itp.) byłoby bałaganem i znów zaczynam kochać identyfikatory zawierające tylko liczby. **AKTUALIZACJA** Niektóre linki, które każdy powinien przeczytać: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx http://blogs.msdn.com/b/oldnewthing/archive/2008/06/ 27/8659071.aspx


title: Związek między SOA i OOA

text: Thomas Erl w swojej witrynie definiuje SOA w następujący sposób: > Przetwarzanie zorientowane na usługi reprezentuje platformę przetwarzania rozproszonego nowej generacji. Jako taki, obejmuje wiele rzeczy, w tym własny paradygmat projektowania i zasady projektowania, katalogi wzorców projektowych, języki wzorców, odrębny model architektoniczny oraz powiązane koncepcje, technologie i ramy. To zdecydowanie brzmi jak zupełnie nowa kategoria, która jest równoległa do orientacji obiektowej. Prawie taki, w którym można by oczekiwać istnienia zupełnie nowego języka. Podobnie jak proceduralny C i obiektowy C#. Oto moje rozumienie: w prawdziwym życiu nie mamy zupełnie nowego języka dla SOA. Większość aplikacji, które mają architekturę SOA, ma pod sobą projekt zorientowany obiektowo. SOA to „strategia”, dzięki której cała aplikacja/usługa jest rozproszona i niezawodna. SOA _wymaga_ pracy pod spodem OOPS. Czy to jest poprawne? Gdzie SOA (jeśli w ogóle się zgadza) wpisuje się w praktyki programowania obiektowego? Edycja: Dzięki odpowiedziom dowiedziałem się, że OOA i SOA współpracują ze sobą i nie można ich porównać (w sposób „co jest lepsze”). Zmieniłem tytuł na „Relacja między SOA i OOA” zamiast „Porównanie”.


title: Interfejsy i abstrakcja: zajmuje więcej czasu?

text: W firmie, w której pracuję, chcę ulepszyć sposób, w jaki piszemy oprogramowanie: projektowanie naszych aplikacji bardziej „SOLID”. Od kilku tygodni jesteśmy w nowym projekcie i staram się zastosować w jego projektowaniu kilka dobrych praktyk. Na przykład luźne sprzężenie poprzez programowanie przeciwko interfejsowi zamiast konkretnej klasy, wstrzykiwanie zależności / odwrócenie kontroli, separacja obaw itp. To wszystko ma być trampoliną do testowania sterowanego rozwoju w (dalekiej) przyszłości. W tworzonej przez nas aplikacji musimy wyliczyć punktację w zależności od wypełnienia ankiety przez użytkownika (ankieta posiada kategorie, które same mają pytania/odpowiedzi). Podzieliłem obliczenia na wiele klas i kolejne interfejsy (obliczanie wyniku pytania, kategorii, ankiety itp.). Ponadto w interfejsie (ASP.NET Web Forms) podzieliłem wiele części stron na oddzielne kontrolki użytkownika. Na przykład: 'widget', który pokazuje skumulowane wyniki w aplikacji lub widżet pokazujący wszystkie pliki związane z aplikacją. To wszystko są oddzielne kontrolki użytkownika. Jesteśmy teraz w projekcie od kilku tygodni i stwierdzam, że niektórzy z moich współpracowników (zwłaszcza ci starsi) narzekają na: * Brak możliwości bezpośredniego znalezienia implementacji interfejsu, ale konieczność „szukania” implementacja * Potrzeba więcej czasu, aby znaleźć implementację określonego znacznika na pierwszej stronie. Nie widzą również sensu dzielenia oddzielnej funkcjonalności na kontrolki użytkownika, ponieważ czasami (zwykle) kontrolka użytkownika jest używana tylko na jednej stronie. Z drugiej strony uważam, że działa lepiej, ponieważ utrzymuje kod strony napięty i szczupły. Moje pytanie brzmi: czy stosuję dobre praktyki w niewłaściwy sposób, czy po prostu potrzeba czasu, aby się do tego przyzwyczaić? **Uwaga** : Do niedawna tworzyliśmy oprogramowanie ściśle powiązane (np. klasy statyczne, nigdy nie używaj interfejsów, używaj kontroli użytkownika tylko wtedy, gdy jest to konieczne).


title: Najpierw dokumentacja kodu?

text: Czy ktoś próbował kiedyś najpierw stworzyć kompletną dokumentację kodu, zanim faktycznie go napiszesz? Myślałem o tym wcześniej, ponieważ pomyślałem, że pomoże napisać konkretny interfejs i upewni się, że twój początkowy projekt nie będzie sfatygowany, przez zastanowienie się nad interakcjami klas. Czy to dobry pomysł? Czy ktoś tego próbował? Łokieć


title: Nawiasy wcinające/formatujące, takie jak { } i [ ]

text: Czy istnieje aplikacja, która może łatwo wyrównać/formatować nawiasy, takie jak [ ] { i } ? np. zmienić w               {       {       }     }


title: Różnica między językami zarządzanymi a językami skompilowanymi?

text: Jestem zdezorientowany, gdy ludzie próbują odróżnić języki kompilowane od języków zarządzanych. Z doświadczenia rozumiem, że większość uważa języki skompilowane za C,C++, podczas gdy języki zarządzane to Java,C# (oczywiście jest ich więcej, ale to tylko kilka przykładów). Ale jaka jest dokładnie podstawowa różnica między tymi dwoma rodzajami języków? Rozumiem, że każdy program, niezależnie od tego, jakiego języka używasz, jest zasadniczo "skompilowany" w kod maszynowy niskiego poziomu, który jest następnie interpretowany, więc sprawia to, że języki zarządzane są podzbiorem języków kompilowanych (to znaczy, że wszystkie języki zarządzane są języki skompilowane, ale nie na odwrót)?


title: sprzedaż produktu komercyjnego z zamkniętym kodem źródłowym w wirtualnej skrzynce (GPL)

text: Czy mogę sprzedawać komercyjny produkt o zamkniętym kodzie źródłowym w wirtualnej skrzynce wirtualnej? Jest to niezwykle przydatne, gdy chcesz dostarczać użytkownikom oprogramowanie po stronie serwera, a nie mieszać się z różnymi systemami operacyjnymi (windows/osx). Czytając niektóre odpowiedzi u programistów, uświadamiam sobie, że nie powinno to stanowić problemu, ponieważ moje oprogramowanie nie łączy biblioteki GPL, a to jest praktycznie największym zmartwieniem GPL FOSS. Więc jeśli używam oprogramowania na licencji GPL tylko **dołączonego** z oprogramowaniem o zamkniętym kodzie źródłowym, to w porządku?


title: Czy samodzielne administrowanie aplikacjami platformy Azure jest dobrą praktyką?

text: W wielu przykładach dotyczących platformy Azure widzę, że dzieje się dużo samo-administracji: aplikacja będzie testować obecność zewnętrznego systemu, takiego jak kolejka lub baza danych, i tworzy niezbędne struktury potrzebne do funkcjonowania. To zachowanie wydaje się sprzeczne z bardziej tradycyjnym środowiskiem aplikacji konfigurowanym przez administratora lub osobną aplikacją konfiguracyjną działającą w imieniu administratora. Jak dotąd największą wadą, jaką mogę zaobserwować, jest to, że aplikacja musiałaby mieć pewien poziom uprawnień administracyjnych do konfigurowanych usług, co może prowadzić do zwiększonej podatności. Jednak podejście Code-First w Entity Framework również wydaje się sugerować praktykę zezwalania aplikacji na pracę na poziomie administratora na zasobach, których potrzebuje do działania. Czy jest to paradygmat, którego powinienem spodziewać się więcej, i czy istnieją przekonujące powody, aby uznać go za „dobrą praktykę”?


title: Pomoc dotycząca definicji programowania dynamicznego w Cormen

text: Czytam o „Programowaniu dynamicznym” z Cormen. Na początku rozdziału jest napisane (odnosząc się do terminu Programowanie Dynamiczne): > „Programowanie” w tym kontekście odnosi się do metody tabelarycznej, a nie do pisania > kodu komputerowego. Nie do końca rozumiem, co to stwierdzenie oznacza. Rozumiem, że algorytmy programowania dynamicznego wyszukują rozwiązania, ale mam wrażenie, że ten punkt definiuje coś fundamentalnego w programowaniu dynamicznym, czego nie rozumiem.Jakaś pomoc?


title: Czy początkowe zmienne/elementy składowe z podkreśleniem mogą zdziwić kompilator?

text: Od czasów liceum uczono mnie, że definiowanie zmiennych takich jak: „int _a;” lub „int __a;” powinno być uważane za złą praktykę, ponieważ ostatecznie mogłoby to zagadać kompilatory, które używają zmiennych zaczynających się od podkreślenia do nazywania zmiennych tymczasowych. O ile wiem, jest to powód, dla którego niektórzy ludzie lubią przesuwać podkreślenie na końcu nazwy, na przykład: `int a_;` Jednak widzę wszędzie dużo kodu, który korzysta ze zmiennych rozpoczynających się od podkreślenia. I ten kod jest dość dobrze kompilowany zarówno z Visual Studio 2010, jak i g++ 4.x. Zastanawiam się więc: czy to nie jest obecnie problem? Czy współczesne kompilatory są mądrzejsze w zakresie konwencji nazewnictwa?


title: Czy przeglądarki internetowe powinny zawierać popularne biblioteki frameworków internetowych?

text: Jakie są powody, dla których przeglądarki internetowe nie mają biblioteki popularnych frameworków internetowych. Na przykład, jeśli strona internetowa zawiera jQuery, dlaczego przeglądarka nie miałaby mieć swojej własnej wersji statycznej, która jest oddzielona od normalnych elementów buforowanych? Wyobrażam sobie, że większość bibliotek zostałaby wstępnie załadowana do pamięci podręcznej przeglądarki, zanim jakiekolwiek żądanie zostanie wysłane z dokumentem zawierającym bibliotekę, wtedy usunie to początkowe żądanie do CDN i będzie miało potencjalną poprawę wydajności. Ale jeśli „wstępnie załadowana pamięć podręczna” przeglądarki nie zawiera biblioteki, przeglądarka powinna zażądać zasobu zawartego w dokumencie.


title: Jakie są typowe przykłady tablicy mieszającej?

text: Zastanawiałem się tylko, czy istnieją jakieś „standardowe” przykłady, których każdy używa jako podstawy do wyjaśnienia natury problemu, który wymaga użycia tablicy mieszającej. Jakie są dobrze znane problemy w prawdziwym świecie, które widzą ogromne korzyści z używania tabeli mieszającej? **Pomocne może być również krótkie wprowadzenie lub wyjaśnienie, dlaczego problem jest korzystny ze względu na użycie tablicy mieszającej!**


title: Czego potrzebuję, aby stworzyć rozszerzenie PHP w lampp?

text: Właściwie mam problem z systemem, muszę dostarczyć system do klientów i był zbudowany w PHP, JS, ShellScript i SQL. Chciałbym zaszyfrować kod lub ukryć go przed oczami innych! Wtedy ktoś ze społeczności powiedział mi o zbudowaniu własnego rozszerzenia PHP, brzmi to dla mnie jak świetny pomysł, ponieważ nie będzie z głównym kodem systemu. Ale mam problem z robieniem tego w ten sposób, jeśli programista dostanie się do rozszerzeń i je znajdzie, cała ciężka praca zniknie. W takim razie jestem tutaj, aby ponownie zapytać o tę sprawę. Jaki jest najlepszy sposób na ukrycie logiki biznesowej przed osobami trzecimi? Wiem, że są takie rzeczy jak IonCube, Zend Guard i wiele innych. Ale szukam czegoś, co mogę zbudować sam. Czy rozszerzenie PHP jest właściwą drogą do naśladowania? A może jakiś system Half SaaS z zależnościami (Business Logic) na zdalnym serwerze? **Informacje o środowisku** System operacyjny: Kernel Linux 2.6.37.1-1.2 - LAMPP (Apache 2.2, MySQL 5.5 PHP 5.3.8) W php generalnie rozszerzenie znajduje się w `/php/ext/` ale w lampp nie mam pomysł gdzie to jest, właśnie znalazłem folder `/opt/lampp/lib/php/extensions/` czy to właściwe miejsce?


title: Izolowanie danych testowych w testach akceptacyjnych

text: Szukam wskazówek, jak odizolować moje testy akceptacyjne. Obecnie problemem, który mam z możliwością równoległego uruchamiania testów, są rekordy bazy danych, które są manipulowane w testach. Napisałem helpery, które zajmują się wstawianiem i usuwaniem przed wykonaniem testów, aby upewnić się, że stan jest poprawny. Ale teraz nie mogę uruchamiać ich równolegle w tej samej bazie danych bez unikatowego generowania pól danych testowych dla każdego testu. Na przykład. Testując tworzenie wiersza usunę wszystko gdzie kolumna A = foo i kolumna B = bar Następnie przejdę po interfejsie użytkownika w teście i utworzę rekord z kolumną A = foo i kolumną B = bar. Testowanie, czy nie można utworzyć zduplikowanego wiersza. Wstawię wiersz z kolumną A = foo i kolumną B = bar, a następnie użyję interfejsu użytkownika, aby spróbować zrobić dokładnie to samo. Spowoduje to wyświetlenie komunikatu o błędzie w interfejsie użytkownika zgodnie z oczekiwaniami. Testy te działają doskonale, gdy są prowadzone osobno i seryjnie. Ale nie mogę uruchomić ich w tym samym czasie z obawy, że jeden utworzy lub usunie rekord, którego oczekuje drugi. Jakieś wskazówki, jak lepiej je ustrukturyzować, aby można je było uruchamiać równolegle?


title: Czy to dobry użytek z klasy bazowej?

text: Opracowuję kilka sterowników sprzętowych, które uzyskują dostęp do rejestrów. Na przykład mam kilka zajęć. ClassRegisterBlock1, ClassRegisterBlock2. W każdej z tych klas definiują bity do manipulowania, przesunięcia rejestrów itp. i weryfikują parametry. Jednak wszystkie funkcje wykorzystują ten sam sposób dostępu do sprzętu, poprzez mapę pamięci, a ponadto istnieją wspólne funkcje, takie jak setRegisterBit. Planowałem umieścić wspólne funkcje, takie jak setRegisterBit, CreateMemoryMap itp. w klasie bazowej, a następnie dziedziczy po niej ClassRegisterBlock(x). Czy to rozsądne użycie klasy bazowej? ściśle mówiąc, ClassRegisterBlock nie jest rodzajem klasy RegisterFunctions. Czy istnieje lepszy sposób na zrobienie tego? Używam C++.


Szukam licencji na oprogramowanie, która ma silniejszą ochronę niż AGPLv3. Licencja GPL mówi, że kiedy rozpowszechniamy oprogramowanie, musimy zapewnić użytkownikowi sposób na pobranie kodu źródłowego. Jednak w tej licencji jest luka, w FAQ GPL stwierdzono (patrz poniżej), że nie jest ona uważana za „dystrybucję”, jeśli firma używa jej jako projektu wewnętrznego. Czy jest jakaś licencja, która wymaga rozpowszechniania kodu źródłowego, nawet jeśli jest on używany tylko w wewnętrznym projekcie firmy? PS, GPL FAQ Sekcja „Dystrybucja wewnętrzna”: > **Czy wykonuje i wykorzystuje wiele kopii w ramach jednej organizacji lub firmy > „dystrybucja”?** > Nie, w takim przypadku organizacja robi kopie tylko dla siebie. W konsekwencji > firma lub inna organizacja może opracować zmodyfikowaną wersję i zainstalować ją za pośrednictwem własnych > urządzeń, nie dając > zgody personelu na udostępnianie zmodyfikowanej wersji osobom postronnym. > > Jednak gdy organizacja przekazuje kopie innym organizacjom lub > osobom, jest to dystrybucja. W szczególności dystrybucją jest dostarczanie kopii > wykonawcom do użytku poza siedzibą firmy.


title: Czym jest zwinna metodologia?

text: Czy można w prostych zdaniach wyjaśnić metodykę zwinną?


title: Standardy kodowania testów jednostkowych

text: Zwykle mówiąc o standardach kodowania odnosimy się do kodu samego programu, ale co z testami jednostkowymi? Czy istnieją pewne wytyczne dotyczące standardów kodowania, które są unikalne dla testów jednostkowych? Czym oni są?


Jestem programistą stron internetowych i chcę przenieść moją aplikację internetową do chmury. Czy ktoś mógłby przeprowadzić mnie przez odpowiednie kroki. Czy podoba im się instalacja lampy, którą mi przypiszą, czy też będę nadal hostować moje dane i skrypty?. Czy z wystawieniem mojej aplikacji na rynek Salesforce wiążą się opłaty? Dziękuję.


title: Kiedy deklarować @throws z adnotacją Scala — abstrakcyjny element nadrzędny czy konkretna implementacja?

text: W tym pytaniu StackOverflow zapytałem o zachowanie adnotacji `@throws` w Scali. Teraz, gdy rozumiem, jak to działa, chcę zapytać o najlepsze praktyki z jego użyciem. Oto repost mojego kodu z tego pytania: abstract class SFoo { def bar(): Unit } class SFoobar extends SFoo { @throws[Exception] override def bar(): Unit = { throw new Exception("hi there") } } Problem polega na tym, że jeśli zadeklaruję zmienną jako `SFoo` w Javie, ale utworzę jej wystąpienie jako `SFoobar`, kompilator Javy nie będzie w stanie wykryć sprawdzanego wyjątku i wystąpi wyjątek w czasie wykonywania. Dlatego skłaniałbym się do zadeklarowania `@throws` w klasie nadrzędnej `SFoo`. Ale powiedzmy, że mam inną konkretną implementację `SFoo`: class SBarfoo extends SFoo { override def bar(): Unit = { println("tu nie ma wyjątku!") } } Czy w tym przypadku należy zadeklarować `@throws` w klasie nadrzędnej, jeśli jedna z jej implementacji nie zgłasza wyjątku? Jaka jest tutaj najlepsza praktyka? (Przepraszam za subiektywne pytanie.)


title: Zalecenia dotyczące znalezienia pracy doradczej w niepełnym wymiarze godzin

text: Chociaż mam pracę programistyczną na pełny etat, od czasu do czasu wykonywałem płatną pracę w niepełnym wymiarze godzin wieczorami/weekendami dla różnych osób, które skontaktowały się ze mną w związku z projektami open source, nad którymi pracowałem. To fajny sposób na zarobienie trochę dodatkowej gotówki, ale oczywiście nie zawsze jest to dostępne. Moje pytanie brzmi: jaki jest dobry sposób na wypromowanie swojego nazwiska, aby zrobić kilka małych projektów? Widziałem kilka serwisów typu programiści do wynajęcia, ale nie wiem, którym mogę zaufać i czy jest zbyt wielu chętnych do pracy za bardzo niskie ceny. Poza tym, ponieważ mam siedzibę w Wielkiej Brytanii, chciałbym czegoś, co nie zakładałoby, że mam konto bankowe w USA.


title: Praca z spokojnym API; jakie zasoby chciałbyś mieć na początek?

text: Kiedy pracujesz z opartym na sieci, spokojnym interfejsem API, z jakimi zasobami chciałbyś pracować od samego początku podczas tworzenia systemu przeciwko niemu? * Dokumentacja internetowa? * Przykład pracy? Prosty? Złożony? * SDK, który oddziela niektóre szczegóły i pozwala od razu na dogłębne opracowanie? * Wszystkie powyższe? Z twoimi odpowiedziami, jeśli dostępne są strony internetowe z przykładami, byłoby fajnie. Z góry doceń wszelką pomoc.


title: Jak chronić sieć peer-to-peer przed nieodpowiednimi treściami?

text: Tworzę prostą aplikację peer-to-peer w .Net, która powinna umożliwiać użytkownikom udostępnianie określonych treści (plików tekstowych i graficznych). Jak dowiedziałem się z mojego ostatniego pytania, nieodpowiednie treści można „stosunkowo” łatwo zidentyfikować / kontrolować w scentralizowanym środowisku. Ale co z siecią peer-to-peer, jakie są najlepsze metody ochrony zdecentralizowanego systemu przed niechcianymi (nielegalnymi) treściami? W tej chwili widzę tylko dwie następujące metody: 1. Protokół (zestaw reguł) określa, jakie dane (np. tylko pliki .txt i jpg, nie większe niż 20 KB itp.) mogą być udostępniane przez p2p- sieć i wszyscy klienci (rówieśnicy) muszą zaimplementować ten protokół. Jeśli peer tego nie robi, zostaje zablokowany przez innych peerów. Zaleta: łatwa do wdrożenia. Wada: Nie jest możliwe zdefiniowanie idealnego protokołu (myślę, że filtry e-mail-spam mają ten sam problem) 2. Należy wdrożyć jakiś system oceny/reputacji (podobny do przepełnienia stosu), aby można było zidentyfikowane / zablokowane przez innych użytkowników. Pro: Byłoby bardzo dokładne. Con: Byłby powolny i moim zdaniem technicznie bardzo trudny do wdrożenia. Czy istnieją inne/lepsze rozwiązania? Każda odpowiedź lub komentarz jest bardzo mile widziany.


title: Bóle głowy wykorzystujące rozproszoną kontrolę wersji dla tradycyjnych zespołów?

text: Chociaż używam i lubię DVCS w moich osobistych projektach i mogę całkowicie zobaczyć, jak ułatwia to zarządzanie wkładem do twojego projektu od innych (np. typowy scenariusz Github), wydaje się, że w przypadku „tradycyjnego” zespołu mogą wystąpić pewne problemy dotyczące scentralizowane podejście stosowane przez rozwiązania takie jak TFS, Perforce itp. (przez „tradycyjne” rozumiem zespół programistów pracujących w biurze nad jednym projektem, którego „nie posiada” żadna osoba, z potencjalnie wszystkimi dotykającymi tego samego kodu). te problemy przewidziałem na własną rękę, ale proszę dołączyć do innych rozważań. W tradycyjnym systemie, gdy próbujesz zaewidencjonować swoją zmianę na serwerze, jeśli ktoś inny wcześniej zaewidencjonował sprzeczną zmianę, jesteś zmuszony do scalenia, zanim będziesz mógł zaewidencjonować swoją. W modelu DVCS każdy programista zaewidencjonuje swoje zmienia się lokalnie iw pewnym momencie przenosi do innego repozytorium. To repozytorium ma następnie gałąź tego pliku, którą zmieniły 2 osoby. Wydaje się, że teraz ktoś musi zająć się tą sytuacją. Wyznaczona osoba w zespole może nie mieć wystarczającej wiedzy o całej bazie kodu, aby móc poradzić sobie ze scalaniem wszystkich konfliktów. Więc teraz został dodany dodatkowy krok, w którym ktoś musi podejść do jednego z tych programistów, powiedzieć mu, aby pociągnął i wykonał scalenie, a następnie pchnął ponownie (lub musisz zbudować infrastrukturę, która zautomatyzuje to zadanie). Ponadto, ponieważ DVCS sprawia, że praca lokalna jest tak wygodna, programiści mogą zgromadzić kilka zmian w swoich lokalnych repozytoriach przed wypchnięciem, czyniąc takie konflikty częstszymi i bardziej skomplikowanymi. Oczywiście, jeśli wszyscy w zespole pracują tylko na różnych obszarach kodu, nie stanowi to problemu. Ale ciekawi mnie przypadek, w którym wszyscy pracują nad tym samym kodem. Wygląda na to, że scentralizowany model wymusza szybkie i częste rozwiązywanie konfliktów, minimalizując potrzebę dokonywania dużych, bolesnych fuzji lub zmuszania kogokolwiek do „pilnowania” głównego repozytorium. Tak więc dla tych z Was, którzy używają DVCS ze swoim zespołem w swoim biurze, jak radzicie sobie z takimi przypadkami? Czy uważasz, że Twój codzienny (lub, co bardziej prawdopodobne, tygodniowy) przepływ pracy ma negatywny wpływ? Czy są jakieś inne względy, o których powinienem wiedzieć, zanim polecę DVCS w moim miejscu pracy?


title: Jak zostać ninja JavaScript?

text: Chcę wybrać JavaScript jako moją główną dziedzinę rozwoju, obok HTML i CSS, aby zostać programistą powszechnie znanym jako **programista front-endowy**. Ale nie wiem, jak zostać profesjonalistą JavaScript. Przeczytałem wiele książek i nauczyłem się fragmentów, w tym typów danych, składni, użycia narzędzi (takich jak IDE, debuggery itp.), jQuery itp. Ale kiedy patrzę na niektóre wyrafinowane kody JavaScript, w tym słynne biblioteki, jestem jak „ Nigdy nie mogłem napisać tego kodu”. Co tu jest nie tak? Jaki powinienem zrobić krok, którego nie zrobiłem? Czuję, że czegoś mi brakuje, aby zostać profesjonalnym programistą JavaScript. Oglądałem też filmy szkoleniowe, w tym filmy Douglasa Crockforda w Yahoo Theater.


title: Jak zaprojektowano Gita?

text: Moje miejsce pracy niedawno przeszło na Git i uwielbiam je (i nienawidzę!). Naprawdę to kocham i jest niezwykle potężny. Jedyną częścią, której nienawidzę, jest to, że czasami jest zbyt potężny (i może trochę zwięzły / mylący). Moje pytanie brzmi... **Jak zaprojektowano Git?** Używając go tylko przez krótki czas, masz wrażenie, że może obsłużyć wiele niejasnych przepływów pracy, których inne systemy kontroli wersji nie są w stanie. Ale pod spodem jest też elegancko. I szybko! Niewątpliwie jest to po części zasługą talentu Linusa. Ale zastanawiam się, czy ogólny projekt git był oparty na czymś? Czytałem o BitKeeper, ale konta są skąpe na szczegóły techniczne. Kompresja, wykresy, pozbycie się numerów rewizji, nacisk na rozgałęzienia, przechowywanie, zdalne… Skąd to wszystko się wzięło? Linus naprawdę znokautował go z parku i za pierwszym razem! Jest całkiem dobry w użyciu, gdy miniesz krzywą uczenia się.


title: Git śledzi _linie_ kodu. Czy jest coś, co śledzi _słowa_?

text: W git, jeśli zmienię znak w linii, cała linia jest uważana za zmienioną. Nie wiem zbyt wiele, ale wydaje się, że stackexchange śledzi zmiany słowo po słowie w historii edycji. Czy istnieje możliwość zrobienia takiego git, czy jest coś innego, co to robi?


title: O jakich technologiach chmurowych powinni wiedzieć architekci aplikacji?

text: W chmurze dzieje się tak wiele, akronimy takie jak PaaS, SaaS, IaaS (jeszcze więcej?), że tracę orientację, które technologie są ważne (w ramach każdej kategorii), jak istotna jest każda z nich. Jakie są podstawowe technologie chmurowe, o których architekci powinni wiedzieć w każdej kategorii?


title: Organizowanie członków klasy w odniesieniu do modyfikatora dostępu

text: Jeśli spojrzymy na typową implementację Klasy, zwykle widzimy prywatnych członków zdefiniowanych na początku i publicznych (głównie funkcji i akcesorów) zdefiniowanych na dole. Czy jest to standard branżowy uzgodniony przez wiele osób? Co powiesz na utrzymanie prywatnych członków pod koniec, ponieważ aktualizacje i dodatki są zwykle wykonywane na członkach publicznych (głównie funkcje), aby naprawić błąd lub zapewnić ulepszenia, więc nie musimy przewijać w dół do końca, aby dostać się do definicji funkcji Sekcja. Rozumiem, że dobre IDE pozwolą nam przeskoczyć do konkretnego atrybutu, ale biorąc pod uwagę inne czynniki, takie jak przegląd kodu, wygodniej jest mieć publiczne definicje na początku. Jaki jest najbardziej akceptowany standard dla organizacji członkowskich klasy?


title: Z perspektywy czasu, czy dobrym pomysłem było użycie trójwartościowej logiki do porównań SQL NULL?

text: W SQL NULL oznacza „nieznaną wartość”. Zatem każde porównanie z NULL daje NULL (nieznane), a nie PRAWDA lub FAŁSZ. Z koncepcyjnego punktu widzenia ta trójwartościowa logika ma sens. Z praktycznego punktu widzenia każdy uczący się języka SQL raz po raz popełnił klasyczny błąd „WHERE myField = NULL” lub na własnej skórze przekonał się, że „NOT IN” nie robi tego, czego można by się spodziewać, gdy obecne są wartości NULL . Mam wrażenie (proszę mnie poprawić, jeśli się mylę), że przypadki, w których ta trójwartościowa logika pomaga (np. `WHERE myField IS NOT NULL AND myField <> 2` można skrócić do `WHERE myField <> 2`) są rzadkie i w takich przypadkach ludzie i tak używają dłuższej wersji dla jasności, tak jak dodajesz komentarz przy użyciu sprytnego, nieoczywistego hacka. **Czy jest jakaś oczywista zaleta, której mi brakuje?** A może istnieje ogólna zgoda wśród społeczności programistów, że to pomyłka?


title: Czy wiele ekranów komputerowych zmniejsza wydajność?

text: Czytałem wspaniały post Trenta Waltona: UniTasking, który zawiera wiele przydatnych myśli i pomysłów oraz kilka dobrych linków do kilku zgrabnych aplikacji OS X. (którego zacząłem używać zaraz po przeczytaniu bloga.) Ale zauważyłem zabawny pomysł. Wiele osób bardzo negatywnie wypowiadało się na temat korzystania z wielu ekranów. Dalej do Toma Cunninghama: Bądź produktywny, wspomina o używaniu tylko jednego monitora jako pierwszej wskazówki, jak zwiększyć produktywność. Czy to powszechne przekonanie? A czy ktoś robił z tym jakieś testy ? Pracuję w studiu programistycznym, a standardowo mamy trzy ekrany (Macbook 15" + dwa 21"), ale dzięki temu, że codziennie zabieram ze sobą macbooka i codziennie rano go ustawiam, mogę spokojnie iść godzinę lub dwie z włączonym tylko głównym ekranem. Więc jakie są twoje przekonania na ten temat? Mit, fakt czy całkowicie indywidualne preferencje?


title: Czy ktoś może mi wyjaśnić, jaki problem rozwiązuje Core Data?

text: Wydaje się, że dane podstawowe dodają niepotrzebną warstwę złożoności. Jeśli chcesz zapisać dane utworzone natywnie przez użytkownika w aplikacji, po prostu użyj obiektu, a następnie zapisz wszystkie dane w SQLite lub z powrotem na serwerze, używając skryptu RESTful, jeśli to konieczne. Android nie ma danych podstawowych (choć jeśli ma coś podobnego, nie widziałem tego.). Jaki, do diabła, jest sens wadliwej płyty CD, z wyjątkiem bezużytecznych, niepotrzebnych narzutów dla ludzi, którzy nie potrafią pisać skryptów SQL lub CGI?


title: Czy model COCOMO jest dobrym argumentem w obronie wyboru języka programowania?

text: Obecnie chodzę na kurs tworzenia oprogramowania wbudowanego. Wykładowca wybrał J jako język architektury do tworzenia oprogramowania opartego na modelach. Sam J jest bardzo zwięzłym językiem programowania i jednym z jego głównych argumentów przemawiających za tym językiem jest jego zwięzłość. Na przykład jest to implementacja Quicksoft w J: quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#) Kolejnym argumentem jest to, że dzięki takiemu językowi i zmniejszonej liczbie znaków wprowadzasz mniej błędów i skraca się czas ich naprawy. Ponieważ mam silne doświadczenie w inżynierii oprogramowania i dzięki różnym książkom, takim jak Clean Code, Pragmatic Programmer i inne, czuję, że te argumenty nie są zasadne. Zauważyłem, że istnieje silny ruch w kierunku opisowych nazw i kodu, który czyta się jak język naturalny (w porządku, może to dotyczyć tylko aplikacji z dużą ilością logiki biznesowej i mniej matematyki). Powstaje zatem pytanie, czy naprawdę można argumentować, że użycie zwięzłego języka programowania spowoduje mniej błędów i że czas na naprawę błędu zostanie skrócony? Ponadto, ponieważ język jest zwięzły, liczba linijek kodu jest zmniejszona i otrzymasz lepszą ocenę COCOMO. Ale czy można to zastosowaćw pierwszej kolejności, czy też model COCOMO używa liczby linii kodu jako sposobu na oszacowanie całkowitego rozmiaru projektu (rozmiar projektu powinien byćtaki sam niezależnie od tego czy implementujesz go w zwięzłym czy imperatywnym języku , ale znowu, może nie zrozumiałem poprawnie modelu COCOMO)? **Aktualizacja** Dziękuję wszystkim za odpowiedzi. Trzeba przyznać, że powinienem był wyraźniej stwierdzić, że moim zamiarem było uzyskanie większej ilości informacji na temat modelu COCOMO (znowu przepraszam S.Lott). W związku z tym uważam, że obszerna odpowiedź i komentarze Thomasa Owensa najlepiej pasują do tego pytania. Dzięki jeszcze raz! :-)


title: Najlepsze darmowe narzędzie do tworzenia UML

text: Jakich darmowych narzędzi do tworzenia treści UML używasz i dlaczego jest lepszy od innych?


title: Jak nazywa się praca, w której zajmujesz się analizą systemu, zarządzaniem projektami i tworzeniem diagramów danych?

text: W ciągu ostatnich 4 miesięcy udało mi się zarządzać zespołem i trochę odejść od kodowania. Planowałem system w całości (zarówno analizę systemu, jak i zarządzanie projektami, wraz z diagramami akcji i danych), pisząc dokumentację techniczną, architekturę kodu, śledząc innych ludzi zajmujących się kodowaniem, kontrolę jakości, raporty o błędach i radzenie sobie z klientów. Musiałem odbyć dwudniowe szkolenie na temat node.js tylko po to, aby sprawdzić, czy będzie pasował do projektu, który rozważaliśmy. Czy istnieje nazwa tej pracy? Project Manager i Systems Architect wydają się nie mieć tego samego, a menedżer IT wydaje się być daleko. Chcę wiedzieć tylko po to, żebym mogła zdobyć do tego jakieś kwalifikacje i spróbować przejść do tego rodzaju pracy w pełnym wymiarze godzin.


title: Czy firmy przy zatrudnianiu programistów dbają o oceny z uczelni?

text: Większość moich kolegów ze studiów, z którymi rozmawiałem, twierdzi, że dążenie do dobrych ocen jest bezużyteczne, ponieważ firmy nie dbają o nich przy zatrudnianiu programistów. Dla nich wystarczy po prostu uczęszczanie na kursy, które mogą być ważne i tyle. Czy to prawda? Czy oceny uniwersyteckie są bezużyteczne przy opuszczaniu kampusu, czy też pracodawcy proszą o spotkanie z nimi na rozmowę kwalifikacyjną?


title: Przejrzysta obsługa OSGi w modułach

text: Mam kilka bibliotek i zacząłem je udostępniać jako moduły OSGi. Jednak były dwa wymagania: * brak nowych zależności * moduły nadal musiały działać w środowiskach innych niż OSGi Pierwsze wymaganie można łatwo rozwiązać za pomocą DS (usługi deklaratywne), jednak drugie wydaje się nieco trudniejsze. Obecnie mam działające rozwiązanie, ale nie jestem pewien, czy jest dobre. Wyjaśnię moją metodologię na prostym przykładzie, wszelkie opinie na jej temat są mile widziane. Załóżmy, że masz klasę usług o nazwie MyService. Masz również 3 usługi klienta A, B i C, z których każda wymaga wystąpienia usługi. OSGi wstrzyknęłoby instancję w razie potrzeby i wszystko byłoby dobrze. Rozważ jednak uruchomienie modułu poza kontenerem OSGi. W tym momencie sam jesteś odpowiedzialny za wstrzykiwanie odpowiednich ziaren i (jeśli to konieczne) zarządzanie singletonami, którymi jest większość usług osgi. Więc w tym momencie musisz wstrzyknąć właściwy singleton do trzech innych obiektów. Może to szybko skalować się do niemożliwych do opanowania poziomów. Moje rozwiązanie polega na ponownym wykorzystaniu wzorca fabryki: public class MyServiceFactory { private static instancja MyServiceFactory; public static MyServiceFactory getInstance() { if (instance == null) instance = new MyServiceFactory(); zwracać instancję; } prywatny MyService myService; public MyService getMyService() { // powrót do SPI if (myService == null) { ServiceLoader<MyService> serviceLoader = ServiceLoader.load(MyService.class); Iterator<MojaUsługa> iterator = serviceLoader.iterator(); if (iterator.hasNext()) mojaUsługa = iterator.next(); // jeśli nie ma modułów SPI, możesz na przykład zainicjować kod pośredniczący, domyślnie,... else myService = new MyServiceStub(); } return myService; } public void setMyService(MyService myService) { this.myService = myService; } public void unsetMyService(MyService myService) { this.myService = null; } @SuppressWarnings("unused") private void aktywuj() { instancja = to; } @SuppressWarnings("unused") private void deactivate() { instancja = null; } } Każdy kod, który wymaga instancji MyService, może po prostu wykonać: MyServiceFactory.getInstance().getMyService(); Jeśli to możliwe, użyje instancji zarządzanej przez OSGi (prywatna aktywacja/dezaktywacja) lub w razie potrzeby powróci do SPI. Czy to dobre rozwiązanie, czy są lepsze? Czy to rozwiązany problem, w którym jakoś przegapiłem oczywistą odpowiedź?


title: Jak zarządzać debatą techniczną dotyczącą WCF i internetowego interfejsu API?

text: Zarządzam teraz zespołem składającym się z około 15 programistów i utknęliśmy w punkcie wyboru technologii, w której zespół jest podzielony na dwa całkowicie przeciwne zespoły, debatujące nad użyciem WCF vs. Web API. Zespół A, który wspiera korzystanie z Web API, przedstawia następujące powody: 1. Web API to po prostu nowoczesny sposób pisania usług (Wikipedia) 2. WCF jest obciążeniem dla HTTP. Jest to rozwiązanie dla TCP, Net Pipes i innych protokołów 3. Modele WCF nie są POCO, ze względu na [DataContract] i [DataMember] oraz te atrybuty 4. SOAP nie jest tak czytelny i poręczny jak JSON 5. SOAP jest obciążeniem dla sieci w porównaniu do JSON (transport przez HTTP) 6. Brak przeciążania metod Zespół B, który obsługuje korzystanie z WCF, mówi: 1. WCF obsługuje wiele protokołów (poprzez konfigurację) 2. WCF obsługuje transakcje rozproszone 3. Wiele dobrych przykładów i historii sukcesu istnieją dla WCF (gdy Web API jest wciąż młody) 4. Duplex jest doskonały do komunikacji dwukierunkowej Ta debata trwa i nie wiem, co teraz zrobić. Osobiście uważam, że powinniśmy używać narzędzia **tylko w odpowiednim miejscu użytkowania**. Innymi słowy, lepiej użyj internetowego interfejsu API, jeśli chcemy uwidocznić usługę za pośrednictwem protokołu HTTP, ale użyj WCF, jeśli chodzi o TCP i dupleks. Przeszukując Internet nie możemy uzyskać solidnego wyniku. Istnieje wiele postów wspierających WCF, ale wręcz przeciwnie, ludzie również na to narzekają. Wiem, że charakter tego pytania może wydawać się dyskusyjny, ale potrzebujemy dobrych wskazówek, aby podjąć decyzję. Utknęliśmy w punkcie, w którym wybór technologii **przypadkowy** może sprawić, że później będziemy tego żałować. Chcemy wybierać z otwartymi oczami. Nasze użycie dotyczyłoby głównie sieci, a nasze usługi byłyby ujawniane przez HTTP. W niektórych przypadkach (powiedzmy od 5 do 10 procent) możemy jednak potrzebować transakcji rozproszonych. Co mam teraz zrobić? Jak konstruktywnie zarządzać tą debatą?


title: Czy istnieją uzasadnione powody zwracania obiektów wyjątków zamiast ich zgłaszania?

text: _To pytanie ma dotyczyć dowolnego języka programowania OO, który obsługuje obsługę wyjątków; Używam C# tylko do celów ilustracyjnych._ Wyjątki są zwykle przeznaczone do zgłaszania, gdy pojawia się problem, że kod nie może natychmiast obsłużyć, a następnie do przechwycenia w klauzuli `catch` w innej lokalizacji (zwykle zewnętrzna ramka stosu) . **P:** Czy są jakieś uzasadnione sytuacje, w których wyjątki nie są zgłaszane i przechwytywane, ale po prostu zwracane przez metodę, a następnie przekazywane jako obiekty błędów? To pytanie pojawiło się dla mnie, ponieważ metoda `System.IObserver<T>.OnError` .NET 4 sugeruje właśnie to: wyjątki są przekazywane jako obiekty błędów. Spójrzmy na inny scenariusz, walidację. Załóżmy, że postępuję zgodnie z konwencjonalną mądrością i dlatego rozróżniam typ obiektu błędu `IValidationError` i oddzielny typ wyjątku `ValidationException`, który jest używany do zgłaszania nieoczekiwanych błędów: częściowy interfejs IValidationError { } abstrakcyjna część klasy ValidationException : System. Wyjątek { public abstract IValidationError[] ValidationErrors { get; } } (Przestrzeń nazw `System.Component.DataAnnotations` robi coś całkiem podobnego.) Te typy mogą być zastosowane w następujący sposób: częściowy interfejs IFoo { } // typ niezmienny częściowy interfejs IFooBuilder // zmienny odpowiednik do przygotowania instancji powyższego typu { bool IsValid(out IValidationError[] validationErrors); // prawda, jeśli nie wystąpił błąd walidacji IFoo Build(); // wyrzuca ValidationException if !IsValid(…) } Teraz zastanawiam się, czy nie mógłbym uprościć powyższego do tego: częściowa klasa ValidationError : System.Exception { } // = IValidationError + ValidationException częściowy interfejs IFoo { } // (bez zmian) częściowy interfejs IFooBuilder { bool IsValid(out ValidationError[] validationErrors); IFoo kompilacja(); // może rzucić ValidationError lub sth. like AggregateException<ValidationError> } **P:** Jakie są zalety i wady tych dwóch różnych podejść?


title: Agile w multidyscyplinarnym środowisku

text: Pracuję dla firmy konsultingowej zajmującej się połączeniem wzornictwa przemysłowego, mechaniki, elektroniki i oprogramowania. Ze względu na swoją naturę – a może po prostu przez historię – ogólna filozofia rozwoju była wodospadem. Ale kiedy dołączyłem, byłem zaskoczony, że Agile, który teraz powiedziałbym, jest standardem branżowym, prawie nie było słyszane. Dla mnie, chociaż pozostaję sceptycznie nastawiony do Agile, dostrzegam jego zalety zarówno dla programistów, jak i klientów, i chętnie promuję jego użycie. Wydaje mi się jasne, że nie da się zbudować sprzętu w sposób Agile. „Refaktoryzacja” fizycznej rzeczy jest po prostu zbyt czasochłonna i kosztowna. Oznacza to, że zmierzamy w kierunku bycia oprogramowaniem-zwinnym i sprzętowym-wodospadem, a kierownik projektu stara się, aby te dwa elementy współpracowały ze sobą. Co gorsza, staje się to trudne, gdy mamy do czynienia z zapewnieniem klientom ostatecznego kosztu projektu. Agile nie robi uber-planów, a projekcje prędkości wymagają, aby projekt był uruchomiony i działał, a kilka sprintów zostało ukończonych, aby miały sens. Oznacza to, że mamy tendencję do przeceniania kosztów nieprzewidzianych, podnosząc nasze ceny i obniżając naszą konkurencyjność. Wydaje mi się więc, że albo sprzedajemy Agile bezpośrednio klientowi, i uzyskujemy jego zgodę na otrzymywanie nowych iteracji oprogramowania na sprint, będąc w stanie dodać do zaległości i ustalić priorytety dla następnej transzy pracy. Przekonujemy ich, że jest to sposób pracy bez bzdur, a wodospad jest nierealny i skutkuje nadmiernymi wydatkami. W tym modelu Product Owner jest od klienta. Jak zatem podchodzimy do umów, mówiąc ile pobieramy za oprogramowanie? Jak uniknąć wrażenia, że jest to otwarty strumień przychodów, w którym w naszym interesie jest trwanie tak długo, jak nam się podoba? Przyjmujemy Agile tylko wewnętrznie. Product Owner to jeden z naszych chłopaków/dziewczynek. Klient po prostu otrzymuje wersję alfa/beta/wydanie oprogramowania, jak w przypadku wodospadu. Jeśli nadejdzie czas, czy skombinujemy poślizg w końcowych fazach? Czy to nawet Agile? Krótko mówiąc, posiadanie umowy między nami a klientem wydaje się bardzo niezwinnym sposobem robienia rzeczy. A jednak wodospad jest skazany na porażkę w środowisku, w którym każdego dnia widzimy, że nie tylko nie rozumiemy problematycznej domeny w pierwszym dniu projektu, ale też nie rozumiemy tego klient. A jak robimy Agile dla oprogramowania i wodospad dla sprzętu - czy istnieje oprogramowanie, które poradzi sobie z obydwoma pod jednym parasolem? Jak poślubimy te światy?


title: Jak migrować framework serializacji XML w Javie w ściśle powiązanym systemie?

text: Pracuję dla firmy, która używa XML do przechowywania kilku zserializowanych klas Java. Framework, którego używamy, to Apache Betwixt (porzucony w 2008 r.) i jest to rodzaj bólu w utrzymaniu i rozszerzaniu (kiedyś wydawało się to dobrym wyborem). **Crash kurs w Betwixt wraz ze szczegółowym problemem:** * Obsługuje tylko publiczne gettery i settery, zarówno getter, jak i setter muszą być obecne * Nie obsługuje adapterów typu JAXB * XML ewoluuje wraz z obiektami Java, co skutkuje nadmiarowe metody w naszych klasach Nasza lista możliwych do serializacji klas XML jest znacznie ponad 150, a baza kodu może stać się bardzo nieuporządkowana, gdy wprowadzane są zmiany w definicjach. Ponieważ XML jest powiązany z programami pobierającymi i ustawiającymi Javę, możemy migrować XML tylko zachowując stare właściwości w definicjach klas. Teraz spójrz na tę zmianę: public class ThingWithText { private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } } Wynikowy kod XML wygląda mniej więcej tak: <thingWithText> <text>Cokolwiek</text> </thingWithText> Teraz rozważ zmianę w modelu polegającą na dodaniu wielu lokalizacji do `ThingWithText`: public class ThingWithText { private List<TextWithLanguage> teksty = new LinkedList<TextWithLanguage>(); // Getter musi być tutaj, aby framework rozpoznał właściwość. public String getText() { return null; } // Musi tu być, aby można było je serializować public void setText(String text) { this.texts.add(new TextWithLanguage(text)); } public List<TekstZJęzykiem> getTexts() { return texts; } public void addText(TextWithLanguage text) { texts.add(text); } } public class TextWithLanguage { private Locale locale = // pominięte; prywatny tekst ciągu; public TextWithLanguage(String text) { this.text = text; } // Pominięte pobierające i ustawiające } XML wygląda teraz tak: <thingWithText> <texts> <text locale="en">Cokolwiek</text> </texts> </thingWithText> Teraz XML nie wygląda źle ani cokolwiek, ale nadal pozostawia klasę `ThingWithText` z kilkoma problemami: * Setter dla nieistniejącego pola * Getter, który zawsze zwraca wartość null, może powodować wyjątki, ponieważ rzeczy nadal się kompilują **Moje pytania brzmią:** decyzja, żeby coś z tym zrobić, i wydaje się, że to problem, który mieliby inni ludzie. 1. Jak radzić sobie z migracją między starym frameworkiem, takim jak Betwixt, do nowszego (JAXB, Xstream, cokolwiek)? 2. Gdybyśmy mieli zachować nasz framework: jak poradzić sobie ze znaczną złożonością kodu dodaną przez metody zerowe i fałszywe settery?


title: Jak mogę odtworzyć tę kontrolę dostępu / grupę / dowolną metodologię w OO / MVC?

text: Chcę przepisać aplikację, która jest w większości proceduralna, do podejścia MVC/OO, aby nauczyć się głębszego zrozumienia obu. ALE mam pewne problemy koncepcyjne z obecną kontrolą grupy/dostępu, która jest używana. Mamy Grupy (Firmy), które mają użytkowników opartych na rolach (menedżer, sprzedawcy, klienci). Mogą mieć klientów przypisanych do sprzedawcy lub nie. Menedżer widzi wszystko, sprzedawca tylko przypisani do niego klienci. Biznes | ---Menedżer | ---Sprzedawcy | ---Klienci | ---Klienci Struktura tabeli jest obecnie podobna do następującej: użytkownicy (identyfikator użytkownika [informacje demograficzne]) firma (identyfikator firmy, identyfikator użytkownika itp. [informacje demograficzne]) sprzedawcy (identyfikator sprzedaży, identyfikator firmy, identyfikator użytkownika [tylko klucze obce]) klienci (identyfikator klienta, identyfikator firmy, identyfikator użytkownika i in. [informacje demograficzne]) Przypisania sprzedaży (identyfikator sprzedaży, identyfikator klienta [tylko klucze obce]) Menedżer może wpływać na wszystkich w tej grupie firm (każdy ma „identyfikator firmy”, który łączy go z daną firmą i nie ma żadnych innych ). Klienci mogą się logować i wprowadzać drobne zmiany w swoich profilach lub wchodzić w interakcję za pośrednictwem wiadomości ze swoim sprzedawcą lub kierownikiem firmy. Dodano Spice do miksu: (skomentuj którekolwiek z nich, jeśli odnoszą się do twoich spostrzeżeń dotyczących powyższego pytania) Czy istnieje lepszy sposób na uzyskanie podobnego dostępu i kontroli użytkowników? Chcę odbudować witrynę za pomocą interfejsu API, który może być używany zarówno przez aplikację internetową, jak i aplikacje mobilne. **EDYTUJ** Moje główne koncepcyjne zawieszenie w tej chwili dotyczy tego, jak odtworzyć tę strukturę w obiekcie użytkownika dla części OO aplikacji. Teraz wszystko jest dostępne poprzez zmienne sesji lub odpytywane z bazy danych poprzez funkcje proceduralne. Znowu moje rozumienie OO jest ograniczone, a to jest próba zrozumienia tego.


title: Potrzebujesz pomocy - burza mózgów klasa harmonogramu php

text: Nigdy wcześniej nie pisałem od podstaw klasy php. Ale chyba trzeba od czegoś zacząć, prawda? Mam pomysł, ale potrzebuję pomocy z logiką. Proszę powiedz mi, co myślisz. Poniżej jest oczywiście skrót. Na etapie planowania. Klasa - -> typ (cykliczny, pojedynczy, dzień) -> Dni cykliczne (4,2,3,4,1,2....itd. dla harmonogramów nieparzystych - potrzebujesz par parzystych) -> Typ zmiany (na zmianę, urlop , medyczne, itp...) -> Emp Id -> Start -> End -> Location Id -> Godziny na dobę -> Dzień rozpoczęcia pobierz harmonogram (wg konta/lokalizacji/firmy/jednostki/załogi/osoby) wybierz pojedynczy wpisy rozdzielają tablicę na dni (1 dzień) przyrosty, jeśli pojedyncze wpisy mają wpisy z dniami łączącymi, zastąp tablicę informacją o wpisie dnia return mysql tablica dni dla okresu czasu; ustaw harmonogram (daty, emp id) jeśli cyklicznie jeśli już istnieje || konflikt z istniejącym błędem utwórz powtarzający się szablon w tabeli bazy danych utwórz pojedyncze wpisy bazy danych używając dni cyklicznych przez 1 rok, jeśli pojedynczy, jeśli data jest pomiędzy datami już w bazie danych || więcej niż 1 rok z powodu błędu w przeciwnym razie wstaw do db, jeśli dzień nie istnieje, jeśli nie istnieje błąd pojedynczego zakresu, w przeciwnym razie wstaw do db pod tabelą dnia, z identyfikatorem połączonym z identyfikatorem istniejącego pojedynczego. usuń recurringOnly(emp id) usuń wszystkie wpisy z powtarzającym się id usuń wszystkie wpisy (od tej daty w przód, emp id) usuń wpisy z datą początkową > data cronUpdate(cron data rozpoczęcia / zakończenia) jeśli cron daty rozpoczęcia / zakończenia usuń wszystko z większymi datami niż nextUpdate (aby upewnić się, że nie ma błędów) wybierz cykliczne wpisy db z nextUpdate między początkiem/końcem cron wstaw do db następny zestaw "dni cyklicznych" dla pracownika zaktualizuj datę nextUpdate dla pracownika inny - błąd


title: Zakres treści pracy w rozwoju freelancera

text: Jeden z moich klientów zażądał dołączenia zrzutów ekranu interfejsu użytkownika w SOW. Poproszono mnie również o podanie schematu przepływu pracy dla tego samego. Projekt, który zamierzam wykonać, jest stosunkowo mały, a moje pytanie brzmi: * Czy powinniśmy zawsze dostarczać zrzuty ekranu interfejsu użytkownika przed rozpoczęciem projektu? (przynajmniej podstawowe). Osobiście uważam, że nie jest to możliwe, ponieważ interfejs użytkownika zmienia się do momentu uzgodnienia z klientem, co jest stratą czasu przed rozwojem. * Czy konieczne jest dostarczenie zarówno diagramu przepływu danych (DFD), jak i zrzutu ekranu interfejsu użytkownika przed rozpoczęciem opracowywania?


title: Diagramy modelu relacji encji w programie Visio

text: Chciałbym stworzyć kilka diagramów baz danych, takich jak ten w Visio, ale nie mogę znaleźć żadnych szablonów dla tego rodzaju notacji. Przykład, do którego się połączyłem, najwyraźniej powstał w Photoshopie, co brzmi jak okropny sposób na tworzenie ERD. Czy istnieją dobre szablony programu Visio do tego typu rzeczy? (Nawiasem mówiąc, mam Visio 2010 Pro.)


title: Patenty na oprogramowanie w USA

text: Hipotetycznie: mieszkam w Wielkiej Brytanii. Opracowałem aplikację tylko po to, aby po jej uruchomieniu odkryć, że ktoś inny złożył wniosek o patent USA na podobne oprogramowanie. Nie wiem, czy patent faktycznie zostanie przyznany, ponieważ funkcjonalność oprogramowania prawdopodobnie istniała już dawno temu. Zdecydowanie proces biznesowy był wykonywany od wielu dziesięcioleci, choć ręcznie lub półręcznie. Jakie mam opcje? Myślę: * Załóżmy, że patent upadnie i po prostu kontynuuj. Ale bądź przygotowany na zaprzestanie wysyłki, jeśli i kiedy otrzymają patent. * Załóżmy, że zostanie to przyznane (ponieważ to, co normalnie robią domyślnie) i przestań teraz sprzedawać aplikację; i oferują zwrot pieniędzy tym, którzy już kupili. * Otwórz źródło. Uczyń mój kod źródłowy otwartym kodem źródłowym i swobodnie go poprawiaj itp. Ale chroniony prawami autorskimi. Wtedy mógłbym przynajmniej kontynuować i zdobyć zaufanie za rozdawanie oprogramowania za darmo i przychód za ulepszanie lub dostosowywanie aplikacji dla osób.


title: Jakie jest najlepsze narzędzie do programowania / produktywności programisty ... sam zakodowałeś?

text: Cóż, pytanie jest w temacie, ale powtórzę - jakie jest najlepsze narzędzie programistyczne/deweloperskie, które sam zakodowałeś. Mała aplikacja konsolowa lub skrypt, który zhakowałeś w dzień lub dwa, a potem zastanawiasz się, dlaczego czekałeś tak długo i nie kodowałeś tego wcześniej. Coś, co zautomatyzowało (teraz trwający tylko 10 sekund) proces, który wcześniej był przyziemnym 20-minutowym zadaniem ręcznym. Coś, co nie tylko zajęło ci jeden dzień, ale kontynuowało to przez kolejny miesiąc lub nawet dłużej. Szczyt zasady DRY, mimo że było to po prostu porównanie dwóch plików xml, których nie można było **łatwo** porównać z Beyond Compare. Mały, żywy program, z którego jest dumny. Więc co to było dla ciebie?