title: Rozsądne jest używanie różnych kontroli wersji dla różnych części aplikacji internetowej?

text: Rozważam kilka różnych technik organizowania kodu dla większej aplikacji internetowej. W tej sytuacji na serwerze działa jakieś rozwiązanie firmy Microsoft (prawdopodobnie ASP.NET MVC lub OpenRasta), a klient (JavaScript, CSS itp.) to wykorzysta. Tradycyjnie w aplikacji MVC kontrolery i modele wraz z bazą kodu klienta znajdują się w tym samym projekcie/rozwiązaniu. Nasze obecne rozwiązania wykorzystują TFS do kontroli źródła. Chcę zacząć używać Sass i Compass dla front-endu, który będzie wymagał Rubiego, i chciałbym użyć git do kontroli wersji front-endu i nadal używać TFS dla komponentów serwera. Problem, jaki mam, polega na tym, że aby ktoś mógł uruchomić rozwiązanie, musiałbyś pobrać z obu repozytoriów, a nie jestem pewien, czy jest to rozsądne. Czy spróbowałbyś czegoś takiego? Czy możesz wymyślić lepszy sposób na zorganizowanie projektów tak, aby front-end był oddzielony od back-endu? Jeśli nie wyjaśniłem tego wystarczająco dobrze, z przyjemnością omówię.


title: Rozszerzenie modelu bazy danych ORM w podprojekcie

text: Mam projekt maven, który zawiera niektóre jednostki, które są przechowywane w bazie danych. Celem tego projektu jest zarządzanie danymi osobowymi, użytkownikami, lokalizacjami itp. Ten projekt może działać samodzielnie. Mam też projekt, który zależy od pierwszego, który importuje dane do bazy danych. Ale to coś więcej niż zwykły import, więc wymaga dodatkowych informacji dla tych jednostek. Ta informacja jest potrzebna tylko w przypadku importowania danych, w przeciwnym razie nie jest ustawiona. ## Problem Problem polega na tym, że nie wiem jak „dołączyć” te informacje do encji w pierwszym projekcie bez ich tam zadeklarowania. Nie miałoby sensu deklarować ich tam, ponieważ one tam nie należą, a to po prostu mieszałoby dwie domeny. Połączenie obu projektów w jeden też nie wchodzi w grę, ponieważ oba są już duże i wciąż się rozwijają. ## Podejście do problemu Jednym z podejść, o którym myślałem, jest użycie innej encji, która zawiera wszystkie informacje potrzebne w projekcie importera i skojarzenie jej z oryginalną encją. To prawie by zadziałało, ale stworzyłoby okropny model bazy danych, którego nigdy bym nie stworzył, gdybym nie używał ORM. Zaczynam się zastanawiać, czy w ogóle powinienem używać ORM ze względu na ORM, którego używam (Hibernacja) Musiałem też dokonać kilku zmian w projekcie na gorsze tylko dlatego, że ORM go nie obsługuje (używając wzorca obiektu zerowego lub na przykład zasada segregacji interfejsów).


title: Wzór budowania menu

text: Mam problemy z orientowaniem się w obsłudze menu w stanie aktywnym, gdy nie jest ono używane do routingu. Pochodzę z Drupala, gdzie system menu również obsługuje routing. więc ustawianie stanu aktywnego i stanu active-trail jest obsługiwane przez trasę (która również działa jako system renderowania menu). Teraz wiele frameworków PHP ma klasy Routera, które obsługują routing. To wydaje się być dobrą separacją, ponieważ Menu nie powinno być świadome POST || OPCJE || ... prośby. Ale pisząc frontend, znalazłem się na twardym kodowaniu menu. Lub przechowywanie wszystkiego w DB i przekazywanie tych wartości do widoku. To, co mi się nie podoba w tym podejściu, to to, że tworzysz kopię tego, co już napisałeś w routerze, ale teraz używasz klasy Menu. Przykład: Route::get('/somewhere','routename.somewhere','showStuffController'); Route::post('/somewhere','routename.somewhere','saveStuffController'); Menu::add('etykieta.gdzieś','nazwatrasy.gdzieś'); Rozdzielasz tutaj obawy, więc to miłe. Ale Menu zależy w dużej mierze od trasy, aby ustawić swój stan aktywny. Menu będzie również musiało wiedzieć o hierarchii, aby ustawić aktywny szlak. Więc tak, ustawianie aktywnego szlaku i aktywnych klas statusu jest w rzeczywistości rzeczą widokową. Ale posiadanie if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; } allover Twoje poglądy wydają się głupie. Następnie dodaj wszystkie te irytujące aktywne szlaki, jeśli i to jest prawdziwe wzdęcie. Obsługa tego, zanim widok zostanie wyrenderowany i ustawienie flagi active-trail na true, wydaje się tak brzydkie, jak to robię (pętla foreach zapętlająca się na wszystkich dzieciach, która zapętla się na wszystkich dzieciach, ...) Moje pytanie brzmi: Czy istnieje wzór lub sprytny sposób na uzyskanie tego czystszego, lepszego, ... ? Jak należy poradzić sobie z „problemem” aktywnego szlaku? Myślałem o renderowaniu dziecko -> rodzic. Więc zacznij od najgłębszego poziomu, a potem idź w górę. Ale wtedy dziecko wie o swoim rodzicu, ale rodzic nie wie nic o swoich dzieciach (wydaje się to dziwne).


title: Dlaczego musimy serializować dane za pomocą struktury serializacji, np. awro

text: W tej książce autor używa avro do serializacji danych przed ich przetworzeniem przez świnię. Czego nie rozumiem, to dlaczego musimy to zrobić przy użyciu struktury serializacji, takiej jak avro? Dlaczego po prostu nie użyjemy json jako formatu danych serializacji? W ten sposób możemy po prostu użyć biblioteki serializatora/deserializatora w języku np. `data.json` w clojure.


title: Od Delphi do C# dla opornych

text: Jestem programistą Delphi i C# i otrzymałem zadanie wprowadzenia najbardziej podstawowych pojęć .Net/C# moim współpracownikom na niektórych szkoleniach. Są doświadczonymi programistami Delphi Win32, ale nadal używają dość starej wersji, więc nie są zaznajomieni z niektórymi funkcjami języka, które są dziś powszechne, jak generyki, i nigdy wcześniej nie używali .Net. Teraz zastanawiam się, jak najlepiej sobie z tym poradzić. Jakie są najważniejsze tematy, które powinienem poruszyć? Będę miał na to może 1-2 dni, więc nie mogę zagłębiać się zbyt daleko w szczegóły, ale muszę dać im dobry widok z lotu ptaka, zwłaszcza te, które będą dla nich ważne. Planuję podkreślić różnice w stosunku do Delphi, myślę, że to im pomoże. Chciałbym zbudować małą aplikację Zoo i dodawać do niej coś na każdym kroku, który wyjaśniam. Dzięki temu mogą później przyjrzeć się utworzonym przykładom, kiedy tylko zechcą. Moje dotychczasowe tematy: * Krótkie wprowadzenie .Net, CLI, CLR * Krótkie wprowadzenie Visual Studio * Pokazanie odpowiedników klas/obiektów, dziedziczenie, tworzenie niektórych obiektów Animal->Cat->Tiger, wyjaśnienie po drodze Namespace * Garbage Collection i Interfejsy (bardzo różne od Delphi), Bird dostaje ICanFly * Zdarzenia / Delegaty (krótki przykład multicastu), Ape wywołuje wszystkie inne małpy, ponieważ znalazł kiść bananów lub coś w tym rodzaju * Generics, tworzenie ogólnej listy zwierząt * LINQ, zapytanie o zwierzęta przez kategorie * Biblioteka zadań równoległych, taka sama, ale tym razem wielowątkowa Niektóre tematy, których nie jestem pewien, czy powinienem uwzględnić: * Atrybuty * Przeciążanie operatorów * Metody anonimowe / Lambdy * Typy dopuszczające wartość null * Refleksja * P/Invoke Może to powinno być opóźnione o sekundę sesja, może to za dużo na początek, nie jestem pewien. Jestem również niezdecydowany, czy powinienem uwzględnić nadchodzącą funkcjonalność asynchroniczną w .Net 4.5. Może to jest przedwczesne. Potem będę musiał wprowadzić WPF, ale myślę, że to powinno być pytaniem samym w sobie.


title: Czy każdy programista front-end powinien rozumieć podstawowe aspekty projektowania?

text: Powiedziałbym, że tworzymy oprogramowanie w świecie, w którym prawdopodobnie najważniejszy jest front-end aplikacji. Rosnąca zdolność użytkownika do niemal natychmiastowego dostępu do oprogramowania i interakcji z nim w chmurze sprawia, że pierwsze kilka minut interakcji użytkownika ma kluczowe znaczenie w określaniu, czy aplikacja otrzyma dalszą uwagę, co sprawia, że projektowanie interfejsu użytkownika i „intuicyjność” aplikacji są niezwykle ważne czynniki. Jako programista nigdy tak naprawdę nie doceniałem znaczenia projektowania moich aplikacji. Zwykle piszę kod, który działa, i korzystam z porad grafika lub kierownika projektu, jak poprawić użyteczność / wygląd aplikacji. Ale może nie jest to już sposób na dalszy rozwój. Nie mogę przestać się zastanawiać, ile czasu i zasobów zmarnowano na to, że programista został poinstruowany przez projektanta graficznego, aby przesunął przycisk o 2 piksele w lewo (na przykład), gdy ten programista miał podstawową wiedzę na temat projektowania front-endu oprogramowania, sami byliby w stanie podjąć decyzję. Rozumiem, że duże decyzje projektowe, takie jak ogólny wygląd aplikacji i używane globalne czcionki itp., to wszystkie zadania, które powinien wykonać ktoś z odpowiednią wiedzą na temat takiej dziedziny, ale czy my, jako twórcy frontu - koniec, znasz wystarczająco dużo teorii projektowania, aby móc samodzielnie podejmować mniejsze decyzje projektowe? * Czy wraz z obecnym pakietem programistycznym należy uczyć front-endowego projektowania oprogramowania i niektórych podstaw interakcji z użytkownikiem? * Jaki poziom wiedzy powinien mieć programista w zakresie interakcji z użytkownikiem i projektowania? * Czy rozumienie designu powinno być wyższe niż obecnie w kontekście życiorysów i kwalifikacji? Temat jest dla mnie poniekąd hobby, fascynuje mnie studiowanie interakcji użytkowników z programem, ale czy powinien to być sedno tworzenia oprogramowania? Dla wyjaśnienia, kiedy mówię o "projektowaniu", mam na myśli projektowanie front-end, a nie projektowanie architektury oprogramowania (coś, co każdy programista powinien zrozumieć).


title: Automatycznie utwórz maszynę wirtualną i wyświetl IE

text: Właśnie nabyłem stary Dell Poweredge SC1425 od starego przyjaciela, ten serwer będzie działał jako urządzenie programistyczne dla aplikacji internetowych. Wszystko poszło dobrze, zainstalowałem w systemie następujące pakiety. **Pakiety** 1. Apache2 2. PHP5 (w tym MCrypt i PHP5-JSON) 3. MySQL 4. Serwer i klient SSH 5. Git i Subversion 6. Serwer SFTP 7. VirtualBox 8. Node.JS 9. Python 10. Buildlibs (g++, build essentials, fakeroot, make, checkinstall) 11. WebMin 12. Samba Na serwerze działa Debian 7 64bit z dołączonymi powyżej pakietami, skonfigurowałem kilka maszyn wirtualnych (Windows XP i Windows 7) i co chciałbym do zrobienia jest, gdy użytkownik uruchamia maszynę wirtualną Chcę, aby system operacyjny automatycznie uruchamiał Internet Explorer. Powodem jest to, że mogę testować moje aplikacje internetowe na starszych systemach operacyjnych i przeglądarkach. Po tym, jak użytkownik skończył pracę z pudełkiem lub omyłkowo pozostawił je włączone przez X czasu, chciałbym, aby maszyna wirtualna wyłączyła się automatycznie, a także wyczyściła wszelkie dane dodane podczas tej sesji. Nie jestem pewien, czy można zrobić to, o co proszę, więc pomyślałem, że zapytam.


title: Jak myśleć jak informatyk. Rozdział 3, Pytanie 2

text: http://interactivepython.org/runestone/static/thinkcspy/PythonTurtle/helloturtle.html Utknąłem na pytaniu 3. Podaj trzy atrybuty swojego telefonu komórkowego. Podaj trzy metody swojego telefonu komórkowego. To tylko pytanie wprowadzające. Nie stworzyliśmy klasy telefonów komórkowych, więc nie wiem jeszcze, jak utworzyć instancję obiektu telefonu komórkowego (czy to właściwy język?). Czy ktoś może mi pomóc w tym, czego szukam? Jak znaleźć właściwości i metody obiektu telefonu komórkowego? Czy pytanie dotyczy tylko możliwych przyszłych właściwości mojego telefonu komórkowego? Czy to tylko założenie, że stworzę jakiś kod, który pozwoli mi zmienić właściwości mojego telefonu? Więc wszystko, co muszę zrobić, to wymienić 3 właściwości mojego telefonu komórkowego, takie jak kolor, marka i długość? Czy to to? Aha, a możliwymi metodami byłoby wybieranie numeru komórki, adres przeglądarki internetowej i dodawanie książki adresowej? Czy to to? Jeśli tak, zagłosuj za tym, abym mógł ponownie zadawać pytania w usłudze Stackexchange.


title: Dlaczego tablice nie mogą być przekazywane jako argumenty funkcji w C?

text: Po tym komentarzu próbowałem wygooglować dlaczego, ale moje google-fu nie powiodło się. Komentarz z linku: > [...] Ale ważne jest to, że tablice i wskaźniki są różne > rzeczy w C. > > Zakładając, że nie używasz żadnych rozszerzeń kompilatora, generalnie nie możesz przekazać > samej tablicy do funkcji, ale możesz przekazać wskaźnik i indeksować wskaźnik > tak, jakby był tablicą. > > Skutecznie narzekasz, że wskaźniki nie mają dołączonej długości. Powinieneś > narzekać, że tablice nie mogą być przekazywane jako argumenty funkcji, lub że tablice niejawnie degradują się do wskaźników.


