title: Czy typ singleton może zastąpić statyczne metody i klasy?

text: > **Possible Duplicate:** > Jaka jest różnica między metodami all-static a zastosowaniem pojedynczego wzorca >? W C# metody statyczne od dawna służą do wywoływania ich bez tworzenia instancji klas. Dopiero w późniejszym roku uświadomiliśmy sobie problemy związane ze stosowaniem metod i klas statycznych. * Nie mogą używać interfejsów * Nie mogą używać dziedziczenia * Są trudne do przetestowania, ponieważ nie można tworzyć mocków i stubów Czy jest lepszy sposób? Oczywiście musimy mieć cały czas dostęp do metod bibliotecznych bez klas, w przeciwnym razie nasz kod stanie się dość zagracony. Jednym z możliwych rozwiązań jest użycie nowego słowa kluczowego dla starej koncepcji: _singleton_. Singletony to globalne instancje klasy, ponieważ są to instancje, których możemy używać tak, jak zwykłych klas. Aby ich użycie było przyjemne i praktyczne, potrzebowalibyśmy trochę cukru składniowego. Powiedzmy, że klasa Math byłaby typu singleton zamiast rzeczywistej klasy. Rzeczywistą klasą zawierającą wszystkie domyślne metody dla singletona Math jest DefaultMath, która implementuje interfejs IMath. Singleton zostałby zadeklarowany jako singleton Math : IMath { public Math { this = new DefaultMath(); } } Gdybyśmy chcieli zastąpić wszystkie operacje matematyczne naszą własną klasą, moglibyśmy stworzyć nową klasę _MyMath_ dziedziczącą _DefaultMath_ , lub moglibyśmy po prostu dziedziczyć po interfejsie IMath i stworzyć zupełnie nową klasę. Aby uczynić naszą klasę aktywną klasą Math, należy wykonać proste zadanie Math = new MyMath(); i voila! następnym razem, gdy wywołamy Math.Floor, wywoła ona twoją metodę. Zauważ, że dla normalnego singletona musielibyśmy napisać coś takiego jak Math.Instance.Floor, ale kompilator eliminuje potrzebę właściwości Instance Innym pomysłem byłaby możliwość zdefiniowania singletonów jako Lazy, aby były tworzone tylko wtedy, gdy ponownie nazwany, jak leniwy singleton Math : IMath Jak myślisz, czy byłoby to lepsze rozwiązanie niż statyczne metody i klasy? Czy są jakieś problemy z tym podejściem? **Uzupełnienie** Podniesiono kilka punktów, że jedną z głównych zalet metod statycznych jest posiadanie metod, które są „bezstanowe”, a zatem w pewnym stopniu wolne od skutków ubocznych z punktu widzenia współbieżności. Z całego serca zgadzam się, że to słuszny punkt. Jednak mieszamy tutaj dwa różne problemy i problemy: po pierwsze, niektóre metody są możliwe do wywołania i globalnie dostępne bez konieczności jawnego tworzenia instancji. Drugim jest posiadanie metod, które są bezstanowe. Drugi problem można rozwiązać za pomocą metody posiadającej coś w rodzaju bezstanowego słowa kluczowego, które podobnie jak static uniemożliwiało im wywołanie tego, a może nawet więcej, aby wymusić brak efektów ubocznych. W przypadku singli zamiast klas statycznych i czegoś takiego jak klasy i metody bezstanowe, myślę, że będziesz mieć następujące **Za i przeciw** za i przeciw * Metody „statyczne” w innych klasach i klasach frameworka można łatwo zaprojektować tak, aby można je było przesłonić * Klasy byłyby być łatwiejszym do testowania * Używanie instancji zamiast klas statycznych oznacza, że wzorce projektowe działają lepiej (takie jak fabryki) * Brak ograniczeń dziedziczenia i polimorfizmu w przeciwieństwie do statycznych **Wady** * Być może nieco gorsza wydajność? * Źli programiści zrobią wszystko w singletonach, aby były dostępne globalnie zamiast używać wstrzykiwania zależności, być może powinieneś mieć dostęp tylko do metod singleton, a nie do właściwości/pól, aby uniknąć zmiennych globalnych :) * ? Być może matematyka była złym przykładem, ale wyobraź sobie, że jeśli metody łańcuchowe .Net są nieefektywne, możesz łatwo zastąpić je własnymi przy użyciu tej metody. Lub jakaś klasa innej firmy ma metodę singleton, którą chciałeś nieznacznie zmienić, możesz odziedziczyć i zmienić tę metodę


title: Wzorce, aby uniknąć długiego bloku przełączania w interfejsie użytkownika?

text: Czasami masz wiele encji, które mają wspólne części, ale również powinny być adresowane jednoznacznie w interfejsie użytkownika. Na przykład w systemie CMS masz wiele typów treści (takich jak wiadomości, obrazy, artykuły, strony itp.), które mają wspólny tytuł, adres URL, ustawienia SEO itp., ale które mają również określone pola. Na przykład obraz ma pole ścieżki, podczas gdy w wiadomościach go nie ma. Teraz, gdy chcesz pracować z tymi elementami na stronie, napotykasz długie bloki `switch` i `if`. Na przykład: switch(currentLoadedContentType) { case ContentType.Gallery: // Pokaż pola specyficzne dla galerii; przerwanie; case ContentType.News: // Pokaż pola dotyczące wiadomości; przerwanie; case ContentType.Artiel: // Pokaż określone pola artielów; przerwanie; case ContentType.Page: // Pokaż pola specyficzne dla stron; przerwanie; } W miarę zwiększania liczby typów zawartości ta lista staje się coraz dłuższa. Jakie wzory są dostępne, aby skrócić długość lub wyeliminować ten długi przełącznik, ale jednocześnie nie powodują powtórzeń. (Jestem wielkim fanem DRY).


title: Różnica między haszem a słownikiem

text: Jaka jest różnica między haszem a słownikiem. Wychodząc ze skryptowania, czuję, że są podobne, ale chciałem poznać dokładne różnice, Google nie pomógł mi zbytnio.


title: Programowanie strategii handlowej

text: Przepraszam, jeśli nie jestem wystarczająco opisowy, ponieważ nie mam zbyt dużego zaplecza, jeśli chodzi o te rzeczy: Jak mam zakodować prymitywną strategię handlową i połączyć ją z jakimś sztucznym środowiskiem handlowym? Od czego zacząć i jakie inne podstawowe pytania powinienem zadać? Jestem bardziej zainteresowany robieniem tego, ponieważ mnie to interesuje niż robieniem zwrotów. Idealnie wykorzystuje losowe/historyczne dane rynkowe i w rzeczywistości nie wykonuje żadnych prawdziwych transakcji. Moje wykształcenie: Prawie skończyłem studia licencjackie z informatyki i miałem wstępne kursy z finansów i ekonomii. Zaznajomiony głównie z C i Javą.


title: Czy ktoś robi „prawdziwe” TDD za pomocą Visual-C++, a jeśli tak, to jak to robi?

text: Test Driven Development implikuje _pisanie testu przed kodem_ i po określonym cyklu: * Napisz test * Sprawdź test (uruchom) * Napisz kod produkcyjny * Sprawdź test (uruchom) * Oczyść kod produkcyjny * Sprawdź test (uruchom) O ile ja Obawiam się, że jest to możliwe tylko wtedy, gdy twoje rozwiązanie programistyczne pozwala bardzo szybko przełączać się między kodem produkcyjnym a testowym i bardzo szybko wykonać test dla określonej części kodu produkcyjnego. Teraz, podczas gdy istnieje wiele frameworków testów jednostkowych dla C++ (używam Bost.Test atm.), wydaje się, że _nie_ naprawdę istnieje żadne przyzwoite (dla _natywnego C++_) rozwiązanie Visual Studio (wtyczka), które sprawia, że cykl TDD jest znośny niezależnie od używanego frameworka. „Znośny” oznacza, że wystarczy jedno kliknięcie, aby uruchomić test dla określonego pliku cpp bez konieczności ręcznego konfigurowania oddzielnego projektu testowego itp. „Znośny” oznacza również, że prosty test rozpoczyna się (połączenie!) i działa bardzo szybko . Jakie narzędzia (wtyczki) i techniki są dostępne, dzięki czemu cykl TDD jest możliwy do natywnego programowania w C++ w Visual Studio? Uwaga: nie mam problemu z darmowymi lub „komercyjnymi” narzędziami. **Proszę** : **Brak** zaleceń ramowych. (Chyba, że platforma ma dedykowaną wtyczkę Visual Studio i chcesz ją polecić.) * * * Edytuj **Uwaga** : dotychczasowe odpowiedzi zawierały łącza dotyczące sposobu integracji struktury testów jednostkowych z programem Visual Studio. Zasoby mniej więcej opisują, jak skompilować środowisko UT i uruchomić pierwsze testy. _To **nie** o to chodzi w tym pytaniu._ Jestem zdania, że aby naprawdę pracować wydajnie, posiadanie testów jednostkowych w ręcznie utrzymywanym(!), oddzieleniu vcproj od klas produkcyjnych doda tyle narzutu, że TDD "nie jest możliwe". O ile mi wiadomo, _nie_ dodajesz dodatkowych „projektów” do rzeczy Java lub C#, aby umożliwić testy jednostkowe i TDD, i nie bez powodu. To _powinno_ być możliwe w C++, biorąc pod uwagę odpowiednie narzędzia, ale wydaje się (to pytanie dotyczy), że jest bardzo mało narzędzi dla TDD/C++/VS. * * * Googlując, znalazłem jedno narzędzie, VisualAssert, które wydaje się zmierzać we właściwym kierunku. Jednak faiks, nie wydaje się być w powszechnym użyciu (w porównaniu z CppUnit, Boost.Test itp.). * * * Edytuj: Chciałbym dodać komentarz w kontekście tego pytania. Myślę, że jest to dobre podsumowanie zarysu (części) problemu: (komentarz Billy ONeal) > Visual Studio nie używa „skryptów budowania”, które mogą być > edytowalne przez użytkownika. Jeden projekt tworzy jeden plik binarny. Co więcej, Java ma właściwość, że Java nigdy nie buduje kompletnego pliku binarnego — tworzony plik binarny to po prostu plik ZIP plików klasy. Dlatego możliwe jest skompilowanie osobno, a następnie > JAR razem ręcznie (używając np. 7z). C++ i C# faktycznie łączą swoje > binaria, więc ogólnie rzecz biorąc, nie można napisać takiego skryptu. Najbliższe, co możesz uzyskać, to skompilowanie wszystkiego osobno, a następnie wykonanie dwóch > linków (jedno do produkcji, drugie do testowania).


title: Czy jest to akceptowalne podejście do cofania/ponawiania w Pythonie?

text: Tworzę aplikację (wxPython) do przetwarzania niektórych danych z dokumentów Excela. Chcę, aby użytkownik mógł cofać i ponawiać akcje, nawet gigantyczne akcje, takie jak przetwarzanie zawartości 10 000 komórek jednocześnie. Wyszukałem temat w Google i wszystkie rozwiązania, które udało mi się znaleźć, zawierają dużo czarnej magii lub są zbyt skomplikowane. Oto jak wyobrażam sobie mój prosty schemat cofania / ponawiania. Piszę dwie klasy - jedną o nazwie `ActionStack` i abstrakcyjną o nazwie `Action`. Każda „cofnięta” operacja musi być podklasą `Action` i definiować metody `do` i `undo`. Podklasa `Action` jest przekazywana do instancji „dokumentu” lub modelu danych i jest odpowiedzialna za zatwierdzenie operacji i zapamiętanie, jak cofnąć zmianę. Teraz każdy dokument jest powiązany z instancją `ActionStack`. `ActionStack` utrzymuje stos akcji (niespodzianka!). Za każdym razem, gdy akcje są cofane i wykonywane są nowe akcje, wszystkie cofnięte akcje są usuwane na zawsze. „ActionStack” automatycznie usunie najstarszą „Akcję”, gdy stos osiągnie konfigurowalną maksymalną kwotę. Wyobrażam sobie, że przepływ pracy wytworzy kod wyglądający mniej więcej tak: class TableDocument(object): def __init__(self, table): self.table = table self.action_stack = ActionStack(history_limit=50) # ... def delete_cells(self, komórki): self.action_stack.push( DeleteAction(self, cell) ) def add_column(self, index, name=''): self.action_stack.push( AddColumnAction(self, index, name) ) # ... def undo (self, count=1): self.action_stack.undo(count) def redo(self, count=1): self.action_stack.redo(count) Biorąc pod uwagę, że żadna ze znalezionych przeze mnie metod nie jest tak prosta, pomyślałem Zanim zrealizuję ten plan, zasięgnę opinii ekspertów. Dokładniej, zastanawiam się nad tym, czy w tym planie są jakieś rażące dziury, których nie widzę?


title: Logika aplikacji – która z dwóch definicji jest prawidłowa?

text: Tak rozumiem _Warstwę aplikacji_ : • Implementuje ona _Logikę aplikacji_ • Ta warstwa zawiera _Usługi aplikacji_ , których używają zewnętrzni konsumenci do komunikacji z Twoją aplikacją • _Usługi aplikacji_ są prostymi i organizują operacje mapowane bezpośrednio na _przypadki użycia_ (stąd również termin _Usługi przepływu pracy_ ) 1) Od: > Logika aplikacji to głównie logika przepływu pracy. Jest to specyficzna dla aplikacji > koordynacja komponentów domeny i infrastruktury zgodnie z wymaganiami > tej konkretnej aplikacji. Od: > Załóżmy firmę, dobrze? Sapient Grey będzie przede wszystkim think tankiem, ale z wewnętrzną grupą ds. rozwoju, która będzie mogła urzeczywistnić wizje komitetu podstawowego. Nasze motto korporacyjne „Rozumny > Szary to ludzie...” zostanie wypolerowane wielkimi, mosiężnymi literami obok > dostosowanej wersji słynnej rzeźby Rodina „Myśliciel”, z których > wszystkie będą zdobić wschodnią stronę naszego zupełnie nowego dziesięciopiętrowy czerwony granit > budynek biurowy.... Och, czekaj. Nie mamy jeszcze biurowca. OK > w takim razie zatrudnimy architekta, który zaprojektuje nasz budynek biurowy, upewniając się >, że będzie zawierał prywatną windę i wyszukane atrium lub dziedziniec w stylu zen > w centrum. W międzyczasie, gdy budynek jest > projektowany i budowany, ty i ja oraz nasi inni elitarni koledzy polecimy sobie > na Tahiti, aby przeprowadzić burzę mózgów na temat wizji, celów, agendy Sapient Grey i opracować szczegółowy biznesplan. > > Nasz architekt opracowuje szczegółowe projekty biurowca, > zastanawia się, jak będzie przebiegać instalacja wodno-kanalizacyjna, jak będą posegregowane i połączone ze sobą instalacje > > elektryczne, jak będzie zorganizowany system > komunikacji międzybiurowej i jak wdrożymy bezpieczeństwo > na wszystkich poziomach. Systemy i projekty, które > obsługuje nasz architekt budynków, są dokładną analogią do tego, czym jest „Logika aplikacji” w aplikacji internetowej. Jak wdrażane są zabezpieczenia, jak będziemy zarządzać i uzyskiwać dostęp > do stanu i trwałości, jak obsłużyć > przechowywanie i pobieranie danych....to jest logika aplikacji. Podobnie jak w naszym biurowcu, który po ukończeniu może pomieścić i pomieścić wszystko, od elitarnego klubu nocnego po firmę inwestycyjną, logika aplikacji jest niezależna od rzeczywistej logiki biznesowej. a) Powyższe cytaty to dwie różne definicje terminu _Logika aplikacji_ i wydaje się, że po prostu używają tego samego terminu (tj. _Logika aplikacji_) do opisania dwóch różnych pojęć. Czy zatem tylko pierwsza definicja opisuje logikę zawartą w _Warstwa aplikacji_ , podczas gdy druga definicja opisuje inny rodzaj logiki? b) Jeśli rzeczywiście obie definicje opisują logikę w _Warstwa aplikacji_ , to czy nie oznacza to, że _Warstwa aplikacji_ wykonuje dwa zadania: organizowanie operacji, które mapują bezpośrednio do _przypadków użycia_ i wykonywanie logiki niezwiązanej z działalnością (takiej jak bezpieczeństwo, buforowanie itp.)?


