title: znajdowanie ścieżki najniższego kosztu - dynamiczne

text: Muszę napisać dynamiczny algorytm do znajdowania ścieżki najniższego kosztu. Mam więc punkty, które muszę odwiedzić. Mogę skakać tylko między punktami według odległości - 5 Mam tablicę odległości od punktu zerowego na przykład (1 3 5 10 15 20 21 22). Każdy ruch kosztował mnie 1. Więc najlepszą ścieżką będzie ruch 1->5->15->20->22 (3 i 21 mogę pominąć). Czy możecie mi tak podpowiedzieć, jak programować to dynamicznie? Zastanawiałem się nad zrobieniem czegoś takiego: znajdź rozwiązanie dla array[0] i array[1] (to proste, jest tylko jedno rozwiązanie od do 1 (1->3)), a następnie dodaj array[2] i znajdź najlepsze rozwiązanie (1->5 też jest rozwiązanie 1->3->5, ale to będzie mnie kosztować 2 ruchy) potem za 4 punkty, 5 itd. Ale nie wiem jak zacząć pisać mój algorytm poprawne i dynamiczne. Wiem, że potrafię zrobić zachłanny algorytm, ale nie o to chodzi... Czy możesz dać mi jakieś wskazówki? Jak zaczac? Jak zachować rozwiązania? i znaleźć te najlepsze?


title: Kategorie pytań do rozmowy kwalifikacyjnej Windows Mobile

text: Muszę ustawić kategorie do rozmów kwalifikacyjnych z kandydatami do Windows Mobile Development. Podobnie jak w przypadku ASP.NET, możemy mieć 1. OOPS 2. .NET Framework (CLR, BCL, MSIL itp.) 3. Javascript, jQuery 4. Kontrolki danych 5. ADO.NET 6. SQL Server dla Windows Mobile, czyli kategorie które powinny być uwzględnione? Będąc specyficznym dla naszego obecnego produktu, nie ma interfejsu użytkownika i będzie działać w tle. Bezpieczeństwo to pierwsza rzecz, którą należy wziąć pod uwagę. Jest to aplikacja typu SPY, która będzie śledzić aktywność użytkownika. Może być używany przez firmy do monitorowania swoich pracowników.


title: Dlaczego Microsoft ma tak złą reputację wśród ludzi zaangażowanych w open source?

text: Czy są jakieś szczególne incydenty, które są odpowiedzialne za niską reputację Microsoftu (i Billa Gatesa) w oczach społeczności open source? Microsoft wyraźnie nie jest jedyną firmą prawnie zastrzeżoną. Firmy takie jak Apple radziły sobie znacznie gorzej, jeśli chodzi o ograniczenia dotyczące oprogramowania. Dlaczego Microsoft najbardziej nienawidzi społeczności open source?


title: Przeciążanie metod innym zachowaniem - styl

text: Mam pytanie dotyczące stylu dotyczące przeciążania metod/konstruktorów. Mam konstruktora, który robi coś bardzo prostego, a następnie wywołuje metodę z pewnymi efektami ubocznymi. Czasami jednak nie chcę efektów ubocznych, więc stworzyłem osobny przeładowany konstruktor. Tutaj pokazuję dwie wersje. Wersja 1 jest prosta: jeśli przekażę bool, TrickyFunction nie zostanie wywołana. Ale może to mylące, ponieważ wartość no_tricks nie wpływa na zachowanie (tylko, że no_tricks istnieje). Wersja 2 faktycznie przetwarza no_tricks i na tej podstawie podejmuje decyzję o uruchomieniu TrickyFunction. Która wersja lub inna wersja jest bardziej stylistycznie „poprawna”? public foo MyFunction(string a) { variable = a TrickyFunction(a) } #Wersja 1 public foo MyFunction(string a, bool no_tricks) { variable = a } # Wersja 2 public foo MyFunction(string a, bool no_tricks) { zmienna = a if (notricks == true) { TrickyFunction(a) } }


title: Czy kontener IoC powinien być częścią przenośnej biblioteki?

text: Widzę zalety przenośnych bibliotek klas w zakresie scentralizowania modeli i modeli widoków w jednej bazie kodu. Gdzie jednak powinno odbywać się zarządzanie wstrzykiwaniem zależności (kontener IoC)? Moje modele mają zależności, które, jak sądzę, skorzystałyby na dostarczaniu przez wstrzyknięcie. Nie jestem pewien, jak zabrać się za „bootstrapping”, aby skonfigurować kontener w przenośnej bibliotece, a także widziałem kilka sugestii, że przenośna biblioteka nie powinna być zależna od frameworka DI. Te punkty skłaniają mnie do myślenia, że może DI powinno być skonfigurowane w aplikacjach korzystających z mojej przenośnej biblioteki. Wydaje się to jednak raczej wsteczne, wymagając od kogoś korzystającego z biblioteki, aby dodał część ładowania początkowego do swojej aplikacji, a także byłoby zduplikowane w każdej aplikacji korzystającej z biblioteki. **Czy biblioteka czy aplikacja powinna obsługiwać DI?** Niektóre szczegóły dotyczące tego, jakie jest moje środowisko: c#, aplikacja WPF odwołująca się do PCL z modelami, ViewModels i logiką rdzenia. Rozważam użycie Autofac dla mojego kontenera IoC.


title: Zagadka programowania - najbardziej wydajna ścieżka

text: Mam problem niespecyficzny dla języka, na który nie mogę znaleźć praktycznej odpowiedzi. Mam siatkę 10x10 zawierającą wartości całkowite od 1-10. Każda wartość reprezentuje koszt przebycia tego pola, poruszania się na północ, wschód, południe lub zachód (koszt jest ponoszony, gdy schodzisz z pola, a nie na niego). Muszę znaleźć sposób na poruszanie się najtańszą ścieżką od placu początkowego do punktu końcowego. Używałem rekurencyjnej funkcji javascript, dzięki której każdy kwadrat mógł zapytać sąsiedni kwadrat, jaki byłby koszt, gdyby podróż przebiegła w ten sposób; pytany plac będzie następnie pytał sąsiadów itp., dopóki nie zostanie znaleziona najtańsza trasa. Jednak, jak można się spodziewać, zajmuje to zbyt dużo czasu, nawet jeśli każdy plac został oznaczony jako zajęty, więc nie można go ponownie zapytać (w celu uniknięcia okrężnych tras, które mogą się nigdy nie kończyć). Jestem pewien, że musiało to zostać zrobione wcześniej. Czy ktoś ma metodę, która według niego zadziała? Dzięki za pomoc :)


title: Dlaczego XML nie nazywa się EML?

text: Z Wikipedii > Extensible Markup Language (XML) to zestaw reguł kodowania dokumentów w > formie do odczytu maszynowego. Jest ona zdefiniowana w specyfikacji XML 1.0[4] > opracowanej przez W3C i kilku innych powiązanych specyfikacjach, wszystkie za darmo > otwarte standardy.[5] Jakie są historyczne powody wywoływania skróconego XML, a nie bardziej naturalnego EML?


title: Jak często procesory popełniają błędy obliczeniowe?

text: W _Uwagach o programowaniu strukturalnym_ Dijkstra dużo mówi o dowodliwości programów komputerowych jako abstrakcyjnych bytów. W konsekwencji zauważa, że testowanie nie wystarczy. Np. zwraca uwagę na fakt, że niemożliwe byłoby przetestowanie funkcji mnożenia f(x,y) = x*y dla dowolnych dużych wartości x i y w całym zakresie x i y. Moje pytanie dotyczy jego misc. uwagi o „kiepskim sprzęcie”. Wiem, że esej został napisany w latach 70., kiedy sprzęt komputerowy był mniej niezawodny, ale komputery wciąż nie są doskonałe, więc muszą _czasami_ popełniać błędy obliczeniowe. Czy ktoś wie, jak często to się dzieje lub czy są jakieś statystyki na ten temat?


title: Budowanie witryny z obsługą internalizacji

text: Kiedy użytkownik przegląda jakąś stronę, a następnie zmienia język, powinny wystąpić następujące działania: * Jeśli istnieje tłumaczenie strony, którą teraz przegląda, przekieruj na tę stronę. * Jeśli nie ma przetłumaczonej wersji tej strony, przekieruj na stronę główną. Na przykład użytkownik przegląda stronę `/about-us`, a następnie przełączył się na język niemiecki, a następnie powinien zostać przekierowany do `/uber-uns` jeśli istnieje tłumaczenie `/about-us` na niemiecki. Obecnie mam strukturę taką jak ta, CREATE TABLE `pages` ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT `language` varchar(3), `urlSegment` varchar(250), `content` TEXT ) DEFAULT CHARSET=UTF8; Jakie relacje/kolumny należy dodać, aby to osiągnąć?


title: Architektura MVC i 3 tier w grze - Jaka jest warstwa biznesowa