title: Jaka jest typowa wielkość zespołu dla złożonej aplikacji komputerowej C# składającej się z pół miliona wierszy kodu?

text: Wyobraź sobie następujący scenariusz: * Baza kodu składająca się z 600 000 wierszy kodu (C#) * Wszystko w jednej aplikacji komputerowej * Wszystko napisane przez jednego programistę (ja) w ciągu 8 lat (3 lata rzeczywistego czasu kodowania). * Oprogramowanie jest potężne i elastyczne (oczywiście niejasne), dlatego w kodzie jest nieodłączna złożoność, nawet jeśli jest on modułowy i mało zadłużony. * Oprogramowanie znajduje się w niszowej branży sterowania maszynami, więc istnieje bardzo długi wzrost wiedzy o domenie zarówno na temat maszyn, jak i kodu. * Oprogramowanie będzie stawało się coraz bardziej niestandardowe, gdzie indywidualni klienci otrzymają własne dodatki i ulepszenia. Jaka byłaby zalecana wielkość zespołu programistycznego dla pół miliona linii kodu (komputer C#), jak ten powyżej? Co byłoby idealne dla typowej aplikacji desktopowej LOC C# 500 000? To oprogramowanie nie ma pełnego cyklu życia. Jest to „koniec do nieskończoności”, co oznacza, że będzie rosło i stawało się większe, coraz potężniejsze i bardziej złożone. Zwłaszcza, że do zespołu dołącza więcej inżynierów.


title: Czy reflog może zastąpić tagi do księgowości?

text: Moje repozytorium ma gałąź `production` i jest wypełnione niezliczonymi znacznikami formatu `production-20130101-1234`, które wskazują na to, co zostało faktycznie wysłane w określonym dniu i czasie. Myślę, że to rozwiązanie jest nieco niechlujne i nieporęczne i zastanawiam się, czy reflogowie lepiej by tu wpadli. Celem jest **"upewnij się, że zawsze możesz dowiedzieć się, jaka wersja została wdrożona i kiedy dokładnie"**. Tagi wykonują swoją pracę, ale reflogi brzmią jeszcze ładniej, ponieważ: * Są tworzone automatycznie, * Pozwalają na dużą ilość niesamowitych rzeczy, na przykład w postaci `git checkout origin/production@{3 miesiące temu}`. To powiedziawszy, nie wiem zbyt wiele o reflogach i nie jestem pewien możliwych wad takiego podejścia. 1. Zakładam, że `origin/production` ma swój własny reflog, całkowicie niezależny od mojego lokalnego zdalnego śledzenia `production` \- czy to prawda? 2. Wykonanie 3 kolejnych scaleń no-off z gałęzi integracyjnej do mojej lokalnej gałęzi `produkcyjnej` spowoduje utworzenie 3 wpisów w moim lokalnym reflogu, ale przekazanie go do centralnego repozytorium (jako część procedury wdrażania) spowoduje utworzenie 1 nowego wpisu w reflogu "Oracle" `origin/production`, zgadza się? **Chcę zachować niezmienną "1 wdrożenie = 1 rekord".** 3. Jak upewnić się, że reflog `origin/production` nie jest przycinany i nadal dostarcza wszystkich pełnych informacji historycznych? 4. Jakieś wady lub możliwe problemy, o których nie pomyślałem?


title: Programowanie kontraktowe a test jednostkowy

text: Jestem nieco defensywnym programistą i wielkim fanem Microsofts Code Contracts. Teraz nie zawsze mogę używać C#, aw większości języków jedynym narzędziem, które posiadam, są asercje. Więc zazwyczaj kończę z takim kodem: class { function() { checkInvariants(); attach(/* wymaganie */); try { /* implementacja */ } catch(...) { attach(/* wyjątkowa zapewnia */); } wreszcie { attach(/* zapewnia */); checkInvariants(); } } void checkInvariants() { attach(/* niezmienna */); } } Jednak ten paradygmat (czy jakkolwiek by go nazwać) prowadzi do zaśmiecania kodu. Zacząłem się zastanawiać, czy naprawdę jest to warte wysiłku i czy właściwy test jednostkowy już to obejmie?


title: Kompilator niczego nie inline?

text: Zrobiłem własną bibliotekę matematyczną z akceleracją _SIMD_. Jest już całkiem kompletny, więc naturalnie postanowiłem przeprowadzić testy szybkości i zoptymalizować go. Btw to nie jest przedwczesna optymalizacja, biblioteka jest w rzeczywistości kompletna pod względem funkcjonalności, naprawdę potrzebuję, aby była teraz szybka. W każdym razie testuję niektóre metody iloczynów wektorowych z kropkami w porównaniu z metodami Microsoft DirectXMath. Różnica między moimi wektorami a tymi w DirectXMath polega na tym, że w DirectXMath XMVECTOR jest po prostu nagim __m128, podczas gdy mój jest __m128 wewnątrz klasy vector_simd, która jest wyrównana 16 bajtów i z wyrównanym alokatorem. Teraz można by założyć, że przy wszystkich możliwych optymalizacjach włączonych w trybie wydania skompilowaliby się do tego samego. Mam na myśli `int a;` i `int arr[1];` kompilują się do tego samego w trybie wydania, tak jak moja klasa szablonu tablicy ma taką samą wydajność jak surowa tablica i tak dalej... ale ku mojemu zdziwieniu moje metody klasy pojawiały się _2 razy_ wolniej. Próbowałem nawet po prostu wkleić kod SSE z DirectXMath do metody mojej klasy, nadal wyszło to wolniej. Więc jedyną rzeczą, która pozostała, była różnica, że jedna jest klasą, a druga jest surowa. Wydawało się przez chwilę, że obciążenie dostępu do niego jako członka klasy i/lub dodatkowe obciążenie z konstruktora (który jest pusty...). Jednak umieściłem wszystkie definicje moich metod klasy wektorowej w jego nagłówku i mimo to wyszło to 2x wolniej niż DirectXMath. Może obciążenie wynika z tego, że __m128 jest członkiem klasy? Nie rozumiem, dlaczego kompilator nie może tego zoptymalizować, to tak, jakby mieć strukturę z pojedynczą liczbą całkowitą? Czy ktoś inny miał takie problemy? **EDYTUJ:** OK, więc wygląda na to, że moja klasa vector_simd ma 32 bajty, podczas gdy __m128 ma tylko 16 bajtów, co jest dziwne. Kiedy usunąłem 16-bajtowe wyrównanie z mojej klasy, stało się ono również 16 bajtowe. Ale to nie ma sensu, wyrównanie klasy 16-bajtowej do 16 bajtów powinno sprawić, że pozostanie 16 bajtów....


title: Jaki jest najlepszy przepływ pracy Git do pracy z projektem open source ze zmianami specyficznymi dla pracodawcy?

text: U mojego obecnego pracodawcy używamy projektu open-source hostowanego na Github jako komponentu naszej aplikacji. Pracowałem nad tym projektem, aby dodać kilka potrzebnych nam funkcji i zintegrować go z naszymi systemami kompilacji. Mój menedżer i ja zgadzamy się, że chcielibyśmy przesłać tyle naszej pracy nad tym komponentem, ile jest to uzasadnione, z powrotem do projektu open-source. Moje pytanie dotyczy tego, jaki jest najlepszy przepływ pracy/technika utrzymywania moich zatwierdzeń Git w taki sposób, abym mógł łatwo oddzielić rzeczy, które mają sens, aby dodać je z powrotem do projektu open source - poprawki błędów i nowe funkcje, które są wystarczająco ogólne - od rzeczy specyficznych dla naszego projektu, takich jak lokalizacje kompilacji i stałe aplikacji. To, co do tej pory robiłem, to utrzymywanie prywatnej gałęzi Git, w której zatwierdzam wszystkie moje zmiany z odpowiednią szczegółowością. Następnie używam `cherry-pick`, aby dodać zatwierdzenia typu open source do gałęzi master i przesłać je z powrotem do Github. Wygląda na to, że powinienem użyć scalania, aby to zrobić, aby nie tworzyć osobnych zatwierdzeń o identycznej zawartości, ale nie jestem pewien, jak to zrobić, wykluczając zatwierdzenia specyficzne dla firmy i zachowując rozsądny przepływ pracy. Na przykład, przypuszczam, że mógłbym zatwierdzić rzeczy open-source na masterach i rzeczach specyficznych dla firmy w gałęzi prywatnej, a następnie w razie potrzeby scalić master do tej gałęzi, pozostawiając gałąź master wskazującą na zatwierdzenie przed scaleniem, tak abym mógł ponownie przypisz do niego elementy z otwartym kodem źródłowym, a następnie ponownie scal. To, co wydaje się niezręczne w tym przepływie pracy, polega na tym, że musiałbym z góry decydować o wszystkim, co robię, do której gałęzi należy, pracować nad tym, co wydawało się ukończeniem, a następnie zatwierdzić i scalić przed testowaniem. Jedną z rzeczy, które naprawdę lubię w Git, jest łatwość robienia wszystkiego, czego potrzebujesz, aby Twoja aplikacja działała, a później decydowania, jak i gdzie zatwierdzić zmiany. O ile mogę powiedzieć, jeśli jesteś aktualnie na gałęzi i wykonałeś trochę pracy, nie ma łatwego sposobu, aby po prostu przesłać część tej pracy do innej gałęzi, ponieważ przejście do tej gałęzi wymagałoby czystego katalogu roboczego. Czy to, co robię, jest rozsądnym przepływem pracy dla składek długoterminowych? Czy ktoś może polecić inny przepływ pracy, który może być lepszy i dlaczego jest lepszy?


title: Czy początkowa konfiguracja dockerfile nie przekreśla jednego z kluczowych argumentów docker?

text: Jestem bardzo podekscytowany Dockerem, jeśli jesteś programistą w dużym projekcie, który zbyt wiele wycierpiałeś z rąk _maszyny_ środowisk i multiplatform. Jednym z kluczowych punktów sprzedaży Dockera jest to, że wykonując migawkę/zatwierdzanie stanu obrazu, unikasz ryzyka zbudowania środowiska z inną wersją, być może niekompatybilną, danej zależności. Rozumiem, świetnie! Wykonywanie samouczków na pliku dockerfile nie jest dokładnie tą samą koncepcją, co uruchamianie `npm`, `chef` lub `bower`. Oczywiście biblioteki uniksowe byłyby bardziej stabilne niż większość tych znajdujących się w tych sklepach bibliotecznych, o których właśnie wspomniałem, ale czy nie jest to ten sam przepływ pracy, z którym walczy docker? Czy celem nie jest dostosowanie kontenera do swoich potrzeb, a następnie zatwierdzenie jego stanu, a następnie pomnożenie go do woli? Czy brakuje mi czegoś trywialnego, czy tak jest? Czy docker nadal daje Ci szansę na budowanie obrazów z plików skryptów i przez to staje na palcach?


title: DDD, tworzenie agregatu spoza warstwy usług aplikacji

text: Mam usługę (webservice), która służy do uzyskiwania dostępu do logiki domeny. Jedną z metod serwisu internetowego jest createFoo, gdzie Foo jest moim agregatem. Tak więc klasa implementująca metodę webservice wywołuje moją usługę aplikacji zawierającą metodę createFoo odpowiedzialną za wykonanie pewnych czynności i utrwalenie nowej instancji Foo. Ta nowa instancja Foo the jest zwracana przez usługę aplikacji do klasy, która implementuje metodę usługi sieciowej. Na koniec instancja Foo jest konwertowana na coś takiego jak FooWsResponse, a następnie usługa sieciowa zwraca instancję FooWsResponse. W tej chwili wszystko to jest mniej więcej zaimplementowane tak: public class CreateFooService{ private FooService appService; private Converter<Foo, FooWsResponse> konwerter; public FooWsResponse createFoo(CreateFooParams params){ Foo foo = FooFactory.createFoo(params); foo = appService.createFoo(foo); zwróć konwerter.konwerter(foo); } } Problem z powyższym kodem polega na tym, że metoda Application Service jest myląca, ponieważ nie tworzy instancji Foo, pracuje tylko nad logiką domeny związaną z tworzeniem Foo i utrwalaniem instancji. Tak więc rzeczy, które chcę wiedzieć to: 1. Czy tworzenie agregatu poza warstwą usług jest w porządku?. Wiem, że mogę przekazać CreateFooParams jako parametr appService.createFoo, ale nie chcę tego robić, ponieważ moja warstwa usług zostanie połączona z ramą usługi sieci Web. Nie chcę też przekazywać wszystkich właściwości klasy CreateFooParams jako parametrów appService.createFoo, bo skończę na metodzie z 15 parametrami!. Wreszcie, utworzenie instancji Foo przed wywołaniem metody appService.createFoo, ale teraz nazwa metody nie jest dokładna, a także wszyscy klienci mojego appService powinni stworzyć sposób tworzenia instancji Foo, aby przekazać ją jako parametr appService.createFoo, co jest bardzo złe i może prowadzić do wielu problemów. 2. Czy powinienem utworzyć FooDto, które otrzyma wszystkie dane CreateFooParams i przekaże je do metody appService.createFoo?. Wygląda to na lepszą opcję, ale posiadanie 3 różnych klas o prawie tych samych właściwościach wydaje się bardzo zbędne. Chcę wiedzieć, co należy zrobić zgodnie z wytycznymi DDD. Dzięki za pomoc.


title: Czy „zadzwoń i wróć” to wzorzec czy antywzorzec?

text: Wyobraź sobie, że masz ten kod: class Foo: def __init__(self, active): self.active = active def doAction(self): jeśli nie self.active: return # zrób coś f=Foo(false) f.doAction() # nic nie robi To ładny kod; W rzeczywistości mam (nie w Pythonie) globalną aktywną zmienną o nazwie „dosomething” i procedurę o nazwie „coś”, gdzie pierwszą rzeczą, która dzieje się w procedurze „coś”, jest „jeśli nie coś zwraca”. Alternatywna implementacja wywołałaby procedurę, która zawsze wykonuje akcję, a flaga jest sprawdzana w czasie wywołania, jak w poniższym kodzie: class Foo: def doAction(self): # zrób coś doaction = False f=Foo() if doaction: f.doAction() Jaka jest Twoja opinia na ten temat? Osobiście uważam, że pierwsze rozwiązanie narusza zasadę najmniejszego zaskoczenia: wywołujący wywołuje akcję, która nigdy nie jest wykonywana w odpowiedzi na status, który został ustawiony gdzie indziej, ale z kodu wygląda na to, że akcja została wykonana. Czy uważasz to za totalny wzorzec, totalny antywzorzec, czy po prostu opcję bez silnej opinii za lub przeciw?


title: Standardowe pytania ankietowe do oceny satysfakcji z pracy

text: Czy są jakieś standardowe ankiety lub pytania przydatne do oceny zadowolenia z pracy inżyniera oprogramowania lub programisty? Przypuszczam, że określenie nastawienia inżynierów oprogramowania do ich pracy może ujawnić problemy w organizacji. Myślę o pytaniach takich jak: * Czy w pełni wykorzystujesz swój potencjał? * Czy uczysz się lub doskonalisz umiejętności, które mógłbyś umieścić w CV? * Czy Twoje umiejętności są cenione w firmie? * Czy wykorzystujesz swoje umiejętności? * Czy Twój głos jest słyszalny? * Czy masz mentora? * Czy jesteś zadowolony z przywództwa swojego przełożonego? * Czy potrafisz eksperymentować i próbować nowych pomysłów? Oczywiście pytania musiałyby zostać zmodyfikowane, aby uzyskać przydatne odpowiedzi z ankiety.


title: Jak powszechna jest manipulacja ciągami, naprawdę?

text: Zauważyłem, że wiele wprowadzeń do programowania (prawie w każdym języku) zwykle dość wcześnie zawiera dużą lawinę manipulacji ciągami, takie jak: * Policz liczbę „xx” w danym ciągu. Powiemy, że nakładanie się jest dozwolone, więc „xxx” zawiera 2 „xx”. * Odwróć podany ciąg i usuń z niego wszystkie samogłoski. Nie tylko kursy online, ale nawet programy studiów. Ale chodzi o to, że nigdy nie spotkałem się z sytuacją w „prawdziwym życiu”, w której musiałbyś zrobić coś takiego. Czy to tylko szczęście, czy naprawdę musisz wykonywać ciężkie manipulacje w powyższy sposób w niektórych dziedzinach programowania? Czy możesz podać opis lub przykład, gdzie jest to potrzebne? Edycja: dla wyjaśnienia, niekoniecznie samo przetwarzanie ciągów, jak w przypadku powtarzania zmiennych w szablonie HTML, lub inne podstawowe rzeczy, ale bardziej tajemny typ przetwarzania, taki jak odczytywanie co drugiego znaku? Ale tak, może to tylko do celów szkoleniowych, a nie bezpośrednich potrzeb. Warto jednak zwrócić uwagę na konwersję formatu pliku.


title: Jak w programie z rdzeniem modułowym moduły powinny ze sobą współdziałać?

text: Krótkie tło: używam MEF/C# do opracowania programu, który ma jeden rdzeń (singleton) i wiele części MEF (nazywam je modułami, każdy moduł jest osobnym zestawem z jedną klasą, która zawiera eksport MEF). Jądro importuje wszystkie części, które są potrzebne/dostępne i inicjuje je (sprawia, że czytają swoje pliki konfiguracyjne, to wszystko dzieje się w konstruktorach, jak zwykle) Teraz mój problem polega na tym, że potrzebuję modułów do interakcji ze sobą (powiedzmy moduł A, graficzny interfejs użytkownika, musi pobrać jakieś dane z bazy danych, musiałby jakoś wywołać funkcję w module bazy danych (moduł B).) Jak mam to zrobić? Jasne, mógłbym po prostu upublicznić te części/moduły w moim rdzeniu, dodać odniesienie do rdzenia w moim module i skończyć z tym, ale jakoś byłoby to brzydkie/złe. (głównie dlatego, że mam obawy związane z bezpieczeństwem takiej implementacji, każdy mógłby po prostu wywołać tę funkcję, chyba że używam czegoś takiego, ale nadal nie czuję się dobrze). Innym podejściem byłoby umieszczenie wszystkich tych funkcji w rdzeniu, gdzie po prostu wywołują odpowiednią funkcję modułu. To też źle się czuje, ponieważ musiałbym dodać wiele rzeczy do mojego rdzenia, aw niektórych przypadkach byłoby to coś, czego potencjalny klient nigdy nie użyje, ponieważ nie potrzebuje/ma konkretnego modułu. Czy ktoś zna lepszy sposób na zrobienie tego? Może mój tok myślenia gdzieś się pomylił?


title: Czy pracując dla klienta mogę wykorzystać kod stworzony przez inną agencję?

text: Załóżmy, że mój klient ( _C_ ) ma firmową stronę internetową, stworzoną przez agencję ( _A_ ). _A_ stworzył dość prostą, ale dobrze zaprojektowaną stronę internetową, która używa zwykłego HTML i nie ma zaplecza do edycji jakichkolwiek danych. _C_ musi wydać (i oczywiście zapłacić) _A_ za każdym razem, gdy chce wprowadzić zmiany w swojej witrynie, która stała się dość droga. Teraz _C_ prosi _Mnie_ o napisanie dynamicznego modułu, który integruje się z istniejącą witryną. Ten moduł powinien być event-planerem, który umożliwia _C_ samodzielne zmienianie przynajmniej tej części witryny. Trochę się martwię, czy mogę po prostu wziąć część grafiki _A_ i HTML/CSS do mojego projektu (ponieważ potrzebuję nowego modułu, aby był częścią strony internetowej). Czy są jakieś kwestie prawne, które należy wziąć pod uwagę? Do kogo należy już istniejąca strona internetowa? Czy można w ogóle przyjąć ogólne założenie, czy jest to coś, co koniecznie musi być zawarte w umowie?


title: Jakie wzorce projektowe są najgorsze lub najwęższe?

text: W przypadku każdego projektu programistycznego menedżerowie z doświadczeniem w programowaniu starają się zabłysnąć, polecając pewne wzorce projektowe dla twojego projektu. Lubię wzorce projektowe, gdy mają sens lub jeśli potrzebujesz skalowalnego rozwiązania. Używałem na przykład wzorców proxy, obserwatorów i poleceń w pozytywny sposób i robię to każdego dnia. Ale naprawdę waham się, czy użyć wzorca Factory, jeśli istnieje tylko jeden sposób na utworzenie obiektu, ponieważ fabryka może to wszystko ułatwić w przyszłości, ale komplikuje kod i jest czystym obciążeniem. _Więc moje pytanie dotyczy mojej przyszłej kariery i mojej odpowiedzi na typy menedżerów rzucające losowe nazwy wzorców wokół:_ Jakie wzorce projektowe użyłeś, które ogólnie cię odrzuciły? **Jakie są najgorsze wzorce projektowe** , na które nie powinieneś patrzeć, jeśli nie jest to jedyna sytuacja, w której ma to sens (czytaj: które wzorce projektowe są bardzo wąsko zdefiniowane)? (To tak, jakbym szukał negatywnych recenzji ogólnie dobrego produktu amazon, aby zobaczyć, co najbardziej przeszkadzało ludziom w korzystaniu z wzorców projektowych). I nie mówię tutaj o Antywzorcach, ale o Wzorcach, które są zwykle uważane za „dobre” wzorce. **Edycja:** Jak niektórzy odpowiedzieli, najczęściej problemem jest to, że wzorce nie są „złe”, ale „niewłaściwie używane”. Jeśli znasz wzorce, które często są niewłaściwie używane lub nawet trudne w użyciu, również pasowałyby jako odpowiedź.


title: Czy oprogramowanie do kontroli wersji powinno być używane z wiersza poleceń lub GUI?

text: Przechodziłem przez kilka samouczków na temat TortoiseHg. Pomimo bogatego GUI, pierwsze przykłady są podane przy użyciu opcji wiersza poleceń. Czy idealne użycie obejmuje wiersz poleceń, czy też został uruchomiony w ten sposób, więc masz pojęcie o tym, co dzieje się pod maską, a GUI wewnętrznie używa tego polecenia.


title: Rozdzielenie obaw: czyja to troska?

text: Mój starszy kolega recenzent chce, abym wykonał następujące czynności. Mamy (na iOS, iPhonie) hierarchię widoków na jednym z naszych ekranów. Istnieje prosty prostokąt reprezentujący wizytówkę osoby (wizualnie pasuje do stylu wizytówek). Ponieważ ta karta jest wielokrotnie używana na wielu ekranach, napisałem niestandardową klasę o nazwie `PFXBusinessCard`, która ma cztery etykiety, z których każda reprezentuje dane osoby, takie jak imię i nazwisko, numer telefonu, konto i e-mail. Te cztery etykiety są widoczne jako właściwości tej niestandardowej klasy. W moim kontrolerze przekazuję dane dla konkretnej etykiety w następujący sposób. Dostaję osobę, odczytuję konkretną wartość właściwości i ustawiam tę właściwość w kontrolerze. Oznacza to, że ustawiam imię i nazwisko, numer telefonu itp. Ale mój kolega mówi, że powinienem zająć się tym w klasie `PFXBusinessCard`. Powinienem utworzyć w klasie metodę `populateWithPersonsData`, a po prostu przekażę osobę do karty w moim kontrolerze. Karta sama wypełniłaby wtedy swoje etykiety. Czy to podejście jest w porządku? Dlaczego karta miałaby wiedzieć o osobie? Obiekt interfejsu użytkownika nie powinien nic wiedzieć o danych. Czy powinno?


title: Bądź liberalny w tym, co akceptujesz... czy nie?

text: _[Zastrzeżenie: to pytanie jest subiektywne, ale wolałbym otrzymywać odpowiedzi poparte faktami i/lub refleksjami]_ Myślę, że wszyscy wiedzą o zasadzie solidności, zwykle podsumowywanej przez prawo Postela: > Bądź konserwatywny w tym, co wysyłasz; bądź liberalny w tym, co akceptujesz. Zgadzam się, że przy projektowaniu szerokiego protokołu komunikacyjnego może to mieć sens (w celu umożliwienia łatwej rozbudowy), jednak zawsze uważałem, że jego zastosowanie do HTML / CSS było całkowitą porażką, każda przeglądarka implementowała swoją własną cichą poprawkę wykrywanie/zachowanie, co sprawia, że uzyskanie spójnego renderowania w wielu przeglądarkach jest prawie niemożliwe. Zauważyłem jednak, że RFC protokołu TCP uznaje „cichą awarię” za akceptowalną, chyba że określono inaczej… co jest co najmniej interesującym zachowaniem. Istnieją inne przykłady zastosowania tej zasady w handlu oprogramowaniem, które regularnie pojawiają się, ponieważ mają ugryzionych programistów, od samego początku: * Wstawianie średnika JavaScript * Wbudowane konwersje C (ciche) (co nie byłoby tak źle, gdyby nie zostało obcięte...) i istnieją narzędzia, które pomagają wdrożyć „inteligentne” zachowanie: * algorytmy dopasowywania nazw (podwójny metafon) * algorytmy odległości między ciągami znaków (odległość Levenshteina) Jednak uważam, że to podejście, chociaż może być pomocny w kontaktach z użytkownikami nietechnicznymi lub pomagania użytkownikom w procesie naprawy błędów, ma pewne wady przy projektowaniu interfejsu bibliotek/klas: * jest nieco subiektywne, czy algorytm odgaduje „prawidłowo”, a zatem może jest sprzeczna z zasadą najmniejszego zdziwienia * utrudnia implementację, a tym samym większe szanse na wprowadzenie błędów (naruszenie YAGNI ?) * sprawia, że zachowanie jest bardziej podatne na zmiany, jak każdy modi fikcja procedury „zgadywania” może zepsuć stare programy, prawie wykluczając możliwości refaktoryzacji… od samego początku! I to właśnie doprowadziło mnie do następującego pytania: Czy projektując interfejs (bibliotekę, klasę, wiadomość) skłaniasz się ku zasadzie solidności, czy nie? Ja sam jestem dość surowy, używając obszernej walidacji danych wejściowych na moich interfejsach i zastanawiałem się, czy nie byłem zbyt surowy.


title: Jakiego frameworka internetowego użyć pod Backbonejs?

text: W poprzednim projekcie używałem Backbonejs razem z Django, ale dowiedziałem się, że nie korzystałem z wielu funkcji z Django. Tak więc szukam lżejszego frameworka do użycia pod aplikacją internetową Backbonejs. Nigdy nie korzystałem z wbudowanych szablonów Django. Kiedy to zrobiłem, założyłem początkową stronę indeksu, ale to wszystko. Użyłem systemu zarządzania użytkownikami dostarczonego przez Django. Użyłem modelu models.py, ale nigdy views.py. Użyłem urls.py, aby ustawić szablon, który użytkownik trafi po odwiedzeniu witryny. Zauważyłem, że dwie funkcje, których najczęściej używałem w Django, to South i Tastypie, a nie są one nawet dołączone do Django. W szczególności django-tastypie ułatwiło mi połączenie moich modeli frontendowych z modelami backendowymi. Ułatwiło to JSONify moje modele front-endu i wysłanie ich do Tastypie. Chociaż znalazłem się nad wieloma metodami smacznego dla żądań GET, PUT, POST, więc stało się to bezużyteczne. South ułatwiło migrację nowych zmian do bazy danych. Chociaż miałem tyle problemów z Południem. Czy istnieje framework z łatwiejszym sposobem obsługi modyfikacji bazy danych niż korzystanie z South? Kiedy korzystaliśmy z South z wieloma osobami, mieliśmy gorszy czas na synchronizację naszych baz danych. Gdy ktoś dodał nową tabelę i przesłał migrację do git, pozostałe dwie osoby spędzałyby dni próbując użyć automatycznej migracji South, ale to nigdy nie zadziałało. Podobało mi się, że Railsy mają ręczny sposób migracji baz danych. Mimo że często używałem Tastypie i South, okazało się, że tak naprawdę ich nie lubię, ponieważ skończyłem z nadpisaniem większości metod Tastypie dla każdego zasobu, a także miałem najgorszy problem z migracją nowych tabel i kolumn za pomocą South. Chciałbym więc framework, który ułatwi ten proces. Częścią mojego problemu było to, że są zbyt „magiczne”. Jakiego frameworka powinienem użyć? Nodejs czy lżejszy framework Pythona? Który działa najlepiej z moimi powyższymi kryteriami?


title: Dlaczego tablice liczone od zera są normą?

text: Zadane tutaj pytanie przypomniało mi o dyskusji, którą odbyłem z innym programistą. Twierdził, że tablice oparte na zerach powinny zostać zastąpione macierzami opartymi na jedynce, ponieważ tablice oparte na zerach to szczegół implementacji, który pochodzi ze sposobu działania tablic i wskaźników oraz sprzętu komputerowego, ale tego rodzaju rzeczy nie powinny być odzwierciedlone na wyższym poziomie Języki. Teraz nie jestem dobry w debatowaniu, więc nie mogę podać żadnych dobrych powodów, aby trzymać się tablic opartych na zerach, poza tym, że wydają się one bardziej odpowiednie. Dlaczego _jest_ zerom wspólnym punktem początkowym dla tablic?


title: Czy konieczne jest rozpoczęcie zmiennej od zera (var i = 0 ) z 'for loop'?

text: Czy konieczne jest rozpoczęcie zmiennej od zera (`var i = 0`) jakiejkolwiek pętli? Kiedy powinienem używać `var i = 1;` a kiedy `var i =0;`?


title: Dlaczego pierwsza kolumna listy nazywa się 0 w tak wielu językach?

text: Jeśli chcesz pierwszy element listy lub tablicy, odwołujesz się do niego jako 0 w wielu językach (takich jak C lub Clojure). Czy istnieją naprawdę dobre powody, dla których języki programowania zostały zaprojektowane w ten sposób? W dawnych czasach w językach asemblerowych ma to sens, ponieważ należy użyć wszystkich możliwych wartości. Ale co mamy w dzisiejszych czasach, żeby tak było? Arytmetyka modulo i zakresy mają niewielką przewagę (artykuł w Wikipedii), ale niewiele więcej. Po stronie wad powinno być: To powoduje zamieszanie, ponieważ to ludzki język pierwszy jest połączony z 1 (1 i nie jest tylko w języku angielskim). Powoduje to zamieszanie nawet w XPath (W3School:"Uwaga: W IE 5,6,7,8,9 pierwszym węzłem jest[0], ale według W3C jest to [1]."). Występują problemy między językami, które używają systemu opartego na 1 i 0. Chcesz wiedzieć, że to dobre powody, aby używać numeracji od zera i dlaczego nawet twórcy nowych języków (takich jak Clojure) wybierają ten sposób?


title: „statyczny” jako semantyczna wskazówka dotycząca bezpaństwowości?

text: to może być trochę filozoficzne, ale mam nadzieję, że ktoś pomoże mi znaleźć dobry sposób myślenia o tym. Niedawno podjąłem się refaktoryzacji średniej wielkości projektu w Javie, aby wrócić i dodać testy jednostkowe. Kiedy zdałem sobie sprawę z tego, jakim trudem było kpić z singletonów i statyki, w końcu „dostałem” to, o czym cały czas o nich czytałem. (Jestem jedną z tych osób, które muszą uczyć się z doświadczenia. No cóż.) Więc teraz, kiedy używam Springa do tworzenia obiektów i łączenia ich, pozbywam się `statycznych` słów kluczowych w lewo i w prawo . (Jeśli mógłbym potencjalnie chcieć z tego kpić, to nie jest tak naprawdę statyczne w tym samym sensie, co Math.abs(), prawda?) Chodzi o to, że przyzwyczaiłem się używać `static` do oznaczania, że metoda nie polegać na żadnym stanie obiektu. Na przykład: //Przed importem com.thirdparty.ThirdPartyLibrary.Thingy; public class ThirdPartyLibraryWrapper { public static Thingy newThingy(InputType input) { new Thingy.Builder().withInput(input).alwaysFrobnicate().build(); } } //nazywane jako... ThirdPartyLibraryWrapper.newThingy(input); //Po public class ThirdPartyFactory { public Thingy newThingy(InputType input) { new Thingy.Builder().withInput(input).alwaysFrobnicate().build(); } } //nazywane jako... thirdPartyFactoryInstance.newThingy(input); Więc tutaj robi się drażliwy. Podobał mi się stary sposób, ponieważ wielka litera mówiła mi, że podobnie jak Math.sin(x), ThirdPartyLibraryWrapper.newThingy(x) za każdym razem robi to samo w ten sam sposób. Nie ma stanu obiektu, który zmieniałby sposób, w jaki obiekt robi to, o co go proszę. Oto kilka możliwych odpowiedzi, które rozważam. * Nikt inny tak nie czuje, więc coś jest ze mną nie tak. Może po prostu tak naprawdę nie zinternalizowałem sposobu robienia rzeczy OO! Może piszę w Javie, ale myślę w FORTRAN lub coś takiego. (Co byłoby imponujące, ponieważ nigdy nie napisałem FORTRAN.) * Może używam statyki jako pewnego rodzaju proxy dla niezmienności dla celów wnioskowania o kodzie. Biorąc to pod uwagę, jakie wskazówki _powinnam_ mieć w swoim kodzie, aby ktoś nadchodził, aby go utrzymywać, aby wiedzieć, co jest stanowe, a co nie? * Może to powinno być darmowe, jeśli wybiorę dobre metafory obiektów? np. `thingyWrapper` nie brzmi tak, jakby posiadał stan niezależny od opakowanego `Thingy`, który sam może być zmienny. Podobnie, „thingyFactory” brzmi tak, jakby powinna być niezmienna, ale może mieć różne strategie, które są wybierane podczas tworzenia. Mam nadzieję, że wyraziłem się jasno iz góry dziękuję za radę!


title: Dokumentowanie interfejsu REST za pomocą schematu blokowego

text: Czy ktoś ma sugestie dotyczące tworzenia schematu blokowego reprezentującego interfejs sieciowy w stylu REST? W celu dostarczenia dokładnej dokumentacji współtwórcom, bawiłem się modelowaniem interfejsu do modyfikacji i generowania zasobów produktu: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com /tSwye.png) Ten konkretny system zaczyna działać inaczej z uwierzytelnianiem użytkownika/liczeniem zasobów, więc zanim wprowadzę modyfikacje, szukam wyjaśnienia: * Złożoność: jak uprościć ogólną strukturę, aby była łatwiejsza do odczytania? * Wyświetlany symbol: czy jest odpowiedni do reprezentowania strony? * Symbol operacji ręcznej: czy jest odpowiedni do reprezentowania działania użytkownika, takiego jak kliknięcie przycisku? Wszelkie inne sugestie byłyby bardzo mile widziane. Przepraszam za ponowne przesłanie. Główny serwis stackexchange sugerował, że to pytanie jest lepiej przedstawiane programistom.


