title: Czy z perspektywy czasu opieranie XAML na XML jest błędem czy dobrym podejściem?

text: XAML jest zasadniczo podzbiorem XML. Mówi się, że jedną z głównych zalet oparcia XAML na XML jest to, że można go analizować za pomocą istniejących narzędzi. I może, w dużym stopniu, chociaż (syntaktycznie nietrywialne) wartości atrybutów pozostaną w formie tekstowej i będą wymagały dalszego parsowania. Istnieją dwie główne alternatywy dla opisywania GUI w języku opartym na XML. Jednym z nich jest zrobienie tego, co zrobiły WinForm i opisanie tego w prawdziwym kodzie. Jest z tym wiele problemów, choć nie jest to całkowicie pozbawione korzyści (pytanie o porównanie XAML z tym podejściem). Inną ważną alternatywą jest zaprojektowanie całkowicie _nowej_ składni specjalnie dostosowanej do danego zadania. Jest to powszechnie znane jako język specyficzny dla domeny. Tak więc z perspektywy czasu i jako lekcję dla przyszłych pokoleń, czy dobrym pomysłem było oparcie XAML na XML, czy też byłoby lepiej jako niestandardowy język specyficzny dla domeny? **Gdybyśmy projektowali jeszcze lepszy framework UI, czy powinniśmy wybrać XML czy niestandardową DSL?** Ponieważ o wiele łatwiej jest pozytywnie myśleć o status quo, zwłaszcza takim, który jest dość lubiany przez społeczność, dam trochę przykładowe powody, dla których budowanie na bazie XML _może_ być uważane za błąd. Oparcie języka na XML ma jedną zaletę: jest znacznie łatwiejsze do parsowania (główny parser jest już dostępny), wymaga dużo, _znacznie_ mniej pracy projektowej, a alternatywne parsery są również znacznie łatwiejsze do napisania dla zewnętrznych programistów. Ale wynikowy język może być niezadowalający na różne sposoby. Jest dość gadatliwy. Jeśli zmienisz typ czegoś, musisz to zmienić w tagu zamykającym. Ma bardzo słabe wsparcie dla komentarzy; nie można skomentować atrybutu. Istnieją ograniczenia dotyczące zawartości atrybutów przez XML. Rozszerzenia znaczników muszą być zbudowane „na górze” składni XML, a nie zintegrowane z nią głęboko i ładnie. I mój osobisty faworyt, jeśli ustawisz coś za pomocą atrybutu, użyjesz _zupełnie innej składni_ niż gdy ustawisz _dokładnie to samo_ jako właściwość zawartości. Mówi się również, że skoro wszyscy znają XML, XAML wymaga mniej nauki. Ściśle mówiąc, to prawda, ale nauka _składni_ to niewielki ułamek czasu spędzonego na nauce nowej struktury interfejsu użytkownika; to koncepcje frameworka powodują, że krzywa jest stroma. Poza tym specyfika języka opartego na XML może faktycznie dodać do koszyka „potrzeb uczenia się”. Czy te wady są równoważone łatwością analizowania? Czy następny fajny framework powinien kontynuować tradycję, czy zainwestować czas w zaprojektowanie niesamowitego DSL, którego nie można przeanalizować za pomocą istniejących narzędzi i którego składni muszą się nauczyć wszyscy? PS Nie wszyscy mylą **XAML** i **WPF** , ale niektórzy to robią. XAML jest czymś podobnym do XML-a. WPF to framework z obsługą powiązań, motywów, akceleracji sprzętowej i wielu innych fajnych rzeczy.


title: Jakie są wady RoR?

text: Obecnie próbuję zdecydować, jakiego języka po stronie serwera należy się uczyć i używać do tworzenia stron internetowych, i chociaż stosunkowo łatwo jest uzyskać informacje o tym, dlaczego x, y lub z jest dobrą rzeczą, trudniej jest określić wady każdego z nich z nich. W szczególności jestem ciekawy, jakie są wady uczenia się i/lub używania Ruby on Rails w przeciwieństwie do jakiegokolwiek innego danego języka/frameworka.


title: Konkursy dobrego programowania dla uczniów szkół średnich

text: Jakie są dobre konkursy programistyczne (lub konkursy projektowania stron internetowych) dostępne dla uczniów szkół średnich na północnym wschodzie (szukam dość długiej/wyczerpującej listy) – w USA? Konkursy muszą albo umożliwiać wybór języka, którego chcesz używać, albo muszą być w PHP lub C. Mogą to być konkursy dla pojedynczego kodera lub grupowe. Dziękuję wszystkim, którzy mogą mi pomóc.


title: Czy struktury drzew są z natury złe dla wydajności odśmiecacza?

text: Implementuję powiązaną hierarchię woluminów w F#. Ponieważ miałaby to być gra, chcę, aby odśmiecacz działał tak szybko i rzadko, jak to tylko możliwe. Wygląda jednak na to, że być może będę musiał wykonać kilka dziwacznych sztuczek, prawdopodobnie wstępnie przydzielając wszystko. Oznacza to, że nie mogę mieć wielu rzeczy niezmiennych i że muszę wiedzieć z góry, jak duże będzie moje drzewo - duża irytacja. Prawdopodobnie skończę gryząc kulkę i robiąc to (a może po prostu wrócę do C++), ale dla przypomnienia, czy drzewa są z natury złe dla wydajności GC? Wydawałoby się, że tak, biorąc pod uwagę, że etap znakowania musiałby przejść przez wiele węzłów.


title: Jak opanować C++?

text: Jestem studentem klasy 11 i mam informatykę... Uwielbiam ten przedmiot... Robimy C++... Mam mnóstwo zainteresowań tym tematem... Jestem w stanie robić programy, ale chciałbym opanować C++ jeszcze przed studiami... Byłoby miło, gdyby ktoś podał mi strony, na których są kody źródłowe dobrych programów (szczególnie systemów bibliotecznych)... Czy ktoś może polecić jakieś książki! Co więcej, aby mieć zawód programisty C++, co jest wymagane? Mam na myśli, na jaki rodzaj kursów w college'u powinienem się zgłosić? Czy w tym celu muszę zajmować się inżynierią komputerową?


title: BIG O - Algorytm Analiza Przypadków

text: Dlaczego duże O jest najczęściej kojarzone z najgorszym i średnim przypadkiem złożoności funkcji?


title: Jakiego sprzętu używasz, aby uniknąć bólu nadgarstka?

text: Ostatnio staram się poprawić ergonomię mojego miejsca pracy, a w ramach tego zastanawiam się, jak mogę ulepszyć sprzęt, którego używam. Używasz klawiatury standardowej, kształtowej czy dzielonej? Mysz czy trackball? Czy są jakieś inne akcesoria, bez których nie możesz żyć?


title: Czy literka „C” w MVC jest naprawdę potrzebna?

text: Rozumiem rolę modelu i widoku we wzorcu Model-View-Controller, ale trudno mi zrozumieć, dlaczego potrzebny jest kontroler. Załóżmy, że tworzymy program szachowy przy użyciu podejścia MVC; stan gry powinien być modelem, a GUI powinien być widokiem. Czym dokładnie jest kontroler w tym przypadku? Czy jest to po prostu oddzielna klasa, która zawiera wszystkie funkcje, które zostaną wywołane, gdy, powiedzmy, klikniesz kafelek? Dlaczego nie wykonać całej logiki na modelu w samym widoku?


title: Czy podejście zwinne jest zgodne z zatrudnianiem wykonawców?

text: Z jednej strony podejście zwinne kładzie nacisk na zgrany zespół, który pociąga się wzajemnie do odpowiedzialności i akceptuje wspólną własność projektu. Z drugiej strony firmy używają programistów kontraktowych, aby mogli zarządzać szczytami i dolinami finansowania bez zwalniania rzeczywistych pracowników. Jeśli brakuje środków, wykonawcy są pierwsi, nawet jeśli są w pełni zintegrowanymi członkami zespołu (a nie ma pracowników). Firmy również lubią utrzymywać kontrahentów tylko przez ograniczony czas. Jest to nieco łagodzone przez możliwość, że niektórzy kontrahenci mogą zostać zatrudnieni jako zwykli pracownicy. Stąd moje pytanie, czy istnieje zasadnicza sprzeczność w posiadaniu zwinnego zespołu złożonego z pracowników i kontrahentów, a także związanych z tym bardzo różnych statusów? * * * EDIT: Odpowiedzi wskazują, że być może nie wyraziłem dobrze napięcia, z którym się zmagam, więc pozwól, że zrobię kolejny strzał. Jestem pracownikiem stałym. Podejście zwinne (przynajmniej takie, jakie tutaj wdrożono) zachęca mnie do postrzegania wszystkich członków zespołu, zarówno stałych pracowników, jak i kontrahentów, jako równorzędnych członków zgranego zespołu. Korporacyjne podejście do kontrahentów skłania mnie do postrzegania ich jako niepotrzebnych zasobów, do których nie należy się nadmiernie przywiązywać. Jestem ciekaw, jak inni rozwiązali to napięcie.


title: Narzędzia innych firm do konwersji VB6 na .Net 4.0

text: Ponieważ Visual Studio 2010 nie zawiera narzędzia do konwersji VB6, szef chce użyć narzędzia innej firmy (tj. VBUC), które sugeruje Microsoft. Czy ktoś korzystał z jednego z tych narzędzi/usług innych firm? Jeśli tak, czy uważasz, że są warte swojej ceny?


title: Jak zainteresować moje 8 letnie dziecko programowaniem?

text: Próbowałem go zainteresować, ale bardzo szybko się znudził i wrócił do swoich gier na iPada. Chcę spróbować jeszcze raz. Jakiś pomysł, jak do tego podejść?


title: Jaki jest historyczny powód, dla którego Python używa podwójnego podkreślenia dla członków Class Private?

text: W pythonie prywatna funkcja lub zmienna modułu nazywa się `_foo`. Jeśli jest prywatny dla klasy, nazywa się `__foo`. Mechanika ich działania jest inna, jednak nie ma to większego znaczenia dla pytania. Dlaczego podczas projektowania języka Python wybrano podwójne znaki podkreślenia dla prywatnych członków klasy? Dlaczego nie pojedynczy znak podkreślenia, jak w przypadku modułu prywatnego? Dlaczego nie jakaś inna postać, która jest bardziej widoczna? (Rozróżnienie między _ a __ jest trudne). Jestem pewien, że jest tu jakaś historia, ale mam problem ze znalezieniem jej, ponieważ znajduję tylko samouczki, które mówią mi, co to znaczy, a nie dlaczego tak jest.


title: Gdzie powinieneś być z 5-letnim doświadczeniem?

text: **Tło:** Jestem obecnie Juniorem w college'u i staram się uzyskać stopień naukowy w MIS. Byłem tam na stażu w firmie przez 3 lata i ferie zimowe. Zostało mi tylko 11 miesięcy, zanim zacznę sprzedawać się potencjalnym pracodawcom, więc postanowiłem nauczyć się jak najwięcej języków i platform, na które obecnie jest duże zapotrzebowanie. Moja szkoła oferuje pośrednictwo pracy, ale słyszałam historie, w których kandydatom to nie wychodzi. Z tego powodu zacząłem szukać pracy online - Dice, Monster, CareerBuilder itp. Wydaje się, że jedyne prace, które mogę znaleźć, wymagają przynajmniej 5-letniego doświadczenia. Wiem też, że nie każde wymaganie musi być dokładne. **Sytuacja:** Chociaż nie jestem w branży od 5 lat, chciałbym zapewnić pracodawców, że będę w stanie nadążyć za kimś, kto był. Doświadczenie ma kluczowe znaczenie dla samorozwoju, ale potrzebuję miejsca, aby je zdobyć. Gdybyś był pracodawcą szukającym kogoś z ponad 5 letnim doświadczeniem, czego byś się spodziewał? Jak odróżnić 2 lata od 5 lat poza CV? Wiem, że to pytanie jest bardzo ogólne i może dotyczyć wielu różnych poziomów. Zajmuję się głównie językami programowania, takimi jak C#, Java itp. Nie będę ekspertem w żadnym z nich, ale chcę wiedzieć, co mogę przynajmniej ustawić jako cel? **EDYTUJ** : Znalazłem tę stronę, która wyjaśnia rozwój umiejętności, które dały mi wyobrażenie o tym, na czym stoję. Wiem, że nie określa lat, jak prosiłem, ale i tak było to pomocne.


title: Implementacja podstawowego interpretera - czy powinienem uczyć się wyrażeń regularnych?

text: Dla zabawy i praktyki myślę o zaimplementowaniu bardzo podstawowego języka programowania do uruchomienia na prostym interpreterze napisanym w Javie. Moje pytanie brzmi: **Czy „konieczna” jest znajomość wyrażeń regularnych podczas projektowania interpretera, do analizowania tekstu?** Czy powinienem nauczyć się tego tematu przed rozpoczęciem implementacji interpretera? Czy wystarczy po prostu przebiec przez tekst, rozbić na ciągi itp., czyli wykonać 'podstawowe parsowanie' bez wyrażeń regularnych?


title: Jakie są różnice między zatwierdzaniem a łataniem?

text: Jestem całkiem nowy w kontroli źródeł i chciałbym poznać różnice między zatwierdzaniem a łataniem? Ponadto, jak/kiedy używa się łatki i czy można jej użyć w aplikacji internetowej?


title: Czy ktoś kiedykolwiek ubiegał się o gwarancję na certyfikat SSL?

text: Certyfikaty SSL często reklamują różne kwoty gwarancji lub gwarancji, na przykład 500 000 USD lub 1 mln USD. Moje pytanie brzmi, czy w historii SSL ktoś faktycznie z powodzeniem ubiegał się o jedną z tych gwarancji? Czy kiedykolwiek była sprawa? Jeśli nie, czy można założyć, że są to tylko chwyty marketingowe?


title: Dlaczego mówi się, że model V wprowadza QA?

text: W kilku artykułach i książkach dowiedziałem się, że „model V wprowadził QA do rozwoju oprogramowania”. Chciałbym zrozumieć sens takiego stwierdzenia, ponieważ z mojego rozumienia, czynności modelu V (weryfikacja i walidacja) nie mogą być uważane za QA, ponieważ oba dotyczą bezpośrednio kontroli produktu, niezależnie od tego, czy są statyczne (weryfikacja) czy dynamiczne (walidacja). . Zgadzam się, że testowanie (powiedzmy V&V) jest narzędziem używanym przez QA do pomiaru jakości, ale jak to zapewnia? Przykłady w Google Books: _"Projektowanie i analiza systemów w czasie rzeczywistym: narzędzia dla praktyka"._ " **..te działania QA stanowią serce modelu V...**" lub _Iterative Software Engineering for Multiagent Systems : MASYWNY..:_ **Model V dodaje wyraźne mechanizmy zapewnienia jakości do modelu Wodospadu: dotyczy weryfikacji...**