title: Modelowanie rynków zakładów

text: Mam kilka ogólnych pytań dotyczących modelowania serii rynków zakładów i zakładów w nich. Piszę w Ruby, ale ostatecznie zależy to od tego, jakiego języka chcę używać. Mam pojęcie „gry”, na przykład ligi piłki nożnej. Podczas trwania ligi ludzie mogą stawiać różne rodzaje zakładów. Zakład może być zwycięzcą ligi lub może to być trzech najlepszych zwycięzców w dowolnej kolejności. Lub trzech najlepszych zwycięzców w kolejności. Nazywa się to „rynkiem”. W grze mam też uczestników. To są drużyny, które tworzą ligę. Zakład składa się z jednego lub wielu uczestników, kolejność tych uczestników jest ważna plus kwota. Jest przechowywany przeciwko rynkowi. Moje pytanie brzmi: w jaki sposób mam to zorganizować? W tej chwili mam typy rynkowe (powiedzmy Win) dziedziczące z bazowej klasy rynkowej. Klasa bazowa, której używam, wygląda tak: class Base def self.make(game, market_name) umieszcza Kernel.const_get("MatchMaker::Markets::#{market_name}") end end Funkcja make jest metodą fabryczną dla generowanie klas wygranych na podstawie podanego ciągu znaków z nazwą poza typem zakładu. To pokolenie wydaje się w tej chwili trochę niezgrabne i obawiam się, że może to spowodować dalsze problemy na torze. Zdaję sobie sprawę, że to pytanie jest nieco chaotyczne i nie ma jasnej odpowiedzi. Bardziej interesują mnie pomysły innych ludzi na to, jak zrobiliby coś takiego.


title: Projektowanie aplikacji internetowej z dwoma różnymi bazami danych zaplecza

text: Pracuję nad dość standardową aplikacją internetową opartą na LAMP. Sam serwer posiada standardową bazę danych MySQL, a aplikacja jest napisana w PHP. Kicker polega na tym, że w tej aplikacji używamy również baz danych SQL Server. ## Obecna konfiguracja danych jest następująca: * MySQL przechowuje informacje o koncie użytkownika (nazwę użytkownika, hasło, uprawnienia itp.) oraz "identyfikator połączenia". * Identyfikator połączenia łączy się z inną tabelą, która przechowuje poświadczenia połączenia dla bazy danych serwera SQL. * Gdy użytkownik się loguje, nawiązywane jest połączenie ze zdalną bazą danych SQL Server (są one hostowane niezależnie od aplikacji internetowej i nie są pod moją kontrolą). * Korzystając z tego połączenia, aplikacja internetowa przetwarza i wysyła dane (tylko odczyty, bez zapisu). Aplikacja znacznie się rozwinęła i chociaż organizacja i praktyki uległy poprawie, projekt jest nadal dość niechlujny i zagmatwany. Trudno mi zaimplementować jakikolwiek framework lub ORM, ponieważ większość z nich jest projektowana z myślą o jednej bazie danych. Połączyłem strukturę, która działa bardzo dobrze dla raportów (gdzie potrzebne jest tylko połączenie SQL Server), ale nie pasuje do takich rzeczy, jak interakcja z kontem (gdzie serwer SQL jest używany do walidacji danych, które trafiają do MySQL). Konfiguracja nie wygląda na to, żeby miała się zmienić, więc zastanawiałem się, czy są jakieś porady dotyczące projektowania i utrzymywania aplikacji internetowej z dwoma różnymi backendami baz danych w tym samym czasie. Na marginesie, przechowywanie danych uwierzytelniających do zdalnych baz danych SQL Server w naszej bazie danych MySQL sprawia, że jestem zdenerwowany. Mogę zaszyfrować hasła tylko wtedy, gdy potrzebuję ich do połączeń, a na obecnym etapie wszystkie używane konta są kontami administracyjnymi z pełnymi uprawnieniami. Nie jest to coś, z czego chcesz się wydostać, zwłaszcza gdy te bazy danych są otwarte dla połączeń internetowych. Więc jakakolwiek rada byłaby również miła.


title: Wybór wartości w zapytaniu SQL vs kod (Java)

text: Muszę wybrać jedną z trzech wartości liczby całkowitej przy użyciu wartości kolumny w kolumnie tabeli dopuszczającej wartość null. Istnieją co najmniej dwa podejścia: 1) użyj SQL do wykonania całej pracy: przetestuj wartości null i wybierz jedną z pozostałych wartości, lub 2) odczytaj wartość i użyj kodu - w tym przypadku Java - do wyboru. Który z nich jest „lepszy”, czyli łatwiejszy do zrozumienia i łatwiejszy w utrzymaniu? Czy masz jakieś inne zastosowanie metryki do podjęcia decyzji? Jako przykład mam następujący kod: // Jeśli id jest równe: // -1, to make v = 1 // null, a następnie make v = 2 // w każdym innym przypadku make v = 3 // Opcja 1: int v; Zapytanie łańcuchowe = "SELECT CASE min(Id) WHEN NULL THEN 2 WHEN -1 THEN 1 ELSE 3 END AS Id" + "FROM TableA WHERE SomeField IN (SELECT ...bla bla...)"; Zestaw wyników rs = // wykonaj zapytanie if (rs.next()) { v = rs.getInt("Id"); } else { // DO ZROBIENIA coś poszło *bardzo* źle... } // Opcja 2: int v; Zapytanie łańcuchowe = "SELECT CASE min(Id) Id" + "FROM TableA WHERE SomeField IN (SELECT ...bla bla...)"; Zestaw wyników rs = // wykonaj zapytanie if (rs.next()) { final int id = rs.getInt("Id"); if (rs.wasNull()) { v = 2; } else if (id == -1) { v = 1; } inaczej { v = 3; } } else { // DO ZROBIENIA coś poszło *bardzo* źle... }


title: Jak zapewnić niestandardowy identyfikator aplikacji do pobrania?

text: Zauważyłem, że w przypadku usług pomocy zdalnej technik zazwyczaj wysyła łącze do pobrania pliku wykonywalnego. Po kliknięciu tego łącza instalowane jest oprogramowanie, które automatycznie łączy się ze zdalnym technikiem i umożliwia mu dostęp do Twojego komputera. Zasadniczo dzieje się tak, że w jakiś sposób zainstalowana aplikacja ma identyfikator sesji, którego używa do identyfikacji i łączenia się z technikiem. W jaki sposób identyfikator sesji jest przekazywany do pobranej aplikacji? Czy niestandardowy plik wykonywalny jest skompilowany/generowany dla każdej sesji, a plik wykonywalny ma ten identyfikator sesji osadzony w zasobach? jakakolwiek inna metoda osiągnięcia tego samego?


title: Kod GPLv3 w oprogramowaniu innym niż GPL — łączenie a CLI

text: Załóżmy, że istnieje aplikacja na licencji GPLv3, która ma GUI i CLI. Czy mogę legalnie rozszerzyć jego CLI (aby dać mi dostęp do funkcji dostępnych dotychczas tylko za pośrednictwem API aplikacji), opublikować wynik na licencji GPL, a następnie utworzyć aplikację bez GPL (być może zastrzeżoną), która zależy od tej zmodyfikowanej aplikacji GPL (poprzez rozszerzoną CLI)?


title: Wycofać internetowy interfejs API: sprawdzone metody?

text: W końcu musisz wycofać części swojego publicznego internetowego interfejsu API. Jednak jestem zdezorientowany, jaki byłby najlepszy sposób na zrobienie tego. Jeśli masz dużą bazę aplikacji innych firm, samo szarpanie starych wersji interfejsu API wydaje się niewłaściwym sposobem, ponieważ prawie wszystkie aplikacje przestaną działać z dnia na dzień. Nie możesz jednak pozostawić starożytnego internetowego interfejsu API na zawsze, ponieważ może być przestarzałe lub istnieją znaczące zmiany, które uniemożliwiają pracę z nim. Jakie są najlepsze praktyki dotyczące wycofywania starych internetowych interfejsów API?


title: Zadanie Architektura konsumenta/procesora