title: Czy zagłębienie się w świat programowania poprzez przeczytanie książki o VS 2008 i .NET 3.5 to zły pomysł?

text: Zasadniczo to, co mówi tytuł. Jestem zupełnie nowy w programowaniu i zdecydowałem, że C# będzie najlepszym językiem do rozpoczęcia nauki, więc poszedłem dalej i zainstalowałem Visual Studio Express 2010 C#, aby zacząć. Zacząłem czytać Nauka C# 3.0: Opanuj podstawy C# 3.0 i zmartwiłem się, gdy doszedłem do części, która, zacytuję, mówiła: > „O ile wyraźnie nie mówimy inaczej, kiedy odwołujemy się do C# w tej książce, > mamy na myśli C# 3.0 ; kiedy odnosimy się do .NET, mamy na myśli .NET 3.5 Framework; a kiedy > odnosimy się do Visual Studio, mamy na myśli Visual Studio 2008." Czy to oznacza, że książka jest nieaktualna i powinienem znaleźć coś innego? Czy to oznacza, że powinienem po prostu przeczytać książkę i kontynuować w Visual Studio 2010? Czy to oznacza, że powinienem odinstalować 2010, pobrać VS 2008 i kontynuować czytanie? Nie chcę się uczyć czegoś, co jest przestarzałe, i wiem, że .NET 4.0 jest dostępny, więc nie jestem pewien, czy byłaby to strata czasu. Nawet nie wiem, czy jest różnica, czy to po prostu dodaje więcej funkcji i nadal można używać tego samego „podstawowego” kodu w każdym? Przepraszam, że nie mam pojęcia, nigdy wcześniej nie programowałem, po prostu potrzebuję kopniaka we właściwym kierunku, abym mógł zacząć NAUKA, po prostu nie chcę tego robić w niewłaściwy sposób :)


