title: Jakie są dobre praktyki, gdy próbujemy uczyć programowania deklaratywnego programistów imperatywnych?

text: Zaproponowałem, że odbym małe szkolenie z F# w mojej firmie i wydawało się, że okazali pewne zainteresowanie. Są to generalnie programiści VB6 i C#, którzy nie kierują się programowaniem z zbytnią pasją. Mając to na uwadze, czuję, że łatwiej jest napisać poprawny kod, gdy myślisz o sprawach funkcjonalnych, więc zdecydowanie powinni z tego skorzystać. Czy ktoś może udzielić porady, jak mam do tego podejść? **Pomysły** * Nie skupiaj się na składni, zamiast tego skup się na tym, jak można używać tego języka i promowanych przez niego idiomów. * Spróbuj pomyśleć o przykładach, które są trudne do pisania w sposób imperatywny, ale przekładają się na elegancki kod, gdy są pisane w sposób deklaratywny.


title: Czy jestem objęty GPL, jeśli chcę udostępnić kod open source projektu opracowanego w mojej firmie?

text: Pracuję w firmie iw mojej umowie o pracę są klauzule poufne dotyczące kodu, dokumentów itp. W firmie pracujemy nad projektem open source (GPL V3). Projekt nie jest jeszcze udostępniony opinii publicznej. Czy mam prawo udostępniać kod projektu osobom (spoza firmy)?


title: Czy umowa o ustalonym zakresie + ustalony termin + ustalona cena może kiedykolwiek działać w trybie „agile”?

text: Niektóre projekty, które prowadzimy wewnętrznie przy użyciu scrum, wciąż „wszystko naprawiamy” dla klienta. Mieszany sukces z naszej strony (klientowi podoba się widoczność wykresu spalania). Jakieś doświadczenia związane ze stałymi cenami z Agile?


title: Jak radzić sobie z częstymi zmianami wymagań?

text: Mam do czynienia z dość stresującą (moim zdaniem) sytuacją w moim obecnym miejscu pracy. Zaczęliśmy tworzyć nowy projekt, pozyskać wymagania, zaimplementować go, a następnie pokazać komuś, kogo możesz nazwać „doradcą biznesowym” (osoba, która zna wymagania biznesowe, ale nie będzie korzystać z programu). Ta osoba ma za zadanie ocenić aplikację z punktu widzenia klienta, przetestować ją itp. Oto jak wygląda ten „proces”: 1. doradca biznesowy rozmawia wieczorem z moim szefem przez godzinę lub dwie na komunikatorze windows 2. następnego dnia otrzymuję e-mail z kopią tej rozmowy. Mam z tego wybrać zadania, sprawdzić zgłoszone błędy (które często nie są błędami, tylko kiepskie testowanie i zapominanie o przeszłych założeniach) 3. Wprowadzam zmiany, implementacja zostaje zaakceptowana i za tydzień lub dwa okazuje się, że jest nie chcą, że chcą (rozmawiali z jakimś potencjalnym klientem, który widział oprogramowanie przez 5 minut i zasugerował zmiany) - muszę wprowadzać nowe zmiany Nie zrozum mnie źle, rozumiem, że czasami wymagania się zmieniają. To, co mnie denerwuje, to to, jak często zmiany zachodzą w moim miejscu pracy i jak łatwe do „zarządzania” jest wprowadzenie nowych wymagań lub czasami fundamentalnych zmian w istniejących funkcjach. Jednocześnie pracujemy w napiętych terminach i mam wrażenie, że zamiast iść naprzód z naszym oprogramowaniem kręcimy się w kółko. Proszę o radę jak poradzić sobie z tą sytuacją? Czy to normalna sytuacja i jestem na to po prostu nadwrażliwy?


title: Dlaczego wzór Flyweight jest praktyczny?

text: Czytałam wzorce projektowe, aby lepiej zrozumieć te, które znam i ujawnić te, których nie znałam. Jednym z ostatnich, na który patrzę, był wzór wagi muszej. Naucza o wspólnej, wspólnej funkcji i rozumiem to. Trzymając się przykładu gry (w linku), udostępnianie funkcji jednostkom w RTS na pewno zaoszczędziłoby na pamięci. Ale czy nie poświęciłoby to dużo [szybkości] wydajności? Trzymając się motywu RTS, załóżmy, że masz 300 jednostek na polu, wszystkie mają tę samą funkcję uruchamiania, czy nie byłby to koszmar asynchroniczny? A gdyby ktoś wykonał to w trybie in-line (być może za pomocą silnika w stylu step/render), czy nie spowodowałoby to zablokowania procesora?


title: Czy książka, która uczy, jak budować kompilatory, jest dobra do nauki implementacji tłumaczy?

text: Szukam książki, w której dowiesz się, jak zaimplementować interpretery dla języków programowania. Rzecz w tym, że „książek kompilatorów” jest znacznie więcej niż „książek tłumacza”. Więc moje pytanie brzmi: czy mogę przeczytać książkę, która uczy, jak budować kompilatory, aby nauczyć się budować interpretery (na bardzo początkującym poziomie)? Czy to dobry pomysł? Jeśli tak, o czym muszę pamiętać podczas czytania?


title: ROA na szczycie SOA

text: Mam już stabilną architekturę zorientowaną na usługi dla mojej aplikacji, która udostępnia usługi jako wywołania API. (czasowniki) Teraz muszę zbudować architekturę zorientowaną na zasoby, aby udostępnić RESTful API do interakcji z obiektami aplikacji. (rzeczowniki) Jakie są najlepsze praktyki ponownego wykorzystania istniejących usług: \- bez trwałości w moim nowym kodzie. \- bez umieszczania niepotrzebnej logiki w warstwie REST, czyli najlepiej po prostu wykorzystać usługi dostarczane przez SOA API. Chcę, żeby ta warstwa była jak najcieńsza. \- bez modyfikowania istniejącego SOA API \- pozwalają na łatwe rozszerzenie REST API, tzn. powinno być łatwe dodawanie większej ilości zasobów bez zmiany (jeszcze do napisania) kodu rdzenia. (Chcę, aby nazwy zasobów i powiązane z nimi akcje można było konfigurować, aby więcej współtwórców mogło łatwo dodawać zasoby bez konieczności rozumienia mojego modułu) Jakieś porady/sugestie, jak to osiągnąć? **Edytuj: Dodaję więcej informacji** **Mój stos:** * Moje istniejące stosy są w Javie. Ale ponieważ planuję tylko korzystać z usług, nie sądzę, że powinno to wpłynąć na projekt nowego kodu REST. * Planuję zaimplementować nowy kod REST w PHP. **Jak dobrze usługi mapują się na zasoby?** Niektóre usługi są dobrze mapowane, np. istnieją usługi do tworzenia, aktualizowania obiektów aplikacji. Ale w przypadku innych obiektów aplikacji nie ma dostępnych usług bezpośrednich. _Co ważniejsze_ , istnieją działania wykraczające poza tworzenie, aktualizowanie itp., które dotyczą obiektów aplikacji. I chciałbym podać jakiś sposób na ujawnienie tych działań przez REST. Skoro to są czasowniki, jak sobie z nimi radzić? **Gdzie dokładnie potrzebuję pomocy?** Byłbym wdzięczny za wszelką pomoc przy projektowaniu na wysokim poziomie, aby wykonać zadanie wraz z rozszerzaniem frameworka. Na przykład jutro do mojej warstwy SOA zostaną dodane nowe usługi, chcę się upewnić, że początkujący programista będzie mógł łatwo napisać wywołanie REST, po prostu rejestrując nowy zasób (w pliku konfiguracyjnym/db) i pisząc kod dla łączenie go z połączeniami SOA. Podobnie jak wtyczka.


title: Konfiguracja DI w aplikacji oddzielonej

text: Czytam _Dependency Injection w .NET_ Marka Seemana (do tej pory znakomicie przeczytany) i coś mi wymyka. Jeśli architektura aplikacji jest taka jak `[DAL] => [BLL] <= [UI]`, z warstwą logiki biznesowej wolną od zależności od warstw dostępu do danych i interfejsu użytkownika (i obu zależnych od LOGIKI biznesowej), oraz jeśli _composition root_ znajduje się w warstwie interfejsu użytkownika, to jak u licha mamy być w stanie powiązać interfejs typu w LOGO z implementacją, która jest w DAL? Mark Seeman podaje ładny, typowy przykład: klasa abstrakcyjna `ProductRepository` znajduje się w LOGIKA BIZNESOWA, a klasa `SqlProductRepository` w DAL. Może to brzmieć jak głupie pytanie, ale w jaki sposób warstwa interfejsu użytkownika ma być w stanie powiązać `ProductRepository` z `SqlProductRepository` bez odniesienia do DAL? > Przenoszę wszystkie kontrolery i modele ViewModels z warstwy interfejsu użytkownika do warstwy > Model prezentacji, pozostawiając tylko widoki (pliki .aspx i .ascx >) oraz ROOT KOMPOZYCJI w warstwie interfejsu użytkownika. Chodzi o to, że jestem prawie pewien, że ten facet wie, o czym mówi, więc jaką część przegapiłem? Również gdzie musiałbym umieścić korzeń kompozycji w przypadku projektu biblioteki klas? Na początku myślałem, że LOGO będzie idealne (biorąc pod uwagę `[DAL] <= [BLL] => [UI]`), ale teraz, gdy zrefaktorowałem mój projekt, aby dosłownie odwrócić zależności, już nie wiem - Kiedyś miałem BLL, który wiedział o warstwie DAL i UI, więc wiązanie typów tych warstw było łatwe, teraz nikt już nie wie o wszystkich, to tak, jakbym nie miał nigdzie, w którym mógłbym umieścić root kompozycji. Pomóż mi tutaj, czuję, że brakuje mi fundamentalnego kamienia węgielnego...


title: Jak skompresować plik z wieloma bajtami, które są takie same z kodowaniem Huffmana?