text: **PROBLEM** W naszym systemie mamy różne zadania, które mogą zająć do 20 minut. Te zadania są zazwyczaj uruchamiane z interfejsu internetowego i uruchamiane w nowym wątku. Jest to oczywiście straszne rozwiązanie, ponieważ zadanie może zostać przetworzone przez IIS i gromadzi cenne zasoby na serwerze sieciowym. **MOŻLIWE ROZWIĄZANIE** Hosting klasy `TaskConsumer` w usłudze Windows (lub w naszym przypadku Azure Worker Role), która pobiera zadania i je przetwarza. To obsłużyłoby kolejkowanie i uruchamianie zadań. Nowe zadania są dodawane do tabeli bazy danych (powiedzmy `Tasks`) w kodzie klienta za pośrednictwem klasy `TaskManager` (`TaskManager.Enqueue(ITaskable)`), które są następnie pobierane przez `TaskConsumer` (być może jest to odpytywanie ta tabela dodatków?). Ta tabela byłaby również aktualizowana przez `TaskConsumer` podczas wykonywania zadania (być może pole stanu - `RUNNING`, `QUEUED`, `FAILED`, `COMPLETE`). Aby utworzyć nowy typ zadania, należy zaimplementować interfejs `ITaskable`. Wymagałoby to implementacji metody `Process()`, która zawierałaby logikę do uruchomienia tego zadania. Interfejs interfejsu użytkownika może pokazywać wszystkie aktywne zadania i być może zapewniać pewne możliwości zarządzania (np. anulować zadanie, ponownie uruchomić zadanie itp.). Te informacje można pobrać z klasy `TaskManager` (`TaskManager.ActiveTasks`), która zasadniczo jest odczytywana z tabeli bazy danych `Task`. Konkretne implementacje `ITaskable` musiałyby mieć właściwości możliwe do serializacji, aby mogły być przechowywane w bazie danych. Jest to potrzebne, ponieważ do uruchomienia zadania potrzebne byłyby określone parametry/dane. Na przykład zadanie `ImportEmployees` musiałoby mieć nazwę pliku, który został pierwotnie przesłany. Musiałoby to być znane w momencie, gdy konsument musi wykonać zadanie (przy desializacji). ![Architektura](http://i.stack.imgur.com/HSTYi.png) **Czy to dobre podejście do rozwiązania tego problemu?** Jestem pewien, że musi istnieć wiele wzorców dla tego rodzaju problemu .


title: Atrybuty etycznego programisty?

text: Oprogramowanie, które piszemy, ma swoje konsekwencje w realnym świecie. Jeśli nie, nie byłoby to zbyt przydatne. W związku z tym ma potencjał, aby rozprzestrzenić się po świecie szybciej niż śmiertelny wirus stworzony przez człowieka lub wpłynąć na społeczeństwo w takim samym stopniu, jak manipulacja genetyczna. Może teraz nie wiemy jak, ale w przyszłości nasz kod będzie miał coraz większy potencjał wyrządzenia szkody lub pożytku. Oczywiście jest kwestia hakowania. To wyraźnie przestępstwo. Czy to jest takie jasne? Czy hakerstwo nie jest dopuszczalne dla naszego rządu w przypadku bezpieczeństwa narodowego? A co z innymi rządami? Przypadki zagrożenia życia i śmierci? Tropiąc martwych rodziców? Badanie profilu genetycznego kandydatów do pracy? Gdzie jest narysowana linia? Kto decyduje? Czy programiści ponoszą odpowiedzialność za sposób wykorzystania ich kodu? Co się stanie, jeśli programista napisze kod, aby włamać się do poufnych informacji lub materiałów chronionych przed kopiowaniem? Czy ponosi odpowiedzialność wraz z osobą, która korzystała z programu? A co z programistą, który świadomie lub nieświadomie pisze kod „naprawiający księgi”? Czy powinien być odpowiedzialny?


title: Jakie są zalety i wady Coffeescript?

text: Oczywiście jedną wielką zaletą jest ilość cukru składniowego, która w wielu przypadkach prowadzi do skrócenia kodu. Na http://jashkenas.github.com/coffee-script/ są imponujące przykłady. Z drugiej strony mam wątpliwości, czy te przykłady reprezentują kod złożonych aplikacji świata rzeczywistego. Na przykład w swoim kodzie nigdy nie dodaję funkcji do samych obiektów, ale raczej do ich prototypów. Co więcej, funkcja prototypu jest ukryta przed użytkownikiem, sugerując raczej klasyczny OOP niż idiomatyczny Javascript. Przykład ze zrozumieniem tablicy wyglądałby w moim kodzie prawdopodobnie tak: cubes = $.map(list, math.cube); // czyli o 8 znaków mniej przy użyciu jQuery...


title: Jak zdobyć doświadczenie zawodowe w programowaniu Java/Java EE

text: Widzę, że możliwości mijają mnie tylko z jednego powodu: braku doświadczenia zawodowego w branży. Mówię wielu pracodawcom, że jestem w stanie wykonać tę pracę i pokazać im pracę, którą wykonałem podczas studiów, a także kilka osobistych projektów, w których poświęciłem dodatkowy czas i wysiłek, aby nauczyć się nowych standardowych technologii branżowych. Jednak wszystko, czego chcą, to jakieś 2-3 lata doświadczenia w branży. Jestem świeżo upieczonym absolwentem z tytułem magistra informatyki. Ubiegałem się o kilka prac i większość z nich wymaga minimum 2 lat doświadczenia. Pomyślałem więc, że ktoś tutaj może podsunąć mi realistyczne pomysły na zdobycie doświadczenia, które można uznać za profesjonalne. Wszelkie konstruktywne komentarze są mile widziane.


title: Aplikacja dostarczająca unikalne klucze do wielu procesów

text: Każdy pomysł, jak zbudować aplikację, która zapewnia unikalne klucze za każdym razem, gdy jest wywoływana przez inny proces. Wywołanie procesu nie jest tutaj moim problemem, moim problemem jest synchronizacja między dwoma (lub więcej) procesami i zapobieganie dostarczaniu tego samego klucza do obu z nich. Będę bardzo wdzięczny za pomoc w tej sprawie, proszę tylko przedstawić rozwiązanie, a postaram się je wdrożyć.


title: Czy musimy przyjąć zasób czarnej skrzynki, który nasz projekt dziedziczy po swoim poprzedniku?

text: Nasz klient ma witrynę eCommerce, która została opracowana przez wewnętrzny zespół i teraz pokazuje swój wiek. Pracuję dla firmy sprowadzonej jako zewnętrzni wykonawcy przy budowie zastępstwa. Częścią obecnej witryny jest aplet przeglądarki Flash, który wyświetla media o produkcie - obrazy z możliwością powiększania, widoki 360 stopni, filmy i tak dalej. Musimy pokazać te same media, co obecna witryna, więc po prostu ponownie używamy przeglądarki. Przeglądarka jest osadzona na stronie w zwykły sposób i informuje, jakie media pokazać, za pomocą pliku XML, który ładuje z naszego serwera, co jest dla nas dość proste do wygenerowania. Mamy to działa; to było całkiem proste. Ale co jeszcze musimy zrobić? Chodzi o to, że dla nas przeglądarka jest binarnym obiektem typu blob, który jest obsługiwany z sieci dystrybucji treści klienta. Osadzamy go, karmimy jakimś XML-em i wykonuje swoje zadanie, ale nie mamy władzy nad jego elementami wewnętrznymi. Jest dla nas całkowicie nieprzezroczysta – czarna skrzynka. Możemy go używać do robienia tego, co robi, ale nie możemy tego zmienić, więc jeśli kiedykolwiek będziemy musieli zrobić coś innego, jesteśmy wypchani. Budujemy tę witrynę dla klienta, a kiedy skończymy, przekażemy ją do utrzymania. Nie będziemy sami konserwować. W kliencie jest mały zespół, który pracuje jako część naszego zespołu i będzie odpowiedzialny za konserwację. W skład tego zespołu wchodzi tylko jedna osoba z zespołu, który zbudował starą witrynę, i nie jest to ktoś, kto zna przeglądarkę obrazów. Osoby, które znają przeglądarkę zdjęć, nie będą mogły dołączyć do naszego zespołu, gdy nasz system zastąpi ich – zostaną przeniesione do innych projektów. Dokumentacja na przeglądarce jest bardzo cienka i o ile wiem, w ogóle nie obejmuje elementów wewnętrznych. Martwię się, że jeśli ktoś nie podejmie jakiegoś pozytywnego działania, cała wiedza na temat wewnętrznego działania widza - nawet do miejsca, w którym znajduje się kod źródłowy - zostanie utracona. Możliwe, że już to było. Czy to jest coś, o co należy się martwić? Jeśli tak, czyim zadaniem jest się tym martwić? Co powinni z tym zrobić, gdy się martwią?


title: Najbardziej oszałamiający język programowania?

text: Który z _rozsądnie_ powszechnego języka programowania uważasz za najbardziej wymagający? Słuchałem wielu podcastów dotyczących programowania i poświęcałem trochę czasu na nauczenie się nowych języków, które są uważane za nadchodzące i ważne. Niekoniecznie mówię o BrainFuck, ale który język uważasz za taki, który kwestionuje powszechne paradygmaty programowania? U mnie w latach 90. robiłem trochę programowania funkcjonalno-logicznego (np. Prolog), więc nie mogę powiedzieć, że znajdę tam coś specjalnego. Jestem _daleko_ od bycia w tym ekspertem, ale nawet dzisiaj najbardziej ogłuszającym dla mnie językiem programowania jest Perl. Nie dlatego, że _"Hello World"_ jest trudne do zaimplementowania, ale raczej jest tak duża elastyczność leksykalna, że niektóre z najtrudniejszych rozwiązań można rozłożyć tak poetycko, że muszę wyjść na zewnątrz poza terminal, aby oczyścić głowę. Nie mówię, że prawdopodobnie sprzedałbym komercyjną implementację oprogramowania, tylko że istnieje wyraźny powód, dla którego Perl jest tak (nie)sławny. Wystarczy spojrzeć na podstawową listę książek na nim. Więc **jaki jest Twój oszałamiający język, który promuje Twoje lepsze programowanie i praktyki**?


title: Wzór do kosztownej kontroli warunków wstępnych przed podjęciem działania

text: Załóżmy, że mam metodę `DoTheThing()`, która wymaga sprawdzenia warunków wstępnych `CanTheThingBeDone()` w celu zwrócenia wartości true. Ta ostatnia metoda jest czasochłonna, ponieważ uzyskuje dostęp do bazy danych. Trudno mi znaleźć idealny sposób na skuteczne przeprowadzenie sprawdzania warunków wstępnych (tj. _raz_ ) przy zachowaniu zarówno czytelności, jak i integralności API. Zwróć uwagę na następujące przykłady: **Przykład 1:** class System() { public void DoTheThing() { if (!CanTheThingBeDone()) throw new Exception(...); // Zrób to } public bool CanTheThingBeDone() { // Czasochłonny kod } } class Consumer() { public void SomeLargerOperation() { try { system.DoTheThing(); } catch (Wyjątek) { // Obsługa błędów } } } **Przykład 2:** class System() { public void DoTheThing() { // Zrób to } public bool CanTheThingBeDone() { // Czasochłonny kod } } class Consumer() { public void SomeLargerOperation() { if (system.CanTheThingBeDone()) { system.DoIt(); } } } Oba podejścia są w porządku, ale oba mają wady. W _Przykładzie 1_ zmuszam konsumenta do zawinięcia kodu w try-catch dla wadliwych stanów. Te stany mogą być wyzwalane przez użytkownika, więc wymagana jest pewna wdzięczna obsługa. Nie jestem pewien, czy try-catch do obsługi błędów użytkownika jest dobrym podejściem. W _Przykładzie 2_ przekazuję konsumentowi odpowiedzialność za sprawdzanie stanu, otwierając się na nieopisowe błędy uruchomieniowe. W _tym_ przykładzie funkcja CanTheThingBeDone() jest zaznaczona, ale kiedy Jimmy dołączy do zespołu za rok, aby opracować moduł 2, może się to zmienić. **Przykład 3:** class System() { public bool DoTheThing() { if (!CanTheThingBeDone()) return false; // Czy to zwraca true; } public bool CanTheThingBeDone() { // Czasochłonny kod } } class Consumer() { public void SomeLargerOperation() { if (!system.DoTheThing()) ProduceSomeErrorMessage(); } } Teraz w tym przykładzie unikam prób wyłapania błędów użytkownika i uniemożliwiam wykonanie rzeczywistego kodu Do w przypadku nieprawidłowego stanu, zapewniając jednocześnie, że kod kontrolny jest uruchamiany tylko raz. Ale czuję, że łamię jakąś zasadę nazewnictwa/kodowania, gdy metoda zarówno sprawdza, jak i modyfikuje stan klasy (jestem prawie pewien, że ma nawet nazwę). Jako czwarty przykład mógłbym sobie wyobrazić kombinację #1 i #2, gdzie zarówno konsument, jak i „DoTheThing” wywołują „CanTheThingBeDone”, ale potem wykonujemy tę pracę dwa razy. Podsumowując - nie mogę znaleźć najlepszego podejścia. Czy ktoś ma lepszy pomysł niż mój lub sugestie, jak ulepszyć jedno z tych podejść, aby uzyskać lepszy wynik?


title: Koszty ogólne paradygmatu szybkiego niepowodzenia

text: Szybkie niepowodzenie wydaje się właściwym sposobem, ponieważ upraszcza wykrywanie błędów. Ale jest to szkodliwe dla wydajności, ponieważ wielokrotne sprawdzanie tego samego na kilku poziomach systemu. Prosty przykład. Istnieje funkcja, w której parametry wejściowe nie mogą mieć wartości null. I jest funkcja owijająca to, która również oczekuje na te same parametry, również nie null. Po kilku czynnościach function-wrapper przekazuje parametry wejściowe do pierwszego. Żeby te same pozycje sprawdzały się dwa razy: na początku wrappera funkcji i wewnątrz wrappera funkcji. Chciałabym więc wiedzieć, jak bardzo rozpowszechniony jest ten styl. Czy powinienem napisać szybki kod, czy sprawdzić wszystko tylko raz?


title: Zlecać projekty indywidualnie czy całe rozwiązanie?

text: Pracuję (sam) nad aplikacją, która jest portalem muzycznym, w którym można wyszukiwać artystów, utwory itp.. Rozwiązanie C# składa się z: * biblioteki klas, która zawiera wszystkie elementy umożliwiające dostęp do usługi internetowej * samej aplikacji Niedawno zacząłem używać Git i odkryłem korzyści, jakie zapewnia projektowi, ale jest coś, czego nie mogłem zrozumieć, w Visual Studio jest opcja zatwierdzenia rozwiązania, która prowadzi mnie do następującego pytania: Czy powinienem zatwierdzić każdy projekt indywidualnie czy całe rozwiązanie ?


title: Co to jest warstwa antykorupcyjna i jak jest używana?

text: Próbuję dowiedzieć się, co naprawdę oznacza warstwa antykorupcyjna. Wiem, że jest to sposób na przejście/obejście starszego kodu lub złych interfejsów API. Nie rozumiem, jak to działa i co sprawia, że jest to czyste oddzielenie od niepożądanej warstwy. Zrobiłem trochę poszukiwań, ale nie mogę znaleźć żadnych prostych przykładów ani wyjaśnień, więc szukam kogoś, kto to rozumie i potrafi wyjaśnić to prostymi przykładami. Odpowiedź, która zaspokoiłaby moje pytanie, powinna być prosta (niekoniecznie krótka) i zawierać zrozumiałe przykłady implementacji i użycia. Zobacz to pytanie dla mojego przypadku użycia.


title: Logika C# - luki i wyspy

text: Szukam pomocy w zaprojektowaniu sposobu wyświetlania wolnych terminów wizyt (np. książeczka fryzjerska). Obecnie mam zapytanie, które zwraca zbiór okresów, które są niedostępne dla spotkań (niezależnie od tego, czy istnieje spotkanie, czy usługodawca jest zamknięty). Powiedzmy, że 3 lutego, od 12 do 5 jest niedostępny, chcę wyprowadzić następujący ciąg: 1 stycznia 12:00 - 3 lutego 12:00 3 lutego, 17:00 - 31 grudnia 12:00. Cała moja oferta to 1 rok od 1 stycznia do 31 grudnia i może być tyle dat niedostępnych.


title: Wielokrotna wysyłka i CLOS

text: Nigdy nie pisałem oprogramowania w Common Lisp, ale w Scheme i Clojure oraz w C++ i Pythonie. Jednak rzuciłem okiem na Common Lisp Object System (CLOS) w Common Lisp i Dylan. Teraz, porównując to do OOP w tradycji Simula, CLOS i powiedzmy, C++ i Python system klas mają polimorfizm jako wspólną cechę. Wydaje się, że różnią się sposobem organizacji danych i metod, w rodzinie Simula metody są integralną częścią klas, podpunktów, jeśli wolisz, podczas gdy w CLOS są zdefiniowane poza klasami i są raczej uogólnionymi procedurami. Zwolennicy popularnego języka Lisp zazwyczaj argumentują, że metody wirtualne w językach programowania z rodziny Simula są dość ograniczone, ponieważ są wywoływane tylko zgodnie z obiektem pierwszego argumentu („this” lub „self”). Ogólne funkcje CLOS są wybierane dla kilku argumentów, więc coś takiego jak (pseudokod) method draw(c : Device, d : Drawable) ... może być zaimplementowane dla dowolnych kombinacji `Canvas` i `Drawable`. method draw(c : Printer, t : Triangle).... method draw(c : Printer, t : Image).... method draw(c : Screen, t : Image) .... W językach z rodziny Simula , byłoby to trudniejsze, ponieważ `draw` musiałby być powiązany z rodziną obiektów `Device` lub `Drawable`. Kanonicznym rozwiązaniem wydaje się być wzorzec odwiedzających http://en.wikipedia.org/wiki/Visitor_Pattern . Po nauczeniu się CLOS byłem dość zdumiony, że większość języków programowania OO nie oferuje wielokrotnego wysyłania - i - zastanawiałem się, czy istnieją konkretne powody, dla których można tak ściśle kojarzyć metody z jedną konkretną klasą. **Czy istnieją szczególne korzyści dla pojedynczej wysyłki?** * niejednoznaczność wielokrotnego wysyłania: np. powiedzmy, że mam podklasę `a` podklasę `A` i `b` podklasę `B`. Metoda `foo(A,B)` zaimplementowana jako `foo(a,B)` i `foo(A,b)`, którą implementację wywołałoby wywołanie `foo(a,b)`? Czy to jedyny powód? * "Modularyzacja", metody w klasie są blisko. Czy jest w tym coś więcej? Czy projektanci i twórcy języków zajęli stanowisko w tej sprawie?


title: Jak najlepiej wyszukiwać obiekty według etykiety?

text: Piszę serwer wsparty wstępnie napisanym API. Otrzymam szereg ciągów reprezentujących porty, sygnały, ścieżki itp. itp. Muszę wyszukać obiekt powiązany z daną etykietą, wszystkie te obiekty są w pamięci (nie ma magii sql, aby to zrobić za mnie) . Moje pytanie brzmi, jak najlepiej skojarzyć daną unikatową etykietę ze zmiennym obiektem, który reprezentuje? Mam wystarczająco dużo obiektów, które umożliwiają przeglądanie każdego sygnału lub każdego portu, aby znaleźć ten, który pasuje, ale może być nieco za wolny. Szczerze mówiąc, bezpośrednia metoda „spójrz na każdy obiekt” jest prawdopodobnie wystarczająco dobra dla tak małej liczby obiektów i wszystko inne jest przedwczesną optymalizacją, ale nadal jestem ciekaw, jakie byłoby właściwe rozwiązanie, gdybym myślał, że moje sygnały będą rosnąć trochę większy. Jak widzę, dostępne są dwie opcje. Pierwszym z nich byłoby stworzenie „sklepu”, który jest prostą mapą pomiędzy obiektem a etykietą. Mógłbym to zrobić, aby za każdym razem, gdy wywołam `addObject` obiekt jest automatycznie zapisywany w hashmapie lub podobnym. To działa, ale opiera się na prawidłowym dodaniu _i usunięciu_ każdego obiektu, aby mapa nie rosła w nieskończoność. Największym problemem dla mnie jest to, że wiąże się to z posiadaniem ukrytej mapy statycznej w mojej klasie ModelObject, która po prostu wydaje się… w jakiś sposób niewłaściwa. Inną opcją jest posiadanie jakiejś metody, która może zinterpretować etykiety. Wszystkie te etykiety pochodzą od obiektów leżących poniżej. Mogę więc spojrzeć na przykład na etykietę sygnału i powiedzieć „te 20 znaków to port”, aby dowiedzieć się, jakiego portu potrzebuję. To pozwoliłoby mi szybko dowiedzieć się, czego potrzebuję. Jednakże, jeśli metoda label zostanie zmieniona, metoda `translateLabelToObject` również musi zostać zaktualizowana, w przeciwnym razie wszystko się zepsuje. Które rozwiązanie jest czystsze lub prawdopodobnie czystsze niż którekolwiek z powyższych? Dla przypomnienia, pracuję z wystarczającą liczbą zmiennych, aby bezpośrednie porównanie było trochę powolne, ale nie na tyle, aby martwić się narzutem pamięci, napisanym w javie. Wszystkie obiekty, które mają etykiety, które muszę wyszukać, rozszerzają tę samą klasę nadrzędną.


title: Jak mogę znaleźć kontraktową pracę na Androidzie?

text: Dwa lata temu, po ponad 15 latach spędzonych w Win32 i SymbianOS, postanowiłem intensywnie skupić się na Androidzie. Zrobiłem najlepszą część 2009 roku, aby dokładnie poznać nową platformę i wydaje się, że była to dobra strategiczna decyzja: Android jest teraz wszędzie. Ale wydaje się dziwnie trudno znaleźć pracę programistyczną dla Androida. Mam dokuczliwe uczucie, że musi być jakaś strona internetowa, jakieś tajne stowarzyszenie lub giełda pracy, która jakoś mi umknęła. Co się dzieje? Jeśli jesteś wykonawcą Androida, jak znalazłeś swoją obecną pracę?


title: Czy można wiedzieć, jakiego języka programowania używa strona internetowa?

text: Na przykład `stackexchange.com`, bez pytania właściciela strony lub Google o informacje na temat rozwoju strony internetowej, czy jest to możliwe, aby wiedzieć, jaki język jest używany w zapleczu? Wygląda na to, że strona nie ma paska `.rozszerzenie`, na przykład `.php`, który może wskazywać, który jest rozwijany w `PHP`, ale bez rozszerzenia, skąd mogę to wiedzieć?


title: Czy super metody w JavaScript są ograniczone do dziedziczenia funkcjonalnego, jak w książce Crockforda?

text: W „JavaScript: The Good Parts” Douglasa Crockforda omawia trzy rodzaje dziedziczenia: klasyczne, prototypowe i funkcjonalne. W części dotyczącej dziedziczenia funkcjonalnego pisze: > „Wzorzec funkcjonalny daje nam również sposób radzenia sobie z super metodami”. Następnie wdraża metodę o nazwie „superior” na wszystkich obiektach. Jednak w sposobie, w jaki używa metody nadrzędnej, wygląda na to, że kopiuje metodę do super obiektu do późniejszego użycia: // kod crockforda: var coolcat = function(spec) { var that = cat(spec), super_get_name = that.superior('get_name'); that.get_name = function (n) { return 'jak ' + super_get_name() + 'dziecko'; }; zwróć to; }; Oryginalna metoda `get_name` jest kopiowana do `super_get_name`. Nie rozumiem, co jest takiego specjalnego w dziedziczeniu funkcjonalnym, które to umożliwia. Nie możesz tego zrobić z dziedziczeniem klasycznym lub prototypowym? Jaka jest różnica między powyższym kodem a poniższym kodem: var CoolCat = function(name) { this.name = name; } CoolCat.prototype = nowy Cat(); CoolCat.prototype.super_get_name = CoolCat.prototype.get_name; CoolCat.prototype.get_name = function (n) { return 'jak ' + this.super_get_name() + 'dziecko'; }; Czy ten drugi przykład nie zapewnia również dostępu do „super metod”?


title: Testowanie obciążenia: jak generować żądania na sekundę?

text: Mam składnik serwera, który działa na Zeroc-ICE. Kiedy chciałem go przetestować, pomyślałem, że zrobi to za pomocą biblioteki równoległej do tworzenia wielu żądań. Ale to nie skończyło się w ten sposób. **Używanie biblioteki Parallel(Parallel.For)** z C# najwyraźniej było łatwiejsze, ale nie wydaje się, aby dokładnie generowała wszystko równolegle w tej samej chwili. Nie może więc być definicją tworzenia N żądań na sekundę. Jak mam to zrobić? Myślę, że każdy, kto chciałby najpierw przeprowadzić testy obciążenia, pomyślałby o tym. 1. Jaki jest efektywny sposób tworzenia N żądań w czasie rzeczywistym na sekundę? 2. Kolejny mit dotyczy programowania równoległego. Proszę oświecić nas, jeśli używałeś wzorców programowania równoległego w C# lub ogólnie .Net. Wyobraź sobie, że mam 5 procesów. Jak uruchomi się wszystkie pięć procesów jednocześnie. Co to oznacza dla mojego zużycia zasobów? Próbowałem czytać wiele materiałów dostępnych w sieci, ale otrzymuję coraz więcej pytań, które są odpowiedzią na moje pytania. 3. Użyłem Parallel.For i utworzyłem N wątków i zmierzony czas. Następnie spróbowałem tego samego, używając Task.Factory.start do wyliczania zadań. Mierzony czas był inny. Więc jaka dokładnie jest różnica między ich używaniem? Kiedy powinienem używać odpowiednich klas i do jakich celów? często mamy mnóstwo bogactw, ale po prostu nie wiemy, jak odróżnić jedno od drugiego. To dla mnie jeden z takich przypadków, nie będąc w stanie znaleźć, dlaczego nie powinienem używać jednego od drugiego. 4. Użyłem klasy stopera do zmierzenia tych czasów, które uważa się za najlepsze. W scenariuszu, w którym testuję obciążenie komponentu, jaki byłby sposób mierzenia czasu odpowiedzi. Stoper wydaje mi się najlepszym rozwiązaniem. Wszelkie opinie są mile widziane. ps: Istnieje wiele narzędzi do testowania obciążenia aplikacji internetowych. Mój jest dostosowanym przypadkiem komponentów serwerowych. A moje pytanie dotyczy bardziej tworzenia N wątków na sekundę. **Wszelkie opinie są mile widziane. Tylko nie myśl, że to nie jest pytanie programistyczne. Oczywiście, że tak. To powinno brzmieć jak dzwon dla każdego programisty, który chce sam QE rzeczy, aby samemu poznać wydajność swojego produktu. Wypróbowałem wiele opcji, a potem musiałem wrócić do tego, jak mam to zrobić?**


title: Co to jest „skośny kod”?

text: W książce O'Reilly na temat Scali przeczytałem, że kopiowanie i wklejanie kodu powoduje: > ... powoduje problemy z rozrostem kodu, łatwości utrzymania i _pochylenie_ , nie widzę żadnych oczywistych definicji słowa pochylenie w kontekście. Zdaję sobie sprawę z problemów związanych z kopiowaniem i wklejaniem, ale nie potrafię dopasować ich do słowa „skośny”. Ponieważ jest to używane w książce O'Reilly'ego, domyślam się, że jest to prawdziwy termin programistyczny w obiegu. Jakieś wskazówki?


title: Opracowałem stronę internetową - Jak wyjaśnić w rozmowie kwalifikacyjnej

text: Stworzyłem witrynę e-commerce dla dużej firmy. Nie stworzyłem jakiegoś dokumentu, aby pokazać, jak dane przepływają między stronami. Użyłem: PHP, HTML, CSS, JavaScript, ExpressionEngine, wtyczek Moduły i kilka innych technologii internetowych Kiedy idę na rozmowę kwalifikacyjną chcę pokazać moją stronę i wyjaśnić jak działa i jak ją rozwijałem. Zwykle przechodzę strona po stronie i wyjaśniam, jak działa strona. Czy istnieje fajny, kreatywny sposób na wyjaśnienie, jak działa strona?


title: Obsługa nieprawidłowego tekstu na serwerze lub naprawa na kliencie w aplikacji Klient-Serwer

text: Opracowałem protokół dla aplikacji Klient-Serwer i opracowałem go wspólnie z innym deweloperem. Aplikacja kliencka w tym momencie jest napisana na telefon komórkowy. Protokół wykorzystuje pola oddzielone przecinkami z separatorami początku i końca. Ponieważ niektóre z naszych pól są wolnymi formami tekstu ASCII, wypełniamy pola bajtami, aby znaki specjalne mogły być obsługiwane wewnątrz i nie zakłócać przetwarzania danych. Problem polega na tym, że jedno pole zostało zapełnione bajtami, a nie powinno. Pole, o którym mowa miało reprezentować współrzędne tj. <reszta pakietu danych>, <lat>,<lng>,.... gdzie <lat>: Współrzędne szerokości geograficznej tj. -37.6543 <lng>: Długość geograficzna tj. 90.8993 Jednak to co otrzymaliśmy na serwerze był znak bajtowy z przecinkiem pojawiający się w polu **kropka**, czyli **-37^-6543.** To z kolei spowodowało, że serwer zignorował pakiet i nie zapisał szczegółów. **Powód** : Kiedy wspomniałem o tym twórcy telefonu, powiedział, że dzieje się tak, ponieważ ustawienia znaków w telefonie oznaczają, że użytkownik zmienił kropkę na przecinek. Uważał, że powinniśmy się tym zająć na serwerze. Jednak nie jestem pewien. Mam wrażenie, że klienci powinni postępować zgodnie z protokołem, ponieważ teoretycznie mogą się łączyć różni klienci, a serwer nie chce mieć specjalnych przypadków zaśmiecanych w swoim kodzie? **Pytanie** : Niektóre opcje, które widzę, to (i nie jestem pewien, jak do tego podejść): 1. Poproś wszystkich klientów, aby wysyłali dane zgodnie ze specyfikacją protokołu i zachowaj czarno-biały format danych, aby mówić 2. Czy serwer obsługuje różne opcje w tym przypadku 3. W połączeniu z 2 dostosuj dokument protokołu tak, aby w niektórych przypadkach dane były bardziej elastyczne, a serwer jest odpowiedzialny za obsługę różnych spraw


title: Podczas tworzenia oprogramowania, która faza rozwoju ma największe znaczenie dla programisty?

text: Na co programista powinien zwrócić uwagę podczas tworzenia oprogramowania? Na przykład niektóre programy nie mogą zostać ukończone w ramach ograniczeń czasowych, inne nie mogą spełnić wymagań klientów.


title: Licencja na oprogramowanie komercyjne/bezpłatne

text: W tej chwili tworzę oprogramowanie w PHP, które ukaże się w wersji darmowej i kilku wersjach premium. Chciałbym licencji, która pozwalałaby ludziom swobodnie modyfikować kod, ale nie rozpowszechniać go ani włączać do oprogramowania własnościowego lub jakiegokolwiek innego oprogramowania bez licencji. Czy licencja MIT byłaby najlepsza?


title: Użyj Queue<T> lub trzymaj się natywnych list f#

text: Potrzebuję czegoś, co reprezentuje kolejkę w F#. Kolejka zostanie jednorazowo wypełniona pozycjami, a (w miarę postępu aplikacji) pozycje będą z niej pobierane i przenoszone na inne listy. Czy powinienem używać klasy Queue w .NET, czy powinienem jej unikać i zamiast tego używać list natywnych w F#? Czy jest lepsze rozwiązanie? Dlaczego powinienem używać jednego lub drugiego w języku funkcjonalnym, takim jak F#?


title: Jak przetestować to samo oprogramowanie na wszystkich produktach z linii produktów?

text: W moim zespole pracowaliśmy nad firmware dla produktu. Produkt został wydany kilka lat temu, ale wciąż wdrażamy nowe funkcje w oprogramowaniu i regularnie dostarczamy nowe oprogramowanie dla naszych klientów. Niedawno opracowaliśmy nowy produkt, który używa tego samego oprogramowania, co pierwszy. Oczywiście musieliśmy zmienić oprogramowanie układowe, aby uwzględnić nowe możliwości (przy zachowaniu nienaruszonej funkcjonalności istniejącego produktu). Mamy specyfikację testów wydania, która zawiera głównie testy ręczne, które przeprowadzamy przed wydaniem nowego oprogramowania. Dostosowaliśmy to do nowego produktu, ponieważ ma dodatkowe możliwości. Ale większość z nich jest powszechna. Wiem, że nowe produkty są w przygotowaniu i zgodnie z moim uproszczonym rozumowaniem, musimy powtórzyć nasz test wydania dla każdego produktu za każdym razem, gdy wydajemy oprogramowanie układowe. Więc szukam nowego podejścia, które jest mniej czasochłonne. Jedną z rzeczy, nad którymi już pracujemy, jest automatyzacja, ale ze względu na specyfikę produktu wiele testów _musi_ być wykonywanych ręcznie.


title: Optymalizacja aplikacji internetowych

text: Jakie rzeczy musimy zadbać o to, aby aplikacja internetowa obsługiwała dużą liczbę żądań (powiedzmy 10000 jednoczesnych żądań). Zwiększenie liczby serwerów i rozłożenie obciążenia to jeden sposób, ale czy są inne sposoby lub konfiguracje, które można wykonać na serwerze aplikacji?


title: Jakie są różnice między prototypami jednorazowymi a ewolucyjnymi?

text: Mam notatki o różnych metodach prototypowania i znalazłem kilka definicji w Internecie, ale chciałbym potwierdzić to, czego się nauczyłem. Rozumiem, że **prototypowanie jednorazowego użytku** jest rozwijane od zarysu specyfikacji, różne prototypy są dostarczane i modyfikowane, dopóki klient nie będzie zadowolony z jego funkcjonalności. Z drugiej strony, **ewolucyjne prototypy** są budowane na podstawie podstawowych wymagań zebranych od użytkowników końcowych. Wstępny prototyp jest prezentowany użytkownikom i oceniany. Prototyp jest modyfikowany na podstawie informacji zwrotnej, aż do zadowolenia klienta. Czy to jest poprawne? Czy istnieją lepsze definicje jednorazowego i ewolucyjnego prototypowania?


title: Czy należy zachować kod eksperymentalny?

text: Pracuję nad małym projektem oprogramowania sprzętowego urządzenia USB. Zacząłem od działającego przykładu i stopniowo dodaję nowe funkcje i testuję rzeczy. Jednak nie wszystkie nowe funkcje są przeznaczone do wykorzystania w ostatecznym projekcie. Piszę go, aby dowiedzieć się, jak robić rzeczy na tej konkretnej platformie i naprawiać nieoczekiwane problemy w procesie (na przykład jeden z moich testowych komputerów miał niedziałające porty USB). Co mam zrobić ze starym kodem? Kod jest oczywiście kontrolowany przez wersję. Widzę dwie możliwości: * Zmiana starego kodu na nowy. Przykładem może być zmiana kodu DMA na odczytywanie nie z wejścia UART, ale z bufora procesora podczas przechodzenia z pętli zwrotnej przez UART (w celach testowych) do bardziej sensownego korzystania z UART. , który ma zostać wysłany. * Użyj kilku instrukcji `#if`, aby skonfigurować kod źródłowy, tak aby każda wersja kodu mogła zostać skompilowana, podając tylko poprawną `#define`. Jeśli zalecane jest to drugie podejście, gdzie jest linia podziału? Nie mogę zatrzymać _każdego_ wiersza kodu, który napiszę, ukrywając go za `#if`.


title: Stałe w C#

text: Dlaczego kompilator przechowuje stałe wartości w metadanych zestawu? Czy są one bezpośrednio osadzone w kodzie języka pośredniego z metadanych zestawu?


title: Czy powinienem używać ORM tylko w przypadku obiektów modelu danych?

text: Jestem nowy w ORM i zaczęliśmy rozwijać nowy system używając NHibernate jako ORM. Myślę, że to pytanie może odnosić się do dowolnego ORM i dowolnego języka/platformy. Team Leader powiedział, że powinniśmy używać NHibernate tylko podczas pobierania naszych obiektów modelu danych domeny, tj. nie używać żadnego wbudowanego wyboru NHibernate lub agregacji, które będą pobierać pojedyncze prymitywy lub listę prymitywów. Powodem tego było to, że musimy dokonać rozróżnienia między klasycznym ORM a innymi zdolnościami, tak aby zwykłe wybieranie i wybieranie max używało „klasycznego” projektu DAL. Myślę, że to nie jest takie dobre, ponieważ łamiemy dostęp do danych dwóm, a co jest złego przy użyciu zdolności NHibernate, które sprawdzają czas kompilacji? **Czy są jakieś powody, aby dokonać tego rozróżnienia?**


title: Zalecana literatura dotycząca architektury projektowania aplikacji (zorientowanej obiektowo)?

text: > **Możliwe powielenie:** > Najlepsze książki z teorii i praktyki architektury oprogramowania? W życiu nie ma znaczenia, czy robisz jedną rzecz przez 15 lat. **Skończysz** obudzić się pewnego dnia i zapytać rzeczy, które są równe „jak mam chodzić?” :) Moje konkretne pytanie brzmi, że jako nowy uczestnik C# i OOP wkraczam w wiele małych "szczegółów", którymi należy się zająć. Napisane dużo kodu w VB.NET / cobol / simple php itp. z pewnością nie pomaga zbytnio w świecie OOP ... Tak więc nawet po przeczytaniu podstawowych książek o C# i obejrzeniu kilku filmów niedawno dowiedziałem się o "modelu fabrycznym projekt” dla aplikacji. Byłbym wdzięczny, gdyby ktoś z Was zarekomendował lekturę o architekturze projektowania aplikacji do dalszej lektury...


title: Jak podejść do stworzenia generatora „Unit Outline”?

text: Jestem koordynatorem studiów w Uczelni i obecnie mamy około 100-200 konspektów jednostek, które powstają na początku każdego semestru. Te schematy muszą zawierać informacje takie jak: 1. Nazwa jednostki 2. Kod jednostki 3. Typ kursu 4. Nazwa przedmiotu 1 oceny 5. Element oceny 1 Data dystrybucji... A lista jest długa. W sumie istnieje od 50 do 150 danych, które nauczyciele wprowadzają do swoich konspektów, w zależności od 10-20 różnych typów konspektów, które mogą tworzyć. Obecnie mamy pracowników wprowadzających dane do jednego z wielu różnych dokumentów Word z edytowalnymi polami. To działa w porządku, ale za każdym razem, gdy zarysy wymagają wprowadzenia zmian, możesz sobie wyobrazić, jaka jest to praca. Kontury również wyglądają kiepsko, ponieważ różne wiersze tabeli poruszają się po różnych stronach… jest to po prostu bałagan. Próbowaliśmy używać plików InfoPath... utrzymanie ich było koszmarem i szkoła do tego nie wróci. Rozważam rozwiązanie, w którym nauczyciele wprowadzają niesformatowane/surowe dane do jakiegoś interfejsu (myślałem o pliku Excel), a następnie piszę program, który przegląda dane i generuje dla mnie kontury. Eksperymentowałem ze zwykłym używaniem korespondencji seryjnej, ale nie daje mi to elastyczności w dostosowywaniu wyniku końcowego na podstawie przychodzących danych (na przykład różne liczby elementów oceny) Wiem, jak pracować z wieloma językami i technologii i jestem gotów wykorzystać to jako projekt do czegoś, czego mógłbym nie znać, ale szukałem porady, jak podejść do tego, abym mógł usprawnić cały proces Zarysu Jednostki. Jakiekolwiek pomysły będą mile widziane.


title: Jak zwykle układasz regiony klasy?

text: Zastanawiałem się, czy istnieje standard wyznaczania regionów klasy. Obecnie używam Fields Constructor Properties Metody publiczne Metody prywatne `Field` będące właściwościami prywatnymi i `Properties` będące właściwościami publicznymi. W razie potrzeby będę zwykle używał podregionów w tym obszarze lub od czasu do czasu dodam inne regiony poniżej (takie jak elementy interfejsu lub baseClass).


title: Dlaczego baza danych Web SQL jest przestarzała?

text: Tworzę hybrydową aplikację na Androida. Na początku postanowiłem użyć localStorage, po spędzeniu 2 dni zdałem sobie sprawę, że jest to bardzo dziwne i dlatego go porzuciłem. Następnie wybrałem indexedDB, po spędzeniu całego dzisiejszego dnia i uzyskaniu danych wyjściowych w Google Chrome, nie działa on w WebView aplikacji na Androida. I nigdy nie korzystałem z bazy danych Web SQL, ponieważ była przestarzała. W każdym razie zauważyłem, że PhoneGap nadal używa Web SQL, a przeglądarki Androida obsługują go. Dlaczego Web SQL został w pierwszej kolejności przestarzały? I czy teraz dobrym pomysłem będzie dla mnie korzystanie z Web SQL?


title: Dlaczego metody rozszerzające nie są używane w szerszym zakresie w .NET BCL?

text: Uważam, że koncepcja "Metody rozszerzenia" C# jest po prostu cudowna. Pozwala nam to robić takie rzeczy jak: * Bardziej elastyczna alternatywa dla klas abstrakcyjnych. * Dostarczenie brakujących funkcji podobnych do Javy do C# `enum`. A najfajniejszą rzeczą w tym IMHO jest to, że **dodanie metody nie narusza kompatybilności wstecznej**. Jednak nie znalazłem prawie żadnych metod rozszerzających w .NET BCL. Często zdarza się, że przychodzą mi na myśl metody statyczne i metody rozszerzające. Kiedy projektowano BCL, nie było metod rozszerzających. Ale dlaczego nie są teraz konwertowane na metody rozszerzające? Zwłaszcza gdy łamie kompatybilność wsteczną? Jakieś powody?


title: Scrum: Krótki VS długi sprint

text: Próbowaliśmy wymyślić optymalną długość sprintu dla naszego projektu. Po 3 tygodniach pracy pomyśleliśmy, że skrócenie sprintu do 2 tygodni zapewni lepszą prędkość. Zalety były jasne - krótsza pętla informacji zwrotnych, krótkie historie (z wartością dla użytkownika) i tak dalej. Z drugiej strony jest wiele wad, takich jak ceremonie (planowanie, retrospektywa) itp., w których nie produkujemy, a teraz zdarzają się częściej. Zastanawiałem się, jak dla nowego zespołu możemy zdecydować się na optymalną długość sprintu?


title: Przepełnienie stosu a przepełnienie stosu

text: Więc jako ogólną zasadę, aby uniknąć przepełnienia stosu, duże obiekty powinny być przydzielane do sterty (popraw mnie, jeśli się mylę). Ale skoro sterta i stos rozszerzają się ku sobie, czy nie spowoduje to przepełnienia sterty lub alternatywnie ograniczy miejsce na stosie i nie zwiększy szans na przepełnienie stosu?


title: Najlepsze podejście do zbudowania usługi mobilnej, która jest dostępna również w przypadku zerwania połączenia?

text: Mam nadzieję, że to pytanie będzie odpowiednie dla P.SE, ponieważ jest to pytanie pojęciowe na poziomie tablicy „jak można to zrobić”. Staram się zbudować produkt, który musi być dostępny dla kogoś w ruchu z urządzeniem mobilnym, gdy jego połączenie może być dość słabe (ze względu na podróżowanie między miastami, w których zasięg 3G jest silniejszy). Dla uproszczenia załóżmy, że aplikacja jest książką adresową. Użytkownik musi mieć możliwość dodawania/usuwania/edytowania wszystkich kontaktów w adresie niezależnie od stanu połączenia, wtedy te zmiany są iterowane do centralnej bazy danych serwera za każdym razem, gdy następne połączenie staje się dostępne (oraz wszelkie zmiany dokonane na serwerze od momentu zerwania połączenia również zostaną pobrane ). Początkowo tworzyłem aplikację za pomocą PHP/Symfony, pracując ze stronami statycznymi, ale ten nowy wymóg „mobilny” zmusił mnie do ponownego przemyślenia mojej technologii front-endowej. Teraz patrzę na użycie EmberJS dla mojego frontendu (pobierz wszystkie niezbędne szablony frontendu z początkowym żądaniem, a następnie zaktualizuj tylko części dynamiczne, wydaje się, że będzie to lepiej pasowało do mojej aplikacji niż serwowanie całej strony statycznej (i zasobów) dla każdego żądania ). Wdrażałem Ember-Data za pomocą standardowego adaptera REST, który świetnie współpracuje z moim już istniejącym interfejsem API Symfony2, więc znacznie zmniejszyłem ilość wysyłanych/odbieranych danych i responsywne "wrażenie" aplikacji, ale nadal muszę zająć się moim scenariuszem „braku połączenia”. Instynktownie pociąga mnie funkcjonalność LocalStorage w HTML5, ale widzę, że synchronizacja danych między localstorage a centralnym serwerem DB jest gigantycznym bólem głowy. Załóżmy, że dodaję „Bob Smith” do książki adresowej z telefonu komórkowego, gdy połączenie jest nawiązane. Połączenie zostaje zerwane. Zmieniam imię na „Bob Jones”, a następnie zmieniam imię na „Fred Smith”, używając pulpitu ze stabilnym połączeniem. Kiedy telefon komórkowy ponownie się połączy, która aktualizacja ma pierwszeństwo? Widziałem to pytanie dotyczące korzystania z wielu adapterów danych (REST i LocalStorage) z Ember i wygląda na to, że czeka mnie świat bólu. Czy powinienem po prostu zbudować ładną, responsywną wersję aplikacji/usługi za pomocą adaptera Ember/REST, a następnie wprowadzić natywne aplikacje mobilne do wersji mobilnej? Czy obsługa trwałości danych będzie łatwiejsza w obsłudze jako aplikacja natywna?


title: Jak podzielić projekt ASP MVC przy użyciu Code-First Entity Framework

text: W ramach ćwiczenia akademickiego otrzymaliśmy zadanie stworzenia małej strony internetowej. Zebraliśmy już wymagania i rozwinęliśmy domenę biznesową, aby zobaczyć klasy, które mamy wspierać. Ma być na stosie Microsoftu, więc zdecydowałem się użyć _ASP MVC_ z _code first Entity Framework_. Teraz szukam najlepszego sposobu na rozbicie 6 osobowego zespołu, aby jak najlepiej poradzić sobie z projektem. **TLDR:** Jakie są skuteczne sposoby podziału projektu ASP MVC, aby wielu programistów mogło nad nim pracować jednocześnie? Badałem, gdzie projekty zostały podzielone na warstwy, tj. _baza danych, biznes, widoki_ i tym podobne, ale nie wiem dokładnie, jak poinstruować ich, aby zaprojektowali widok, dla którego nie ma kontrolera. Czy podział na różne modele biznesowe jest dobrą strategią? Czytałem, że doprowadziło to do aplikacji, która nie pasowała dobrze ze względu na inną estetykę.


title: Kiedy liczba jest liczbą magiczną?

text: W ciągu ostatnich kilku miesięcy zagłębiałem się w standard kodowania IfSQ. W ramach tego standardu IfSQ zasadą jest, aby nie używać `magicznych liczb`. Chociaż nie mam problemu z wbudowaniem tej reguły w czeki jako FxCop lub StyleCop, jestem zdezorientowany, co tak naprawdę JEST Magiczną liczbą. Według Wikipedii istnieją 3 wyjaśnienia liczb magicznych: 1. Stała wartość liczbowa lub tekstowa używana do identyfikacji formatu pliku lub protokołu; 2. Charakterystyczne, unikalne wartości, których nie można pomylić z innymi znaczeniami (np. Globalnie Unikalne Identyfikatory); 3. **Unikalne wartości o niewyjaśnionym znaczeniu lub wielokrotne wystąpienia, które można (najlepiej) zastąpić nazwanymi stałymi.** Skupiam się na trzecim znaczeniu. Ale tu też utknąłem. Widząc, jak próbuję zbudować to w regule FxCop; kontrola musi być zautomatyzowana. Ale jaką mam flagę jako magiczną liczbę? Standard IfSQ wyjaśnia, co następuje jako magiczne liczby: „Dosłownie numeryczne (inne niż 0 lub 1) zostały osadzone bezpośrednio w kodzie źródłowym. Na przykład „34” lub „86400”.` Ale to wcale nie brzmi dla mnie dobrze. Oznaczałoby to, że musiałbym oflagować każde wystąpienie liczby innej niż 0 i 1. Liczby takie jak 24 (godziny), 60 (minuty) i 100 (procenty) nie są, we właściwym kontekście, żadnymi liczbami magicznymi; w moich oczach. Ponieważ będzie to automatyczne sprawdzanie, patrzenie na rzeczy w sposób kontekstowy nie jest tak naprawdę możliwe. W związku z tym mam następujące pytania: 1. Jak zdefiniować magiczną liczbę? 2. Czy można zdefiniować liczby magiczne bez kontekstu? 3. Czy powinienem pominąć niektóre stwierdzenia podczas sprawdzania magicznych liczb?


title: Dlaczego Java nie korzysta z enkapsulacji z niektórymi klasami?

text: Moje pytanie dotyczy klas `System.in` i `System.out` (mogą istnieć inne podobne do tych w bibliotece Standard). Dlaczego? Czy to nie jest zła praktyka w OOP? Czy nie powinien być używany jak: `System.getIn()` i `System.getOut()`? Zawsze miałem to pytanie i mam nadzieję, że znajdę tutaj dobrą odpowiedź.


title: Element backlogu z przygotowaniem do przyszłego sprintu Scrum

text: Obecnie jestem na początku budowy. Wymagamy dużo funkcjonalności zaplecza wokół Klientów/Użytkowników/Grup/Roli. Jednak nie są one wymagane w przypadku Sprint 1, który działa jako wydanie MVP. Ale chcę mieć pewność, że przygotowujemy się do tego ulepszonego zaplecza w przyszłości. Jest to najłatwiejsze poprzez zdefiniowanie interfejsu do systemu zarządzania użytkownikami bez faktycznego budowania go jeszcze. Jak zorganizowałbyś to w środowisku projektowym Scrum? Oczywiście, aby zdecydować, jak interfejs ma wyglądać. Musimy zdecydować o jego funkcjonalności. Ale robiąc to, będziemy bardzo blisko doprecyzowania całej sprawy. Co nie jest wymagane przez kilka miesięcy! (Jest to przepływ pracy Team Foundation Scrum 3.0 dla zainteresowanych)


title: MVVM ViewModel i polecenia

text: Potrzebuję trochę pomocy, aby zrozumieć związek między modelem widoku a poleceniem oraz odpowiedzialnością modelu widoku. Postaram się podać przykład (używając Caliburn Micro). Mam klasę viewmodel, klasę poleceń i widok z przyciskiem Zapisz. public class EditViewModel : Screen { public bool CanSave { get { return IsDirty; } } public void Zapisz() { var polecenie = new SaveCommand(this); // polecenie uzyskuje odniesienie do polecenia VM.Execute(); } } public class SaveCommand { private readonly EditViewModel _viewModel; public SaveCommand(EditViewModel viewModel) { _viewModel = viewModel; } public void Wykonaj() { var work = _viewModel.Work; .. _viewModel.IsDirty = false; } } Gdy użytkownik kliknie przycisk Zapisz. Metoda Save() jest wywoływana i uruchamia polecenie, które zapisuje pracę. Teraz moje pytanie brzmi, czy polecenie powinno mieć odniesienie do modelu widoku? Nie) Viewmodel będzie musiał przekazać pracę do polecenia, które będzie musiało przekazać wynik zapisu z powrotem do viewmodelu, który sam się zaktualizuje. Tak) Polecenie wymaga odniesienia do modelu widoku, a właściwości muszą być ustawiane publicznie. _Nie_ wydaje się być najczystszym sposobem, ale wymaga również dodatkowej pracy, gdy praca lub wynik nie są prostym boolem lub podobnym. Myślę, że to wszystko jest korzeniem. Jaki jest związek między viewmodelem a jego poleceniem i odpowiedzialnością viewmodelu? Czy istnieje silna relacja „przyjaciel” 1:1 między modelem widoku a jego poleceniem, w którym kod został właśnie przeniesiony do innej klasy. Więc nie ma nic złego w tym, że polecenie ma bezpośredni dostęp do widoku modelu. Kolejne zrozumienie, model widoku jest bardzo prostą klasą, prawie wyłącznie z właściwościami i zawiera niewiele logiki. Więc logika powinna być w poleceniu. Albo model widoku jest całkiem sprytny i powinien zawierać logikę aplikacji. Polecenia są naprawdę potrzebne tylko wtedy, gdy w jednym modelu widoku jest zbyt wiele lub są one nieco skomplikowane, w przeciwnym razie kod polecenia może pozostać w modelu widoku. Myślę, że tylko gadam, proszę pomóż mi zrozumieć model widoku i jaka jest jego odpowiedzialność?


title: złą praktyką jest posiadanie akcji w kontrolerach web api

text: Tworzyłem nową akcję dla kontrolera `WebApi` i próbowałem utworzyć adres URL za pomocą następującego: @Url.RouteUrl("DefaultApi", new { httproute = "", controller = "ClientApi"}) i zauważyłem, że domyślny trasa nie miała atrybutu akcji, wygląda to tak: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ) ; dlaczego domyślna trasa nie ma domyślnie akcji w konfiguracji trasy? czy to zła praktyka? to znaczy, czy złą praktyką jest posiadanie tak wielu akcji w kontrolerze internetowego interfejsu API, że wymaga on zmiany trasy.


title: Przetestowałem swoją klasę jednostkowo, jak teraz rozpocząć test integracyjny?

text: Napisałem klasę, która zarządza adresatami na liście MailChimp o nazwie MailChimpRecipient. Używa klasy MCAPI, która jest opakowaniem API innej firmy. http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/ Przekazuję obiekt MCAPI do konstruktora obiektu MailChimpRecipient, więc napisałem testy jednostkowe za pomocą PHPUnit, które przetestuj całą logikę we własnej klasie (nie testuję klasy MCAPI). Mam 100% pokrycie kodu i wszystkie testy zdają. Odbywa się to przez wyszydzanie i zacinanie obiektu MCAPI. Moim kolejnym krokiem było napisanie testu integracyjnego, również z wykorzystaniem PHPUnit, gdzie konstruowałem urządzenie MailChimpRecipient przy użyciu prawdziwego obiektu MCAPI, skonfigurowanego do korzystania z prawdziwej listy MailChimp. Napisałem coś, co moim zdaniem jest testem integracyjnym, który zasadniczo uruchamia testy na publicznym interfejsie obiektu, takie jak: public function testAddedRecipientCanBeFound() { $emailAddress = 'fred@fredsdomain.com'; $imię = 'Fred'; $nazwisko = 'Kowalski'; // Najpierw usuń adres e-mail, jeśli jest już na liście $oldRecipient = $this->createRecipient(); if($oldRecipient->find($emailAddress)) { $oldRecipient->delete(); } unset($staryOdbiorca); // Dodaj odbiorcę za pomocą danych testowych $newRecipient = $this->createRecipient(); $newRecipient->setForename($forename); $newRecipient->setSurname($nazwisko); $newRecipient->setEmailAddress($emailAddress); $nowyOdbiorca->dodaj(); unset($nowyOdbiorca); // Zatwierdź, że odbiorcę można znaleźć przy użyciu tego samego adresu e-mail $this->assertTrue($this->_recipient->find($emailAddress)); } Test "integracyjny" nie testuje żadnego z elementów wewnętrznych klasy - po prostu upewnia się, że dany prawdziwy obiekt MCAPI zachowuje się zgodnie z reklamą. Czy to jest poprawne? Czy to najlepszy sposób na przeprowadzenie testu całkowego? W końcu elementy wewnętrzne zostały przetestowane za pomocą testu jednostkowego. Czy mam rację sądząc, że test integracyjny ma sprawdzić, czy naprawdę działa, zgodnie ze sposobem reklamowania jego zachowania? Idąc krok dalej, klasa MailChimpRecipient implementuje interfejs, który zostanie zaimplementowany również przez inne klasy. Pomysł polega na wykorzystaniu fabryki do przekazywania do mojego kodu różnych typów obiektów odbiorców list dyskusyjnych, z których wszystkie robią to samo, choć korzystają z różnych dostawców list dyskusyjnych. Ponieważ moje testy integracyjne testują ten interfejs, co powiesz na używanie go dla wszystkich klas, które implementują interfejs? Następnie, w przyszłości, jeśli zaprojektuję nową klasę, która będzie używana zamiennie, będę mógł uruchomić ten sam test integracyjny przed wstawieniem go do projektu. Czy to brzmi rozsądnie? Testy jednostkowe sprawdzają wnętrze obiektu, testy integracyjne sprawdzają, czy zachowuje się on zgodnie z reklamą?


title: Używasz STL do rozwiązywania pytań do rozmowy kwalifikacyjnej?

text: Jeśli przechodzę rozmowę techniczną opartą na moich umiejętnościach C++, czy większość firm zezwoli lub oczekuje, że będę używać kontenerów STL do rozwiązywania problemów? Myślę, że jasne jest, że jeśli pytanie odnosi się konkretnie do połączonej listy i mojej wiedzy o połączonych listach, prawdopodobnie nie będę mógł lub nie powinienem używać kontenerów list STL. Z drugiej strony mogę otrzymać pytanie, w którym użycie std::vector może być naprawdę przydatne, a samo pytanie nie dotyczy bezpośrednio std::vector. Myślę, że w tym drugim przypadku użycie kontenera wektorowego STL byłoby dopuszczalne. Oczywiście odpowiedź na to pytanie jest przynajmniej w pewnym stopniu zależna od firmy. Jestem ciekaw, jak do tej sytuacji podchodzą większe firmy technologiczne.


title: gruba migracja klienta do aplikacji internetowej

text: To zapytanie jest związane z projektowaniem aplikacji technologii, którą powinienem rozważyć podczas migracji. Scenariusz: Mam aplikację C#.net Wininform, która komunikuje się z urządzeniem. Jedną z głównych cech tej aplikacji jest monitorowanie danych cyklicznych (szybkość 200ms) wysyłanych z urządzenia do aplikacji. Żądanie uruchomienia danych cyklicznych jest wysyłane tylko raz na początku, a następnie aplikacja zaczyna odbierać dane z urządzenia do momentu wysłania żądania zatrzymania. Teraz ta sama aplikacja musi zostać wdrożona przez Internet w intranecie. Aplikacja składa się z warstwy logiki biznesowej oraz warstwy komunikacyjnej, która komunikuje się z urządzeniem poprzez porty UDP. Staram się poszukać rozwiązania, które pozwoli mi mieć pojedynczą instancję aplikacji na serwerze tak, aby urządzenie myślało, że jest połączone jak zwykle, a następnie z warstwy logiki biznesowej będę mógł zarządzać klientami. Chcę w jak największym stopniu ponownie wykorzystać kod warstwy biznesowej i warstwy komunikacyjnej. Proszę dać mi znać, jeśli webservives/WCF/itp. co powinienem rozważyć, aby zaprojektować migrację. Z góry dziękuję.


title: Jak mogę / jaki jest najlepszy sposób na interakcję z aplikacją komputerową z aplikacji internetowej przeglądarki?

text: Sytuacja: Mamy aplikację komputerową. Posiadamy również aplikację internetową. Potrzebujemy tych dwóch interakcji. Tak więc po naciśnięciu przycisku w aplikacji internetowej aplikacja komputerowa musi rozpocząć proces (pobieranie danych z chmury za pomocą utworzonego przez nas interfejsu API). W przypadku dwóch lokalnych aplikacji można to zrobić z portami/nasłuchem, edytując flagę gdzieś lokalnie, a druga aplikacja odczytująca tę flagę itp. Czy można to zrobić z web -> desktop? W idealnym przypadku aplikacja internetowa miałaby bezpośrednią komunikację z aplikacją komputerową i powiadamiałaby ją o rozpoczęciu pobierania danych z chmury za pomocą naszego interfejsu API. Ale jeśli nie jest to możliwe, dobrym początkiem byłoby uruchomienie przez aplikację komputerową procesu, który zapętla się i sprawdza flagę w pliku lub coś takiego. Po minimalnych badaniach znalazłem kilka rzeczy, takich jak HTML5 File Api, które współdziałają z katalogiem "Sandbox" na lokalnym komputerze. Czytałem również, że ze względów bezpieczeństwa nie można uzyskać dostępu do niczego na lokalnym komputerze. Ponadto nie chcę, aby użytkownik był za każdym razem proszony o pobranie pliku, potrzebujemy, aby coś się działo za kulisami. (Nawet jeśli użytkownik musi początkowo ustawić niższe zabezpieczenia/uprawnienia tylko w tej sytuacji) Każdy wkład jest mile widziany!


title: Dlaczego jest tak mało programistek?

text: > **Możliwy duplikat:** > Perspektywy kariery: Kobiety na stanowiskach kierowniczych w oprogramowaniu Dlaczego jest tak mało programistek? Moja żona zapytała mnie, a ja nie wiedziałem.


title: Wiem, co chcę zrobić, ale trudno mi to zakodować?

text: Po przeprowadzeniu kilku wywiadów zdałem sobie sprawę, że zwykle wiem, co chcę zrobić, aby rozwiązać problem, ale często komplikuję swoją logikę (i wprowadzam wiele błędów), kiedy faktycznie koduję. Na przykład, gdy próbowałem zakodować wstawianie do posortowanej listy z pojedynczym łączem, wiedziałem, że muszę to zrobić: 1. Musiałem sprawdzić przypadek, w którym lista jest obecnie pusta 2. Musiałem sprawdzić, czy element, który chcę wstawić jest mniejszy niż bieżący nagłówek 3. Aby wstawić między węzłami, musieliśmy połączyć jeden węzeł z nowym węzłem, a nowy węzeł obok tego, który ma być później. Miałem problem z wstawianiem między węzłami, ponieważ faktycznie miałem sprawdzić dane węzła NEXT, a nie węzeł, na który wskazywał mój wskaźnik (więc mogłem ustawić bieżące obok nowego węzła). Zmagałem się również z tym problemem (zauważ, że zostało to zakodowane na białej tablicy), ponieważ byłem pod presją czasu i myślę, że bardziej skomplikowałem to w moim umyśle, niż powinienem. Kiedy wróciłem do tego problemu po rozmowie, okazało się, że rozwiązanie wcale nie jest skomplikowane (a nie powinno być). Jednak po prostu komplikuję sprawy i dezorientuję się. Czy ktoś ma jakieś sugestie, jak mogę poprawić tę moją lukę?


title: Budowanie klasy bazy danych w PHP

text: Zastanawiam się, czy powinienem napisać klasę bazy danych dla mojej aplikacji, a jeśli tak, to jak to zrobić? Tam na SO, facet wspomniał, że powinna być napisana jako klasa abstrakcyjna. Jednak nie rozumiem, dlaczego miałaby to być korzyść. Czy dobrze rozumiem, że gdybym napisał klasę abstrakcyjną, to każda inna klasa, której metody będą potrzebowały połączenia z bazą danych, mogłaby po prostu rozszerzyć tę klasę abstrakcyjną i mieć własny obiekt bazy danych? Jeśli tak, to czym różni się to od „normalnej” klasy, w której mógłbym utworzyć instancję obiektu bazy danych? Inną metodą byłoby całkowite zapomnienie o mojej własnej klasie i utworzenie instancji obiektu mysqli na żądanie. Co polecasz?


title: Emulacja MMU z dostępem do zawartości rejestrów

text: Bawię się emulacją prostego starego procesora. Na razie ustawiłem strukturę w następujący sposób: Urządzenie jest głównym i tworzy instancję procesora. Następnie CPU tworzy instancje rejestrów, zegarów i MMU. Jestem w sytuacji, w której MMU musi mieć dostęp do zawartości rejestrów, jak to zrobić? Myślę, że prawdopodobnie mógłbym coś połączyć, przekazując cały obiekt rejestru do MMU, gdy jest on wywoływany, ale wydaje się to nieporęczne. Inną rzeczą, o której pomyślałem, to zainicjalizować MMU obiektem rejestru w konstruktorze. Jeśli się nie mylę, to nadal będzie odwoływać się do tego samego obiektu? Czy jakiekolwiek zmiany, które dokonam w rejestrach w MMU, wpłyną na cały system?


title: Dlaczego procesor iOS „jailbreaking” jest specyficzny?

text: Ostatnio iOS 6 był „jailbreak”, ale tylko na procesorze Apple A4. Dlaczego proces „jailbreakingu” jest specyficzny dla procesora? Z Wikipedii: > ... "iOS jailbreaking to proces usuwania ograniczeń nałożonych przez > Apple na urządzenia z systemem operacyjnym iOS poprzez wykorzystanie > sprzętowych/programowych exploitów – takie urządzenia to iPhone, iPod touch, > iPad, i Apple TV drugiej generacji. Jailbreaking pozwala użytkownikom iOS uzyskać > dostęp root do systemu operacyjnego """ ...


title: Wprowadzanie zmian w kodzie podczas działania skryptu PHP

text: Mam teraz uruchomiony program PHP, który przetwarza wiersze bazy danych z ponad 6 milionami. Biorąc pod uwagę szybkość, z jaką przetworzono dotychczas liczbę rekordów, wygląda na to, że cały proces może potrwać kilka dni (ze względu na ograniczenia sprzętowe). Zastanawiałem się, czy mógłbym wprowadzić zmiany w programie, aby usunąć niepotrzebne logowanie i inne rzeczy, które mogą pochłaniać czas. Czy mogę to zrobić, gdy bieżący program nadal działa, aby dalsze przetwarzanie przyspieszyło, czy też spowoduje to uszkodzenie skryptu PHP?


title: Łączenie numeru kompilacji aplikacji z wersją svn

text: Poszukuję strategii na wersjonowanie aplikacji z następującymi wymaganiami. Moje wymagania to plik exe z numerem wersji (major.minor.build- number) 1) Chcę zmapować wersję do wersji źródłowej svn, która utworzyła exe 2) Ze źródłem i exe powinienem być w stanie dołączyć i debugować w vs2010 bez problemu. 3) Po sprawdzeniu kodu źródłowego exe powinienem móc ponownie zbudować plik exe z numerem wersji bez konieczności wprowadzania jakichkolwiek zmian w pliku.


title: Firma chce przemyśleć swoją stronę podczas rozmowy kwalifikacyjnej

text: Mam wstępną rozmowę telefoniczną z firmą na stanowisko Senior Web Developer i w e-mailu, o którego przygotowanie poprosili, rejestrując się na ich stronie, ponieważ chcieliby usłyszeć moje przemyślenia na ten temat i sugestie dotyczące ulepszeń. Słyszałem już historie o firmach, które to robią. Przeprowadzają wywiady z 10 osobami, a następnie, jeśli wszyscy udzielają porad, mają dużo bezpłatnych konsultacji. Uważam, że po raz pierwszy zostałem poproszony o zrobienie czegoś takiego, więc chciałem usłyszeć opinie innych ludzi na temat tego, czy jest to bezpłatne doradztwo, czy po prostu jestem paranoikiem.


title: Jak przygotować kod do OpenSourcingu i umieścić go na GitHub?

text: Za kilka tygodni mój projekt zostanie ukończony i chcę zacząć przygotowywać mój kod do użycia przez inne osoby. Zamierzam opublikować wszystko na GitHub, aby ludzie mogli to poprawić i mam nadzieję, że ulepszy. Myślę, że pytam, jaki byłby najlepszy sposób, aby upewnić się, że mój kod jest wystarczająco udokumentowany i sformułowany w odpowiedni sposób, aby inni ludzie mogli go używać? Wiem, że zawsze powinieneś wszystko komentować i zamierzam dodać funkcję @params dla każdej metody, ale czy są jakieś inne wskazówki ogólnie?


title: Jakie są najważniejsze pojęcia, które należy rozumieć, jeśli chodzi o „biegłą znajomość angielskiego dla programistów”?

text: W kwietniu wygłoszę wykład o nazwie **Angielski 2.0 – Zrozumienie języka programistów” dla grupy nauczycieli języka angielskiego. Celem jest przedstawienie im szybkiego tła w kluczowych pojęciach w ciągu dwóch godzin, aby mogli lepiej rozumieją blogi i podcasty dla programistów i są w stanie zadawać lepsze pytania podczas rozmów z programistami. Jakie są Twoim zdaniem najważniejsze pojęcia, które należy zrozumieć, koncepcje, które programiści uważają za oczywiste, ale ogół społeczeństwa nie jest zaznajomiony z nimi? Oto kilka pomysłów : * kontrola wersji * abstrakcje * pub/sub * push vs. pull * debugowanie * modułowość * architektura trójwarstwowa * klasa/obiekt * "kod spaghetti" vs. OOP * rzucanie wyjątków * crowd sourcing * refaktoryzacja * chmura * DRY - nie powtarzaj się * klient/serwer * testowanie jednostkowe * projektant/programista


title: Od nie-programisty do „profesjonalnego” niezależnego programisty

text: Jestem 15-letnim studentem, który chce kupić swój pierwszy samochód i pomyślałem, że mógłbym zarobić dodatkowe pieniądze, ucząc się programowania, ponieważ lubię cały czas bawić się komputerem. Czytałem tutaj wiele postów i wymyśliłem listę książek, które moim zdaniem byłyby dla mnie korzystne, jednak nie wiem, które informacje są najważniejsze do poznania w pierwszej kolejności lub czy mam wszystko, czego będę potrzebować. Oto, co myślałem: 1: Naucz się dogłębnie języka programowania. Jestem w połowie skończony z książką Krok po kroku 2\. Dowiedz się więcej o projektowaniu zorientowanym obiektowo i wzorcach projektowych 3\. Dowiedz się więcej o testowaniu oprogramowania 4\. Poćwicz te umiejętności na stronach takich jak projecteuler, topcoder i spróbuj wykonać proste projekty na stronach freelancerów, takich jak rent-a-coder. Czy jest coś jeszcze, co uważasz, że mogę potrzebować lub powinienem się przyjrzeć? Dziękuję Ci. Microsoft Visual C# 2010 Step by Step Professional C# 4.0 i .NET 4 (Wrox Programmer to Programmer) C# w Depth CLR poprzez C# Stosowanie UML I wzorców Head First Object-Oriented Analysis and Design Design Patterns: elementy wielokrotnego użytku obiektowego oprogramowania opartego na testach Rozwój: według przykładowego rosnącego oprogramowania obiektowego, kierowanego testami


title: Uczestnictwo w webinariach i seminariach poświęconych programowaniu i programowaniu

text: Czy udział w seminariach internetowych i seminariach dotyczących tworzenia oprogramowania i programowania poprawia poziom programowania programisty? Zwróć uwagę, że zadaję to pytanie o deweloperów, a nie menedżerów. Ponieważ na wielu webinariach i seminariach pojawiają się bardzo ogólne poglądy na temat przyszłych technologii, które mogą być przydatne dla menedżera, aby z wyprzedzeniem decydować o przyszłych narzędziach, z których powinien korzystać ich zespół.


title: Unikaj tracenia czasu na robienie budżetu

text: Często spotykam się z potencjalnym klientem, który chce, abym wykonał jego stronę internetową. Niektórzy z nich kończą jako prawdziwi klienci i oddają projekt. Niektórzy (w większości) nie mają pojęcia o cenach i godzinach. Dla tych, jeśli są blisko mnie, słyszę, czego chcą, mówię im, że będzie to około X pieniędzy i Y czasu i może wzrosnąć lub obniżyć. Jeśli mieli taki pomysł, wykorzystuję czas, którego potrzebuję, na przygotowanie odpowiedniego budżetu. Teraz, w przypadkach, w których nie są mi tak bliskie, muszę tracić czas na przygotowanie odpowiedniego budżetu od samego początku. Jeśli budżet zostanie zaakceptowany, otrzymałbym zapłatę za ten czas, ponieważ go uwzględniłem, ale jeśli nie zostanie zaakceptowany, straciłbym dużo czasu bez zapłaty. Jak mogę uniknąć utraty tego czasu?


title: Jakiego rodzaju algorytmu można użyć do stworzenia porządku, który maksymalizuje liczbę spełnionych ograniczeń „mniej niż”?

text: Powiedzmy, że mam zbiór przedmiotów {e1, e2, ..., en}, a także zbiór więzów {c1, c2, ..., cm}, gdzie ci := ej pojawia się przed ek, dla niektóre j i k. Chcę utworzyć porządek moich przedmiotów, który maksymalizuje liczbę spełnionych ograniczeń, z możliwością, że niektóre ograniczenia są sprzeczne. Nie jestem pewien, jak tego szukać, ale mam nadzieję, że istnieje jakiś znany skuteczny algorytm do tego. Może być również pomocne, jeśli przy danych wagach ograniczeń mógłbym zamiast tego zmaksymalizować całkowitą wagę spełnionych ograniczeń, a nie tylko liczbę.


title: Dlaczego I jest potrzebne, gdy istnieje AndAlso

text: Odwołałem się Jaka jest różnica między And i AndAlso w VB.net? aby zrozumieć różnicę między „I” i „A także”. Pochodzę z języka C# - a C# ma tylko `AndAlso` - nie ma `And`.. I nie widzę żadnego praktycznego zastosowania/zależy `And`. Czy w VB.Net jest jakieś praktyczne zastosowanie „i”? **Odniesienie** 1. Albo w porównaniu z OrElse 2. Jaka jest różnica między And i AndAlso w VB.net?


title: Nie można przekonać do ukrywania danych

text: Pracuję nad projektem Selenium + java, w którym wszystkie elementy Web w klasie są zadeklarowane jako - public class CheckoutPaymentConfirmpage extends WebPage{ public final Button btnPrintorder = new Button("//input[@id='but_Print']"); public final TextField txtpassword = new TextField("hasło", "//input[@id='hasło']"); // Więcej elementów tutaj // Kilka metod obiektu strony tutaj } Teraz, kiedy test potrzebuje dostępu do tych elementów, są one wywoływane bezpośrednio przez obiekt klasy `CheckoutPaymentConfirmpage` Cokolwiek java (lub OOPS) znam, nauczyła mnie tego członkowie powinni być jak najbardziej ukryci. W związku z tym musiałbym mieć zadeklarowane jako prywatne `btnPrintorder` i `txtpassword` i uzyskiwać do nich dostęp za pomocą getterów lub utworzyć metody w klasie obiektu strony do wykorzystania w testach. Ale kiedy przekazuję to innym, nie widzą w nim dużej wartości, ponieważ zmienna stanu instancji (np. `btnPrintorder` itp.) nie zostałaby zmieniona z jednego obiektu na drugi dla klasy obiektu strony (np. `CheckoutPaymentConfirmpage` itp.). w tej sytuacji, czy można pozostawić zmienną instancji jako publiczną?


Opracowaliśmy jeden produkt do obsługi płac. Mamy ponad 10 klientów, którzy korzystają z tego oprogramowania. Nasi obecni i nowi klienci wprowadzają zmiany dostosowujące w.r.t. ich potrzeb, a teraz stoimy przed problemem zarządzania produktem. Podaj nam kilka wskazówek. Jak zarządzać jednym produktem oprogramowania dla wielu klientów? Szczegóły rozwoju oprogramowania : Front End Tools : Visual Studio 2008 (aplikacja internetowa ASP.net) Source Code Mangement : Visual Source Safe (VSS) Back End : Sql Server 2005 Wielkość zespołu: 12


title: Czy składniki web part asp.net są wystarczająco dobre do tworzenia na wyłączność?

text: W mojej pracy zadano mi pytanie, że skoro planujemy ostatecznie przenieść się do Sharepoint 2010 dla większości naszych prac programistycznych, a Sharepoint 2010 obsługuje składniki web part asp.net, czy powinniśmy zacząć przenosić wszystkie nasze nowe programy, aby były wyłącznie składniki sieci web asp.net? Zapytano też, jak na to wszystko wpływa pryzmat. (nie jestem pewien, co to jest) Obecnie jesteśmy głównie lokalizacją opartą na kliencie/serwerze, ale przechodzimy na framework SOA (choć powoli). Czy to dobry pomysł? Czy lepiej mieć jakieś aplikacje w WPF i WinForm uderzające w usługi, czy po prostu powinniśmy przejść tylko do web partów? Czego będziemy tracić, jeśli wykonamy ten ruch?


title: Jak zorganizować testy integracyjne i dane testowe dla różnych środowisk podczas korzystania z Maven Failsafe

text: Zacząłem oddzielać testy jednostkowe od testów integracyjnych za pomocą Maven Surefire i Failsafe. Teraz zastanawiam się, jakie są dobre sposoby radzenia sobie z oddzielnymi środowiskami. Weźmy na przykład te dwa scenariusze testów integracyjnych: * Czy po podaniu identyfikatora klienta mogę uzyskać listę zamówień należących do tego klienta. * Czy po podaniu identyfikatora klienta i identyfikatora produktu mogę utworzyć zamówienie dla tego klienta. Chcę mieć możliwość uruchamiania tych testów zarówno w środowisku TESTOWYM, jak i PRODUKCYJNYM, ale będą one wymagały innych danych, aw niektórych przypadkach także nieco innego kodu. W niektórych przypadkach są też testy, których mogę nie chcieć uruchamiać w PRODUKCJI, ale tylko w TEST. Na przykład mój klient testowy nie będzie miał tego samego identyfikatora zarówno w TEST, jak i PRODUKCJI. A kiedy potrzebuję stworzyć produkt dla zamówienia, być może będę musiał utworzyć inny produkt (o różnych właściwościach itp.). Jakie są dobre sposoby radzenia sobie z tym bez zbytniego bałaganu lub duplikowania kodu?


title: Strategia utrzymywania referencji montażowych w TFS

text: Mam konfigurację 3 oddziałów: Dev, QA, Prod. Istnieje folder referencyjny, w którym przechowujemy wspólne zespoły zewnętrzne i wewnętrzne. Zarządzanie zmianą było wyzwaniem. Czasami programiści zapominają wejść do folderu References i sprawdzić nową wersję. Próbowaliśmy odwoływać się do projektów, co skutkuje odwołaniem do folderu bin. Działa to dobrze, o ile zachowujesz prawidłową kolejność kompilacji i zawsze zawierasz wszystkie projekty w tym samym pliku rozwiązania. Nie zawsze jest to dobry lub wykonalny pomysł, więc przeszliśmy do folderu z referencjami. Ciągła integracja może pomóc złagodzić niektóre z tych problemów, ale nie mamy jeszcze serwera CI. Czy istnieje dobry proces zarządzania folderem References, który nie wymaga tak dużej interwencji programistów manualnych? Pomyślałem o skopiowaniu plików na post-build. To nie rozwiązuje problemu sprawdzania nowej wersji, aby inni deweloperzy mieli do niej dostęp. Mamy TFS. To jest dla wewnętrznego rozwoju korporacyjnego. Wszystko, co wymaga open source naszego produktu, nie jest możliwe. **AKTUALIZACJA** Jestem właścicielem programu FinalBuilder. Jestem nowy w używaniu go i nie wiem, czy może to przynieść korzyści temu procesowi.


title: Railsy - Jak użyć formularza modalnego, aby dodać obiekt w jednym modelu, a następnie odzwierciedlić tę zmianę na stronie głównej?

text: Pracuję nad aplikacją Rails i natknąłem się na sytuację, w której nie jestem pewien, jak postępować. Wysłałem pytanie na SO z próbkami kodu i tym podobne - nie otrzymałem odpowiedzi, a im więcej myślę o problemie, tym bardziej myślę, że podchodzę do tego w niewłaściwy sposób. (Zobacz pytanie SO na http://stackoverflow.com/questions/9521319/how-to-reference-form-when-rendering-partial-from-js-erb-file) Tak więc bardziej ogólne pytanie o architekturę : W tej chwili mam formularz, w którym użytkownik może dodać nowy przepis. Formularz umożliwia również wybór składników (wykorzystuje obiekt collection_select zawierający Ingredient.all). Haczyk polega na tym, że chciałbym, aby użytkownik mógł dodać nowy składnik w locie, bez opuszczania formularza przepisu. Używając ukrytego div i niektórych jQuery/AJAX, mam link, który użytkownik może kliknąć, aby wyświetlić formularz modalny zawierający składniki/new.html.erb, który jest prostym formularzem. Po przesłaniu tego formularza wywołuję składniki/create.js.erb, aby sprawdzić, czy składnik został zapisany i ukryć modalny div. Teraz wróciłem do formularza mojego przepisu, ale moja kolekcja_select nie została zaktualizowana. Wygląda na to, że mam tu kilka możliwości: 1. spróbuj ponownie zrenderować część collection_select formularza, aby pobrać nową listę składników. To była metoda, której próbowałem, kiedy pisałem pytanie SO. Problem, z którym się spotykam, polega na tym, że część, której używam dla collection_select, wymaga przekazania formularza nadrzędnego, a kiedy próbuję renderować z pliku JS, nie wiem, jak przekazać mu obiekt formularza. 2. Załaduj ponownie formularz receptury. To działa (pole collection_select zawiera teraz nowy składnik), ale użytkownik traci wszelkie postępy, jakie poczynił w formularzu receptury. Potrzebowałbym sposobu na utrwalenie danych formularza - myślałem o ręcznym przekazywaniu wartości tam iz powrotem, ale to jest niechlujne i musi być lepszy sposób ... 3. Spróbuj ręcznie wstawić tagi za pomocą jQuery - to by być proste, ale ponieważ zezwalam na dodanie wielu składników, nie mogę być pewien, na jaki identyfikator kierować. Teraz nie mogę być jedyną osobą, która ma ten problem – więc czy jest jakiś łatwiejszy sposób, którego mi brakuje? Podoba mi się opcja 2 powyżej, ale nie wiem, czy istnieje łatwy sposób na zgarnięcie całego hasha params, tak jakbym przesłał formularz z głównymi przepisami. Mam nadzieję, że ktoś wskaże mi właściwy kierunek, abym mógł znaleźć odpowiedź na to pytanie... Jeśli to nie ma sensu, daj mi znać - jeśli chcesz, mogę zamieścić próbki kodu, ale większość istotnego kodu jest na pytanie SO. Dziękuję!


title: Jak ominąć uwierzytelnianie Oauth2, gdy klient i właściciel zasobu to ta sama jednostka?

text: Obecnie pracujemy nad wykorzystaniem API dostarczonego przez Mercado Libre, które jest miejscem sprzedaży różnych towarów. Ich interfejsy API używają OAuth 2.0 do uwierzytelniania. Problem polega na tym, że OAuth 2.0 w wersji zaimplementowanej przez Mercado radzi sobie z przypadkiem, że aplikacja kliencka i właściciel zasobu są różnymi podmiotami. Jeśli więc aplikacja kliencka chce na przykład wyświetlić wszystkie zamówienia złożone przez sprzedawcę, użytkownik będzie musiał najpierw uwierzytelnić się na Mercado, zanim pozwoli aplikacji klienckiej uzyskać jego dane. Jest to wygodny przepływ, jeśli aplikacja kliencka i właściciel zasobu są różnymi jednostkami, a właściciel zasobu używa przeglądarki, aby uzyskać dostęp do aplikacji klienckiej. Jednak w moim przypadku będzie teraz UI. Aplikacja kliencka, którą buduję, będzie automatycznie zbierać zamówienia i inne informacje z Mercado bez interwencji użytkownika, ponieważ sami jesteśmy właścicielami danych. **TL;DR** Krótko mówiąc, potrzebuję sposobu na ominięcie uwierzytelniania użytkownika podczas korzystania z OAuth 2.0 bez interfejsu użytkownika.


title: Jak Java jest wykorzystywana w sektorze finansowym?

text: Jestem studentem z dobrą znajomością języka Java i chciałbym dostać się do sektora finansowego. Jak jest tam używana Java? Jak programista Java może spodziewać się wejścia do sektora finansowego i osiągnięcia sukcesu? Jakimi rodzajami systemów powinienem się zająć?


title: Tworzenie stron internetowych: brak przepływu pracy na lokalnym serwerze

text: Rozważam przeprojektowanie mojego ekosystemu tworzenia stron internetowych. Używamy Git z dużym powodzeniem do wdrażania nowych zmian na naszych serwerach produkcyjnych, pomostowych i deweloperskich. Tradycyjnie zawsze miałem kopię Apache na moim lokalnym komputerze - w interesie utrzymania jak najszczuplejszej lokalnej maszyny rozważam uruchomienie Apache na nielokalnej maszynie wirtualnej i jakoś zsynchronizowanie zmian. Moją pierwszą myślą było uruchomienie czegoś takiego jak `rsync` i `cron` (system programistyczny dla komputerów Mac), aby monitorować katalog pod kątem zmian w plikach, a następnie je zsynchronizować. Kusiło mnie, aby użyć osobnej gałęzi w Git i napisać hooka, aby serwer Apache ściągał zmiany, ale wersjonowanie wszystkich moich zmian może być bezproduktywne, szczególnie w przypadku bardzo eksperymentalnych dodatków. Moje pytanie brzmi, czy jest coś, czego nie rozważam w tym przepływie pracy? Ten konkretny projekt wymaga ColdFusion, więc czy mam zamiar odnieść znaczące korzyści z braku lokalnie Apache/CFIDE?


title: Czy przejście z CVCS na DVCS zapewnia znaczną oszczędność przepustowości?

text: Tak więc jestem w dużej firmie rozproszonej geograficznie, używamy siły i zaczynam przekonywać do DVCS z białą księgą, o której napisanie zostałem poproszony. Myślałem, że jednym z argumentów, których mógłbym użyć, jest przepustowość zaoszczędzona przy użyciu DVCS, a technicznie rzecz biorąc, gdyby istniały pliki binarne do pobrania (są, ale nie są synchronizowane codziennie) i wystarczająca liczba programistów, którzy je pobierają, można by to zobaczyć istotna różnica. Niestety jest to skrajny przypadek i to wszystko, o czym mogę pomyśleć (poza indywidualnymi programistami, którzy mogą pracować szybciej podczas porównywania, zatwierdzania lokalnie i wszystkich innych korzyści DVCS). Więc **czy byłoby zauważalne zaoszczędzenie przepustowości?, w jakich innych przypadkach?**. Darmowy plik cookie dla każdego, kto ma rzeczywiste dowody empiryczne (potwierdzające lub odrzucające). **Edytuj:** To tylko jeden z argumentów, które staram się poprzeć i wcale nie jest główny, mam co najmniej 10 innych... to jedna z "korzyści pobocznych", ale chcę aby dowiedzieć się, jak to jest prawdziwe. Plus, chcę wygrać z facetami IT =)


title: Lista kontrolna przeglądu kodu Ext JS

text: Czy każdy może udostępnić listę kontrolną przeglądu kodu dla Ext JS wspólne i specjalnie dla Ext JS 3.4?


title: Czy dokumenty High Level Design i Low Level Design są potrzebne do śledzenia procesu rozwoju Agile?

text: Nasz zespół opracowuje projekt z wykorzystaniem metodyki Agile. Wszystkie nasze wymagania są przekształcane w pozycje zaległości produktowej i na tej podstawie są dzielone zadania. Jeden z członków mojego zespołu zasugerował utrzymanie Dokumentu Wysokiego Poziomu (HLD) i Dokumentu Niskiego Poziomu (LLD) dla tego wymogu. Czy musimy mieć te dokumenty, aby śledzić proces Agile?


title: Dlaczego mój kod operacji na macierzach C++ (OpenMP) zaczyna powodować więcej chybień w pamięci podręcznej działającej równolegle w porównaniu do Scali?

text: Napisałem kod w C++ (OpenMP do zrównoleglania pętli), który wykonuje wiele operacji na macierzach. Pojedyncza instancja kodu działa bardzo szybko i kończy się w 0,2 sekundy. Dla tego samego przetwarzania kod napisany w Scali (przy użyciu aktorów) zajmuje około 3 sekund. Problem, z którym się borykam, polega na tym, że gdy uruchamiam równolegle wiele wystąpień kodu C++, czas działania rośnie bardzo szybko. Kod Scala nie wykazuje takiego zachowania. Uruchamianie równoległych instancji kodu Scala liniowo wydłuża czas. Korzystając z profilera Zoom, odkryłem, że mój kod C++ zaczyna ponosić błędy w pamięci podręcznej. Pojedyncze wystąpienie kodu zajmuje około 2 MB pamięci. A pamięć podręczna L3 w moim komputerze ma 3 MB. Dlatego ma sens, że wiele instancji działających równolegle doprowadzi do chybień w pamięci podręcznej. Nie rozumiem, dlaczego czas wykonywania kodu Scala nie ma wpływu, gdy wiele wystąpień działa równolegle. Wszystkie macierze są gęstymi macierzami zarówno w kodzie C++, jak i Scala.


title: Czy to prawda, że bardziej rygorystyczny styl kodowania jest zawsze lepszy?

text: Obecnie studiuję informatykę i zastanawiałem się, jak surowe style kodowania są w branży, jak bardzo różnią się one między branżami i czy to prawda, że bardziej rygorystyczny styl kodowania jest zawsze lepszy?