title: Wydajny sposób na tworzenie estymacji kodu/specyfikacji technicznej w szybko zmieniającym się środowisku

text: Aby lepiej zrozumieć moje pytanie, omówię tło tematu. Pracuję w instytucji finansowej, w której moduł biznesowy (finanse kredytowe) ulega ciągłym zmianom. Jednak w świecie IT programiści mają sześciotygodniowy cykl, w którym sporządzają listę projektów/ulepszeń, umieszczają je na osi czasu i biznes oczekują realizacji tych projektów. W każdym cyklu każdy programista otrzymuje przydzieloną pracę, którą należy wykonać w określonym terminie. Data ta jest już sfinalizowana przez kierowników ds. zmian IT i do tego czasu muszą zostać wprowadzone kody. Kod zostanie następnie zsynchronizowany, zbudowany w celu stworzenia pakietu i wdrożony do środowiska testowego dla zespołu QC (Centrum Jakości) do przetestowania. Problem polega jednak na tym, że programiści otrzymują kod na 3 tygodnie przed końcem cyklu kodu. Następnie mówi się nam, abyśmy zrobili specyfikację techniczną i oszacowanie pracy dla każdego projektu/ulepszeń/poprawek błędów, które zamierzamy zrobić. Ciągle rozmawiałem z moimi menedżerami, że to zacofana mentalność, polegająca na szacowaniu, wiedząc, kiedy musimy dostarczyć gotowy kod. Moje wyzwanie: Czy istnieje lepszy model szacowania/specyfikacji technicznej, który odpowiadałby takiemu środowisku? Jeśli nie, jak mam rozwiązać ten problem, aby nie kolidował z terminem. Dziękuję. PS: Całkowicie nie zgadzam się z dostarczaniem wymagań biznesowych programistom i oczekiwaniem od nich, że zrobią dokument specyfikacji technicznej, a także oszacowania podczas cyklu kodu. Uważam, że dokument specyfikacji technicznej powinien być sporządzony wcześniej i uzupełniony dokumentem funkcjonalnym/niefunkcjonalnym oraz podpisany przez firmę. Obecnie tak się nie dzieje.


title: Czy „normalna kolejność” i „call-by-name” to to samo?

text: Studiowałem książkę Struktura i interpretacja programów komputerowych iw sekcji 1.1.5 Model substytucyjny stosowania procedur autor wyjaśnia pojęcia _porządek normalny_ i _porządek aplikacyjny_, które, jak sądzę, dobrze zrozumiałem. Teraz biorę kurs na Coursera o nazwie Function Programming Principles in Scala i tam profesor Martin Odersky (który oparł większość swojego kursu na cytowanej powyżej książce) wyjaśnia te same pojęcia pod nazwami _call-by-name_ i _call- według-wartości_. Na swoim kursie profesor Odersky mówi, że model substytucji jest oparty na rachunku lambda, więc skonsultowałem się z książką w mojej bibliotece An Introduction to Functional Programming While Lambda Calculus i na stronie 22 autor definiuje terminy jako porządek aplikacyjny i porządek normalny . Co ciekawe, w swojej definicji mówi, że kolejność aplikacji jest jak sprawdzanie według wartości Pascala, podczas gdy normalna kolejność jest jak sprawdzanie według nazwy Algola. Użycie słowa „jest jak” w jego wyjaśnieniu sprawiło, że zwątpiłem. Stąd moje pytania: * Czy te dwa terminy są równoważne, czy też istnieją jakieś subtelne różnice? * Czy mogę używać jednego lub drugiego zamiennie bez ryzyka popełnienia błędu w znaczeniu, które przekazują? * Czy znasz jakieś powody, które uzasadniają istnienie innej terminologii w odniesieniu do tej samej rzeczy?


title: Nie jestem pewien, na co pozwala mi ta licencja

text: Używam klasy BigRational z bcl.codeplex.com. Po zakończeniu zostanie udostępniony jako opensource i zostanie zmodyfikowany. Nie rozumiem jednak prawniczego żargonu, więc mimo że jest dość krótki, czy ktoś mógłby mi wyjaśnić, co to robi/nie pozwala robić?


title: Tkanie kodu bajtowego a makra Lisp

text: Czytałem o bibliotekach napisanych przez ludzi dla języków takich jak Java i C#, które wykorzystują tkanie kodu bajtowego do wykonywania takich czynności, jak przechwytywanie wywołań funkcji, wstawianie kodu rejestrującego itp. Czytałem również na temat makr Lisp/Clojure w spróbuj lepiej zrozumieć, jak z nich korzystać. Im więcej czytam o makrach, tym bardziej wydaje się, że zapewniają one ten sam rodzaj funkcjonalności, co biblioteki tkania kodu bajtowego. Przez funkcjonalność rozumiem możliwość manipulowania kodem w czasie kompilacji. Przykładami bibliotek, na które patrzyłem, są AspectJ, PostSharp i Cecil. Czy można coś zrobić z jednym, a nie z drugim? Czy faktycznie rozwiązują te same problemy, czy porównuję jabłka i pomarańcze?


title: Formatuj tekst w sposób ogólny i wielokrotnego użytku