text: W mojej wielkiej dążeniu do kompresji/dekompresji plików z implementacją Java kodowania Huffmana (http://en.wikipedia.org/wiki/Huffman_coding) do zadania szkolnego, jestem teraz na etapie tworzenia listy **przedrostków kody**. Takie kody są używane podczas dekompresji pliku. Zasadniczo kod składa się z zer i jedynek, które są używane do podążania ścieżką w drzewie Huffmana (w lewo lub w prawo), aby ostatecznie znaleźć bajt. Na tym obrazie w Wikipedii, aby osiągnąć znak `m`, kod prefiksu powinien wyglądać tak: `0111` ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/ah9kI.png) Chodzi o to, że kiedy skompresuj plik, w zasadzie przekonwertujesz wszystkie bajty pliku na kody przedrostkowe (są one zwykle mniejsze niż 8 bitów, więc jest pewien zysk). Tak więc za każdym razem, gdy znak `m` pojawia się w pliku (który w binarnym to właściwie `1101101`), zostanie zastąpiony przez `0111` (jeśli użyliśmy powyższego drzewa). Dlatego „1101101110110111011011101101” staje się „0111011101110111” w skompresowanym pliku. Nie przeszkadza mi to. Ale co, jeśli wydarzy się co następuje: * W pliku, który ma być skompresowany, istnieje tylko jeden unikalny bajt, powiedzmy `1101101`. * Jest 1000 takich bajtów. Technicznie rzecz biorąc, kod przedrostka takiego bajtu to... **brak** , ponieważ nie ma ścieżki do naśladowania, prawda? Mam na myśli, że i tak jest tylko jeden **_unikalny_** bajt, więc drzewo ma tylko jeden węzeł. Dlatego jeśli kod prefiksu to **none** , nie byłbym w stanie zapisać kodu prefiksu w skompresowanym pliku, ponieważ, cóż, nie ma co pisać. Co sprowadza ten problem: **jak skompresować/zdekompresować taki plik, jeśli nie można napisać kodu przedrostkowego podczas kompresji?** (używając kodowania Huffmana, ze względu na zasady szkolnego zadania) Ten samouczek wydaje się nieco lepiej wyjaśniać kody prefiksów: http://www.cprogramming.com/tutorial/computersciencetheory/huffman.html, ale wydaje się, że również nie rozwiązuje tego problemu.


Pracuję nad czymś, co powinno być dość proste. 95% mojego programu działa, ale jeden element nadal nie spełnia wymagań. (FYI, to jest zadanie domowe, ale przed przyjazdem tutaj udowodnię, że włożyłem w to dużo wysiłku.) Fragment zadania: * Klasa ProductionWorker powinna zgłosić wyjątek o nazwie InvalidPayRate, gdy otrzyma liczbę ujemną dla stawkę godzinową lub jeśli wprowadzone dane nie są liczbowe. Mam moją logikę InvalidPayRate do przechwytywania liczb ujemnych, ale nie jestem zbyt pewien, jak zapewnić, że dane wejściowe są liczbowe. Oto odpowiedni kod: InvalidPayRate.java public class InvalidPayRate extends Exception { public InvalidPayRate(){ super("Błąd: Nieprawidłowa stawka płatności."); } } ProductionWorker.java void setHourlyPayRate(podwójna stawka) throws InvalidPayRate { if (stawka < 0.0){ throw new InvalidPayRate(); } this.hourlyPayRate = stawka; } test.java (jest to funkcja główna) //Ustaw szczegóły stawek try{ worker.setHourlyPayRate(-15.00); System.out.println(worker.getHourlyPayRate() + ": Prawidłowa stawka godzinowa"); } catch (InvalidPayRate e) { System.out.println(e.getMessage()); } try{ worker.setHourlyPayRate(20.00); System.out.println(worker.getHourlyPayRate() + ": Prawidłowa stawka godzinowa"); } catch (InvalidPayRate e) { System.out.println(e.getMessage()); } Ciąg testRate = "1v2.65"; try{ podwójna stawka = Double.parseDouble(testRate); pracownik.setHourlyPayRate(stawka); System.out.println(worker.getHourlyPayRate() + ": Prawidłowa stawka godzinowa"); } catch (InvalidPayRate e) { System.out.println(e.getMessage()); } W tej chwili działają 2 z 3 testów... prawidłowy wpis, wpis z liczbą ujemną (zwraca mój niestandardowy błąd), ale mój wpis nienumeryczny nie działa... daje standardowy błąd NumberFormatException. Jak mogę przeprowadzić test logiczny, aby upewnić się, że MY CUSTOM ERROR zostanie zgłoszony zamiast NumberFormatException?


title: Czy istnieją metodyki tworzenia oprogramowania dla małych zespołów?

text: Pracuję w dużej firmie programistycznej i opracowuję duże rozwiązanie internetowe na poziomie przedsiębiorstwa z zespołem około 25 osób (2 architektów, ~15 programistów, 5 inżynierów QA, kilku licencjatów, kierownik projektu). Stosujemy metodykę zwinną i scrum i wydaje się to całkiem wygodne dla tak dużego zespołu w sytuacji częstych zmian wymagań. Mam też jeden pet projekt - mam podstawowy pomysł i zacząłem rozwijać. Obecnie pracuję sam, ale planuję zaproponować kilku moim znajomym udział w moim projekcie. Jakiś czas temu spotkałem się z problemem prawidłowego śledzenia zadań i formalizowania wymagań. Moją pierwszą myślą było zastosowanie metodyki zwinnej, ponieważ używaliśmy jej w moim zespole w pracy. Chociaż jest to bardzo wygodne dla mojej pracy, uważam, że jest to zbyt czasochłonne dla zespołu składającego się z 1-3 osób. Czy istnieją metodyki tworzenia oprogramowania dla naprawdę małych zespołów? Czy też powinienem przezwyciężyć siebie i sformalizować wszystkie swoje myśli w historyjki użytkownika i zadania oraz użyć iteracji? Nie chcę, aby mój projekt stał się kolejnym folderem na moim dysku, ale nie chcę też tracić czasu na niepotrzebne formalizacje.


title: Śledź numery wyników

text: Mam (duży) projekt oprogramowania w repozytorium git. Istnieje pakiet testów, który wypluwa wiele liczb (czas na test, alokacje wykonane na test), które chciałbym śledzić. Jaki jest najlepszy sposób na opanowanie zamierzonych i niezamierzonych zmian wydajności w takiej konfiguracji? (Myślę, że najlepiej byłoby, gdyby istniało darmowe oprogramowanie, które pobiera repozytorium git, skrypt do uzyskiwania liczb, planuje zadania dla nowych zatwierdzeń, sprawdza również stare zatwierdzenia w stanie bezczynności i prezentuje zgrabny interfejs sieciowy z mnóstwem wykresów i analiz narzędzia.)


title: Czy wykonanie Parent.call z obiektu podrzędnego jest właściwym sposobem implementacji dziedziczenia w JavaScript?

text: Natknąłem się na ten fragment kodu, który nie wyglądał tak dobrze. Czy to właściwy sposób na zaimplementowanie SUPER w javascript. jeśli nie, jaka jest właściwa droga? function Osoba(imię){ this.name = nazwa; } function Student(imię){ Person.call(this, name); } Student.prototype = nowa Osoba(); var a = nowy Student('test'); var b = nowy uczeń('test2');


title: Czy używanie Git Stash jako przepływu pracy jest antywzorcem?

text: Ostatnio przyglądałem się, jak ja i mój zespół używamy Git i jak działają nasze przepływy pracy. Obecnie używamy przepływu pracy dla funkcji, który wydaje się działać dobrze. Widziałem również, jak niektóre osoby w naszym zespole używają przepływu pracy opartego na git stash. Przepływ pracy wygląda mniej więcej tak: * Praca nad główną gałęzią (np. `master`) * Dokonuj zatwierdzeń na bieżąco * Jeśli potrzebujesz uzyskać zmiany lub przełączyć gałęzie, przenieś niezatwierdzone zmiany do schowka * Po zakończeniu aktualizacji, usuń zmiany ze skrytki. Powinienem wspomnieć, że ten przepływ pracy jest używany _zamiast_ przepływu pracy gałęzi funkcji. Zamiast brać gałąź i pracować nad nią, programiści tutaj pracują tylko na jednej gałęzi i wypychają/wyskakują ze stosu tak, jak uznają to za stosowne. Właściwie nie sądzę, że jest to świetny przepływ pracy, a rozgałęzianie byłoby bardziej odpowiednie niż używanie w ten sposób git stash. Widzę wartość git stash jako operacji awaryjnej, ale nie do używania jej w codziennym, regularnym przepływie pracy. Czy regularne używanie git stash byłoby uważane za anty-wzorzec? Jeśli tak, jakie konkretnie problemy mogą się pojawić? Jeśli nie, jakie są korzyści?


title: Czy należy unikać umieszczania tagów html w plikach lokalizacyjnych?

text:
Wszystkie części naszej strony internetowej lokalizujemy na wiele języków. Używamy plików lokalizacyjnych XML. Myślę, że ten scenariusz jest tak powszechny i nawet powinno być standardowe rozwiązanie tego problemu, ale wciąż nie mogłem znaleźć żadnej dobrej rady, a każdy deweloper ma na ten temat inne zdanie, więc pytam. **Zaproponuj następujący przykład:** _Jeśli masz pytanie, zapytaj naszego `<a href="blabla" target="_blank" title="Nasza miła obsługa klienta + szablonowe bzdury SEO">`Obsługa klienta` lub napisz e-maila do ``Jane Doe`` naszego specjalisty._ **Lub długi, sformatowany tekst:**
Bardzo długi, marketingowy bla bla. Bardzo długi, marketingowy bla-bla. Bardzo długi, marketingowy blah-blah kończący się na liście:

1

2

3

 ** 1) Czy umieściłbyś tagi html w pliku XML lokalizacji?** Martwię się, że widok jest **podzielony na 2 pliki**: Twoją stronę i plik lokalizacji. Ludzie zapomną sprawdzić plik lokalizacyjny. Ponadto, **jest też logika i styl osadzone w html** (patrz `target="_blank"`, lub fakt, że wspomniana wyżej lista jest nieuporządkowana...) **2) Lub dzielenie jej na mniejsze części? ** `<msg id="IfYouHaveQuestion">`Jeśli masz pytanie, zadaj pytanie`</msg>` `<msg id="CustomerSupport">`Obsługa klienta`</msg>` `<msg id=" OrWrite">"lub napisz e-mail do"</msg>" ... Teraz widok może zawierać wszystkie znaczniki i styl. Łatwo to zmienić, elastycznie. Ale. **Nie ma żadnej gwarancji**, że **szyk słów będzie taki sam** we wszystkich językach. Z tego powodu **praca tłumacza stałaby się koszmarem** , czyniąc z niej zagadkę. **3) Lub wprowadzić przecenę w stylu BB?** `<msg id="HaveQuestion">`Jeśli masz pytanie, zadaj nasz `[link url="{customersupportlink}" title="{{CustomerSupportTitle}}" >`Obsługa klienta`[/link]` lub napisz e-maila...`</msg>` Ale prawdopodobnie to zbyt komplikuje sprawę, a także musimy napisać własny parser do tego (chociaż myślę, że to nie byłoby takie trudne). I prawdopodobnie nie rozwiązuje problemu długiego, sformatowanego tekstu. **4) ??? (Tutaj złote rozwiązanie) :)**


title: Czy w projekcie MVC używam klasy bazowej przez interfejs?

text: W _web_ MVC większość projektów, które widziałem (wystarczy wybrać warstwę modelu jako przykład), klasa problemu domeny, powiedzmy, zawsze dziedziczy nadklasę „Model”. Nazwa nie ma znaczenia, ale dlaczego zawsze dziedziczą klasy zamiast interfejsów? Widziałem inne, które mają interfejs -> klasa abstrakcyjna -> klasa konkretna. Ale nie wiem, dlaczego miałbym wybrać klasę zamiast interfejsu. * Czy będę musiał wykonać coś w konstruktorze nadklasy w MVC? Jakaś inna metoda? * Nie znam żadnej wzajemnej funkcjonalności, która wymagałaby wcześniejszej implementacji, ale to chyba brak doświadczenia? Nie wiem. * Dlaczego nie tylko interfejs do egzekwowania mojego API? Widziałem inne odpowiedzi. Nie widziałem go jednak w _specyficznym kontekście MVC **design_** . Korzystanie z PHP, jeśli ma to znaczenie.


title: Czy w Node.js konstrukcje nieblokujące są zwykle lepsze od tych blokujących?

text: Czy poniższe zestawienie najlepszych praktyk w Node.js w odniesieniu do aplikacji internetowych? Jeśli nie, jak można by to poprawić? **Oświadczenie** Cykl życia dowolnej aplikacji internetowej ma co najmniej dwie fazy: fazę konfiguracji i fazę gotowości (kiedy aplikacja jest gotowa do odpowiedzi na żądania). W fazie gotowości 1. Operacje IO (dostęp do dysku , wywołania bazy danych itp.) powinny być zawsze asynchroniczne/nieblokujące. 2. Nawet operacje, które występują wyłącznie w pamięci, powinny być, jeśli to możliwe, asynchroniczne. Jest to szczególnie prawdziwe, gdy operacje obejmują iterację, a zwłaszcza^2 prawdziwe, gdy górna granica liczby iteracji jest nieznana. 3. Operacje synchroniczne/blokujące nigdy nie powinny być wykonywane w odpowiedzi na żądanie. Moim zdaniem na pytanie, czy coś jest częścią najlepszych praktyk programowania w określonym języku programowania, można odpowiedzieć zdecydowanie w oparciu o doświadczenie i obiektywne kryteria.


title: Podstawowe technologie dla starszego programisty (.NET)

text: Niedawno zostałem zwolniony, a teraz zamierzam skorzystać z okazji, aby dodać nowe technologie do mojego CV. Nie mam na myśli tylko dopełniania słowami kluczowymi; Mam na myśli tworzenie _prawdziwych_ (choć możliwie niewielkich), _użytecznych_ aplikacji, które wymagają ode mnie w procesie uczenia się nowej technologii. Mój wybór platformy jest trochę zagmatwany, ponieważ mam około 1-2 lata doświadczenia z około 10 językami/platformami (C++, Ruby, C#, Java, JEE, ASP.NET, Ruby, Rails, PHP, ... ). Mam nadzieję, że to pytanie będzie ogólne dla przynajmniej C#/Java, a może szerszego. **Jakie są absolutnie niezbędne technologie, o których powinienem się dowiedzieć, dla Javy i .NET?** Jako przykład, na podstawie mojego doświadczenia, przykład JEE to: Hibernate, Spring, Struts, EMMA, Ant, BEA WebLogic i Hudson. (Zauważ, że obejmują one całą gamę, od pisania i kompilowania kodu po budowanie i wdrażanie aplikacji.) **Edytuj:** Prawdopodobnie skończę w pracy programistycznej .NET (ASP.NET, MVC2, jeśli mam szczęście) . Tego właśnie szukam.


title: Czy w C++ SFINAE i metaprogramowanie były zamierzone, czy tylko produktem ubocznym szablonów?

text: Metaprogramowanie SFINAE i `szablonu` może robić wspaniałe rzeczy, a wiele bibliotek również w znacznym stopniu z nich korzysta. Historycznie oba te „magiczne koncepcje” zostały celowo wprowadzone/obsługiwane w C++ ? A może zostały później odkryte jako użyteczne produkty uboczne (produkty uboczne) oryginalnego programowania `szablonu`?


title: Obieg udostępniania kodu dla małych zespołów

text: Problem w tym, że opracowaliśmy mały CMS, który różni się w zależności od implementacji (obecnie). Oczywiście rozwój tego nigdy nie jest kompletny. Czasami pracujemy nad więcej niż jednym projektem, który go implementuje (kopiując i wklejając pliki kodu CMS do każdego projektu) i dodajemy nową funkcję, którą chcemy udostępnić również w innych projektach (mogą być one małe te też, czyli niestandardowy kontroler ajax JSON - używamy MVC) To, co chcemy zrobić, to szybko i jednolicie udostępnić kod wszystkim innym projektom, poprzez system kontroli wersji (lub coś podobnego) i ogólnie zorganizować przepływ pracy, jak wiemy to nie jest bardzo dobry przepływ pracy, który mamy. Co byś zasugerował? Ponadto w tej chwili używanym przez nas oprogramowaniem jest Visual Studio 2010, więc mocno rozważamy TFS, ale nawet jeśli go otrzymamy, nadal nie znamy idealnego przepływu pracy, ani nawet czy TFS obsługuje to, co chcemy zrobić. **Edytuj:** Pamiętaj też, że mamy konkretne implementacje, które mają modyfikacje w bazie CMS, które chcemy ZACHOWAĆ tylko w obszarze projektu. (tj: konkretna funkcja, której NIE chcemy dzielić z podstawowym kodem CMS)


title: Czy mogę używać interfejsu w stylu metro we własnej aplikacji internetowej?

text: Zastanawiam się, czy musiałbym licencjonować styl Metro, czy mogę po prostu swobodnie go używać we własnych aplikacjach. Chodzi mi o to, czy jest opatentowany lub chroniony w jakikolwiek sposób, który uniemożliwiłby mi zbudowanie własnej implementacji? Chciałabym skutecznie skopiować jego widoczną część. Podoba mi się pomysł, aby móc: * Zapewnić interfejs, który jest używany gdzie indziej (jak w 1 mniej do nauki) * Używać interfejsu, który został przetestowany pod kątem użyteczności (osobiście go lubię) * Mieć możliwość uzyskania bezpłatnej reklamy z powodu wdrożenia pełnej aplikacji internetowej w stylu Metro, która nie jest powiązana z firmą Microsoft itp.


title: Jak skonfigurować środowisko TDD

text: W TDD, czy dobrą praktyką jest trzymanie testów w tym samym katalogu, co kod, w którym są testowane, czy też lepiej oddzielić testy w innym katalogu lub w osobnym projekcie. Czy byłoby tak samo w przypadku witryny sieci Web, w której strony aspx/c# znajdują się w jednym katalogu?


title: Język programowania prostego programu?

text: Zastanawiam się, jakie języki programowania ludzie uważają za odpowiednie do stworzenia pomysłu na program, który miałem. Zamierzam stworzyć dość prosty program, którego głównymi funkcjami są dodawanie, zarządzanie i przeszukiwanie bazy danych osób, wszystko przez dopracowany GUI. Będzie do użytku w świecie biznesu, więc myślę, że Windows byłby priorytetem, ale obsługa Maców i Linuksa nie byłaby zła. Ponadto, docelowo chciałbym dodać możliwość interakcji instancji jednego programu na komputerze z innymi instancjami w tej samej sieci, głównie poprzez współdzielenie bazy danych. Większość mojego doświadczenia dotyczy Javy, ale nie podoba mi się wygląd graficznych interfejsów użytkownika Java, więc szukam alternatywy. Zauważyłem, że wiele osób sugerowało C++ lub C# w podobnych postach, więc jakie są zalety/wady jednego lub obu, jeśli jest to Twoja sugestia. Z góry dziękuję za wszelką pomoc.


title: Deklarowanie interfejsu w tym samym pliku co klasa bazowa, czy to dobra praktyka?

text: Aby być wymiennym i testowalnym, zwykle usługi z logiką muszą mieć interfejs, np. public class FooService: IFooService { ... } Projektowo się z tym zgadzam, ale jedną z rzeczy, która przeszkadza mi w tym podejściu jest to, że dla jednej usługi trzeba będzie zadeklarować dwie rzeczy (klasa i interfejs), aw naszym zespole zwykle dwa pliki (jeden dla klasy i jeden dla interfejsu). Kolejnym dyskomfortem jest trudność w nawigacji, ponieważ użycie „Przejdź do definicji” w IDE (VS2010) wskaże interfejs (ponieważ inne klasy odwołują się do interfejsu), a nie rzeczywistą klasę. Myślałem, że pisanie IFooService w tym samym pliku co FooService zmniejszy powyższą dziwność. W końcu IFooService i FooService są bardzo powiązane. Czy to dobra praktyka? Czy istnieje dobry powód, dla którego IFooService musi znajdować się we własnym pliku?


title: Czy bezpieczeństwo jest prawdziwym argumentem za scentralizowaną kontrolą wersji?

text: Próbuję zrozumieć, czy bezpieczeństwo jest prawdziwym problemem, czy też dystrybucja faktycznie lepiej radzi sobie z bezpieczeństwem. Widzisz, dostęp do głównego repozytorium źródłowego może być warstwowy i z natury zarządzany przez sieć zaufania i nadal może mieć scentralizowane zarządzanie użytkownikami integrujące użytkowników z LDAP/Active Directory, podczas gdy scentralizowany system kontroli wersji opiera się tylko na tym późniejszym. Dzięki dystrybucji dostęp mógłby być nawet przyznany mniejszej liczbie użytkowników na repozytorium w różnych krajach i łatwiej utrzymywany. Rozumiem, dlaczego łatwo jest myśleć, że posiadanie ścisłego i scentralizowanego zarządzania dostępem do repozytorium kodu przekłada się na bezpieczeństwo, jednak nie oznacza to, że kod nie może być dostępny lub rozpowszechniany w inny sposób. Ale czy istnieje prawdziwy argument/przypadek użycia/scenariusz dla bezpieczeństwa, w którym scentralizowany model jest po prostu lepszy niż rozproszony? **Pewny kontekst** : Próbuję zgłosić sprawę (za pomocą białej księgi) do mojej firmy, aby przejść na DVCS (mam już inne zidentyfikowane problemy, które są skutecznie rozwiązywane przez większość DVCS), a bezpieczeństwo jest jednym z argumentów Spodziewam się, że będę musiał usprawiedliwić. Moja firma jest jednak otwarta; obecnie korzystają z mocy i są rozmieszczone geograficznie.


title: Co robisz, jeśli projekt osiągniesz ślepy zaułek w metodach ewolucyjnych, takich jak Agile czy XP?

text: Kiedy czytałem słynny wpis na blogu Martina Fowlera Is Design Dead?, jednym z uderzających wrażeń, jakie odniosłem, jest to, że biorąc pod uwagę fakt, że w metodologii zwinnej i programowaniu ekstremalnym zarówno projektowanie, jak i programowanie są ewolucyjne, zawsze są punkty, w których coś jest potrzebne. do refaktoryzacji. Możliwe, że gdy poziom programisty jest dobry, a on rozumie implikacje projektowe i nie popełnia krytycznych błędów, kod nadal ewoluuje. Jednak w normalnym kontekście, jaka jest podstawowa rzeczywistość w tym kontekście? W normalny dzień, biorąc pod uwagę, że jakiś znaczący rozwój trafia do produktu, a kiedy pojawia się krytyczna zmiana w wymaganiach, czy nie jest to ograniczenie, że ile kiedykolwiek chcemy, podstawowe aspekty projektu nie mogą być modyfikowane? (bez wyrzucania większej części kodu). Czy nie jest całkiem prawdopodobne, że dojdziemy do ślepego zaułka w kwestii dalszych możliwych ulepszeń w zakresie projektu i wymagań? Nie opowiadam się tutaj za żadną _niezwinną_ praktyką, ale chcę wiedzieć od ludzi, którzy praktykują zwinne lub iteracyjne lub ewolucyjne metody rozwoju, co do ich prawdziwych doświadczeń. Czy kiedykolwiek dotarłeś do takich ślepych zaułków? Jak udało ci się tego uniknąć lub uciec? A może istnieją środki zapewniające, że projekt pozostaje czysty i elastyczny w miarę jego ewolucji?


title: Czy wzorzec ActiveRecord jest zgodny/zachęca do zasad projektowania SOLID?

text: Interesuje mnie, czy wzorzec ActiveRecord, rozsławiony z Ruby on Rails, zachęca, czy też zniechęca do stosowania zasad projektowania SOLID. Na przykład wydaje mi się, że obiekty ActiveRecord zawierają zarówno logikę domeny, jak i logikę trwałości, co jest naruszeniem Single Responsibility.


title: Wskoczyć do Androida lub najpierw nauczyć się podstaw Java?

text: Jestem dość biegły w C i znam trochę C++, ale nigdy nie dotknąłem Javy. Ostatnio wpadłem na pomysł na aplikację, która moim zdaniem ma potencjał i chcę ją rozwijać. Planuję najpierw przejść na Androida, ponieważ nie wymaga on Maca/iPhone'a. Więc moje pytanie brzmi: czy mogę przejść od razu do nauki programowania na Androida, wybierając składnię Javy i potrzebuję jej (w końcu nie sądzę, żeby różniła się zbytnio od C/C++), czy też powinienem wziąć kilka tygodnie, aby najpierw nauczyć się podstaw Java, a potem zacząć programować na Androida?


title: Co to są usługi lub aplikacje Silverlight, WCF RIA?

text: Zadałem tutaj wczoraj programistom pytanie o naukę HTML i CSS, a społeczność była dość hojna, aby udzielić świetnych odpowiedzi. Jedną z odpowiedzi udzielił Emmad Kareem: „jeśli nie umiesz pisać HTML, nie poddawaj się. Rozważ użycie Silverlight”. Ta odpowiedź sprawiła, że odwiedziłem Silverlight.net i natknąłem się na terminy WCF RIA Services, aplikacje Silverlight. Po przejrzeniu strony i niektórych artykułów na stronie nie jestem w stanie uzyskać ostatecznego zrozumienia, o co w tym wszystkim chodzi. Czy jest to kolejny sposób tworzenia witryn internetowych przy użyciu platformy .NET i jest podobny do innej struktury, takiej jak ASP.NET MVC3. Jakie scenariusze i wymagania są zasadniczo skierowane do aplikacji Silverlight lub możemy swobodnie używać Asp.net MVC lub Silverlight w dowolnych wymaganiach aplikacji internetowych.


title: Jak szukasz programistów, gdy Twój projekt nie jest w szczególnie popularnym języku?

text: Mamy więc produkt napisany w Perlu. Pamiętaj, że jest to _dobry_ Perl, całkiem dobrze zorientowany obiektowo, z silnym wpływem programowania funkcyjnego, rozbudowanymi zestawami testowymi i jest to zwinne środowisko do ekstremalnego programowania z elementami Scrum. Mamy też około 4 wolnych etatów, których staramy się obsadzić raczej prędzej niż później, a historycznie mieliśmy problemy z obsadzeniem nawet jednego lub dwóch. Przyglądałem się kandydatom, których nasze dotychczasowe wpisy wydają się przyciągać i nie są szczególnie imponujące. Większość z nich ma doświadczenie w automatyzacji QA lub czymś podobnym. Wiemy, że możemy wziąć dobrych inżynierów oprogramowania OO, którzy znają Pythona lub Rubiego, a nawet C++/Java i odpowiednio szybko ich przyspieszyć. Jesteśmy całkiem dobrzy w tym, że jesteśmy w stanie zaproponować samą pracę wykwalifikowanym kandydatom, jeśli mamy ich ucho. Wydaje się, że to, w czym nie jesteśmy dobrzy, to przede wszystkim przyciąganie tych ludzi do naszych postów. * Co możemy zrobić, aby sprzedawać się tym inżynierom? * Jakich rzeczy powinniśmy unikać w ofertach pracy i tym podobnych? (Ogłoszenie zostało pominięte, ponieważ nie chcę mieć żadnych kłopotów, wykonując okrążenie na tablicy ogłoszeń. Poza tym nasz obecny wewnętrzny rekruter niewiele pomaga .... plotki są jego dni są ponumerowane i wcale się nie dziwię...)


title: Co należy zrobić, aby sprzedać oprogramowanie rządowi?

text: Tworzę oprogramowanie, które może być przydatne dla firm i rządu USA, ale słyszę, że kontakt z rządem jest ogromnym kłopotem z punktu widzenia biznesu. Dlaczego mają tak złą reputację wśród niezależnych dostawców oprogramowania? Jak trudno jest im sprzedać moje oprogramowanie?


title: Jaka jest kluczowa innowacja w realizacji „chmury”?

text: Próbuję dowiedzieć się, jakie są kluczowe innowacje technologiczne lub wynalazki, które „chmura” wprowadza jako ulepszenie stron internetowych; a może przez SAAS. Wydaje mi się, że „chmura” to tylko nowe słowo marketingowe na określenie technologii, która istnieje już od jakiegoś czasu.


title: Co oznacza „natywna obsługa funkcji” w języku programowania?

text: Przeszedłem przez linię podobną do tej "PHP nie ma natywnej obsługi Unicode". Przeczytałem też, że Python ma natywną obsługę Unicode. Teraz możesz wywołać funkcję `utf8_encode()` w PHP, aby zakodować ciąg w Unicode i możesz użyć funkcji `unicode()` w Pythonie, aby przekonwertować ciąg na Unicode. Więc co to znaczy natywnie obsługiwać Unicode? _Również niektóre języki mają natywną obsługę współbieżności, podczas gdy niektóre nie mają natywnej obsługi._ Więc co oznacza > język X natywnie obsługuje funkcję Y


title: Jaka jest dobra strategia oddzielenia usługi sieciowej korzystającej z komunikatów ACORD XML?

text: Pracuję dla firmy ubezpieczeniowej i przygotowujemy się do użycia nowego narzędzia dostawcy do tworzenia ilustracji ubezpieczeniowych. Narzędzie posiada serwis internetowy, który akceptuje wiadomość ACORD XML. Chcemy umieścić usługę sieciową przed usługą sieciową dostawcy, aby ją oddzielić, ale złożoność modelu danych utrudnia. Nasza pierwsza metoda w niestandardowej usłudze sieciowej prawdopodobnie po prostu przekaże komunikat ACORD XML do usługi dostawcy i zwróci wynik. Ale chciałbym, żeby w naszej usłudze metody były bardziej zwięzłe. Nie jestem pewien, czy jest to jeszcze możliwe, ponieważ wciąż przeprowadzamy analizę. Czy istnieje sposób na stworzenie prostszych modeli danych dla ACORD? Wiadomość ACORD to TXLife 111. Edycja: Jesteśmy mieszanym sklepem z .NET i Java, więc muszę wziąć pod uwagę, że klienci Java mogą w pewnym momencie prosić o ilustracje za pośrednictwem naszej usługi sieciowej .NET.


title: Czy deweloperzy powinni być odpowiedzialni za testy inne niż testy jednostkowe, jeśli tak, które z nich są najczęstsze?

text: Obecnie pracuję nad dość dużym projektem i użyłem JUnit i EasyMock do dość szeroko zakrojonych testów jednostkowych. Interesuje mnie teraz, o jakie inne rodzaje testów powinienem się martwić. Czy jako programista jestem odpowiedzialny za martwienie się o takie rzeczy jak testowanie funkcjonalne lub regresyjne? Czy istnieje dobry sposób na zintegrowanie ich w użyteczny sposób z narzędziami takimi jak Maven/Ant/Gradle? Czy lepiej nadają się do testera lub BA? Czy są inne przydatne rodzaje testów, których mi brakuje?


title: Jak wdrożyć Scrum w firmie z trzema podobnymi produktami internetowymi?

text: Znam nieco koncepcje i zalety Scrum. Mając to na uwadze, staram się poprawić zawodną strukturę zarządzania produktami Scrum firmy, dla której teraz pracuję, która ma trzy oddzielne produkty B2C, obsługujące tę samą grupę demograficzną i dostępne na tej samej stronie internetowej. Za każdym produktem stoi właściciel produktu i unikalny zespół programistów (5-9 osób w każdym). Biorąc pod uwagę, że docelowi odbiorcy są podobni (nie jestem pewien, czy powinno to mieć znaczenie), a 3 produkty internetowe mają podobny charakter, jakie są potencjalne korzyści/ryzyka związane z połączeniem zespołów i posiadaniem tylko jednego właściciela produktu/zespołu scrum master/dev? Niektóre pytania, które przychodzą na myśl, to: czy warto mieć 3 właścicieli produktów i trzy różne zaległości, jeśli Twoja witryna zawiera trzy różne produkty? Ponadto, jeśli masz tylko jednego właściciela produktu, jaki jest najlepszy wskaźnik, aby wybrać, kto to będzie?


title: Czy to normalne, że po potknięciu zapomniałeś o wielu rzeczach w języku?

text: Po miesiącu wracam do C++. Nadal nie zacząłem ćwiczyć, ale widząc mój stary kod, czuję mdłości, jakbym widział coś nowego, nawet z prostym małym kodem. Czy to normalne? Czy zachowam wszystko, gdy zacznę pisać kod?


title: Czytelność a korzyści z polimorfizmu

text: W naszej aplikacji mamy do czynienia z wieloma operacjami CRUD. Każda tabela bazy danych ma jedno lub więcej odpowiednich wystąpień SQLContainer do wykonywania różnych typów operacji. Wszystkie te SQLContainery są przechowywane w jednej klasie pomocniczej, dzięki czemu można wykonać dowolny rodzaj operacji CRUD w dowolnym miejscu programu (po uzyskaniu odniesienia do tej klasy pomocniczej). Teraz, gdy skala aplikacji szybko rośnie, ta klasa pomocnicza bazy danych również znacznie wzrosła (5+ KLOC). Na rozwój tej klasy pomocniczej wpłynął fakt, że każdy SQLContainer posiada osobny zestaw metod do wykonywania tych samych operacji, np. gdybyś musiał zatwierdzić workersContainer, wywołałbyś commitEmployeesContainer(), a więc tylko odczytanie nazwy metody daje jasny obraz akcji. (Możesz wywołać getEmployeesContainer().commit(), ale wykonujemy również kilka dodatkowych operacji po zatwierdzeniu, takich jak zwrócenie kodu statusu zatwierdzenia, który jest prawie taki sam dla każdego kontenera z wyjątkiem kilku kontenerów) Teraz rozważamy dodanie kilku polimorfizm do tej klasy pomocniczej i tworzenie metod ogólnego przeznaczenia, np. do zatwierdzania rekordów można by użyć commitContainer(getEmployeesContainer()), ale taki polimorfizm nie będzie miał żadnego bezpieczeństwa typów i jeśli jakaś tabela będzie miała kilka różnych kontenerów, możesz przypadkowo przekazać niewłaściwy kontener. Jedną z korzyści jest to, że nie będziesz musiał dodawać nowych zestawów metod, gdy zostaną dodane nowe kontenery SQLContainer, a także modyfikacje algorytmu zatwierdzania będą łatwiejsze do dostosowania. **Pytanie:** Które podejście ułatwiłoby konserwację przy zachowaniu czytelności, czy też istnieje alternatywne rozwiązanie tego typu problemu?


title: Bezpłatne/tanie zasoby internetowe do nauki w celu uzyskania certyfikatów

text: Dlatego interesuje mnie praca nad kilkoma konkretnymi certyfikatami. Mianowicie Oracle 11g, MySQL i Java. Wiem, że jest mnóstwo książek i planuję w najbliższej przyszłości trafić do mojej lokalnej biblioteki na te tematy. Jednak uważam, że chcę uzyskać informacje cyfrowe i zastanawiałem się, czy ktoś zna repozytorium, które miałoby książki pdf na te tematy, lub zna lepszy sposób na zdobywanie wiedzy. Widząc, że nie mam 3 tys. dolarów na zajęcia, szukam sposobów, aby zdobyć wiedzę trochę taniej? Z góry dziękuję za pomoc.


title: Jaki fajny projekt pomoże mi przyzwyczaić się do nowoczesnego środowiska?

text: Nie programowałem od prawie dekady. Kiedyś programowałem w QBasic, Turbo Pascal, C, C++, Visual Basic i Assembly. Nie znam żadnego innego języka programowania (poza HTML). Chcę, aby projekt (w _jakiś_ języku programowania) pomógł mi zapoznać się z nowym środowiskiem (unix, python, perl, java, flash?) w sposób, który da mi poczucie, że zyskałem mini-super- moc. Mam tu na myśli coś, co daje mi poczucie hakowania (a właściwie nie uczy się hakowania, ale tak jak nauka C po raz pierwszy, przypomina hakowanie). Coś, co pozwoliłoby wykorzystać moje umiejętności programistyczne w sposób, którego nie znają języki programowania, które znam.


title: Dlaczego miałbyś używać struktur danych (tj. drzew binarnych, połączonych list) w swoich pracach/projektach pobocznych?

text: Wydaje mi się, że do codziennego użytku bardziej prymitywne struktury danych, takie jak tablice, wykonują swoją pracę tak samo dobrze, jak robiłoby to drzewo binarne. Moje pytanie brzmi, jak często używa się tych struktur podczas pisania kodu do projektów w pracy lub projektów, które realizujesz w wolnym czasie? Rozumiem lepszy czas wstawiania / czas usuwania / czas sortowania dla niektórych struktur, ale czy to naprawdę miałoby takie znaczenie, gdybyś pracował ze stosunkowo niewielką ilością danych?


title: Czym różni się Agile od XP?

text: Przeczytałem kilka artykułów w sieci, aby dowiedzieć się, jak Agile, XP, Scrum, programowanie w parach różnią się od siebie / są ze sobą powiązane i wyprowadziłem następującą linię: 1. Scrum i XP są prawie takie same. XP ma krótszy okres wydań niż Scrum 2. Programowanie w parach jest stosowane zarówno w metodyce Agile, jak i XP. Nie byłem jednak w stanie określić, czym Agile różni się od XP. Więcej niż podanie adresu URL, z przyjemnością przeczytam Twoje doświadczenia i przemyślenia na ten temat.


title: Możliwa luka w 3-klauzulowej licencji BSD

text: W pliku license.txt to: Część tego programu wykorzystuje następującą klauzulę 2. Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, tę listę warunków i następujące zastrzeżenie w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją . zdecydowanie różni się od tego: 2. Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, tę listę warunków oraz następujące zastrzeżenie w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją. Czy przy stosowaniu drugiej klauzuli 3-klauzulowej licencji BSD bez "Część tego programu używa następującej klauzuli", dołączanie biblioteki oznacza, że moja stworzona aplikacja musi również podlegać 3-klauzulowej licencji BSD? Np. mój program nie powinien mieć gwarancji itp.?


title: Lazy loading może prowadzić do nieaktualnych danych, narusza IoC?

text: Chcąc być lepszym programistą mam aplikację, która śledzi role i uprawnienia, miałem klasy dla ról i uprawnień, które były po prostu obiektami wartości. class Role { int RoleID string RoleName } class Permission { int PermissionID string PermissionName } Gdybym chciał uzyskać uprawnienia dla roli, zrobiłbym List<Permission> permissions = PermissionDAL.GetPermissions(RoleID) Ale dla wygody (jest to aplikacja Desktop) Musiałem przenieść kolekcję uprawnień do klasy Role, aby po prostu zrobić uprawnienia = roleInstance.GetPermissions(); a klasa roli staje się klasą Role { List<Permission> permissions = null; int RoleID string RoleName public List<Permission> Uprawnienia { get { if(permissions == null) permissions = PermissionDAL.GetPermissions(this.RoleID); uprawnienia do zwrotu; } } } **Pytanie 1** : wyzwanie - oto scenariusz Rola r = getARole(); //aby użytkownik zobaczył display(r.Permissions); //użytkownik dodający uprawnienia do roli RoleDAL.AddPermission(RoleID, PermissionID); //wyświetl nowe uprawnienia display(r.Permissions); //Ale nie, dane nie są odświeżane z powodu sprawdzenia wartości NULL. //Czy muszę wywoływać nową instancję tej roli? **Pytanie 2** : Myślę, że to narusza Inversion of Control? **Pytanie 3** : Jak byś zrobił IoC dla `List<Role>`, ustawiając uprawnienia dla każdej roli w kolekcji, gdyby używał IoC. Dziękuję


title: najlepsze praktyki java, aby szukać niezbędnych plików projektu?

text: Zwykle, kiedy robisz nowy projekt java, istnieje kilka niezbędnych plików, takich jak plik właściwości log4j, inny plik właściwości i plik dziennika, i musisz powiedzieć javie, gdzie one są i gdzie chcesz zapisać plik dziennika. Nie chcę sztywno kodować bezwzględnej ścieżki do tego pliku, ponieważ umieszczam projekty na różnych maszynach na różnych etapach rozwoju. Na przykład używam Eclipse/PC w fazie deweloperskiej, Ant/Unix w UAT i maszynie produkcyjnej. Oto moja zwykła konfiguracja: Project: \--src \--build \--conf \--log \--output W moim rozumieniu katalogi src i build są zawarte w ścieżce klas i można je od razu odczytać za pomocą `this .getClass().getClassLoader().getResource(".").getPath()` . Jednak nie ma logicznej metody programowego lokalizowania katalogu Project. Gdybym mógł programowo zlokalizować katalog Project, mógłbym powiedzieć programowi, że pliki znajdują się w ${Project}/conf i zapisać plik dziennika w ${Project}/log. Czy powinienem po prostu użyć skryptu powłoki do zdefiniowania tych zmiennych przed uruchomieniem programu?


title: Jak w takim przypadku zastąpić dziedziczenie składem?

text: Niedawno przeczytałem kilka artykułów o przewadze kompozycji nad dziedziczeniem. Ich autorzy stwierdzili, że zawsze można zastąpić dziedziczenie kompozycją (a konkretnie mówią, że nie znają takich sytuacji, w których nie można tego zrobić). Jednak nie wiem, jak to zrobić w następującym przypadku: abstract class Reader { public Int32 ReadSum() { return this.ReadValue() + this.ReadValue(); } public Int32 ReadSub() { return this.ReadValue() - this.ReadValue(); } public Int32 ReadMul() { return this.ReadValue() * this.ReadValue(); } public Int32 ReadDiv() { return this.ReadValue() / this.ReadValue(); } streszczenie publiczne Int32 ReadValue(); } class RandomSource: Reader { public Int32 ReadValue() { return Math.RandomInt32(); } } class UserSource: Reader { public Int32 ReadValue() { return Console.ReadInt32(); } } Czy to w ogóle możliwe?


title: Jaki jest dobry przykład zabawki do nauki kontroli wersji?

text: Poszukuję praktycznych przykładów do wykorzystania podczas nauczania kontroli wersji. Podział materiału na podstawowe pojęcia i podanie przykładów jest oczywistym sposobem nauczenia kontroli wersji, ale może to być bardzo nudne, chyba że przykłady są naprawdę praktyczne lub interesujące. Jednym z pomysłów, jaki mam, jest dostosowanie motywu wordpress. Dużo używam wordpress i żaden motyw nigdy nie jest doskonały, więc zazwyczaj umieszczam katalog motywów w kontroli wersji za pomocą dowolnego pliku dvc i rozpoczynam nagrywanie zmian. Problem z tym przykładem polega na tym, że niewiele osób na widowni może być zaznajomionych z wordpressem, nie mówiąc już o dostępie powłoki do witryny wordpress w celu wypróbowania poleceń. Przygotowanie makiety strony i udostępnienie jej wszystkim też nie jest dla mnie opcją. Potrzebuję „przykładu zabawki”, który może zainteresować szerokie grono programistów i czegoś, co mogą wypróbować na własnych komputerach. W samouczku wykorzystam pliki dvc, ale praktyczny przykład, którego szukam, to tylko nauczenie podstawowych funkcji kontroli wersji, ignorując na razie funkcje rozproszone. (Teraz, kiedy o tym myślę, zamiast fałszywej strony, może załatwić sprawę dostosowany live CD...) Jakieś lepsze pomysły? **AKTUALIZACJA** Dziękuję wszystkim. Skończyło się na tym, że użyłem danych tekstowych: planowanie przyjęcia ze zwykłymi plikami tekstowymi dla gości, menu, fakturami i wskazówkami lokalu z obrazami dla niektórych danych binarnych. Aby nauczyć bardziej zaawansowanych funkcji VCS, przeniosłem się później do kolekcji implementacji „hello world” w różnych językach. Dzięki jeszcze raz!


title: Skąd mam wiedzieć, czy kompilator zepsuł mój kod i co mam zrobić, jeśli to był kompilator?

text: Od czasu do czasu kod C++ nie będzie działał po skompilowaniu z pewnym poziomem optymalizacji. Może to być kompilator wykonujący optymalizację, która psuje kod lub może to być kod zawierający niezdefiniowane zachowanie, które pozwala kompilatorowi robić wszystko, co czuje. Załóżmy, że mam kawałek kodu, który psuje się po skompilowaniu tylko z wyższym poziomem optymalizacji. Skąd mam wiedzieć, czy to kod, czy kompilator i co mam zrobić, jeśli to kompilator?


title: Dedykowana grafika potrzebna do tworzenia aplikacji 3D na Androida?

text: Grafika Intel 3000 powinna być wystarczająco przyzwoita do tworzenia aplikacji 3D na Androida, prawda? Chodzi mi o to, że jeśli telefon sobie z tym poradzi, to może wbudowana grafika?


title: Skąd wiemy, że faworyzowanie kompozycji nad uogólnianie jest zawsze właściwym wyborem?

text: Niezależnie od tego, czy obiekt fizycznie istnieje, czy nie, możemy go modelować na różne sposoby. W wielu przypadkach moglibyśmy arbitralnie zastosować uogólnienie lub kompozycję. Jednak zasada GoF, mówiąca o „faworyzowaniu kompozycji nad uogólnianiem [sic]”, prowadzi nas do używania kompozycji. Jeśli więc modelujemy np. prostą, to zamiast rozszerzającej Point (uogólnienie) tworzymy klasę, która zawiera dwa elementy PointA i PointB typu Point (skład). To tylko uproszczony przykład tego, jak możemy dowolnie wybrać do modelowania kompozycję lub dziedziczenie, mimo że obiekty są zwykle znacznie bardziej złożone. Skąd wiemy, że to właściwy wybór? Ma to znaczenie przynajmniej dlatego, że może być mnóstwo refaktoryzacji, jeśli jest źle?


title: W jakim języku 11-latek powinien zacząć uczyć się programowania gier?

text: Mam 11-letniego syna, który chce programować gry. Zacząłem od C++ (C++11) i nauczył się iostreams, pętli, funkcji, logiki i kontroli przepływu. Używam standardowej biblioteki i w ogóle nie zarządzam pamięcią. Ale chciałbym zapytać: Jaki język zasugerowałbyś dla dziecka przed nastolatkiem (Python, ...)? Jakie książki byś zaproponował? Spojrzeliśmy na jedną książkę, która była przeznaczona tylko dla konsolowych gier ASCII. Podobał mi się C++, którego nauczał, ale myślę, że w pewnym momencie znudzi się bez grafiki.


title: Strzałka => w Perlu

text: Co oznacza `=>` w Perlu? my $CreateArray = [ objectClass => [ "top", "person", "organizationalPerson", "inetOrgPerson" ], cn => "Jane User", uid => "0000001", sn => "User", mail = > "JaneUżytkownik@mojafirma.com" ]; produkuje CreateArray: 0 'objectClass' 1 ARRAY(0x104ef40) 0 'top' 1 'person' 2 'organizationalPerson' 3 'inetOrgPerson' 2 'cn' 3 'Jane User' 4 'uid' 5 0000001 6 'sn' 7 'User ' 8 'mail' 9 'JaneUser@mycompany.com' Wydaje się, że liczby parzyste to klucze, a nieparzyste to wartości. Dlaczego nie używają skrótów? Bo nie są zamawiane? Czy istnieje nazwa dla tej dziwnej struktury? Dziękuję Ci.


title: Czas Joda vs Czas Java

text: Chociaż Joda jest bogata w funkcje i bardziej wyrafinowana niż standardowy czas Java, nie zawsze może być najlepszym rozwiązaniem. Jak zdecydować, czy powinienem używać Joda Time lub Java Time w dowolnym kodzie Java? Czy istnieje jakaś wskazówka, która mówi nam, jak wybrać właściwy w zależności od naszych wymagań?


title: Zarządzanie budową: czy to istnieje?

text: Chcę czegoś, czego do tej pory nie udało mi się znaleźć w niczym innym, jak tylko w pracach teoretycznych i książkach. Jeśli nie istnieje, to jestem trochę zdumiony, ponieważ brzmi to tak, jakby wielu ludzi używa tego rodzaju systemów i że działają one bardzo dobrze. Może potrzebuję jakiejś kombinacji rzeczy, nie jestem pewien. Oto moje wymagania dla systemu: * Może podpiąć się do SVN, aby zostać wyzwolonym przez checkin. * Potrafi skonfigurować niezależne komponenty jako „potoki” projektu * Mam na myśli to, że zaewidencjonowanie komponentu wyzwala ten komponent do zbudowania, uruchomienia testów jednostkowych i wyplucia elementu dystrybucyjnego. * Może konfigurować komponenty zależne od innych komponentów * Jeśli zarejestruję się w komponencie A, a komponent B zależy od komponentu A, komponent B ma zaktualizowaną zależność A i przebudowuje się po zakończeniu komponentu A. * Używa natywnych procesów budowania, takich jak msbuild lub make. * Nie muszę specjalnie do tego konfigurować czegoś zupełnie nowego. * Jeśli zależność zawiedzie, komponenty nadrzędne nie aktualizują jej, ale zaktualizują inne komponenty, które nie uległy awarii. To koniec serwera kompilacji. Chcę również integracji po stronie programisty. * Nowy programista powinien być w stanie uruchomić polecenie, które pobiera wszystko i buduje wszystko po raz pierwszy. * Obejmuje to wszystkie komponenty danego projektu. * Ten sam proces kompilacji, aktualizacji, kompilacji odbywa się na komputerze programisty. * Użycie dowolnego IDE Wszystko powyższe jest **zautomatyzowane**. Mój zespół ma to obecnie, ale robi prawie wszystko ręcznie :( To, co opisuję, jest opisane w wielu miejscach, w tym w książce Continuous Delivery i artykule zatytułowanym Continuous Release. Najbliżej, jaki do tej pory jestem w stanie znaleźć, jest Maven, ale wydaje się, że nie ma funkcji „może używać natywnego systemu kompilacji” (mówisz mu każdy plik, który chcesz zbudować, i kompilator / linker .... jak plik tworzenia XML).Wydaje się również bardzo nastawiony na Javę i Chcę czegoś niezależnego od języka ... w rzeczywistości chcę czegoś, co niekoniecznie musi nawet budować programy, może to być budowanie czegokolwiek, co wymaga jakiejś formy kompilacji. Więc jak? Co? Gdzie? i ile?


title: Tytuł stanowiska w Curriculum Vitae

text: W tej chwili przygotowuję swoje CV. Myślę, że warto wspomnieć, że nie jestem native speakerem języka angielskiego, a moje pytanie jest w połowie związane z językiem, w połowie z programowaniem. Od prawie 5 lat jestem zawodowo zatrudniony jako _programista_, niektóre projekty wymagały zaprojektowania małej architektury aplikacji, jestem magistrem informatyki. Mam problem z określeniem siebie w profesjonalnym świetle: * programista * programista * inżynier oprogramowania? Przetłumaczone wszystkie te pojęcia mają to samo znaczenie w moim języku ojczystym, ale wątpię, czy mają bardziej konkretne zastosowanie. Czy możesz mi pomóc dowiedzieć się, jaka jest różnica między wszystkimi trzema? Który wolisz umieścić w CV i dlaczego?


title: duża luka w CV – porady dotyczące powrotu na rynek pracy

text: Moja historia w pigułce: Jakiś czas po studiach, po wielu miesiącach pracy nad moim portfolio i szukaniem pracy, dostałem stanowisko juniora w branży gier komputerowych. Ale ponieważ musiałem przeprowadzić się do drogiego miasta w innym kraju, moja sytuacja finansowa stała się dość straszna. Nie byłem też zadowolony z samej pracy. Kiedy więc po 1,5 roku wydarzyło się coś nieprzyjemnego, postanowiłem odejść, nie zapewniając sobie kolejnej pracy. Dzień po tym, jak złożyłem rezygnację, pojawiły się wieści o masowych zwolnieniach w branży... Udało mi się jeszcze zdobyć kilka wywiadów, ale były one dość dziwne i nie udane - tak jakby nie bardzo ich interesowały oceny ja. Odniosłem też wrażenie, że podejrzewali mnie o zwolnienie (bo byłem już bez pracy), a co za tym idzie - nie dość dobrze. Ponieważ nie byłem zadowolony z tego, jak przeprowadzono rozmowy kwalifikacyjne i były one dużym obciążeniem dla mojego czasu i pieniędzy, zrezygnowałem z poszukiwania pracy. W ciągu ostatnich dwóch lat miałam kilka nie związanych z rozwojem prac w niepełnym wymiarze godzin, których wstydziłbym się umieścić w swoim życiorysie. Ale nie zrezygnowałem z programowania. Rozpocząłem projekt, który okazał się bardzo trudny na wielu płaszczyznach. Pracując nad tym kilka razy wypaliłem się i przygnębiłem, ale przezwyciężyłem wszystko i teraz jestem w fazie beta. Wierzę, że mogę na tym spieniężyć, ale nie oczekuję dużych dochodów. Mimo to doświadczenie sprawiło, że pomyślałem, że wolałbym „właściwą” karierę w firmie i wspinać się po szczeblach kariery, niż pracować dla siebie. Zastanawiam się nad ponownym aplikowaniem na niektóre stanowiska, ale obawiam się, że to może nie być łatwe: 1. Pracownicy HR są bardzo przewidywalni. Jestem pewien, że bardzo nie lubią 2-letniej przerwy w moim CV. 2. Projekt, nad którym pracuję, jest dość wyjątkowy. Potrzeba bardzo specyficznej wiedzy, aby zrozumieć, jakie problemy musiałem rozwiązać, jak bardzo jest to skomplikowane i pracochłonne, ile obejmuje obszarów. Obawiam się, że twórcy, którzy będą przeprowadzać ze mną wywiad, automatycznie uznają, że jest to coś, co mogą ukończyć w ciągu 2 miesięcy (ja też w to wierzyłem...), więc - niezbyt imponujące. 3. Źle radzę sobie w rozmowach kwalifikacyjnych, zarówno przez telefon, jak i twarzą w twarz. Cóż, to jest zgodne z tym, jak kiepski jestem w rozmowach w życiu ogólnym. Czy masz jakieś rady, co mogę zrobić, aby w danych okolicznościach zwiększyć swoje szanse na znalezienie pracy? Najbardziej martwi mnie dwuletnia przerwa w zatrudnieniu – czy to zerwanie umowy?


title: Dlaczego „Fork me on GitHub”?

text: Rozumiem, jak działa GitHub, ale jedną rzeczą, z którą się myliłem, jest to, dlaczego prawie każdy projekt OSS ma ostatnio link „Fork me on GitHub” na swojej stronie głównej. Na przykład http://jqtjs.com/, http://www.daviddurman.com/flexi-color-picker/ i inne. Dlaczego jest to tak powszechne? Czy to, że chcą/potrzebują walidacji kodu, sprawdzania ulepszeń bezpieczeństwa/wydajności, których mogą nie wiedzieć, jak to zrobić? Czy ma to pokazać, że jest to wspólny projekt – możesz dodawać ulepszenia? Czy pracują dla GitHub, czy chcą promować swoją usługę? Co dziwne, nie wydaje mi się, żebym widział ostatnio logo „Projekt Fork on Bitbucket”. Moją pierwszą reakcją na to logo było to, że projekt prawdopodobnie wymaga modyfikacji (rozwidlenia) w celu zintegrowania go z czymkolwiek użytecznym - lub że zachęcają do fragmentacji kodu, zachęcając wszystkich do stworzenia własnego rozwidlenia projektu. Ale nie sądzę, żeby to było intencją.


title: Dostęp do tej samej usługi więcej niż dwa razy w samą porę

text: Mam aplikację, która będzie miała dostęp do usługi interfejsu A, która ma być uruchamiana przy starcie systemu Windows. Ta usługa jest używana przez program B i moja aplikacja działa w obecności B po otrzymaniu wskaźnika do A. Scenariusz jest tłumaczony w następujący sposób: public interface A{} ///mój program public class MójProgram { public MójProgram() { ProgramB.DoA (); } public A GetA(){} } public class ProgramB { void DoA(){} } Przetłumaczone źródło nie jest prawdziwe, ale wydaje się, że tego właśnie szukam. Aby wyeliminować narzuty związane z przydzielaniem i realokacją dynamicznych dostępów do tej samej usługi używanej przez inne procesy, czy mógłbyś podać rzeczywiste rozwiązanie problemu? (teraz nie mam żadnego pomysłu)


title: Przejście z ActionScript na JavaScript, wskazówki dotyczące pisania kodu?

text: Jestem całkiem zadowolony z używania actionscript3 i flasha. Mam też pewne doświadczenie z Javą. Ale ostatnio zacząłem uczyć się JavaScript i node.js. Ostatecznie chcę stworzyć grę 3d w threejs, ale na razie chcę po prostu stworzyć aplikację do czatu. Chcę wyrobić w sobie nawyk używania JavaScript. Niestety, rozpoczęcie korzystania z JavaScriptu jest dla mnie bardzo trudne. Trudności, z którymi się borykam, to: * Brak sugestii dotyczących różnych metod i właściwości, tak jak w środowiskach Eclipse IDE i Flash Builder IDE. Podobnie jak w przypadku naciśnięcia kropki po obiekcie, pokazuje wszystkie metody i właściwości odnoszące się do tego obiektu i naprawdę łatwo jest zobaczyć, jakie parametry należy przekazać i takie tam. * Jak zorganizować kod? W ActionScript3 mogłem po prostu tworzyć różne klasy w różnych pakietach. Mogłem wtedy zaimportować i używać tych klas w jednym głównym pliku. Jak to działa w JavaScript? * Funkcje. Widziałem ludzi używających anonimowych funkcji w javascript. Ale jestem zmuszony pisać funkcje zewnętrzne, tak jak mam to w zwyczaju. Co jest lepsze w przepływie pracy JavaScript? Co radzisz? * Jak wykonywany jest kod w pliku HTML? Więc jeśli mam kilka znaczników `<script></script>` i zadeklaruję zmienną w jednym z nich, czy znaczniki znajdujące się pod nim i nad nim mają dostęp do tej zmiennej?


title: Warstwa logiki biznesowej w aplikacji MVC

text: W mojej aplikacji ASP MVC postanowiłem dodać kolejną warstwę biznesową i sprawiłem, że model będzie miał tylko właściwości. Wszystkie inne funkcje, takie jak zapisywanie do db, pobieranie z db, są wykonywane na tej nowej warstwie biznesowej. Więc teraz kontroler będzie wywoływał tę warstwę biznesową i model dla różnych operacji. Czy to dobre podejście do takiego projektowania? Postanowiłem nie używać modelu do tego celu, ponieważ potrzebowałbym kilku modeli do różnych działań. (np. jeden do edycji, a drugi do tworzenia)


title: Konwencja używania funkcji superklasy i elementów członkowskich

text: Czy istnieje konwencja lub wspólny sposób używania funkcji i elementów członkowskich superklasy? Na przykład superklasa ma funkcję `protected void Foo()` i `protected int myInt;` W podklasie chciałbym odnosić się do nich po prostu jako `Foo()` i `myInt` lub jako `super.foo( )` i `super.myInt` . Albo w inny sposób.


title: UserControl w symbolu zastępczym dobry/zły? + Problem z ogłaszaniem zwrotnym

text: Obecnie pracuję trochę z ASP.NET i próbuję znaleźć najlepszy sposób poruszania się po stronach. W tej chwili mam `UpdatePanel` który zawiera `Placeholder` wewnątrz niego. Ten `placeholder` doda następnie `usercontrol`, którego potrzebuję. Rozglądałem się po Internecie i niektórzy twierdzą, że to naprawdę zła rzecz, podczas gdy inni używają go bez problemów. Czy cały element `UserControl` wewnątrz `Placeholder` wewnątrz `updatepanel` jest dobry/zły? Podczas gdy próbowałem to zaimplementować, napotkałem problem z `postbackiem`. Kiedy klikam przycisk na mojej „stronie głównej”, aby dodać nowy element „UserControl” do symbolu zastępczego, strony. `IsPostback` jest oczywiście taki sam w `UserControl` i dlatego zawsze będzie tutaj prawdziwy. Czy robię coś złego, czy też muszę użyć zmiennej sesji, aby zachować być może mój `UserControlPostback`? Jestem otwarty na wszystkie opcje, wystarczy znaleźć preferowany sposób.


title: Po co używać klas linków w oql zamiast klas zawierających linki?

text: itop streszcza swój bardzo złożony projekt bazy danych za pomocą języka zapytań obiektowych (oql). Do tego są zdefiniowane klasy, takie jak „Bilet” i „Serwer”. Teraz bilet jest zwykle połączony z serwerem. Na swój naiwny sposób nadałbym klasie Ticket atrybut „affected_server_list”, w którym mógłbym odwołać się do dotkniętych serwerów. itop robi to inaczej: ani serwery, ani bilety nie znają się nawzajem. Zamiast tego istnieje klasa „linkTicketToServer”, która zapewnia połączenie między nimi. Pierwszą rzeczą, jaką zauważyłem, jest to, że sprawia, że zapytania oql są bardziej złożone. Zastanawiałem się więc, dlaczego tak to zaprojektowali. Jedną z rzeczy, która mi się przydarzyła, jest to, że pozwala na większą elastyczność, ponieważ mogę dodawać linki bez modyfikowania oryginalnych klas. Czy to już po co miałoby się tak zaimplementować, czy są inne powody dla tego rodzaju projektowania?


title: Najlepsze praktyki MVC (podgląd pozyskiwania danych bezpośrednio z modelu) i Yii Framework

text: Używam Yii od kilku lat i dopiero teraz zdałem sobie sprawę, że ich aplikacja demonstracyjna (wspierana przez narzędzie do automatycznego generowania CRUD - Gii) wydaje się łamać kluczowy wzorzec architektury MVC. Chciałbym to tutaj omówić. Odkąd używam MVC (około czterech lat), zawsze mówiono mi, że _view nie powinien pozyskiwać danych bezpośrednio z modelu_. Każdy fragment tekstu o MVC, jaki do tej pory przeczytałem, zawsze podkreślał, że zarówno widok, jak i modele powinny być całkowicie oddzielne, a kontroler jest jedynym elementem, który je łączy. Jeśli potrzebuję podglądu danych modelu (najczęściej używany mechanizm), powinienem pozwolić mojemu kontrolerowi na ich pobranie i załadowanie nimi widoku. Popraw mnie, jeśli się mylę, ale znalezienie tego pytania i odpowiedzi na nie upewnia mnie, że mam rację: choć jest to technicznie możliwe, należy tego unikać. Tak więc w odniesieniu do Yii byłoby to: $probes = Probes::model()->getAllProbesForCurrentUser; $this->render('index', array ( 'probes'=>$probes )) (dość oczywiste, myślę - kontroler pobiera dane z modelu i renderuje widok, zasilając go tym modelem) Jeśli wszystko powyżej jest w porządku, to jak mam to wyjaśnić: <?php $this->widget('CGridView', array ( 'id'=>'users-grid', 'dataProvider'=>$model->search(), 'columns'= >tablica ( 'nazwa', 'e-mail', 'poziom') )); ?> (widżet umieszczony **w widoku** pobiera dane _bezpośrednio_ **z modelu** ) Czego mi brakuje?


title: Jakie algorytmy uczenia maszynowego miałyby tutaj zastosowanie?

text: Mam dokumenty, które zawierają dowolną ilość pól klucz/wartość. Wartość może być prymitywną lub listą. Wszystkie ukończone dokumenty mają powiązany stan (np. przeszły, nie powiodło się, wstrzymano itp.). Wykorzystując ukończone dokumenty jako dane szkoleniowe w algorytmie uczenia maszynowego, moim celem jest przekazanie systemowi niekompletnego dokumentu i określenie prawdopodobnego wyniku. Czy jest bardziej prawdopodobne, że niekompletny dokument, na który obecnie patrzę, przejdzie, zawiedzie lub zatrzyma się? Informacje identyfikujące, które chcę tutaj porównać, składają się głównie z unikalnych kluczy. Więc dokument może wyglądać mniej więcej tak: id: 1 keys_of_type_x: [x1, x2, x3, ..] keys_of_type_y: [y1, y2, y3, ..] key_z: "przykładowe pole tekstowe" itp. Niekoniecznie szukam konkretna odpowiedź, ale bardziej dla popchnięcia we właściwym kierunku z informacją o tym, jaki algorytm najlepiej nadaje się do tego rodzaju klasyfikacji opartej na wielu wartościach.


title: Podział równoważności rozumienie A<5 i B<5

text: Nie rozumiem następującego przykładu. Mówi, że funkcja X zostanie wykonana, jeśli jedna ze zmiennych A i B będzie mniejsza niż 5. Dalej wyjaśnia, że istnieją trzy ważne klasy równoważności dla danych wejściowych: A<5, B<5 A=>5 B< 5 B>=5 A<5 Dlaczego nie ma klasy dla A>5 i B>5? Czy to dlatego, że to nie byłaby prawidłowa klasa? Ale dlaczego A<5 i B>5 jest poprawne, czy to dlatego, że funkcja nadal jest od tego zależna?


title: Dlaczego w języku C# występuje zarówno zwarcie OR, jak i niezwarciowa odmiana tego operatora?

text: Od czasu do czasu zastanawiam się nad tym: zwarcie OR zawsze zwraca tę samą wartość, co operator OR bez zwarcia? Spodziewam się, że zwarcie OR zawsze będzie oceniane szybciej. Czy więc operator OR bez zwarcia został dołączony do języka C# w celu zapewnienia spójności? Co przegapiłem?


title: Uruchamianie przypadków testowych dla sparametryzowanych przypadków testowych

text: Pozwól, że wyjaśnię moją sytuację. Planuję coś w rodzaju programu uruchamiającego przypadki testowe do robienia przypadków testowych na **zewnętrznych** urządzeniach, które są oparte na mikrokontrolerze. Rozważmy urządzenia: * Urządzenie 1 * Urządzenie 2 Istnieje wiele przypadków testowych, które można uruchomić na jednym z powyższych urządzeń. Na przykład: * Testcase 1 * Testcase 2 Głównym powodem, dla którego wszystkie przypadki testowe mogą być uruchamiane na dowolnym urządzeniu, jest to, że przypadki testowe weryfikują pewien standard i to oprogramowanie powinno być rozszerzalne dla przyszłych urządzeń. Same przypadki testowe muszą być uruchamiane ze zmieniającymi się parametrami. Na przykład `Testcase 1` wykonuje pewną **Weryfikację Timingu**, której parametr wejściowy wymaga jako parametru wejściowego `datarate`: `4800`, `9600`, `19200`. Teraz, mając nadzieję, że rozumiesz sytuację, pozwól, że wyjaśnię moje pytania projektowe. Aby zaimplementować przypadki testowe, pomyślałem o podejściu opartym na atrybutach, tak jak robi to „nunit”. Bardziej skomplikowanym problemem jest to, jak zdefiniować sparametryzowane przypadki testowe? W ten sposób: Urządzenie 1: Przypadek testowy 1: szybkość transmisji danych: 4800, 9600, 19200 Przypadek testowy 2: zasilanie: 1, 2, 3 Urządzenie 2: Przypadek testowy 1: szybkość transmisji danych: 9600, 19200, 38400 Przypadek testowy 2: zasilanie: 3, 4, 5 Jak zaprojektowałbyś taki framework? Zrobiłem podobny projekt w `pythonie` gdzie dla każdego urządzenia miałem `XML` zawierający definicje przypadków testowych, takie jak: <Testcase="Testcase 1" datarate=4800/> <Testcase="Testcase 1" datarate=9600/ > <Testcase="Testcase 1" datarate=19200/>


title: kurs przypominający o architekturze oprogramowania (projektowanie OO)

text: Jestem głównym programistą i kierownikiem zespołu w małym zespole RAD. Terminy są napięte i musimy często publikować, co robimy, i to właśnie sprawia, że biznes jest szczęśliwy. Podczas gdy my (zespół programistów) staramy się utrzymać jakość kodu (czyste i krótkie metody), nie mogę nie zauważyć, że ogólna jakość projektu i architektury OO pogarsza się z czasem - biblioteka, nad którą pracujemy on stopniowo sprowadza się do „worka funkcji”. Cóż, staramy się używać wzorców projektowych, ale ponieważ tak naprawdę nie mamy zbyt wiele czasu na projekt jako taki, używamy głównie wzorców twórczych. Przeczytałem Code Complete / Design Patterns (GOF & enterprise) / Progmatic Programmer / oraz wiele książek z serii Effective XXX. Czy powinienem przeczytać je ponownie, ponieważ przeczytałem je dawno temu i całkiem sporo zapomniałem, czy też od tego czasu wydano inne / lepsze książki o projektowaniu / architekturze oprogramowania, które zdecydowanie powinienem przeczytać? **Wszelkie pomysły, rekomendacje, jak zapanować nad sytuacją i zacząć ulepszać architekturę. Sposób, w jaki to widzę - zacznę poprawiać jakość architektury / projektu komponentów oprogramowania, nad którymi pracuję, a następnie zacznę pomagać innym członkom zespołu, gdy znajdę to, co dla mnie działa.**


title: Najlepsza strategia obsługi komunikacji z wieloma serwerami z aplikacji na iPhone'a/Androida?

text: Tworzę aplikację, która będzie używana w wielu szpitalach w USA. Zgodnie z wymogiem zgodności z „HIPAA”, każdy szpital będzie miał własny serwer, który spełnia te wymagania dotyczące zapewnienia bezpieczeństwa danych pacjenta itp. Teraz zadaniem aplikacji jest komunikowanie się z określonym serwerem na podstawie danych logowania. Dodatkowym wymogiem jest to, że nowe szpitale (serwery) będą prawdopodobnie dodawane po drodze, nawet po udostępnieniu aplikacji na rynku. Zasadniczo, zgodnie z niektórymi danymi logowania, aplikacja powinna komunikować się z serwerem szpitala przypisanego do tej osoby. Jednym z dość prymitywnych sposobów jest utworzenie własnego serwera, który łączy szpitale z danymi logowania i odpowiednio zapewnia `podstawowy adres URL` do wymiany danych. Czy istnieje bardziej wydajny sposób na poradzenie sobie z tym?


title: Czy książki o programowaniu w innych językach są przydatne dla Pythona?

text: Jestem średniozaawansowanym programistą Pythona samoukiem; Często spotykam się z popularnymi książkami o tworzeniu oprogramowania i programowaniu napisanymi w innych językach (często Java). Typowe przykłady: * Refaktoryzacja: ulepszanie projektu istniejącego kodu * Wzorce projektowe, gang czterech * Rozwój oparty na testach: na przykładzie * Sztuka testowania jednostkowego: z przykładami w .NET Ogólnie rzecz biorąc, jak przydatne jest czytanie napisanej książki dla innego języka? A konkretnie, co z Pythonem? Czy należy trzymać się książek specyficznych dla języka? Na przykład wiele osób chwali _Wzorce projektowe_ GOF, nigdy tego nie czytałem, bo model dotyczy innych języków (w końcu Python jest o antywzorcach, prawda?), ale mam ochotę ze względu na jego miejsce w kanonie literatury CS. Podobnie, czy _Sztuka testowania jednostkowego: z przykładami w .NET_ pomoże programiście Pythona w nauce testowania jednostkowego, mimo że przykłady są w .Net?


title: Czy podział równoważności jest częścią negatywnych testów?

text: Zakładam, że testowanie negatywne jest podejściem do projektowania przypadków testowych, podobnie jak podział równoważności. Ale nie jestem pewien, czy NT jest częścią ET. Przykład: pole może przyjmować wartość liczbową z zakresu 0-10. Mam więc trzy partycje: do 0, od 0-10 i więcej niż 10. Kolejne nieważne partycje reprezentują litery, co również jest negatywnym testem, prawda?


title: Zapisujesz dane do SQL Server bezpośrednio z BizTalk lub korzystasz z usługi zewnętrznej?

text: Zewnętrzne źródło będzie wysyłało nam dane XML, które BizTalk pobierze i przekształci w wewnętrzny schemat. Potrzebujemy tych danych do załadowania do bazy danych SQL Server, ponieważ zamierzamy uwidocznić niektóre dane w naszym interfejsie internetowym za pośrednictwem niestandardowej usługi WCF. Pytanie brzmi: jakie jest zalecane podejście do robienia czegoś takiego? Rozważane opcje to bezpośrednie zapisywanie przez BizTalk do bazy danych lub wywołanie przez BizTalk niestandardowej usługi WCF, która obsłuży operację zapisywania. Innym krótko rozważanym pomysłem było umożliwienie BizTalk pisania do MSMQ i pobierania z niego niestandardowej usługi i przechowywania jej w bazie danych. Jakie są niektóre wytyczne lub pytania, które należy zadać przy ocenie tych opcji? Istnieją obawy związane z kosztami związanymi z wywołaniem dodatkowej usługi, powielaniem wysiłków, jeśli schemat zostanie zmodyfikowany w przyszłości (co będzie do pewnego stopnia) i po prostu najlepszym sposobem projektowania w ramach architektury zorientowanej na usługi, którą mamy zmagać się z.


title: Czy znajomość łaciny lub innych języków logicznych przyczynia się do bycia lepszym programistą?

text: Obecnie uczę się łaciny w szkole i nauczyłem się, że jest to bardzo logiczny język. Czuję, że przyczyniło się to do moich umiejętności programowania, ponieważ ułatwia zrozumienie mojego kodu. Czy istnieje związek między znajomością bardzo logicznego języka, takiego jak łacina, a rozumieniem kodu?


title: Czy istnieje odpowiednie zastosowanie #define dla stałych?

text: W całym Internecie widzę ludzi, którzy opowiadają się za używaniem enum lub const zamiast #define dla stałej definicji. Czy zdarza się, że #define jest bardziej odpowiednie lub równie odpowiednie? Proszę wytłumacz. Czy są chwile, kiedy #define jest po prostu okropne? Proszę o rozwinięcie. (Możesz powiedzieć „zawsze”, jeśli naprawdę chcesz, ale szukam bardziej szczegółowych odpowiedzi.) (Tak, staram się uzasadnić użycie #define, które według mnie wygląda o wiele ładniej.)


title: Strategia I18n dla aplikacji internetowych Java

text: Umiędzynarodowione aplikacje zazwyczaj wyświetlają w nagłówku linki do tłumaczenia w różnych językach, np.: hiszpański | angielski | Włoski. Te linki zwykle tłumaczą bieżącą stronę w wybranym języku, a adres URL zawiera zazwyczaj język: http://www.mysite.com/myapp/es/somePage. Pytania: 1. Czy dotyczy to tylko treści statycznych? 2. Czy można w ten sposób umiędzynarodowić dynamiczne treści? Na przykład w przypadku strony, której wynikiem jest przesłanie formularza, kliknięcie innego języka może skutkować niepożądanymi konsekwencjami. Niektóre żądania dynamiczne, w których transakcje nie są zaangażowane (na przykład proste zapytania), mogą nie stwarzać z tym problemów. 3. W przypadku autoryzowanej treści, myślę, że muszę poprosić o język na stronie logowania i używać tego języka, tj. Zabronić zmiany lokalizacji dla autoryzowanej treści, która prawdopodobnie ma dużo transakcji. Czy to jest poprawne? 4. Jak uporządkować pliki szablonów? Jeden JSP dla każdego z języków? Jedna strona JSP z plikiem właściwości dla każdego z języków? 5. Jak skonstruować link zgodnie z aktualnym życzeniem? Wydaje mi się, że żądany adres URL i ciąg parametrów powinny zostać zapamiętane i zrekonstruowane w JSP.


title: czy powinienem stworzyć nową klasę dla konkretnego fragmentu logiki biznesowej?

text: Mam klasę Request opartą na tej samej jednostce w mojej domenie. Obecnie ma tylko definicje właściwości. Chciałbym dodać metodę sprawdzania zduplikowanego żądania, które wywołam z mojego kontrolera. Czy powinienem dodać metodę o nazwie CheckDuplicate w klasie Request? Czy naruszyłbym SRP? Metoda będzie musiała uzyskać dostęp do kontekstu bazy danych, aby sprawdzić już istniejące żądania. Myślę o stworzeniu zupełnie innej klasy dla tej logiki, która akceptuje kontekst danych jako część swojego konstruktora. Ale tworzenie zupełnie nowej klasy tylko dla jednej metody również wydaje się marnotrawstwem. Jakakolwiek rada?


title: Jak zorganizować klasę w Pythonie?

text: Do Pythona doszedłem z C++ (znam też trochę Javę). Piszę kod do ćwiczenia serwera, więc zasadniczo używam metod http do wysyłania żądań do serwera. W ramach mojego kodu stworzyłem klasę i nazwałem ją testdata. Zawiera on w zasadzie testowe dane wejściowe (do wysłania w żądaniach) i dane wyjściowe do sprawdzenia. Z czapką C++ stworzyłem ładunek metod pobierających i ustawiających, które były jedną linią. Miałem nawet metodę `__init__` do ustawienia np. `self.<some_attribute_name> = ""` lub jakieś bezpieczne ustawienie domyślne. Teraz zdaję sobie sprawę, że możesz dowolnie dodawać atrybuty do obiektu Pythona i nie ma potrzeby wstępnego inicjowania prostych zmiennych w init. Więc mam kilka pytań. 1. Czy w przypadku mojej klasy testdata powinienem używać klasy? 2. Po prostu dodaję elementy danych w następujący sposób: import testing td = testing.testdata() td.sessionid = "123" 3. Ale co z dostępem np. do `td.sessionid` zanim wcześniej przypisałem wartość. Wiem, że mogę użyć `hasattr` ale to jest dodatkowe obciążenie. Czy muszę się upewnić, że zawsze przypisuję jako pierwszy? Co się stanie, jeśli zrobię `td.sessionid` zanim zostanie mu cokolwiek przypisane? Otrzymam AttributeError w czasie wykonywania. Jak sobie z tym poradzić? 4. Z powodu problemu 3. powyżej. Czy powinienem zawsze używać `__init__` do inicjalizacji danych składowych do bezpiecznych wartości domyślnych? np. "" dla ciągów. Jakie są zalecane podejścia w Pythonie?


title: Która strona internetowa najdokładniej przedstawia możliwości programisty?

text: Gdybyś zatrudniał programistów i mógłbyś wybrać jednego z (powiedzmy) 100 najlepszych programistów na topcoder.com lub jednego ze 100 najlepszych programistów na stackoverflow.com, którego byś wybrał? Przynajmniej mnie wydaje się, że topcoder.com daje bardziej obiektywną ocenę czystej umiejętności rozwiązywania problemów i pisania kodu. Jednocześnie, pomimo oczywistych _technicznych_ zdolności, tej osobie może brakować jakichkolwiek śladów umiejętności społecznych – może być po prostu „samotnym koderem”, z niewielką lub żadną zdolnością do pomocy/pracy z innymi, może brakować umiejętności mentoringu, aby pomóc w transferze jego umiejętności techniczne dla innych itp. Z drugiej strony, stackoverflow.com przynajmniej wydaje się znacznie lepiej wskazywać na opinię rówieśników na temat danego kodera oraz stopień, w jakim jego obecność jest przydatna i pomocna dla innych na drużyna". Jednocześnie system punktacji jest taki, że ktoś, kto po prostu rzuca dużo przeciętnych (lub nawet słabych odpowiedzi), prawie nieuchronnie zgromadzi pozytywną sumę punktów „reputacji” – pojedynczy głos za (być może po prostu z grzecznościowy) przeciwdziała skutkom nie mniej niż 5 głosów przeciw, a inni są zniechęceni (do pewnego stopnia) do oddawania głosów, ponieważ muszą poświęcić własne punkty reputacji, aby to zrobić. Jednocześnie wydaje się mało prawdopodobne, że ktoś, kto wnosi niewielki lub żaden wkład techniczny, zdobędzie reputację, która wyląduje (nawet blisko) szczytu stosu, że tak powiem. A więc, co daje bardziej przydatne wskazanie, w jakim stopniu ten konkretny koder może być przydatny dla Twojej organizacji? Gdybyś mógł wybierać między nimi, który zestaw programistów wolałbyś pracować w swoim zespole?


title: Nie określasz zwrotu w funkcji, dobrej czy złej?

text: Kodowałem w ten sposób wiele razy i nigdy nie spotkałem się z problemem, ale kompilator zawsze ostrzega, gdy oczekuje zwrotu i nie ma go. Na przykład spójrz na to: -(NSString *)outputStringForInteger:(NSInteger)int { if (int == 0) { return @"Liczba równa się zero"; } else { return @"Liczba nie jest zerem"; } //brak "failsafe" lub innego wyraźnego powrotu } Jeśli funkcja nigdy nie dotrze do ostatniej linii, czy to ważne, aby nadal mieć opcję failsafe, czy po prostu radzicie sobie z ostrzeżeniami kompilatora?


title: Gdzie mogę znaleźć wiarygodne źródło dokumentujące relacje między organami normalizacyjnymi?

text: Wydaje się, że istnieje wiele różnych tak zwanych organów „standardowych” wchodzących w interakcje i/lub konkurujących ze sobą. Na przykład, RFC 3629 odwołuje się do normy ISO/IEC 10646 i wydaje się być zarządzana przez IETF, ale nie ma wzmianki o IEEE, które również posiada udokumentowaną terminologię i standardy programowania. Szukam czegoś takiego: The Internet Ecosystem http://www.isoc.org/pubpolpillar/docs/factsheet_ecosystem_20090310.pdf ale mniej specyficznego dla Internetu, a bardziej dla komputerów. Pytania, na które może odpowiedzieć dobry zasób (zasoby), to: Które organizacje są ze sobą skłócone lub właśnie wypełniły potrzeby, których nie dostarczyła druga strona? Która książka (książki), wpis na blogu (lub seria wpisów na blogu) lub inny dokument, który określa relacje między organizacjami i akronimami? Szukam źródła lub listy źródeł, które mogą pomóc mi zrozumieć historię, autorytet i znaczenie tych organizacji i standardów w odniesieniu do siebie. Dobra odpowiedź może zawierać link, który pozwoli mi iść we właściwym kierunku, a nawet po prostu listę źródeł, które pomogą mi złożyć wszystkie elementy.


title: Dlaczego model domeny anemicznej jest uważany za zły w C#/OOP, ale bardzo ważny w F#/FP?

text: W poście na blogu poświęconym F# dla zabawy i zysku jest napisane: > W projekcie funkcjonalnym bardzo ważne jest oddzielenie zachowania od danych. > Typy danych są proste i „głupie”. A potem osobno, masz kilka funkcji, które działają na tych typach danych. > > Jest to dokładne przeciwieństwo projektowania obiektowego, w którym zachowanie i > dane mają być połączone. W końcu to właśnie jest klasa. W naprawdę zorientowanym obiektowo projekcie, nie powinieneś mieć nic poza zachowaniem > -- dane są prywatne i można do nich uzyskać dostęp tylko za pomocą metod. > > W rzeczywistości, w OOD, niewystarczające zachowanie wokół typu danych jest uważane za > Złą Rzecz, a nawet ma nazwę: "model domeny anemicznej". Biorąc pod uwagę, że w C# wydaje się, że wciąż zapożyczamy z F# i próbujemy pisać bardziej funkcjonalny kod; dlaczego nie zapożyczamy pomysłu oddzielenia danych/zachowania, a nawet uważamy to za złe? Czy to po prostu, że definicja nie jest z OOP, czy istnieje konkretny powód, dla którego jest źle w C#, który z jakiegoś powodu nie ma zastosowania w F# (i w rzeczywistości jest odwrócony)? (Uwaga: szczególnie interesują mnie różnice w języku C#/F#, które mogą zmienić opinię o tym, co jest dobre/złe, a nie osoby, które mogą nie zgadzać się z którąkolwiek opinią w poście na blogu).


title: Uruchom WebAPI w bezpłatnej witrynie Azures

text: Tylko szybkie pytanie. Widzę, że Azure ma ofertę, w której możesz bezpłatnie hostować 10 witryn? Czy można to wykorzystać do hostowania niektórych projektów WebAPI zamiast tradycyjnej strony internetowej? Biorąc pod uwagę, że projekty WebAPI są bardzo podobne do witryny ASP.NET MVC, przyjmę odpowiedź twierdzącą. Ale i tak po prostu sprawdzam. Dziękuję Ci.


title: Sytuacja prawna/prawa autorskie - Pracodawca odmawia mi uczciwej zapłaty (być może w ogóle), ale oczekuje, że przekażę kod, nad którym pracowałem

text: To moje pierwsze pytanie tutaj, mam nadzieję, że nie robię nic złego! Zacznę od stwierdzenia, że jestem 21-letnim studentem studiów ścisłych (to będzie ciekawe później - zobaczysz dlaczego!). Wróciłem na wakacje z uniwersytetu i dostałem pracę w firmie zajmującej się projektowaniem stron internetowych w mieście, w którym mieszkam. Moi rodzice zaaranżowali pracę podczas mojej nieobecności, ponieważ są klientem tej firmy. Wyraźnie wskazano w moim wymaganiu, by zarobić trochę pieniędzy w domu na lato. Od około 6 lat hobbystycznie zajmuję się projektowaniem stron internetowych, PHP/HTML/CSS/JS oraz C#/Java/vb.NET/Python. Nadszedł dzień rozpoczęcia pracy, byłem entuzjastycznie nastawiony i ciężko pracowałem. Firma jest raczej źle zarządzana i odkąd zacząłem, zwolnili 2 innych programistów (z trzyosobowego zespołu) po tym, jak zobaczyli, jak niewiele wiedzieli. Szef chwali mnie codziennie i prosił, żebym nawet rzucił studia, żeby przyjechać i pracować dla niego. Grzecznie odmówiłem, bo byłaby to strata czasu spędzonego do tej pory na uniwersytecie. W każdym razie, to nie ma znaczenia. W ostatni piątek (tydzień przed zakończeniem) umówiliśmy się z szefem na spotkanie, aby porozmawiać o tym, ile mi zapłacą. Nie spodziewałem się fortuny (jako freelancer za 16 funtów za godzinę, spodziewałem się mniej niż połowy tej kwoty). Głupio, kiedy zaczynałem, nie podpisałem umowy dotyczącej wynagrodzenia. I tutaj cała sytuacja uległa zmianie. Spędziłem tam 5 tygodni, 9-5, 5 dni w tygodniu. Zwykle pracuję przez lunch, żeby zaimponować szefowi (liczę na mały bonus). W tym czasie przepracowałem około 200 godzin. Szef otwiera spotkanie pytając, jak moje „doświadczenie” było. Mówię mu, że nauczyłem się bardzo mało, ponieważ prawie codziennie udzielam innym programistom wskazówek dotyczących najlepszych praktyk (nadal używają obrazów jako przycisków...) i zapoznałem ich z czcionkami ikon, SASS i innymi rzeczami. poprawić przepływ pracy. Akceptuje to, mówiąc, że bycie tam naprawdę otworzyło mu oczy (nie jest programistą, źródło jego problemów właśnie tam). W każdym razie mówi mi, że czasy są ciężkie i zwykle nie płacą ludziom za „doświadczenie zawodowe”. Od razu do niego zadzwoniłem, stwierdzając, że nie jestem tu po staż, tylko po to, żeby zarobić. On to lekceważy i mówi, że mam szczęście, że coś dostałem. I oferuje mi 2,50 funta za godzinę, co oznacza, że po 5 tygodniach zarobiłem 500 funtów. A co gorsza, nie jestem pewien, czy w ogóle otrzymam zapłatę. Zdaję sobie sprawę, że to moja wina, ponieważ żadne warunki nie zostały uzgodnione przed moim rozpoczęciem, ale założyłem (błędnie), że będzie uczciwy i zapłaci mi w dobrej wierze. Przez ostatni tydzień pracowałem nad projektem, którego nikt inny nie może zrobić (to naprawdę tylko strona laravel, responsywna, z projektu), a także napisałem bibliotekę interfejsów API do obsługi pobierania surowych danych od Izby Turystyki Irlandii Północnej dla jednego ze swoich klientów, wraz z całą inną codzienną pracą, którą dla nich wykonywałem. Pod koniec tygodnia będę oczekiwał, że oddam ten kod (dla głównego projektu) i zastanawiałem się, czy są jakieś podstawy prawne, na których mógłbym się oprzeć. Najważniejszą rzeczą, o którą się martwię, jest to, że oddam kod i w ogóle nie otrzymam zapłaty. Czy mógłbym nabyć licencję na kod i zapobiec jego użyciu? Chyba jestem właścicielem kodu? Nie użyto żadnych zasobów firmy, cały kod został pobrany bezpośrednio przez kompozytora. Myślę, że zrobiłem to w firmie, ale to wszystko na moim laptopie, a jeśli nie płacę za czas spędzony tam, czy firma jest w ogóle właścicielem tego? Jedyny problem, jaki widzę, to to, że projekt został przekazany firmie, w której pracuję, od klienta, a klient zlecił projekt innej firmie. Nie planowałem używać projektu, sprzedawać go ani w żaden inny sposób. Normalnie nie byłbym taki, nie jestem chciwym człowiekiem. Ale moje życie zależy od tych pieniędzy. Po opłaceniu zakwaterowania mam tylko 1900 funtów na życie przez cały rok na uniwersytecie. Tak więc przyzwoita płaca naprawdę by mi pomogła w tym względzie. Jakakolwiek pomoc w postępowaniu byłaby bardzo mile widziana! Tomek


title: Nie używaj "Static" w C#?

text: Przesłałem aplikację, którą napisałem do kilku innych architektów w celu sprawdzenia kodu. Jeden z nich niemal natychmiast odpisał mi i powiedział: „Nie używaj „statycznych”. Nie możesz pisać testów automatycznych ze statycznymi klasami i metodami. „Statycznych” należy unikać”. Sprawdziłem i cała 1/4 moich zajęć jest oznaczona jako „statyczne”. Używam statycznego, gdy nie zamierzam tworzyć instancji klasy, ponieważ klasa jest pojedynczą klasą globalną używaną w całym kodzie. Następnie wspomniał o czymś związanym z prześmiewaniem, technikami IOC/DI, których nie można używać z kodem statycznym. Mówi, że to niefortunne, gdy biblioteki innych firm są statyczne z powodu ich nietestowalności. Czy ten inny architekt ma rację? aktualizacja: oto przykład: APIManager - ta klasa przechowuje słowniki 3rd party API, które wywołuję wraz z następnym dozwolonym czasem. Wymusza limity użycia interfejsu API, które wiele stron trzecich ma w swoich warunkach korzystania z usługi. Używam go wszędzie, gdzie dzwonię do usługi innej firmy, wywołując Thread.Sleep(APIManager.GetWait("ProviderXYZ")); przed wykonaniem połączenia. Wszystko tutaj jest bezpieczne dla wątków i działa świetnie z TPL w C#.


title: Jaki jest cel przeglądu kodu

text: Jestem w trakcie próby sprzedania mojej organizacji wartości z przeglądów kodu. Pracowałem w kilku miejscach, w których byli zatrudnieni. Widziałem ich przyzwyczajonych do wyboru stylizacji i decyzji funkcjonalnych, i widziałem je jako nic więcej niż kontrolę instynktu, aby upewnić się, że nic niebezpiecznego nie jest wdrażane. Mam przeczucie, że najskuteczniejszy cel leży gdzieś pomiędzy tymi dwiema opcjami. Jaki jest więc cel przeglądu kodu?


title: mając do czynienia z bardzo dużą maszyną stanową w klasie

text: Obecnie implementuję klasę dla protokołu sieciowego. Protokół wykorzystuje dość złożoną i rozbudowaną maszynę skończoną. Para zdarzenia plus stan jest mapowana na funkcję, która wykonuje pewną pracę i ustawia nowy stan. Ponieważ istnieje około 150 prawidłowych kombinacji stanów/zdarzeń i 28 odrębnych funkcji do wywołania, przekształciłem całą logikę automatu stanów z kojarzenia/wysyłania/odbierania/... (nazwijmy to klasą usług) do oddzielnej klasy maszyny stanów. Problem polega na tym, że niektóre z tych 28 funkcji potrzebują dostępu do klasy usługi, na przykład w celu zresetowania licznika czasu. To, co mógłbym zrobić, to zaprzyjaźnić się z klasą maszyny stanowej i klasą usług, aby miały dostęp do swoich wewnętrznych elementów. Wprowadziłoby to bardzo ścisłe sprzężenie (choć naturalne, ponieważ należą do siebie). Mógłbym też po prostu opuścić obie te klasy w jednej, ale to zaowocowałoby ogromną klasą. Ale ponieważ wątpię, czy to ja pierwszy natrafiłem na ten problem, zakładam, że istnieje mniej lub bardziej puszkowane rozwiązanie tego problemu, którego jeszcze nie znalazłem.


title: Problemy z udostępnianiem/dostępem wielu wątków do tych samych danych

text: Badałem, kiedy dane są dostępne lub udostępniane przez wiele wątków w Javie. I patrząc na takie problemy, jak: * Zakłócenia wątku * Spójność pamięci * Zakleszczenie * Głód Od tego rozwiązania do rozwiązania tych problemów. Jak dotąd wszystko, co wydaje mi się, że mogę rozwiązać te problemy, to użycie metody synchronizacji. Czy istnieją inne alternatywy dla metody synchronizacji? Większość tych informacji znalazłem w samouczku Java Sun. Jakieś zalecenia dotyczące dalszej lektury?


title: HTML Canvas: czy wartości x, y mojej aplikacji powinny być globalne?

text: Mam duży plik funkcji. Każda z tych funkcji odpowiada za rysowanie określonej części aplikacji. Moja aplikacja ma parametry x i y, których używam w funkcji konfiguracji, aby przenieść całą aplikację w celu wypróbowania różnych miejsc docelowych. Tak więc, naturalnie, muszę użyć tych wartości x i y, aby zakotwiczyć renderowanie komponentów każdej funkcji, aby wszystko poruszało się zgodnie, jeśli globalne wartości x,y kiedykolwiek się zmienią. Moje pytanie brzmi, czy złą praktyką/architekturą jest posiadanie tych wartości x,y w globalnej przestrzeni nazw i posiadanie bezpośredniego dostępu do nich przez każdą funkcję? function renderFace() { var x = App.x; zmienna y = App.y; // rysuję tutaj } czy jest lepszy sposób, którego mi brakuje?


title: Problemy z pamięcią z singletonami w zestawie testowym

text: Mam przeciek pamięci podczas uruchamiania zestawu testów, ponieważ obiekty singleton są tworzone i nie są usuwane po każdym przypadku testowym. A te pojedyncze obiekty zawierają odniesienia do ciężkich obiektów. Nie wiem więc, czy istnieje lepsze rozwiązanie niż czyszczenie pojedynczych obiektów w metodach `tearDown()` w każdej klasie testowej! Co myślisz?


title: Które algorytmy sortowania mają inną złożoność najgorszego przypadku niż ich przeciętny przypadek?

text: Od jakiegoś czasu pracuję nad sortowaniem, ale nie mogę rozróżnić tych dwóch pytań, gdzieś się mieszam ... Ktoś pomoże a) Które algorytmy sortowania mają inną złożoność najgorszego przypadku niż ich średnia walizka? b) Które algorytmy sortowania mają inną złożoność najlepszego przypadku niż ich przeciętny przypadek?


title: Dane Sub-Resource powinny być osadzone w encji Resource lub zduplikowane w dokumencie NoSQL?

text: Mam scenariusz podobny do przedstawionego poniżej, public class Post { private int id; private int postType; prywatny wynik int; Użytkownik prywatny oryginalnyPlakat; prywatny tytuł ciągu; prywatne ciało String; prywatne znaczniki String; } public class Komentarz { private int id; prywatny int postId; prywatny tekst ciągu; prywatny wynik int; prywatny identyfikator użytkownika; } public class Użytkownik { int id; Wyświetlana nazwa ciągu; wynik wewnętrzny; } Jak modelować mój dokument/obiekt domeny MongoDb? Moje początkowe opcje to: **1) Posiadanie oddzielnych kolekcji postów i komentarzy oraz obsługa aktualizacji/pobierania ukrytych za moimi zasobami Resztowymi z możliwym duplikatem komentarza zarówno w poście, jak i komentarzu.** **2) Mieć jeden post z dokumentem i dołączyć wszystko w nim i masz tylko jeden Zasób Odpoczynkowy? Ograniczy to moje szablony adresów URL lub potrzebę skomplikowanego pobierania danych na końcu MongoDB.** Czy powinienem wybrać 1) czy 2), czy jest inne podejście, w którym mogę mieć elastyczność szablonów url i zminimalizować interakcje NoSQL?


