title: Zalety wielu metod w porównaniu z przełącznikiem

text: Otrzymałem dzisiaj recenzję kodu od starszego programisty z pytaniem: „Przy okazji, jaki jest twój sprzeciw wobec rozsyłania funkcji za pomocą instrukcji switch?” Czytałem w wielu miejscach o tym, jak pompowanie argumentu przez metody przełączania na wywołanie jest złym OOP, nie tak rozszerzalnym, itp. Jednak tak naprawdę nie mogę znaleźć dla niego ostatecznej odpowiedzi. Chciałbym to załatwić sobie raz na zawsze. Oto nasze konkurencyjne sugestie dotyczące kodu (php użyto jako przykładu, ale można zastosować bardziej uniwersalnie): class Switch { public function go($arg) { switch ($arg) { case "jeden": echo "jeden\n"; przerwanie; case "dwa": echo "dwa\n"; przerwanie; case "trzy": echo "trzy\n"; przerwanie; default: throw new Exception("Nieznane wywołanie: $arg"); przerwanie; } } } class Oop { public function go_one() { echo "jeden\n"; } public function go_two() { echo "dwa\n"; } public function go_three() { echo "trzy\n"; } public function __call($_, $__) { throw new Exception("Nieznane wywołanie $_ z argumentami: " .print_r($__, true)); } } Częścią jego argumentu było "To (metoda przełączania) ma znacznie czystszy sposób obsługi domyślnych przypadków niż to, co masz w ogólnej magicznej metodzie __call()." Nie zgadzam się co do czystości iw zasadzie wolę dzwonić, ale chciałbym usłyszeć co inni mają do powiedzenia. Argumenty, które mogę wymyślić na poparcie schematu `Oop`: * Nieco czystszy kod, który musisz napisać (mniej, łatwiejszy do odczytania, mniej słów kluczowych do rozważenia) * Nie wszystkie działania delegowane do jednej metody. Nie ma tu dużej różnicy w wykonaniu, ale przynajmniej tekst jest bardziej podzielony na przedziały. * W tym samym duchu inną metodę można dodać w dowolnym miejscu klasy zamiast w określonym miejscu. * Metody mają przestrzeń nazw, co jest miłe. * Nie dotyczy tutaj, ale rozważ przypadek, w którym `Switch::go()` działał na elemencie, a nie na parametrze. Musiałbyś najpierw zmienić członka, a następnie wywołać metodę. W przypadku `Oop` możesz w dowolnym momencie niezależnie wywołać metody. Argumenty, które mogę wymyślić na poparcie schematu `Switch`: * Ze względu na argument, czystszy sposób radzenia sobie z domyślnym (nieznanym) żądaniem * Wydaje się mniej magiczny, co może sprawić, że nieznani programiści poczują się bardziej komfortowo Każdy ma coś do dodania po obu stronach? Chciałbym mieć dla niego dobrą odpowiedź.


title: Jak układasz notatki z informatyki na uniwersytecie?

text: Kończę rok studiów podyplomowych w CS w następnym semestrze. W tym roku kończę studia prawnicze i wykorzystam to, aby pokrótce wyjaśnić, co mam na myśli, odnosząc się do „struktury” notatek uniwersyteckich. Moja preferowana struktura do tworzenia notatek prawnych: * Słowo * Dwie kolumny * Marginesy 0,5 cm (górny, prawy, dolny, środkowy, lewy) * Tekst główny (10 pkt, zwykły), 3 poziomy nagłówków (14/12/10 pkt, pogrubienie) , 3 poziomy list punktowanych * Kolor tła A dla spraw * Kolor tła B dla prawodawstwa Uważam, że dobra struktura od samego początku jest bardzo ważna. Moją kluczową radą dla studenta prawa byłoby upewnienie się, że style pozwalają na łatwe identyfikowanie spraw i przepisów z tekstu pomocniczego i nie zawierają zbyt wielu szczegółów dotyczących faktów dotyczących spraw. Więcej niż 3 poziomy nagłówków są zbyt głębokie. Więcej niż 3 poziomy listy punktowanej są zbyt głębokie. W zakresie CS interesują mnie podobne porady; na przykład wszelkie strategie, które zostały z powodzeniem zastosowane w odniesieniu do struktury i ogólne porady dotyczące robienia notatek. Czy lateks okazał się lepszy niż Word? Kod prawdopodobnie musiałby być stylistycznie zróżnicowany i używać czcionki o stałej szerokości — być może kod można by napisać w TextMate, aby można go było skopiować, aby zachować podświetlanie składni? (Czy notatki są nawet tak przydatne na studiach CS? Kusi mnie, aby po prostu skorzystać z podręcznika. Są one kluczowe w prawie.) Rozumiem, że różni ludzie mogą stosować różne techniki i że ludzie będą mieli osobiste preferencje, jednak interesuje mnie, co te różne techniki są. **Aktualizacja** Dziękujemy za dotychczasowe odpowiedzi. Aby wyjaśnić, nie sugeruję, że podejście powinno być porównywalne z tym, które stosuję w prawie. Mogłem być jaśniejszy. Jak dotąd wydaje się, że konsensus jest taki – po prostu się tego naucz. Sama struktura notatek/notatek nie jest ogólnie istotna. Do tego właśnie nawiązałem, kiedy powiedziałem, że po prostu kusiło mnie, by użyć podręcznika. Przypominam, że wspomniane podręczniki są generalnie bezużyteczne – zdecydowanie się z tym nie zgadzam. Jasne, być może zalecany podręcznik jest bezużyteczny. Ale jeśli mam się nauczyć języka programowania, (1) zidentyfikuję najlepszy podręcznik i (2) go przeczytam. Nie byłem pewien, czy połączenie teorii z kodem oznacza, że notatki z wykładów mogą być bardziej efektywnym sposobem nauki do egzaminu. Wyobrażam sobie, że zależałoby to od tematu. Preferowanym przeze mnie podejściem byłby temat dotyczący konkretnego języka programowania, czytanie podręcznika i kodowanie. Nie byłam jednak pewna, czy biorąc pod uwagę przedmiot zawierający teorię merytoryczną, która może nie być omówiona w jednym podręczniku, ludzie mogą mieć preferencje dotyczące robienia notatek i ich struktury.


title: Jak obsługiwać lub zapobiegać usuwaniu wszystkich administratorów i użytkowników

text: Mam stronę internetową, która przechowuje wszystkich użytkowników w bazie danych. Użytkownik może zalogować się do serwisu i jeśli posiada odpowiednie uprawnienia, dodawać/usuwać użytkowników, a także zmieniać ich uprawnienia. Jak mogę się upewnić, że w systemie jest zawsze co najmniej jeden Administrator (do tworzenia/edycji/usuwania użytkowników) lub że administrator może być łatwo dodany do systemu. Z pewnością mogę wprowadzić reguły, aby administrator nie mógł usunąć siebie ani innych podobnych reguł. Ale co, jeśli ktoś usunie wszystkich użytkowników z tabeli SQL. Hasła są haszowane, więc administrator nie może po prostu wejść i dodać nowego użytkownika z uprawnieniami administratora. Czy mam zakodować na stałe jakąś specjalną nazwę użytkownika/hasło, które są automatycznie dodawane do systemu, jeśli nie ma administratora?


title: Jak obsłużyć zapytania od klientów typu "czy możesz dodać jeszcze kilka pól"?

text: Bardzo często mamy prośby o dodanie funkcji dla pól, których potrzebuje tylko jeden klient. To w najlepszym razie zaśmieca kod aplikacji. Często, gdy zaglądamy do ich bazy danych kilka miesięcy po dodaniu pól, widzimy, że w rzeczywistości nawet nie korzystają z dodatkowych pól. Ponadto jest to dość stara aplikacja, więc dodanie jednego pola wymaga wielu zmian w kodzie, zmiany raportów i upewnienia się, że nie ma to wpływu na innych klientów, którzy nie muszą widzieć tego pola. * Jak możemy się upewnić, że klient rzeczywiście potrzebuje tych próśb o nowe funkcje? * Jak możemy grzecznie powiedzieć „tak naprawdę nie potrzebujesz tego”? Obecnie zaczynamy pobierać opłaty za niektóre prośby o nowe funkcje. (Wcześniej prośby o nowe funkcje były zazwyczaj bezpłatne) Czy jest coś jeszcze, co możemy zrobić?


title: Wydajność C++ a Java/C#

text: Rozumiem, że C/C++ tworzy natywny kod do uruchomienia na określonej architekturze maszyny. I odwrotnie, języki takie jak Java i C# działają na maszynie wirtualnej, która oddziela natywną architekturę. Logicznie wydawałoby się niemożliwe, aby Java lub C# dorównały szybkością C++ z powodu tego kroku pośredniego, jednak powiedziano mi, że najnowsze kompilatory ("hot spot") mogą osiągnąć tę prędkość, a nawet ją przekroczyć. Być może jest to bardziej pytanie o kompilator niż pytanie o język, ale czy ktoś może wyjaśnić prostym językiem angielskim, w jaki sposób jeden z tych języków maszyn wirtualnych może działać lepiej niż język ojczysty?


title: Jakie są dobre testy jednostkowe, które obejmują przypadek użycia rzutu kostką?

text: Próbuję uporać się z testowaniem jednostkowym. Załóżmy, że mamy kość, która może mieć domyślną liczbę boków równą 6 (ale może być 4, 5-stronna itd.): import random class Die(): def __init__(self, sides=6): self._sides = sides def roll(self): return random.randint(1, self._sides) Czy poniższe testy jednostkowe są poprawne/użyteczne? * przetestuj rzut w zakresie 1-6 dla kostką 6-ścienną * przetestuj rzut 0 dla kostką 6-stronną * przetestuj rzut 7 dla kostki 6-stronnej * przetestuj rzut w zakresie 1-3 dla kostki 3 * przetestuj rzut 0 dla kości trójstronnej * przetestuj rzut 4 dla kości trójstronnej Po prostu myślę, że to strata czasu, ponieważ losowy moduł istnieje już wystarczająco długo, ale potem myślę jeśli losowy moduł zostanie zaktualizowany (powiedzmy, że aktualizuję moją wersję Pythona), to przynajmniej jestem objęty. Czy muszę w ogóle testować inne odmiany rzutów kostką, np.? 3 w tym przypadku, czy dobrze jest pokryć inny zainicjowany stan matrycy?


title: Czy tworzenie HTML5 jest bezpieczniejsze niż Silverlight?

text: Uczę się Silverlight i wiem, że jeśli opanuję go, mogę zastosować te same koncepcje do WPF, co oznacza, że mogę całkiem łatwo tworzyć aplikacje internetowe lub pulpity. Ale czytałem artykuły i śledziłem dyskusję online i rozumiem, że HTML5 zyskuje na znaczeniu jako wieloplatformowy, a wiele osób wydaje się przechodzić na HTML5. Z mojego punktu widzenia, każda aplikacja HTML5 byłaby zbudowana za pomocą HTML i JavaScript (lub Flash). Ale czy to jest bezpieczne? Wygląda na to, że każdy może z łatwością skorzystać z opcji „wyświetl źródło” przeglądarki i pobrać kod. Czy jest to coś, o co powinienem się martwić, czy istnieje sposób, aby się przed tym uchronić?


title: Jak zarządzać zespołem o różnych poziomach umiejętności?

text: Będę pracował nad projektem oprogramowania z kilkoma moimi przyjaciółmi i zostałem mianowany kierownikiem technicznym. Żaden z tych facetów nie jest w ogóle złym programistą, ale mam znacznie większe doświadczenie niż oni. Muszę być w stanie rozdzielić pracę pomiędzy wszystkich członków zespołu, jednocześnie upewniając się, że nie depczemy sobie nawzajem; że spełniają stosunkowo wysokie standardy jakości i skalowalności, których potrzebujemy, aby ten projekt odniósł sukces, bez konieczności sprawdzania wszystkiego, co zobowiązują. Jak zachować standardy, unikając mikrozarządzania? Czy wystarczy zrobić kilka diagramów, zaplanować przeglądy kodu i zaufać, że będę w stanie naprawić wszystko, co może się zepsuć, czy też powinienem pójść drogą TDD i napisać testy, aby zespół był zadowolony?


title: Jaka jest rozsądna liczba wątków dla programu Java?

text: Jaka jest rozsądna liczba wątków do użycia w Javie (lub prawdopodobnie w większości innych języków ukierunkowanych na JVM)? Przypuszczalnie będzie to wyrażone jako stosunek do liczby dostępnych rdzeni/procesorów, czy to prawda? Przynajmniej początkowo wydaje się, że dwa razy więcej wątków niż rdzeni może mieć sens, ale ponad 20 razy więcej wydaje się nierozsądne. Czy na stosunek może mieć wpływ typ i/lub architektura oprogramowania? Czy istnieją rodzaje oprogramowania i/lub sytuacje, w których znacznie większa liczba wątków naprawdę ma sens? [I tak, wiem, że jest to sformułowane jako kilka osobnych pytań, ale myślę, że są one wystarczająco ściśle powiązane, aby jedna odpowiedź obejmowała je wszystkie, ponieważ wszystkie dotyczą tego, ile wątków ma sens w jakich okolicznościach. ]


title: Jak pomagasz rozwijać się swoim kolegom programistom?

text: Jako lider zespołu, jak możesz pomóc swoim programistom w rozwoju? Powodem, dla którego o to pytam, jest to, że pracuje ze mną kilku programistów i naprawdę chcę „uwolnić ich”, aby wykorzystać ich maksymalny potencjał i sprawić, by byli szczęśliwi. Ale nie bardzo wiem, jak to zrobić, czy muszę 1. Często wchodzić z nimi w interakcję lub dać im spokój, nie przeszkadzać? 2. Poproś ich, aby postępowali zgodnie z wytycznymi dotyczącymi kodowania, takimi jak egzekwowanie testów jednostkowych, stylów kodowania, lub pozwól im robić to, co uznają za stosowne? 3. Bądź dla nich wyrozumiały. Takich jak nie obchodzi, czy rzeczywiście przychodzą do biura na 8 czy 4 godziny, czy też muszą egzekwować pewne „dyscypliny” w miejscu pracy? Zgadnij co, każda pozycja ma swoje własne punkty, a różni ludzie będą się spierać o różne rzeczy. Takie zamieszanie sprawia, że zarządzanie ludźmi w nieskończoność jest trudniejsze. Co myślisz?


title: Jak radzisz sobie z niefunkcjonalną pracą ze Scrumem w systemach wbudowanych?