title: Przechodzenie po grafach i filtrowanie w nawigacji w pomieszczeniach i znajdowaniu ścieżek

text: Która z poniższych opcji zajmuje mniej czasu przetwarzania/jest tańsza w algorytmie przechodzenia przez wykres dla (wewnętrznego) systemu nawigacji? a) Aby utworzyć wszystkie możliwe ścieżki między punktem początkowym a docelowym (węzły na wykresie), a następnie zastosować mechanizm filtrowania, aby dopasować możliwości i preferencje użytkownika nawigacji (np. znaleźć wszystkie ścieżki na wykresie, a następnie wykluczyć schody dla osób na wózkach inwalidzkich), lub b) Gdy tylko profil użytkownika będzie dostępny w systemie, przefiltrować wykres i wykluczyć ścieżki, których nie można przebyć dla tego użytkownika, a następnie uruchomić algorytm najkrótszej ścieżki?


title: Jeśli błąd ma ponad 5 lat, to czy jest to funkcja?

text: Pozwolę sobie dodać szczegóły: pracuję w instytucji z wieloma programistami, testerami, analitykami QA, właścicielami produktów itp., a oto coś, co mnie wkurza: Udało nam się sprzedawać gówniane (choć całkiem funkcjonalne) oprogramowanie od ponad dekada. Ma wiele funkcji, a produkt jest konkurencyjny, ale jest tam kilka poważnych błędów, a także tysiące "zacięć papieru" - małych irytacji, do których klienci muszą się przyzwyczaić. Boli mnie patrzenie na niektóre rzeczy, ponieważ mocno wierzę, że skoro komputery nie ułatwiają nam życia, to nie powinniśmy ich używać. Mam zaufanie do moich kolegów - są mądrzy, zdolni i mogą ulepszać rzeczy, kiedy się na tym skupiają. Jednak zgłaszanie błędów dotyczących niektórych starych funkcji może być trudne, jeśli nie zostaną one zamknięte lub zapomniane. „Tak działało przez wieki” to typowa odpowiedź. Ponadto, gdy kontrola jakości wykonuje regresję, mają tendencję do szukania wszystkiego, co jest inne, niż wszystkiego, co wydaje się niewłaściwe. Tak więc naprawę starego problemu można zapisać jako błąd, ponieważ „tak było przed moim czasem”. Młody programista we mnie myśli: przepisz tę cholerną rzecz! Jako ktoś, kto miał okazję być blisko sprzedaży, klientów, chcę dać korzyść z wątpliwości takiemu podejściu. Interesuje mnie również Twoja opinia/doświadczenie. Spróbuj wziąć pod uwagę ryzyko, stosunek kosztów do korzyści i inne czynniki nietechniczne.


title: Jak uzyskać współrzędne GPS dla lokalnych firm?

text: Czy ktoś wie o bazie danych, która składa się z firm, adresów i informacji o lokalizacji GPS, najlepiej z możliwością wyszukiwania przynajmniej według miasta? Mam na myśli aplikację, którą chciałbym rozwijać i chciałbym wiedzieć, czy ktoś robi to za darmo lub tanio w serwisie internetowym lub podobnym otwartym formacie.


title: Czy istnieje realna alternatywa dla metodyki zwinnego rozwoju?

text: Dwie dominujące metodologie tworzenia oprogramowania to kaskadowa i zwinna. Omawiając te dwa, często kładzie się duży nacisk na konkretne praktyki, które je odróżniają (programowanie w parach, TDD itp. w porównaniu ze specyfikacją funkcjonalną, duży projekt z przodu itp.). Jednak rzeczywiste różnice są znacznie głębsze, ponieważ te praktyki pochodzą z filozofii. Waterfall mówi: _Zmiana jest kosztowna, więc powinna być minimalizowana._ Agile mówi: _Zmiana jest nieunikniona, więc rób zmiany tanią._ Moje pytanie brzmi, niezależnie od tego, co myślisz o TDD lub specyfikacjach funkcjonalnych, czy metodologia tworzenia wodospadu jest naprawdę opłacalna? Czy ktoś naprawdę myśli, że minimalizacja zmian w oprogramowaniu jest realną opcją dla tych, którzy chcą dostarczać wartościowe oprogramowanie? A może naprawdę pytanie o to, jakie praktyki najlepiej sprawdzają się w naszych sytuacjach, aby poradzić sobie z nieuniknioną zmianą?


title: Którą platformę mobilną najłatwiej stworzyć?

text: Z Twojego doświadczenia w tworzeniu aplikacji mobilnych, którą platformę mobilną najłatwiej stworzyć? iOS, Android czy WinPhone 7? A dlaczego myślisz, że jest to najłatwiejsze? Jeśli możesz go uporządkować od najłatwiejszego do najtrudniejszego, jest jeszcze lepiej.


title: jak stworzyć zespół, który jest zdalny?

text: Mam małe wyzwanie. Chociaż nie jestem „zarządzający”, z pewnością jestem głównym programistą w projekcie, a mój zespół będzie rozrzucony do nieba. Mam kogoś, kto pracuje tylko w piątki i prawdopodobnie 2 osoby, które będą 3-4 godziny drogi w innym stanie. (Jeden z uroczych efektów ubocznych partnerstwa z wieloma uniwersytetami). W każdym razie, jak mogę zdobyć je wszystkie w tej samej „drużynie”? Przeczytałem sporo rzeczy Joela Spolsky'ego, ale nie potrafię stworzyć takiego samego środowiska, jakiego on używa. To także pierwszy projekt, nad którym będę prowadził, więc to coś w rodzaju make-or-break. W szczególności szukam stylów zarządzania (osobowości), modeli procesów, zarządzania projektami (scrum?), narzędzi do wideokonferencji i tym podobnych. Po prostu nie mam żadnych środków na tego typu rzeczy i obawiam się, że utknę, wykonując za dużo pracy. Dziękuję,


title: Powody, dla których chcesz zmienić pracę - Co dajesz

text: Jakie powody zwykle podajesz, gdy szukasz zmiany u potencjalnego pracodawcy/konsultantów rekrutacyjnych? 1. Potrzebuję zmiany, czyli w zasadzie to pytanie, ale tutaj zadaję to bardziej konkretnie jako odpowiedź do konsultantów rekrutacyjnych. 2. Jestem zainteresowany pracą w .NET 4.0, ale moja obecna organizacja nadal tkwi w VB6.0 3. Pracuję w sektorze Telecom i chcę przejść do sektora finansowego. 4. ... Powyższe są mniej więcej odpowiedziami, których udzielili niektórzy z moich przyjaciół (w tym ja) lub usłyszeliśmy. Co byś zaklasyfikował jako **zdecydowany NIE NIE** powód? Co ważniejsze, co byś zaklasyfikował jako akceptowalny powód?


title: Dlaczego metoda finalize jest zawarta w Javie?

text: Zgodnie z tym postem nigdy nie powinniśmy polegać na wywołanej metodzie finalize. Dlaczego więc Java w ogóle włączyła go do języka programowania? Wydaje się, że to straszna decyzja, aby włączyć do dowolnego języka programowania funkcję, która _może_ zostać wywołana.


title: Jak wykonywać zadania wsadowe za pośrednictwem usług internetowych lub rest api

text: Mam witrynę AppHarbor, w której muszę co tydzień aktualizować niektóre dane. Nie chcę iść drogą wdrażania exe i dodawania dodatkowego "webworkera" do mojej witryny, ponieważ to kosztuje. Moją myślą jest dodanie usługi sieciowej/usługi REST API do witryny, abym mógł ją po prostu wywołać, wykona „wsadowe zadania”, a po zakończeniu zwróci niestandardowy kod stanu, taki jak sukces lub niepowodzenie. Za kulisami zaktualizowałby tabelę „BatchLog” lub coś w tym rodzaju, a następnie mógłbym utworzyć stronę/widok, w którym mógłbym uzyskać dostęp do szczegółów dziennika i zobaczyć, które procesy wsadowe działały lub nie. Tak myślę, że chcę wdrożyć, ale jestem trochę sceptyczny co do bezpieczeństwa wokół tego. Po pierwsze, oczywiście nie chcę, aby KTOKOLWIEK mógł rozpocząć te zadania wsadowe po prostu przechodząc do mojej usługi sieciowej/interfejsu API. Aby to naprawić, myślę, że są na to 2 różne sposoby lub kombinacja obu. 1) Wymagaj pewnych danych uwierzytelniających i być może dodatkowego tajnego kodu, aby faktycznie mogli rozpocząć. 2) Skonfiguruj w tabeli, kiedy każde zadanie wsadowe może być faktycznie uruchomione, oraz częstotliwość. W ten sposób, jeśli haker zadzwoni do mojego interfejsu usługi/odpoczynku. Będzie mógł wykonać tylko 1 raz na godzinę/dzień/tydzień/miesiąc/itd. Czyli mogliby nawalić usługę, ale każde kolejne wezwanie po prostu zwracało awarię, czy coś takiego. Warto zauważyć, że przeczytałem gdzieś kilka miesięcy temu, że istnieją usługi w chmurze, które „zaplanują” zadania wsadowe, takie jak to dla Ciebie. A darmowy, o którym czytałem, zrobi 1 usługę. Więcej niż 1 i musisz zacząć za to płacić. Tak więc dla mojego przykładu po prostu utworzyłbym jedną usługę i wywoływał ją wiele razy dziennie/tygodniowo, a moja tabela konfiguracji BatchJob określiła, czy rzeczywiście musi być przetwarzana, czy nie. Więc jak straszny jest ten pomysł? Jakie są inne podejścia do wykonywania zadań wsadowych w środowisku chmury, w których nie oferują usług wsadowych.


title: Zarządzanie problemami

text: Wiem, że nie chodzi o programowanie, ale powinienem się nauczyć „Zarządzanie problemami” Co to jest „Zarządzanie problemami”? Przeczytałem stronę Wikipedi, ale nie rozumiem zbyt dobrze. Czy możesz mi powiedzieć „Zarządzanie problemami” i czy jest jakiś produkt na ten temat?


title: Czy Akka jest dobrym rozwiązaniem problemu współbieżnego potoku/przepływu pracy?

text: **Zastrzeżenie:** Jestem zupełnie nowy w Akce i ogólnie w koncepcji Actors/Event-Driven Architecture. Muszę zaimplementować dość złożony problem, w którym użytkownicy mogą skonfigurować „jednoczesny potok”: Pipeline: składa się z 1+ etapów; wszystkie Etapy są wykonywane po kolei Etap: składa się z 1+ Zadań; wszystkie zadania wykonywane są równolegle Zadanie: zasadniczo uruchamialne w Javie Jak widać powyżej, `Zadanie` to `Uruchamialne`, które wykonuje pewną jednostkę pracy. Zadania są podzielone na „Etapy”, które równolegle wykonują swoje „Zadania”. „Etapy” są zorganizowane w „Potoku”, który wykonuje swoje „Etapy” _sekwencyjnie_. Stąd jeśli użytkownik określi następujący rurociąg: CrossTheRoadSafelyPipeline Etap 1: Spójrz w lewo Zadanie 1: Obróć głowę w lewo i poszukaj samochodów Zadanie 2: Nasłuchuj samochodów Etap 2: Spójrz w prawo Zadanie 1: Obróć głowę w prawo i spójrz dla samochodów Zadanie 2: Nasłuchuj samochodów Następnie zostanie wykonany etap 1, a następnie zostanie wykonany etap 2. Jednak podczas wykonywania każdego Stage poszczególne `Zadania` są wykonywane równolegle/w tym samym czasie. W rzeczywistości potoki staną się bardzo skomplikowane, a przy setkach etapów, dziesiątkach Zadań na etap (znów wykonywanych w tym samym czasie). Aby zaimplementować ten Pipeline, myślę tylko o kilku rozwiązaniach: 1. **ESB/Apache Camel** 2. **Guava Event Bus** 3. **Java 5 Concurrency** 4. **Actors/Akka** Camel nie wydaje się właściwe, ponieważ jego podstawową kompetencją jest _integracja_, a nie synchronizacja i orkiestracja między wątkami roboczymi. Guawa jest świetna, ale tak naprawdę nie jest to problem typu subskrybenta/wydawcy. A Java 5 Concurrency (`ExecutorService` itp.) jest po prostu zbyt niski i bolesny. Pytam więc: czy Akka jest silnym kandydatem na tego typu problem? Jeśli tak to jak? Jeśli nie, to dlaczego i jaki jest dobry kandydat?


title: Konwencja nazewnictwa: pola końcowe (nie statyczne)

text: Dzisiaj rozmawiałem ze współpracownikiem na temat nazewnictwa pól `final` w klasach Javy. W jego opinii pola `final` również powinny być traktowane jako stałe, ponieważ ich wartości nie zmienią się po utworzeniu instancji. Prowadziłoby to do następującej konwencji nazewnictwa pól `final`: public class Foo { private static final String BLA_BLA = "bla"; prywatny końcowy String BAR_BATZ; ... } Moim zdaniem tylko pola `static final` powinny być traktowane jako stałe, podczas gdy pola, które są tylko `final` powinny być zgodne ze zwyczajową konwencją nazewnictwa camelCase. public class Foo { prywatne statyczne końcowe String BLA = "bla"; prywatny końcowy String barBatz; ... } Teraz jestem trochę niepewny, ponieważ jest znacznie bardziej doświadczonym programistą niż ja i zwykle zgadzam się z jego opiniami i uważam go za bardzo dobrego programistę. Jakieś informacje na ten temat?


title: Najlepsze praktyki w przypadku dużej liczby pustych kolumn tabeli?

text: Mam schemat, który pozwala na wiele typów postów w moim projekcie Django (coś w rodzaju Tumblr). Użytkownicy mogą tworzyć posty różnych typów. Jednym z tych typów jest zdjęcie, dla którego będę potrzebować danych EXIF. Jeśli mam super uogólnioną tabelę, czy ma sens tworzenie dodatkowych kolumn dla danych exif? Spowodowałoby to mnóstwo pustych kolumn dla każdego typu posta, który nie jest zdjęciem. Ewentualnie, czy byłoby sensowne utworzenie całkowicie oddzielnego modelu dla zdjęć i utworzenie klucza obcego do modelu Posts?