title: Jak dokumentować wydarzenia?

text: Dokumentacja kodu jest zwykle powiązana z fragmentem kodu, czy to małym (na poziomie metody), czy większym (na poziomie klasy lub przestrzeni nazw). Jednak zawsze chodzi o _wejścia_ i _wyjścia_ tego fragmentu kodu, prawdopodobnie opisując jego zachowanie i zastrzeżenia. Nie ma większego sensu dokumentowanie zdarzeń wywoływanych przez klasę w metodach, które mogą je wywoływać: mogą one być duplikowane i, z definicji zdarzeń, od słuchacza nie oczekuje się dbania o to, co je wyzwala, a jedynie na ich obsługę. Dokumentowanie wszystkich wydarzeń na szczycie klasy wydaje się dość ciężkie, ponieważ ktoś, kto chce uzyskać przegląd zachowania klasy, może nie być tak zainteresowany głębokim nurkowaniem w tym „dodatkowym interfejsie”. Ten problem jest łagodzony w językach silnie typizowanych, takich jak Java (tak, chyba że używasz klas anonimowych, ale nie wydaje się to tak powszechne), ponieważ zdarzenia będą definiowane w ich własnych klasach, które można następnie udokumentować. Jednak w językach z luźniejszymi typami, gdzie zdarzenie jest po prostu identyfikatorem typu String i serią parametrów, znacznie trudniej jest znaleźć odpowiednie miejsce do udokumentowania tych kombinacji identyfikatorów/parametrów. A więc: gdzie powinno się dokumentować zwolnione zdarzenia w językach, które nie modelują ich wprost?