text: Mam dwa problemy ze scrumem w systemach wbudowanych. Po pierwsze, jest wiele zadań do wykonania, zwłaszcza na wczesnych etapach, których nie da się zademonstrować. Zaczęliśmy z płytą deweloperską, bez systemu operacyjnego, bez wyświetlacza, bez komunikacji szeregowej itp. Nie mieliśmy naszego wyświetlacza przez 6 sprintów. Pierwsze 4 sprinty to: * Utworzenie i uruchomienie RTOS * Tworzenie zadań Pisanie sterowników sieciowych i szeregowych * Pisanie procedur przerwań dla przycisków, komunikacji, itp. * Pisanie klas i metod podstawowej bazy danych * Pisanie menu debugowania portu szeregowego Większość z tych zadań to: nie nadaje się do historyjek użytkowników. W rzeczywistości jedynym interfejsem do całego systemu było menu debugowania szeregowego, wbudowane w sprint 3, więc na końcu sprintów nie było nic do zademonstrowania. Nawet menu seryjne było przeznaczone do użytku wewnętrznego, a nie dla użytkownika końcowego. Mimo to nadal chcę śledzić te działania programistyczne i zarządzać nimi za pomocą scrum. Skończyło się na pisaniu zwrotów „historyjki użytkownika”, takich jak „Jako programista…”, z których nie jestem zadowolony, ale korzystając z procesu docelowego (www.targetprocess.com), nie ma koncepcji elementu zaległości, który jest zadanie lub praca. Po drugie, jak radzisz sobie z wydaniami i testowaniem? To dla nas prawdziwy ból, ponieważ testerzy nie mają debuggerów sprzętowych, więc musimy budować wersje flashowe kodu i nagrywać je na swoich płytach deweloperskich w celu przetestowania. Testerzy nie są technicznie tak bystrzy jak programiści i często wymagają dużego wsparcia we wczesnych etapach pracy (resetowanie płyty, podłączanie komunikacji szeregowej itp.), a nawet w zrozumieniu wyników. Wreszcie, jeśli chodzi o definicję ukończenia, sprint nie może być ukończony, dopóki nie zostaną ukończone wszystkie historie. Wszystkie historie nie są kompletne, dopóki nie zostaną zweryfikowane przez testerów. Nie ma sposobu na uniknięcie „okradzenia” czasu programisty, aby dać testerom. Innymi słowy, jeśli ostatnie 3 historyjki użytkownika w sprincie będą testowane przez 5 dni, muszą zostać zakodowane i przetestowane jednostkowo na 5 dni przed końcem sprintu. Co ma zrobić programista, przestać działać? Jestem żartobliwy, ale to prawdziwy problem, próbując dostosować się do zasad. Teraz nie mam nic przeciwko naginaniu zasad, ale problem, który mam, polega na tym, że wszystkie moje metryki wypalania psują mi, jeśli nie mogę oznaczyć rzeczy zrobionych do czasu ich przetestowania. Chciałbym usłyszeć, jak inni radzili sobie w takich sytuacjach.


title: Co oferują inne języki, jeśli chodzi o technologię infrastruktury, co może wskazywać na jej przewagę nad C w przyszłości?

text: Przeszedłem przez pytania do wywiadu i zobaczyłem jedno, które sprawiło, że zatrzymałem się i pomyślałem przez chwilę. Zaczyna się od cytatu i pyta o twoją interpretację i czy się zgadzasz, czy nie. „W przypadku technologii infrastrukturalnej trudno będzie zastąpić C”. Dennis Ritchie Z czytania w tle można dowiedzieć się, że był mózgiem zarówno języka C, jak i systemu operacyjnego UNIX. W tamtym czasie była to fenomenalna poprawa i była to czołówka najnowocześniejszych technik. Czuję, że C++ i Java stają się coraz bardziej popularnymi językami, ale C zawsze będzie ważnym językiem. Co oferują inne języki, jeśli chodzi o technologię infrastruktury, co może wskazywać na jej przewagę nad C w przyszłości. Na marginesie, czy ktoś wie, w którym roku powstał ten cytat? Chcę tylko opinii ludzi, którzy dużo używają tych języków, sam używam języka Pythona i chciałbym dowiedzieć się trochę więcej o frameworku wokół C i jego znaczeniu z pierwszej ręki.


title: Czy możesz zostać zwolniony z umowy o pracę bez wynagrodzenia i pozwu?

text: Historia jest taka: zostałam zatrudniona na podstawie umowy o dzieło, która nie określała, jaka będzie płaca. Powiedziano mi, że będzie to 15 dnia każdego miesiąca, w zależności od ukończonej pracy. 15 dnia pierwszego miesiąca powiedziano mi, że to będzie koniec projektu. Następnie projekt został wstrzymany (wymagana odpowiedź klienta w jakiejś sprawie). Potem otrzymałem kolejny projekt, którego ukończenie zajęłoby co najmniej dwa miesiące. Kilka tygodni później powiedziałem szefowi, że odmówię wykonania jakiejkolwiek pracy, dopóki nie dokonam przynajmniej częściowej zapłaty. Zostałem zwolniony i obiecano mi pozew. Jesteśmy w różnych krajach. Pochodzi z USA. Umowa nie ma jego podpisu w oryginale, w moim kraju oznaczałoby to jej nieważność. Jest tu kilka pytań, najważniejsze to jak sobie z tym poradzić od tego momentu? Może mógłbyś mi dać jakąś radę, jak tego uniknąć w przyszłości? Czy ten proces ma szanse na poważne potraktowanie?


title: jak szybko i sprawnie napisać specyfikację funkcjonalną

text: Więc właśnie przeczytałem kilka wspaniałych artykułów Joela na temat specyfikacji tutaj. (Został napisany w 2000 roku!!) Przeczytałem wszystkie 4 części, ale **Szukam** kilku metodycznych podejść do pisania specyfikacji. Jestem jedynym samotnym deweloperem pracującym nad tą dość skomplikowaną aplikacją (lub rodziną aplikacji) dla bardzo znanej firmy finansowej. Nigdy nie robiłem czegoś tak poważnego, zacząłem od pisania czegoś w rodzaju złej specyfikacji, pewnego rodzaju przeglądu i zmarnowałem DUŻO mojego czasu. Zrobiłem też 3 makiety dla mojego klienta, więc dobrze rozumiem, czego chce. Wydałem również podgląd (wyrzuconą działającą aplikację z najbardziej podstawowym przepływem pracy), a ja napisałem i przetestowałem tylko niektóre z podstawowych/podstawowych systemów. Myślę, że błędem, który popełniłem do tej pory, nie jest napisanie szczegółowej specyfikacji, więc teraz się do tego zabieram. Tak więc całość składa się z * witryny MVC (dla administratorów i przeglądania danych) * 2 modułów Silverlight (dla 2 określonych zadań) * 1 aplikacji komputerowej. Mam całkowicie mało czasu, zasobów i muszę to zrobić szybko, a także muszę upewnij się, że ci faceci przeczytają to równie szybko i bezboleśnie. * Więc **jak** mam się do tego zabrać, **Szukam** wskazówek, rzeczy z prawdziwego świata, jak zwykle to robicie? * Czy tworzysz próbny screenie każdego okna dialogowego/formularza/strony? Myślę o stworzeniu fikcyjnego projektu formularzy internetowych asp.net, a następnie wypełnieniu plików **html** w folderach i sprawieniu, by wyglądał jak moja struktura url mvc. Następnie uwzględnij sekcję w specyfikacji witryny i napisz stronę dla każdego adresu URL, jaki otrzymałem z screenie. W przypadku mojej aplikacji Win Form zrobiłem coś w rodzaju demonstracyjnego projektu Win Form, **czy umieściłbym wtedy okno dialogowe lub zaprojektowałem wszystko tak, jak w prawdziwej aplikacji, a następnie zrzut ekranu? * * * Trochę tła tego pytania. Zawsze byłem szalonym facetem od skoku do kodu, który działał dobrze, ale dla aplikacji, nad którą pracuję, jest nie tylko złożona, jest dla bardzo renomowanej i dużej firmy i muszę ją zdobyć prawo! (I do tej pory wszystko szło dobrze, dzisiaj dałem demo wersji zapoznawczej, która podobała się wielu ludziom!! =D ) Jeśli dobrze zrobię wstępny projekt, będę miał świetny interes z tą firmą, tam już wielu myśli o nowych „niesamowitych” funkcjach, za które są gotowi zapłacić.


title: Jak mogę uporządkować notatki dotyczące implementacji, aby wykorzystać je jako odniesienie w przyszłości?

text: Jak lepiej udokumentować projektowanie aplikacji, aby uniknąć przypadkowego programowania? Jak mogę ustrukturyzować notatki, aby było jasne, jak działa aplikacja, aby kiedy odwołam się do niej rok później, nie zgubię się przez pierwsze 3 dni?


title: Dlaczego kompilator Java decyduje, czy można wywołać metodę opartą na typie „referencyjnym”, a nie na rzeczywistym typie „obiektowym”?