title: TDD, nowe testy, a stare jeszcze nie wdrożone

text: Eksperymentuję z programowaniem sterowanym testami i stwierdziłem, że często dochodzę do następującej sytuacji: 1. Piszę testy dla pewnej funkcjonalności X. Testy te kończą się niepowodzeniem. 2. Próbując zaimplementować X, widzę, że muszę zaimplementować jakąś funkcję Y w niższej warstwie mojego kodu. Więc... 3. Piszę testy dla Y. Teraz oba testy dla X i Y kończą się niepowodzeniem. Kiedyś pracowałem nad 4 funkcjami w różnych warstwach kodu w tym samym czasie i traciłem koncentrację na tym, co faktycznie robię (zbyt wiele testów kończyło się niepowodzeniem w tym samym czasie). Myślę, że mógłbym rozwiązać ten problem, wkładając więcej wysiłku w planowanie zadań jeszcze przed rozpoczęciem pisania testów. Ale w niektórych przypadkach nie wiedziałem, że będę musiał zejść głębiej, bo m.in. Nie znałem zbyt dobrze API niższej warstwy. Co powinienem zrobić w takich przypadkach? Czy TDD ma jakieś zalecenia?


title: F# hosting projektów open source przy użyciu SVN

text: Chcę wybrać witrynę hostingu projektu typu open source dla projektu F# przy użyciu SVN. CodePlex jest miejscem, w którym hostowana jest społeczność .NET i większość projektów F#, ale martwię się, że TFS + SvnBridge przysporzy mi bólu głowy. Więc szukam gdzie indziej i szukam porady tutaj. Lub jeśli uważasz, że CodePlex nadal jest najlepszym wyborem w moim scenariuszu, też chciałbym to usłyszeć. Jak dotąd Google Code wygląda dla mnie atrakcyjnie. Mają przejrzysty interfejs i prawdziwy hosting SVN. Ale obecnie hostowanych jest prawie żadnych projektów F# (nie ma ich nawet w wyszukiwaniu według listy języków programowania), więc zastanawiam się, czy oprócz braku społeczności, z jakimi mogę się spotkać, istnieją jakieś zauważalne wady. Jeśli jest jeszcze inna opcja, też chciałbym to usłyszeć. Dziękuję!


title: Jakie są zalety i wady kryptograficznego podpisywania zatwierdzeń i tagów w Git?

text: Więc ktoś recenzował moją pracę i powiedział mi, że zawsze powinienem podpisywać swoje zatwierdzenia i tagi kryptograficznie. Zapytany dlaczego, nie umiał mi tego wyjaśnić i powiedział: „To po prostu dobra rzecz do zrobienia”. Próbując uniknąć oczywistego scenariusza z szympansem, dlaczego naprawdę powinienem? Czy naprawdę jest tak wiele wyraźnych zalet i brak wad? **Jakie są praktyczne powody, dla których chcę podpisywać każdy commit i tag, który robię?**


title: Programowanie GUI bazy danych — .Net a MS Access

text: MS Access jest bardzo zaśmiecony, ponieważ A) wielu nowicjuszy używa go B) ludzie używają go jako zaplecza bazy danych, co nie jest dobrym pomysłem. Chciałbym zobaczyć rozsądną dyskusję na temat tego, dlaczego warto wybrać VB.Net zamiast MS Access lub odwrotnie do programowania GUI bazy danych (formularzy i raportów) do użycia z MS SQL Server.


title: Czy istnieje tańsza, nieekspresowa, niebędąca studentem, nie-msdn wersja programu Visual Studio 2010, która obsługuje wtyczki w Stanach Zjednoczonych, niż wersja Professional Edition o wartości 710 USD?

text: Nigdy osobiście nie kupiłem kopii programu Visual Studio. Edycje SharpDevelop i Express zawsze były wystarczająco dobre do mojego osobistego użytku, a moi pracodawcy zawsze dostarczali mi IDE, których potrzebowałem do ich obsługi. Zastanawiam się jednak nad zapłaceniem za kopię mojego osobistego laptopa. Potrzebuję tego głównie po to, by móc otwierać rozwiązania zawierające projekty internetowe. Więc moje pytanie brzmi: Czy istnieje wersja tańsza niż wersja Pro 710 USD na Amazon, która zrobi to, czego potrzebuję: http://www.amazon.com/Microsoft-C5E-00521-Visual-Studio- Professional/dp/B0038KTO8S/ ref=sr_1_2?ie=UTF8&qid=1287456230&sr=8-2 ? To, czego potrzebuję, jest zdefiniowane jako: 1. Otwórz rozwiązanie z C#, Web App, VB.NET i Web Projects. 2. Zainstaluj dodatki, takie jak resharper, testdriven.net itp., wtyczki SCM itp. 3. Pewien poziom obsługi projektu db. Przynajmniej po to, by móc otworzyć dbproj. Potrzebuję tego tylko do haków SCM. SSMS i SQLCMD są wystarczająco dobre do edycji baz danych. 4. Umiejętność instalacji F#, IronPython, IronRuby itp. Teraz naturalnie jestem dość inteligentną, zaradną osobą, więc zdaję sobie sprawę, że mogę uzyskać Visual Studio w wątpliwy sposób. Nie to chcę zrobić. Chcę kopię prawną, nie chcę kopii dla studentów ani kopii MSDN. Chcę prawdziwą kopię, chcę tylko mieć pewność, że dostanę najtańszą edycję, która spełni moje potrzeby.


title: Najlepsze argumenty za/przeciw wprowadzeniu technologii ORM do procesu tworzenia firm

text: Zacząłem korzystać z technologii ORM w ciągu ostatnich kilku lat. Moją pierwszą ekspozycją był NHibernate. Następnie przeszedłem na Linq 2 Sql i Entity Framework. Problem, jaki mam jednak, polega na tym, że istnieją organizacje, w których znalazłem silny sprzeciw wobec wprowadzenia narzędzi ORM. Zwykle mają kilka powodów: * mają dużo rozbudowanych umiejętności SQL w zespole i martwią się o bazowy SQL generowany przez ORM. * mają administratorów baz danych, którzy lubią widzieć SQL, którego używa aplikacja, aby mogli przejrzeć go pod kątem najlepszych praktyk. * martwią się o wydajność (niektórzy „słyszeli”, że ORM nie są tak wydajne, ale sami nie mają prawdziwego dowodu - może być w tym trochę prawdy! :). Tak więc szukam najlepszych lub najbardziej przekonujących argumentów, które wysunęliście ZA korzystaniem z narzędzi ORM. Równie interesowałyby mnie argumenty przeciw. Uwaga: to NIE jest dyskusja na temat tego, którego ORM powinienem użyć.


title: Czy powinienem wybrać PHP.NET i Resharper czy PHPStorm?

text: Jestem dość biegłym programistą .NET i PHP. Obecnie moim wyborem dla złożonych aplikacji internetowych jest podejście SOA, w którym używam PHP jako front-endu i usług internetowych WCF jako warstwy środkowej. Moje wywołania ajax są zwykle skierowane do punktów końcowych JSON webHttpBinding WCF. Po stronie .NET jestem absolutnie zakochany w wtyczce Visual Studio ReSharper. Więc moje pytanie jest następujące, chcę ponownie przemyśleć mój łańcuch narzędzi po stronie PHP. Z jednej strony JetBrains, twórcy Resharper, mają PHP IDE o nazwie PHPStorm. Z drugiej strony mogę używać VS.PHP i ReSharper. Czy ktoś używa późniejszej kombinacji VS.PGP i Resharper? Czy możesz to polecić?


title: Algorytm do wywnioskowania hierarchii tagów

text: Szukam algorytmu do wywnioskowania hierarchii ze zbioru oznakowanych elementów. Np. jeśli następujące elementy mają tagi: 1 a 2 a,b 3 a,c 4 a,c,e 5 a,b 6 a,c 7 d 8 d,f Wtedy mogę skonstruować graf (lub wykresy) nieskierowane poprzez liczenie wag węzłów i wag krawędzi: wagi węzłów wagi krawędzi a 6 a-b 2 b 2 a-c 3 c 3 c-e 1 d 2 a-e 1 <-- ta krawędź jest równoległa do a-c i c-e i nie jest pożądana e 1 d-f 1 f 1 Pierwsza problem polega na tym, jak usunąć zbędne krawędzie, aby dostać się do uproszczonego wykresu? Zauważ, że w tym przypadku należy tylko usunąć tę nadmiarową krawędź a-e, ponieważ coś jest oznaczone jako a-c-e, gdyby tak nie było, a tagiem było a-e, ta krawędź musiałaby pozostać. Podejrzewam, że oznacza to, że usunięcie krawędzi może nastąpić dopiero podczas konstruowania wykresu, a nie po podliczeniu wszystkiego. To, co chciałbym wtedy zrobić, to zidentyfikować kierunek krawędzi, aby utworzyć ukierunkowany graf (lub grafy) i wybrać węzły korzeniowe, aby, miejmy nadzieję, stworzyć drzewo (lub drzewa): drzewa a d // \\ | b c f \ e Wygląda na to, że może to być algorytm łańcuchowy – najdłuższe wspólne podciągi/przedrostki – lub algorytm drzewa/wykresu, ale trochę utknąłem, ponieważ nie znam prawidłowej terminologii, aby go szukać.


title: Najlepsze praktyki routingu PHP mvc

text: Mam niestandardowy framework MVC, który jest w ciągłym stanie ewolucji. Toczy się długa debata ze współpracownikiem, jak powinien działać routing. Biorąc pod uwagę następującą strukturę katalogów: /core/Router.php /mvc/Controllers/{Kontrolery publiczne} /mvc/Controllers/Private/{Kontrolery wymagające prawidłowego użytkownika} /mvc/Controllers/CMS/{Kontrolery wymagające prawidłowego użytkownika i określonych ról} Pytanie brzmi: „Gdzie należy ustanowić uwierzytelnianie bieżącego użytkownika: w routerze, przy wyborze kontrolera/katalogu do załadowania, czy w każdym kontrolerze?” Moim argumentem jest to, że podczas uwierzytelniania w routerze zamiast żądanego kontrolera tworzony jest kontroler błędu, informujący o twoim nieszczęściu; Struktura katalogów wyraźnie wskazuje na wymagane uwierzytelnienie. Jego argumentem jest to, że router powinien wykonywać routing i tylko routing. Zostaw to Administratorowi, aby rozpatrzył każdy przypadek indywidualnie. Jest to bardziej modułowe i zapewnia większą elastyczność w przypadku konieczności wprowadzenia zmian przez router. PHP MVC - Custom Routing Mechanism nawiązywał do tego, ale temat miał inny charakter. Mile widziane byłyby również alternatywne sugestie.


title: Wskazówki dotyczące programowania ze zdalnym zespołem?

text: Moja firma ma biura korporacyjne w całym kraju i zostałam zatrudniona na podstawie umowy do pracy w jednym biurze, podczas gdy reszta mojego zespołu pracuje w innym. Jesteśmy w tej samej strefie czasowej, ale zdecydowanie odlegli. Jeszcze nie poznałem zespołu, ale niedługo tam polecę. Jaka jest Twoja najlepsza rada dotycząca integracji i rozwoju z tym zespołem? Jakie są najważniejsze priorytety? Standardowa kontrola wersji, e-mail, telefon, połączenie konferencyjne i komunikator to wszystkie dostępne zasoby, jednak aplikacje Google, Skype i tym podobne nie są ze względów bezpieczeństwa.


title: Testowanie luki między jednostką a integracją: integracja w małych, komponentowych, jednostkowych testach integracyjnych