text: Tworzę grę i śledzę przykłady wykorzystujące wzorzec architektury MVC. Teraz próbuję zrozumieć, jak to pasuje do architektury 3-warstwowej. Z tego, co zebrałem do tej pory: * MVC i 3-warstwowe są oddzielnymi pomysłami i są kompatybilne * MVC ma trójkątną strukturę komunikacyjną, podczas gdy 3-warstwowa jest stosem * MVC może być używany w ramach struktury 3-warstwowej, z MVC części zawarte w warstwie UI jak na diagramie: ![MVC in 3-tier](http://i.stack.imgur.com/VsBMG.jpg) Mój model gry zawiera wszystkie klasy opisujące abstrakcyjny świat gry - wszystkie przedmioty, postacie, ich pozycje i prędkości na świecie, wynik itp. Ale teraz, co stanowiłoby niższy poziom biznesowy? Ponieważ to wszystko, co normalnie kojarzyłbym z warstwą biznesową. Czy w tym przypadku diagram powinien być może pokazywać widok i kontroler w warstwie interfejsu użytkownika, z modelem zawartym w warstwie biznesowej pod nimi?


title: Opłaty/stawki przy zatrudnianiu firmy do pomocy w programowaniu

text: Pracuję dla małego sklepu deweloperskiego robiąc aplikacje serwerowe i okazjonalnie desktopowe dla klientów. Zastanawialiśmy się nad stworzeniem produktu i skontaktowaliśmy się z dwoma studiami, które mają doświadczenie w tym, co lubimy robić. Nikt do nas nie wrócił. Druga podała, ile godzin zajmie każda funkcja, a na koniec ustanowiła 15% opłatę za testowanie i „nieznane”. Chociaż nie wydaje mi się to dziwne, ich stawka godzinowa jest. Pobierają 150 USD. Za 160 roboczogodzin mamy rachunek w wysokości 24 tys. Niektórzy programiści zarabiają tę kwotę w 6 miesięcy, ta firma/osoba chce ją na miesiąc pracy. Teraz programiści w moim studio zarabiają około 35 dolarów na godzinę. Jeśli postawimy na to faceta, MOŻE nam to zająć 4-5 miesięcy, czyli mniej więcej tyle, ile wynosi nasz rachunek. Ale nadal uważam, że to śmieszne. Czy to jest standard? czy powinienem spróbować znaleźć inną firmę? co powinienem zrobić? To, co robi, jest wyspecjalizowane, jednak wymagane SDK to dobrze dokument i produkt Microsoft (więc wierzymy w dokumentację, ale nadal jest wyspecjalizowana). Siedziba firmy znajduje się w Kalifornii. Jakie myślisz?


title: Gdzie umieścić zmienne potrzebne w klasach?

text: Mam 3 klasy: rozszerzenie JButton, FButton; JTextField; i rozszerzenie JPanel, FPanel, które zawierałoby jedną instancję obu. FButton ma otworzyć plik i udostępnić nazwę pliku i katalog dla pliku. JTextField jest przeznaczony do wyświetlania nazwy pliku i katalogu dostarczonego przez FButton. Pomyślałem, że FPanel powinien być tym, który zawiera nazwę pliku i katalog. Jeśli zrobię prywatne klasy FButton i JTextField FPanel, problem zostanie rozwiązany za pomocą zmiennych publicznych. Co powiesz na to, czy chcę je rozdzielić na publiczną klasę FPanel, widoczną klasę FButton i widoczną klasę JTextField, w tym samym pakiecie? **Jak mogę udostępnić zmienne pliku wszystkim klasom w pakiecie?** Czy mam to robić w ten sposób?


title: Jakich interesujących tematów, wskazówek i przykładów Haskella nie powinienem przegapić w mojej prezentacji?

text: Muszę zrobić prezentację o Haskell i szukam ciekawych przykładów Haskella, wskazówek i ogólnie tematów, których nie powinienem przegapić w mojej prezentacji. Celem prezentacji jest ogólne przedstawienie języka. Nadal piszę to, co powiem, ale następujące tematy są już uwzględnione: * Leniwa ocena * Sposoby definiowania funkcji (dopasowywanie wzorców, wyrażenia lambda itp.) * Funkcje wyższego rzędu i curry Co myślisz, że ** musi ** być wyjaśnione podczas rozmowy o Haskell?


title: Czy będę poważnie zagrożony uczeniem się Ruby z Rails w wersji przed 3?

text: Jestem na współdzielonym koncie hostingowym, które uruchamia cPanel, dość standardowe, chyba że masz własną maszynę wirtualną. cPanel obecnie nie obsługuje Rails 3. Mój współlokator, który przez ostatni rok pracował z RORem, zdecydowanie sugeruje, abym założył własną wirtualną wirtualną programistę na mojej maszynie i nauczył się ROR z Rails 3, a jeśli chodzi o umieszczanie rzeczy na żywo mój hosting, obejdź wszelkie problemy z wersjami Rails. Nie jestem do tego w 100% przekonany, ponieważ tak naprawdę nie chcę sam utrzymywać lokalnej maszyny wirtualnej ze względu na ograniczone doświadczenie / czas. Nadal tak naprawdę nie zacząłem patrzeć na ROR i zrobiłem tylko kilka prostych interaktywnych samouczków on-line. Jakie są Twoje przemyślenia/odczucia/sugestie na ten temat? Jeśli pozostanę przy wersji Ruby i Rails dla mojego hosta, czy będę w poważnej niekorzystnej sytuacji, jeśli chodzi o pracę w branży, czy też nie powinno to zrobić dużej różnicy? Tło: Nadal jestem studentem.


title: Czy istnieje coś takiego jak polimorficzny Singleton?

text: Mam obiekt ładujący zasoby, który ładuje obiekty z dysku lub z archiwum ZIP, w zależności od platformy. Ma stan (np. ścieżkę do katalogu lub archiwum ZIP i ewentualnie buforowanie w przyszłości), więc musi to być pojedyncza instancja. Więc normalnie zrobiłby Singleton. Ale mój problem polega na tym, że ten moduł ładujący zasoby ma wiele implementacji, z których jedna jest wybierana podczas inicjalizacji. Więc przekształcenie modułu ładującego zasoby w Singletona nie wystarczy. Wszystko, o czym mogę myśleć, to mieć Singletona, który zawiera odniesienie do pojedynczego modułu ładującego zasoby. Ale czy nie ma na to ładniejszego wzoru?


title: Zasoby dla początkujących programistów

text: Mam kumpla, który rozwija/przerabia skromnie udaną grę internetową, którą prowadzi. Nie jest nowicjuszem w języku, w którym jest napisany, PHP – robi to od lat. Ale JEST nowicjuszem, jeśli chodzi o ogólne zasady tworzenia oprogramowania. Jest to działalność jednoosobowa (więc nie ma żadnych przełożonych/współpracowników, od których mógłby odbijać pomysły) i nigdy nie odbył formalnego szkolenia ani dziennej pracy jako programista. Chciałby, aby remont był bardziej modułowy i używał pojęć, takich jak programowanie obiektowe (zarówno w celu ułatwienia utrzymania bazy kodu, jak i dlatego, że to brzmi naprawdę fajnie), ale ma pewne problemy z podstawowymi koncepcjami i sposobami ich zastosowania je do swojego projektu. Chciałbym pomóc, ale w wolnym czasie tylko jeden weteran może zrobić tyle. Jakie jest najlepsze źródło internetowe do czegoś takiego, miejsce, w którym mógłby zadać wiele pytań i uzyskać odpowiedzi od pacjentów? StackOverflow.com oczywiście nie jest najlepszym rozwiązaniem; będzie zadawał wiele pytań, które są, do weterana, 101-poziomowego materiału, a zamykanie/usuwanie twoich pytań jako zbędne/nie na temat/nie-prawdziwe jest zniechęcające jak diabli. Gdyby ten facet był twoim przyjacielem, gdzie byś go wysłał?


title: Czy istnieje praktyczna zasada określająca, jakie ustawienie powiększenia mapy Bing powinno opierać się na liczbie mil, które chcesz wyświetlić?

text: Jeśli mapa zawiera pinezki/punkty trasy, które rozciągają się tylko na kilka mil, mapa powinna być powiększona i pokazywać dużo szczegółów. Jeśli zamiast tego pinezki/punkty orientacyjne pokrywają rozległe obszary, takie jak setki lub nawet tysiące mil, należy je oddalić. To jasne. Moje pytanie brzmi: czy istnieją ogólne wytyczne dotyczące mapowania (bez zamierzenia kalambury) poziomów powiększenia Map Bing do określonej liczby mil, które oddzielają najbardziej oddalone od siebie punkty? np. czy jest jakiś wykres, który ma coś takiego: Poziom powiększenia N pokazuje 2 mile kwadratowe Poziom powiększenia N pokazuje 5 mil kwadratowych itd.?


title: Które branże stosują najbardziej wysokiej jakości, mierzalne i niezawodne podejście do oprogramowania?

text: Które sekcje branży oprogramowania (tj. opieka zdrowotna, lotnictwo, gry itp.) najprawdopodobniej będą praktykować inżynierię oprogramowania z rygorem inżynierskim + głębią i szerokością zdefiniowanymi w SWEBOK?


title: Czy generalnie przeciążanie funkcji jest uważane za złe?

text: Ostatnio znalazłem dwa nowe języki programowania (Vala i GO google), które nie obsługują przeciążania metod lub funkcji i zamierzają nie wspierać ich w przyszłości! Twórcy tych języków twierdzą, że przeciążanie jest złem i nie powinno być używane! (w programowaniu systemowym?) Powiedziano mi, że twórcy Go Language mówią nawet, że dziedziczenie ~~klasy~~ też jest złe, a Go nie obsługuje że! Moje pytanie brzmi: czy naprawdę są takie złe, że nowe języki je pomijają? A może jest jakieś szczególne pole użycia dla tych języków, które czynią je złymi? Jaka może być w ogóle wada korzystania z takich udogodnień?


title: Sposoby wykorzystania swoich umiejętności jako programisty w celu odwdzięczenia się społeczności/organizacjom charytatywnym

text: Niedawno natknąłem się na wydarzenie społecznościowe o nazwie GiveCamp. > GiveCamp to trwające cały weekend wydarzenie, podczas którego profesjonaliści technologiczni, od > projektantów, programistów i administratorów baz danych, po marketingowców i strategie internetowe > poświęcają swój czas na dostarczanie rozwiązań dla > organizacji non-profit. Od momentu powstania w 2007 r. program GiveCamp przyniósł korzyści ponad 150 organizacjom charytatywnym, a wartość czasu programisty i projektanta przekroczyła 1 000 000 USD na usługi! Pochodząc z bardzo wiejskiej części kraju, gdzie jest ogromna szansa na takie akcje charytatywne, zastanowiło mnie to. Czy istnieją inne duże ruchy, takie jak GiveCamp? GiveCamp jest sponsorowany przez Microsoft, więc oczywiście większość jest prowadzona przez grupy użytkowników .NET. Czy są inne jego smaki? Różne rodzaje? Java/Python/inne ruchy charytatywne typu open source? Jeśli nie, to jak oddajesz?


title: „Inne” funkcje w języku programowania

text: W Internecie (nie pamiętam gdzie) widziałem, jak ktoś wspomniał, że chciałby, aby język programowania miał więcej wbudowanych funkcji dla narzędzi takich jak dokumentacja i kontrola źródła. Teraz nie rozumiem, co należy wbudować do kontroli źródła, ponieważ narzędzia takie jak git (przepraszam, ale nie mam dużego doświadczenia z innymi) mają wszystko, czego potrzebuję i są bardzo łatwe w użyciu. Dokumentacja, którą rozumiem, być może możliwość generowania zdalnych wywołań procedur ze źródła do jakiegoś IDL byłaby fajna. Ale tak naprawdę nie rozumiem, jakie funkcje język programowania może/powinien mieć, a które nie są związane z generowaniem kodu i składnią (z wyjątkiem dwóch, o których wspominam, jeśli chodzi o biblioteki). Jakie macie pomysły? Jaka jest Twoja lista życzeń?


title: Jak podejść do refaktoryzacji istniejącej aplikacji webowej?

text: Ostatnio dużo czytałem i dużo myślałem i doszedłem do wniosku, że może powinienem przemyśleć swoją strategię tworzenia stron internetowych. Dużo zajmuję się programowaniem w locie, aw ciągu 2 lat pracuję nad aplikacją internetową PHP, to, co mogło zacząć się jako małe narzędzie, przekształciło się w całkiem duży projekt. Ale jest mnóstwo _starego_ kodu ode mnie i mojego poprzednika, fragment kodu, który mógł mieć sens w tamtym czasie, ale teraz kwestionuję użyteczność tego kodu w takiej formie, w jakiej jest faktycznie. Co więcej, takie rzeczy jak testowanie jednostkowe i programowanie sterowane testami nie były w moim zakresie do niedawna. Jak więc podszedłbyś do refaktoryzacji aplikacji webowej? Jakich rzeczy powinienem szukać iw jakiej kolejności? A co z grą przeglądarkową w porównaniu z funkcjonalną aplikacją internetową? Czy byłaby wtedy różnica w podejściu?


title: Gdzie mogę znaleźć dobry przykład technik kompaktowania danych w pamięci?

text: Piszę framework Java do manipulowania dużą ilością danych w pamięci, gdzie wiele "komórek" znajdujących się blisko siebie będzie miało tę samą wartość. Szukam algorytmów i/lub technik specjalnie zaprojektowanych, aby wyeliminować te powielania _przy zachowaniu dużej szybkości odczytu w pamięci_. To znaczy techniki, które utrzymują szybkość dostępu _odczytu_ w O(1). Moje dane są przechowywane w niezmiennych obiektach, aby umożliwić szybką wielowątkowość. Same dane mogą być dowolne, od 4 bitów na komórkę do podwojeń do tablic ziaren itp.


title: Najlepsze podejście do propagacji błędów w warstwie dostępu do usługi wieloplatformowej aplikacji mobilnej

text: Rozpoczęliśmy pracę nad aplikacją mobilną przy użyciu platformy Xamarin. Istnieje podstawowa biblioteka, która ma być udostępniana między aplikacjami na Androida i iOS. W podstawowej bibliotece będzie kilka funkcji do komunikacji z serwisem internetowym. Rozmawiałem z moim bratem, jakie byłoby najlepsze podejście, oboje mamy inne zdanie, więc chcielibyśmy poznać twoje poglądy w tej sprawie. I być może istnieje jeszcze lepsze podejście, o którym oboje jeszcze nie pomyśleliśmy. Usługa sieciowa, z którą rozmawiamy, ma kilka predefiniowanych kodów stanu HTTP dla niektórych błędów. Na przykład, gdy przeprowadzanie weryfikacji konta i informacje są nieprawidłowe, usługa sieciowa może zwrócić kod stanu 400, a niektóre inne błędy mogą skutkować innym kodem stanu. Moje podejście było następujące: public async Task<string> VerifyAccountAsync (string email, string password) { // zapobieganie wartościom zerowym email = email ?? ""; hasło = hasło ?? ""; var queryString = String.Format ("/VerifyAccount?email={0}&password={1}", e-mail, hasło); var request = WebRequest.Create (_accountUrlString + queryString); wynik ciągu = null; try { using (var response = await request.GetResponseAsync()) { using (var stream = response.GetResponseStream()) { using (var reader = new StreamReader (stream)) { wynik = reader.ReadToEnd (); } } } } catch (WebException ex) { // wyjątek protokołu oznacza, że otrzymaliśmy odpowiedź, ale kod statusu sugeruje, że wystąpił błąd. if (ex.Status == WebExceptionStatus.ProtocolError) { var httpResponse = (HttpWebResponse)ex.Response; switch (httpResponse.StatusCode) { case HttpStatusCode.BadRequest: // 400 wyrzuć nowy DepotServiceException (httpResponse, "Nie można znaleźć użytkownika."); case HttpStatusCode.InternalServerError: // 500 wyrzuć nowy wyjątek DepotServiceException (httpResponse, "Pewny błąd"); domyślnie: // TODO: użyj strumienia odpowiedzi, aby ustawić komunikat o błędzie. wyrzuć nowy DepotServiceException (httpResponse, "Niezdefiniowany błąd..."); } } else { // wystąpił inny wyjątek, po prostu zgłosimy go ponownie (nie powinno być ignorowane) throw ex; } } zwraca wynik; } Moje rozumowanie było następujące: * Ponieważ usługa sieciowa używa pewnych predefiniowanych kodów statusu dla pewnych błędów, powinniśmy użyć typowanego wyjątku (DepotServiceException), aby lepiej wyjaśnić konsumentowi podstawowej biblioteki, co jest źródłem błędu. * Obsługa wyjątków w ten sposób w bibliotece podstawowej zapobiegnie konieczności używania konstrukcji if/else w warstwach wizualnych iPhone/Android. W warstwie wizualnej nie będziemy musieli sprawdzać, jaki był kod statusu, aby wyświetlić odpowiedni komunikat o błędzie. Podejście mojego brata jest następujące: public async Task<DepotServiceResult> RetrieveUrl(string url) { DepotServiceResult serviceResult = new DepotServiceResult(); Żądanie Web = WebRequest.Create(url); spróbuj { using (var odpowiedź = await request.GetResponseAsync()) { var webresponse = (HttpWebResponse) odpowiedź; using (var stream = response.GetResponseStream()) { serviceResult.statuscode = webresponse.StatusCode; using (var streamReader = new StreamReader(stream)) { serviceResult.response = streamReader.ReadToEnd(); } } } } catch (WebException ex) { serviceResult.errorDescription = ex.ToString(); } zwróć wynik usługi; } public async Task<DepotServiceResult> VerifyAccountAsync(string email, string password) { var url = _urlBase + "api/account/VerifyAccount?email={0}&password={1}"; email = WebUtility.HtmlEncode (e-mail); hasło = WebUtility.HtmlEncode (hasło); url = String.Format (url, e-mail, hasło); return await RetrieveUrl(url); } public class DepotServiceResult { public string errorDescription; publiczny kod stanu HttpStatusCode; publiczna odpowiedź tekstowa; } Mój brat preferuje takie podejście, ponieważ nie chce, aby warstwa główna aplikacji obsługiwała błąd. Woli obsłużyć błąd w warstwie interfejsu użytkownika aplikacji. Dlatego dla swojego podejścia wybrał utworzenie obiektu `DepotServiceResult`, który zawiera cały wynik operacji, łącznie z błędami, jeśli wystąpiły. Osobiście uważam, że moje podejście jest najlepsze, chociaż trudno mi wyjaśnić, dlaczego jest to lepsze podejście. Więc jeśli ktoś by się ze mną zgodził, czy mógłbym znaleźć jakieś solidne powody, dlaczego jest to lepsze podejście? Oczywiście mój brat preferuje jego podejście i jeśli jego podejście jest lepsze, na pewno chciałbym usłyszeć dobre uzasadnienie, dlaczego jest lepsze. Jeśli istnieje jeszcze lepsze podejście w porównaniu do naszych preferencji, to też chcielibyśmy to usłyszeć.


title: Pomoc w planowaniu stron internetowych

text: Jest dużo postów na ten temat, ale szukam konkretnej pomocy, wpisałem wiele różnych zapytań do Google, ale większość zwrotów stron wydaje się być zdominowana przez samouczki dla początkujących, planowanie, generatory i wiele innych bzdur powiązane informacje, może to mieć coś wspólnego z faktem, że jestem śmieciem w wyszukiwaniu treści w wyszukiwarkach, ale to nie ma sensu! Mam zamiar rozpocząć przygodę, aby stworzyć całkiem stylowo wyglądającą, bardzo funkcjonalną i elastyczną stronę internetową. Ale nie chcę niczego przegapić. Zdarzyło się to zbyt wiele razy, gdy wpadłem na pomysł, zaplanowałem, zaplanowałem, zaprojektowałem, wdrożyłem, potem zdałem sobie sprawę, że coś przeoczyłem lub coś jest nie tak i musiałem postawić stronę internetową na głowie, aby to zrekompensować . Jestem pewien, że inni ludzie mieli podobne sytuacje. Moje pytanie brzmi: co muszę wziąć pod uwagę przed kodowaniem mojej witryny? Mówię od standardu kodowania, implementacji, aspektu projektowego, abstrakcyjnego punktu widzenia. Obecnie: * zaprojektowałem wygląd strony. * Stworzone scenorysy jak diagramy dla każdej strony, akcji, wydarzenia. * wymyślona treść. * zaprojektował przewodnik po stylu. * zmapowana animacja. * zmodularyzowałem moje funkcje. * uznana publiczność. * rozważna różnorodność (w tym kompatybilność z różnymi przeglądarkami, rozdzielczość ekranu i rozmiar czcionki) * stworzyłem fajny katalog I WRESZCIE... * dołączyłem moje frameworki (reset css, jQuery, obrazy, wordpress, itp.) Czy jest coś jeszcze? Czego nie rozważam? Chciałem tylko upewnić się, że omówiłem każdy aspekt, zanim usiądę (z moim nowym ekspresem do kawy) i będę kodował jak wróżka na cracku. Jeśli ktoś natknął się na wartościowe artykuły... Podziel się. Ale proszę, żadnych artykułów dla początkujących „jak zrobić stronę internetową”. Czysto w kontekście pytania. Preferowane są osobiste preferencje i odpowiedzi! Jakie kroki w zakresie planowania/projektowania podejmujesz przed rozpoczęciem misji na stronie internetowej z potworami? Dziękuję za przeczytanie tego długiego ~~DUP~~ nudnego pytania Alex


title: Czy istnieją ramy oparte na .NET do pracy z językiem angielskim?

text: Piszę aplikację internetową, w której muszę analizować słowa (teraz tylko po angielsku, ale może w przyszłości w dowolnym języku). Próbowałem napisać framework do wykonania tej pracy, ale szybko okazało się, że jest to coś naprawdę trudnego. Znajdowanie pni, rozumienie części mowy, znajdowanie spółgłosek, określanie wzorców morfologicznych itp. Z każdym nowym wymaganiem jest to naprawdę coraz trudniejsze. Czy istnieje jakiś framework (najlepiej kompatybilny z frameworkami .NET lub PHP) do pracy z ludzkimi językami (na przykład angielskim)? Niektóre typowe metody takiego frameworka to: List<Synonym> synonyms = SynonymFinder.FindSynonyms("Pomoc"); Trzon = MorphologyAnalyzer.GetStem("Określanie"); Wymowa wymowy = Fonetyka.Transkrybuj("Mowa");


title: Używasz automatycznych testów bdd-gui-testów, aby aktualizować zrzuty ekranów dokumentacji użytkownika?

text: Czy istnieją programiści, którzy (nad)używają funkcji `CaptureScreenshot()` swoich automatycznych testów interfejsu użytkownika, aby również tworzyć zaktualizowane zrzuty ekranu dla dokumentacji użytkownika? Tło: W trakcie życia aplikacji jej elementy interfejsu użytkownika ciągle się zmieniają. Utrzymanie aktualności dokumentacji użytkownika jest bardzo pracochłonne, zwłaszcza jeśli przykładowe dane na zdjęciach powinny odpowiadać opisowi tekstowemu. Jeśli masz już automatyczne testy bdd-gui, dlaczego nie pozwolić im robić zrzutów ekranu w niektórych punktach? Obecnie gram z aplikacjami internetowymi w dotnet+specflow+selenium, ale ten temat dotyczy również innych silników bdd (JRuby-Cucumber, mspec, rspec, ...) i gui-test-Frameworks (WaitN, WaitR, MsWhite, . ...) Wszelkie doświadczenia, przemyślenia lub linki do tego tematu byłyby pomocne. Jaka jest relacja kosztów do korzyści? Czy warto się postarać? Jakie są wady? Zobacz też: Czy praktyczne jest pisanie specyfikacji dokumentujących system z mocą wsteczną za pomocą automatycznych testów akceptacyjnych?


title: Naukowa ocena metodologii programowania

text: Obecnie istnieje wiele różnych metodologii programowania: Scrum, Extreme Programming, Kanban, żeby wymienić tylko kilka. Większość z nich łączy kilka bardziej podstawowych technik (na przykład częste iteracje). Jednak prawie wszyscy twierdzą, że ich połączenie technik jest jedynym sposobem na napisanie dobrego oprogramowania. Nie sądzę, że istnieje jeden najlepszy sposób dla każdego projektu. Zamiast tego interesują mnie niezależne oceny naukowe. * Jakie podstawowe techniki najlepiej sprawdzają się w przypadku danego projektu? * Czy jest jakaś korzyść z połączenia pewnych technik? Ponieważ nie mam czasu na przeglądanie literatury podstawowej, szczególnie szukam książki. Wiem, że jest Peopleware, ale jest trochę stary. Istnieje już kilka powiązanych pytań (Czy są jakieś naukowo rygorystyczne badania zasad stylu kodowania?, Naukowe dowody na poparcie używania długich nazw zmiennych zamiast skrótów?...)


title: Efektywna metoda kalkulacji podsumowania czy podejście?

text: Mam hierarchię obiektów z wieloma węzłami liści, które przyczynią się do sumarycznych wartości dla obiektu nadrzędnego (w szczególności: koszt projektu i materiał kwadratowy). Jaki jest najskuteczniejszy sposób podsumowania tych wartości podczas projektowania projektu? ### Dodatkowe szczegóły Parent ListOne NodeA NodeA.1 NodeA.2 ... NodeB NodeB.1 NodeB.2 ... ListTwo ... * W danym momencie będzie zaznaczony tylko jeden węzeł-liść z kropką-#, więc będzie być Węzłem A.1 LUB Węzłem A.2, ale nie oba wybrane. * To, czy wybrano NodeA i NodeB, jest od siebie niezależne. Mogę więc mieć dowolną kombinację wybranych / aktywnych węzłów A -> Z Jednym podejściem jest po prostu iteracja po każdej liście, każdym węźle i każdym węźle liścia i sumowanie wartości tylko wtedy, gdy węzeł liścia jest zaznaczony. Innym podejściem byłoby utworzenie procedury obsługi zdarzeń dla zmiennych projektu nadrzędnego, z którą każdy element potomny może następnie skorzystać, gdy zmienią się jego wartości. W tym przypadku zmarszczka polega na tym, że będę miał wartości specyficzne dla węzła, które również będę chciał śledzić. Innymi słowy, śledzę koszt projektu, koszt listy i koszt węzła. Innym podejściem byłaby hierarchia programów obsługi zdarzeń, które są uruchamiane, gdy zmienia się wybrany element, a następnie powiadamiają rodzica o zmianie. Tak więc zmiana w węźle liścia w końcu powróci kaskadowo do projektu po wyzwoleniu kilku zdarzeń. W tej chwili ogólna struktura projektu jest dość mała - tylko trzy lub cztery listy, każda z około sześcioma węzłami, z których każdy ma od czterech do sześciu węzłów liścia. Ze względu na mniejszy rozmiar nie martwię się tak bardzo o czas obliczeń, jak o utrzymanie go i możliwość jego rozszerzenia w przyszłości, ponieważ dodawanych jest więcej list, węzłów itp. _Edytuj:_ Projekt kierujący tym pytaniem jest napisany w języku C# i faktycznie ma jeszcze jedną warstwę między listą a końcowymi węzłami liścia. Myślę, że pytanie dotyczy programistów C++ i Java, ponieważ dotyczy odpowiedzialności między dziećmi a obiektami rodzica, gdy wartość rodzica zależy od jego dzieci i wnuków. Odpowiedź dostosowana do C# byłaby sosem, ale w tym przypadku szukam najbardziej niezawodnego / łatwego w utrzymaniu podejścia.


title: Czy CodeFirst jest przeznaczony do zastosowań na dużą skalę?

text: Czytałem na Entity Framework, w szczególności EF 4.1 i podążam za tym linkiem ( http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-developer-with-entity- framework-4.aspx) i przewodnik po Code First. Uważam, że jest to zgrabne, ale zastanawiałem się, czy Code First ma być tylko rozwiązaniem do szybkiego programowania, w którym można po prostu wskoczyć bez większego planowania, czy jest faktycznie przeznaczony do użycia w aplikacjach na dużą skalę?


title: Jak wyglądałby ogólny projekt konwertera klasy XSD na C#?

text: Szukam tworzenia prostego generatora kodu do konwersji definicji XSD do klas C#. Jest to częściowo ćwiczenie do nauki, ale chciałbym też w końcu uzyskać z niego jakiś praktyczny użytek. Jak wyglądałby ogólny projekt takiej aplikacji? Zakładam, że będę musiał użyć jednego z parserów XML w ramach .NET, ale którego? A jak będzie wyglądać wynikowa struktura danych? Czy będzie to drzewo wyrażeń? Co się dzieje stamtąd? Czy generuję kod przez łączenie ciągów, czy są lepsze, bardziej wyrafinowane sposoby na zrobienie tego? **Ważne:** Nie szukam osoby, która napisze dla mnie kod (chociaż bardzo krótkie próbki kodu są mile widziane, jeśli mają zastosowanie) i nie potrzebuję kogoś, kto wykonałby dla mnie badania. Sam doskonale umiem czytać o parserach, drzewach wyrażeń i generatorach kodu. Potrzebuję tylko kogoś, kto pomoże mi z szerokimi pociągnięciami pędzla, żebym nie wchodził w zbyt wiele ślepych uliczek. Jestem również świadomy projektów open source, takich jak XSD2Code, ale wolę najpierw spróbować sam, ze względu na naukę, a także dlatego, że wynikowe narzędzie może być wysoce specyficzne dla mojego konkretnego scenariusza.


title: Oczekiwany wskaźnik ukończenia sprintu i obciążenie w scrumie?

text: Ostatnio w pracy położono większy nacisk na tempo ukończenia i obciążenie programistów w naszych sprintach. Z **współczynnikiem ukończenia** mam na myśli, jeśli planujemy 20 historyjek użytkownika na sprint, jaki procent tych historyjek użytkownika jest zamykanych na koniec sprintu. A w przypadku **load** mam na myśli, że jeśli mamy sprint z 3 programistami po 60 godzin każdy, czyli 180 godzin na sprint, ile godzin warto zaplanować na sprint. Więc jestem naprawdę zainteresowany doświadczeniem innych, myślę, że jest to coś, z czym ma do czynienia każdy pracujący ze scrumem. Moje pytanie brzmi, jaki wskaźnik ukończenia i obciążenie jest oczekiwany/zwykły i jak twój zespół radzi sobie z tymi parametrami?


title: Jak wzbogacić prostą aplikację SOAP z dwoma punktami końcowymi do poziomu przedsiębiorstwa?

text: Wyobraź sobie, że masz wymianę danych między dwoma punktami końcowymi (serwisami internetowymi lub wywołajmy adres URL). Dane mogą podróżować w dowolny sposób (Xml, Json, GET, POST) to nie ma znaczenia. Mam kod źródłowy pierwszego punktu końcowego (narysowałem go po lewej). Drugi jest od strony trzeciej i oddzwoni do mojej infrastruktury na trzecim punkcie końcowym (który również jest częścią mojej infrastruktury). ![tutaj podaj opis obrazka](http://i.stack.imgur.com/nZI3k.png) Chciałbym zaimplementować sesję/stan, aby powiązać pierwsze wywołanie z wywołaniem zwrotnym. Chciałbym też dodać rozproszone logowanie, obsługę rozwiązywania problemów w środowisku produkcyjnym, konfigurację, monitorowanie wydajności, dashboard i tak dalej. **Jaką uwagę powinienem wziąć w obliczu projektu tego rodzaju architektury?** Pozwólcie, że wyjaśnię za pomocą przykładu (który odpowiada na komentarz @SparKotॐ) Powinienem **zarejestrować** pierwszą rozmowę i zrozumieć, czy trzecia strona oddzwania, czy nie. Mogę to zrobić tylko wtedy, gdy moja klasa dzwoniącego „strony trzeciej” (białe pole wyżej po lewej) i klasa wywoływana od „strony trzeciej” (białe pole poniżej po lewej) współdzielą część infrastruktury rejestrowania. Jak byś to zaimplementował? Możliwościami są: * Udostępnij bazę danych * Udostępnij kolejkę wiadomości * Udostępnij usługę WCF * Udostępnij trochę pamięci podręcznej AppFabric * Co jeszcze? * Rurociąg? Co byś rozważył w związku z tą usługą śledzenia? Czy obie moje zajęcia powinny być hostowane na tym samym serwerze? Jakie pytanie skłoniłoby Cię do zaprojektowania architektury, która przekształca dwa proste żądania WebClient.Open w coś, co jest bardziej identyfikowalne i odporne na błędy?


title: Konwencja kodowania: pliki nagłówkowe/interfejsowe C++

text: Czytam plik PDF na temat programowania w C++ z tej strony w witrynie Stanforda. Mówi, że kiedy tworzysz plik nagłówkowy C++ dla interfejsu biblioteki, użyj polecenia preprocesora `#ifndef`, aby upewnić się, że nie kompilujesz dwa razy tego samego interfejsu. Twój nagłówek będzie więc wyglądał mniej więcej tak: /** MyFile.h */ #ifndef _MyFile_h #define _MyFile_h // Prototypy funkcji #endif Ale zawsze słyszałem, jak ludzie mówią, że używanie poleceń preprocesora takich jak `#define` jest ( lub szybko prowadzi do) złej praktyki kodowania. Dopiero zaczynam się uczyć C++, więc nie chcę mieć czegoś zakorzenionego, co jest złe. **Pytanie: Czy używanie poleceń preprocesora jak powyżej jest „właściwym” stylem kodowania?**


title: W jakich przypadkach Robolectric jest odpowiednim rozwiązaniem?

text: Jak możesz teraz, Robolectric jest frameworkiem, który dostarcza skróty dla obiektów Androida, aby umożliwić uruchamianie testów poza środowiskiem Dalvik. Obawiam się, że w ten sposób można sfałszować bibliotekę innej firmy, co moim zdaniem nie jest dobrą praktyką (zamiast tego należy ją hermetyzować). Jeśli zrobisz założenia dotyczące interfejsu, którego nie jesteś właścicielem, który zostanie zmieniony po napisaniu testu, nie zawsze zostaniesz zauważony o modyfikacjach. Może to prowadzić do nieporozumień między Twoimi implementacjami a interfejsem, od którego zależą. Ponadto Android używa głównie dziedziczenia po interfejsach, co ogranicza testowanie kontraktów. Oto moje pytanie: czy są sytuacje, w których Robolectric jest drogą do zrobienia? Oto kilka linków, które możesz sprawdzić w celu uzyskania dalszych informacji: test-doubles-with-mockito-krótki-testy-kontraktu


title: Egzekwowanie ograniczeń na dokumentach danych w różnych formatach

text: Wydaje się, że jest to problem, który musiał być elegancko rozwiązany dawno temu, ale nie mam najmniejszego pojęcia, jak go wygooglować i znaleźć. Załóżmy, że utrzymujesz duży starszy system, który ma duży zbiór danych (dziesiątki GB) w różnych formatach, w tym XML i dwa różne formaty konfiguracji wewnętrznej. Załóżmy dalej, że istnieją abstrakcyjne reguły rządzące wartościami, które te pliki mogą zawierać lub nie. PRZYKŁAD: Plik A definiuje surowe, matematyczne dane odnoszące się do aerodynamiki samochodu do zużycia składnika fizycznego systemu. Plik B zawiera pewne wartości z Pliku A w łatwo dostępnej hierarchii XML do wykorzystania przez inny komponent systemu. Istnieje zatem abstrakcyjna reguła (lub ograniczenie) takie, że wartości z Pliku B _muszą_ odpowiadać wartościom z Pliku A. Jest to prawdopodobnie najprostsze ograniczenie, jakie można określić, ale w praktyce ograniczenia między plikami mogą stać się bardzo skomplikowane rzeczywiście. Jaka jest najlepsza metoda zarządzania tymi ograniczeniami między plikami o dowolnych formatach, poza migracją ich do RDBMS (co po prostu nie jest możliwe w przewidywalnej przyszłości)? Czy ten problem został już rozwiązany? Mówiąc bardziej konkretnie, spodziewałbym się, że rozwiązanie będzie przynajmniej generować powiadomienia o naruszonych ograniczeniach; rozwiązanie nie musi _rozwiązywać_ ograniczeń. ============================== Przykładowe struktury plików Plik A (JeepWrangler2011.emv): MODEL JeepWrangler2011 { EsotericMathValueX 11.1 EsotericMathValueY 22.2 EsotericMathValueZ 33.3 } Plik B (JeepWrangler2011.xml): <model name="JeepWrangler2011"> <!--Te wartości muszą odpowiadać wartościom EsotericMathValues w pliku A--> <modelExtent x="11.1" y="22.2" z="33.3"/> [...] </model> EDIT: Zastanawiając się nad tym problemem, wydaje mi się, że rozwiązanie programowe wymagałoby czegoś takiego: 1. Opracuj abstrakcyjny język do opisu struktury dowolnych formatów. 2. Opracować abstrakcyjny język do opisywania ograniczeń między plikami. 3. Opracuj narzędzie, które wykorzystuje opisy formatów-struktury (pozycja 1), deklaracje ograniczeń (pozycja 2) oraz plik, który mapuje różne pliki (wskazywane przez ścieżki plików) na deklarację formatu-struktury i tworzy listę naruszonych ograniczeń. To fascynujący, nietrywialny problem.


title: Ruby on rails nie jest popularny w dużych międzynarodowych firmach IT?

text: Czy ROR jest używany tylko w startupach, czy też w większych firmach? Jakie powinny być powody, dla których preferują Javę nad ROR?


title: Czy możesz użyć Pi jako prymitywnego generatora liczb losowych?

text: Ostatnio widziałem to pytanie na math.SE. To dało mi do myślenia. Czy Pi można wykorzystać jako prymitywny generator liczb losowych? Mam na myśli to, że wyniki są dobrze znane (jak długo obliczano pi?), ale Pi wydaje się być dość losowe, gdy bierze się 1 cyfrę na raz. Czy to w ogóle ma sens?


title: Czy programista często nie zna różnicy między C i C++?

text: Podczas wywiadu zapytano mnie, czy znam różnicę między C a C++. Zastanawiałem się, dlaczego zadaje się takie pytanie?


title: Skąd pochodzi „mm” w GTKmm, glibmm itp.?

text: Rozumiem, że sufiks „mm” [w różnych bibliotekach C++ powiązanych z GTK] _oznacza_ „minus minus”, ale skąd dokładnie pochodzi? Rozumiem, że istnieje _język programowania_ o nazwie „C--”, ale gdyby istniały powiązania (i jestem pewien, że niektóre widziałem), byłyby one dodawane „--”. TL;DR: **Czy jest jakaś strona ongnu.org, która wyjaśnia sufiks „mm” w różnych wiązaniach C++, czy jest to tylko standard _de facto_ przyjęty przez społeczność open source bez uzasadnienia?**


title: Migracja z VSS do TFS. Jaka jest korzyść z tworzenia osobnych projektów?

text: Mamy instalację Visual SourceSafe, nad którą współpracuje 4 programistów. Wewnątrz znajduje się około 30 niezależnych projektów w różnych folderach najwyższego poziomu. Czy konieczne jest, abyśmy stworzyli nowy „projekt” TFS dla każdego z tych 30 elementów, czy możemy po prostu umieścić je w tym samym nadrzędnym folderze projektu… ewentualnie przypisując każdemu z nich uprawnienia? Powodem, dla którego pytam, jest to, że teraz prezentuję migrację, a migracja i utworzenie „Nowego projektu zespołowego” w programie Visual Studio zajmuje dużo czasu, aby utworzyć korelację 1:1. Jakie inne korzyści mogę uzyskać z używania oddzielnych projektów w TFS?


Jakie są różnice między pętlą while a pętlą for? Wydaje mi się, że są takie same.


title: Najlepsze praktyki dotyczące zwracania obiektu tylko do odczytu

text: Mam pytanie "najlepsze praktyki" dotyczące OOP w C# (ale w pewnym sensie dotyczy wszystkich języków). Rozważ posiadanie klasy bibliotecznej z obiektem, który ma być udostępniony publicznie, powiedzmy za pomocą akcesora właściwości, ale nie chcemy, aby publiczność (osoby korzystające z tej klasy biblioteki) to zmieniała. class A { // Uwaga: Lista to tylko przykład, ogólnie interesują mnie obiekty. private List<string> _items = new List<string>() { "hello" } public List<string> Items { get { // Opcja A (nie tylko do odczytu), może być modyfikowana z zewnątrz: return _items; // Opcja B (rodzaj tylko do odczytu): zwróć nową List<string>( _items ); // Opcja C, należy zmienić typ zwracany na ReadOnlyCollection<string> return new ReadOnlyCollection<string>( _items ); } } } Oczywiście najlepszym podejściem jest "opcja C", ale bardzo niewiele obiektów ma wariant tylko do odczytu (i na pewno nie ma go żadne klasy zdefiniowane przez użytkownika). Gdybyś był użytkownikiem klasy A, czy spodziewałbyś się zmian w List<string> someList = ( new A() ).Items; propagować do oryginalnego (A) obiektu? Czy można zwrócić klona pod warunkiem, że został tak napisany w komentarzach/dokumentacji? Myślę, że takie podejście do klonowania może prowadzić do dość trudnych do wyśledzenia błędów. Pamiętam, że w C++ mogliśmy zwracać const obiekty i można było na nim wywoływać tylko metody oznaczone jako const. Chyba nie ma takiej funkcji/wzoru w C#? Jeśli nie, dlaczego mieliby tego nie uwzględnić? Uważam, że nazywa się to stałą poprawnością. Ale znowu moje główne pytanie dotyczy „czego byś się spodziewał” lub jak poradzić sobie z Opcją A vs B.


title: Jaka jest różnica między makro a skryptem?

text: Czy obydwa nie są po prostu zbiorem instrukcji wykonywanych przez jakiegoś tłumacza? (w przeciwieństwie do pełnoprawnego programu, który działa (jest wykonywany) w jakimś systemie komputerowym?


title: Prędkość nie stabilizuje się w czasie, dlaczego?

text: Sporządziłem wykres wypalenia mojego zespołu i jego prędkość na iterację. Dla mnie wygląda to naprawdę źle (prędkość bardzo się waha). Czego powinienem szukać, aby zdiagnozować podstawową przyczynę tego zachowania? ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/68Duo.png)


title: Reprezentacja danych za pomocą C# i WPF

text: Zajmuję się tworzeniem aplikacji obsługującej części DB. Pobieram dane z DB za pomocą procedur składowanych i przygotowanych instrukcji. Teraz chcę wyświetlić dane w GUI. Jaka jest obecnie wykorzystywana do tego technologia? Czy nadal używa się do tego DataSet i DataTable?


title: Jak nauczyć się wyjaśniać i rozróżniać typy koncepcji wzorców projektowych

text: Co zrobiłem 1. Zidentyfikowałem ważne wzorce do nauczenia 2. Przeczytaj książki 3. Zaimplementowałem wzorce przy użyciu ulubionego języka programowania 4. Zidentyfikowałem zalety/przeciw 5. Przećwiczyłem kilka wzorców projektowych w rzeczywistych projektach 6. Znalazłem przykład w bibliotekach Frameworka zrobione, że nadal mam trudności z 1. Wyjaśnij je doświadczonym ankieterom 2. Wyraźnie rozróżnij wzorce konstrukcyjne i behawioralne. Uważam, że moje umiejętności komunikacyjne nie są takie złe, ale gdzieś nie zrozumiałem jasno pojęć. Jak nauczyć się koncepcji wzorców projektowych, aby stać się zdolnym do tego, za czym teraz tęsknię? (Jeśli to ma znaczenie, mówię o popularnych wzorcach projektowych GOF, takich jak Strategia, Dekorator, Obserwator, Dowództwo itp.)


title: Jak najlepiej podejść do planowania i budżetowania działań związanych z optymalizacją wydajności oprogramowania?

text: Istnieje system oprogramowania, który jest z klientem od jakiegoś czasu. Jeśli to bogata w funkcje, dojrzała, złożona aplikacja korporacyjna, której klient używa w środowisku produkcyjnym. Ze względu na szybki rozwój działalności klienta, system oprogramowania, o którym mowa, nie może efektywnie obsługiwać wolumenów, a ogólna wydajność nie zadowala już klienta. Klient prosi więc dostawcę oprogramowania o poprawę wydajności i wydajności systemu. Klient oczekuje również od dostawcy przygotowania planu i budżetu, więc koszt takiej optymalizacji jest z grubsza znany z góry. Jak myślisz, jakie jest najlepsze podejście do takiego planu i wysokiego budżetu, jaki można by przygotować dla klienta? Zadaję pytanie, bo widziałem już kilka tego typu planów i zazwyczaj są one bardzo niejasne i nieprecyzyjne głównie ze względu na to, że takie ćwiczenie jest rodzajem dylematu kurczaka i jajka. Aby wiedzieć, co dokładnie powinno zostać zoptymalizowane i dostrojone w złożonym systemie, wymagane są benchmarking, profilowanie i badania. I to badanie jest również częścią planowanego projektu, więc nie można z góry wiedzieć, jakie wysiłki mogą wymagać takie wyniki analizy porównawczej, aby wprowadzić ulepszenia.


title: Losowo generuj skierowany wykres na siatce

text: Staram się losowo wygenerować ukierunkowany wykres w celu stworzenia gry logicznej podobnej do łamigłówek po lodzie od Pokemona. To jest zasadniczo to, co chcę losowo generować: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory. Muszę być w stanie ograniczyć rozmiar wykresu w wymiarze x i y. W przykładzie podanym w linku byłoby to ograniczone do siatki 8x4. Problem, z którym się spotykam, to nie losowe generowanie wykresu, ale losowe generowanie wykresu, który mogę poprawnie odwzorować w przestrzeni 2d, ponieważ potrzebuję czegoś (np. skały) po przeciwnej stronie węzła, aby to zrobić wizualnie mają sens, gdy przestajesz się ślizgać. Problem polega na tym, że czasami skała kończy się na ścieżce między dwoma innymi węzłami lub ewentualnie na innym węźle, co powoduje, że cały graf zostaje przerwany. Po omówieniu problemu z kilkoma znajomymi osobami doszliśmy do kilku wniosków, które mogą doprowadzić do rozwiązania. * Uwzględnienie przeszkód w siatce jako części wykresu podczas jego konstruowania. * Zacznij od w pełni wypełnionej siatki i po prostu narysuj losową ścieżkę i usuń bloki, które sprawią, że ta ścieżka będzie działać. Problemem staje się wtedy ustalenie, które z nich usunąć, aby uniknąć wprowadzenia dodatkowej, krótszej ścieżki. Myśleliśmy również, że algorytm programowania dynamicznego może być korzystny, chociaż nikt z nas nie jest zbyt biegły w tworzeniu algorytmów programowania dynamicznego z niczego. Wszelkie pomysły lub odniesienia do tego, jak oficjalnie nazywa się ten problem (jeśli jest to oficjalny problem z wykresem), byłyby najbardziej pomocne. Oto kilka przykładów tego, co osiągnąłem do tej pory, po prostu losowo umieszczając bloki i generując wykres nawigacyjny z wybranego początku / końca. Pomysł (jak opisano w poprzednim linku) jest taki, że zaczynasz od zielonego S i chcesz dostać się do zielonego F. Robisz to, poruszając się w górę/dół/lewo/prawo i kontynuujesz poruszanie się w wybranym kierunku, aż trafisz Ściana. Na tych zdjęciach szary to ściana, biały to podłoga, a fioletowa linia to minimalna długość od początku do końca, a czarne linie i szare kropki reprezentują możliwe ścieżki. Oto kilka złych przykładów losowo generowanych wykresów: http://i.stack.imgur.com/9uaM6.png Oto kilka dobrych przykładów losowo generowanych (lub ręcznie poprawianych) wykresów: i.stack.imgur.com/uUGeL. png (nie mogę opublikować kolejnego linku, przepraszam) Wydawało mi się również, że zauważyłem, że trudniejsze są te, które grają jako puzzle, które mają wiele węzłów wysokiego stopnia wzdłuż minimalnej ścieżki.


title: Strategia budowania aplikacji zastępującej duży arkusz kalkulacyjny

text: Pracuję nad aplikacją, która zastąpi dość duży arkusz kalkulacyjny. Arkusz kalkulacyjny służy do budżetowania zakupów i tym podobnych. Jest to największy arkusz kalkulacyjny, jaki kiedykolwiek widziałem i wymagał wielu ręcznego wprowadzania danych, więc ta aplikacja ma zamiar zautomatyzować wiele z tego. Ale kiedy nad tym pracuję, zauważyłem, że działa powoli. I pomyślałem, że to musi być powszechna rzecz w wielu firmach zaczynających od czegoś takiego jak arkusz kalkulacyjny, a kiedy stają się zbyt duże, aby to utrzymać, otrzymają zbudowaną niestandardową aplikację. Czy istnieje coś takiego (frameworka lub podobnego), które robi tego typu rzeczy, migrując arkusz kalkulacyjny do niestandardowej aplikacji. Miałem szybkie Google, ale tak naprawdę nie widziałem tego, czego szukam. Na ten projekt jest już za późno, ale pomyślałem, że warto będzie go poszukać następnym razem. Jak radzicie sobie z tym problemem?


title: Jak w praktyce może działać Continuous Delivery?

text: Ciągłe dostarczanie brzmi dobrze, ale moje wieloletnie doświadczenie w tworzeniu oprogramowania sugeruje, że w praktyce to nie może działać. (Edycja: Aby było jasne, zawsze mam wiele testów uruchamianych automatycznie. Moje pytanie dotyczy tego, jak uzyskać pewność dostarczenia przy każdym zameldowaniu, co, jak rozumiem, jest pełną formą CD. Alternatywą nie są cykle roczne Są to iteracje co tydzień (które niektórzy mogą nadal uważać za CD, jeśli zostaną wykonane poprawnie), dwa tygodnie lub miesiąc, w tym staromodna kontrola jakości na końcu każdego z nich, uzupełniająca testy automatyczne.) * Pełne pokrycie testami jest niemożliwe. Musisz poświęcić dużo czasu – a czas to pieniądz – na każdą drobiazg. Jest to cenne, ale czas można poświęcić na poprawę jakości w inny sposób. * Niektóre rzeczy są trudne do automatycznego przetestowania. Np. GUI. Nawet Selenium nie powie ci, czy twój GUI jest chwiejny. Dostęp do bazy danych jest trudny do przetestowania bez nieporęcznych urządzeń, a nawet to nie obejmie dziwnych przypadków w przechowywaniu danych. Podobnie bezpieczeństwo i wiele innych rzeczy. Tylko kod warstwy biznesowej jest efektywnie testowany jednostkowo. * Nawet w warstwie biznesowej większość kodu nie zawiera prostych funkcji, których argumenty i zwracane wartości można łatwo wyizolować do celów testowych. Możesz spędzić dużo czasu na tworzeniu makiet obiektów, które mogą nie odpowiadać rzeczywistym implementacjom. * Testy integracyjne/funkcjonalne uzupełniają testy jednostkowe, ale ich wykonanie zajmuje dużo czasu, ponieważ zwykle wiąże się z ponowną inicjalizacją całego systemu przy każdym teście. (Jeśli nie zainicjujesz ponownie, środowisko testowe jest niespójne.) * Refaktoryzacja lub jakiekolwiek inne zmiany przerywają wiele testów. Spędzasz dużo czasu na ich naprawie. Jeśli chodzi o walidację znaczących zmian specyfikacji, to w porządku, ale często testy kończą się niepowodzeniem z powodu bezsensownych szczegółów implementacji niskiego poziomu, a nie rzeczy, które naprawdę dostarczają ważnych informacji. Często poprawki skupiają się na przerobieniu wewnętrznych elementów testu, a nie na prawdziwym sprawdzeniu testowanej funkcjonalności. * Raporty terenowe o błędach nie mogą być łatwo dopasowane do dokładnej mikrowersji kodu.


title: Jakie są niektóre z bardziej przydatnych skrótów klawiaturowych dla programu Visual Studio?

text: Ciągle uczę się nowych skrótów klawiaturowych dla programu Visual Studio i uważam, że niektóre z nich znacznie zwiększają moją produktywność. Zastanawiałem się, jakie skróty klawiaturowe w VS okazały się przydatne i dlaczego. Wiem, że mógłbym gdzieś znaleźć listę skrótów w Internecie, ale nie sądzę, że byłoby to dla mnie tak korzystne, jak pytanie tutaj, ponieważ jest tak wiele skrótów i myślę, że moje oczy po prostu zaszkliłyby się, próbując przeczytać tę listę. Oto kilka, które są dla mnie niezwykle przydatne: **F12** \- Przechodzi do definicji dowolnej klasy lub metody. Zaoszczędziło mi to tyle czasu na przeszukiwaniu plików kodu, gdy go znalazłem. **Ctrl+M, O|L** \- Rozwija/zwija regiony w języku C# lub znaczniki w plikach XAML. Uwielbiam tę funkcję w plikach XAML, ponieważ nie mogę w nich używać regionów, aby mój kod był łatwiejszy do odczytania **Ctrl+R, E** \- Tworzy dla mnie metody Get/Set właściwości. To, w połączeniu z kilkoma makrami, sprawia, że budowanie metod akcesorów jest o wiele mniej bolesne **Ctrl+E, D** \- Naprawia białe spacje w plikach kodu Utworzyłem również własny skrót klawiaturowy do CloseAllOpenFiles, ponieważ VS2010 przeniósł przycisk Zamknij na otwarte plików i nie mogę dłużej trzymać myszy w jednym miejscu i klikać spam, aby zamknąć wszystkie otwarte pliki. Dlaczego mieliby myśleć, że to dobry pomysł, aby umieścić przycisk zamykania na każdej karcie i ustawić zakładki o różnych szerokościach....


title: Nazwa wzorca WS, w którym zwracany jest obiekt generyczny?

text: Pytanie dwuczęściowe: 1. Pracuję nad projektem, w którym wszystkie usługi internetowe zwracają ogólny obiekt. Po pomyślnym zakończeniu ten obiekt zawiera dane zwrócone z usługi sieciowej wraz z dodatkowymi informacjami, takimi jak komunikaty o stanie lub kwalifikatory. W przypadku awarii obiekt nie zawiera danych i komunikatów o błędach. Jaka jest nazwa tego wzoru? 2. Kiedy myślę, że coś, nad czym pracuję, jest powszechnym wzorcem i ma nazwę, jakich strategii mogę użyć, aby dowiedzieć się, jak to się nazywa? Często widzę rzeczy, które wyglądają znajomo lub pospolite i podejrzewam, że mają nazwę i są powszechnym wzorem. Jak mogę je znaleźć samodzielnie bez pytania StackExchange?


title: Dane offline, które trzeba będzie później zaimportować

text: Moja istniejąca aplikacja to aplikacja winform .NET 3.0, która komunikuje się z usługą WCF, która z kolei aktualizuje bazę danych MS SQL Server; Mogę wprowadzać zmiany we wszystkich miejscach (klient Windows, WCF, serwer). Zapytałem o możliwość umożliwienia użytkownikom pracy offline i późniejszej synchronizacji ich danych. Mam obawy dotyczące nieaktualnych danych, ponieważ dane nie są ich „własnością”, a inny użytkownik mógł zaktualizować ten sam rekord, gdy byli offline. Używam również NHibernate do mojego ORM. Jakie są Twoje przemyślenia na temat najlepszej implementacji dodawania funkcji synchronizacji?


title: Jak ważne są wzorce projektowe w programowaniu?

text: Jestem studentem uniwersytetu i dopiero zacząłem poznawać wzorce projektowe i mam trudności ze zrozumieniem ich celu. Próbowałem je zbadać, ale wszystkie źródła, które znalazłem, wydają się mówić o nich w sposób akademicki, a nie profesjonalny. Jaki jest ich cel i czy ważne jest, aby się ich nauczyć?


title: Jak obsłużyć przechowywanie danych logowania do różnych projektów i serwerów WWW?

text: Witam iz góry przepraszam, jeśli to pytanie nie pasuje do sekcji programistów w stackexchange. Postaram się wyjaśnić, na czym polega problem, opowiadając historię, z której pochodzi problem. Pracuję w małej firmie (8 osób), w której mamy programistów, administratorów i personel obsługujący codzienne rozmowy. Problemem są loginy. Istnieją różne loginy, na przykład logowanie do serwera WWW. Potem jest logowanie do MySQL, logowanie do aplikacji, które tworzymy i jeszcze bardziej skomplikowane - loginy różnią się od lokalnych wersji rozwojowych i testowych do tych, które są faktycznie wdrożone, co jeszcze bardziej komplikuje sprawę. To, co się dzieje, polega na tym, że nikt nie zna wszystkich loginów i są one albo zapisane gdzieś głęboko w plikach o tajemniczych nazwach, albo niektóre osoby znają je na pamięć. Jeśli ktoś, kto zna login do rzeczy, z którymi musimy pracować, jest nieobecny (powiedzmy na wakacje), proces odzyskiwania loginu staje się ogromnym bałaganem. Teraz zdajemy sobie sprawę, jak straszne to jest i pracujemy nad poprawą naszego zarządzania loginami / projektami. Innym problemem jest to, że nie każdy powinien znać wszystkie loginy. Moje pytanie brzmi: jak (lub jak byś) radził sobie z przechowywaniem danych logowania, takich jak informacje o katalogu głównym serwera WWW, login administratora aplikacji internetowej itp. w taki sposób, aby był on dostępny dla wszystkich w firmie, ale z ograniczonym dostępem (powiedzmy sekretarz nie może uzyskać danych roota, bez obrazy dla sekretarzy)? PS Właśnie spędziłem 3 godziny na uzyskiwaniu danych logowania, aby zmienić prosty błąd ortograficzny w projekcie, co zajęło mi dokładnie 1 sekundę po otrzymaniu informacji. Widząc, że nie mogę sobie pozwolić na utratę nerwów ani czasu z powodu tak pozornie błahych rzeczy, błagam doświadczonych i mądrych facetów o pomoc. Z góry dziękuję :)


title: Biorąc pod uwagę, że C++ '11 został zatwierdzony, czy to zmienia sposób, w jaki początkujący C++ uczy się języka?

text: Chciałem nauczyć się C++ przez jakiś czas i studiowałem programowanie komputerowe AP w liceum (kiedy było to C++, a nie Java). Lubię C i po prostu nie znalazłem czasu na naukę C++ lub po prostu wrócę do C#, gdzie jestem znacznie bardziej produktywny. Moje pytanie brzmi: biorąc pod uwagę, że C++ '11 został zatwierdzony (chociaż wiem, że nie jest w pełni zaimplementowany), czy to zmienia sposób, w jaki powinienem podchodzić do nauki C++? Posiadam C++: The Complete Reference By Herb Schildt, który pochodzi z 1998 roku. Czy nowo zatwierdzony standard sprawia, że uczenie się z takich książek jest mniej ważne niż niektóre z nowszych samouczków/książek, które zawierają elementy ze standardu? Czy jest jakaś korzyść z uczenia się ze starszych książek?


title: Języki dotyczące systemów wbudowanych w sektorze lotniczym i przestrzennym

text: Wiem, że moje pytanie jest bardzo szerokie, ale ogólna odpowiedź byłaby miła. **Chciałbym wiedzieć, jakie są główne języki używane w sektorze lotniczym i przestrzennym.** Wiem, że system operacyjny działający na systemach wbudowanych to **RTOS** (system operacyjny czasu rzeczywistego) i myślę, że te języki muszą być poprawnie sprawdzane różnymi metodami (metody formalne, testy jednostkowe) i musi umożliwiać **pewną weryfikację całego procesu programu**.


title: Czym dokładnie jest szablon administracyjny bootstrap i jak powinien być używany

text: To jest mój drugi projekt ASP.NET MVC 4. Postanowiliśmy, że do tego użyjemy tego szablonu i zostało powiedziane w taki sposób, że czułem się naprawdę głupio, nie wiedząc, jak dokładnie ten szablon nam pomoże i co konkretnie zyskujemy stosując go. Jestem przyzwyczajony do używania HTML/CSS dla interfejsu użytkownika w połączeniu z jQuery. Teraz wygląda na to, że zamiast jQuery użyjemy bootstrapa, który o ile rozumiem jest po prostu kolejną biblioteką JS stworzoną z twittera, więc jeśli o to chodzi, to ta część jest jasna. To, co naprawdę muszę sobie wyjaśnić, to do czego dokładnie służy ten motyw, co oferuje, dlaczego ktoś chciałby użyć takiego motywu? Z tego, co widzę w demo na żywo, może to tylko stos gotowych kontrolek, których można użyć w interfejsie wraz z bootstrap.js i może jestem po prostu zdezorientowany, ponieważ strona jest pokazana jak najwięcej tylko w celach prezentacyjnych . Jeśli to prawda, nadal zastanawiam się, gdzie mogę znaleźć informacje o bieżącym motywie, jakie elementy sterujące oferuje i jakie funkcje otrzymuję, a także jak z niego korzystać. Ale to tylko moje przypuszczenia. To, czego naprawdę potrzebuję, to wyjaśnienie, do czego dokładnie służy ten motyw, jaka jest zaleta korzystania z niego, czy istnieją dobre tutoriale na temat korzystania z takich motywów w kontekście ASP.NET MVC 3+. Również wszelkie dodatkowe informacje na temat tego motywu i ogólnie na temat korzystania z motywów w ASP.NET MVC będą mile widziane.


title: Jak dokładna jest „Logika biznesowa powinna być w usłudze, a nie w modelu”?

text: **Sytuacja** Wcześniej tego wieczoru udzieliłem odpowiedzi na pytanie na StackOverflow. _Pytanie:_ > Edycja istniejącego obiektu powinna odbywać się w warstwie repozytorium czy w > serwisie? >> Na przykład, jeśli mam użytkownika, który ma dług. Chcę zmienić jego dług. > Czy mam to zrobić w UserRepository czy w serwisie np. BuyingService > pobierając obiekt, edytując go i zapisując ? _Moja odpowiedź:_ > Powinieneś zostawić odpowiedzialność za zmutowanie obiektu do tego samego > obiektu i użyć repozytorium do odzyskania tego obiektu. > > Przykładowa sytuacja: class User { private int debt; // dług w centach private string name; // pobiera public void makePayment(int cents){ debt -= centy; } } class UserRepository { public User GetUserByName(string name){ // Pobierz odpowiedniego użytkownika z bazy danych } } _Komentarz, który otrzymałem:_ > Logika biznesowa naprawdę powinna być w usłudze. Nie w modelu. **Co mówi internet?** To sprawiło, że zacząłem szukać, ponieważ nigdy tak naprawdę (świadomie) nie korzystałem z warstwy usług. Zacząłem czytać o wzorcu Service Layer i Unit Of Work, ale do tej pory nie mogę powiedzieć, że jestem przekonany, że warstwa usługowa musi być używana. Weźmy na przykład ten artykuł autorstwa Martina Fowlera na temat anemicznego modelu domeny: > Istnieją obiekty, z których wiele jest nazwanych po rzeczownikach w przestrzeni domeny, a te > obiekty są powiązane z bogatymi relacjami i strukturą, które są prawdziwe > modele mają. Połów pojawia się, gdy patrzysz na zachowanie i zdajesz sobie sprawę, że na tych obiektach prawie nie ma żadnego zachowania, co sprawia, że są one niewiele więcej niż workami zbieraczy i seterów. Rzeczywiście często modele te są dostarczane z regułami projektowania, które mówią, że nie należy umieszczać żadnej logiki domeny w obiektach domeny. Zamiast tego istnieje zestaw obiektów usług, które przechwytują > całą logikę domeny. Te usługi działają na szczycie modelu domeny i używają > modelu domeny dla danych. > > (...) Logika, która powinna znajdować się w obiekcie domeny to logika domeny -> walidacje, obliczenia, reguły biznesowe - jakkolwiek chcesz to nazwać. Wydawało mi się, że dokładnie na tym polega sytuacja: zalecałem manipulację danymi obiektu poprzez wprowadzenie do tej klasy metod, które właśnie to robią. Jednak zdaję sobie sprawę, że powinno to być podane tak czy inaczej i prawdopodobnie ma to więcej wspólnego z tym, jak te metody są wywoływane (przy użyciu repozytorium). Miałem również wrażenie, że w tym artykule (patrz niżej) warstwa usług jest bardziej uważana za fasadę, która deleguje pracę do podstawowego modelu, niż za rzeczywistą warstwę pracochłonną. > Warstwa Aplikacji [jego nazwa dla Warstwy Usług]: Definiuje zadania, które oprogramowanie ma wykonywać i kieruje obiekty domeny ekspresyjnej do rozwiązywania problemów. Zadania, za które odpowiada ta warstwa, są > znaczące dla biznesu lub niezbędne do interakcji z warstwami aplikacji > innych systemów. Ta warstwa jest cienka. Nie zawiera reguł biznesowych ani > wiedzy, a jedynie koordynuje zadania i deleguje pracę do współpracy > obiektów domeny w następnej warstwie niżej. Nie posiada stanu odzwierciedlającego > sytuację biznesową, ale może mieć stan odzwierciedlający > postęp zadania dla użytkownika lub programu. Co jest tutaj wzmocnione: > Interfejsy usług. Usługi uwidaczniają interfejs usługi, do którego wysyłane są wszystkie przychodzące wiadomości >. Możesz myśleć o interfejsie usługi jako fasadzie, która > eksponuje logikę biznesową zaimplementowaną w aplikacji (zazwyczaj logika > w warstwie biznesowej) potencjalnym konsumentom. A tutaj: > Warstwa usługowa powinna być pozbawiona jakiejkolwiek logiki aplikacyjnej czy biznesowej i > powinna skupiać się przede wszystkim na kilku kwestiach. Powinno to owijać połączenia warstwy biznesowej, tłumaczyć domenę na wspólny język, > zrozumiały dla klientów, i obsługiwać medium komunikacyjne między serwerem i > żądającym klientem. Jest to poważny kontrast z innymi zasobami, które mówią o warstwie usług: > Warstwa usług powinna składać się z klas z metodami, które są jednostkami > pracy z akcjami, które należą do tej samej transakcji. Albo druga odpowiedź na pytanie, które już połączyłem: > W pewnym momencie Twoja aplikacja będzie potrzebowała logiki biznesowej. Ponadto możesz chcieć sprawdzić poprawność danych wejściowych, aby upewnić się, że nie jest > żądane coś złego lub niewykonalnego. Ta logika należy do Twojej usługi > warstwy. **"Rozwiązanie"?** Postępując zgodnie z wytycznymi zawartymi w tej odpowiedzi, wymyśliłem następujące podejście, które wykorzystuje warstwę usług: class UserController : Controller { private UserService _userService; public UserController(UserService userService){ _userService = userService; } public ActionResult MakeHimPay(string nazwa użytkownika, int kwota) { _userService.MakeHimPay(nazwa użytkownika, kwota); return RedirectToAction("ShowUserOverview"); } public ActionResult ShowUserOverview() { return View(); } } class UserService { private IUserRepository _userRepository; public UserService(IUserRepository userRepository) { _userRepository = userRepository; } public void Dokonaj płatności(nazwa użytkownika, kwota) { _userRepository.GetUserByName(nazwa użytkownika).makePayment(kwota); } } class UserRepository { public User GetUserByName(string name){ // Pobierz odpowiedniego użytkownika z bazy danych } } class User { private int debt; // dług w centach private string name; // pobiera public void makePayment(int cents){ debt -= centy; } } **Wniosek** W sumie niewiele się tutaj zmieniło: kod z kontrolera został przeniesiony do warstwy usługowej (co jest dobrą rzeczą, więc jest to plus tego podejścia). Jednak nie wygląda na to, żeby miało to coś wspólnego z moją pierwotną odpowiedzią. Zdaję sobie sprawę, że wzorce projektowe są wytycznymi, a nie sztywnymi regułami, które należy wdrażać, kiedy tylko jest to możliwe. Nie znalazłem jednak ostatecznego wyjaśnienia warstwy usługowej i tego, jak należy ją traktować. * Czy jest to sposób na po prostu wyodrębnienie logiki z kontrolera i umieszczenie jej w usłudze? * Czy ma stanowić umowę między kontrolerem a domeną? * Czy powinna istnieć warstwa między domeną a warstwą usług? I na koniec: podążając za oryginalnym komentarzem > Logika biznesowa naprawdę powinna być w usłudze. Nie w modelu. * Czy to jest poprawne? * Jak wprowadzić logikę biznesową do usługi zamiast do modelu?


title: Czy C++ obsługuje podtypowanie?

text: Wiem, że może to być głupie pytanie, ale nie dostałem całkowicie jasnej odpowiedzi w tej sprawie, więc pomyślałem, że umieszczę je tutaj. Czy c++ obsługuje podtypowanie w tym sensie, że w pełni spełnia zasadę Liskova? Rozumiem, jak polimorfizm parametryczny, polimorfizm włączenia (podklasowanie i zastępowanie) działają w c ++, ale nie jestem do końca pewien ani rozumiem, czy podtypowanie istnieje w kontekście C ++. Czy mógłbyś wyjaśnić?


title: Jaki jest wzorzec bezpiecznego interfejsu w C++

text: _Uwaga: poniżej jest kod C++03, ale spodziewamy się przejścia na C++11 w ciągu najbliższych dwóch lat, więc musimy mieć to na uwadze._ Piszę wytyczne (m.in. dla początkujących) na temat jak napisać abstrakcyjny interfejs w C++. Przeczytałem oba artykuły Suttera na ten temat, przeszukałem internet w poszukiwaniu przykładów i odpowiedzi oraz wykonałem kilka testów. ## Ten kod NIE MOŻE SIĘ kompilować! void foo(JakiśInterfejs & a, JakiśInterfejs & b) { JakiśInterfejs c ; // nie może być domyślnie konstruowany SomeInterface d(a); // nie może być kopiowalna a = b ; // nie może być przypisywalny } Wszystkie powyższe zachowania znajdują źródło swojego problemu w _slicing_ : Interfejs abstrakcyjny (lub klasa nie-liści w hierarchii) nie powinien być konstruowalny ani kopiowalny/przypisywalny, NAWET jeśli może być klasa pochodna. ## 0. Rozwiązanie: podstawowa klasa interfejsu VirtuallyDestructible { public : virtual ~VirtuallyDestructible() {} } ; To rozwiązanie jest proste i nieco naiwne: nie spełnia wszystkich naszych ograniczeń: może być skonstruowane domyślnie, skonstruowane jako kopia i przypisane do kopii (nie jestem nawet pewien co do konstruktorów przenoszenia i przypisania, ale mam jeszcze 2 lata na wymyślenie to się). 1. Nie możemy zadeklarować czysto wirtualnego destruktora, ponieważ musimy trzymać go w linii, a niektóre z naszych kompilatorów nie trawią czystych metod wirtualnych z wbudowanym pustym ciałem. 2. Tak, jedynym celem tej klasy jest uczynienie implementatorów praktycznie zniszczalnymi, co jest rzadkim przypadkiem. 3. Nawet gdybyśmy mieli dodatkową metodę virtual pure (co jest w większości przypadków), ta klasa nadal byłaby przypisywalna do kopiowania. Więc nie... ## Pierwsze rozwiązanie: boost::noncopyable class VirtuallyDestructible : boost::noncopyable { public : virtual ~VirtuallyDestructible() {} } ; To rozwiązanie jest najlepsze, ponieważ jest proste, przejrzyste i C++ (bez makr). Problem polega na tym, że nadal nie działa dla tego konkretnego interfejsu **ponieważ VirtuallyConstructible nadal może być skonstruowany domyślnie**. 1. Nie możemy zadeklarować czysto wirtualnego destruktora, ponieważ musimy trzymać go w linii, a niektóre z naszych kompilatorów go nie przetrawią. 2. Tak, jedynym celem tej klasy jest uczynienie implementatorów praktycznie zniszczalnymi, co jest rzadkim przypadkiem. Innym problemem jest **że klasy implementujące niekopiowalny interfejs muszą następnie jawnie zadeklarować/zdefiniować konstruktor kopiujący i operator przypisania, jeśli muszą mieć te metody** (a w naszym kodzie mamy klasy wartości, do których nadal można uzyskać dostęp przez naszego klienta za pośrednictwem interfejsów). Jest to sprzeczne z zasadą zera, do której chcemy się udać: jeśli domyślna implementacja jest w porządku, powinniśmy być w stanie jej użyć. ## Drugie rozwiązanie: zapewnij im ochronę! class MyInterface { public : virtual ~MyInterface() {} protected : // W C++11 te metody byłyby "= default" MyInterface() {} MyInterface(const MyInterface & ) {} MyInterface & operator = (const MyInterface &) { return *to; } } ; **Ten wzorzec jest zgodny z ograniczeniami technicznymi, które mieliśmy** (przynajmniej w kodzie użytkownika): MyInterface nie może być skonstruowany domyślnie, nie może być skonstruowany przez kopię i nie może być przypisany do kopii. Ponadto nie nakłada **żadnych sztucznych ograniczeń na implementację klas** , które mogą swobodnie przestrzegać zasady zera, a nawet deklarować kilka konstruktorów/operatorów jako "= default" w C++11/14 bez problemu. Teraz jest to dość gadatliwe, a alternatywą byłoby użycie makra, coś takiego: class MyInterface { public : virtual ~MyInterface() {} protected : DECLARE_AS_NON_SLICEABLE(MyInterface) ; } ; Chroniony musi pozostać poza makro (ponieważ nie ma zasięgu). Prawidłowo „przestrzeń nazw” (czyli poprzedzona nazwą Twojej firmy lub produktu), makro powinno być nieszkodliwe. Zaletą jest to, że kod jest uwzględniony w jednym źródle, a nie jest kopiowany i wklejany we wszystkich interfejsach. Gdyby konstruktor move-constructor i move-assignment zostały wyraźnie wyłączone w ten sam sposób w przyszłości, byłaby to bardzo lekka zmiana w kodzie. ## Wniosek * Czy mam paranoję, że chcę, aby kod był chroniony przed cięciem w interfejsach? (Myślę, że nie, ale nigdy nie wiadomo...) * Jakie jest najlepsze rozwiązanie spośród powyższych? * Czy jest inne, lepsze rozwiązanie? _Pamiętaj, że jest to wzorzec, który będzie służył jako wskazówka dla początkujących (m.in.), więc rozwiązanie typu: „Każdy przypadek powinien mieć swoją implementację” nie jest realnym rozwiązaniem._ ## Bounty i wyniki Przyznałem nagrodę coredump ze względu na czas poświęcony na udzielenie odpowiedzi na pytania oraz trafność odpowiedzi. Moje rozwiązanie problemu prawdopodobnie pójdzie do czegoś takiego: class MyInterface { DECLARE_CLASS_AS_INTERFACE(MyInterface) ; public : // metody wirtualne } ; ... z następującym makrem: #define DECLARE_CLASS_AS_INTERFACE(NazwaKlasy) \ public : \ virtual ~NazwaKlasy() {} \ protected : \ClassName() {} \ClassName(const NazwaKlasy & ) {} \ClassName & operator = (const ClassName & ) { return *this ; } \ private : Jest to realne rozwiązanie mojego problemu z następujących powodów: * Nie można utworzyć instancji tej klasy (konstruktory są chronione) * Ta klasa może zostać praktycznie zniszczona * Ta klasa może być dziedziczona bez nakładania zbędnych ograniczeń na dziedziczenie klas ( np. klasa dziedzicząca może być domyślnie kopiowalna) * Użycie makra oznacza, że „deklaracja” interfejsu jest łatwo rozpoznawalna (i przeszukiwalna), a jej kod jest rozłożony w jednym miejscu, co ułatwia jego modyfikację (odpowiednio poprzedzona nazwa usunie niepożądane kolizje nazw) Zauważ, że inne odpowiedzi dały cenny wgląd. Dziękuję wszystkim, którzy spróbowali. Zauważ, że myślę, że nadal mogę wystawić kolejną nagrodę za to pytanie i cenię oświecające odpowiedzi na tyle, że gdybym je zobaczył, otworzyłbym nagrodę tylko po to, aby przypisać ją do tej odpowiedzi.


title: Obsługa bardzo dużych liczb w języku, który nie potrafi?

text: Próbuję pomyśleć o tym, jak wykonałbym obliczenia na bardzo dużych liczbach (do nieskończoności - liczby całkowite bez elementów zmiennoprzecinkowych), jeśli konstrukcja języka nie jest w stanie obsłużyć liczb większych niż określona wartość. Jestem pewien, że nie jestem pierwszym ani ostatnim, który zadaję to pytanie, ale wyszukiwane hasła, których używam, nie dają mi algorytmu do obsługi takich sytuacji. Raczej większość sugestii oferuje zmianę języka lub zmianę zmiennych albo mówi o rzeczach, które wydają się nieistotne dla moich poszukiwań. Więc potrzebuję trochę wskazówek. Naszkicowałbym taki algorytm: 1. Określ maksymalną długość zmiennej całkowitej dla języka. 2. Jeśli liczba jest większa niż połowa długości maksymalnej długości zmiennej, podziel ją na tablicę. (daj trochę miejsca do zabawy) 3. Kolejność tablicy [0] = liczby najbardziej na prawo [n-max] = liczby najbardziej na lewo Np. Num: 29392023 Array[0]:23, Array[1]: 20, array[2]: 39, array[3]:29 Ponieważ ustaliłem połowę długości zmiennej jako punkt odcięcia, mogę obliczyć jedynki , dziesiąte, setne itd. Umieszczaj przez znak połowy tak, aby jeśli zmienna maksymalna długość wynosiła 10 cyfr od 0 do 9999999999, to wiem, że dzieląc ją o połowę do pięciu cyfr, daj mi trochę miejsca do zabawy. Więc jeśli dodam lub pomnożę, mogę mieć funkcję sprawdzania zmiennych, która widzi, że szósta cyfra (od prawej) tablicy array[0] jest w tym samym miejscu, co pierwsza cyfra (od prawej) tablicy [1]. Dzielenie i odejmowanie mają swoje własne problemy, o których jeszcze nie pomyślałem. Chciałbym wiedzieć o najlepszych wdrożeniach obsługi większej liczby niż program może.


title: Czy mogę używać pakietów dynamicznych w Delphi, jeśli planuję zbudować aplikację do użytku na wielu platformach?

text: Teraz myślę o architekturze mojego programu. Planuję udostępnić go nie tylko do użytku na komputerach stacjonarnych, ale także na platformach mobilnych. Chcę utworzyć pakiet bpl jako osobny plik. Czyli chcę mieć w wersji Windows kolejne pliki: program.exe + logic.bpl. Może to być przydatne, ponieważ plik logic.bpl może być często modyfikowany, ponieważ jest to bardzo ważna część mojego programu. Poza tym inni programiści (moi znajomi) będą mogli opracować własną logikę i zastąpić plik logic.bpl swoim własnym. A więc kolejne pytania: 1. Czy będę miał problemy z kompilacją programu na Androida, iOS? 2. Jak mogę zbudować program z pakietami dla Windows i bez pakietów dla platform mobilnych przy minimalnych zmianach w kodzie? 3. Czy w przypadku użycia dll zamiast bpl są jakieś zalety/wady programowania międzyplatformowego? PS Angielski nie jest moim językiem ojczystym, przepraszam za możliwe błędy.


title: Używasz kolumny do przechowywania firmy czy oddzielnej bazy danych?

text: Piszę system dla firmy do umieszczania materiałów promocyjnych na stronie, który jest jak niektóre rodzaje CMS. Tak więc potrzebuję bazy danych, która przechowuje ich dane, ale zastanawiam się, jak przechowywać ich dane .... Pierwsze podejście polega na użyciu jednej tabeli do przechowywania danych, ale użyj kolumny, takiej jak „company_code”, aby odróżnić firmę, innym podejściem jest utworzenie oddzielnej bazy danych dla firmy.... (Oczywiście sprawdzi, czy istnieje kod_firmy lub nazwa tabeli firmy, czy nie, jeśli tak, przypisze nowy kod_firmy lub nazwę tabeli firmy przez program.) Tak więc, które podejście jest lepsze? Dziękuję.....


title: Jak udowodnić, że strategia programowania dynamicznego zadziała dla algorytmu?

text: Jak mogę udowodnić, że strategia programowania dynamicznego (dp) dla problemu zadziała, czy nie? W przypadku algorytmów zachłannych możemy udowodnić, pokazując podproblemy wykazujące właściwość matroid. Czy istnieją takie metody dla algorytmów dp?


title: Jak są powiązane RDF i RDFS?

text: Czytałem o technologiach sieci semantycznej, takich jak RDF/RDFS i "ontologia", ale zastanawiałem się, jak są one powiązane? W tej chwili wszystkie terminy wydają się wymienne, albo nie rozumiem tutaj fundamentalnego pojęcia.


title: Czy to ma nazwę? Przeciążenie na sucho?

text: public int foo(int x) { int defaultValue = 0; return foo(x, defaultValue); } public int foo(int x, int y) { return x + y; }


title: Potrzebujesz testować .properties jeden po drugim przy każdej możliwości?

text: Na przykład w pliku .properties znajduje się konfiguracja klucz-wartość. Takich jak `someFeatureEnable=true`. Musi to być wartość typu bool, która będzie parsowana przez framework, w moim przypadku jest to typowa konfiguracja Java Spring. Spring zajmie się konfiguracją i zgłosi wyjątek, gdy użytkownicy ustawią `someFeatureEnable=123`. Moje pytanie brzmi: jeśli w pliku .properties jest wiele właściwości, to czy warto je testować po kolei? To dość kłopotliwe i ma niski priorytet. Plik .properties jest zawsze konfigurowany przez administratorów technicznych. Ograniczone szanse, że zepsują konfigurację. Dziękuję!


title: Jaka licencja open source jest najlepsza przy wydawaniu frameworka lub biblioteki?

text: Zastanawiam się nad udostępnieniem bibliotek i frameworków, które napisałem w Javie innym programistom. Spędziłem dużo czasu na badaniu, jakie licencje open source są dostępne i jakie są różnice między nimi, jednak kilka rad od prawdziwych ludzi konkretnie w tej sprawie byłoby miłych. Zasadniczo chcę czegoś, co jest... łatwe do zrozumienia dla innych programistów ... deweloperzy mogą używać i modyfikować kod według własnego uznania ... zachować moją informację o prawach autorskich w kodzie źródłowym, nawet jeśli kod zostanie zmodyfikowany i /lub redystrybuowane .. Nie ma potrzeby umieszczania mojej informacji o prawach autorskich na produkcie końcowym w żaden sposób, tylko w kodzie źródłowym, jak wspomniano powyżej .. można używać frameworka w rozwiązaniu komercyjnym, bez zmuszania komercyjnego rozwiązania do open source również (na przykład, jeśli Microsoft Windows używałby mojej biblioteki, nie zmusiłoby to Microsoftu do wydania systemu Windows jako open source) .. Nie możesz sprzedawać samych bibliotek ani frameworka (jednak jest w porządku, aby umieścić go we własnym komercyjne rozwiązanie, jak wspomniano powyżej). 2) Którą licencję open source powinienem wybrać i dlaczego? (Zakładam, że kandydaci to MIT, GPL i LGLP) 3) Czy z licencją można rozpowszechniać same pliki binarne (bez kodu źródłowego, aby zminimalizować rozmiar) czy jest to sprzeczne z ideą „open source”?


title: Co powinienem zrobić, aby rozpocząć tworzenie aplikacji dla systemu Windows 8?

text: Zamierzam zająć się tworzeniem aplikacji dla systemu Windows 8 i z tego, co rozumiem, powinienem opanować XAML i C#. Obecnie w Internecie nie ma jeszcze żadnych dobrych samouczków na temat systemu Windows 8, ale istnieje wiele samouczków o WPF, który używa XAML. Więc jaki jest najlepszy punkt wyjścia: nauka WPF? A może jest coś innego, na co powinienem patrzeć?


title: Czy istnieją frameworki internetowe dla początkujących?

text: Zastanawiałem się, czy istnieją jakieś struktury, takie jak Google Web Toolkit do tworzenia aplikacji internetowych? (Aplikacje takie jak Evernote, Spring Pad, Dokumenty Google itp.). Biegle posługuję się Javą, ale bez większego problemu mógłbym nauczyć się nowego języka. Czy istnieje więc jakiś framework, który pozwoli mi pisać aplikacje internetowe bez martwienia się o projektowanie elementów interfejsu użytkownika i komunikację klient-serwer? Słyszałem o jednym... Vaadin. Czy jest to coś, czego szukam? Jeśli tak, czy są jakieś alternatywy? Mam nadzieję, że zrobię aplikację internetową podobną do tej: Gantter. Głównie interfejs użytkownika i płynna użyteczność.


title: DDD z ORM gdzie powinna iść logika biznesowa?

text: W przeszłości korzystałem z narzędzia MDA (architektura oparta na modelu), w którym modelowaliśmy za pomocą UML, a to wygenerowało między innymi podmioty biznesowe (nasz model domeny) i ORM (mapowanie itp.). Wiele kodu biznesowego i usług działających na domenie było częścią modelu, a nasze repozytoria zwracały podmioty biznesowe (więc nie można było przejść na inny ORM (nie chcieliśmy)). Jednak teraz zaczynam projekt i chcę myśleć w kategoriach DDD. Do tej pory wydaje mi się, że umieszczam logikę biznesową w moim modelu domeny i za pośrednictwem repozytoriów pracowałbym z ORM (którym kiedykolwiek wybrałem). Gdybym jednak chciał nadal korzystać z narzędzia MDA dla części ORM aplikacji, stworzony tutaj model byłby bardzo anemiczny (tzn. nie zawierałby żadnej logiki biznesowej). Podobnie, gdybym użył Entity framework (.net) lub NHibernate dla mojego ORM, to też byłby to model anemiczny.? Nie jestem pewien, gdzie umieściłbyś logikę biznesową, gdybym właśnie użył NHibernate. Czy mam rację myśląc w ten sposób, innymi słowy z DDD całą logikę biznesową w domenie i po prostu używam ORM do trwałości za pośrednictwem repozytoriów?


title: Czy istnieje źródło opinii użytkowników na temat komercyjnego oprogramowania dla przedsiębiorstw?

text: Wygląda na to, że wielu moich klientów zostaje wciągniętych w kupowanie nieodpowiedniego oprogramowania dla przedsiębiorstw, a następnie zrzuca je na nas (jako konsultantów) do wdrożenia. Widziałem niektóre z tych sprytnych demonstracji dostawców, w których prezentują mocno dostosowaną aplikację demonstracyjną i przekazują ją jako gotowe rozwiązanie, które robi dokładnie to, czego potrzebujesz, jednocześnie sprytnie ukrywając fakt, że zajęło to tysiące godzin programisty buduj i wygodnie ignoruj błędy operacyjne, które będą cię kosztować fortunę na utrzymaniu, nawet po zapłaceniu za licencje. Znam witryny takie jak Gartner i Real Story Group, które sprzedają ci ekspercką analizę, ale szukam witryny bardziej podobnej do Stack Exchange lub Yelp, gdzie programiści, użytkownicy, administratorzy itp. przekazują szczere opinie na temat jakości oprogramowania komercyjnego i może dać jakiś wgląd w ceny i wartość. Czy coś takiego istnieje?


title: Niebezpieczeństwa dwóch miejsc pracy? Naruszasz politykę firmy?

text: Pracuję dla firmy w pełnym wymiarze godzin, a ja w niepełnym wymiarze godzin. Zacząłem uczyć się Mac OS/Cocoa/Objective-C w pracy, a potem dostałem "Genialny Pomysł", który chciałbym zaprogramować na iPhone'a. Rzeczy z iPhonem idą dobrze, ale zarabiam tam pieniądze, ponieważ stosuję umiejętności, których nauczyłem się w pracy. Co powszechnie uważa się za naruszenie polityki firmy w takich sprawach? Czy istnieje niebezpieczeństwo, że firma uzna „własność” mojej pracy pobocznej? Jeśli odejdę z firmy, czy mogą poprosić mnie o zaprzestanie pracy w mojej firmie pobocznej? Firma i moje rzeczy związane z iPhonem są w zupełnie innych "obszarach", ale nadal jestem zaniepokojony. Co mogę zrobić, aby się upewnić? Czego jeszcze powinienem się wystrzegać? Czy ktoś wpadł już wcześniej na takie złe rzeczy? Dziękuję,


title: Jak mogę ponownie wykorzystać kod generyczny do konsultacji między firmami?

text: Jestem zatrudniony na pełen etat w firmie X i zwróciłem się do firmy Y o wykonanie usług konsultingowych w celu napisania dla nich wbudowanego C. Chociaż znam podstawy konfliktu interesów i wielkie nie-nie, jakim jest udostępnianie zastrzeżonych informacji, wiedzy firmy i zastrzeżonych algorytmów, mam kilka pytań dotyczących podstawowych elementów ogólnych, które muszę ponownie wykorzystać: * Architektura oprogramowania: mam osobiste preferencje warstw aplikacji, warstwy abstrakcji i sterowników sprzętowych. Nie chcę robić czegoś innego i nie jest to własnością firmy. Czy byłoby to problemem, gdyby zostało udostępnione? * Funkcje ogólne: wyszukiwanie tabel, funkcje sinus/cosinus, parsery itp. Sam napisałem cały ten kod. Czy mogę to skopiować i wkleić, czy też muszę przepisać, wstawić losowe spacje, zmienić wcięcia, nazwy zmiennych, rozmiary tabel itp.? * Nazewnictwo funkcji: używam określonej konwencji nazewnictwa, np. MATH_Sin(). Jednak po skompilowaniu do DLL firma X może znaleźć funkcję MATH_Sin() dostępną w DLL firmy Y i założyć, że skopiowałem ich kod. Czy muszę zmienić nazwy wszystkich funkcji, aby ukryć jakiekolwiek podobieństwa? * Wiedza publiczna zamieniona w kod źródłowy: powiedzmy, że znajdujesz algorytm na papierze, który opisuje, jak szukać wzorca w ciągu i zamieniłeś treść papieru w kod źródłowy. Znowu, czy kopiowanie-wklejanie byłoby tutaj również nie-nie? Przepisać zmieniając kilka rzeczy lub całkowicie odrzucić i znaleźć inny sposób na zrobienie tego? W końcu jest to implementacja wiedzy publicznej. Pytałem moich rówieśników i nie mogę uzyskać jednoznacznej odpowiedzi, co robić. Oprogramowanie jest cyfrowe i bardzo identyfikowalne i zawsze można je powiązać z deweloperem. Dziękuję. **Aktualizacja** : Zwróciłem się do mojego przełożonego i HR i zdecydowanie zniechęcili mnie do tego. Twierdzili, że używając tego samego zestawu umiejętności (programowanie wbudowane lub ogólnie programowanie) dla innej firmy, zawsze będzie okazja, aby firma X rzuciła wyzwanie sobie lub firmie Y. Zapytałem wtedy, co NIE byłoby uważane za konflikt interesów i odpowiedzieli "Można zainwestować w restaurację...". Na serio? Firma X to bardzo duża korporacja. Nie ma negocjacji między pracodawcą a firmą, nie ma akceptacji kodu open source / licencjonowanego i wydaje się, że wierzą, że są właścicielami mnie i moich umiejętności. Chociaż zgadzam się z niektórymi ich rozumowaniem, nie zgadzam się, że są właścicielami mojego wykształcenia i będąc dla nich zatrudnionym, nie mogę wykorzystać moich podstawowych umiejętności do innych przedsięwzięć. Dlatego postanowiłem zastosować się do poniższych rad i udostępnić cały mój osobisty kod, który nie należy do firmy ani nie został napisany przy użyciu firmowego sprzętu lub czasu firmowego. Nie będę zarabiać ani podpisywać kontraktów, ale przynajmniej mogę zachować swój osobisty kod i dalej rozwijać swoją karierę poza tym restrykcyjnym środowiskiem. Dzięki za wszystkie odpowiedzi. Mam nadzieję, że służy to jako punkt odniesienia dla innych dążących do tego samego celu.


title: Czy mogę przeprowadzić przegląd kodu, mimo że nie mam doświadczenia?

text: Od 2 lat uczę się Pythona jako języka ojczystego. Do tej pory zrobiłem kilka kursów online (NLP, Projektowanie programu komputerowego itp.) i rozwiązałem kilka zagadek, ale nigdy nie pracowałem z dużymi aplikacjami. Jednak teraz mam okazję popracować w Pythonie nad projektem na mojej uczelni. Jest to aplikacja internetowa wykorzystująca framework Pyramid, obecnie w około 8000 linii. Używają też kilku sztuczek, których nigdy wcześniej nie spotkałem - rzeczy takich jak `__metaklasa__`, mnóstwo rzeczy OO, z którymi nie mam żadnego doświadczenia. Czy wierzysz, że nadal mógłbym wykonywać pożyteczną pracę dla projektu? I co mogłem zrobić, aby udowodnić swoją wartość? **Edytuj:** Deweloperzy projektu są na innej uczelni. Praca dostępna na moim uniwersytecie wydaje się być klasyczną pracą polegającą na przeglądaniu kodu: sprawdź kod pod kątem luk w zabezpieczeniach, stylu, spójności, wydajności itp.


title: Jaka jest odpowiedzialność lub korzyść z Tokenizera?

text: Załóżmy, że mam gramatykę taką jak: obiekt { członkowie } członkowie para para string : wartość wartość numer string string " chars " chars char chars number cyfra cyfra numer Mógłbym przeanalizować następujący przykład: `{ "jeden" : 1234 }` jak rozumiem, powinienem mieć tokeny „object”, „members”, „pair”, „value”, „string” i „chars”. Tokenizacja przykładu powinna dać obiekt ->members ->pair ->"jeden" ->"1234" Parsowanie tokenów powinno dać obiekt ->para ->"jeden" ->1234 Wydaje mi się, że tokenizer jest albo bezużyteczny, albo Nie do końca rozumiem, co ma robić. Jaka jest odpowiedzialność tokenizatora? Jaka jest korzyść z tokenizera nad analizowaniem oryginalnego ciągu?


title: Pominięcie "destruktorów" w C to za daleko posunięte YAGNI?

text: Pracuję nad średnio osadzoną aplikacją w C przy użyciu technik podobnych do OO. Moje „klasy” to moduły .h/.c używające struktur danych i struktur wskaźników funkcji do emulacji enkapsulacji, polimorfizmu i wstrzykiwania zależności. Teraz można by oczekiwać, że funkcja `myModule_create(void)` będzie miała odpowiednik `myModule_destroy(pointer)`. Ale gdy projekt jest osadzony, zasoby, które są realistycznie tworzone, nigdy nie powinny być zwalniane. To znaczy, jeśli mam 4 porty szeregowe UART i tworzę 4 instancje UART z wymaganymi pinami i ustawieniami, nie ma absolutnie żadnego powodu, aby kiedykolwiek chcieć zniszczyć UART #2 w pewnym momencie podczas pracy. Więc zgodnie z zasadą YAGNI (nie będziesz tego potrzebować), czy powinienem pominąć destruktory? Wydaje mi się to niezwykle dziwne, ale nie mogę wymyślić dla nich zastosowania; zasoby są zwalniane po wyłączeniu urządzenia.


title: Czy skorzystałbym na zmianie z PHP na Node.js (w kontekście)

text: Sytuacja: Za chwilę wprowadzimy coś, co jest zasadniczo usługą rejestrowania. Ponieważ jesteśmy raczej zaawansowani w PHP, obecna implementacja go używa. Będziemy mieć około 200 komputerów (większość w tej samej sieci), z których każdy będzie wysyłać za pośrednictwem HTTP POST około 5000 żądań dziennie. Z każdym żądaniem zawierającym około 300 bajtów danych. Odbiorca jest hostowany w Amazon i jest bardzo prostym formularzem PHP z prostą walidacją, która umieszcza wszystko w bazie danych. Niedawno zapoznałem się z Node.js i jestem ciekaw, czy będzie to dobrze pasować do backendu tutaj. Przyznaję, że z łatwością mógłbym coś zbudować, żeby to przetestować. Ale ponieważ nie zrozumiałem w pełni metodologii asynchronicznej, bardzo chciałbym, aby ktoś z doświadczeniem mi to wyjaśnił.


title: Programista-programista, o co byś zapytał?

text: Nie mogę omówić szczegółów, ale pozwól, że zacznę od wstawienia Cię do fikcyjnego scenariusza, który ściśle naśladuje ten, w którym się znajduję. Właśnie zostałeś powołany jako konsultant techniczny, aby pomóc ukończyć aplikację o dość dużym zakresie i rozwiązać problem domena, której nie znasz. Dla zabawy, powiedzmy, że jest to system kontroli lotu dla obcego statku kosmicznego, który rozbił się na Ziemi kilka lat temu. Obecny programista i jego zespół od jakiegoś czasu pracują nad tym obcym FCS, ale nie wywiązali się z zobowiązań umownych ani określonych terminów, a firma, która cię sprowadziła, postanowiła nie przedłużać umowy z obecnym deweloper. Masz tylko kilka dni (może jeden lub dwa telefony warte czasu), aby zająć się swoim mózgiem (programistą) we wszystkim i we wszystkim, co on i jego zespół zrobili do tego momentu w projekcie przed wygaśnięciem umowy. Problem polega na tym, że nie wiesz wystarczająco dużo o wdrażaniu systemów kontroli lotu w obcych statkach kosmicznych, aby naprawdę wiedzieć, o co zapytać. Znasz następujące rzeczy na temat projektu i dewelopera: * Jest dość dobrze udokumentowany, zarówno w kodzie, jak i dokumentacji wiki, eliminując potrzebę wielu pytań technicznych * Programista nie zawsze jest prawdomówny i/lub spiera się o niepowiązane rzeczy, gdy zadawane są proste pytania TAK - na jakie pytania spędzasz cenną małą ilość czasu, aby jak najlepiej wykorzystać tego programistę, kiedy tak naprawdę nie rozumiesz wszystkich tajników systemu, do którego zostałeś zatrudniony z? Poważnie, wszelkie opinie na ten temat byłyby świetne. **EDYTUJ:** Naprawdę doceniam dotychczasowe opinie, pojawiły się dobre sugestie i już rozpocząłem proces formułowania dobrych pytań na podstawie udzielonych rad. Jedną rzeczą, o której zapomniałem wspomnieć, jest to, że w każdej rozmowie telefonicznej są członkowie zespołu z obu stron, więc nie jest możliwe zadawanie pytań, w które wskazywałyby palce. Niestety, ten sugerowany wymóg delikatności z pewnością spowoduje, że niektóre kwestie pozostaną ukryte.


title: Czy nauczanie nastolatków o wirusach programowych jest etyczne?

text: Zgłosiłem się na ochotnika do prowadzenia pozaszkolnego klubu komputerowego w gimnazjum mojego syna. Wirusy komputerowe cieszą się dużym zainteresowaniem. Zastanawiałem się nad pokazaniem im, jak stworzyć prostego wirusa wsadowego, który będzie infekował inne pliki wsadowe w tym samym katalogu. Pokaż również, jak utworzenie pliku wsadowego o tej samej nazwie, ale znajdującego się bliżej ścieżki, może zastąpić inny program. Może również pozwolić na omówienie technik antywirusowych - rozpoznawania wirusów i zachowań podobnych do wirusów. Wspomniałem o tym mojej żonie, a ona pomyślała, że to okropny pomysł. W porównaniu do dawania im naładowanej broni. Nie uważam tego za niebezpieczną, ponieważ ta technika nie byłaby natychmiast zastosowana do żadnych prawdziwych psot w żadnym nowoczesnym systemie operacyjnym. Czy jestem zbyt nonszalancki, czy ona jest zbyt zaniepokojona? To nie jest dla mnie rozstrzygnięcie tego argumentu, po prostu próbuję uzyskać inną opinię. **Aktualizacja** : Nie planuję przenosić się między systemami (a nawet katalogami) ani złośliwego zachowania. I żeby nikt nie pomyślał, że ujawniam jakieś głębokie, mroczne sekrety, oto książka z 1996 roku, którą znalazłem w bibliotece, która zawiera o wiele więcej szczegółów, niż planowałem omówić. Jeśli ktoś jest zmotywowany do złośliwości, znajdzie sposób.


title: Dobra gra z obsługą skryptów

text: Zgłosiłem się na ochotnika do prowadzenia klubu programistycznego w gimnazjum mojego syna. Omówiliśmy wiele zabawnych tematów, w tym pokazując im, jak używać silnika gry do budowania interaktywnych środowisk 3D. Jedną z rzeczy, które chcieliby zobaczyć, jest to, jak używać języków skryptowych do ulepszania i rozszerzania gier. Wiem, że słyszałem, że wiele gier używa Lua jako wbudowanego języka skryptowego i rozmawialiśmy już wcześniej o Lua. Odkryłam, że dzieci lubią oglądać coś zabawnego i krzykliwego i są mniej zainteresowane praktycznymi rzeczami. Oczywiście staram się też wkraść do nauki. Jaką grę można polecić, którą fajnie byłoby rozszerzyć za pomocą skryptów? Nie musi to być skryptowalny Lua, ale byłoby to miłe. Dodatkowe punkty, jeśli gra jest darmowa lub open source, więc dzieci mogą ją pobrać w domu. Wolę Windows, ale Mac też jest w porządku. Gra musi być przyjazna dla nastolatków.


title: Jak sprawić, by kod powiązany z ORM był testowalny?

text: Jak w Test Driven Development mogę sprawić, by kod powiązany z ORM był testowalny? Używam Micro-ORM (PetaPoco) i mam kilka metod, które współdziałają z bazą danych, takie jak: AddCustomer UpdateRecord itp. Chcę wiedzieć, jak napisać test dla tych metod. Przeszukałem YouTube w poszukiwaniu filmów na temat pisania testu dla DAL, ale żadnego nie znalazłem. Chcę wiedzieć, która metoda lub klasa jest testowalna i jak napisać test przed napisaniem samego kodu.


title: Zmaksymalizuj widoczność reklamy dla maksymalnie osób w automatycznym systemie reklamowym

text: Mam N różnych reklam, które chcę wyświetlić jednocześnie M osobom w automatycznym systemie ogłoszeniowym. Niektórzy ludzie nigdy nie zobaczą niektórych reklam, ponieważ sprawdzają tylko określone kryteria w GUI, które są używane jak filtry. Niektóre reklamy nigdy nie będą wyświetlane, jeśli nikt ich nie szuka. Celem jest maksymalizacja widoczności reklamy dla maksymalnie osób poszukujących jednocześnie określonych kryteriów (filtrów). System odświeża reklamę co minutę. Gdy system wybierze moment i użytkowników, którzy zobaczą reklamę, przechowuje wartości w kolejce (baza danych). Szukam rozwiązania, aby uniknąć głodu i impasu. Chodzi mi o to, że wszystkie reklamy odpowiadające kryteriom muszą być wyświetlane, nawet jeśli czas oczekiwania jest długi. Może to być również typowy algorytm planowania odpowiadający mojemu problemowi.


title: Jak to przetestować?

text: Próbowałem najpierw przetestować w Ruby on Rails, używając Test Unit i RSpec. Zastanawiam się, jak najpierw przeprowadzić test w sytuacjach, które są bardziej związane z systemem operacyjnym/systemem plików. **Problem:** Tworzenie pamięci USB z plików MP4. **Wejścia:** 1. Lista nazw plików mp4, par katalogów docelowych. 2. Lista katalogów źródłowych 3. Lista katalogów docelowych **Wyjście:** 1. Pamięć USB ze strukturą katalogów plików mp4. Oto kod, który robi to, czego chcę. Napisane przy użyciu debugowania puts: #!/bin/env ruby # kodowanie: utf-8 require 'fileutils' files = [ [ 'Keynote_ Architecture the Lost Years by Robert Martin.mp4', 'dev' ], [ 'The Oak Beams of New College, Oxford.mp4', 'arch' ], [ '1. How Buildings Learn — Stewart Brand — 1 z 6 — „Flow”.mp4', 'arch/how_buildings_learn' ], [ 'Hexagonal Rails by Matt Wynne.mp4', 'dev' ] ] dirs = [ 'arch', 'arch /how_buildings_learn', 'dev' ] sources = [ '/home/gnoll110/dwhelper', '/home/gnoll110/Downloads', '/home/gnoll110/GNUstep/Downloads', '/home/gnoll110' ] cel = ' /media/Lexar' dirs.each do | reż | if !File.exist?( dest+'/'+dir ) system( 'mkdir '+dest+'/'+dir ) end end end files.each do | plik | rzeczywiste_źródło = fałszywe źródła.each do | źródło | res = Plik.istnieje? źródło+'/'+plik[0] rzeczywiste_źródło = źródło, jeśli odnów koniec, jeśli rzeczywiste_źródło FileUtils.cp(rzeczywiste_źródło+'/'+plik[0], cel+'/'+plik[1] ) koniec koniec. Jakie jest najlepsze podejście? * Pozbądź się istniejącego kodu. W końcu staram się najpierw zrobić test. * Napisz test(y), który wywołuje obiekt Command Pattern. Zależność wstrzykuje tablice danych w konstruktorze. * Następnie wstrzyknij „plik istnieje” i „kopia plikuutils” jako skrót/mocki, aby uzyskać oddzielenie od systemu operacyjnego/systemu plików. * Buduj, potwierdzaj i refaktoruj metodę uruchamiania w ciągu jednego cala jej życia. Wszystkie sugestie i pomysły mile widziane.