title: Czy Java dogoni C#?

text: Dzisiaj wysłałem pytanie o to, który język C# lub Java byłby dla mnie lepszy do nauki. Miałem kilka świetnych odpowiedzi. Jedną z rzeczy, która się pojawiła, było to, że być może Java jest teraz raczej za C# z nowymi funkcjami. Zobaczyłem kilka linków internetowych i większość wskazałem, co ma C#, a czego nie ma java. Więc moje pytanie do was wszystkich brzmi, czy Java ponownie dogoni C#? A jeśli miałbyś zgadywać, gdzie by to było za 5 lat. Czy miałby wszystkie rzeczy, których być może teraz brakuje? A co z Javą 7?


title: Jak prawidłowo udokumentować algorytm za pomocą przykładowych danych?

text: Zastanawiam się, co powinna zawierać dokumentacja algorytmu? Nie mogę znaleźć właściwej wytycznej do naśladowania. Mam na myśli dołączenie * podsumowanie algorytmu * opis algorytmu * schematy blokowe * pseudokody * przykładowy zestaw danych wejściowych (wiele) * dane wyjściowe * testy jednostkowe * eksperymenty Klient żąda takiej dokumentacji, aby: _Utrzymać zaufanie do własnych liczb, a także opisać nasz proces potencjalnym klientom, aby wiedzieli, że podejmujemy kroki w celu sprawdzenia i weryfikacji naszych obliczeń._ * Jak wyglądałaby taka dokumentacja? (przykładowy plik PDF) * Co więcej zawarłbyś w tej dokumentacji? * To, co wymieniłem, jest takie dobre, czy powinno to być jakoś inaczej udokumentowane? * Jak szukałbyś w Google takich próbek dokumentacji?