text: Chciałbym napisać jakiś długi tekst w jakiejś strukturze, aby umożliwić zestaw operacji na tym tekście. Pytanie brzmi, jakiej struktury lub formatu powinienem użyć, który najlepiej pasuje do planowanego wykorzystania tego tekstu? Dalej opisuję to zastosowanie: * Chciałbym napisać tekst w języku naturalnym, ewentualnie z tłumaczeniami na kilka języków. Tłumaczenia byłyby po prostu tą samą strukturą z różnymi danymi (tekstem). * Chciałbym zachować ten tekst w VCS, sprawdzać różnice, gałęzie i scalać itp. Struktura powinna dobrze pasować do tego zastosowania. * Chciałabym, aby tekst był jak najmniej bałaganu, aby był czytelny dla człowieka. * Chciałbym łatwo przekonwertować tekst na inne formaty, niekoniecznie wiele, ale przynajmniej html i pdf byłyby w porządku. * Chciałbym móc łatwo manipulować tym tekstem, np. zmieniać kolejność niektórych elementów, filtrować je itp. na podstawie metadanych w tym tekście. * Metadane to dane, co oznacza, że mogą być drukowane lub nie, lub mogą być drukowane na różne sposoby. Oto główne opcje, które do tej pory rozważałem: * **Latex** : w zasadzie jest to język przeznaczony do tego zadania. Problemy, które widzę, polegają na tym, że nie jest tak czytelny, jak inne opcje, na przykład Markdown, i nie jest to naprawdę ustrukturyzowany tekst. Tekst tam jest, a metadane dotyczące opcji formatowania itp. można oddzielić zestawem makr, ale tekst nie jest tak naprawdę ustrukturyzowany, zmiana kolejności wymaga albo przeanalizowania go, albo zdefiniowania całego tekstu jako makr, aby tylko kolejność należy zmienić wywołanie makra. Świetnie nadaje się do tego, co robi, ale staje się niezgrabny, gdy brakuje mu jakiejś funkcji, takiej jak struktura tekstu. Nie widzę dobrego oddzielenia informacji kontrolnych od danych do wydrukowania. To bardzo dobra opcja konwersji do formatu pdf. * **XML** : Struktura w tym przypadku jest całkiem dobra, ale w obecnym kontekście nie widzę korzyści w używaniu XML, gdy zamiast tego można użyć HTML, zapewnia on te same funkcje i trochę więcej. * **HTML** : konwersja do HTML byłaby w tym przypadku natychmiastowa, ale konwersja do formatu pdf nie jest tak jasna. Jeśli chodzi o czytelność dla ludzi, być może przecena mogłaby być lepsza, ale HTML jest prawdopodobnie najbardziej rozpowszechnionym i używanym językiem do danego zadania, istnieją języki pomocnicze, takie jak CSS (Less, Sass, zbyt wiele opcji), które mogą ułatwić życie, JavaScript może sobie z tym poradzić, każdy z przeglądarką może z łatwością to przeczytać itp. Może jakiś specjalny kod HTML da się przekonwertować na wysokiej jakości lateks, a tam na pdf, nie wiem. * **Markdown** : bardzo dobra opcja pod względem czytelności, ale nie jestem pewien, jak można nią manipulować, może poprzez konwersję do HTML, a następnie użycie manipulacji DOM lub innego przetwarzania, które można wykonać na XML, a tym samym na odpowiednim HTML. Nie jestem pewien, jak elastyczne może być definiowanie metadanych (na przykład akapitu, który jest podsumowaniem innych akapitów), kiedy można to łatwo zrobić za pomocą XML lub HTML za pomocą klas lub innych atrybutów. * **JSON** : większość języków zawiera parser dla JSON, dzięki czemu jest bardzo przyjazny dla języków programowania i łatwej manipulacji. Oczywiście należy zdefiniować jakiś standard dla JSON, ale to samo dotyczy pozostałych opcji, w tym lateksu (makra). * **CoffeeScript** : usuwa trochę bałaganu ze zwykłego JSON, może być bardziej czytelny i można go łatwo przekonwertować na JSON. * **Miksowanie** : problem z JSON i CoffeeScript polega na tym, że struktura do przechowywania zawartości jest bardzo elastyczna (może za dużo), ale nie obsługuje w naturalny sposób adnotacji w tekście. Możliwym rozwiązaniem jest użycie Markdown lub HTML dla tych fragmentów tekstu, w tym tekstu pogrubionego lub tego, co może być potrzebne. Celem jest napisanie manifestu lub czegoś, co wygląda jak manifest i ewoluuje. Opiera się to na kilku pomysłach, które zalecają korzystanie z systemów VCS. Chodzi o to, aby mieć strukturę, która pozwala na jednokrotne pisanie i publikowanie tyle razy, ile potrzeba i na różne sposoby, może posty na blogu, pdfy itp., ponieważ trzeba włożyć wiele wysiłku, aby osiągnąć konsensus. tekst, przepisywanie i przeredagowywanie nie wydaje się dobrym pomysłem. To odrzuca kilka innych fajnych opcji, takich jak wiki, ale byłoby miło mieć taką strukturę, aby zestaw stron, taki jak wiki, mógł być zbudowany z danych źródłowych. W końcu technologii może jeszcze nie ma, ale myślę, że nie jest za daleko. Właściwie jest tak wiele opcji, że sprytne wykorzystanie niektórych z nich powinno wystarczyć.


title: Najlepsza praktyka zarządzania współbieżnością w koszyku w witrynie e-commerce

text: Jaka jest najlepsza praktyka postępowania w przypadku, gdy dwóch klientów dodaje w tym samym czasie produkt, którego stan magazynowy wynosił tylko 1? Czy w kodzie koszyka musi znajdować się czek, aby jeden z tych 2 klientów nie dodał tego samego produktu? Czy ta kontrola musi być przeprowadzona w fazie płatności, wykonując na przykład drugie zapytanie, aby potwierdzić, że dany produkt jest nadal obecny w magazynie (oznacza, że nie został jeszcze kupiony przez jednoczesnego klienta)?


title: Nowicjusz w node.js, jaka jest przewaga uzyskana dzięki wywołaniom zwrotnym nad zdarzeniami?

text: Jestem początkującym JavaScripterem i nie mam żadnej wiedzy na temat tego, co dzieje się w silniku V8. Powiedziawszy to, naprawdę cieszę się z moich wczesnych wypraw do środowiska node.js, ale uważam, że stale używam zdarzeń. wzorzec podobny do tego, co napisałbym, powiedzmy, w programie Objective-C lub Python. Zawsze robię takie rzeczy: var event = require('events'); var eventCenter = new events.EventEmitter(); eventCenter.on('init', function() { var powitanie = 'Witaj świecie!'; console.log('Jesteśmy w funkcji init!); eventCenter.emit('secondFunction', powitanie); }); eventCenter.on('secondFunction', function(greeting) { console.log('Jesteśmy w drugiej funkcji!); console.log(pozdrowienia); eventCenter.emit('nextFunction'); }); eventCenter.on('nextFunction', function { /* do rzeczy */ }); eventCenter.emit('init'); W efekcie po prostu konstruuję kod „async” node.js w kodzie, który robi rzeczy w kolejności, jakiej się spodziewam, zamiast tego „koduję wstecz”, jeśli ma to sens. Czy byłaby jakaś różnica w robieniu tego w sposób obciążony wywołaniami zwrotnymi, pod względem wydajności lub filozofii? Czy lepiej zrobić to samo za pomocą wywołań zwrotnych zamiast zdarzeń?


title: Czy istnieją serwery SQL obsługujące zapytania skompilowane?

text: Czy zapytania SQL można skompilować do kodu bajtowego lub równoważnego w celu zwiększenia wydajności? Wiem, że większość serwerów bazodanowych obsługuje przygotowane instrukcje, ale czy to to samo, co kompilacja? Większość aplikacji musi przygotowywać instrukcje w czasie wykonywania, więc nie ma korzyści z prekompilowanego kodu bajtowego. Ponieważ jest przygotowywany przy każdym uruchomieniu aplikacji. Nie mam na myśli również procedur składowanych, ale ściśle instrukcji SQL, które wykonujesz w celu uzyskania zestawu wyników.


title: Programowanie współbieżne Erlang and Go, obiektywne różnice między CSP a aktorami?

text: Zajmowałem się programowaniem współbieżnym w językach programowania Erlang i Go. Zgodnie z moim odkryciem są one odpowiednio używane jako model aktora i CSP. Ale nadal jestem zdezorientowany, jakie są obiektywne różnice między CSP a aktorami? czy to tylko teoretyczne, ale tylko ta sama koncepcja?


title: Obiekt JSON i przechowywanie nosql

text: Przeczytałem Czy baza danych NoSQL byłaby bardziej wydajna niż relacyjna baza danych do przechowywania obiektów JSON? i buduję mały projekt testowy w Asp.Net. Mam webapi na platformie Azure. Zwraca `List<Company>`, a Company jest moim obiektem, który ma kilka właściwości i listę podrzędną oraz wartość długości/szerokości. //id, nazwa itp. public List<Certification> Certyfikaty { get; ustawić; } public float Latitude { get; ustawić; } public float Długość geograficzna { get; ustawić; } public GeoCoordinate Cordinate // itd. GeoCoordinate pochodzi z referencji System.Device. Zwracam tę listę firm i używam danych wyjściowych JSON. Teraz wewnętrznie, ładując tę listę, ładuję pełną listę firm z pliku json. a jeśli nie ma pliku, zostanie utworzony plik. To wszystko jest dobre. Ale szerokość i długość geograficzna są początkowo puste. Więc wypełniam go za pomocą odwrotnego geokodu Google. To działa, ale ma limit żądań. Więc chciałbym załadować listę i jeśli lat/long jest pusty, pobrać wartości z usługi Google i zapisać je. Ale szukam rozwiązania, aby nie przechowywać ponownie pełnej listy json do pliku. I nie szukam rozwiązania relacyjnej bazy danych, bo to jest coś, co zrobiłem wystarczająco. Teraz przeczytałem o mongoDB. Ale trochę trudno jest skonfigurować na platformie Azure. Miałem Redis na Azure. Jakie łatwe i szybkie rozwiązanie polecasz dla mnie do przechowywania mojej listy obiektów? Czy polecasz go w ogóle przechowywać w formacie JSON? albo coś innego? jak XML? i użyć xpath do aktualizacji wartości? Więc szukam architektury/projektu, aby zaktualizować wszystkie długości/długości, dopóki google nie wyświetli błędu limitu przydziału i spróbuję w następnej próbie, aby uzyskać dostęp do listy firm. ps. Nie chcę przechowywać listy „Certyfikacji”. Jestem ciekaw, czy mogę zatrzymać to jako własność firmy i przechowywać cały projekt firmy.


title: Jak zmaksymalizować funkcje MySQL w połączeniu z php

text: Zadałem to pytanie jakiś czas temu na SO (http://stackoverflow.com/questions/15506040/maximising-the-features-of-php-and-mysql-when-used-together), ale jest to powtarzający się temat, więc pomyślałem, że tutaj spytam w inny sposób. Zasadniczo utknęliśmy przy niesławnej kombinacji php i MySQL (z różnych powodów) i staramy się tworzyć aplikacje, które w jak największym stopniu stosują się do najlepszych praktyk. Zauważamy, że raz po raz mocno łączymy aplikację z bazą danych i odwrotnie, pomimo prób przestrzegania zasad SOLID. Jednym z głównych powodów jest maksymalizacja funkcji relacyjnej bazy danych (takich jak ścisłe typy danych, hierarchiczne struktury danych, relacje, wymuszanie kluczy obcych, wyzwalanie wyzwalaczy itp.). Oznacza to, że część logiki aplikacji przenika do SQL. Istnieją jednak funkcje, których nie oferują inne RDBMS (np. ograniczenie CHECK), więc używamy php, aby je obejść. Oznacza to, że w końcu używamy php do niektórych rzeczy, które MySQL nie robi dobrze i używamy MySQL do robienia rzeczy, które nie są możliwe w php. Tak więc, mimo że każdy podręcznik zachęca programistów do luźnego łączenia rzeczy, czy ktoś ma jakieś przykłady tego, jak przezwyciężyć napotkane ograniczenia lub przykłady innych aplikacji, które mieszają te dwie rzeczy w podobny sposób?


title: delegowanie logiki programu do obiektów niższego poziomu

text: Piszę bibliotekę do użytku w obliczeniach naukowych i wpadłem na mały dylemat. Stosowane tutaj typy to klasa `M`, która składa się z pewnych `danych` i referencji do klasy kontenera `C`. Istnieje wiele różnych implementacji `C` i poświęciłem dużo pracy, aby upewnić się, że obiekty `M` mogą używać obiektów `C` bez znajomości ich wewnętrznej reprezentacji. Kod może być kiedyś używany do wysokowydajnych obliczeń naukowych, więc szybkość rzeczywiście jest problemem. Gdyby `M` przerwał enkapsulację obiektów `C`, kod mógłby działać szybciej. Przetestowałem to i rzeczywiście udało mi się uzyskać 50% przyspieszenie. Ale to wiązałoby się z wieloma powtarzającymi się kodami i naruszeniem zasady otwarte-zamknięte. Alternatywnie mogę wziąć zachowanie, które musi wykonać `M` i przekazać je do `C`. Domyślnie `C` użyje tego samego algorytmu niezależnego od implementacji, który miałem wcześniej, ale logika została właśnie przeniesiona do centrum miasta do nowej klasy. Zaletą tego podejścia jest to, że jeśli `CO` jest implementacją `C`, która może działać znacznie lepiej niż implementacja domyślna, może zastąpić tę metodę własną wersją. Obecnie istnieje tylko jedna metoda, którą `M` będzie musiała delegować do `C`. Mogę sobie wyobrazić co najwyżej 2 inne zachowania, z którymi trzeba będzie się uporać w ten sposób. Może być trochę powtarzającego się kodu, ale można to również obsłużyć za pomocą generatora kodu. Czy to powszechne podejście? Jeśli tak, jak to się nazywa? Jeśli nie, czy to dlatego, że jest to okropny pomysł z jakiegoś powodu, którego nie zauważyłem? Nie jest to do końca wzorzec strategii; większość obiektów kontenerów nawet nie zawraca sobie głowy wdrażaniem własnej strategii, używa wartości domyślnej.


title: Jak zrobić edytor tekstu znaków w stylu vima w aplikacji graficznej?

text: Istnieje fajna aplikacja do gry na gitarze, z której korzystałem wcześniej, gdzie można używać klawiatury do poruszania się po siatce znaków. Możesz umieścić dowolną cyfrę w dowolnej komórce znaku. Oto obrazek: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/tIcil.png) Jest to podobne do edytora VIM, w którym masz kursor blokowy i możesz się poruszać i umieszczać znaki na siatce. Używam Qt jako mojej aplikacji GUI. Jak mogę dodać ten typ jednoznakowej kontrolki edytora w mojej aplikacji? Nie spotkałem się z tego typu widżetem w żadnej mojej ekspozycji na programowanie GUI; stąd nie jestem nawet pewien, jak to nazwać ani jak zwięźle to opisać. Dziękuję.