text: W ciągu ostatnich kilku tygodni zastanawiałem się i szukałem, jak wypełnić lukę w naszej metodologii testowania. W uproszczeniu testy jednostkowe są za małe, a tradycyjne testy integracyjne za duże. Często pojawia się scenariusz, w którym „A” i „B” używają komponentu „C”. Jednak „A” i „B” mają nieco inne wymagania i przyjmują nieco inne założenia dotyczące „C”. Jeśli jestem programistą `A`, jak i gdzie testuję moje założenia dotyczące `C`? Oczywiście testowanie jednostkowe „A” z fałszywymi założeniami dotyczącymi „C” jest dobre do testowania „A” w izolacji, ale nie testuje samych założeń. Inną możliwością jest dodanie testów jednostkowych dla `C`. Nie jest to jednak idealne rozwiązanie, ponieważ podczas opracowywania „A” zmienianie testów dla „C” z założeniami ewoluującymi z „A” będzie nadmiernie niezręczne. Rzeczywiście, programista `A' może nawet nie mieć odpowiedniego dostępu do testów jednostkowych `C` (np. zewnętrznej biblioteki). Aby przedstawić to bardziej konkretnym przykładem: Załóżmy, że jest to aplikacja węzła. `A` i `B` zależą od `C` do odczytywania pliku (między innymi) i przechowywania zawartości pliku w obiekcie przekazanym do `C`. Na początku wszystkie pliki z uchwytami `C` są małe i mogą być odczytywane synchronicznie bez znaczącego blokowania. Jednak twórca `B` zdaje sobie sprawę, że jego pliki stają się ogromne i musi przełączyć `C` na odczyt asynchroniczny. Powoduje to sporadyczny błąd synchronizacji w `A`, który nadal zakłada, że `C` odczytuje pliki synchronicznie. Jest to typ błędu, który jest bardzo trudny do wyśledzenia w pełnych testach integracyjnych i może w ogóle nie zostać wyłapany w testach integracyjnych. Nie jest również wyłapywany przez testy jednostkowe „A”, ponieważ założenia „A” są wyśmiewane. Jednak może łatwo zostać złapany przez „mini” test integracyjny, który ćwiczy tylko „A” i „C”. Znalazłem tylko kilka odniesień do tego typu testów. Integracja w małych, testowanie integracji komponentów, testowanie integracji jednostek. Odnosi się to również nieco do kierunku testowania BDD, a nie do formalnych testów jednostkowych TDD. Jak wypełnić tę lukę testową? W szczególności – gdzie mam umieścić takie testy? Jak zakpić dane wejściowe „A” i „C” dla „mini” testów integracji? A ile wysiłku należy włożyć w oddzielenie problemów związanych z testowaniem między tymi testami a testami jednostkowymi? A może istnieje lepszy sposób na wypełnienie luki w testach?


title: Przechowywanie grafów obiektowych z ewolucją klas w Javie z transformacją (archiwizacja długoterminowa)

text: ## Streszczenie Częstym problemem jest przechowywanie obiektów (z wykresem) i ponowne ich ładowanie. Jest to łatwe, o ile przechowywana reprezentacja obiektu jest zgodna z wykonywanym kodem. Jednak w miarę upływu czasu wymagania zmieniają się, a przechowywane obiekty nie pasują już do kodu. Przechowywane obiekty nie powinny utracić swoich danych, a kod w klientach powinien działać z najnowszymi modelami obiektowymi. Tak więc transformacja musi w jakiś sposób nastąpić między załadowaniem danych a zwróceniem obiektu do klienta. Wiem, że istnieją biblioteki takie jak XStream, gson, protobuf i avro. Mogliby ładować starsze obiekty, ale afaik po prostu ignorują dane, które nie pasują już do pól w klasie (może coś przeoczyłem). (Kiedy mówię o przechowywaniu i serializacji, nie mam na myśli wbudowanego mechanizmu serializacji w Javie.) ## Pytanie Jakie jest więc pytanie? Od jakiegoś czasu zajmuję się badaniami i wydaje się, że nie ma biblioteki, która rozwiązuje ten problem (ewolucja klasy) bez utraty danych. Mam nadzieję, że tutaj znajdę inne działające rozwiązanie lub pomysł na jego wdrożenie. Mam pewne wymagania: * Oparte na plikach - chcę mieć możliwość przechowywania zserializowanego obiektu na dysku * Dołączalne - chcę dołączyć wiele obiektów do jednego pliku bez ciągłego ładowania całego pliku do pamięci * Obsługa wielu wersji w jeden plik — plik może zawierać obiekty o różnej wersji (tylko tego samego typu) * Transformacja — dane powinny być dostępne przy użyciu tego samego typu, nawet po zmianie pomiędzy. * Generic - Sam mechanizm musi być generyczny, abym mógł go używać do różnych obiektów (różne obiekty nie mieszają się w jednym pliku, tylko różne wersje jednego typu). Byłoby miło, gdyby format przechowywania był czytelny dla człowieka. Już przechowywane obiekty nie są aktualizowalne (przynajmniej nie bez dużego wysiłku). Pomyśl o archiwum długoterminowym. ## Przykład Mógłbym podać przykład dla lepszej ilustracji. Załóżmy, że mamy dwa Pojo, które chcemy serializować. public class MyPojo { String tekst; Długa liczba; Integer[] wartości; SubPojo pojo; } public class SubPojo { List<String> items; } W następnej wersji mogliśmy zmienić nazwę pola (text->content), zmienić typ (Integer[]->List) i przekształcić pole na List (SubPojo->List), gdzie poprzednie pole jest teraz pierwszy element nowej listy (nie tracąc danych, po prostu przekształcając się w nową reprezentację). public class MyPojo { Treść ciągu; Długa liczba; Lista wartości <Integer>; Lista<SubPojo> pojo; } public class SubPojo { List<String> items; } Pseudokod, w jaki sposób klient może to wykorzystać: // Write Serializer ser = new Serializer(); MojePojo pojo = nowe MojePojo(); pojo.xxx = ...; // ustaw pola ser.store(pojo, file, append); // Odczyt (wersja późniejsza) Serializer ser = new Serializer(); ser.registerTransformer(nowy TransformerV1ToV2()); List<MyPojo> pojos = ser.load(plik); Takie podejście ma pewne wady: * Transformator musi działać na jakimś pośrednim formacie (może to być zapisany format kopii zapasowej, taki jak json lub xml) * Nie wiesz, jaki był format klasy w pewnym momencie, ponieważ ty przekształcają się tylko w stosunku do poprzedniej wersji i mapują do końcowej klasy, co utrudnia wyszukiwanie błędów * Wydajność (w zależności od tego, jak przebiega transformacja)


title: DDD Właściwy podział agregatów i pozbycie się zbyt wielu referencji

text: Projektuję aplikację, która pomoże w projektowaniu instalacji elektrycznych. Zdecydowałem się na Domain Driven Design, ponieważ temat jest złożony, a aplikacja będzie rosła wraz ze zdobytą wiedzą. Jednak jestem nowicjuszem w tej koncepcji. Na razie mam problem z prawidłowym modelowaniem domeny, zwłaszcza z podziałem encji na agregaty. Zdefiniowałem okablowanie - **Instalacja** jako zestaw **ConnectionPoints** i **Kable**, które je łączą. Jeden **ConnectionPoint** ma co najmniej jeden **Kable**. Każdy **Kabel** ma zestaw przewodów. Końcówkę przewodu uważam za **Terminal** , który możemy podłączyć do innego **Terminala** tworząc **Junction**. **Zaciski** różnią się od siebie, ponieważ przewody mają różne kolory i przeznaczenie. **Połączenia** składają się z dwóch lub więcej **Terminalów** i można je wykonać tylko wewnątrz **ConnectionPoint**. Zilustrowałem to dla lepszego zrozumienia: ![Illustrated ConnectionPoint](http://i.stack.imgur.com/mU78k.png) Oprócz **Kable** istnieją również **Urządzenia** , które również posiadają * *Terminy**. Są one również połączone w **ConnectionPoint**, a ich **Zaciski** są traktowane tak samo jak **Zaciski** kabla **. Dla każdego **Urządzenia** muszę być w stanie śledzić, do którego **Terminal** jest podłączony (może to być lista punktów końcowych). Problem z projektem polega na potrzebie posiadania odniesień do **Terminali** poza elementami **Kabli** i **Urządzenia** do tworzenia **Połączeń** i połączeń torowych. **Kabel** i **Urządzenie** mógłbym uznać za agregaty **Terminals** , ponieważ **Terminals** nie mogą bez nich istnieć, a wiedza o rodzicu **Terminala** jest ważna . Jednak każdy **Terminal** ma również tożsamość poza **Kabelem** / **Urządzeniem** i nie mam pojęcia, jak później w kodzie i bazie danych mógłbym zachować wiedzę o wykonanych połączeniach. Masz jakieś pomysły, jak mógłbym to wymodelować? Jakie pytania powinienem sobie zadać, aby zdefiniować poprawny model i uniknąć trzymania wszędzie referencji?


title: Modelowanie rozszerzalnego projektu Domain Driven Design

text: Powiedzmy, że tworzymy aplikację z modułami (Sprzedaż, Księgowość, Zakupy itp.). Przykładowy przypadek to: Moduł Sprzedaż jest dostępnym modułem podstawowym/podstawowym, a moduł Księgowość jest modułem uzupełniającym. Moduł Sprzedaży -. Moduł Produktu I Rachunkowości -. Rachunek     -. Journal Gdybyśmy mieli powiedzieć, że : > Jeżeli zainstalowano Moduł Księgowy, to zapewni on bezpośrednią > integrację z klasą Produkt z Modułu Sprzedaży, np. : a > Produkt ma teraz Listę Rachunków, która w przypadku transakcji jest zastosowane do > Produktu, Dziennik zostanie opublikowany zgodnie z Kontem. Moim zdaniem wyobrażałbym sobie, że `Product` miałby właściwość `List<Account>`, ale byłoby to niemożliwe bez dodania tej właściwości bezpośrednio w klasie `Product`, dzięki czemu `Product` byłby teraz zależny od modułu rachunkowości, gdy SalesModule powinien być w stanie działać bez niego. Innym rozwiązaniem, które przyszło na myśl, jest dodanie klas `SalesIntegrations` (ProductAccount, itp.) w celu uzupełnienia wcześniej opisanego `Product`, czyniąc go niezależnym. Ale to rozwiązanie nie brzmi tak „naturalnie”, jak stwierdzenie, że „produkt ma listę kont”. Z tego co rozumiem, robienie DDD oznacza poznanie z góry całej koncepcji reguł biznesowych. Co się stanie, jeśli pojawi się wymóg dodania nowego projektu w celu uzupełnienia poprzedniego projektu DDD o posiadanie tylko jego biblioteki DLL (brak dostępu do kodu źródłowego)?


title: Przechowywanie wersji dokumentu

text: To pytanie uzupełniające do mojego pierwotnego pytania. Zastanawiam się nad generowaniem różnic i przechowywaniem tych różnic w tabeli „Historia” bazy danych. Używam biblioteki diff-match-patch do generowania tego, co nazywa się "poprawką". Przy każdym zapisie porównuję poprzednią i nową wersję i generuję ten patch. Łata może być wykorzystana do wygenerowania dokumentu w określonym momencie. Mam dylemat, jak przechowywać te dane. Czy powinienem: a Wstawić nowy rekord bazy danych dla każdej poprawki? b. Przechowuj te poprawki w tablicy javascript i przechowuj tę tablicę w tabeli historii. Tak więc istnieje tylko jeden rekord historii bazy danych dla dokumentu z tablicą wszystkich łat. Obawy dotyczące: Wygenerowano zbyt wiele rekordów bazy danych. Zapytanie będzie powolne i wymagające dużej ilości procesora. b. Tylko jeden rekord. Jeśli rekord jest w jakiś sposób uszkodzony/usunięty. Cała historia zmian zniknęła. Szukam sugestii, wątpliwości co do obu podejść.


title: Jak w praktyce sprawdza się Sencha Touch na Androidzie?

text: Właśnie zaczynam projekt za pomocą Sencha Touch i właśnie wykonałem kilka drobnych testów na moim urządzeniu HTC Desire. Wygląda na to, że wszystkie filmy instruktażowe w Vimeo używają emulatora iPhone'a działającego na komputerze Mac. Nie jestem pewien, jak szybko ten emulator jest w porównaniu do prawdziwego urządzenia iPhone, a nawet prawdziwego urządzenia z Androidem, ale z tego, czego doświadczyłem, wydaje się, że moje pragnienie HTC nie działa tak dobrze, jak ten emulator. Wszystkie animacje (przesuwanie, zanikanie itp.) wydają się nieco opóźnione. Łatwo zauważyć, że FPS jest znacznie mniejszy niż na filmach Vimeo. HTC pragnienie jest stosunkowo nowym i nowoczesnym telefonem z Androidem 2.2, działającym na przyzwoitym sprzęcie, więc zastanawiam się, czy Sencha Touch jest „gotowy” na platformę Android. Ktoś z praktycznym doświadczeniem z Androidem i Sencha Touch?


title: Jaki jest najlepszy sposób na radzenie sobie z niuansami dla różnych platform?

text: Pracuję nad normalną aplikacją Java/SWT, którą planuję dystrybuować na trzy podstawowe platformy PC (Windows, OSX, Linux). Oczywiście są między nimi niewielkie różnice, głównie związane z plikami. Jaki jest najlepszy sposób na oddzielenie tych różnic? Myślę o trzech różnych gałęziach SVN (win, osx, linux) i trunku do rozwoju, ale jak zaktualizować gałęzie bez nadpisywania różnic? Czy zamiast tego muszę zdefiniować stałą platformy w czasie kompilacji? No i oczywiście są różne wersje bibliotek (np. SWT w moim przypadku). Jak się z nimi obchodzić? Gdzie powinienem przechowywać skompilowane pliki ".jars" z kodem bajtowym?


title: Dlaczego wywiady inżynieryjne SW są nieproporcjonalnie trudne (w porównaniu z wywiadami badawczymi)?

text: Najpierw trochę o mnie. Mam doktorat z CS i pracowałem zarówno jako inżynier oprogramowania, jak i naukowiec zajmujący się badaniami i rozwojem, obydwa w Very Large Corporations You Know Very Well. Niedawno zmieniłem pracę i przeprowadziłem rozmowy kwalifikacyjne na oba rodzaje stanowisk (tak jak robiłem to w przeszłości). Moja obserwacja: Rozmowy kwalifikacyjne z inżynierami SW są o wiele trudniejsze niż rozmowy kwalifikacyjne z naukowcami CS, ale praca naukowca jest lepiej płatna, bardziej konkurencyjna, bardziej satysfakcjonująca, ciekawsza i ma wyższy plus. Oto typowa pętla wywiadu dla badacza: * Rozmowa telefoniczna, aby sprawdzić, czy moje badania są zgodne z badaniami laboratoryjnymi * Osobiście: daj prezentację na temat moich ostatnich badań przez godzinę (co reprezentuje być może 9 miesięcy pracy) i odpowiadaj na pytania od publiczności * Osobiste wywiady jeden na jeden z około 5 badaczami, w których zadają mi bardzo rozsądne pytania dotyczące mojej pracy/publikacji/patentów, w tym: pytania techniczne, gdzie moja praca pasuje do pracy pokrewnej i jak mogę Rozszerz moją pracę na nowe obszary Oto typowa pętla rozmowy kwalifikacyjnej dla inżyniera SW: * Rozmowa telefoniczna, podczas której zadaje mi się pytania dotyczące algorytmów i może trochę koduję. Dość standardowe. * Osobiste wywiady na tablicy, podczas których wywiercą z ciebie pierdolę na temat ezoterycznych drobiazgów C++ (np. jak działa polimorficzne wywołanie funkcji wirtualnej), algorytmy (spraw, aby algorytm wszystkich par-najkrótszej ścieżki działał dla wierzchołków 1B ), projekt systemu (zaprojektuj system równoważenia obciążenia bazy danych) itp. Trwa to przez sześć lub siedem wywiadów. Śmieszny. Dlaczego ktokolwiek miałby to znosić? Jaki jest sens pytać o ciekawostki C++ lub pisać kod, aby się wykazać? Dlaczego nie uczynić wywiadu SE bardziej podobnym do wywiadu z badaczem, w którym mówisz o tym, co zrobiłeś? Jak przebiegają rozmowy kwalifikacyjne o charakterze technicznym w innych dziedzinach, takich jak fizyka, chemia, inżynieria lądowa, inżynieria mechaniczna?


title: Szukam upiększacza kodu Delphi (Pascal)

text: Najlepiej narzędzie, które będzie uruchamiane z wnętrza Delphi IDE (ja używam Delphi 7), ale mogę zaakceptować samodzielny program. Powinien mieć możliwość definiowania reguł (wcięcie spacji X, bez tabulatorów, jedna instrukcja w wierszu itp. (może również reguły pisania wielkimi literami?)) Fajnie, jeśli może obsłużyć cały katalog lub projekt za jednym dotknięciem, a nie tylko jeden plik. Ktokolwiek?


title: Czy ustawiający i pobierający zawsze łamią zasadę pojedynczej odpowiedzialności?

text: Jak wiemy, SRP stwierdza, że każda klasa powinna mieć jedną odpowiedzialność i ta odpowiedzialność musi być całkowicie zawarta w klasie. Ale ustawiające i pobierające mają inną odpowiedzialność - zapewniają dostęp do właściwości (danych) klasy abstrakcyjnej. jeśli _Settery i pobierające_ wykonują dostęp do własności klasy abstrakcyjnej, to **służą innej odpowiedzialności**. Więc jeśli mam coś takiego, class Config { private location; public function write(array $data) { .... } public function read($key) { ... } public function existing($key) { ... } public function delete($key) { ... } // Poniżej znajduje się abstrakcja właściwości // Tu wątpię - NIE MOGĘ UŻYĆ tej klasy bez nich // ale wydaje się, że jednocześnie psują SRP!? funkcja publiczna setFileLocation($lokalizacja) { $to->lokalizacja = $lokalizacja; } funkcja publiczna getFileLocation() { return $this->location; } public function setConfigArray(...) { ... } public function getConfigArray() { ... } } Zrywam SRP. Problem polega na tym, że to jedyny sposób, w jaki klasa może istnieć. Tak więc pytanie brzmi: w mojej sytuacji prawie niemożliwe jest uniknięcie metod `setFileLocation()` i `getFileLocation()` za pomocą CRUD. Więc jeśli łącząc metody CRUD z abstrakcją Data Access, złamię SRP, czy jest jakiś sposób, abym mógł stosować SRP i jednocześnie zachować wspólną koncepcję klasy Config (operacje CRUD)?


title: Kiedy konsultant IT powinien stosować pełne szyfrowanie dysku?

text: W jakich okolicznościach konsultant IT powinien szyfrować swój dysk twardy, aby chronić swój kod/dane swoich klientów? Myślę, że jeśli nie zwiększa to zbytnio obciążenia pracą, równie dobrze możesz użyć pełnego szyfrowania dysku ze „słabym” hasłem, aby przynajmniej uniemożliwić komuś dostęp do twoich plików e-mail i innych dokumentów, jeśli twój laptop zostanie skradziony, nawet jeśli nie uzyska dostępu do żadnych plików baz danych ani innych bardzo wrażliwych danych.


title: Jak decydujesz, nad czym pracować w swoim czasie?

text: Mam swędzenie i trzeba go podrapać. W dzisiejszych czasach nie mam nic do zaprogramowania. Normalnie wybrałbym swoją technologię miesiąca i majstrował przy niej, ale chcę coś zrobić i zrobić sobie przerwę od poważnych badań/eksperymentów i po prostu napisać coś dla zabawy (tj. niekoniecznie czysto edukacyjnej/profesjonalnej). rozwój). Problem polega na tym, że * nie przychodzi mi do głowy oprogramowanie, którego potrzebuję, a którego jeszcze nie mam. * Przeszukiwanie projektów open-source w różnych witrynach, aby pomóc, jest straszliwe (do tej pory 5 godzin w dół - nie warte zachodu) Nie szukam konkretnej sugestii, nad czym pracować, ponieważ byłoby to strasznie trudne zadanie. Nie sądzę, że tutaj wiemy o sobie prawie wystarczająco dużo, aby skutecznie udzielać dobrych sugestii. Pytam więc, czy jest jakieś ćwiczenie umysłowe, którego używasz, aby zdecydować, co zrobić, kiedy nie „skrzypujesz”?


title: Zestawy problemów lub wyzwania i rozwiązania dla początkujących do ćwiczenia problemów typu MVC, OOP, MVT itp.

text: Na przykład kodowanie nietoperza, projekt euler, python challenge to niesamowite łamigłówki, które zwykle dostarczają materiałów do nauki, sposobów na kompaktowanie kodu i poprawiają umiejętności rozwiązywania problemów. Pod koniec dnia, kiedy wykonasz kilka z tych ćwiczeń, nauczysz się czegoś nowego lub lepiej zrozumiesz pojęcie. Czy istnieją podobne ćwiczenia dla sytuacji OOP, MVC, MVVM, MVT itd.? Na zajęciach zwykle uczy się myśleć o przedmiocie jak o kocie, części klasy zwierząt. i masz ssaki i tak dalej. Jednak w prawdziwym życiu przedmioty są bardziej abstrakcyjne i trudniejsze do wyobrażenia i wdrożenia. To samo można powiedzieć o MVC, MVVM i MVT, gdzie zastosowanie małego systemu jest zwykle proste, ale gdy problem jest skalowany, nagle staje się nieco bardziej zniechęcający.


title: Czy zgodnie z definicją drzewa (ADT) „niewłaściwe” jest dodanie przez węzeł rodzeństwa?

text: Tytuł mówi wszystko. Mam tylko małe ćwiczenie z informatyki i buduję drzewo. Chcę, aby węzeł mógł dodać rodzeństwo, co oczywiście wymaga najpierw uzyskania odniesienia do rodzica. Zastanawiałem się, jaki jest „właściwy” sposób, z definicji, czym jest drzewo, aby zrobić coś takiego?


title: MVC: Czy kontroler łamie zasadę pojedynczej odpowiedzialności?

text: Zasada pojedynczej odpowiedzialności stanowi, że „klasa powinna mieć jeden powód zmiany”. We wzorcu MVC zadaniem kontrolera jest pośredniczenie między widokiem a modelem. Oferuje interfejs dla Widoku do raportowania działań wykonanych przez użytkownika w GUI (np. pozwolenie Widokowi na wywołanie `controller.specificButtonPressed()`) i jest w stanie wywołać odpowiednie metody na Modelu w celu manipulowania jego danymi lub wywołaj jego operacje (np. `model.doSomething()`). Oznacza to, że: * Kontroler musi znać GUI, aby zaoferować Widokowi odpowiedni interfejs do raportowania działań użytkownika. * Musi również znać logikę Modelu, aby móc wywołać odpowiednie metody w Modelu. Oznacza to, że ma **dwa powody do zmiany** : zmianę GUI i zmianę logiki biznesowej. Jeśli GUI ulegnie zmianie, np. zostanie dodany nowy przycisk, kontroler może potrzebować dodać nową metodę, aby umożliwić Widokowi zgłoszenie naciśnięcia tego przycisku przez użytkownika. A jeśli logika biznesowa w modelu ulegnie zmianie, kontroler może być zmuszony do zmiany, aby wywołać prawidłowe metody w modelu. W związku z tym Administrator ma **dwa możliwe powody do zmiany**. Czy to łamie SRP?


title: Jak przeprowadzić test jednostkowy pod kątem niejawnych błędów konwersji PHP?

text: Czy istnieje sposób na znalezienie błędów spowodowanych przez spreparowane dane wejściowe w php, takie jak nazywanie pól POST, takimi jak `variable[]` zamiast `variable`, powodując, że PHP niejawnie konwertuje je na tablicę, używając jakiejś formy automatycznego testowania?


title: Co to jest doktorat dobre dla branży oprogramowania?

text: Jestem programistą samoukiem i właśnie rozpocząłem studia informatyczne, aby uzupełnić swoją wiedzę i uzupełnić braki. Jednak już teraz debatuję nad kierunkiem mojej edukacji. Na pewno chcę mieć 4 lata licencjata, ale po tym nie jestem pewien: czy warto uzyskać tytuł magistra? A co z doktoratem? Jakie możliwości otwierają te stopnie? Obecnie moim celem jest bycie programistą, ale w branży oprogramowania istnieje wiele fascynujących dziedzin i z pewnością jestem zainteresowany zbadaniem wielu z nich. Pod tym względem myślę, że wyższy stopień może być tego wart - nawet jeśli niekoniecznie pomogłoby to w karierze programisty. Więc czy to będzie tego warte? Czy studia podyplomowe otworzą drzwi?


title: Czy istnieje jakaś technologia podobna do LINQPad do kompilowania C#, która działa w przeglądarce?

text: Pomyśl o JSFiddle. LINQPad jest całkiem słodki dla szybkiego C# z podobnymi opcjami. Czy jest coś takiego jak LINQPad, który działa w przeglądarce?


title: Na jakim poziomie mam mock, gdy mam funkcję A wywołującą funkcję B, która wywołuje bazę danych?

text: Stworzyłem scenariusz, w którym mam dwie funkcje, A i B, obie są testowane, ale mimo testów nadal wstrzyknąłem dość głupi błąd i część danych nie dostaje się do bazy. Zauważ, że nie ma ORM. Napisałem moje operacje CRUD bezpośrednio i płacę za to cenę. W tym scenariuszu mam (perl) coś takiego: sub A { ... wykonać sporo pracy ... my $res = B(%data); ... zrób trochę więcej pracy ... } sub B { my ( %data ) = @_; ... zapisz dane do bazy danych i zwróć wynik ... } Co się jednak stało, to w mojej aplikacji wyższego poziomu i w samym A zmieniłem nazwę jednego z pól, które trafia do %data, ale zapomniałem zmienić go w B. Mam test dla A, który _wiele_ rzeczy robi A (A musi spotkać się z dobrą refaktoryzacją), w tym B. Odcinek dla B weryfikuje, czy wszystkie poprawne parametry , w tym prawidłowe nazwy pól są przekazywane, a więc test przechodzi. _ALE_ test dla B weryfikuje stare nazwy pól, prawdziwe B faktycznie używa starych nazw pól i ten test również przechodzi. W ten sposób wdrożyłem kod, który z powodu tego przeoczenia umieszcza wartości NULL w bazie danych, gdzie nie chcę wartości NULL. * A jest wyraźnie za duże. Aby to wyizolować, wyśmiewam sześć różnych funkcji, z których każda może spowodować zmianę stanu systemu. * A, a więc test dla A teoretycznie nie dotyczy strategii, według której B będzie przechowywał dane w bazie danych ani nawet w jakiej bazie B będzie przechowywać dane, więc myślę, że test dla A prawdopodobnie nie powinien odpytywać bazy danych bezpośrednio. * Ale zmieniłem format %data i myślę, że test dla A powinien wykryć, że zasadniczo zmieniłem API bez propagowania zmiany. Jaki jest lepszy sposób na skonfigurowanie testu, aby wykryć ten przypadek wcześniej? * Kontynuować strategię izolacji dla A i B, ale także napisać integrację, która testuje A -- aż do-> bazy danych? Doprowadziłoby to do mnożenia się możliwych przypadków testowych, a ja już mam problem z uzasadnieniem istniejącej proliferacji przypadków testowych dla kierownictwa (chociaż wiem, że zasięg jest żałośnie niewystarczający). * Po prostu napisz test dla A, aby przeszukać bazę danych, prawdopodobnie poprzez abstrakcję? * Czy jest coś innego, co by tu pomogło? * * * Ostatecznie posłuchałem sugestii Karla Bielefeldta. Dodałem kod walidacji danych do funkcji B. Dodałem również test integracyjny, który testuje od A do DB. O ile wiem, muszę przeprowadzić jak najwięcej testów integracyjnych, weryfikując, czy ogólny stan zasobów systemowych zmienia się w przewidywalny sposób. Jednocześnie spodziewam się, że nadal będę musiał symulować zasoby sieciowe, jeśli faktycznie nie mogę uzyskać testowego środowiska sieciowego.


title: Czy istnieje powód, aby preferować składnię lambda, nawet jeśli jest tylko jeden parametr?

text: List.ForEach(Konsola.WriteLine); List.ForEach(s => Console.WriteLine(s)); Dla mnie różnica jest czysto kosmetyczna, ale czy są jakieś subtelne powody, dla których jeden może być lepszy od drugiego?


title: Gniazda synchroniczne z Node.js

text: Chcę przenieść istniejącą aplikację z Javy do Node.js — chciałbym zasięgnąć porady. Aplikacja java to wielowątkowy serwer gniazd, do którego może łączyć się dowolna liczba klientów. Aplikacja działa na executorach Java. Każdy klient otrzymuje gniazdo do połączenia z aplikacją. Klient połączy się z serwerem gniazd i nastąpi uzgadnianie. Po uzgadnianiu dane będą przesyłane między klientem a serwerem. Przesyłane dane są w kolejności sekwencyjnej, ponieważ klient przesyła dane jako takie. I jestem w stanie kontrolować wątek, do którego podłączony jest klient. Teraz Node.js nie ma wątków, więc jestem zdezorientowany, jak przenieść wielowątkowy serwer gniazd Java. Jakieś pomysły?


title: W jaki sposób operacje atomowe są dynamiczną funkcją języka?

text: Powiedziano mi, że operacje atomowe są dynamiczną cechą języka. Za bardzo bałam się zapytać w tym kontekście, co to właściwie oznacza, bo nie chciałam, żeby moi współpracownicy myśleli, że jestem głupia. Ale tak naprawdę nie rozumiem tego stwierdzenia. Moje rozumienie terminu „operacje atomowe” to każda operacja, która jest albo całkowicie wykonana, albo całkowicie niewykonana; na pewno nigdy nie będziesz w połowie operacji, gdy zmieni się kontekst wątku. Co to ma wspólnego z typowaniem dynamicznym i statycznym?


title: Różnica między architekturą a frameworkiem

text: Pytanie terminologiczne pojawiło się, gdy porównywałem EJB 3 i Spring. Wikipedia podaje, że > Enterprise JavaBeans (EJB) to zarządzana architektura komponentów po stronie serwera > do modułowej budowy aplikacji korporacyjnych. a także > Spring Framework to framework aplikacji open source i inwersja > kontenera kontrolnego dla platformy Java. „EJB 3 in Action” sugeruje, że > Razem komponenty lub EJB i kontener mogą być > postrzegane jako struktura, która zapewnia wartościowe usługi dla > rozwoju aplikacji korporacyjnych. Czy jakikolwiek framework jest architekturą? Jeśli nie, jaka jest różnica między tymi terminami? Czy EJB można uznać za framework?


title: Czy token OAuth powinien być udostępniany w celu wdrożenia logowania jednokrotnego?

text: Jaki jest powszechnie akceptowany sposób wdrażania logowania jednokrotnego przy użyciu zewnętrznego dostawcy OAuth? Mam serwer z zasobami użytkownika powiązanymi z identyfikatorem użytkownika serwera, identyfikator użytkownika ma również powiązany identyfikator użytkownika Facebooka. Czy byłoby dobrym podejściem do uwierzytelniania klienta na serwerze, gdyby login został przekierowany, powiedzmy, do Facebooka, gdzie zwróciłby token OAuth, a następnie token zostałby udostępniony klientowi? Załóżmy, że zaimplementowano protokół SSL, token OAuth działałby wtedy w taki sam sposób, jak plik cookie sesji, który daje uprawnienia do zasobów użytkownika na serwerze. Ten sam użytkownik inny klient może następnie ponownie uwierzytelnić się za pomocą Facebooka, co zwróci ten sam identyfikator Facebooka, co daje dostęp do zasobów tego samego użytkownika i inny token OAuth, który wygasa niezależnie, a usunięcie aplikacji na Facebooku może wywołać serwer z żądaniem nieuwierzytelnienia do utrzymuj synchronizację. Czy to dobra polityka do wykorzystania? Czy jest to bezpieczne przed atakami, takimi jak sidejacking sesji, odwoływanie się do różnych witryn itp.?


title: Co koniecznie musisz wiedzieć o kandydacie, zanim go zatrudnisz?

text: Na jakie **podstawowe pytania** musisz znać odpowiedź na temat potencjalnego kandydata na programistę, zanim go zatrudnisz? Nie szukam konkretnych problemów związanych z rozmowami kwalifikacyjnymi (np. sortowanie tej tablicy liczb 3D w złożoności O(1)), ale po prostu o rzeczy, które musisz znaleźć dla siebie, o nowym zatrudnieniu. (np. jakich systemów/języków/frameworków/systemów kontroli źródła używał?) Crossposted do Quora


title: Wydajność dostępu do odczytu/zapisu pamięci

text: Słyszałem sprzeczne informacje z różnych źródeł i nie jestem pewien, w które z nich wierzyć. W związku z tym opublikuję to, co rozumiem i poproszę o poprawki. Powiedzmy, że chcę użyć matrycy 2D. Mogę to zrobić na trzy sposoby (przynajmniej o których wiem). **1** : wewn. char **matryca; macierz = malloc(50 * sizeof(char *)); for(i = 0; i < 50; i++) macierz[i] = malloc(50); **2** : wewn. intRozmiarWiersza = 50; int rozmiar wskaźnika = 50 * rozmiar(znak *); int rozmiar_danych = 50 * 50; char **matryca; macierz = malloc(rozmiar danych + rozmiar wskaźnika); char *pData = macierz + pointerSize - rowSize; for(i = 0; i < 50; i++) { pDane += rozmiar wiersza; macierz[i] = pDane; } **3** : //zamiast dostępu do matrix[i][j] mielibyśmy dostęp do matrix[i * 50 + j] char *matrix = malloc(50 * 50); Jeśli chodzi o wykorzystanie pamięci, rozumiem, że **3** jest najbardziej wydajna, **2** jest następna, a **1** jest najmniej wydajna, z poniższych powodów: **3** : jest tylko jednym wskaźnikiem i jedną alokacją, a zatem minimalnym obciążeniem. **2** : ponownie istnieje tylko jedna alokacja, ale teraz jest 51 wskaźników. Oznacza to, że jest `50 * sizeof(char *)` więcej narzutu. **1** : istnieje 51 alokacji i 51 wskaźników, co powoduje największe obciążenie ze wszystkich opcji. Jeśli chodzi o wydajność, raz jeszcze rozumiem, że **3** jest najwydajniejsza, **2** jest następna, a **1** jest najmniej wydajna. Powody: **3** : Potrzebny jest tylko jeden dostęp do pamięci. Będziemy musieli wykonać mnożenie i dodawanie w przeciwieństwie do dwóch dodawania (jak w przypadku wskaźnika do wskaźnika), ale dostęp do pamięci jest na tyle powolny, że nie ma to znaczenia. **2** : Potrzebujemy dwóch dostępów do pamięci; raz, aby uzyskać `char *`, a następnie do odpowiedniego `char`. Wykonywane są tu tylko dwa dodawania (raz, aby dostać się do prawidłowego wskaźnika `char *` z oryginalnej lokalizacji pamięci, i raz, aby dostać się do prawidłowej zmiennej `char` z miejsca, na które wskazuje `char *`), więc mnożenie (co jest wolniejsze niż dodawanie) nie jest wymagane. Jednak w nowoczesnych procesorach mnożenie jest szybsze niż dostęp do pamięci, więc ten punkt jest dyskusyjny. **1** : te same problemy co **2** , ale teraz pamięć nie jest ciągła. Powoduje to braki w pamięci podręcznej i dodatkowe wyszukiwania w tabeli stron, co czyni ją najmniej wydajną z całej partii. Przede wszystkim: czy to prawda? Po drugie: Czy istnieje opcja **4**, której mi brakuje, a która byłaby jeszcze bardziej wydajna?


title: Kiedy używać (lub nie) C# myVariable { set; Dostawać; }

text: Próbuję dziś ogarnąć moją głowę drobniejszymi punktami tego. Zasadniczo zakochałem się w tym formacie dla wartości logicznych: Class { public static bool myBool {set; get;} private static void Method() { if (!myBool) { myBool = !myBool; // rzeczy, które muszą być zrobione } } } Oczywiste rzeczy, takie jak nieużywanie publicznych, gdy prywatne będzie działać, a zakres ma zastosowanie prawidłowo. Ale kiedy jest to najlepsza praktyka w porównaniu z używaniem prostszego: Class { bool myBool = true; private static void Method() { if (!myBool) { myBool = !myBool; // rzeczy, które trzeba zrobić } } } Czy mam to całkowicie wstecz? Rozumiem, że używając formatu `public static bool myBool {set; get;}` Robię co następuje: public static bool myBool { get { return myBool; } set { myBool = valuePassedIn; } } Czuję, że pierwsza metoda jest najlepszym podejściem, ale nie mam pojęcia, dlaczego tak uważam. Czy jest najlepsze z tych wyborów? Czy robię coś strasznie źle, czy wszystkie trzy metody są równoważne?


title: Czy system typów Haskella jest przeszkodą w zrozumieniu programowania funkcjonalnego?

text: Studiuję Haskella w celu zrozumienia programowania funkcjonalnego, z oczekiwaniem, że wykorzystam wgląd, który zdobywam w innych językach (głównie Groovy, Python, JavaScript). Wybrałem Haskella, ponieważ miałem wrażenie, że jest bardzo czysto funkcjonalny i nie pozwalałby na jakiekolwiek uzależnienie od państwa. Nie zdecydowałem się na naukę Haskella, ponieważ interesowało mnie poruszanie się po wyjątkowo sztywnym systemie czcionek. Moje pytanie brzmi: czy system silnych czcionek jest koniecznym produktem ubocznym niezwykle czystego języka funkcjonalnego, czy też jest to niezwiązany wybór projektowy, charakterystyczny dla Haskella? Jeśli to drugie, to jestem ciekaw, jaki byłby najbardziej czysto funkcjonalny język, który jest dynamicznie pisany. Nie jestem szczególnie przeciwny silnemu typowaniu, to ma swoje miejsce, ale trudno mi zobaczyć, jakie korzyści przyniesie mi to w tym przedsięwzięciu edukacyjnym.


title: Struktura danych dla siatki z ujemnymi indeksami

text: Przepraszam, jeśli jest to obraźliwie oczywista koncepcja, ale jest to coś, czego wcześniej nie robiłem i nie mogłem znaleźć żadnych materiałów omawiających najlepszy sposób podejścia do tego. Zastanawiam się, jaka jest najlepsza struktura danych do przechowywania siatki 2D o nieznanym rozmiarze. Siatka ma współrzędne całkowite (x,y) i będzie miała ujemne indeksy w obu kierunkach. Jaki jest więc najlepszy sposób na utrzymanie tej siatki? Obecnie programuję w c#, więc nie mogę mieć ujemnych indeksów tablicy. Moją pierwszą myślą było posiadanie klasy z 4 oddzielnymi tablicami dla (+x,+y),(+x,-y),(-x,+y) i (-x,-y). Wydaje się, że jest to poprawny sposób na zaimplementowanie siatki, ale wygląda na to, że przepracowuję rozwiązanie, a zmiana rozmiaru tablicy będzie bólem głowy. Innym pomysłem było śledzenie środka tablicy i ustawienie go jako topologicznego (0,0), jednak miałbym problem z koniecznością wykonania przesunięcia do każdego elementu siatki przy wielokrotnym dodawaniu do góry -lewo od siatki, co byłoby podobne do zmiany rozmiaru siatki, choć najprawdopodobniej częstsze. Myśli?


title: Warstwa buforowania API

text: **Primer:** Mamy aplikację mobilną obsługiwaną przez API (napisane w PHP). Głównym celem aplikacji jest wyświetlanie produktów z dużej tabeli pozycji w bazie danych, w wielu różnych konfiguracjach. Kategorie, sugerowane pozycje, kanały skompilowane przez użytkownika, kanały „podobne do”. Zasadniczo większość, jeśli nie wszystkie wyświetlane dane, pochodzi z jednej tabeli, jednak filtrowanie i sortowanie jest tak naprawdę tym, czym zajmuje się aplikacja. Niektóre kanały są dość proste, np. „Pobierz wszystkie elementy należące do jednej z tych kategorii za pomocą tabeli łączącej elementy z kategorią”. Inne są bardziej skomplikowane przy użyciu wyszukiwania pełnotekstowego do filtrowania, wraz z filtrami kategorii i filtrami giełdowymi, a czasami możemy nawet wymagać, aby wyniki zawierały dodatkowy filtr, taki jak „wyklucz elementy z dowolnej kategorii, która nie ma 10 pasujących elementów w tej kategorii” (coś jak samoregulujący, unieważniający filtr kategorii). * * * Obecnie próbujemy przyspieszyć API i zacząć wprowadzać technologię, która umożliwi nam skalowanie. Zdecydowaliśmy się już na pewne rzeczy, takie jak oddzielne wyszukiwarki (np. Elasticsearch do zastępowania pełnotekstowego itp.). Jednak jedną rzeczą, w której jestem trochę „nowy”, jest buforowanie kanałów API. Moim jedynym doświadczeniem w buforowaniu było buforowanie pełnych wyników strony internetowej w takich rzeczach jak magento/wordpress. Lub buforowanie złożonych obiektów, które są zbudowane z kilku zapytań i procesów. Zdecydowałem, że buforowanie obiektów prawdopodobnie nie jest tutaj odpowiednie, ponieważ większość ostatecznych danych obiektowych pochodzi z jednej tabeli. Tak więc buforowanie obiektów nie zapewniłoby znacznej poprawy szybkości. Obecnie zastanawiam się, czy muszę buforować ostateczną kolekcję obiektów wyjściowych, ponieważ jest to naprawdę złożone filtrowanie i sortowanie, które spowalnia wszystko. Ale właśnie tam utknąłem... Przede wszystkim, czy powinniśmy buforować całą kolekcję obiektów, czy po prostu przechowywać kolekcję identyfikatorów obiektów i nadal iść do bazy danych, aby wykonać ostateczne wyszukiwanie danych (moja teoria jest taka, że przy różnych kompilacjach kanałów, użycie pamięci wzrosłoby dość szybko, buforując wszystkie same obiekty). Po drugie, czy buforujemy końcowe dane wyjściowe kanału, czy też próbujemy znaleźć wspólny punkt, w którym możemy utworzyć zbuforowaną kopię kanału, który nie jest do końca prawidłowy. Na przykład, zamiast buforować „produkty podobne do X, gdzie podobne produkty znajdują się w kategoriach 1,2,3”, zamiast tego buforujemy „produkty podobne do X”, a następnie przy każdym żądaniu pobieramy kolekcję z pamięci podręcznej i wykonujemy dodatkowe filtrowanie ręczne po pobraniu „kolekcji bazowej”. Mam nadzieję, że to wszystko ma jakiś sens i przepraszam, jeśli jest to trochę chaotyczne. Jestem trochę z głębi z tym, ale jestem chętny do nauki. Bez wątpienia rozwiązanie, które zdecyduję się najpierw wdrożyć, będzie wymagało wielu, wielu iteracji, zanim uznamy je za „poprawne”. Ale w tej chwili po prostu nie mam w tym żadnego doświadczenia, żeby dać sobie odpowiedni, odpowiedni punkt wyjścia do rozpoczęcia rozwoju.


title: Języki programowania oparte na xml

text: Patrzyłem na wikipedię - Kategoria: języki programowania oparte na XML. Dlaczego ktoś miałby przyjąć takie podejście do projektowania języka? Jakie są tego zalety? Myślę tylko o wadach. * trudne do utrzymania * trudne do odczytania * trudne do pisania


title: Architektura/warstwy projektu .NET MVC

text: W jaki sposób planując architekturę średniej wielkości aplikacji internetowej MVC zaimplementować warstwy tak, aby były jak najbardziej oddzielone i łatwe do przetestowania? (zasadniczo postępuj zgodnie z najlepszymi praktykami) Załóżmy, że najpierw używam kodu jako dostępu do danych. Zmagam się z tym, jak zdefiniować „logikę biznesową” i jak ma ona współdziałać z warstwą danych. Biorąc za przykład aplikację do sprzedaży pojazdów, czy logika biznesowa byłaby klasami wykonującymi zadania, takie jak obliczanie przedziału podatkowego dla danych pojazdów, porównywanie statystyk mil na galon itp.? Jeśli chodzi o podmioty biznesowe (np. Samochody, Vany, Motocykle) umieściłbym je w warstwie danych wraz z moją klasą datacontext. Co również stanowiłoby logikę aplikacji w przeciwieństwie do biznesu - zgaduję takie rzeczy jak walidacje danych wejściowych sesji/użytkownika? Na przykład kontroler samochodu może zwrócić wynik działania/widoku, który zawiera listę dziesięciu najlepszych samochodów przefiltrowanych według typu i najlepszego mpg. Załóżmy więc, że mam wstrzyknięty do kontrolera ICarRepository 'carRepo' (używając wzorca repozytorium / DI), filtruję moje samochody z parametru metody akcji, np. var cars = carRepo.getCarsByType("hatchback"); Więc zachowałem wiedzę o dostępie do danych poza moim kontrolerem za pomocą repozytorium, teraz, aby utrzymać logikę biznesową poza kontrolerem przy użyciu modelu domeny - var result = new MpgCalculator(cars); - Powiedzmy, że potrzebuję klasy kalkulatora, ponieważ musi wykonać dodatkową logikę, aby obliczyć najlepszą wydajność paliwową, więcej niż tylko ładowanie / filtrowanie jednostek z bazy danych. Więc teraz mam zestaw danych do renderowania dla mojego widoku, który używał repozytorium do pobierania z warstwy dostępu do danych, oraz obiekt specyficzny dla domeny do przetwarzania i wykonywania zadań związanych z działalnością na tych danych. Czy tutaj popełniam błędy? czy nadal musimy używać wzorca repozytorium, czy mogę po prostu kodować na interfejsie, aby odłączyć ORM i przetestować? W tym temacie, ponieważ moje konkretne klasy dostępu do danych dbcontext znajdują się w warstwie danych, czy definicje interfejsu powinny przechodzić do warstwy domeny/biznesu, co oznacza, że jeśli technologia dostępu do danych zostanie kiedykolwiek zmieniona, moje inne warstwy nie zostaną zmienione? Z tego, co do tej pory przestudiowałem, moja struktura wygląda tak: MVC Internet Application - Standardowy projekt internetowy - modele tutaj to ViewModels Warstwa domeny/biznesu - klasy/modele specyficzne dla biznesu, które kontrolerzy mogą wcześniej wykorzystać do przetwarzania jednostek domeny z warstwy danych przejście do odpowiednich widoków Czy wymagana jest abstrakcja repozytorium? - słyszę wiele dyskusji na ten temat, szczególnie przy korzystaniu z warstwy danych ORM - klasy encji (samochód, furgonetka, motocykl), DbContext - warstwa technologii dostępu do danych konkretnych przepraszam, jeśli moje przykłady nie mają sensu, staram się poznać najlepsze wzory bez niepotrzebnego komplikowania aplikacji!


title: Czysty sposób na użycie mutowalnej implementacji niezmiennych interfejsów do enkapsulacji

text: Mój kod pracuje nad pewną relacją kompostu, która tworzy strukturę drzewa, klasa A ma wiele dzieci typu B, która ma wiele dzieci typu C itd. Klasa najniższego poziomu, nazwij ją bar, również wskazuje na połączoną klasę bar. Dzięki temu prawie każdy obiekt w mojej domenie jest ze sobą połączony. Obiekty niezmienne byłyby problematyczne ze względu na koszt przebudowy prawie całej mojej domeny w celu dokonania jednej zmiany w jednej klasie. Zdecydowałem się na podejście interfejsowe. Każdy obiekt ma niezmienny interfejs, który publikuje tylko metody pobierające. Mam obiekty kontrolera, które konstruują obiekty domeny, a zatem mają odniesienie do pełnych obiektów, dzięki czemu są w stanie wywoływać metody ustawiające; ale tylko zawsze publikuje niezmienny interfejs. Wszelkie żądane zmiany przejdą przez kontroler. A więc coś takiego: interfejs publiczny ImmutableFoo{ public Bar getBar(); lokalizacja publiczna getLocation(); } public class Foo implementuje ImmutableFoo{ private Bar bar; prywatna lokalizacja Lokalizacja; @Zastąp publiczny Bar getBar(){ return Bar; } public void setBar(Bar bar){ this.bar=bar; } @Override public Location getLocation(){ return Lokalizacja; } } public class Kontroler{ Private Map<Location, Foo> fooMap; public ImmutableFoo addBar(Bar bar){ Foo foo=fooMap.get(bar.getLocation()); if(foo!=null) foo.addBar(bar); zwróć foo; } } Czułem, że podstawowe podejście wydaje się rozsądne, jednak kiedy rozmawiam z innymi, zawsze wydają się mieć problem z wyobrażeniem sobie tego, co opisuję, co budzi we mnie obawy, że mogę mieć większy problem z projektem, niż jestem świadomy. Czy problematyczne jest tak ścisłe sprzężenie obiektów dziedzinowych, czy stosowanie quasi-zmiennego podejścia do ich modyfikacji? Zakładając, że samo podejście projektowe nie jest z natury wadliwe, szczególna dyskusja, która sprawiła, że zacząłem się zastanawiać nad moim podejściem, dotyczyła obecności logiki biznesowej w obiektach domeny. Obecnie mam moje metody ustawiające w mutowalnych obiektach do sprawdzania błędów i całej innej logiki wymaganej do weryfikacji i wprowadzania zmian w obiekcie. Zasugerowano, że powinno to zostać przeniesione do klasy usług, która stosuje całą logikę biznesową, aby uprościć moje obiekty domeny. Rozumiem zalety wyśmiewania/testowania i ogólnego podziału logiki na dwie klasy. Jednak z metodą/obiektem usługi Wydaje się, że tracę część zalet polimorfizmu, nie mogę przesłonić klasy bazowej, aby dodać nowe sprawdzanie błędów lub logikę biznesową. Wygląda na to, że gdyby moje klasy polimorficzne były wystarczająco skomplikowane, otrzymałbym metodę usługi, która musi sprawdzić kilkanaście flag, aby zdecydować, jakie sprawdzanie błędów i logika biznesowa mają zastosowanie. Na przykład, gdybym chciał mieć childFoo, który miałby również pole rozmiaru, które powinno być porównane do bar przed dodaniem par, moje obecne podejście wyglądałoby mniej więcej tak. public class Foo implementuje ImmutableFoo{ public void addBar(Bar bar){ if(!getLocation().equals(bar.getLocation()) throw new LocationException(); this.bar=bar;} } interfejs publiczny ImmutableChildFoo extends ImmutableFoo{ public int getSize(); } public ChildFoo rozszerza Foo implementuje ImmutableChildFoo{ private int size; @Override public int getSize(){ zwraca rozmiar; } @Override public void addBar(Bar bar){ if(getSize()<bar.getSize() ){ throw new LocationException();super.addBar(bar);} Mój kolega sugerował, aby zamiast tego mieć obiekt usługi, który wygląda mniej więcej tak (nad uproszczonym, obiekt 'usługa' byłby prawdopodobnie bardziej złożony).public interface ImmutableFoo{ ///oryginalny interfejs, przypuszczalnie y używane w innych metodach public Location getLocation(); publiczna wartość logiczna isChildFoo(); } interfejs publiczny ImmutableSizedFoo implementuje ImmutableFoo{ public int getSize(); } public class Foo implementuje ImmutableSizedFoo{ public Bar bar; @Zastąp public void addBar(Bar bar){ this.bar=bar; } @Override public int getSize(){ //domyślny rozmiar jeśli nie jest znany return 0; } @Override public boolean isChildFoo return false; } } public ChildFoo rozszerza Foo{ private int size; @Zastąp public int getSize(){ return size; } @Override public boolean isChildFoo(); zwróć prawdę; } } public class Kontroler{ Private Map<Location, Foo> fooMap; public ImmutableSizedFoo addBar(Bar bar){ Foo foo=fooMap.get(bar.getLocation()); service.addBarToFoo(foo, bar); zwrócone foo; } public class Service{ public static void addBarToFoo(Foo foo, Bar bar){ if(foo==null) return; if(!foo.getLocation().equals(bar.getLocation())) rzucaj new LocationException(); if(foo.isChildFoo() && foo.getSize()<bar.getSize()) wyrzuć nowe LocationException(); foo.setBar(bar); } } } Czy zalecane podejście polegające na korzystaniu z usług i odwracaniu kontroli jest z natury nadrzędne, lub w niektórych przypadkach lepsze od bezpośredniego nadpisywania metod? Jeśli tak, to czy istnieje dobry sposób na skorzystanie z podejścia usługowego bez utraty mocy polimorfizmu w celu zastąpienia niektórych zachowań?


title: Chcę użyć biblioteki do mojego projektu, pomylonej z licencją (licencja AGPL vs MIT)

text: Pracuję nad oprogramowaniem Java i istnieje potrzeba użycia zewnętrznych bibliotek. Znalazłem dwie odpowiednie biblioteki. Jeden jest na licencji AGPL, a drugi na licencji MIT. Teraz zadaję sobie pytanie, czy mogę użyć tych bibliotek, jeśli: * zrobiłbym oprogramowanie nie-opensource-nie-wolne lub * zrobiłbym oprogramowanie-non-opensource-free-to naprawdę nie rozumiem całej rzeczy licencyjnej, czy ktoś mógłby powiedzieć ja, która z bibliotek do jakiego rodzaju oprogramowania byłaby lepsza? Dziękuję Ci


title: Wydarzenia, na których może się wykazać młodszy programista/student CS?

text: Niedawno zauważyłem ogłoszenie „Google Summer of Code” i chociaż jestem chętny do przyłączenia się, widzę, że moje szanse są po prostu niewielkie. Mam mało czasu na ukształtowanie moich pomysłów i przestudiowanie kodu źródłowego. Zastanawiam się tylko - czy są jakieś podobne wydarzenia, które dają uczniom możliwość rozwijania prawdziwych projektów roboczych? Zwłaszcza te, które warto wymienić w CV?


title: Przedstawiamy programowanie matematykowi

text: Obecnie jestem programistą, mam prawie 16 lat i praktycznie zawęziłem swoją karierę do czegoś, co dotyczy informatyki lub elektrotechniki (wiem, że są zupełnie inne, ale to pytanie dotyczy mojego przyjaciela), ale mój przyjaciel nie jest taki pewien. Jest bardzo zainteresowany matematyką i jest w tym bardzo dobry i myślę, że spodobałoby mu się programowanie, ale nie chce tego próbować ( **edytuj** _chce_ spróbować, ale nigdy wcześniej tego nie robił). Czy ktoś może dać mi sugestie dotyczące języka lub narzędzia, którym mógłby pobawić się w programowaniu (przypuszczam, że na dość podstawowym poziomie) do rozwiązywania problemów matematycznych lub angażowania jakiegoś rodzaju matematyki. Jak mówię, bardzo lubi matematykę, ale myślę, że spodobałoby mu się programowanie, problem polega na tym, że nie chcę, aby zniechęcały go rzeczy, które nie są istotne na początkowych poziomach, takie jak alokacja pamięci i in. Wiem, że jest to bardzo ważne, ale chodzi o to, że chcę, aby nauczył się trochę programowania z matematyką, a następnie mam nadzieję, że jeśli będzie wystarczająco zainteresowany, zacznie uczyć się programowania jako programowania. **Edytuj:** Nie chodzi o to, że jest zupełnie niezainteresowany - tym bardziej, że wcześniej nie badał aktywnie okolicy, może dlatego, że nie jest o tym poinformowany. Nie chciałbym go zmuszać do robienia czegoś, czego nie chce robić, uważam to za mały nacisk, aby mógł nauczyć się programowania. Jeśli mu się to nie spodoba – w porządku, nie mogę tego kontrolować i nie chcę, ale jeśli okaże się, że mu się to podoba – ten nacisk będzie słuszny.


title: Jak obsłużyć dane wyników wyszukiwania innych firm (przez pamięć podręczną)

text: Mam w swojej witrynie funkcję wyszukiwania, która pobiera dane z 6 różnych zasobów stron trzecich. Problem polega na tym, że ciągłe żądanie danych na stronie wyników trwa zbyt długo. Czytałem na pytania takie jak to na SO o sesji, która nie jest dobrym wyborem, ale dla mnie **'memcache'** nie jest opcją, ponieważ serwer nie ma zainstalowanego memcached i nie mam teraz możliwości jego zainstalowania . Czy istnieje inne podejście, aby to zrobić? Przechowywanie w bazie danych wydaje się nieodpowiednie, ponieważ dane zależą od żądanych terminów wyszukiwania. To, o czym myślałem, to napisanie pliku na serwerze, który będzie działał jako pamięć podręczna dla tego pliku, ale nie wiem, skąd miałbym wiedzieć, kiedy go później usunąć.


title: Obsługa zadań w tle w dużej witrynie

text: Mamy do czynienia z ciekawym problemem na StackOverflow. Mamy całą masę małych „potrzeb do załatwienia w najbliższym czasie”. Przykładem jest aktualizacja list „Powiązanych pytań”. To, co zrobiliśmy w przeszłości, to przeniesienie tych zadań na ładowane strony niektórych użytkowników. To nigdy nie było idealne, ale nie było tak naprawdę zauważalne. Teraz, gdy SO przekroczyło znak zapytania 1 000 000, ci pechowi użytkownicy zaczynają to odczuwać. Naturalnym rozwiązaniem jest odsunięcie tych zadań na dalszy plan. Rozważam dwa szerokie sposoby na zrobienie tego. ### 1. W IIS jako niestandardowa pula wątków/kolejka robocza Zasadniczo uruchamiamy kilka wątków (nie będących pulą wątków, aby nie kolidować z usługami IIS) i zlecamy im obsługę niektórych kolekcji, do których wkładamy Funcs . Największą zaletą jest prostota. Nie musimy się martwić o organizowanie czegokolwiek, ani nie musimy upewniać się, że jakaś usługa zewnętrzna działa i odpowiada. Uzyskujemy również dostęp do całego naszego wspólnego kodu. Wadą jest to, że nie powinniśmy używać wątków w tle. Zastrzeżenia, które znam, koncentrują się wokół głodu IIS (jeśli używasz ThreadPool) i wątków umierających losowo (z powodu recyklingu AppPool). Mamy istniejącą infrastrukturę, która sprawia, że losowa śmierć wątku nie stanowi problemu (w zasadzie możliwe jest wykrycie zadania, które zostało porzucone), a ograniczenie liczby wątków (i używanie wątków innych niż ThreadPool) również nie jest trudne. ~~Czy brakuje mi jakichkolwiek innych zastrzeżeń do pulowania wątków/kolejek roboczych w procesie IIS?~~ Przeniesiono do StackOverflow, ponieważ tak naprawdę nie zostało to tutaj omówione. ### 2. Jako usługa Rozwiązanie innej firmy lub niestandardowe. Zasadniczo skierowalibyśmy zadanie przez granicę procesu do jakiejś usługi i po prostu o tym zapomnieliśmy. Przypuszczalnie łączymy jakiś kod lub ograniczamy się do surowego SQL + ciąg połączenia. Zaletą jest to, że jest to „właściwy sposób”, aby to zrobić. Wadą jest to, że albo jesteśmy bardzo ograniczeni w tym, co możemy zrobić, albo będziemy musieli wypracować jakiś system, aby ta usługa była zsynchronizowana z naszą bazą kodu. Będziemy też musieli jakoś podpiąć cały nasz monitoring i logowanie błędów, które otrzymujemy za darmo z opcją "W IIS". **Czy są jakieś inne korzyści lub problemy z podejściem serwisowym?** Krótko mówiąc, czy istnieją nieprzewidziane i nie do pokonania problemy, które sprawiają, że podejście nr 1 jest niewykonalne, a jeśli tak, to czy istnieją jakieś dobre usługi stron trzecich, na które powinniśmy zwrócić uwagę pod kątem podejścia nr 2?


title: Czy linq jest bardziej wydajny niż wydaje się na powierzchni?

text: Jeśli napiszę coś takiego: var things = mitings .Where(x => x.IsSomeValue) .Where(y => y.IsSomeOtherValue) Czy to to samo co: var results1 = new List<Thing>(); foreach(var t w mitingach) if(t.IsSomeValue) results1.Add(t); var results2 = new List<Thing>(); foreach(var t w wynikach1) if(t.IsSomeOtherValue) results2.Add(t); A może pod okładkami jest jakaś magia, która działa bardziej tak: var results = new List<Thing>(); foreach(var t w mitingach) if(t.IsSomeValue && t.IsSomeOtherValue) results.Add(t); A może jest to coś zupełnie innego?


title: Jak uzyskać różne zasoby w jednym punkcie końcowym w RESTful?

text: Mam usługę sieciową REST, która ma kilka zasobów, takich jak firma i użytkownik. Ale teraz muszę dokonać modyfikacji w API, aby zwrócić specjalną listę łączącą firmę, użytkownika i być może inny rodzaj zasobu. Jak lista rekomendacji z różnymi rodzajami zasobów. Jakie jest najlepsze podejście do rozwiązania tego problemu? Muszę stworzyć nowy punkt końcowy (zasób), coś w stylu: `/recommendations`? Mam już punkt końcowy `/company` i punkt końcowy `/user` zwracający odpowiednie obiekty. Jest okej. Ale teraz potrzebuję sposobu na zwrócenie tablicy z kombinacją użytkowników i firm. Myślę też, że json będzie wyglądał jak tablica obiektów, ale skąd klient może wiedzieć, jaki typ obiektu jest analizowany, jeśli każdy obiekt w tablicy jest innym zasobem? **EDYTUJ** Chcę, aby mój klient mógł wyświetlić ekran rekomendacji w aplikacji. Problem w tym, że ta lista może łączyć wiele typów danych (użytkownicy, firmy). Nie ma znaczenia, czy te zasoby mają związek, czy nie. Klient powinien otrzymać taki json: "recomendations": [ { "id_user": 1 "name": "Jean" ... }, { "id_company": 2 "name": "Starbucks" ... }, ... ]


title: Technologie przesyłania wiadomości między aplikacjami ?

text: Ostatnio musiałem stworzyć program do wysyłania wiadomości pomiędzy dwoma plikami wykonywalnymi winformów. Użyłem narzędzia z prostymi wbudowanymi funkcjami, aby uniknąć konieczności odkrywania wszystkich tajników tej ogromnej liczby istniejących protokołów. Ale teraz jestem gotowy, aby dowiedzieć się więcej o różnicach wewnętrznych między każdym z tych protokołów. Wygooglowałem kilka z nich, ale byłoby bardzo wdzięczne mieć dobrą książkę odniesienia, która daje mi czysty obraz tego, jak działa każdy protokół i jakie są zalety i wady w kilku kontekstach. Oto lista fajnych protokołów, które znalazłem: * Pamięć współdzielona * TCP * Element listy * Nazwany potok * Mapowanie plików * Mailslots * MSMQ (Microsoft Queue Solution) * WCF Wiem, że wszystkie te protokoły nie są specyficzne dla języka, byłoby miło, gdyby przykład mógł być w .net. Dziękuję Ci bardzo.


title: Co może się nie udać, jeśli naruszona zostanie zasada substytucji Liskov?

text: Śledziłem to wysoko głosowane pytanie dotyczące możliwego naruszenia zasady substytucji Liskov. Wiem, co to jest zasada Liskov Substitution, ale wciąż nie jest dla mnie jasne, co może się nie udać, jeśli jako programista nie będę myślał o tej zasadzie podczas pisania kodu obiektowego.


title: Zamieszanie w karierze

text: Dla kogoś, kto nie pracował nigdzie w technologii Java z wyjątkiem uczenia się tylko podstawowych pojęć na swoich studiach magisterskich (MCA) i ukończeniu studiów (BCA, licencjat): 1. Czy można dostać pracę w dowolnym miejscu w technologii Java? Biorąc pod uwagę, że nie studiował tego w zwykłym college'u, a nie w pierwszej klasie przez cały czas, z wyjątkiem BCA, MCA (w przypadku firm indyjskich lub międzynarodowych). 2. W jaki sposób zdobędzie wymarzoną pracę (w dziedzinie Java) i jakie są perspektywy jego życia zawodowego? 3. Jeśli wiedza, którą otrzymał na studiach/uniwersytetach, nie jest wystarczająca, co więcej powinien zrobić, aby uczynić to swoją specjalnością przed rozpoczęciem poszukiwania pracy lub zwiększeniem ofert pracy? Wszelkie sugestie są mile widziane. I bardzo dziękuję za miłe sugestie.


title: Obwinianie dzisiejszych bolączek na wczorajszy dług techniczny

text: Zaskakująca liczba problemów z jakością, skalowalnością i ładowaniem wystąpiła w aktualnie obsługiwanej przeze mnie aplikacji, której pierwotnie nie napisałem. Na szczęście mam nowe projekty, które robię od podstaw, aby zachować pozory mojego zdrowia psychicznego. Oryginalny zespół składał się z 20 programistów (w większości z przestarzałymi zestawami umiejętności), bez dokumentów wymagań biznesowych lub testerów zapewniania jakości i od samego początku słabo zarządzany w sposób kaskadowy. Wczesne dni produkcji były wstydliwym koszmarem, który polegał na łataniu kruchego kodu przypominającego procedury z jeszcze bardziej kruchymi poprawkami. Później dodano funkcje, które zostały wbite w model danych, który nigdy nie miał ich obsługiwać, i często zdarza się, że ten sam kod zduplikowany jest 10 razy, a zasoby nie są bezpiecznie zamykane, a zapytania ORM, które po prostu pobierają dziesiątki tysięcy jednostek wyrzucić wszystko oprócz garstki. Teraz jestem tylko ja i za każdym razem, gdy pojawia się nowy problem, przepisuję moduł do lepszych standardów i czynię go DUŻO bardziej stabilnym, ale Zarząd potrzebuje odpowiedniego wyjaśnienia, dlaczego to wszystko się dzieje. Wydają się zszokowani i zakłopotani, że ta aplikacja jest kiepskiej jakości i tonie w długu technicznym. Na szczęście rozumieją koncepcję długu technicznego i wspierają mnie w dążeniu do jego wyeliminowania, a także bardzo mnie wspierają i doceniają, ale czuję, że po prostu **obwiniam** oryginalną drużynę (która wyszła, by zrujnować inny projekt w innym dziale). Najważniejsze jest to, że nie chcę być _"tym facetem"_, który zawsze narzeka na deweloperów projektu przed nim. Widziałem już tę postawę u ludzi w mojej karierze, którzy osobiście uważali, że byli ignorantami i nie brali pod uwagę okoliczności i wpływów projektowych, które zachęcały rzeczy do tego, jakie były. Zwykle widzę taką postawę obwiniania poprzedniego zespołu za kiepski projekt i implementację przez idealistycznych młodszych programistów, którzy nie mieli takich doświadczeń życiowych, jakie mieli starsi członkowie i z których korzystali. Czy uważasz, że istnieje lepszy, być może łagodniejszy sposób zgłaszania tego rodzaju problemów kierownictwu bez naruszania reputacji osoby/zespołu przed tobą?


title: Zalecane bezpieczne podejście do potwierdzania, że adres URL jest wywoływany przez legalnego rozmówcę

text: Używam CRON w AppEngine i Cron wywołuje moją aplikację sieci web w określonej aplikacji. Chcę wykonywać funkcje tylko po wywołaniu przez moją aplikację AppEngine. Jakie jest/są zalecane podejście do potwierdzania, że dzwoniący jest legalny? Nie chcę polegać na tym, że nikt inny nie zna konkretnego adresu URL.


title: Cel zakończenia tagów w SGML/HTML/XML?

text: Są takie tagi, które mają skutek natychmiastowy (< br >) i takie, które wpływają na to, co jest między nimi ( < a > </ a > ). Znacznik zamykający to **verbose** i uważam, że również **redundant** : <parametry tagu> ... </tag> ## verbose Porównaj z wyrażeniami s LISP-a. (parametry znacznika) ## nadmiarowe Znaczniki końcowe nie są nawet konieczne. Te języki są bezkontekstowe i nie jest to możliwe tam: <tag1> <tag2> </tag1> </tag2> Zasadniczo powinny być równoważne: <tag1> <tag2> </> </> <tag1> <tag2 > </tag2> </tag1> ## pytania Czy tagi końcowe mają pomóc w czytelności? Jaki jest cel redundancji w zamykaniu tagów? Chcę zrozumieć logikę stojącą za tym projektem. Dziękuję. :)


title: Czy rejestrowanie nazwy klasy i metody w przypadku wystąpienia wyjątku jest luką w zabezpieczeniach?

text: Mam następujące : public class doCheck(){ public void performCheck(){ try { wykonaj wszystkie sprawdzenia...... } catch(Exception e){ logger.error("Wystąpił wyjątek w klasie doCheck w metodzie performCheck") ; rzucony nowy MyNewException(e.getMessage()); } } } Czy rejestrowanie nazwy klasy i metody jest bezpieczne?


title: Czy są testy kodowania, aby zrekrutować inżyniera QA?

text: Jestem inżynierem oprogramowania w małej firmie i obecnie rekrutujemy naszego pierwszego inżyniera QA. Facet będzie musiał napisać jak najwięcej testów automatycznych w naszym zestawie narzędzi internetowych. Ponieważ brałem udział w rekrutacji prawie wszystkich programistów naszego zespołu inżynierskiego, kierownik QA poprosił mnie o rozmowę kwalifikacyjną z kandydatami. Większość z nich brzmi naprawdę mądrze. Kiedy wyjaśniają swoje przeszłe doświadczenia, dają poczucie, że wiedzą, o czym mówią, nawet jeśli podają wiele szczegółów na temat struktury lub narzędzi, które są im zaznajomione (takich jak selen lub inne rzeczy). Jednak pod koniec rozmowy lubię rzucić im wyzwanie małym testem z kodowania. Wiem, że nie rekrutujemy programisty, ale ponieważ będzie musiał _kodować_ testy, uważam, że musi być trochę biegły w tej dziedzinie. Systematycznie zadaję to samo pytanie: „Czy mógłbyś w wybranym przez siebie języku napisać treść funkcji, która przyjmuje wprowadzoną liczbę całkowitą i zwraca jej reprezentację w postaci ciągu. Na przykład w C# prototypem metody może być coś w rodzaju `public string itoa(int n)`" I niestety, do tej pory 100% kandydatów przegrało... Czy to dlatego, że pytanie jest w jakiś sposób poza zakresem dla inżyniera QA? a w takim razie czy mógłbyś zaproponować lepsze ćwiczenie? A może jest to po prostu niedopuszczalne i nadal musimy szukać kogoś, kto byłby w stanie przynajmniej zdać test? Dziękuję za odpowiedzi.


title: Czy zorientowanie na obiekt jest naprawdę dobre dla dzieci?

text: Czytałem, że Smalltalk został stworzony z myślą o dzieciach lub edukacji. Więc czy było w tym dobrze? Lepiej niż w innych językach? Czy było to dobre/łatwe również dla przeciętnego dziecka (czytałem, że bystre dzieci się podobały). Czy jest jakieś badanie, które to potwierdza? Czy Twoje doświadczenie jest dobre?


title: Jakie korzyści daje mi Linux podczas programowania w PHP dla sieci?

text: Mam zamiar rozpocząć duży projekt PHP z przyjacielem. Po raz pierwszy używam PHP i zastanawiałem się, czy powinienem spróbować programować na Linuksie, ponieważ jest tak popularny. Miałem już pewne doświadczenie z Linuksem i wybór edytora nie będzie trudny, ponieważ znam vima (chociaż przyjrzałem się VS.PHP i odsuwa mnie to od zmiany). Czy używanie Linuksa podczas programowania PHP (lub dowolnego języka internetowego) daje mi przewagę?


title: Czy programowanie funkcjonalne jest silnie powiązane z matematyką?

text: Czy programowanie funkcjonalne jest tak związane z matematyką, ponieważ większość programowania funkcjonalnego jest przedstawiana za pomocą pojęć matematycznych? Czy MUSISZ mieć silną bazę matematyczną, aby nauczyć się i zrozumieć programowania funkcjonalnego dla programisty z imperatywnym wykształceniem?


title: Czy kompilatory Fortran naprawdę generują szybszy kod niż kompilatory C?

text: Kiedy studiowałem na uniwersytecie, często słyszałem, że kompilatory Fortranu produkują szybszy kod niż kompilatory C dla równoważnego programu. Kluczowe rozumowanie wyglądało tak: _Kompilator Fortran emituje średnio 1,1 instrukcji procesora na linię kodu, podczas gdy kompilator C emituje średnio 1,6 instrukcji procesora na linię kodu_ - nie pamiętam dokładnych liczb, ale Pomysł polegał na tym, że kompilatory C emitowały zauważalnie więcej kodu maszynowego, a zatem produkowały wolniejsze programy. Jak trafne jest takie porównanie? Czy możemy powiedzieć, że kompilatory Fortranu produkują szybsze programy niż kompilatory C lub odwrotnie i dlaczego ta różnica istnieje?


title: Gdzie używasz ROT13?

text: Czytałem dokumentację dla vima i zauważyłem, że istnieje skrót, na przykład `g?w` przekształci następne słowo za pomocą ROT13. Wiem też, że możesz zmienić kodowanie pliku Pythona na ROT13. Oto moje pytanie: Dlaczego? Wygląda na to, że nie byłoby to przydatne, z wyjątkiem programów dowcipnych, takich jak Django FUNserver.