title: Jak stworzyć Bezpieczeństwo Pracy?

text: Właśnie zacząłem nową pracę programistyczną i powiedziano mi, że dobrze sobie radzę. Martwię się jednak, że zostanę zwolniony z powodu gospodarki i tego, jak radzi sobie firma. Obecnie po cichu zajmuję się pracą jak zwykle i mam nadzieję, że nie puszczę się. Ale martwię się, że to nie jest dobra odpowiedź. Czy mogę coś zrobić, aby pomóc w zapewnieniu bezpieczeństwa pracy? (Oprócz pisania okropnego kodu kredytu hipotecznego, który tylko ja mogę utrzymać, zmuszając w ten sposób (?) firmę do zatrzymania mnie)


title: Wybierasz, która instancja aplikacji będzie wykonywać aktualizacje w przypadku pracy z wieloma stacjami roboczymi bez zaangażowanego serwera?

text: Mam więc ciekawy problem projektowy i szczerze mówiąc nie wiem, jak sobie z tym poradzić. Posiadam aplikację, która będzie działała na kilkunastu stacjach roboczych. Spośród tych stacji roboczych nie można w danym momencie wiedzieć, ile z nich będzie na mojej aplikacji lub z niej korzystało. Co 4 godziny czasu lokalnego, jeśli którakolwiek z aplikacji jest włączona, sprawdzają bazę danych i wprowadzają pewne zmiany. Problem polega na tym, że jeśli więcej niż jeden spróbuje to zrobić, pojawią się poważne komplikacje. Potrzebuję więc sposobu, aby tylko jedna aplikacja wykonała aktualizacje, jeśli działa więcej niż jedna. Myślałem o stworzeniu pliku, który znajdowałby się na dysku sieciowym, na którym aplikacje dołączałyby swoje adresy stacji roboczych, gdy są włączone, i usuwałyby, gdy są wyłączone. Co 4 godziny czasu lokalnego aplikacje sprawdzają plik, a ktokolwiek jest na górze, uruchamia aktualizację. Problem polega na tym, że jeśli aplikacja zostanie zamknięta w taki sposób, że nie może usunąć się z początku listy, nie pojawią się żadne aktualizacje. Nie mam możliwości umieszczania żadnych aplikacji do uruchomienia na samym serwerze, poza przechowywaniem tam plików, więc to nie wchodzi w rachubę. Czy ktoś zna rozwiązanie tego problemu? Wydaje mi się, że nie potrafię owinąć wokół tego mózgu. **Edycja:** W tej chwili zaimplementowałem to: int updateTimerOffset = (Convert.ToInt32(DateTime.Now.ToString("mm")) * 60000) - 120000; updateTimer = new System.Timers.Timer(3600000 - updateTimerOffset); updateTimer.AutoReset = prawda; updateTimer.Enabled = prawda; updateTimer.Elapsed += nowy System.Timers.ElapsedEventHandler(PerformUpdates); a następnie w moim PerformUpdates mam kod, który wygląda tak: int currentHr = Convert.ToInt32(DateTime.Now.ToString("HH")); if (currentHr % 4 >= 0 && currentHr >= fileNum) { // zmień fileNum w pliku na currentHr + 4 jeśli currentHr nie wynosi 24, // jeśli tak to ustaw wartość równą 4 // Update stuff bazy danych } fileNum to liczba przechowywana w pliku na serwerze. Odbywa się to podczas uruchamiania każdej aplikacji. Tak więc każda aplikacja, chyba że zostanie uruchomiona dokładnie w tej samej sekundzie, będzie miała różnicę 2 minut (120 000 milisekund) plus kilka sekund, których nie wziąłem pod uwagę między ich uruchomieniami. To, co mogę zrobić, to mieć prosty plik zawierający numer godziny docelowej (fileNum). Tak więc, gdy aplikacja to sprawdza, sprawdza liczbę do porównania. Powiedzmy, że jest 16:00, w takim przypadku 16% 4 daje nam 0 i czas na aktualizację. Ta aplikacja sprawdza plik i widzi, że wartość to 12. 16 jest równa lub większa od 12. Zmienia więc wartość na bieżącą godzinę (16) + 4, czyli 20. Odliczanie czasu następnej aplikacji upłynie mniej więcej minutę później , i ma 0 dla swojej wartości godziny mod. Więc patrzy na plik i widzi, że wartość to 20, czyli jest większa niż 16, więc nic nie robi. Co myślicie o tym rozwiązaniu? Nie działałoby, gdyby były setki stanowisk, bo szanse na to, że obie aplikacje będą próbowały to zrobić w tym samym czasie, są większe, ale przy kilkunastu stanowiskach mogę to zrobić? Chyba że ktoś ma lepsze rozwiązanie?


title: Praktyczne zastosowanie słowa kluczowego "yield" w C#

text: Po prawie 4 latach doświadczenia nie widziałem kodu, w którym użyto słowa kluczowego **yield**. Czy ktoś może mi pokazać praktyczne zastosowanie (wraz z wyjaśnieniem) tego słowa kluczowego, a jeśli tak, czy nie ma innych sposobów na łatwiejsze wypełnienie tego, co może zrobić?