title: Jak działa metoda Stream.filter()?

text: Wiem, jak działa wyrażenie lambda i wiem, że jest to argument dla `.filter()`, który ustala kryteria filtrowania. Ale nie rozumiem, w jaki sposób `.filter()` używa argumentu, w tym przypadku wyrażenia lambda, ponieważ .filter() nie ma implementacji lub przynajmniej wymaga jej w czasie kompilacji. Szukam tej nieznanej implementacji na stronie Oracle, ale jest tylko kilka słów wyjaśniających, jak to działa i nie ma żadnego kodu. Czy ta implementacja jest ukryta, czy jest tworzona automatycznie przez kompilator java? Czy operacja zagregowana tego potrzebuje? podwójna średnia = roster .stream() .filter(p -> p.getGender() == Osoba.Płeć.MALE) .mapToInt(Osoba::getAge) .average() .getAsDouble(); `roster` to `List<Person>` instancja `ArrayList<Person>` `Person` to prosta klasa reprezentująca osobę


title: Cały program w CASE

text: Zacznę od stwierdzenia, że to może nie być właściwe miejsce, aby to opublikować. Tak więc... pracuję w środowisku Embedded Development, używając języka C. Czy są jakieś korzyści lub wady wykonywania następujących czynności: while (1) { i++; switch (i) { przypadek 1: x_get_inputs(); przerwanie; przypadek 2: x_react(); przerwanie; przypadek 3: x_set_outputs(); i = 0; przerwanie; domyślnie: przerwa; } } Zamiast standardowej listy wywołań funkcji? Myślę, że jest to podobne do _Round Robin RTOS_? Moja logika jest taka, że czas cyklu programu będzie krótszy i jako taki powinien być bardziej wydajny?


title: Jak zmienić precyzję zmiennej w Pythonie?

text: Pracuję na silniku fizyki 2D i potrzebuję pewnej zmiennej, aby była precyzyjna tylko do części setnych. Czy są jakieś metody na pozbycie się całej tej niepotrzebnej precyzji? Próbowałem takich rzeczy jak "{0:.2f}".format(a), ale to oczywiście daje ciąg, a nie liczbę. Poruszam obiektem w oparciu o jego prędkość i chcę, aby (oczywiście) zatrzymał się, gdy jego wartość wynosi 0.0, ale porusza się dalej, ponieważ jego prędkość jest naprawdę około 0.0000562351.


title: C# LinqExtensions implementuje dziedziczenie wielokrotne

text: Według WikiPedii „Niektóre języki nie obsługują domieszek na poziomie języka, ale mogą je łatwo naśladować, kopiując metody z jednego obiektu do drugiego w czasie wykonywania, tym samym „pożyczając” metody domieszki. Zauważ, że jest to również możliwe w przypadku języków statycznie wpisanych, ale wymaga skonstruowania nowego obiektu z rozszerzonym zestawem metod”. 1) Funkcje biblioteki statycznej LinqExtensions ( .Where() ) zastosowane do kolekcji zwykłych obiektów (int[]), które implementują IEnumerable, zasadniczo to robią. Używają _nowego obiektu_ (LinqExtensions), aby dodać _rozszerzony zestaw metod_ ( Where(),etc ). Wniosek. LinqExtensions to domieszki ze wszystkimi klasami obsługującymi IEnumerable. 2) Według WikiPedii „W obiektowych językach programowania, mixin to klasa, która zawiera kombinację metod z innych klas. Sposób wykonania takiej kombinacji zależy od języka, ale nie jest to dziedziczenie. Jeśli kombinacja zawiera wszystkie metody połączonych klas jest to równoznaczne z wielokrotnym dziedziczeniem." Mieszając **ALL** metody klas, które obsługują IEnumerable ( List.HashCode, List.ToString, inne możliwości linii bazowej hierarchii List ) z metodami **ALL** z biblioteki statycznej LinqExtensions ( .Where(), Max() itd ) tworzony jest **odpowiednik dziedziczenia wielokrotnego**. Powstaje odpowiednik dziedziczenia wielokrotnego, tak czy nie?


title: Jakie są korzyści z używania Dependency Injection i IoC Containers?

text: Zamierzam przeprowadzić wykład na temat Dependency Injection i IoC Containers i szukam kilku dobrych argumentów za jego użyciem. Jakie są najważniejsze korzyści wynikające z zastosowania tej techniki i tych narzędzi?


title: Jakiego projektu OO użyć ( czy istnieje wzorzec projektowy )?

text: Mam dwa obiekty, które reprezentują „bar/klub” (miejsce, w którym pijesz/socjalizujesz). W jednym scenariuszu potrzebuję nazwę paska, adres, odległość, hasło W innym scenariuszu potrzebuję nazwę paska, adres, adres strony internetowej, logo Więc mam dwa obiekty reprezentujące to samo, ale z różnymi polami. Lubię używać obiektów niezmiennych, **więc wszystkie pola są ustawiane z konstruktora**. Jedną z opcji jest posiadanie dwóch konstruktorów i zerowanie pozostałych pól, tj.: class Bar { private final String name; prywatna odległość końcowa Odległość; prywatny końcowy adres URL; public Bar(String name, Distance distance){ this.name = name; this.odległość = odległość; this.url = null; } public Bar(String name, Url url){ this.name = name; this.distance = null; ten.url = adres URL; } // gettery } Nie podoba mi się to, ponieważ musiałbyś sprawdzić wartość null podczas korzystania z getterów W moim prawdziwym przykładzie pierwszy scenariusz ma 3 pola, a drugi scenariusz ma około 10, więc byłby to **prawdziwy ból mając dwa konstruktory** , ilość pól, które musiałbym zadeklarować jako null, a wtedy gdy obiekt jest w użyciu, nie wiedziałbyś, którego paska używasz, a więc jakie pola byłyby puste, a jakie nie. Jakie mam inne opcje? Dwie klasy o nazwie „BarPreview” i „Bar”? Jakiś rodzaj dziedziczenia/interfejsu? Coś jeszcze, co jest niesamowite?


title: Wybór technologii dla aplikacji klienta

text: Nie jestem pewien, czy to jest właściwe miejsce, aby zapytać... Jestem zaangażowany w rozwój nowego systemu, a teraz przechodzimy do etapu demonstracji. Musimy zbudować odpowiednią aplikację kliencką. Platformą, na której najbardziej nam zależy, przynajmniej na razie, jest Windows, ale chcielibyśmy wspierać inne platformy, o ile jest to bezpłatne :-). A przynajmniej bardzo tanio. Przewidujemy dwa rodzaje użytkowników: 1. Okazjonalnych, pochodzących głównie z sieci. 2. Profesjonalista, który prawdopodobnie wymagałby większej liczby funkcji, lepszej wydajności i prawdopodobnie wolałby mieć klienta natywnego. Nasz serwer udostępnia dwa API: 1. SOAP API, WCF za kulisami, który obsługuje 100% funkcjonalności. 2. Mały i bardzo szybki interfejs UDP + Binary API, który duplikuje część funkcjonalności i jest przeznaczony do zapewnienia wydajności w określonych scenariuszach czasu rzeczywistego. Nasz zespół jest w większości biegły w programowaniu .Net, C#, C++ i raczej jest zaznajomiony z programowaniem WWW (HTML, JavaScript). Prawdopodobnie zamierzamy opracować dwóch klientów (dla obu profili użytkowników), aplikację internetową i aplikację natywną. Architektonicznie chcielibyśmy mieć jak najwięcej wspólnych elementów. Chcielibyśmy mieć kilka warstw: Komunikacja, Model Klienta, Logika Klienta, wspólne dla obu klientów. Chcielibyśmy również móc dodawać funkcje do obu klientów, gdy tylko rzeczywisty interfejs użytkownika ma podwójny koszt, a reszta jest udostępniana. Przyglądamy się kilku technologiom: WPF + Silverlight, Pure HTML, Flash / Flex (AIR?), Java (JavaFx?) i rozważamy szturchanie w WinRT (lub jakakolwiek jest właściwa nazwa). Pytanie brzmi, jaką technologię poleciłbyś i dlaczego? A jakie będzie to miało zalety lub wady w odniesieniu do naszych wymagań?


title: zrozumienie schematu kodowania w Pythonie 3

text: Dostałem ten błąd w moim programie, który pobiera dane z innej witryny i zapisuje je do pliku: kodek 'charmap' nie może kodować znaków na pozycji 151618-151624: mapowanie znaków do <niezdefiniowane> Nie znam całego dekodowania kodowania rzecz i byłem w porządku z tym, co zrobił python 2. Chociaż pyton oficjalnie powiedział, że dokonali zmiany, aby poprawić sytuację, wydaje się, że jest coraz gorzej. Nie mam pojęcia jak naprawić te błędy. Jednak jestem osobą aktywną, więc bardzo chciałbym wiedzieć, co jest przyczyną problemu i jak go rozwiązać. Sprawdziłem oficjalną stronę, ale słowa są trudne do zrozumienia. Czy mógłbym prosić o proste opracowanie na ten temat? Dopuszczalna jest również inna strona. EDYCJA: Sprawdziłem tę stronę, Unicode HOWTO w Pythonie 2.7. Rozumiem, że musimy przetłumaczyć ciąg znaków Unicode na format binarny podczas zapisywania go do pliku i wymaga to kodowania. Oczywiście najlepszy jest „utf-8”, ale dlaczego nie zmusił interpretera Pythona do używania „utf-8”? Zamiast tego używa jakiegoś dziwnego kodeka, takiego jak „charmap”, „cp950” i „latin-1”.


title: Kiedy należy refaktoryzować przeciążenia metod?

text: Kiedy powinien wyglądać taki kod: DoThing(string foo, string bar); DoThing(string foo, string bar, int baz, bool qux); ... DoThing(string foo, string bar, int baz, bool qux, string more, string andMore); Przeprowadź refaktoryzację w coś, co można nazwać tak: var doThing = new DoThing(foo, bar); doThing.more = wartość; doThing.andMore = innaWartość; zróbRzecz.Go(); A może powinien zostać przerobiony na coś zupełnie innego? W konkretnym przypadku, który zainspirował to pytanie, jest to publiczny interfejs dla biblioteki DLL szablonów XSLT, w której musieliśmy dodać różne flagi (różnego typu), których nie można osadzić w wejściowym łańcuchu XML.


title: Wymowa w programowaniu?

text: Jak poprawnie lub błędnie wymawiasz terminy programistyczne? Coś, co uważasz za wymagające ścisłej korekty lub historii we wczesnej kulturze CS? **Programowanie** `char` = "tchar" nie obchodzi? `!` = huk nie wykrzyknik? `#` = funt nie hasz? Wyjątek `#!` = shebang `*` = ikona nie gwiazda? `regex` = "rej ex" a nie "regg ex"? `sql` = "s q l" nie "sequel" (już odpowiedziałem, tylko np.) **Unixen** `|` = rura nie pionowa kreska? `bin` = bin jak w pin , a nie jak w binarnym? `lib` = lib jak w bibliotece , a nie jak w liberate? `etc` = "ett zobacz" , a nie "et c" (jak w `/etc` a nie "&c") **Rozdrażnienie** `/` = ukośnik bez ukośnika odwrotnego `LaTeX` = "laytek" nie "technika lay"


title: W wikipedii mówi się, że adres zdalnego gniazda jest adresem gniazda klienta, ale wątpię w to

text: W kontekście gniazda sieciowego, który z nich jest ADRESEM ZDALNEGO GNIAZDA? Czy adres gniazda klienta odnosi się do adresu gniazda zdalnego?


title: Algorytm generowania rozkładu hiperwykładniczego

text: Muszę wygenerować rozkład hiperwykładniczy dla mojego projektu. Zaimplementowałem już algorytm generowania poissona podany przez Donalda Knutha, ale nie mogłem znaleźć algorytmu generowania hiperwykładniczej zmiennej losowej. Dostaję średnią i wariancję wymaganą dla rozkładu i potrzebuję algorytmu, który może wygenerować zmienną losową z tego rozkładu podczas jego wykonywania.


title: Kontrola przed zatwierdzeniem Subversion

text: W pliku konfiguracyjnym projektu PHP mam kilka ustawień, które nie powinny wychodzić w środowisku produkcyjnym. Czy ktoś może podać kilka konkretnych przykładów lub pomóc w automatycznym sprawdzaniu tych pól i upewnianiu się, że ich wartości nie są ustawieniami rozwojowymi/demo, zanim pliki zostaną zatwierdzone do subversion? Naszym IDE jest JetBrains PHP Storm i używamy najnowszej wersji subversion. Niektórzy z nas programują w systemie Linux, a inni w systemie Windows.


title: W jaki sposób przetestowałbyś jednostkę lub wykonał najbardziej efektywne testy automatyczne kodu graficznego?

text: Piszę grę i towarzyszący jej silnik graficzny na OpenGL w C++. Jestem również fanem dobrych procesów kodowania i zautomatyzowanych testów. Kod graficzny + testowanie wydaje się nie do pogodzenia, ponieważ dane wyjściowe są często tylko wizualne lub bardzo mocno zorientowane na wizualność. Na przykład wyobraź sobie, że analizujesz nieprzetworzony strumień obrazu, który jest renderowany na ekranie bajt po bajcie – potrzebujesz danych testowych do porównania, co jest trudne do stworzenia/uzyskania, a często renderowane obrazy nie są identyczne na poziom bajtów podczas działania w różnych momentach — niewielkie zmiany w algorytmach całkowicie zrujnują to podejście. Zastanawiam się nad stworzeniem wizualnego zestawu testów jednostkowych, w którym mogę zasadniczo renderować różne sceny testowe, pokazując takie rzeczy jak mapowanie cieni, animacje itp. itd. W ramach CI sceny te byłyby następnie renderowane do wideo plik (lub ewentualnie pozostawić go jako plik wykonywalny) z różnymi metrykami. Nadal wymagałoby to ręcznej kontroli pliku wideo, ale przynajmniej byłoby to w pewnym stopniu zautomatyzowane i ustandaryzowane. Co myślisz? Mam nadzieję, że są lepsze sposoby?