text: Właśnie zastanawiałem się, dlaczego kompilator Java decyduje, czy można wywołać metodę opartą na typie "referencyjnym", a nie na rzeczywistym typie "obiektowym"? Aby wyjaśnić, chciałbym przytoczyć przykład: class A { void methA() { System.out.println("Metoda klasy A."); } } class B extends A { void methB() { System.out.println("Metoda klasy B."); } public static void main(String arg[]) { A ob = new B(); ob.metB(); // Błąd czasu kompilacji } } Spowoduje to wygenerowanie błędu czasu kompilacji, którego metoda methB() nie została znaleziona w klasie A, chociaż odwołanie do obiektu "ob" zawiera obiekt klasy B, który składa się z metody methB(). Powodem tego jest to, że kompilator Java sprawdza metodę w klasie A (typ referencyjny), a nie w klasie B (rzeczywisty typ obiektu). Więc chcę wiedzieć, jaki jest tego powód. Dlaczego Java Compiler szuka metody w klasie A, dlaczego nie w klasie B (rzeczywisty typ obiektu)?


title: Co to jest złącze pierwszej klasy?

text: Czytałem Towards Architecture-based Self-Healing Systems i natknąłem się na termin „złącza pierwszej klasy”. Czym oni są? Poszukując więcej, można znaleźć ten artykuł Systematyczna konstrukcja architektury oprogramowania wspierana przez ulepszone łączniki pierwszej klasy, który wygląda na to, że może mieć odpowiedź, i może przeczytam go szczegółowo później, ale niezależnie od tego, warto umieścić to pytanie tutaj z odpowiedzią krótszą niż ten artykuł. :) Przykład, dlaczego posiadanie konektora pierwszej klasy może być również istotne.


title: Jaka jest najlepsza konfiguracja do dystrybucji aplikacji PHP?

text: Jaka jest zalecana konfiguracja w zakresie kontroli źródeł, kompilacji, testowania, śledzenia błędów i wdrażania aplikacji PHP do pobrania (a la Wordpress, phpBB, Magento itp.)? Czego byś się spodziewał jako programista pracujący nad aplikacją? A co z użytkownikiem aplikacji? Opisz konfigurację i przepływ pracy, a także wszelkie zasoby, które Twoim zdaniem mogą być przydatne lub pomocne.


title: Dlaczego ludzie nie używają spacji w nawiasach?

text: Oczywiście, to: if( foo( 5, 6, 7 )) do_something( arr[ 5 ]); if bardziej czytelne niż: if (foo(5, 6, 7)) do_something(arr[5]) jednak bardzo niewiele osób używa białych znaków w swoich rodzicach. Czcigodny program **indent** tak naprawdę nie zapewnia użytecznych opcji dla tego zachowania (opcja włączenia spacji wewnątrz nawiasów dodaje spację między kolejnymi wystąpieniami, co jest dość ohydne) i z pewnością niektórzy ludzie będą argumentować, że jest to marnowanie spacja pozioma (ale ci sami ludzie prawdopodobnie pominęliby również spacje po przecinku, więc ich opinia jest wyraźnie podejrzana), ale z pewnością jest jakiś uzasadniony powód, dla którego ten styl nie jest bardziej popularny. Dlaczego nie używasz spacji w nawiasach i/lub nawiasach klamrowych?


Jakie są rzeczywiste przypadki użycia oznakowanych wskaźników? Wynika to głównie z czytania o małych 64-bitowych systemach i możliwych zastosowaniach 64-bitowych wskaźników słów. W moim rozumieniu oznakowane wskaźniki to adresy, które mogą zawierać dodatkowe informacje w bitach, ponieważ możliwa przestrzeń adresowa w tej konkretnej architekturze jest znacznie mniejsza. Ale w takim razie, czy możliwe jest użycie oznakowanych wskaźników poza trywialnymi przypadkami? Jakieś fajne pomysły/przykłady? Czy istnieją popularne biblioteki, frameworki wykorzystujące wskaźniki 64-bitowe za pomocą wskaźników oznaczonych? Czy to możliwe na każdym sprzęcie?


title: Kiedy używać metod prywatnych w Pythonie

text: Mam klasę, ale każda metoda w niej powinna być prywatna (poza `__init__` i `__str__`). Czy powinienem oznaczać każdą metodę podwójnym podkreśleniem, czy jest to uważane za złą praktykę?


title: Mockowanie metod statycznych

text: Po niedawnym powrocie z kursu Test Driven Development (TDD) miałem następującą myśl. Pisząc testy jednostkowe za pomocą Mockito natknęliśmy się na problem mockowania metod statycznych. Jeden programista zasugerował, że używamy PowerMock, który pozwala na mockowanie metod statycznych, a następnie wdaliśmy się w dużą dyskusję na temat tego, jak powinniśmy podejść do tego problemu. Jednak z mojego doświadczenia wynika, że metody statyczne powinny być używane tylko jako metody typu użytkowego. Klasycznym przykładem w javie jest Math.random(). Tak więc metoda statyczna powinna wykonywać tylko jedną zdefiniowaną akcję niezależnie od interakcji z instancją klasy. Jeśli tak nie jest, a potrzebujesz interakcji instancji klasy, twoja metoda nie powinna być statyczna i musisz przemyśleć swój projekt. Więc moje pytanie brzmi, czy mając to na uwadze, czy powinieneś w ogóle kpić z metod statycznych? Jeśli zawsze wykonują prostą akcję, z pewnością powinieneś je wywołać tak, jak w prawdziwym kodzie.


title: Jak reprezentatywny jest Ohloh?

text: Mój kolega niedawno skierował mnie do Ohloh, strony internetowej udostępniającej statystyki dotyczące FOSS na podstawie repozytoriów wersjonowania. To całkiem zabawne narzędzie do prokrastynacji, m.in. aby porównać języki programowania przez aktywne projekty: ![tutaj wstaw opis obrazka](http://i.stack.imgur.com/ekEZT.png) Co mnie zastanawia: jak reprezentatywne jest takie porównanie? Czy możemy wyciągnąć z tego wnioski, takie jak „Javascript jest najczęściej używanym językiem programowania w FOSS, zaraz za nim znajdują się Python, Java i C++”? A może są jakieś duże zastrzeżenia, które należy wziąć pod uwagę?


title: PHP file_put_contents Blokowanie plików

text: **Senario:** masz plik z ciągiem (średnia wartość zdania) w każdym wierszu. Ze względu na argumenty powiedzmy, że ten plik ma rozmiar 1 MB (tysiące linii). Masz skrypt, który odczytuje plik, zmienia niektóre ciągi w dokumencie (nie tylko dodaje, ale także usuwa i modyfikuje niektóre wiersze), a następnie nadpisuje wszystkie dane nowymi danymi. **Pytania:** 1. Czy 'serwer' PHP, OS lub httpd itp. ma już systemy zapobiegające takim problemom (odczyt/zapis w połowie zapisu)? 2. Jeśli tak, wyjaśnij, jak to działa i podaj przykłady lub linki do odpowiedniej dokumentacji. 3. Jeśli nie, czy są rzeczy, które mogę włączyć lub skonfigurować, takie jak blokowanie pliku do czasu zakończenia zapisu i powodowanie, że wszystkie inne odczyty i/lub zapisy kończą się niepowodzeniem, dopóki poprzedni skrypt nie zakończy pisania? **Moje założenia i inne informacje:** 1. Na danym serwerze działa PHP i Apache lub Lighttpd. 2. Jeśli skrypt jest wywoływany przez jednego użytkownika i jest w połowie zapisywania do pliku, a inny użytkownik właśnie w tym momencie odczytuje plik. Użytkownik, który go przeczyta, nie otrzyma pełnego dokumentu, ponieważ nie został jeszcze napisany. (Jeśli to założenie jest błędne, proszę mnie poprawić) 3. Zajmuję się tylko zapisem i odczytem PHP do pliku tekstowego, aw szczególności funkcjami "fopen"/"fwrite" i głównie "file_put_contents". Zajrzałem do dokumentacji „file_put_contents”, ale nie znalazłem poziomu szczegółowości ani dobrego wyjaśnienia, czym jest lub robi flaga „LOCK_EX”. 4. Scenariusz jest przykładem najgorszego scenariusza, w którym zakładam, że te problemy są bardziej prawdopodobne ze względu na duży rozmiar pliku i sposób edycji danych. Chcę dowiedzieć się więcej o tych kwestiach i nie chcę ani nie potrzebuję odpowiedzi ani komentarzy, takich jak „użyj mysql” lub „dlaczego to robisz”, ponieważ tego nie robię, chcę tylko dowiedzieć się o odczytywaniu/zapisywaniu plików z PHP i wygląda na to, że nie szuka we właściwych miejscach/dokumentacji i tak, rozumiem, że PHP nie jest idealnym językiem do pracy z plikami w ten sposób.


title: Jak mogę przejść od początkującego do średnio-zaawansowanego/zaawansowanego programisty iPhone'a?

text: Od dłuższego czasu programuję na iPhone'a. Czytałem książki takie jak Beginning iPhone 4 Development autorstwa Jeffa LaMarche i Programming in Objective C Stephena Kochana. W tej chwili czuję się całkiem komfortowo z kontrolerami widoków, widokami tabel, gestami, GCD, danymi podstawowymi itp. Teraz staram się zbudować karierę w iOS (zamiast hobby, jak to było do tej pory). Jak mogę przenieść swoją wiedzę na wyższy poziom, abym mógł zostać zatrudniony jako profesjonalny programista iOS. Jakie inne technologie muszę znać, aby móc swobodnie budować aplikacje na poziomie przedsiębiorstwa dla różnych branż, takich jak bankowość, telekomunikacja itp.? Czy są jakieś dobre książki, które mówią z perspektywy architektury korporacyjnej dla aplikacji mobilnych?


title: Jak mogę popracować nad swoimi umiejętnościami inżynierii wstecznej?

text: Chciałbym zacząć budować pewne umiejętności w zakresie inżynierii wstecznej oprogramowania i szukam ćwiczeń lub „wyzwań”, nad którymi mógłbym popracować. Czy istnieją strony ostateczne lub docelowe, takie jak Project Euler, przeznaczone specjalnie do inżynierii odwrotnej? Na przykład ćwiczenia, w których muszę dowiedzieć się, dlaczego program ulega awarii lub zachowuje się niepoprawnie.


title: Czy osoby niebędące informatykami mogą uczyć się i korzystać z wyrażeń regularnych?

text: Często ludzie spoza IT muszą radzić sobie z ogromnymi danymi tekstowymi, czyścić je, filtrować, modyfikować. Często zwykłym narzędziom biurowym, takim jak Excel, brakuje narzędzi do wykonywania złożonych operacji wyszukiwania i zastępowania tekstu. Czy ci ludzie mogą skorzystać z wyrażeń regularnych? Czy można ich nauczyć regexp? Czy wyrażenia regularne są wyłączną domeną programistów i techników unix/linux? Czy mogą się ich nauczyć osoby spoza branży IT, ponieważ wyrażenia regularne nie są językiem programowania? Czy jest to słuszny lub możliwy do osiągnięcia cel, aby sprawić, że niektórzy użytkownicy będą potrafili regexp-piśmienność poprzez odpowiednie szkolenie? Czy masz jakieś doświadczenia w tej sprawie? a jeśli tak, to czy się udało?


title: Jak zawinąć narzędzia konsoli w serwer WWW?

text: Mam duży zestaw danych (100Mbs/dzień) i kilka narzędzi konsoli i narzędzi TCL/TK, aby go wyświetlić - chcę go przekształcić w aplikację internetową, którą mogę zbudować, a inni mogą ją utrzymywać. * * * W skrócie: moja grupa przeprowadza symulacje dające dziennie setki Mb danych w wielu (przeważnie, ale nie tylko) formach tekstowych. Mamy mnóstwo skryptów i narzędzi, głównie oldschoolowych rzeczy w stylu lat 90., wymagających 5-przyciskowej myszy, a także mnóstwo skryptów ad-hoc, które inżynierowie budują z frustracji co miesiąc. Dają one interfejsy użytkownika, wykresy, arkusze kalkulacyjne (różne rozmiary), logi, historie zdarzeń itp. Chcę zastąpić (lub przynajmniej uzupełnić) interfejs użytkownika w stylu xwindows / konsoli na internetowy, więc potrzebuję następujących właściwości: * przyjemne do programowania * potrafię zawijać istniejące narzędzia wiersza poleceń w oddzielne widoki (nie muszę skrobać GUI ani nic) * jak portuję logikę z istniejących skryptów mogę stworzyć modularną i przyjemną bazę kodu, aby ją zastąpić * mogę dołączyć web-ui do poruszania się między widokami - każdy widok prawdopodobnie zawiera klucze, których przeglądanie w innym może mieć sens. z tego punktu widzenia robią to: * backend opakowuje pliki wykonywalne starej szkoły, konstruuje do nich wywołania, a następnie pobiera dane wyjściowe i owija je, ulepsza je i dostarcza do klienta WWW. Na przykład narzędzie może generować wiele zindeksowanych obrazów (na wywołanie), które mogę dostarczyć od razu lub na żądanie. Może (prawdopodobnie) wymagać ciężkich statystyk na niektórych źródłach. * frontend zapewnia nawigację łączącą wiele widoków, wykonuje żądania z jednego widoku o dane z innego (lub siebie do siebie) itp. Prawdopodobnie będzie miał kilka widoków z dużą interaktywnością. Czy ludzie mogą wskazać mi realne rozwiązania tego problemu? Wiem, że to trochę otwarte pytanie, więc gdy nadejdą odpowiedzi, mam nadzieję, że dopracuję specyfikację, dopóki nie uzyskamy dobrego dopasowania. Myślę, że spodziewam się odpowiedzi typu „RoR!” "fasolki!" "Scala!" ale proszę podać, dlaczego są one dobrze dopasowane; Nic nie wiem! Nie pytam o _co jest najlepsze, Scala czy RoR*, ale raczej o to, które byłyby dobre dla ludzi robiących to, co ja staram się robić? * * * Wpadłem tak za zadanie pytania otwartego, więc przepraszam, jeśli tutaj też jest OT (daj mi znać). Przyjmuję zasadę, że używam najlepszego/najbliżej dopasowanego języka do projektu, ale większość mojego zespołu ma bardzo niski poziom (tj. etapy potoku i CDyn), więc nie mam grupy peerów, aby wiedzieć, od czego zacząć.


title: Scrum dla urządzeń z systemem wbudowanym

text: W naszej firmie zamierzamy dostarczyć nowy produkt, który będzie używany do masowego powiadamiania, więc jest to projekt oprogramowania wbudowanego i będziemy używać SCRUM jako frameworka dla produktu. Zaczęliśmy spisywać backlog produktu. W oparciu o to, co zrozumiałem, rejestr produktów powinien odzwierciedlać wartość biznesową dla każdego elementu. Charakter oprogramowania wbudowanego polega na tym, że zawiera wiele szczegółów technicznych, które zajmą dużo czasu, aby stworzyć sterowniki dla mikrokontrolerów, takich jak SPI, UART, Ethernet, WIFI i tak dalej. na przykład system brzmi, odtwarzając wiadomość dla powiadomienia, więc jest całkiem oczywiste, że odtwarzanie wiadomości jest wartością biznesową, ale aby osiągnąć ten cel, muszę spisać wymagania, które również nie są jak - dla wielu kierowców, takich jak SPI, sterownik dekodera MP3, sterownik karty SD i wreszcie FAT, więc wszystkie poprzednie sterowniki mają wymagania, które powinny być zapisane w backlogu produktu, tak aby wymagania zaczynały się od wymagania jednej wartości biznesowej, podczas gdy ma wiele technicznych wymagania podrzędne. Nie odzwierciedlają one wartości biznesowej dla klienta; czy ktoś może mi powiedzieć, jak mam utworzyć backlog produktu?


title: Dlaczego nie ma systemów zarządzania pakietami dla C i C++?

text: Istnieje kilka języków programowania, dla których istnieją własne systemy zarządzania pakietami: * CTAN dla TeXa * CPAN dla Perla * Pip & Eggs dla Pythona * Maven dla Java * cabal dla Haskella * Gems dla Ruby Czy są jakieś inne języki z takimi systemami? **A co z C i C++?** (to jest główne pytanie!) Dlaczego nie ma dla nich takich systemów? A czy tworzenie pakietów dla `yum`, `apt-get` lub innych ogólnych systemów zarządzania pakietami nie jest lepsze?


title: Czy karta jest właściwym wzorcem projektowym w tej sytuacji?

text: Mam instancję klasy `UntouchableClass`, której muszę uzyskać dostęp do zmiennych składowych, aby użyć ich w moim szablonie DotLiquid. Problem polega na tym, że `UntouchableClass` musi dziedziczyć po `Drop`, jeśli chcę go użyć w moim szablonie, ale nie mogę go zmienić, ponieważ pochodzi z istniejącej biblioteki. Czytałem o wzorcu adaptera, ale `UntouchableClass` nie ma interfejsu, z którego można by dziedziczyć adapter. Nie mogę też używać dziedziczenia wielokrotnego (stworzyłbym klasę, która dziedziczy zarówno po `UntouchableClass` jak i `Drop`, ale to jest C# iz tego co wiem nie jest to możliwe). Czy istnieje wzorzec projektowy, który pasowałby do tej sytuacji? A może istnieje jakiś szczególny sposób, aby to zrobić za pomocą DotLiquid?


title: Prawidłowy szew dla Stub

text: W rozdziale 3 swojej książki Sztuka testowania jednostkowego: za pomocą przykładów w języku C# Roy Osherove ilustruje kwestię niepożądanych zewnętrznych zależności w testowanym kodzie. Pokazuje to za pomocą metody o nazwie `IsValidLogFileName`, która przyjmuje jako argument ciąg nazwy pliku, odczytuje plik konfiguracyjny z lokalnego systemu plików i sprawdza, czy podane rozszerzenie nazwy pliku istnieje w pliku konfiguracyjnym. Oto jak wyglądałaby taka klasa: public class LogAnalyzer { public bool IsValidLogFileName(string fileName) { string [] extensions = System.IO.File.ReadAllLines(@"C:\Users\Public\ext.config"); foreach (string ext w rozszerzeniach) { if (fileName.EndsWith(ext)) { return true; } } return false; } } Problem polega na tym, że testowanie `IsValidLogFileName` jest zależne od lokalnego systemu plików. Autor wprowadza pojęcie **stubs** jako sposób na usunięcie tej zależności. W szczególności opisuje następujący projekt: Utwórz interfejs: interface IExtensionManager { bool IsValid(string fileName); } implementująca klasę produkcyjną: class FileExtensionManager : IExtensionManager { bool IsValid(string fileName) { string [] extensions = System.IO.File.ReadAllLines(@"C:\Users\Public\ext.config"); foreach (string ext w rozszerzeniach) { if (fileName.EndsWith(ext)) { return true; } } return false; } } a stub: class FakeExtensionManager : IExtensionManager { bool IsValid(string fileName) { string [] extensions = { "txt", "c", "cpp", "cs"}; foreach (string ext w rozszerzeniach) { if (fileName.EndsWith(ext)) { return true; } } return false; } } refaktoryzuj `LogAnalyzer` w następujący sposób: public class LogAnalyzer { IExtensionManager em; public LogAnalyzer(IExtensionManager extensionManager) { em = extensionManager; } public bool IsValidLogFileName(string fileName) { return em.IsValid(fileName); } } uruchom kod produkcyjny w następujący sposób: LogAnalyzer la = new LogAnalyzer(new FileExtensionManager); i testowy kod w ten sposób: LogAnalyzer la = new LogAnalyzer(new FakeExtensionManager); Część, której nie rozumiem, to dlaczego musimy wyodrębnić logikę walidacji z oryginalnego `IsValidLogFileName` przez utworzenie interfejsu `ExtensionManager`. Czy nie byłoby bardziej sensowne utworzenie czegoś takiego jak interfejs `ConfigManager` i refaktoryzacja w następujący sposób: interface: interface IConfigManager { string [] GetFileExtensionConfig(); } implementująca klasa produkcyjna: class LocalConfigManager : IConfigManager { string [] GetFileExtensionConfig( ) { return System.IO.File.ReadAllLines(@"C:\Users\Public\ext.config"); } } a stub: class FakeConfigManager : IConfigManager { string [] GetFileExtensionConfig() { string [] extensions = { "txt", "c", "cpp", "cs"}; przedłużenia zwrotu; } } refaktoryzuj `LogAnalyzer` w następujący sposób: public class LogAnalyzer { IConfigManager cm; public LogAnalyzer(IConfigManager configManager) { cm = configManager; } public bool IsValidLogFileName(string fileName) { string [] extensions = cm.GetFileExtensionConfig(); foreach (string ext w rozszerzeniach) { if (fileName.EndsWith(ext)) { return true; } } return false; } uruchom kod produkcyjny w następujący sposób: LogAnalyzer la = new LogAnalyzer(new LocalConfigManager); i testowy kod w następujący sposób: LogAnalyzer la = new LogAnalyzer(new FakeConfigManager);


title: Jaka jest ta zasada, w której nie powinno się dawać wglądu do obiektu o nazwie?

text: Nie pamiętam nazwy, ale jest zasada, że nie powinno się pozwalać na wgląd w wewnętrzny makijaż przedmiotów. Ma to związek z niedopuszczeniem więcej niż jednej kropki w implementacji takiej jak ta, na przykład: return world = foo.bar.hello.world();


title: Architektura aplikacji - mniej dużych systemów vs więcej mniejszych systemów

text: re: Applications Architecture, czyli " _nauka i sztuka zapewnienia, aby zestaw aplikacji wykorzystywanych przez organizację do tworzenia aplikacji złożonych był skalowalny, niezawodny, dostępny i łatwy w zarządzaniu._ " Patrząc na szereg aplikacji w organizacji , widzę różne powody łączenia aplikacji, ale czasem też dobre powody, by trzymać je osobno. _Ogólnie_, jakie są zalety i wady posiadania mniejszej liczby dużych systemów w porównaniu z większą liczbą mniejszych (pamiętając, że wiele systemów będzie wymieniać informacje). Myślę o takich rzeczach, jak: mniej, większych aplikacji oznacza mniej wspinania się między aplikacjami, ale więcej mniejszych aplikacji oznacza większą elastyczność dla poszczególnych działów. Czy jest jakaś literatura na ten temat, czy ktoś ma listę zalet i wad, które odkryli? edytuj: W moim scenariuszu wiele aplikacji może być dostosowywanych z półki, a nie opracowywanych wewnętrznie, ale możesz rozważyć bardziej ogólne scenariusze.


title: Nawiąż połączenie między klasą nadrzędną i podrzędną

text: Załóżmy, że masz dwie klasy, `Menedżer`, który przechowuje zestaw `Klienta`, a `Klient` przechowuje odwołanie wsteczne do `Menedżera`. class Manager { public: void addClient(Klient* klient) { m_clients.push_back(klient); klient->setManager(to); } private: std::list<Klient*> m_clients; }; class Klient { public: void setManager(Manager* manager) { m_manager = manager; } prywatny: Kierownik* m_manager; }; Mylącą, prawdopodobnie nawet niebezpieczną cechą tego API jest to, że Client udostępnia metodę setManager(), która może być wywołana przez każdego, ale powinna być wywoływana tylko przez metodę Manager::addClient(). `assert(manager->hasClient(this))` w setManager() zapobiegłoby błędnym wywoływaniu w czasie wykonywania, jednak wolałbym rozwiązanie, które nie pozwala użytkownikowi wywoływać metod, których nie powinien wywoływać. Jakie byłoby wspólne rozwiązanie? Nie * chcę używać `friend` do udostępnienia menedżerowi wszystkich członków Clients, aby mógł on ustanowić połączenie binarne w `addChild()` * chcę, aby obie klasy współdzieliły jakiś rodzaj Composite klasy bazowej. Powinny pozostać niespokrewnione pod względem dziedziczenia.


title: c# nazewnictwo — jakie są wspólne konwencje dotyczące przyrostka, aby odróżnić interfejsy tylko do odczytu i do zapisu

text: Załóżmy, że interfejs umożliwia wykonywanie zapytań na drzewie przestrzennym public ISpatialTree { int FindChildIndex(Vector point); bool IsLeaf { get; } ICollection<ISpatialTree> Dzieci { get; } } oraz inny, który pozwala na zmianę drzewa: public ISpatialTreeWriter : ISpatialTree { void Add(Vector point); bool Usuń (punkt wektorowy); nieważne Wyczyść(); } Szukam nazwy do oznaczenia interfejsu z możliwością zapisu. Idealnie byłoby to dość krótkie i czytelne słowo. Nie dotyczy to tylko tego przykładu, ale chciałbym użyć konwencji dla całego kodu w projekcie, ponieważ jest to częsty przypadek. Czy ktoś zna dobrą konwencję na ten problem? Jakie konwencje są stosowane w innych projektach? Omówione słowa to Writer (niejednoznaczny, często używany w innych kontekstach), Mutator (mylący), Rw (nieczytelny, nie słowo). Dobrym rozwiązaniem byłoby pojedyncze słowo, nie dłuższe niż 6-8 liter, a to sprawia, że jest oczywiste, że jest to interfejs piszący.


title: hashy ruby-idiomatic vs tablice

text: Więc nadal jestem całkiem nowy w Ruby, chociaż zauważyłem, że bardzo trudno jest tworzyć tablice 2d i że hasze wydają się być bardziej przydatne w strukturze danych niż w tablicach. Zastanawiałem się, dlaczego społeczność Ruby jest tak skoncentrowana na hashach i może istnieje coś bardziej rubinowo-idiomatycznego niż tablica 2d, gdy próbujemy stworzyć coś takiego jak plansza do gry.


title: Nazwa dla celowo asertywnego testu jednostkowego

text: Mam narzędzie, które będzie uruchamiane w ramach etapu zatwierdzania na serwerze Continuous Integration, aby sprawdzić, czy wszystkie uruchomione testy jednostkowe mają potwierdzenie. Jego głównym celem jest wyeliminowanie głupich błędów, takich jak użycie metody `Equals`, która po prostu zwraca bool zamiast metody asercji `ShouldEqual`. Ale zdarzają się przypadki, kiedy testy są celowo (lub przynajmniej częściowo celowo) pisane bez asercji – z założeniem, że jeśli kod się nie wyrzuci, test powinien przejść. Spierałbym się o czytelność i zrozumiałość tego rodzaju testów, ale istnieją pakiety, które robią to cały czas. Chciałbym mieć możliwość oznaczania tego rodzaju testów specjalnym atrybutem, aby jeśli ktoś naprawdę chciał mieć test bez wyraźnej asercji, to przynajmniej musiałby to powiedzieć wprost. Zastanawiam się, jaka byłaby dobra nazwa dla takiego atrybutu. Moje dwa (dość różne) pomysły to: * `[SmokeTest]` - ponieważ testy typu "zaliczono, gdy nie rzucono wyjątku" polegają tylko na szukaniu dymu, a nie testowaniu żadnego wyniku, ta nazwa brzmi dobrze i sugeruje, że to nie jest pełnoprawny test jednostkowy - jak mam zamiar, * `[ExpectedNoException]` - ten jest znacznie bardziej oczywisty w swoim znaczeniu i całkiem dobrze koresponduje ze standardowym atrybutem `[ExpectedException]` dostarczanym przez niektóre z najpopularniejszych Narzędzia do testowania jednostek .NET. A może najlepiej byłoby mieć obie możliwości? Ale wynik obu będzie dokładnie taki sam, więc może być mylące, którego użyć. Ponieważ nazywanie rzeczy jest jedną z najtrudniejszych rzeczy w informatyce, mam nadzieję na kilka dobrych sugestii. **EDYTUJ** Pierwsze odpowiedzi sugerują dodanie try-catch i `Assert.Fail` w catch. To by załatwiło sprawę, prawda, ale jakoś czuję, że obowiązek dodawania nic nie znaczącego kodu tylko po to, by zadowolić proces budowania, jest trochę śmierdzący. Atrybut niewiele się różni, ale traktuję go bardziej jako „metadane” niż kod. Przynajmniej taka jest moja osobista opinia - możesz się nie zgodzić, a ja też będę wdzięczny za to, że to powiem :) To, czego szukam, nie jest sposobem na to, aby w każdym teście było obojętne, szukam bardziej ogólnego terminu I można nazwać tego rodzaju testami.


title: Gdzie sprawdzić, czy funkcja rzeczywiście zrobiła to, co jej kazałem?

text: Rozważmy tę funkcję, która ma zabić wszystkie działające instancje podprocesu: killAllFoobars() { pids = getRunningFoobars(); foreach ( pid jako p ) { killOneFoobar(p); } zwróć PRAWDA; } Gdzie powinienem sprawdzić, czy w rzeczywistości wszystkie Foobary zostały zabite? Czy killOneFoobar() powinna sprawdzić, czy jego Foobar jest teraz zabity? Powinna killAllFoobars() sprawdzić, czy nie ma już uruchomionych Foobars przed zwróceniem TRUE (wydaje się trochę nieszczere zwracanie TRUE bez sprawdzania). Czy funkcja wywołująca killAllFoobars() powinna sprawdzić? Weź pod uwagę, że kontrola jest kosztowną operacją, więc nie powinna być wykonywana „tylko kiedy”, ale tylko wtedy, gdy jest to konieczne.


title: Projekt strony MVC 3; podzielić strony na wiele części?

text: Obecnie pracuję nad projektem aplikacji sieci Web MVC 3, w którym muszę wyświetlić wiele informacji na stronie głównej. Jestem stosunkowo nowy w układaniu i projektowaniu stron internetowych, więc uderzyłem w ścianę, jeśli chodzi o strukturę kodu stojącego za tą stroną. Moim pierwszym pomysłem było podzielenie strony na jak najwięcej części, aby modele widoku były mniejsze i łatwiejsze w zarządzaniu. Chociaż nie jestem pewien, czy jest to właściwy sposób. A może powinienem spróbować dopasować wszystkie potrzeby strony do jednego modelu widoku, który wyświetli wszystkie potrzebne mi informacje? Moje pytanie: **Czy powinienem podzielić moje strony na wiele małych części, czy po prostu zrobić z nich jedną dużą stronę?**


title: Dobre zastosowania dla VBScript?

text: Jakie są dobre zastosowania VBScript? Czy jest to nadal powszechnie używany język?


title: A* z możliwymi wieloma ścieżkami

text: Pozdrawiam, obecnie studiuję odnajdywanie ścieżek i natknąłem się na algorytm A* z tej strony https://github.com/qiao/PathFinding.js Próbowałem przetestować A* z dwukierunkowością i działa świetnie. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/H9fz7.png) To, co chcę teraz zrobić, to zwiększyć ścieżkę, którą może wykonać bez dodawania kolejnych węzłów na otwartej liście. Na przykład algorytm był w stanie znaleźć ścieżkę, ale gdy patrzysz na wyniki, nadal może generować jeszcze jedną ścieżkę bez dotykania drugiej ścieżki. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/bDeSj.png) Masz jakieś pomysły? Bardzo dziękuję


title: Czy język programowania może cię uszczęśliwić?

text: Niektórzy projektanci języków tworzą język, który skupia się na programistach, aby mogli być szczęśliwi. Czy język programowania może uszczęśliwić programistę? W jaki sposób język programowania uszczęśliwia programistę? W końcu wszystkie języki programowania są takie same, prawda? Masz również ciężar wykonywania pracy, która może Cię już nie uszczęśliwiać.


title: Czy nauka C# jako pierwszego języka jest błędem?

text: Wiem, że są tu podobne pytania, które czytałem, ale ostatnio przeczytałem ten post Joela Spolsky'ego: Jak mogę nauczyć programistę, osobę bez doświadczenia w programowaniu? I skłoniło mnie to do zastanowienia się nad moim sposobem uczenia się i czy rzeczywiście może to być szkodliwe na dłuższą metę. Bawiłem się różnymi językami, ale C# jest moim pierwszym poważnym, przeczytałem "Head First C#" i stworzyłem kilka projektów. Ale po przeczytaniu powyższego postu stwierdziłem, że to trochę przygnębiające, że mogę to wszystko robić źle, oczywiście szanuję opinię Joela, która trochę mnie rzuciła. Zacząłem czytać "Kod" zgodnie z zaleceniami z listy lektur i wydaje mi się, że jest to dość trudne, choć przyjemne. Czuję, że pozbawiło mnie to blasku mojego „noobish hacking about” w Visual Studio. Więc teraz nie jestem pewien, jaką ścieżką powinienem obrać? Czy powinienem cofnąć się o krok i posłuchać rady Joela i zacząć czytać? Myślę, że moim głównym celem jest po prostu zostać dobrym programistą, jak wszyscy inni, ale nie chcę wchodzić w złą praktykę, ucząc się języka .NET, gdy ktoś, kogo szanuję, uważa, że jest to szkodliwe. Myśli?


title: Chcesz się nauczyć/zagłębić w Java Web Development — od czego zacząć?

text: Chcę zagłębić się w Java Web Development, ale nie wiem od czego zacząć, ponieważ jestem przytłoczony frameworkami, JSR-ami, modułami i tym podobnymi. Wywodząc się z PHP i Ruby (na Rails), może wydawać się niezręczne, aby przejść w drugą stronę — wciąż jest wiele miejsc, w których Java jest (i prawdopodobnie będzie) powszechna. Znam podstawowe koncepcje Java, składnię i OOP, i zrobiłem (za dużo) bzdur w istniejących projektach w JSP. Używam już SVN i GIT, ale podobnie jak kodowanie PHP i Ruby głównie przez VIM, robiłem również wersjonowanie z wiersza poleceń. Ale tym razem chcę nauczyć się budować nowy projekt od podstaw, w bardziej, powiedzmy, akademicki sposób (zamiast dotychczasowej hackerstwa). Patrząc na e. g. Zaćmienie mnie przeraża. Potem jest Struts, Spring, JPA, Hibernate, Seam, żeby dorzucić kilka modnych słów, których nie potrafię jasno ze sobą powiązać. Czy możesz wskazać mi samouczki lub książki, które mogą mi pomóc? Jakie technologie koniecznie musisz znać, JSR, które są szeroko wdrażane w branży? Lub, jeśli jesteś pracodawcą: Co musi wiedzieć „Junior Java Web developer”? Dzięki za sugestie!


title: oprogramowanie do szpiegowania personelu?

text: Pracowałem jako młodszy administrator help desk sys, aw tamtych czasach jedyną opcją "monitorowania" tego, co robią inni ludzie, było "zacienianie" ich ekranu, jak zdalny pulpit Windows, RDP. Teraz pracuję jako programista mobilny [iOS Android] i w umowie widziałem klauzulę, w której wyrażam zgodę na monitorowanie. Więc moje pytanie brzmi, jakie oprogramowanie jest tam, aby monitorować po cichu [bez wiedzy programisty (mnie)]. Czy zobaczą mój ekran? lub zrobią zdjęcia? Nie chodzi o to, że marnuję czas lub robię "nielegalne" czynności, tylko zastanawiam się, czy to normalne? i jak to zauważyć? Używam Maca - jeśli to robi jakąkolwiek różnicę.


title: Tworzenie witryny projektu dla projektu open source

text: Mam więc projekt open source, który chciałbym promować i chcę stworzyć dla niego witrynę projektu, na której będę hostować dokumentację itp. (najlepiej coś, co integruje się z githubem do obsługi pobierania, problemów itp.). Witryna projektu powinna wyglądać jak typowa. Czy jest do tego coś nieszablonowego, czy muszę to kodować od zera? Dziękuję Ci.


title: Mapowanie klawiszy Vima / wtyczka XCode?

text: Jestem programistą, który głównie robi rzeczy internetowe w ruby i C#. Chciałbym zacząć majstrować przy rozwoju iOS i Mac. Przez ostatnie kilka miesięcy starałem się biegle opanować jeden zestaw powiązań klawiszy (vi/vim, bo to po prostu wydaje się właściwe). Mam niesamowite ViEmu zainstalowane dla studia wizualnego na oknach, co daje mi mnóstwo niesamowitych vimów obok zabawek mocy visual studio. Czy jest coś takiego dla xcode? Wiem, że mógłbym ustawić MacVim jako domyślny edytor, ale nie jestem tym zbyt zainteresowany, ponieważ oznacza to utratę całej świadomości kakao Xcode. Inną opcją byłoby oczywiście wybranie najniższego wspólnego mianownika i przejście na emacs (ponieważ skróty klawiszowe mac są oparte w dużej mierze na emacsie), ale nie myślmy o tym zbyt długo. :P


title: Co zrobić, gdy nie robisz tego, co powinieneś w pracy?

text: Po pierwsze, myślę, że mój tytuł jest może trochę niejasny, więc nie krępuj się edytować. Moja obecna sytuacja wygląda następująco. Niedawno zdecydowałem się odejść z poprzedniej firmy, w której pracowałem z wielu powodów, ale biorąc pod uwagę pracę, którą tam wykonywałem, nigdy nie byłem nieszczęśliwy. Jednak teraz, w mojej nowej pracy, to już inna historia. Kiedy przeprowadzałem tutaj wywiad, aby zostać deweloperem, świat został obiecany. _"Tak, będziesz kodować, projektować itd. itd."_ , ale na pewno tak nie jest. Jako programista, przyjmując rolę głównego programisty (aby wyjaśnić, główny tutaj oznacza, że powinienem zajmować się głównie kodowaniem, a nie głównym programistą), spodziewałbym się następującego podziału: * 50% - 60% rzeczywiste kodowanie * 20% projekt * reszta - testowanie/admin itp. Czy to nierealne oczekiwanie? Obecnie mój podział wygląda następująco: * 1% faktyczne kodowanie * 95% testowanie / ulepszanie / zastanawianie się, dlaczego wszystko się psuje, co zrobili poprzednie chłopaki * 4% picie kawy, bo nuda mnie dobija, zdaję sobie sprawę, że dla niektórych osób to może to jest to, co chcą robić, ale pochodzę z dość akademickiego wykształcenia, lubię rozwiązywać problemy i zmagać się z problemem, dopóki go nie rozwiążesz. Poza tym dużo koduję. Właściwie raz lub dwa razy osiągnął punkt, w którym kazano mi cofnąć zmiany, które wprowadziłem (na lepsze!), ponieważ: _„Tak, wiem, że jest lepiej, ale cofnij, ponieważ nie było to zadanie przydzielone tobie! "_ I to znaczy, to nie jest tak, że zajęło mi to dzień pracy, który mógłbym spędzić inaczej, to były 5 minutowe zmiany. Teraz moje prawdziwe pytanie brzmi. Biorąc pod uwagę, że czuję, że nie rozwinę się tutaj jako programista, jak szybko powinienem z tego wyjść? Czy powinienem zostać trochę dłużej i zobaczyć, czy coś się zmieni? Rozmawiałem z kilkoma innymi programistami tutaj i mówią, że tak po prostu jest. Grupa około 10 osób pisze około 99% kodu i wszyscy są tu od około 10 lat. Moje dwie obawy to: 1. Prawdopodobnie musiałbym obniżyć pensję, jeśli się przeprowadzę, ponieważ płacą tutaj dość hojnie. 2. Posiadanie firmy na 2 - 3 miesiące w CV nie zawsze wygląda dobrze. Naprawdę przydałaby mi się pomoc kogoś, kto ma w tym jakieś doświadczenie? Może ktoś miał podobną sytuację? Dziękuję!


title: Jakie względy należy wziąć pod uwagę za i przeciw „super” witrynom?

text: Moja firma rozważa konsolidację wszystkich swoich aplikacji i witryn warstwy 1 (tj. najwyższej klasy produkcyjnej) w jedną kompleksową bazę kodu. Teoria mówi, że ich uprawnienia, projekt i ogólna funkcjonalność mogą być ujednolicone i centralnie zarządzane. Nie mam końca obaw co do tego podejścia, ponieważ struktury danych leżące u podstaw każdej aplikacji są bardzo różne, reguły biznesowe są złożone i unikalne dla każdej aplikacji, a ogólne podstawy kodu dla istniejących aplikacji są skrajnie różne i bardzo zaniedbane. **EDYTUJ** : Obecne środowisko składa się z trzech witryn ASP.Net 1.1, które od pierwszego napisania prawie nie widziały prawdziwej miłości (głównie z powodu braku doświadczonych programistów w firmie) i jednej aplikacji MVC2, która była również ASP Witryna .Net 1.1 przed aktualizacją w zeszłym roku. Piszemy wyłącznie w C#. Firma jest dość mała, zatrudnia około 50 pracowników; trzech z nich to prawdziwi deweloperzy. Kierownictwo (nawet kierownictwo IT) nie ma żadnego wykształcenia ani doświadczenia informatycznego poza zarządzaniem projektami IT (a tym samym pewną wiedzę z zakresu terminologii i wpływu biznesowego). Aplikacje to głównie serwisy internetowe do obsługi produktów sprzedawanych przez firmę. Firma nie sprzedaje bezpośrednio żadnego oprogramowania. Tak więc, aby wyrazić całą tę sytuację w dość konkretnym pytaniu, na które można odpowiedzieć: Jakie są przekonujące powody za i przeciw próbie połączenia wszystkich systemów w jedno nadrzędne rozwiązanie, biorąc pod uwagę obecne warunki (tj. stara baza kodu, złożone systemy biznesowe i zasady )?


title: Dlaczego języki z typowaniem dynamicznym nie pozwalają programiście określić typu?

text: Języki dynamicznie typowane, które znam, nigdy nie pozwalają programistom na określenie typów zmiennych, a przynajmniej mają bardzo ograniczone wsparcie dla tego. Na przykład JavaScript nie zapewnia żadnego mechanizmu wymuszania typów zmiennych, kiedy jest to wygodne. PHP pozwala określić niektóre typy argumentów metod, ale nie ma sposobu na użycie typów natywnych (`int`, `string`, itp.) dla argumentów i nie ma sposobu na wymuszenie typów dla czegokolwiek innego niż argumenty. Jednocześnie wygodnie byłoby mieć możliwość określenia w niektórych przypadkach typu zmiennej w dynamicznie typowanym języku, zamiast ręcznego sprawdzania typu. Dlaczego istnieje takie ograniczenie? Czy z powodów technicznych/wydajnościowych (przypuszczam, że tak jest w przypadku JavaScript), czy tylko z powodów politycznych (jak sądzę, w przypadku PHP)? Czy tak jest w przypadku innych języków dynamicznie typowanych, których nie znam? * * * **Edytuj:** po odpowiedziach i komentarzach, oto przykład dla wyjaśnienia: powiedzmy, że mamy następującą metodę w zwykłym PHP: public function CreateProduct($name, $description, $price, $quantity) { // Sprawdź argumenty. if (!is_string($name)) wyrzuć nowy Exception('Oczekuje się, że argument nazwy będzie ciągiem znaków.'); if (!is_string($description)) wyrzuć nowy Exception('Oczekuje się, że argument opisu będzie ciągiem znaków.'); if (!is_float($cena) || is_double($cena)) wyrzuć nowy Exception('Oczekuje się, że argument ceny będzie liczbą zmiennoprzecinkową lub podwójną.'); if (!is_int($ilość)) wyrzuć nowy Exception('Oczekuje się, że argument ilości będzie liczbą całkowitą.'); if (!$nazwa) wyrzuć nowy Exception('Argument nazwy nie może być pustym ciągiem.'); if ($cena <= 0) wyrzuć nowy Exception('Argument ceny nie może być mniejszy lub równy zero.'); if ($cena < 0) wyrzuć nowy Exception('Argument ceny nie może być mniejszy niż zero.'); // Możemy wreszcie zacząć pisać właściwy kod. // DO ZROBIENIA: Zaimplementuj metodę tutaj. } Przy pewnym wysiłku można to przepisać jako (zobacz także Programowanie kontraktami w PHP): public function CreateProduct($name, $description, $price, $quantity) { Component::CheckArguments(__FILE__, __LINE__, array( 'name ' => array('value' => $name, 'type' => VTYPE_STRING), 'description' => array('value' => $description, 'type' => VTYPE_STRING), 'price' => array ('wartość' => $cena, 'typ' => VTYPE_FLOAT_OR_DOUBLE), 'ilość' => array('wartość' => $ilość, 'typ' => VTYPE_INT) )); if (!$nazwa) wyrzuć nowy Exception('Argument nazwy nie może być pustym ciągiem.'); if ($cena <= 0) wyrzuć nowy Exception('Argument ceny nie może być mniejszy lub równy zero.'); if ($cena < 0) wyrzuć nowy Exception('Argument ceny nie może być mniejszy niż zero.'); // Możemy wreszcie zacząć pisać właściwy kod. // DO ZROBIENIA: Zaimplementuj metodę tutaj. } Ale ta sama metoda zostałaby napisana w następujący sposób, jeśli PHP opcjonalnie zaakceptowałoby typy natywne dla argumentów: public function CreateProduct(string $nazwa, string $opis, podwójna $cena, int $ilość) { // Sprawdź argumenty. if (!$nazwa) wyrzuć nowy Exception('Argument nazwy nie może być pustym ciągiem.'); if ($cena <= 0) wyrzuć nowy Exception('Argument ceny nie może być mniejszy lub równy zero.'); if ($cena < 0) wyrzuć nowy Exception('Argument ceny nie może być mniejszy niż zero.'); // Możemy wreszcie zacząć pisać właściwy kod. // DO ZROBIENIA: Zaimplementuj metodę tutaj. } Który z nich jest krótszy do napisania? Który jest łatwiejszy do odczytania?


title: Dobre praktyki, które powinien stosować każdy startup

text: Kilku znajomych w pracy i ja zamierzamy założyć mały startup / stworzyć własne oprogramowanie, prawdopodobnie na początku dorabiając sobie, ponieważ nie stać nas jeszcze na rzucenie naszej codziennej pracy. Żadne z nas nie ma takiego doświadczenia, wszyscy pracowaliśmy wcześniej dla innych firm, w których ustalono zestaw wytycznych i myślę, że nadszedł czas, aby ustalić dobre praktyki do naśladowania (takie jak unikanie spotkań). Dla ludzi, którzy poszli w ten sposób, jaką radę dałbyś nam? Szukam bardziej technicznej strony rzeczy, takich jak: * Czy warto mieć jakiś build server, czy to daleko do przodu? * Czy wykonałbyś rozbudowane TDD, czy uważasz, że byłoby to zbyt duże obciążenie dla małego zespołu, który nie ma w tym zbyt dużego doświadczenia? Ale nie miałbym nic przeciwko słuchaniu strony zarządzania. * * * Projekt jest aplikacją internetową wykonaną w ASP.NET MVC, myślę o użyciu Mercurial i BitBucket lub Kiln + FogBugz lub innego narzędzia do śledzenia projektów online, ponieważ zamierzamy pracować zdalnie.


title: Jak zapobiec utknięciu w „trybie badawczym” przy dużym projekcie, którego nie znasz?

text: Jestem w sytuacji, w której jest duży projekt, do którego realizacji potrzebuję dużej wiedzy. jednak nie poruszam się wystarczająco szybko w fazie badań/studiów - i często widzę siebie poza szlakiem. Sprowadza się to do prokrastynacji, z wyjątkiem tego, że jest ona zmieszana z po prostu przytłoczeniem i opóźnianiem niezbędnych badań tła. Jak wydostać się z tej otchłani? Moja intuicja podpowiada, że powinienem szybko przestudiować materiał i rozpocząć maleńką część całego projektu. Doceniam wszelkie wskazówki i porady.


title: Czy możesz wskazać mi nietrywialną implementację wzorca strategii?

text: Mamy do czynienia z wdrożeniem obiegu rejestracji w wielu oddziałach. Istnieją trzy główne przepływy, które w pewnych warunkach prowadzą do siebie. Każdy przepływ ma co najmniej cztery różne etapy; niektóre kroki współdziałają z serwerem, a każdy krok dodaje więcej informacji do stanu. Wymagane jest również, aby była ona trwała między sesjami, więc jeśli użytkownik zamknie aplikację (jest to aplikacja mobilna), przywróci proces z ostatniego ukończonego kroku ze stanem z poprzedniej sesji. Myślę, że mogłoby to skorzystać na wykorzystaniu wzorca strategii, ale nigdy nie musiałem go wdrażać w tak złożonym przypadku. Czy ktoś zna jakieś przykłady w open source lub artykuły, z których mógłbym czerpać inspirację? Najlepiej byłoby, gdyby przykłady pochodziły z żywej/pracującej/stabilnej aplikacji. Interesuję się głównie implementacją Javy; tworzymy dla telefonów komórkowych Java: android, blackberry i J2ME. Mamy SDK, który jest dość dobrze oddzielony od implementacji specyficznych dla platformy, ale przykłady w C++, C#, Objective-C lub Python byłyby dopuszczalne.


title: Pomysły na oprogramowanie do zarządzania programistami?

text: (Wysłałem to na serverfault i zasugerowano, że zamiast tego zamieszczam tutaj) Szukam rekomendacji aplikacji, która pomogłaby mi śledzić dyskusje, które prowadzę z członkami mojego zespołu podczas naszych cotygodniowych spotkań 1 na 1. Prawdopodobnie najlepsza byłaby aplikacja na komputery dla systemu Windows. W przypadku funkcji powinien być w stanie zarządzać celami, szkoleniami, wydajnością, recenzjami i incydentami. Powinien mieć łatwy w użyciu interfejs, ale nie tak niezgrabny, jak niektóre narzędzia, takie jak http://www.managerassistant.com/products.html word/notepad lub excel, po prostu nie wydają się dobrze pasować. pomysły?


title: Nauka programowania sterowanego zdarzeniami

text: Chcę dowiedzieć się więcej o programowaniu sterowanym zdarzeniami. Zwłaszcza gdzie i dlaczego rozważyłbym wykorzystanie eventów. Jakie zasoby/książki powinienem rozważyć w tym celu? (uwaga: język jest mi obojętny.)


title: Rejestrowanie oparte na zdarzeniach. Czy to dobry pomysł i czy można przekazać uchwyt do „zalogowanego” obiektu?

text: Cześć Mam dość złożony program, który wykonuje obliczenia w dość dużej pętli. Chcę zarejestrować podstawowe statystyki dotyczące przebiegu, aby móc analizować jego wydajność w czasie i liczbę pętli vs. Na razie wyprowadzam zestaw liczb, około 5 lub 6, w każdej pętli. Problem polega na tym, że liczba pętli jest dość duża, więc pliki dziennika są duże. Również umieszczanie 10^6 punktów pomiarowych na wykresie nie ma sensu. Myślałem o "filtrowaniu" wyników poprzez na przykład drukowanie co 1 tysięczną pętlę, ale straciłbym kilka punktów zainteresowania. Nie mogę też rejestrować samych punktów POI, ponieważ straciłbym orientację w ogólnym postępie. Postanowiłem przełączyć się na rejestrowanie oparte na zdarzeniach. Przede wszystkim wydarzenia, o których myślę, to połączenie dwóch wyżej wymienionych rzeczy: ulepszenie obecnego rozwiązania i pewien postęp w pętlach. Implementacja, o której myślę, to napisanie prostego `StatLogger`a, który byłby odpowiedzialny za wyprowadzanie danych do strumienia dziennika. Główny program po prostu uruchamia metodę `log()` za każdym razem, gdy wystąpi zdarzenie. Zdarzenia mogą wystąpić jednocześnie i nie ma sensu rejestrować stanu dwa razy, więc klasa byłaby odpowiedzialna za niewydawanie statystyk dwa razy. Moje pytania to: 1. Czy jest to dobre lub powszechne podejście i wzorzec? 2. Czy lepiej przekazać procedurę obsługi do obiektu przeliczającego liczby, aby logger mógł uzyskać wszystkie interesujące statystyki, takie jak `StatLogger::log(const RunEnviroment *this)`, czy też lepiej utworzyć inną strukturę do przechowywania wszystkich interesujących stats i utwórz metodę `StatLogger::log(const Stats& stats)`. 3. Jeśli moje podejście jest złe, jakie są wspólne rozwiązania w podobnych przypadkach?


title: Konwencja pisania Pythona bez znaków nowej linii i białych znaków?

text: Czy istnieje konwencja pisania Pythona pozbawionego znaków nowej linii i białych znaków? Na przykład komentarze stackexchange, Twitter, wiadomości tekstowe...


title: Odpowiednik Domain Driven Design dla funkcjonalnych języków programowania

text: Naprawdę podoba mi się pomysł projektowania opartego na domenie, jednak kiedy uczę się Go, zastanawiam się, czy istnieje odpowiednik DDD, który ma na celu efektywniejszy język bardziej funkcjonalny?


title: Komunikacja świetlna MVVM

text: Pracuję na dużej aplikacji MVVM. Używam do tego zestawu narzędzi MVVM light. Aplikacja jest jak przeglądarka internetowa z przyciskami wstecz i dalej. Widok główny to kontrolka użytkownika. Umieściłem przyciski wstecz i do przodu w kontrolce użytkownika głównego widoku. Z kolei główny widok ma kontrolki użytkownika. Kontrolki użytkownika zmieniają się po kliknięciu przycisków Wstecz i Dalej. Główny ViewModel śledzi bieżącą kontrolkę użytkownika i ładuje następną w zależności od kliknięcia przycisku. Wszystkie te kontrolki użytkownika są ładowane w zależności od wyboru (ID) dokonanego w pierwszym kroku. Powiedzmy, że główny widok to ekran wyszukiwania i wybieramy klienta. Kolejne ekrany to Adres, Rozliczenia, Żądania itp. Te ekrany nie udostępniają żadnych danych. Ale dane dotyczą tego samego klienta. Czy zatem dobrą praktyką jest przechowywanie identyfikatora klienta w widoku głównym? Jeśli to zrobię, powinienem mieć zdarzenie UserControl_Loaded powiązane z poleceniem, w którym następnie zażądam informacji o adresie i rozliczeniach. Lub mogę przenieść przyciski (przyciski wstecz i dalej) do każdej kontrolki użytkownika zamiast głównego widoku, przekazać identyfikator klienta z wiadomością, która załaduje następny widok. Co jest lepsze?


title: Modele powinny pasować do struktury tabeli, Viewmodels pasować do sposobu wyświetlania danych?

text: Mam tabelę bazy danych z wieloma kolumnami, którą chcę wyświetlić na kilku stronach, podobnie jak formularz zbierania informacji w stylu turbo. Tylko 1 lub 2 pozycje na stronie. Czy słuszne jest utworzenie 1 modelu, a następnie viewModel z tylko określonymi właściwościami na ViewModel dla każdej sekcji, którą chcę utworzyć w tym przepływie pracy?


title: Jak odróżnić wyrażenia jednowyrazowe od wyrażeń dwuwyrazowych?

text: Polecono mi utworzyć dwie listy dotyczące najczęściej używanych słów ze zwykłego tekstu (10 MB dowolnych tekstów) jako monogramy (dla wyrażeń jednowyrazowych, takich jak człowiek, woda, is) i biggramy (dla wyrażeń dwuwyrazowych, takich jak drużyna koszykówki, stany zjednoczone itp.) Utknąłem tutaj i nie wiem, jak mam się do tego zabrać! A jak mogę odróżnić te dwa? Moją domeną nie jest język angielski, podałem te przykłady tylko po to, aby moje intencje i znaczenie były bardziej jasne.


title: Różnica między wzorcem Adapter a wzorcem Proxy?

text: O ile rozumiemy, **wzorzec adaptera** tworzy otaczający obiekt dla naszego rzeczywistego obiektu zainteresowania, po prostu jeszcze jeden poziom pośredni, który zapewnia elastyczność. elastyczność polega na tym, że jeśli interfejs rzeczywistego obiektu zostanie zmieniony, to zmienimy interfejs opakowujący, wskazując na rzeczywisty obiekt, pozostawiając niezmieniony interfejs widoczny po stronie klienta. **Wzorzec proxy** jest taki sam, z tą różnicą, że każde opakowanie proxy zapewnia tylko spójny podzbiór funkcjonalności rzeczywistego obiektu. Dlaczego miałoby to być przydatne, skoro staramy się tworzyć „jedna klasa do jednego celu” jest poza mną. _Czy dobrze zrozumiałem?_


title: Wszystkie obrazy w jednym folderze na stronie internetowej?

text: Czy podczas tworzenia stron internetowych lepiej mieć dużo obrazów w jednym folderze, czy je rozdzielić? To coś, co zawsze było w mojej głowie, ale nigdy nie badałem tego wystarczająco, a googlowanie nie dało mi wielu odpowiedzi. Od samego początku tworzę więc głównie witryny dla agencji nieruchomości i zawsze lubiłem porządkować obrazy według folderów, powiedzmy webroot/photos/$propertyId/, ale czasami widziałem strony internetowe przechowujące wszystkie obrazy w folderze , a odróżnianie ich głównie nazwą. Nigdy nie musiałem budować dużej strony internetowej, więc myślałem o tym, ale nie obchodziło mnie to zbytnio, ale chciałbym wiedzieć, który z dwóch sposobów jest lepszym podejściem. Czy naprawdę istnieje zauważalna przez człowieka różnica w wydajności podczas wykonywania różnych czynności, takich jak wyszukiwanie/usuwanie tych plików? Należy pamiętać, że czasami nie ma limitu obrazów w galeriach, więc posiadanie jednej kolumny na ścieżkę/nazwę obrazu w wierszu właściwości nie jest dla mnie często opcją, musiałbym użyć innej tabeli, aby je powiązać. Chciałbym również wspomnieć, że na przykład w moim ostatnim projekcie musiałem zarządzać dziesiątkami GB obrazów, mieliśmy około 300000 właściwości i powiedzmy średnio 10 zdjęć na właściwość.


title: Jaki sens ma dla doświadczonego programisty .Net profesjonalne przejście na ROR?

text: Uważam się za średnio wykwalifikowanego (zdecydowanie nie głupiego) programistę .Net. Przez ostatnie 5 lat pracowałem z ASP.Net, ASP.Net MVC, SharePoint, WPF, Silverlight, RDBMS (SQL Server i Oracle). Utrzymuję/wspieram kilka .Net OSS. W zeszłym roku nauczyłem się także F# i Haskella. Obecnie jestem zatrudniony w jednej z lepszych (najlepszych) firm programistycznych i na pewno chciałbym kontynuować tutaj pracę. Jednak w ciągu ostatnich 6 miesięcy możliwości w .Net w większości się wyczerpały i wszystkie nowe prace zmierzają w kierunku ROR (i tego, co pozostało w kierunku Javy). Nigdy nie obawiałem się nauki nowego stosu/języka dla zabawy, a wcześniej uczyłem się Haskella i Pythona w wolnym czasie. Obawiam się jednak, jaki wpływ na moją karierę miałoby przejście na zupełnie inny stack. Co byś zrobił: * Zmień pracę, jeśli wkrótce nie znajdziesz niczego w .Net. * Wypróbuj stos ROR przez jakiś czas. Jeśli okaże się, że to nie twoja filiżanka herbaty, cofnij się. (Jak wpłynie to na moją karierę i możliwości pracy w dłuższej perspektywie?) Byłoby również bardzo pomocne, gdyby byli jacyś ludzie ASP.Net MVC, którzy przeszli na ROR zawodowo, którzy mogą dzielić się swoimi doświadczeniami. **Edycja:** Nie robiłem wcześniej żadnego rozwoju na polu *nix. Jednak używałem Ubuntu do zabawy i gier. Przepraszam, jeśli brzmi to subiektywnie.


title: jeśli mam wiele wywołań pojedynczej metody, która zwraca wartość pola, czy lepiej jest utworzyć zmienną lokalną?

text: W metodzie mam wywołania pojedynczej metody innego obiektu, który zwraca wartość pola, jak `foo.value()`, który jest zdefiniowany jako `Field value() {return this.value;}` Czy lepiej zrobić zmienna lokalna, np. „Wartość pola = foo.value()” i użyj jej. Lub użyć wielu wywołań metod jednej metody? Czemu? Jak to ma się do liczby wywołań metod, np. dla 3, 5, 10, co będzie lepsze i dlaczego może to być problemem? Edycja: pole nie zmienia się w żaden sposób podczas przepływu metody, tylko ta sama wartość przez cały czas. Edit2: czy to zależy od języka programowania? Jeśli to ważne, to java.


title: Online vs Web - napisz raz aplikację

text: Zostałem poproszony o napisanie aplikacji (aplikacji wizualnej), którą można uruchomić zarówno online, jak i lokalnie. Ta aplikacja zawiera wiele zewnętrznych plików danych (wideo, obrazy i audio), więc głównym problemem, jaki mam, jest wdrażanie jej przez Internet. Chcę to zaprojektować tak, abym musiał napisać tylko 1 system, a nie osobną bazę kodu dla wersji online. To, co do tej pory wymyśliliśmy z kolegą, to; * Serwer Tomcat/Application - dla logiki kodu * Strony HTML do dostarczania treści * Wiele małych Scen Silverlight w zależności od odciętej strony. Mam tylko kilka miesięcy, więc pisanie 2 zestawów aplikacji nie jest dla mnie efektywne. Czy to skalowalne podejście? Czy istnieją lepsze sposoby na napisanie/wdrożenie tego typu aplikacji?


title: Czy istnieją jakieś „najlepsze praktyki” dotyczące rozwoju na różnych urządzeniach?

text: Rozwój dla smartfonów w sposób, w jaki obecnie robi to branża, jest stosunkowo nowy. Oczywiście od kilkudziesięciu lat rozwija się rozwiązania mobilne na poziomie korporacyjnym. Zmieniły się jednak platformy. Pomyśl o: * od wprowadzania rysikiem do wprowadzania dotykowego (inna rozdzielczość ekranu, inny układ sterowania itp.) * nowe sposoby obsługi wielozadaniowości na platformach mobilnych (np. „nagrobek” WP7) Sposób działania tych platform nie jest całkowicie nowość (na przykład iPhone istnieje już od dłuższego czasu), ale w tej chwili, gdy tworzymy funkcjonalnie równą aplikację zarówno na komputer stacjonarny, jak i smartfon, sprowadza się to do stworzenia dwóch aplikacji od podstaw. Zwłaszcza w związku z narodzinami Windows Phone z platformą .NET na pokładzie i używaniem Silverlight jako języka interfejsu użytkownika, promowanie ponownego wykorzystania (części interfejsu użytkownika) staje się atrakcyjne. Mimo to jest dość oczywiste, że potrzeby aplikacji na smartfonie (lub tablecie) są bardzo różne w porównaniu z potrzebami aplikacji komputerowej. Dlatego (prawie) konwersja jeden na jednego będzie niemożliwa. **Moje pytanie** : czy istnieją udokumentowane „najlepsze praktyki”, pułapki itp. związane z tworzeniem aplikacji „na wiele urządzeń” (na przykład tworzenie aplikacji zarówno na komputery stacjonarne, jak i smartfony/tablety)? Od około tygodnia przeglądam blogi, artykuły naukowe i nie tylko, ale to, co do tej pory znalazłem, dotyczy tylko „interfejsów migracyjnych”.


title: Jak pisać „dobre” testy jednostkowe?

text: Wyzwolony przez ten wątek, (znowu) zastanawiam się nad ostatecznym wykorzystaniem testów jednostkowych w swoich projektach. Kilka plakatów mówi coś w stylu „Testy są fajne, jeśli są dobrymi testami”. Moje pytanie teraz: Czym są „dobre” testy? W moich aplikacjach główną częścią jest często jakaś analiza numeryczna, uzależniona od dużej ilości obserwowanych danych, której wynikiem jest funkcja dopasowania, którą można wykorzystać do modelowania tych danych. Szczególnie trudno było mi skonstruować testy dla tych metod, ponieważ liczba możliwych danych wejściowych i wyników jest zbyt duża, aby po prostu przetestować każdy przypadek, a same metody są często dość długie i nie można ich łatwo zrefaktoryzować bez poświęcania wydajności. Szczególnie interesują mnie „dobre” testy dla tego rodzaju metody.


title: Lepszy sposób na tworzenie próbek

text: Zrobiłem ten kawałek kodu do tworzenia próbek bernulli, ale myślę, że jest to tak ciężki algorytm, ponieważ za każdym razem, gdy wywołuję tę funkcję rekurencyjną, tworzę nowy wektor, który jest do niej przekazywany. Czy istnieje sposób na przyspieszenie tego algorytmu? Oto algorytm i opis: Jak już wspomniano, funkcja ta tworzy rekurencyjnie próbki bernulli. Jeśli `n`, czyli liczba elementów, które powinny zostać znalezione, jest równe 0, wypisuję próbkę. W przeciwnym razie do przekazanej próbki dodaję każdy element populacji (muszę stworzyć wektor dla każdej z tych nowych próbek) i wywołuję funkcję z tą nową próbką i n (liczba elementów do znalezienia) zmniejsza się . private static void distribuzioneBernoulli(int n, Vector<Float> populacja, Vector<Float> sample){ // warunek wyjścia, gdy n jest równe 0 funkcja nie wywołuje samoistnych wywołań if(n==0){ JOptionPane.ShowMessageDialog( zerowy, kampion); } // Każdy element populacji jest dodawany do próbki, // i przywoływany funkcja for(int x = 0; x < populacja.size(); x++){ Vector<Float> aggiunta = new Vector<Float> (próbka); aggiunta.add(populacja.elementAt(x)); distribuzioneBernoulli(n-1, populacja, aggiunta); } }


title: Uwierzytelnianie Facebooka z autorytatywnym serwerem dla gry Flash

text: Pracuję nad grą wieloplatformową we Flashu. Ta gra wykorzystuje serwer Photon do autorytatywnej fizyki i śledzenia statystyk użytkowników. Chcę wykorzystać uwierzytelnianie Facebooka jako alternatywę dla tworzenia konta specyficznego dla domeny. Jestem ciekawy, czy mogę użyć Flash SDK dla Facebooka do pośredniego uwierzytelnienia użytkownika w aplikacji Photon Server. Nie zrobiłem nic dla Facebooka, chociaż przejrzałem kilka różnych źródeł informacji i nie znalazłem jeszcze rozwiązania, które wydaje się odpowiednie. Na przykład przyjrzałem się bibliotekom javascript, które opisują zwracane dane, takie jak identyfikator użytkownika i token dostępu. Wygląda na to, że to wszystkie dane, które muszę śledzić dla graczy. Wiem również, że token dostępu służy do uwierzytelniania krótkoterminowego i służy przede wszystkim do korzystania z funkcji post-uwierzytelniania Facebooka. Biorąc to pod uwagę, powiązanie danych z kontem odbywa się za pomocą identyfikatora użytkownika Facebooka. Przekazuje również datę wygaśnięcia. Potrafię wykorzystać szyfrowanie wiadomości za pomocą frameworka Photon Server. Użytkownicy są połączeni z kontami gier przy użyciu dziedziczonej jednostki pochodzącej z abstrakcyjnej klasy PlayerData w modelu Entity Framework po stronie serwera. Ta jednostka zawiera informacje do uwierzytelniania Facebooka. **Czy uwierzytelnianie zewnętrzne można bezpiecznie przeprowadzić, przekazując zaszyfrowany token dostępu użytkownika i identyfikator użytkownika na serwer z klienta Flash, po uwierzytelnieniu za pomocą interfejsu Flash API dla Facebooka?** **Jakie metody są dostępne do określenia, że Facebook poświadczenia są nadal aktywne, więc klient może zostać odłączony od serwera w przypadku wylogowania się z Facebooka?**


title: Czy zagregowany korzeń może zawierać referencje członków innego zagregowanego korzenia?

text: Wiem, że poza skupiskami nie mogę zmienić niczego wewnątrz skupiska, nie przechodząc obok jego korzenia. To powiedziawszy, chciałbym wiedzieć, czy zagregowany korzeń może zawierać referencje członków (obiektów wewnętrznych) innego zagregowanego korzenia? (zgodnie z regułami DDD) Przykład: **Kalendarz** zawiera listę **faz**, które zawierają listę **sekwencji**, które zawierają listę **przypisania** Kalendarz jest pierwiastkiem, ponieważ fazy i sekwencje oraz przypisania działają tylko w kontekście kalendarza. Masz również **Uczniowie** i **Grupy** uczniów (zwane grupami) Możliwe jest (zgodnie z regułami DDD) utworzenie grup zawierających referencje **zadań** lub muszą one przejść przez administratora w celu uzyskania dostępu do grup z przydziałów ? Dziękuję.


title: Jak przetestować stan obiektu?

text: Mam klasę `DataImport` z tylko dwoma publicznymi metodami void fromStream(InputStream inputStream); public ImportCommand getImportCommand(); Kiedy ją testuję, wysyłam dane testowe do metody `fromStream` dataImport.fromStream(trochę strumienia z danymi...) Jedynym sposobem na przetestowanie wyniku tej metody jest pobranie `ImportCommand` z `getImportCommand` i sprawdzenie, czy ten obiekt jest w stanie zgodnym z podanym przeze mnie wejściem. Ale co, jeśli `ImportCommand` ma tylko jedną metodę? public ImportResult execute(); Mógłbym przetestować `ImportResult` (po wywołaniu `execute()`, co wiązałoby się z kilkoma mockami i dodatkową konfiguracją), ponieważ ma ujawniony pewien stan. Ale w ten sposób testuję `ImportCommand` i klasę `DataImport` w jednym teście jednostkowym, co nie wydaje mi się odpowiednie. Ale ujawnianie wewnętrznego stanu klas, które testuję, lub dostęp do ich prywatnych pól/metod również nie jest dobrą rzeczą. Czy to oznacza, że mój projekt nie jest w porządku (jak mam to zmienić) czy jest jakiś sposób na rozwiązanie tej sytuacji? Powiązane: Antywzorce TDD na SO


title: Czy powinienem utworzyć oddzielne konta służbowe i osobiste na GitHub?

text: Jestem całkiem nowy w programowaniu i pracowałem nad wieloma osobistymi projektami, które moim zdaniem mogą wydawać się głupie i nieprofesjonalne. Projekty, które mam to Reddit Image Downloader i narzędzie dla GMów do wykorzystania w grach fabularnych. Chcę rozpocząć tworzenie konta GitHub dla projektów z wybranej przeze mnie dziedziny analityki danych, ale nie jestem pewien, jak organizować projekty na moim koncie GitHub. Czy powinienem stworzyć „profesjonalny” GitHub, zawierający głównie różne skrypty analityczne i mieć osobne „osobiste” konto dla moich zabawnych małych projektów? A może po prostu zastanawiam się nad tym i czy powinienem utrzymywać tylko jedno konto?


title: Dobre podejście dla setek konsumentów i dużych plików

text: Mam kilka plików (prawie 1GB każdy) z danymi. Dane to ciąg znaków. Każdy z tych plików muszę przetworzyć z kilkuset konsumentami. Każdy z tych konsumentów wykonuje przetwarzanie, które różni się od innych. Konsumenci nie piszą nigdzie jednocześnie. Potrzebują tylko ciągu wejściowego. Po przetworzeniu aktualizują swoje lokalne bufory. Konsumenci mogą być łatwo wykonywani równolegle. Ważne: W przypadku jednego konkretnego pliku każdy konsument musi przetworzyć wszystkie wiersze (bez pomijania) we właściwej kolejności (tak jak pojawiają się w pliku). Kolejność przetwarzania różnych plików nie ma znaczenia. Przetwarzanie jednej linii przez jednego konsumenta jest porównywalnie szybkie. Spodziewam się mniej niż 50 mikrosekund na Corei5. Więc teraz szukam dobrego podejścia do tego problemu. Będzie to część projektu .NET, więc trzymajmy się tylko .NET (najlepiej C#). Wiem o TPL i DataFlow. Myślę, że najbardziej odpowiedni byłby `BroadcastBlock`. Ale myślę, że problem polega na tym, że z każdą linijką będę musiał czekać, aż wszyscy konsumenci skończą, aby opublikować nową. Myślę, że nie byłoby to zbyt wydajne. Myślę, że idealnie sytuacja wyglądałaby tak: 1. Jeden wątek czyta z pliku i zapisuje do bufora. 2. Każdy odbiorca, gdy jest gotowy, jednocześnie odczytuje linię z bufora i przetwarza ją. 3. Wpis z bufora nie powinien być usuwany, gdy czyta go jeden konsument. Można go usunąć tylko wtedy, gdy wszyscy konsumenci go przetworzyli. 4. TPL sam planuje wątki konsumenckie. 5. Jeśli jeden konsument przewyższa pozostałych, nie powinien czekać i może odczytać nowsze wpisy z bufora. Czy mam rację z takim podejściem? Czy tak czy nie, jak mogę wdrożyć dobre rozwiązanie? Zasugerowano, aby przenieść pytanie tutaj jako bardziej odpowiednie miejsce ze StackOverflow. **Aktualizacja:** Zgodnie z komentarzem david.pfx tutaj jest kilka szczegółów. Wydajność jest na pierwszym miejscu, łatwość konserwacji na drugim.


title: Co programiści powinni wiedzieć o kompresji plików wykonywalnych w systemie Windows?

text: Nigdy wcześniej o tym nie słyszałem, więc wstyd mi, ale programy takie jak UPX potrafią skompresować moje pliki do 80%, co jest całkiem fajne, ale nie mam pojęcia, jakie są wady tego. Albo nawet co robi kompresor. * Witryna, do której link znajduje się powyżej, nie mówi nic o dynamicznym łączeniu bibliotek DLL, ale wspomina o kompresji DESCENT 2 i Netscape 4.06. Nie mówi też, jakie są kompromisy, tylko korzyści. Gdyby nie było kompromisów, dlaczego mój linker nie miałby skompresować pliku? Jeśli mam środowisko, w którym mam jeden plik wykonywalny i 20-30 bibliotek DLL, z których niektóre są dynamicznie ładowane i rozładowywane dość arbitralnie, ale nie w pętlach (miejmy nadzieję), czy mam duży cios w czasie przetwarzania dekompresji tych bibliotek DLL, gdy są? ponownie używany?


title: Na co dokładnie muszę zwrócić uwagę przy wyborze dostawcy hostingu Windows?

text: Po raz pierwszy wybieram firmę hostingową. Jest to strona internetowa wykonana w asp.net mvc3. Pomyślałem więc, że wybór dostawcy będzie łatwy, ponieważ znalazłem tę stronę http://www.microsoft.com/web/Hosting/Home, która zawiera oferty hostingu. Teraz godziny później wciąż szukam. Powodem jest to, że jak tylko zaczynam dociekać o konkretnej firmie, pojawia się coś, co mi się nie podoba. Oto kilka przykładów, co zauważyłem podczas bardziej szczegółowego sprawdzania różnych firm: * **Na stronie firmy „o nas” brakuje informacji o ich firmie.** Niewielu z nich miało tylko ogólny opis tego, co robią i nic więcej, a niektórzy inni mieli informacje, takie jak nazwa firmy, ale nie mieli adresu. * **Sprawdzenie nazwy firmy w wynikach wyszukiwania w rejestrze firm nie dało wyników.** Dwie z firm, które sprawdziłem, miały zarówno nazwę firmy, jak i adres, ale nie udało mi się ich znaleźć w rejestrze. * **Umieszczenie domeny firmy w Google dało głównie wyniki z tej domeny lub witryn z recenzjami hostingu, ale niewiele więcej.** Zakładam, że dobre firmy powinny mieć wyniki wyszukiwania również z innych witryn. * **Niski ranking ruchu Alexa.** Była jedna firma, która miała witrynę, która wyglądała bardzo profesjonalnie, ale jej ranking ruchu alexa wynosił około 2 miliony. Czy są jakieś inne czynniki, na które powinienem zwrócić uwagę przy wyborze firmy hostingowej? Czy mam uzasadnione obawy, czy jestem po prostu zbyt paranoikiem?


title: Model konserwacji artefaktów zewnętrznych

text: Kiedy myślimy o utrzymaniu oprogramowania w sposób całościowy, oprócz samego kodu źródłowego musimy pomyśleć o takich rzeczach, jak kontrola zmian niezwiązanych z kodem i zarządzanie konfiguracją. Na przykład, w celu utrzymania dużej aplikacji internetowej, śledzenie: > „Wprowadź następującą (ręczną) zmianę konfiguracji w farmie w ramach > wdrażania tej konkretnej wersji xx.yy.zz pakietu rozwiązania”. Zaimplementowałem do tego całkiem dobry model, ale teraz zajmuję się kolejnym największym problemem - jak zarządzamy zmianami w innych systemach, których nie posiadamy? Weźmy prosty przykład: mamy aplikację ASP.NET będącą własnością zespołu ds. rozwiązań (nazwijmy ich zespołem PLM). Ich następna wersja zawiera zmianę, która wymaga od zespołu SAP (który znajduje się pod innym parasolem konserwacyjnym) również wdrożenia zmiany w jednym z ich punktów końcowych BAPI. Oczywiście rzeczywista koordynacja wdrożenia w czasie wydania jest prostą interakcją i koordynacją między ludźmi, ale w odniesieniu do całości SDLC: * W jaki sposób nasz przykładowy pakiet „Zespół PLM” i śledzi tę zależność jako artefakt, zarówno jako nadchodzącą zmianę, jak i , po wdrożeniu, zarządzaną zależnością z wymaganiami, które są ich właścicielami, ale implementacją, której nie kontrolują bezpośrednio? * Jakie informacje o nim należy uchwycić? Jak powinien być traktowany inaczej niż elementy konfiguracji bez kodu, które kontrolują?


title: Wzorce dotyczące nadpisywania ustawień hierarchicznych

text: Załóżmy, że masz hierarchię jednostek organizacyjnych: - Firma -- Oddziały --- Działy ---- Zespoły Załóżmy, że mam kilka ustawień (dla uproszczenia załóżmy, że mają te same właściwości) dla każdego poziomu hierarchii: * Max nr dokumentów * Min coś innego * Potrafi zrobić X * Potrafi zrobić Y * wiele innych właściwości Tak więc, podjednostki mogą ponownie używać jako domyślne ustawień rodziców lub mają zmodyfikowane tylko jedno lub dwa z tych ustawień. To samo dotyczy ich pododdziałów. Jaki byłby właściwy wzorzec do naśladowania - zarówno jako struktury kodu, jak i pamięć db, aby to wspierać, z myślą, że ustawienia każdej jednostki mogą być modyfikowane niezależnie, a ustawienia podjednostki zastępują domyślne ustawienia nadrzędne. Zastanawialiśmy się nad parami klucz/wartość, a następnie szukaliśmy każdej z nich w górę hierarchii, aż znajdziemy odpowiednie ustawienie, ale to może stać się brzydkie dość szybko. Inną opcją, którą rozważaliśmy, jest to, że każda jednostka ma swój własny zapis ustawień i aktualizuje się odpowiednio, gdy zmienią się ustawienia rodzica. Byłbym wdzięczny za wszelkie sugestie dobrze znanych podejść / wzorców w tym zakresie.


title: Czy utrzymywanie aplikacji internetowych opartych na technologii Heavy Ajax jest trudniejsze?

text: Może robię to źle, ale z mojego doświadczenia wynika, że tworzenie i utrzymywanie mocno opartych na ajaxie aplikacji internetowych jest znacznie trudniejsze niż "bardziej standardowa" aplikacja internetowa. Nie mówię o aplikacji, która używa ajax do ładowania niektórych danych tu i tam, ale styl, w którym strona wysyła serwer jest tylko ramką, a wszystkie dane są wypełniane w czasie ładowania. Chciałbym usłyszeć od osób z doświadczeniem w tworzeniu tego typu aplikacji. Z mojego osobistego doświadczenia wynika, że ich budowa i utrzymanie zajmuje więcej godzin.


title: Gdzie się podziały wszystkie dzieciaki z programowania?

text: **trochę tła:** Pochodzę ze środowiska, w którym wszyscy zaczęliśmy uczyć się programowania w Excelu VBA, a później VB6 (tak, VB6 - ale byliśmy młodzi i ostatnio było fajnie). Dla mnie był to więc całkowicie naturalny sposób na rozpoczęcie pracy z programowaniem. Później pracowałem na forum programistycznym związanym z VB, gdzie duża część społeczności składała się właśnie z tych młodych programistów-amatorów. Teraz oczywiście VB jest językiem umierającym, więc przeszliśmy na języki .NET (C# i VB.NET), **ale liczba odwiedzających stale spadała (i jest)** To właśnie te **młode programistyczne dzieciaki w szczególności tego nam brakuje**. Moglibyśmy to przypisać wyłącznie VB, ale rozejrzałem się po innych forach i wydaje się, że wszystkie mają podobne problemy. **Więc moje pytanie brzmi** > Gdzie podziały się dzisiejsze programistyczne dzieciaki? Czy .NET jest „bardziej profesjonalny” w > sposób, który przyciąga mniej młodszych programistów niż starsze języki (VBC, > Delphi, Pascal, cokolwiek zaczynał)? A może jest to szersze zjawisko, że mamy dziś mniej „nowej krwi”? Czy ktoś ma podobne (lub przeciwne) doświadczenia w tym zakresie? Gdzie się podziały dzieci i jakich języków używają (mam nadzieję, że nie wszystkie Java/Javascript :D )? A może to koncept forów podupada?! Chciałbym po prostu _zbierać tutaj kilka myśli_ i mam nadzieję _twarde dane_, jeśli powinny być dostępne. Dziękuję


title: Program LOOP potrzebuje tylko inc i zero

text: Mam 4 różne polecenia w języku programowania LOOP: y=Zero() y=Val(x)=skopiuj x i wstaw do rejestru y y=Inc(x)=x+1 y=Dec(x)=x-1 Wreszcie Mam też pętlę n razy { ... } Jak to możliwe, że istnieje równoważny program pętli dla każdego innego programu pętli, który używa tylko Inc, Zero i pętli? Dla mnie nie jest jasne, jak wyrazić polecenie Dec za pomocą tylko Inc, Zero i pętli.


title: Potrzebujesz pomocy w historii użytkownika z wieloma warunkami

text: Mam następującą historyjkę użytkownika: * Jako zarejestrowany użytkownik mogę poprosić o nowy klucz licencyjny z następującym warunkiem * Gdy użytkownik zażąda klucza licencyjnego, musi wprowadzić identyfikator sprzętu Czy powinienem utworzyć inną historię użytkownika na podstawie tego warunku? przykład * Jako zarejestrowany użytkownik mogę poprosić o nowy klucz licencyjny tylko po podaniu identyfikatora sprzętu. Czy w sytuacji, gdy mam wiele warunków, należy stworzyć wiele historyjek użytkownika, aby zmieściły się w warunku? Dziękuję


title: Co to jest wczesne i późne wiązanie?

text: W wielu wywiadach zadano mi to pytanie. Znalazłem następującą odpowiedź: > Wczesne wiązanie odnosi się do przypisywania wartości do zmiennych w czasie projektowania > podczas gdy późne wiązanie odnosi się do przypisywania wartości do zmiennych w czasie działania > czasu. Nie mogę tego zrozumieć bez przykładu. Czy ktoś może mi go dać?


title: Dlaczego DirectX używa lewoskrętnego układu współrzędnych?

text: Rozważałem opublikowanie postu na Stack Overflow, ale pytanie wydaje mi się zbyt subiektywne, ponieważ nie mogę wymyślić rozsądnego technicznego wyjaśnienia wyboru Microsoftu w tej sprawie. Ale to pytanie dręczyło mnie od tak dawna, że problem wciąż pojawia się w jednym z moich projektów i nigdy nie widziałem próby wyjaśnienia tego: OpenGL używa prawoskrętnego układu współrzędnych, w którym część świata +Z układ współrzędnych rozciąga się w kierunku widza. DirectX używa systemu leworęcznego, w którym część +Z współrzędnej świata rozciąga się _na_ ekran, z dala od widza. Nigdy nie korzystałem z Glide API, więc nie wiem, jak to działa, ale z tego, co udało mi się zebrać, używa również systemu leworęcznego. Czy jest ku temu przyczyna techniczna? A jeśli nie, to czy istnieje jakaś konceptualna korzyść z określonej manipulacji układu współrzędnych? Dlaczego jeden miałby wybrać jedno, a nie drugie?


title: Czy programiści SQL tworzą zapytania SQL przy użyciu projektantów zapytań SQL?

text: Byłem po prostu ciekawy, czy programiści SQL piszą swój kod odręcznie, czy też używają wizualnego projektanta zapytań do generowania zapytań? W większości przypadków projektant zapytań może stworzyć większość nieskomplikowanych zapytań, prawda? (Jestem programistą WinForms dopiero zaczynam pracę z SQL Server)


title: Dlaczego C# nie ma małpich łatania?

text: Czytałem o monkeypatchingu, który dynamicznie przesłania funkcjonalność klas. C# pozwala na dynamiczne rozszerzanie, ale bez małpich łatania, co uważam za rozsądne. Ale zastanawiałem się, dlaczego nie włączyli tej funkcji. Czy to dlatego, że możesz uszkodzić inne programy działające na twoim komputerze, czy po prostu ta funkcja nie została uznana za potrzebną?


title: Czy „opakowanie” i „podkładka” są synonimami?

text: Czy słowa „opakowanie” i „podkładka” są mniej lub bardziej synonimiczne, czy też istnieje rozróżnienie, być może konotacyjne?


title: Przykładowy wzór Memento: czy jest prawidłowy?

text: Podążając za tym zapytaniem o wzorzec memento, próbowałem przetestować moje zrozumienie. > Wzorzec memento oznacza trzy rzeczy: > > 1. Zapisanie stanu obiektu „pamięci” w celu jego pomyślnego odzyskania > 2. Ostrożne zapisanie każdego poprawnego „stanu” memento > 3. Hermetyzacja zapisanych stanów z induktora zmian, tak aby każdy > stan pozostaje niezmieniony > _**Czy udało mi się osiągnąć te trzy za pomocą mojego projektu?_** _**Problem _** Jest to gra dla zerowych graczy, w której program jest inicjowany z określonym ustawieniem pionków szachowych - rycerz i królową. Następnie program musi ciągle dodawać zestaw pionków lub skoczków i hetmanów tak, aby każdy pionek był "bezpieczny" na następny ruch każdego innego pionka. Warunkiem jest umieszczenie obu pionków lub żadnego z nich. Szachownica z największą liczbą niesprzecznych skoczków i hetmanów powinna zostać zwrócona. **Implementacja** Mam do tego 4 klasy: 1. `zabezpieczona szachownica` (pamiątka) private int [][] ChessBoard; public void ChessBoard(); protected void SetChessBoard(); chronione void GetChessBoard(int); 2. `Pion publiczny` To nie jest związane z memento. Zawiera informacje o pionkach public enum PawnType: int { Empty = 0, Queen = 1, Knight = 2, } //Zwraca wartość, która pokazuje, czy można bezpiecznie umieścić pionka public bool IsSafeToAddPawn(PawnType); 3. `public CareTaker` To odpowiada opiekunowi memento Jest to dwuwymiarowa tablica liczb całkowitych, która śledzi wszystkie stany. Powodem posiadania tablicy 2D jest śledzenie, ile stanów jest przechowywanych i który stan jest aktualnie aktywny. Przykład: 0 -2 1 -1 2 0 - To jest aktualny stan. Z drugim indeksem 0/ 3 1 - Ten stan został zapisany, ale został cofnięty private int [][]State; prywatna szachownica [] MChessBoard; //To pobiera szachownicę w żądanej pozycji i przypisuje ją do nadawcy public ChessBoard GetChessBoard(int); //To nadpisuje szachownicę w podanej pozycji public void SetChessBoard(ChessBoard, int); prywatne int [][]Państwo; 4. `publiczna gra Play` (to jest twórca) prywatny status bool; prywatna szachownica oChessBoard; //Ustawia stan szachownicy na określonej pozycji public SetChessBoard(ChessBoard, int); //Pobiera stan szachownicy na określonej pozycji public ChessBoard GetChessBoard(int); //Ta funkcja próbuje umieścić oba pionki i zwraca status tej próby public bool PlacePawns(Pawn); **Edytuj po dyskusji z Kevinem** Sposób, w jaki próbuję zastosować wzorce projektowe do moich problemów, nie jest prawidłowy. W pewnym sensie pomaga mi to zrozumieć „jak” to „wdrożyć”. TAk. Ale to nie jest jego idealne zastosowanie. Równie dobrze mógłbym uprościć mój problem „nauki” i skorzystać z moich podręcznikowych. Odnieś się również do tego pytania na programrs.stackoverflow i wszystkich dyskusjach!


title: Czy prototype.js jest nadal aktualny?

text: Zajmuję się tworzeniem aplikacji internetowej, którą zacząłem około 2 lata temu. Jest to projekt jednostronicowy z dużą ilością AJAX i rozwiązane w prototypie problemy, w których nie chciałem wymyślać koła na nowo. Używam kilku narzędzi innych firm, które zależą od prototypu, a mianowicie okonet modalbox, podpowiedzi protofish, scriptaculous. Moje własne użycie prototypu sprowadza się do prostych operacji, takich jak odczytywanie wartości wejściowych i tworzenie elementów. Moje obawy zaczęły się od braku aktualizacji prototypów i dowodów prima facie w Internecie. Jeśli szukasz czegoś związanego z JScript, jquery jest często wspominane i prawie wcale nie jest prototypem. Ostatnio wydaje się, że jquery jest zestawem narzędzi z wyboru, a prototyp jest w stagnacji. Czy powinienem przejść na jquery?


title: Związek między TDD a architekturą/projektem oprogramowania

text: Jestem nowy w TDD i czytałem teorię, ponieważ jej stosowanie jest bardziej skomplikowane, niż się wydaje, gdy uczysz się sam. O ile wiem, celem jest napisanie przypadków testowych dla każdego wymagania i uruchomienie testu tak, aby się nie powiódł (aby zapobiec fałszywemu alarmowi). Następnie należy napisać minimalną ilość kodu, która może przejść test i przejść do następnego. Biorąc to pod uwagę, czy to prawda, że otrzymujesz szybki rozwój, ale co z samym kodem? ta teoria sprawia, że myślę, że nie rozważasz takich rzeczy jak abstrakcja, delegowanie odpowiedzialności, wzorce projektowe, architektura i inne, ponieważ piszesz tylko „minimalną ilość kodu, która może przejść test”. Wiem, że prawdopodobnie się mylę, ponieważ gdyby to była prawda, mielibyśmy wielu gównianych programistów ze słabą architekturą oprogramowania i dokumentacją, więc proszę o przewodnik tutaj, jaki jest związek między TDD a architekturą/projektem oprogramowania?


title: Kiedy należy używać klasy CSS zamiast stylów wbudowanych?

text: Mam kilka ukrytych divów, które pokazuję przez JavaScript po kliknięciu przycisku. W tej chwili ukrywam je za pomocą stylizacji wbudowanej (tj. `style="display:none;"`). To działa, ale czy istnieją ogólne zasady lub wytyczne, których należy przestrzegać, aby określić, czy powinienem używać stylów wbudowanych, czy stylów za pomocą arkuszy stylów i selektorów klas?