title: Jak edytować istniejące historyjki użytkowników

text: Jestem całkiem nowy w pracy w Agile oraz z historyjkami użytkowników i scenariuszami w narzędziu BDD Cucumber i idealnie byłoby, gdybym musiał przejść przez to wszystko. Mam zestaw historyjek użytkownika, które należy edytować w nadchodzącym wydaniu. Na przykład jedna z historyjek użytkownika brzmi: „Jako użytkownik chcę mieć wizualny wskaźnik przy wejściu do aplikacji” Należy to zmienić na: Jako producent nie chcę teksturowanego tła w aplikacji Kryteria akceptacji (W formacie Gherkin dla osób zaznajomionych z Cucumber) dla oryginalnej historyjki użytkownika (pierwsza powyżej) to Scenariusz: Pokaż obraz tła, gdy wideo nie jest odtwarzane Biorąc pod uwagę ponowne uruchomienie aplikacji Gdy wyświetlane jest menu główne Następnie powinno się pełnoekranowe tło z teksturą być widoczne w odpowiedniej rozdzielczości Dla nowego historyjki użytkownika (drugi powyżej), kryteria akceptacji, które napisałem, ale nie są pewne, to: Scenariusz: Pokaż ciemnoszare tło, gdy wideo nie jest odtwarzane Biorąc pod uwagę ponowne uruchomienie aplikacji Gdy menu główne jest wyświetlane Ciemnoszare tło powinno być widoczne w odpowiedniej rozdzielczości. Czy to wygląda dobrze? A może brakuje mi informacji? Jestem w tym całkiem nowy, więc proszę o wyrozumiałość.


title: Wiedza, kto jest użytkownikiem w każdym żądaniu (każda akcja, każdy widok, za każdym razem)

text: Mam wiele klas modeli, które są mapowane z/do tabel przy użyciu EF. Dwa z nich to `User` i `UserCookie`, które są przechowywane w tabelach `Users` i `UserCookies`. public class User { public long UserId { get; ustawić; } ciąg publiczny Imię i nazwisko { get; ustawić; } ciąg publiczny E-mail { get; ustawić; } (...) } public class UserCookie { public long UserCookieId { get; ustawić; } publiczny długo? Identyfikator użytkownika { get; ustawić; } publiczny użytkownik wirtualny Użytkownik { get; ustawić; } ciąg publiczny CookieValue { get; ustawić; } } Każdy kontroler w mojej aplikacji ASP.NET MVC jest potomkiem (dziedziczy) `MyController`, czyli tak: public class MyController : Controller { protected MyDbContext dbContext; chroniony plik UserCookie userCookie; chroniony Użytkownik bieżący Użytkownik; chroniony ciąg cookieValue; public MyController() : base() { this.dbContext = new MyDbContext(); this.cookieValue = ""; this.currentUser = null; this.userCookie = null; } protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); HttpCookie cookie = Request.Cookies["LoginCookie"]; if (cookie != null) { this.cookieValue = cookie.Value; this.userCookie = db.UserCookies.SingleOrDefault(c => c.CookieValue.Equals(cookieValue)); if (userCookie != null) this.currentUser = userCookie.User; } } przesłonięcie chronione ViewResult View(string viewName, string masterName, model obiektowy) { ViewBag.CurrentUser = currentUser; ViewBag.UserCookie = userCookie; ViewBag.CookieValue = cookieValue; return base.View(viewName, masterName, model); } } Gdy użytkownik loguje się pomyślnie, tworzę w nim ciasteczko o losowej wartości, takie jak: public ActionResult Login(...) { (...) HttpCookie cookie = new HttpCookie("LoginCookie"); cookie.Value = Guid.NewGuid().ToString(); Odpowiedź.Cookies.Add(cookie); userCookie.Użytkownik = użytkownik; userCookie.CookieValue = cookie.Value; db.UserCookies.Add(userCookie); db.ZapiszZmiany(); Problem z tym wszystkim, który pokazałem, polega na tym, że wykonuję żądanie do bazy danych w każdym żądaniu HTTP (to znaczy w każdym wywołaniu jednej z moich akcji). Nie jestem też zadowolony z tabeli `UserCookies`, ponieważ trzeba ją wyczyścić i nie jest intuicyjna. Również wygenerowany `Guid` nie jest bezpieczny. Wiem, że **jak źle** to wszystko jest, ale... Nie potrafię wymyślić eleganckiego sposobu na osiągnięcie tych samych korzyści. Główną korzyścią z tego jest to, że mam dostęp do `currentUser` w każdej akcji, więc mogę łatwo robić takie rzeczy: if (!currentUser.Privileges.Any(p => p.Privilege == PrivilegesEnum.Blah)) { (...) } Mam również dostęp do `currentUser` we wszystkich moich widokach. Pytania: 1. Jaki jest najczęstszy sposób osiągnięcia tego w prawdziwym profesjonalnym oprogramowaniu? 2. Jeśli chciałem używać cache (jak Redis), czy muszę dużo zmieniać w przedstawionym scenariuszu? 3. Jeśli używam pamięci podręcznej, czy powinienem przechowywać tylko `userId` zamiast całego obiektu User?


title: Coraz większe zmiany/wymagania użytkowników w metodyce Agile

text: Moje pytanie jest dość proste. Jak poradzić sobie w sytuacji, gdy zespół stosuje metodykę zwinną w projektach oprogramowania i jest tak wiele iteracji i zmian wymagań, że harmonogram ma duży wpływ? Dodatkowo masz swojego przełożonego, który zawsze chce, aby coś zostało zrobione zgodnie z harmonogramem i jest to coś, czego nie możesz kontrolować?


title: Testowanie a kontrola jakości – wyniki?

text: Próbowałem znaleźć odpowiednie źródło informacji do powyższego, ale mi się nie udało. Jakie są wyniki testowania oprogramowania? Niektórzy mówią, że jest to „lista błędów”, inni mówią „odpowiedz, czy oprogramowanie jest zgodne z tym, czego chciał klient”. Wiem, że testowanie jest częścią QA, ale nie jestem pewien, jaki jest jego cel i wynik w tym kontekście.


title: Kiedy stosować podejście programowania funkcyjnego, a kiedy nie? (w Javie)

text: załóżmy, że mam zadanie stworzenia `Zestawu` nazw klas. Aby usunąć duplikację wywołań metody `.getName()` dla każdej klasy, użyłem `org.apache.commons.collections.CollectionUtils` i `org.apache.commons.collections.Transformer` w następujący sposób: _Snippet 1:_ Set< String> myNames = new HashSet<String>(); CollectionUtils.collect( Arrays.<Class<?>>asList(My1.class, My2.class, My3.class, My4.class, My5.class), new Transformer() { public Object transform(Object o) { return ( (Klasa<?>) o).getName();} }, myNames); Alternatywą byłby ten kod: _Snippet 2:_ Collections.addAll(myNames, My1.class.getName(), My2.class.getName(), My3.class.getName(), My4.class.getName(), My5 .klasa.getNazwa()); Tak więc, kiedy korzystanie z podejścia do programowania funkcyjnego jest narzutem, a kiedy nie i dlaczego? Czy moje użycie podejścia do programowania funkcyjnego w _snippet 1_ nie jest narzutem i dlaczego?


Jak często sprawdzają się niefortunne stereotypy związane ze starszymi technikami? Kiedy ludzie zadomowią się w karierze — czy ludzie tracą pasję do uczenia się nowych rzeczy? Czy ludzie czują się komfortowo i utknęli z jednym zestawem umiejętności i niezdolni do zmiany? **Jak często to się zdarza?** Nie chcę być obraźliwy z tym pytaniem. Znam wielu wykwalifikowanych starszych programistów. Ale czasami widzisz „tryb porażki”, kiedy ludzie czują się zbyt komfortowo w swojej pracy, umiejętnościach i stylu życia – zbyt bardzo, że irytują ich myśl o konieczności nauczenia się czegoś nowego. Widzę to i śmiertelnie się boję, że mi się to przydarzy. Chcę podkreślić, że myślę, że istnieje również „tryb porażki” dla młodzieży – nie mający tak naprawdę doświadczenia, aby wiedzieć, jak wykonać projekt. Tryb porażki „młodości” może być gorszy niż ten, który opisuję. Myślę, że najlepsze zespoły mają zarówno juniorów, jak i seniorów. Czy tylko przerabiam stare, błędne stereotypy? Czy jest coś, przed czym należy się wystrzegać, kiedy zaczyna się karierę? A może jestem tylko kolejnym młodym programistą, który stara się powstrzymywać staruszka?


title: Czy git skomle, jeśli stworzę swoje projekty w wielu katalogach?

text: Jestem nowy w git (i github). Pracuję w Javie i Pythonie. Obecnie zarządzam swoimi projektami tylko w jednym katalogu - nazwijmy go `Kodem`, a folder znajduje się na moim Pulpicie. Chcę pogrupować swoje projekty według języka, w którym koduję. Czyli chcę: /Code/ ++ /Java/ ++ /Python/ Nie wiem, czy Git byłby z tego zadowolony, czy nie. Jeśli tak, jaki powinien być mój katalog domowy? A jak mam nim zarządzać za pomocą mojego konta github? Na przykład tworzę nowe repozytorium na GH dla `new-project` w Pythonie (ale mam już pliki na moim lokalnym komputerze w `/Code/Python/new-project`), jak mam zatwierdzić pliki do GH upewnia się, że inne katalogi nie są pomieszane? EDYCJA: Żeby było jasne, mam niepowiązane projekty w `/Code/project_1`, `/Code/project_2`, `/Code/project_3` itd. Ale chcę je uporządkować jako `/Code/Java/project_1`, `/Kod/Java/projekt_1`, `/Kod/Python/projekt_1` itd.


title: jak działają samouczki na żywo, np. http://try.mongodb.org/ i http://try.redis.io/

text: Zastanawiałem się, jak działają http://try.redis.io/, http://try.mongodb.org/ itp.? Czy mają jedną aktywną (dedykowaną) sesję użytkownika na serwerze na sesję użytkownika w sieci?


title: Infrastruktura leżąca u podstaw czegoś podobnego do Code School

text: Pracuję nad przedsięwzięciem podobnym do Code School: zawiera edytor kodu (obecnie używam edytora ACE) i opcję "Run" w czasie rzeczywistym. Nie mam pojęcia, jak działa z tym Code School... myślałem o stworzeniu/zniszczeniu maszyn wirtualnych na Amazon dla każdego ucznia, ale byłoby to bardzo drogie. A może działa w aplikacji, która deleguje wykonanie do wielu różnych komputerów? A co z bezpieczeństwem?


title: Zarządzanie tajnym repozytorium SVN

text: Projekt, nad którym pracuję, jest w wersji kontrolowanej przez SVN, a niewypowiedziana zasada w pracy polega na zatwierdzaniu tylko wtedy, gdy zostanie dodana nowa stabilna funkcja (aby mieć „czystą” historię wersji bez przywracania), więc czasami pracuję dla kilka dni bez zobowiązań. Jednak jestem trochę maniakiem commitów (kilka commitów dziennie w moich poprzednich projektach git) i ten przepływ pracy mi nie odpowiada. Idealnie chciałbym rozwidlić projekt, zatwierdzić niestabilną wersję w „repozycie okrętów podwodnych” i połączyć się ze stabilnym, gdy tylko funkcja jest wystarczająco stabilna (moje niestabilne zatwierdzenia nie mogą pojawić się w stabilnym repozytorium). W jaki sposób mogę to zrobić ? Z SVN: szukałem gałęzi dostawców i zewnętrznych, ale tak naprawdę nie znalazłem tego, czego chcę. Z Git: czy można używać Git w tajnym niestabilnym repo i SVN dla stabilizowanego repo bez konfliktów między dwoma CVS podczas fuzji?


title: Wysoko obciążony serwer Java do gry wieloosobowej

text: Tworzę grę wieloosobową. Teraz staram się wybrać technologię podłączenia urządzeń z systemem Android do serwera. Klienci działają na Androidzie, a gra to MMORPG. Chciałbym napisać serwer w javie. W tej chwili mam tylko 3 pomysły na to: _**1) stworzenie środowiska wielowątkowego ze zwykłym java i socketami. W ten sposób łatwiej będzie wykonać pełnodupleksowe połączenie między klientem gry a serwerem. Ale mam następujące obawy:_** 1.1) Gra to MMORPG z dużą liczbą obiektów i nie jestem pewien, jak takie rozwiązania są skalowane, jeśli w tym samym czasie gra np. 5000 osób. Ile wątków będę mógł uruchomić na maszynie java? Jak mogę to w przybliżeniu obliczyć? W przypadku, gdy 1 wątek czyta dla każdego gniazda i 1 wątek pisze do gniazda (czyli 2 wątki dla 1 gracza). 1.2) Kiedy liczba graczy wzrośnie, w jaki sposób będę mógł skalować moje napisane przez siebie archiwum jar, aby rozmieścić je na kilku serwerach? Może jest jakaś specjalna sztuczka, żeby to zrobić? 1.3) Dużo narzutu programistycznego - Socket API jest dość niski. _**2) Tworzenie interfejsu Servlet do obsługi żądań HTTP._** 2.1) Łatwe kontrolowanie sesji (i autoryzacja) tak długo, jak każdy gracz ma swoją własną sesję. 2.2) może łączyć się z java EE EJB lub czymkolwiek - wiele komplikacji związanych z programowaniem na poziomie systemu jest usuwanych. Mogę więc skoncentrować się na pisaniu logiki biznesowej. 2.3) Może obsługiwać wszystkie typy klientów z HTTP - urządzenia mobilne + przeglądarki. 2.4) Wysoka prędkość - nawet 1 kontener serwletów może obsłużyć kilka tysięcy żądań na sekundę, więc będzie to naprawdę szybkie. 2.4) Ale to podejście nie może zapewnić komunikacji w pełnym dupleksie. Będę musiał wysyłać prośby co 1 sekundę, aby sprawdzić dostępność aktualizacji. 1-sekundowe opóźnienie nie ma większego znaczenia dla gry, ponieważ jest to gra turowa, ale mimo to generuje duży ruch. Czy to możliwe, gdy gra wielu graczy? Słyszałem o jakiejś technologii COMET, ale wygląda na to, że jeśli serwer musi wysyłać wiele wiadomości z rzędu, nadal będę musiał wysyłać żądania za każdym razem + ta technologia nie jest jeszcze dobrze ugruntowana. _**3) Tworzenie gniazd i łączenie ich przez JMS z serwerem java EE._** 3.1) Fajnie, ponieważ pozwala na pełną dupleksową komunikację między klientami a serwerem + zapewnia wszystkie fajne funkcje java EE. Później można ją rozszerzyć na przeglądarkę poprzez interfejs serwletu. 3.2) Wygląda na to, że jest to przesada. Czy naprawdę tak ludzie by to zrobili? Chodzi mi o to, czy to w ogóle właściwy sposób? Czy jakikolwiek rozsądny programista zrobiłby to w ten sposób? Proszę o pomoc w wyborze. Nie mam dużego doświadczenia w wykonywaniu takich prac. I chciałbym trzymać się najlepszych praktyk.


title: Co robisz, gdy ktoś uważa, że kod nie jest wystarczająco skomplikowany?

text: Po sześciu miesiącach opracowywania projektu nasi interesariusze przeszli „kontrolę intuicyjną” i zdecydowali, że ścieżka, którą podążamy (niestandardowo zaprojektowana struktura aplikacji i warstwa dostępu do danych) powstrzymuje nas (programistów) przed szybko rozwijając funkcje, które chcieliby zobaczyć. Po kilku dniach zarządzania debatą i zespołem programistycznym zdecydowali się odrzucić obecne wcielenie i zacząć od nowa korzystać z ASP.net MVC, z Entity Framework jako podstawy „szybkiego i brudnego” projektu, po prostu zajmijmy się projektem. W ciągu kilku dni nasz starszy programista, który nigdy nie pracował z MVC ani Entity Framework, w końcu dostał się do przykładowego projektu i wykonał trochę pracy. Jego podejście do ASP.net MVC, „to nie jest inżynieria oprogramowania”. Więc moje pytanie jest takie; co robisz, gdy ktoś uważa, że kod nie jest wystarczająco skomplikowany?


title: Wartość wartownika Unicode, której mogę użyć?

text: Projektuję format pliku i chcę to zrobić dobrze. Ponieważ jest to format binarny, pierwszy bajt (lub bajty) pliku _nie_ powinien tworzyć prawidłowych znaków tekstowych (tak jak w nagłówku pliku PNG1). Dzięki temu narzędzia, które nie rozpoznają formatu, mogą nadal widzieć, że nie jest to plik tekstowy, patrząc na pierwsze kilka bajtów. Każdy punkt kodowy powyżej `0x7F` jest nieprawidłowy dla US-ASCII, więc jest to łatwe. Ale dla Unicode to zupełnie inna historia. Oprócz prawidłowych znaków Unicode istnieją _znaki do użytku prywatnego_ , _znaki bez znaków_ i _wartowniki_ , jak znalazłem w FAQ znaków Unicode do użytku prywatnego, bez znaków i strażników. **Jaka byłaby sekwencja wartownicza bajtów, której mogę użyć na początku pliku, która spowodowałaby nieprawidłowe US-ASCII, UTF-8, UTF-16LE i UTF-16BE?** * Oczywiście pierwszy bajt nie może mieć wartość poniżej „0x80”, ponieważ byłaby to prawidłowy znak US-ASCII (kontrolny), więc nie można użyć „0x00”. * Ponadto, ponieważ _znaki do użytku prywatnego_ są prawidłowymi znakami Unicode, nie mogę również użyć tych punktów kodowych. * Ponieważ musi działać zarówno z little-endian, jak i big-endian UTF-16, _nieznak_ taki jak `0xFFFE` również nie jest możliwy, ponieważ jego odwrotność `0xFEFF` jest prawidłowym znakiem Unicode. * Wspomniane powyżej FAQ sugeruje, aby nie używać żadnych _nieznaków_, ponieważ to nadal skutkowałoby prawidłową sekwencją Unicode, więc coś w rodzaju `0xFFFF` również nie wchodzi w grę. Jakie byłyby przyszłe wartości wartownicze, które pozostałyby mi do wykorzystania? * * * 1) Format PNG ma jako pierwszy bajt wartość spoza ASCII `0x89`, po której następuje ciąg `PNG`. Narzędzie, które odczytuje kilka pierwszych bajtów pliku PNG, może określić, że jest to plik binarny, ponieważ nie może zinterpretować „0x89”. Z drugiej strony plik GIF zaczyna się bezpośrednio od prawidłowego i czytelnego ciągu ASCII `GIF`, po którym następują trzy kolejne prawidłowe znaki ASCII. W przypadku GIF narzędzie może określić, że jest to czytelny plik tekstowy. To jest błędne, a pomysł rozpoczęcia pliku z nieteksturową sekwencją bajtów pochodzi z Designing File Formats autorstwa Andy'ego McFaddena.


title: Pytanie o zmianę kariery: przejście od analityka systemów do rozwoju systemów wbudowanych

text: Jak powinienem przejść od wykonywania pracy typu help desk do tworzenia oprogramowania wbudowanego lub innego rodzaju rozwoju, który jest wykonywany na niższym poziomie? W końcu skończę studia w grudniu i naprawdę chcę zacząć budować systemy. Mój stopień to informatyka stosowana. Brałem udział w zajęciach w Assemblerze, C++, VB.NET i Javie, ale nie mogłem ich używać w dużym stopniu w żadnej z moich prac. Jeśli ktoś ma radę, jak przejść do dziedziny programowania wbudowanego, byłoby świetnie.


title: Najszybszy sposób na znalezienie najbliższego punktu

text: Mam listę w Pythonie 2.7 około 10000 współrzędnych punktów, np. [(168, 245), (59, 52), (61, 250), ... (205, 69), (185, 75)] Czy istnieje szybszy sposób wyszukiwania wszystkich punktów w obwiedni, zamiast po prostu iterować za każdym razem po całej liście i sprawdzać, czy koord znajduje się wewnątrz 4 stron? Używam tego "algorytmu", aby sprawdzić, czy jakikolwiek punkt, który porusza się losowo, nie znalazł się w stacjonarnym polu ograniczającym ... (jeśli to pomaga)


Który język programowania jako pierwszy wprowadził „Hello World” jako pierwszy program do programowania dla początkujących?


title: Wyzwania podczas rozmowy kwalifikacyjnej

text: Nie jestem do końca pewien, czy to tutaj należy, więc w razie potrzeby możesz go przenieść/zamknąć. Pewnego dnia, na naszej lekcji PHP, nasz nauczyciel dał nam wyzwanie, które jego znajomy wykorzystał podczas rozmów kwalifikacyjnych. Działa w każdym języku programowania, więc nie ogranicza się do PHP. Powiedział, że jego przyjaciel używa tej „zagadki”, aby wyeliminować ludzi, którzy nie mogą wymyślić szybkiej odpowiedzi, jeśli chodzi o logiczne wyzwania. Oczywiście ludzie, którzy tego nie rozwiążą, nie dostaną pracy. Zagadka wygląda następująco: $a = 3; $b = 7; echo "a = $a"; // musi stać się 7 echo "<br />"; echo "b = $b"; // musi stać się 3 Zasadniczo musisz zamienić zawartość obu zmiennych bez robienia żałosnych rzeczy, takich jak `$b = $a + 4`. **Nie możesz** użyć zmiennej tymczasowej! Walczyłem z tym, muszę to przyznać; Byłem jak „ooo tak”, kiedy w końcu otrzymaliśmy odpowiedź. Nie chcę tego nikomu zepsuć, więc zamiast publikować rozwiązanie, wstawię link. Teraz, jeśli chodzi o moje pytanie. Zastanawiałem się, czy jest więcej takich zagadek, których ludzie (czyli ty, SO) używają podczas rozmów kwalifikacyjnych itp. Może nawet nieco trudniejszych niż ta. Moim celem jest trochę wytrenować moje logiczne myślenie i poprawić się w rozwiązywaniu takich problemów. Może są jakieś książki lub strony internetowe poświęcone takim rzeczom?


title: Jakie pytania dotyczące frameworków webowych powinienem zawrzeć w mojej pracy?

text: Jestem zajęty pracą nad moją pracą magisterską o Web Development Frameworks. Chcę napisać o frameworkach, które były używane w przeszłości i frameworkach, które mają duże szanse na przetrwanie w przyszłości, takich jak na przykład JQuery i PrimeFaces. Chcę również przeprowadzić ankietę i szukam dobrych pytań do zadania w tej ankiecie. Moje pytania to pytania, na które sami programiści są najbardziej zainteresowani odpowiedziami i jakie według Ciebie byłyby dobre pytania w tej ankiecie? Na przykład zastanawiałem się nad podaniem listy aktualnych technologii i umożliwieniem oceny od 1 do 10, aby wskazać, które preferują najbardziej.


title: Czy istnieje wzorzec lub struktura logiczna, którą mogę zastosować w przypadku numerów dziennika zdarzeń?

text: Jakie są pomysły lub struktury, których mogę użyć podczas przypisywania EventID do zdarzeń, które zostaną zapisane w Dzienniku zdarzeń Windows? ![tutaj podaj opis obrazka](http://i.stack.imgur.com/UT2UA.png) Niektóre opcje, które brałem pod uwagę * Sekwencyjny (0... int.Max) * Wielokrotność 10, gdzie „0 ” jest zastępowane poziomem szumu ustawionym debugLevel. xxx0 może reprezentować wyjątki, krytyczne informacje, start, stop itp. * ...? Jakie podejście do numerowania daje największy wgląd, gdy użytkownik opisuje zdarzenie w e-mailu lub telefonie? Co jest najbardziej przydatne do wsparcia personelu?


title: Dobre wykorzystanie bloków próbnych?

text: Zawsze zmagam się z tym… próbując znaleźć właściwą równowagę między próbą/złapaniem, a kodem, który nie staje się tym nieprzyzwoitym bałaganem tabulatorów, nawiasów i wyjątków wyrzucanych z powrotem na stos wywołań jak gorący ziemniak. Na przykład mam aplikację, którą opracowuję w tej chwili, która używa SQLite. Mam interfejs bazy danych, który abstrahuje wywołania SQLite i model, który akceptuje rzeczy do wejścia/wyjścia z bazy danych... Więc jeśli/kiedy wystąpi wyjątek SQLite, musi zostać rzucony do modelu (który go nazwał ), kto musi przekazać go temu, kto wywołał AddRecord/DeleteRecord/cokolwiek... Jestem fanem wyjątków, w przeciwieństwie do zwracania kodów błędów, ponieważ kody błędów można zignorować, zapomnieć itp., podczas gdy wyjątek zasadniczo ma do załatwienia (przyznaję, _mógłbym_ złapać i natychmiast ruszyć dalej...) Jestem pewien, że musi być lepszy sposób niż to, co mam teraz. **Edytuj:** powinienem był sformułować to trochę inaczej. Rozumiem, że ponownie rzucam jako różne typy i takie, sformułowałem to kiepsko i to moja wina. Moje pytanie brzmi... jak najlepiej zachować czystość kodu? Po jakimś czasie zaczyna mi się wydawać, że jest to bardzo zagracone.


title: Czy używasz debugowania w aplikacji railsowej? Dlaczego, kiedy i jak?

text: W Javie, C i C++ widzę ludzi stosujących intensywnie strategie debugowania (bo przeważnie nie wiedzą o TDD). Z drugiej strony debugowanie również może pomóc w zrozumieniu abstrakcji oprogramowania. Więc kiedy i jak używasz debugowania w aplikacjach Railsowych?


title: Co oznacza „czytelny dla człowieka”? Czy to myląca nazwa?

text: Przychodzą mi na myśl dwa przykłady: * Jednym z powodów, dla których programiści .Net są zachęcani do używania plików .config zamiast rejestru systemu Windows, jest to, że pliki .config są XML, a zatem czytelne dla człowieka. * Podobnie JSON jest czasami uważany za czytelny dla człowieka w porównaniu z formatem zastrzeżonym. Czy formaty czytelne dla człowieka są rzeczywiście czytelne dla ludzi? W przykładzie danych konfiguracyjnych: 1. Format nie zmienia podstawowego znaczenia informacji - w obu przypadkach dane reprezentują to samo. 2. Zarówno rejestr, jak i plik .config są przechowywane wewnętrznie jako serie 0s i 1s. Do tego stopnia, podstawowa reprezentacja jest równie nieczytelna dla ludzi. 3. Zarówno rejestr, jak i plik .config wymagają narzędzia do odczytywania, formatowania i wyświetlania tych zer i jedynek oraz konwertowania ich do formatu, który może odczytać człowiek. W przypadku konfiguracji przechowywanej w Rejestrze Windows jest to Edytor Rejestru. W przypadku XML może to być edytor tekstu lub czytnik XML. Tak czy inaczej, narzędzie umożliwia odczytywanie danych, a nie formatu danych. Jaka jest więc różnica między formatami danych czytelnymi dla człowieka a formatami, które nie są czytelne dla człowieka?


title: Daj radę od doświadczonego do początkującego programisty na temat ponownego wymyślenia mojego koła (rozwiązania)

text: Właśnie próbowałem wykonać ćwiczenie z kodowaniem nietoperza. Opublikowane są rozwiązania problemu, który próbowałem rozwiązać. Byłem jednak uparty, zignorowałem je i próbowałem zakodować to po swojemu (w zasadzie wymyśliłem na nowo własne koło - kwadratowe, źle działające koło). Po 4 godzinach wygląda paskudnie i nie przechodzi niektórych testów. Teraz zdaję sobie sprawę, że moja logika była całkowicie błędna i marnotrawna. A więc pytanie: * Kiedy zaczynasz rezygnować z rozwiązywania problemu po swojemu (wynajdywanie koła na nowo) i zaczynasz się rozglądać, aby zobaczyć inne rozwiązanie? * Jak długo programista powinien być „uparty” w poszukiwaniu „unikalnego” lub skomplikowanego rozwiązania? * Kiedy się poddajesz i zaczynasz szukać innej logiki?