title: Interfejs na poziomie klasy lub funkcji?

text: Ostatnio wpadłem we wzorzec, w którym definiowałem procedury, które opierają się na interfejsie zdefiniowanym przez funkcję, która jest określona jako parametr procedury. (Językiem jest C#, ale można to zastosować do dowolnego języka z funkcjami pierwszej klasy). Na przykład mam interfejs API, który uwidacznia operacje CRUD względem magazynu zapasowego. W przypadku operacji GET na konkretnym zasobie, mogę uogólnić procedurę na: * pobranie zasobu, którego szukamy * zwrócenie odpowiedzi nie znalezionej, jeśli zasób nie istnieje * zwrócenie zasobu, jeśli zostanie znaleziony. zdefiniowanie procedury, która akceptuje funkcję delegata w celu znalezienia zasobu. To ten delegat definiuje kontrakt interfejsu. Zdarza się, że działa to dobrze w mojej sytuacji, ponieważ informacje wymagane do zlokalizowania zasobu mogą się różnić. W moim przypadku jest to wyszukiwanie danych w bazie danych według kluczy, ale typ i liczba kluczy mogą się różnić. Mogę je uchwycić w zamknięciu w procedurze wywołującej i spełnić interfejs funkcji delegata. Na przykład: // Znajdź prosty rekord, który ma tylko jeden klucz public SimpleRecord GetSimpleRecord(int IDrekordu) { return getResource(repository => repository.SimpleRecords.Find(recordID)); } // Zlokalizuj złożony rekord, który ma wiele kluczy public ComplexRecord GetComplexRecord(int recordID, int userID, string token) { return getResource(repository => repository.ComplexRecords.Find(recordID, userID, token)); } To działa, ale wydaje się, że jest to mieszanka programowania OOP i programowania w stylu funkcjonalnym. Jeśli potrzebuję przekazać więcej niż jednego delegata, zaczyna być trochę bałagan. Niektóre podprogramy, których potrzebuję wszędzie, zostały zdefiniowane jako abstrakcyjne metody, które muszą zaimplementować wszystkie podklasy. Więc mam hybrydę. Czy tego typu technika ma nazwę lub wzór, którego mi brakuje? Czy delegaci powinni być zaimplementowani w zdefiniowanym interfejsie klasy, który jest przekazywany do wywołującego? **UPDATE** z bardziej konkretnym przykładem: staram się przestrzegać zasady DRY. Mówię o kontrolerach w aplikacji C# Web API. Każde żądanie ma pewne cechy wspólne, które zaimplementowałem w podstawowej klasie kontrolera: * Obsługa wszystkich wyjątków poprzez zwrócenie poprawnego kodu statusu HTTP (404 dla zasobów, które nie zostały znalezione, 201 dla utworzonych zasobów itp.) * Mapowanie encji bazy danych do i z obiektów transportu danych, którymi zajmuje się klient, Chcę wyrazić _co_ zrobić w tej klasie bazowej i delegować _jak_ do klasy concreate. _jak_ kończy się implementacją funkcji delegata. Być może będę musiał uzyskać osobę z bazy danych, po imieniu i nazwisku lub zamówienie zakupu, za pomocą identyfikatora liczby całkowitej. W obu przypadkach, jeśli zasób nie zostanie znaleziony, 404 musi zostać zwrócony. Jeden zwraca osobę, jeden zamówienie zakupu. Sposób ich wyszukiwania i mapowania danych na obiekt klienta jest inny. Funkcja bazowa może wyglądać tak: T getResource<T> (Func<IRepository, T> find) { T data = find(getRepository()); if (data == null) { wyrzuć nowe DataNotFoundException(); } zwróć dane; } Teraz, w kontrolerze osoby i kontrolerze zamówienia zakupu, nie muszę powtarzać logiki, co zrobić, gdy zasób nie zostanie znaleziony — po prostu zaimplementuj delegata find. (Jest to prosty przykład bez mapowania, dodawania, usuwania lub innych szczegółów różniących zasób od zasobu). public Person Get(string first, string last) { return getResource<Person>(repository => repository.People.Find(first, last)); } publiczne ZamówienieZakupu Get(int id) { return getResource<ZamówienieZakupu>(repozytorium => repository.POs.Find(id)); } Zwróć uwagę, jak powyższe domknięcia zgrabnie radzą sobie z różną liczbą i typami parametrów do znajdowania rzeczy, ale spełniają interfejs zdefiniowany przez delegowaną funkcję find. Czy można to zrobić ze standardowymi interfejsami klas? (I to pytanie nie dotyczy repozytorium. Jest to rozwiązywane za pomocą iniekcji zależności i jest zaimplementowane za pomocą Entity Framework.)


title: Jak mogę zwiększyć wydajność mojego środowiska programistycznego PHP?

text: Chcę rozpocząć domowy projekt dla zwierząt domowych w PHP. Spędziłem trochę czasu w swoim życiu rozwijając w PHP i zawsze czułem, że ciężko jest sprawnie zorganizować środowisko programistyczne. W mojej poprzedniej pracy z PHP używałem komputera stacjonarnego z systemem Windows i serwera linux do rozwoju. Ta konfiguracja miała swoje zalety: łatwo skonfigurować Apache (i jego moduły)/PHP/MySql na linuksie, a w tamtym czasie ta konfiguracja była taka sama jak na serwerze produkcyjnym. Jednak nigdy nie udało mi się pomyślnie skonfigurować połączenia debugowania między moją instalacją Eclipse a X-debug na serwerze. Przenoszenie plików z mojego lokalnego obszaru roboczego na serwer również było bardzo denerwujące (skrypt ftp lub Bazaar przenoszący pliki z repozytorium do katalogu głównego). W przypadku mojej nowej konfiguracji rozważam zainstalowanie wszystkiego na moim lokalnym komputerze. Obawiam się, że spowolni to działanie stacji roboczej (LAMP + Eclipse) i pojawią się problemy ze zgodnością. Co byś polecił? Czy powinienem programować na dwóch osobnych maszynach? Na jednego? Czy masz doświadczenie w korzystaniu z jednej z powyższych konfiguracji w swojej pracy?


title: Używasz domyślnych parametrów dla błędu 404 (PHP z projektem mvc)?

text: Mam wykonane na zamówienie Framework (napisane w PHP). Wszystko działa bardzo dobrze, ale mam pewne wątpliwości co do jednej rzeczy. W tej chwili, gdy użytkownik wywołuje ten adres URL, na przykład: http://host.com/user/edit/12 Co oznacza: * user = userController * edit = editAction() in userController * 12 = traktowane jako param Ale przypuśćmy kontroler 'userController' nie istnieje. Wtedy mógłbym rzucić 404. Ale z drugiej strony adres URL może być również użyty jako parametry dla indexController (który jest domyślnym kontrolerem). Więc w takim przypadku: * controller = indexController * user = może być akcją w indexController, w przeciwnym razie traktowana jako param * edit = traktowana jako param * 12 = traktowana jako param Tak właśnie działa teraz w moim frameworku. Więc w zasadzie nigdy nie wyrzucam 404. Mógłbym oczywiście powiedzieć, że tylko parametry mogą być podane, jeśli nazwa kontrolera jest wyraźnie wymieniona w adresie URL. Więc jeśli chcę, aby powyższy adres URL: http://host.com/user/edit/12 był wywoływany przez indexController, w indexAction. Następnie muszę powiedzieć, jakiego kontrolera i akcji używa w adresie URL. Zatem adres URL powinien wyglądać następująco: http://host.com/index/index/user/edit/12 * index = indexController * index (2.) = metoda akcji * user = traktowany jako param * edit = traktowany jako param * 12 = traktowany jako param W ten sposób, gdy kontroler nie istnieje, nie przekierowuję wszystkiego jako param do kontrolera indeksu i po prostu zgłaszam błąd 404. Teraz moje pytanie brzmi, który z nich jest bardziej preferowany? Czy powinienem zezwolić na konfigurowanie obu opcji w pliku konfiguracyjnym? A może powinienem zawsze używać jednego z nich. Po prostu dlatego, że to jedyny i najlepszy sposób na zrobienie tego?


title: Jakie wady ma framework Java Swing GUI?

text: Używałem Java Swing do niektórych aplikacji desktopowych. Ale nie używałem tak bardzo innych frameworków GUI, więc nie mogę ich porównać. Na pewno jest kilka rzeczy, które lubię w Swingu, a inne nie, ale tak jest z prawie wszystkim. Jakie są największe wady frameworka Java Swing GUI?


title: Jak obliczyć sygnaturę macierzy

text: Znamy kilka metod sygnatur/sum kontrolnych dla tekstu, takich jak md5,sha. Teraz chcę obliczyć sumę kontrolną dla macierzy, aby reprezentować dokładną macierz. Powiedzmy, że dwie macierze o różnych rozmiarach lub o różnych wartościach mają różne sumy kontrolne. A nieco inne macierze (ten sam rozmiar) dają nieco inną sumę kontrolną. Dlatego należy wziąć pod uwagę zarówno układ, jak i wartości. Chociaż najbardziej intuicyjną metodą jest bezpośrednie porównanie dwóch macierzy, czasami niewygodne jest umieszczenie dwóch macierzy w tym samym środowisku. Może powinienem sprawdzić algorytm md5 i dostosować podobną metodę. Po prostu opublikuj to tutaj, aby uzyskać lepsze porady.


title: Czy w przypadku repozytoriów publicznych wymagane jest licencjonowanie?

text: Planuję uruchomić publiczne repozytorium na githubie. W tym repozytorium będę udostępniał kod, który będę zamieszczał na moim blogu. Widziałem wiele repozytoriów bez licencji. Czy wymagane jest posiadanie pliku licencyjnego? Czy nie mogę po prostu powiedzieć „Możesz używać tego kodu w dowolny sposób”? Proszę doradź


title: Do czego nie nadaje się programowanie obiektowe?

text: W książce Martina Fowlera Refaktoryzacja Fowler mówi o tym, że kiedy programiści uczą się czegoś nowego, nie biorą pod uwagę, kiedy jest to nieodpowiednie do pracy: > Dziesięć lat temu tak było z przedmiotami. Jeśli ktoś zapytał mnie, kiedy > nie używać przedmiotów, trudno było odpowiedzieć. [...] Po prostu nie wiedziałem > jakie są te ograniczenia, chociaż wiedziałem jakie są korzyści. Czytając to, przyszło mi do głowy, że nie wiem, jakie są ograniczenia lub potencjalne wady programowania obiektowego. Jakie są ograniczenia programowania obiektowego? Kiedy należy spojrzeć na projekt i pomyśleć „OOP nie jest do tego najlepiej przystosowane”?


title: Czy zajmowanie się przestarzałym kodem pomaga rozwijać się jako programista?

text: Jestem programistą Java z nieco ponad rocznym doświadczeniem, co plasuje mnie gdzieś powyżej juniora, ale jeszcze nie wśród programistów średniego poziomu. Ostatnio zaproponowano mi długoterminowy projekt, który polega na studiowaniu przez 4 miesiące istniejącego kodu aplikacji bankowej, a następnie wprowadzaniu zmian w razie potrzeby. Jako niezbyt doświadczony programista szukam sposobów na rozwój i zastanawiam się, co taki projekt może dać. Czy uważasz, że praca z dużą i prawdopodobnie niezbyt dobrze napisaną aplikacją jest dobrą praktyką dla początkującego?


title: Szkolenie dotyczące wbudowanego systemu Linux

text: Pracowałem ze starym systemem operacyjnym `OS9`(nie mac) i próbowałem skłonić moją organizację do przejścia na wbudowaną platformę `Linux`. Mamy w budżecie pieniądze na szkolenia i myślę, że skorzystam z tego. Drugim impulsem byłby dobry dodatek do CV. Jacy są dobrzy dostawcy/bootcampy dla szkoleń Embedded Linux?


title: Wiele punktów wejściowych w projekcie

text: Moje pytanie dotyczy C++, ale w rzeczywistości pochodzi z Javy. Kiedy programowałem Javę, miałem wiele klas, które wywodziły się z bazowej klasy „Test”. Ich celem było testowanie rzeczy - uruchamianie testów (testy jednostkowe/nie testy jednostkowe). Aby przeprowadzić test, w każdej klasie miałem `publiczną static void main`. Tak więc sprawa uruchomienia takiego testu polegała na kliknięciu uruchom w _Eclipse/Netbeans_ , niezależnie od dobrego IDE. Wiem, że to pytanie może być zależne od IDE, tak naprawdę sprowadza się do plików makefile, ale czy możliwe jest utrzymanie podobnej struktury w IDE C ++? Właściwie moje pytanie brzmi: **jak radzisz sobie z testami?** Czy umieszczasz ogromną główną metodę z kilkoma instrukcjami opartymi na przełącznikach/wyliczeniach, aby uruchamiać testy lub tworzyć różne konfiguracje kompilacji dla każdego testu, czy też masz inne rozwiązanie tego problemu? Wiem, że na to pytanie nie uzyskamy jednoznacznej odpowiedzi, ale jestem ciekawa, jak sobie z tym poradzić, żeby móc wybrać coś dla siebie.


title: Interfejsy użytkownika do zakończenia funkcji C

text: W składni wywołania metod w wielu językach obiektowych obiekt odbiorcy znajduje się na lewo od nazwy metody, np. `jakiśObiekt.jakaśMetoda()`. Jest to przydatne podczas korzystania z IDE z uzupełnianiem kodu/asystentem kodu/Intellisense; gdy użytkownik wpisze wyrażenie wywołania metody, odbiorca został już wpisany, więc IDE może zawęzić wybór metod do zastosowania do tego odbiorcy (przynajmniej w językach statycznie wpisanych). Zastanawiam się, jaki jest interfejs użytkownika do uzupełniania metody/funkcji, jak w językach, w których nazwa metody lub funkcji idzie _przed_ jej odbiorcą i/lub argumentami, np. Lisp czy C? Czy użytkownik musi uruchomić klawisz skrótu, na który IDE odpowiada, pytając o odbiornik i/lub argumenty, a po wpisaniu wartości w IDE pojawia się lista metod lub funkcji, które mają zastosowanie do tej listy?


title: Scrum – jak przenieść częściowo kompletną historię użytkownika do następnego sprintu bez wypaczania zaległości

text: Używamy Scruma i czasami okazuje się, że nie możemy dokończyć User Story w sprincie, w którym została zaplanowana. W prawdziwym stylu Scrum i tak wysyłamy oprogramowanie i rozważamy włączenie User Story do następnego sprintu podczas kolejnej sesji planowania sprintu. Biorąc pod uwagę, że historia użytkownika, którą przenosimy, jest częściowo ukończona, jak prawidłowo ją oszacować w następnej sesji planowania sprintu? Rozważaliśmy: a) Zmniejszenie liczby Punktów Story w celu odzwierciedlenia tylko pracy, która pozostała do ukończenia User Story. Niestety, spowoduje to bałagan w zgłaszaniu Backlogu Produktu. b) Zamknij częściowo ukończoną historię użytkownika i podnieś nową, aby wdrożyć pozostałą część tej funkcji, która będzie miała mniej punktów historii. Wpłynie to na naszą zdolność do retrospektywnego zobaczenia tego, czego nie ukończyliśmy w tym sprincie i wydaje się trochę czasochłonne. c) Nie zawracaj sobie głowy ani a, ani b i kontynuuj zgadywanie podczas planowania sprintu, mówiąc na przykład: „Cóż, User Story może mieć X punktów historii, ale wiem, że jest ukończona w 95%, więc jestem pewna, że możemy ją dopasować”.


title: Wsparcie Netbeans dla rozpórek 2?

text: Właśnie zacząłem uczyć się rozpórek 2. Kupiłem książkę o nazwie Struts 2 w akcji. Ale chcę używać IDE do tworzenia aplikacji Struts 2. Zasadniczo używam netbeans. Proszę powiedz mi, jak mogę tworzyć aplikacje przy użyciu netbeans. Ponadto byłoby wspaniale, gdyby ktoś mógł wskazać kilka samouczków na ten sam temat. pozdrawiam P.S. Nie używałem zaćmienia. Czy wskazane jest przestawienie się na niego dla rozpórek 2, (jeśli w tym przypadku jest lepszy niż netbeans)?


title: Pojedyncza instrukcja bez nawiasów ifs i scalanie kodu

text: Widziałem, jak scalanie kodu jest używane jako argument do usztywniania nawet pojedynczej instrukcji ifs. Na przykład: if (warunek) { zrób coś; } Niestety nie przychodzi mi do głowy zmiana, która zepsułaby wersję bez nawiasów podczas automatycznego scalania kodu. Czy ktoś mógłby zamieścić przykład?


Mam dość słuchania, jak ludzie zalecają używanie tylko jednego wątku na procesor, podczas gdy wiele programów używa do 100 na proces! weźmy na przykład kilka popularnych programów vb.net ide używa około 25 wątków, gdy nie debuguje System używa około 100 chrome używa około 19 Avira używa więcej niż około 50 Za każdym razem, gdy wysyłam pytanie związane z wątkiem, prawie za każdym razem przypomina mi się, że nie powinienem używaj więcej niż jednego wątku na procesor, a wszystkie wymienione powyżej programy rujnują mój system z jednym procesorem. Na czym polega prawidłowe wykorzystanie wątków w programowaniu? Proszę o ogólny komentarz, ale wolałbym .NET framework dzięki


title: Czy projektant Glade GUI to dobra opcja dla początkującego?

text: Jestem studentem informatyki i mam już podstawowe doświadczenie w programowaniu w Pythonie 2.x, 3.x, C++ i HTML. Nigdy nie stworzyłem programu z GUI. Właśnie zaprogramowałem gry, skrypty/wtyczki i aplikacje konsolowe. Po raz pierwszy deweloperom Ubuntu zaleca się korzystanie z projektanta GUI Glade, który tworzy GUI dla zestawu narzędzi GTK. Zalecane są również do programowania w frameworku Qt. Zamierzam stworzyć aplikację wieloplatformową (Linux/Windows/Android/iOS/OSX). Biorąc pod uwagę moje doświadczenie, czy Glade jest dla mnie rozsądną opcją do stworzenia aplikacji wieloplatformowej, szczególnie w mojej pierwszej aplikacji, która wymaga GUI?


title: Statyczny DataTable lub DataSet w klasie - zły pomysł?

text: Mam kilka wystąpień klasy. Każda instancja przechowuje dane we wspólnej bazie danych. Pomyślałem więc: „Uczynię pole `DataTable` jako statyczne, w ten sposób każda instancja może po prostu dodawać/modyfikować wiersze do własnego pola `table`, ale wszystkie dane będą w rzeczywistości w jednym miejscu!” Jednak najwyraźniej złym pomysłem jest używanie pól statycznych, _zwłaszcza_ jeśli są to bazy danych: Nie używaj "Static" w C#? Czy to zły pomysł? Czy później napotkam problemy, jeśli go użyję? Jest to mały projekt, więc nie mogę zaakceptować żadnych testów jako kompromisu, jeśli to jedyna wada. Zaletą używania statycznej bazy danych jest to, że może istnieć wiele obiektów typu „MojaKlasa”, ale tylko jedna tabela, z którą wszystkie się komunikują, więc pole statyczne wydaje się być implementacją dokładnie tego, przy zachowaniu zwięzłej składni. Nie rozumiem, dlaczego nie miałbym używać pola statycznego (chociaż tak naprawdę nie wiedziałbym), ale gdybym musiał, najlepszą alternatywą, o jakiej mogę pomyśleć, jest utworzenie jednego „DataTable” i przekazanie do niego referencji, gdy tworząc każdą instancję `MyClass`, być może jako parametr konstruktora. Ale czy to naprawdę poprawa? Wydaje się mniej intuicyjne niż pole statyczne.


title: Korzystanie z interfejsów w celu ułatwienia szybkiego tworzenia/prototypów

text: Ostatnio zacząłem umieszczać prawie wszystkie moje struktury danych w interfejsach, a także wiele klas, które zawierają fragmenty kodu logicznego, w zależności od tego, ile są one pracochłonne. Uważam, że to znacznie ułatwia tworzenie aplikacji, ponieważ mogę łatwo zamienić części mojego kodu, gdy nie działają tak dobrze, jak zamierzone, bez zmiany reszty aplikacji i zamienić je z powrotem, gdy je poprawię lub jeśli na razie potrzebujesz czegoś prostszego. Zastanawiałem się, czy mam tu zły nawyk. Czy używam tutaj antywzorca, czy mogę to zrobić?


title: jak możemy mieć osobę do przydzielania i śledzenia zadań w zwinnym rozwoju?

text: Rozumiem, że zespół Agile powinien być samozorganizowany i samodzielny, ale czy istnieje przepis, że mogę mieć kogoś, kto przydzieli zadania programistom i zapewni, że wszystkie historyjki użytkowników zostaną ukończone na czas? Na przykład, jeśli w zwinnym zespole są dwie osoby, które nie są zmotywowane do podejmowania zadań i będą pracować tylko wtedy, gdy zostanie im przydzielone zadanie z terminem, jak możemy sobie z tym poradzić w Agile? Problem, z którym się borykam, polega na tym, że nikt nie ustala terminów zadań, a zespół nie wywiązuje się z ostatnich dwóch sprintów. Będzie lepiej, jeśli będziemy mieć kogoś, kto potrafi ustalić terminy. CZY istnieje przepis na to w Agile?


title: Automatyczne tworzenie obiektów na podstawie danych wejściowych użytkownika

text: Pracuję nad aplikacją wiersza poleceń, która uruchamia symulacje. Musi być w dużym stopniu konfigurowalny; użytkownik powinien być w stanie podać bardzo dużą liczbę (100+) parametrów, niektóre obowiązkowe, a niektóre opcjonalne. Oczywiście parametry te będą wykorzystywane przez różne klasy w aplikacji. Widzę dwa podejścia, których mogę użyć; który z nich jest lepszym projektem na dłuższą metę? **Podejście 1** Niech (tekstowy) plik wejściowy bezpośrednio kontroluje tworzenie obiektów w aplikacji. Na przykład użytkownik wprowadziłby następujące dane wejściowe: root=Czas symulacji=50 gatunek_lokalny=Siła świadomości=3.5 inteligencja=7.1 Gatunki_inwazyjne=Siła pierwotna=5.1 Towarzyskość=2.6 Aplikacja rekurencyjnie tworzyłaby wtedy obiekty klasy określonej na prawej stronie znak równości, przekazując konstruktorowi klasy argumenty podane w odpowiedniej gałęzi podrzędnej pliku wejściowego, jeśli takie istnieją. Używam Pythona, który obsługuje argumenty słów kluczowych i domyślne wartości argumentów, gdy nie podano argumentu, ale mam nadzieję, że pytanie nie jest zbyt specyficzne dla języka. Na przykład wiersz 1 powie aplikacji, aby utworzyła obiekt `class Simulation` z trzema argumentami konstruktora. Pierwszym argumentem konstruktora jest `time=50`. Drugi argument to instancja `class Sentient`, która jest tworzona przez przekazanie argumentów konstruktora `Simulation` `siła=3.5`, `intelligence=7.1`. Trzeci argument to instancja `class Primitive`, która jest tworzona za pomocą argumentów konstruktora `siła=5.1`, `socjalność=2.6`. Całe tworzenie obiektu odbywa się automatycznie, za pomocą zaledwie kilku linijek (rekurencyjnego) kodu. Obiekt najwyższego poziomu (w tym przypadku instancja „Symulacja”) zostanie przekazany do warstwy wizualizacji. **Podejście 2** Plik wejściowy nadal wygląda tak samo. Jednak klasy aplikacji mają teraz pełną kontrolę nad tym, jak interpretują dane wprowadzane przez użytkownika. Wartości lhs i rhs mogą, ale nie muszą odpowiadać parametrom i klasom słów kluczowych. Na przykład powyższe dane wejściowe mogą spowodować, że aplikacja utworzy instancję `class InvasionSimulation` z argumentami `strength_local=3.5`, `intelligence_local=7.1`, `strength_invading=5.1`, `soociability_invading=2.6`, a następnie wywoła jej metodę `set_runtime(time=50)`, przed przekazaniem obiektu do warstwy wizualizacyjnej. * * * Jedną z oczywistych zalet podejścia 2 jest to, że dane wejściowe użytkownika mogą pozostać stabilne, nawet gdy aplikacja została całkowicie przeprojektowana wewnętrznie. Ale myślę, że nie ma nic złego w wyznaczaniu podzbioru klas jako „publicznego API”, a tym samym zapewnianiu, że nie zmieni się on w przyszłości, prawda? Z drugiej strony, jeśli aplikacja wewnętrznie podąża za czymś podobnym do podejścia 1, wydaje się, że podejście 2 wymaga dodania dużej ilości zbędnego kodu: zamiast automatycznie interpretować dane wejściowe użytkownika, musimy teraz zrobić to „ręcznie” dla każdego klasa. Wszelkie dodatkowe względy byłyby bardzo mile widziane. Czy są jakieś nazwy dla tych podejść, których mogę szukać?


title: Co zrobić, gdy projekt jest zbyt trudny do dalszego rozwoju?

text: Czy jako programista możesz powiedzieć kierownikowi projektu, że aplikacja _nie działa_? Lub, jeśli jesteś kierownikiem projektu, w jaki sposób miałbyś to przedstawić, aby zostać zmuszonym? Tu nie chodzi o to, „jak pracować nad kiepskim projektem”, ale o to, że nie możesz. Mogę podać przykład sytuacji, jeśli ktoś uważa, że jest to ważne, ale staram się unikać proponowanych rozwiązań „brnięcia”.


title: Czy jest sens pisania losowego testera kodu, który zajmuje się indukcyjnymi strukturami danych?

text: Załóżmy, że piszemy prosty parser JSON i w pełni omówiliśmy kod testami jednostkowymi: * może analizować prymitywy `"0", "123", "-456", """', ""asd" ', prawda, fałsz` * potrafi parsować tablice `"[]", "[1, 2, 3]"` * potrafi parsować zagnieżdżone tablice `"[[]]"` * potrafi parsować obiekty `"{} ", '{ "a": 1, "b": 2 }'` * potrafi parsować zagnieżdżone obiekty `'{ "a": {} }'` Każdy możliwy JSON może być albo prymitywem albo tablicą/obiektem przechowującym inne prymitywy/tablice/obiekty - to rozumiem przez indukcyjną strukturę danych (czy "rekursywny" jest lepszym terminem?). Wydaje mi się, że każde parsowanie JSON można zredukować do tych kilku przypadków i jeśli parser przejdzie te testy, to jest w pełni poprawny (chyba że został wyraźnie określony na stałe, aby przerwać, gdy próbujesz analizować specjalne liczby). Czy jest jeszcze jakiś sens w tworzeniu losowego testera, który generuje losowy ciąg JSON w nadziei, że któryś z nich złamie ten parser? Czy ten przypadkowy tester znalazłby coś interesującego? PS Wybrałem JSON właśnie jako przykład indukcyjnej struktury danych; Nie interesuje mnie pisanie parsera JSON.


title: Czy mogę być zmuszony do kontynuowania projektu, który wykracza poza moje obowiązki zawodowe?

text: Jestem DBA / Report Writer w obsłudze klienta dla firmy programistycznej. W wolnym czasie pisałem raportową aplikację webową z raportami na żywo. Tylko strona z ok. 2001 r. w IE była przerażająca. Moja aplikacja w końcu odniosła ogromny sukces wśród klientów, a następnie została połknięta przez dev. Myślę, że założono, że zawiodę i powiedziano mi, że nigdy nie będzie częścią dev; zawsze będzie to projekt wsparcia. Oczywiście po takim sukcesie tego chcieli. Przejęli kontrolę, zażądali ode mnie zaprzestania prac nad ulepszeniami i zaczęli dawać mi zadania „ustabilizowania”. Przeszedłem od architekta / projektanta / jedynego programisty do kodowania małpy. Mam już zero danych wejściowych. Fajnie było robić, ale ta zabawa opuściła budynek. Chcę dalej nad tym pracować, ale po swojemu. Mój sposób jest taki, dlaczego oni to mają w pierwszej kolejności, więc to musi działać. Teraz utknąłem w AGILE pętli. Nie widzę, żeby oddawali kontrolę, więc chcę przestać. Nie jestem programistą ani nawet nie pracuję w tym dziale. Czy mogą mnie zmusić do kontynuowania?


title: Algorytm Domino Solitaire

text: **Problem Statement -** ![Problem Statement](http://i.stack.imgur.com/F6HJC.png) Biorąc pod uwagę siatkę liczb 2xN, zadaniem jest znalezienie najbardziej opłacalnej kombinacji płytek (każda płytka obejmuje Komórki 2x1; pionowo lub poziomo) pokrywające wszystkie płytki. Myślałem o podejściu do tego w chciwy sposób, umieszczając w kolejce maksimum możliwe dla dowolnej komórki, ale ma tę wadę, że wybór o niskim zysku w i, może przynieść większy zysk w i + n kafelkach. Więc jakie powinno być podejście? EDIT - Zakres danych testowych - N<=105 Źródło - INOI 2008 Q Paper **UPDATE** \- Wypracowanie wiarygodności dynamicznego podejścia programistycznego. **UPDATE 2** \- Opracowaliśmy odpowiedź za pomocą DP.


title: C++ Design: programowanie funkcjonalne a OOP

text: **Pytanie projektowe** Ostatnio robię coraz więcej FP w C++, głównie w formie szablonów funkcji i lambd oraz mocno przeciążając pojedynczą nazwę funkcji. Bardzo lubię FP do niektórych dobrze zdefiniowanych operacji, ale zauważyłem również, że podobnie jak w przypadku OOP, można łatwo wpaść w anty-wzorce kodu spaghetti, jeśli nie jest się ostrożnym (np. zależności kołowe, co jest większym problemem dla kodu stanowego). _Moje pytanie brzmi, kiedy zastanawiam się nad dodaniem nowej funkcjonalności, w jaki sposób decydujesz między używaniem paradygmatu FP a paradygmatu OOP?_ Wyczuwam, że może to mieć związek z identyfikacją **niezmienników** w problemie lub w projekt, ale nie jestem pewien. Na przykład bez modelu OOP/uproszczenia rzeczywistego świata może nie być od razu oczywiste, czym jest klasa Dog lub Cat (jakie są jej stany? jakie są jej metody?). Otoh, z FP POV, funkcja Eat() po prostu pozwala zwierzęciu zamienić jedzenie w kupę i energię. Trudniej wyobrazić sobie Eat() jako coś innego (przynajmniej dla mnie). Bardziej szukam odpowiedzi w języku C++, ale to pytanie może dotyczyć dowolnego podmodułu w dowolnym języku, który obsługuje wiele paradygmatów.


title: Wykresy zbiorcze w ramach Webdesign

text: Raczej proste pytanie tutaj, w odniesieniu do projektowania stron internetowych i związanej z tym papierkowej roboty (czego jestem pewien, że wiele osób / firm tak naprawdę nie robi). Czy byłby jakiś powód do korzystania z wykresu skumulowanego? W szczególności wykres skumulowanych zasobów, chociaż nie jestem pewien, jakie mogą być zasoby! Co więcej, jest kilka pomysłów, o których myślałem, niepewny, czy są słuszne, czy nie, zwróciłem się do ludzi, którzy programowali stronę internetową! tl;dr : Jeśli to możliwe, po co mogę sporządzić zbiorczy wykres zasobów w odniesieniu do strony internetowej?


title: W jakich sytuacjach współzależne moduły mają przewagę?

text: Wcześniej dzisiaj stworzyłem dwie wzajemnie zależne, niejawnie połączone biblioteki DLL, aby sprawdzić, czy jest to możliwe: http://i.imgur.com/GMACpnC.jpg Jestem po prostu ciekawy; ogólnie, jakie korzyści może mieć ten rodzaj wzajemnej zależności?


title: Czy to pytanie na rozmowie kwalifikacyjnej jest prawdziwe, czy jest to test umiejętności komunikacyjnych?

text: Udzieliłem w życiu około 50 wywiadów. Wiele z nich zrobiłem tylko po to, żeby zdobyć doświadczenie i robię to dalej. Pytanie, które wciąż słyszę, brzmi: > Czy jesteś bardziej programistą front-end czy back-end? Programuję głównie dla sieci, ale 2-3 lata temu byłem programistą bazodanowym, a nawet napisałem aplikację desktopową. I jeśli dobrze pamiętam, słyszałem to pytanie podczas wywiadów, które nie miały nic wspólnego z siecią. Nie pamiętam dokładnie, na co odpowiadałem. IIRC, zwykle powiedziałbym: ciężko powiedzieć i że zaprogramowałem aplikację X, Y i Z oraz W. Ostatnim razem zacząłem odpowiadać, a potem powiedziałem _"Czekaj, jak **ty** definiujesz backend?" _ Czy to pytanie, czy jestem lepszy w programowaniu frontendowym czy backendowym, ma w dzisiejszych czasach sens? * strona ma frontend, prawda. Ale jego backend to zazwyczaj strona administracyjna. Jest między nimi niewielka różnica. * jeśli piszę sterownik DB dla witryny opartej na Django, czy to naprawdę jest front-end? Pamiętam, że na pewnym wywiadzie zapytałem, co to są frontendy i backendy, i otrzymałem odpowiedź, że frontend jest dla klientów i jest często używany lub odwiedzany, a backend to coś do użytku wewnętrznego. Cóż, to nie robi wielkiej różnicy. Rzeczy muszą działać i działać wydajnie po obu stronach. Sam też przeprowadziłem kilkanaście wywiadów i nigdy nie zadałem tego pytania, bo to nie ma sensu i nie przychodzi mi do głowy. Czy to tylko test, czy wskakuję do obręczy i zaczynam mówić, czy też próbuję wyjaśnić pytanie?


title: Czy Ant nadal znajduje się w "głównym nurcie" kompilacji Java?

text: Powoli zastępowaliśmy pliki poleceń wsadowych (windows .bat), które po prostu niszczyły klasy skompilowane w IDE programisty, bardziej rozbudowanymi kompilacjami Ant (np. pobieranie z CVS, czysta kompilacja, jar, archiwum, e-mail itp.). Spędziłem dużo czasu na nauce (i debugowaniu problemów) z Antem, więc najwygodniej jest używać go do tych zadań. Ale zastanawiam się, czy Ant jest nadal w tak szerokim użyciu, jak wtedy, gdy zacząłem się uczyć, czy też „świat przeniósł się” na coś nowszego (i może ładniejszego). (Zacząłem widzieć więcej dystrybuowanych materiałów do budowania Maven, których nigdy nie używałem, na przykład.) Praktyczne znaczenie tego pytania to **czy zmuszam nowych programistów do nauki Ant** , czy też powinni być nauczyć się czegoś innego dla kompilacji? Nigdy nie jestem na bieżąco z trendami, więc byłoby wspaniale usłyszeć od innych programistów Java, które ich zdaniem jest najlepszym narzędziem do kompilacji i czego ich zdaniem nowi programiści powinni się uczyć.


title: Zawrzeć wszystkie pliki php w jednym pliku i dołączyć ten plik do każdej strony, jeśli używamy hiphopu?

text: Rozumiem, że w normalnym php, jeśli dołączamy plik, łączymy jego źródło w skrypcie i przetworzenie/przetworzenie strony zajmie więcej czasu, ale jeśli używamy HipHop, nie powinno być w porządku po prostu utworzyć jeden plik php i dołączyć do niego każdy plik (zawierający jakąś klasę), a każda strona, która potrzebuje tych klas (każda w osobnym pliku), może zawierać tylko jeden plik php? Czy byłoby to w porządku w obecności HipHop?


title: Czy dobrym pomysłem jest napisanie systemu operacyjnego w języku skryptowym?

text: Czy to dobry pomysł, aby stworzyć system operacyjny napisany w języku skryptowym? Na przykład, co powiesz na stworzenie systemu operacyjnego za pomocą Pythona?


title: Pomóż mi stworzyć listę najlepszych podejść dla nowych programistów C i C++

text: Niespecyficzne praktyki pisania kodu. Proszę również dołączyć uzasadnienie. Mój start: * użyj `GCC` lub `Clang` * gcc, ponieważ jest niekwestionowany pod względem ilości statycznego sprawdzania, jakie może wykonać (zarówno w stosunku do standardów, jak i ogólnych błędów) * clang, ponieważ ma takie ładne i znaczące komunikaty o błędach * podczas kompilacji C kod używający GCC użyj `-Wall -Wextra -Wwrite-strings -Werror` * w 99,99% ostrzeżenie jest poprawnym błędem * podczas kompilacji kodu C++ przy użyciu GCC użyj `-Wall -Wextra -Weffc++ -Werror` * możesz pominąć `-Weffc++` (ponieważ może to być mylące) * zawsze koduj według standardu C (C89, C99), C++ (C++98, C++0x) * podczas gdy kompilatory się zmieniają, standardy nie, kodowanie według standardu daje przynajmniej pewien poziom pewności, że kod skompiluje się również w następnej wersji kompilatora lub nawet na innym kompilatorze/platformie * upewnij się, że kompilator porównuje Twój kod ze standardem (`-std=c99 -pedantic` dla C99, `-std=ansi -pedantic` dla C++98 w GCC) * powoduje automatyczne sprawdzanie zawsze dobre * użyj `valgrind` lub podobnego narzędzia do sprawdzenia na błędy uruchomieniowe (pamięć, wątki, ...) * bezpłatne łapanie błędów * nigdy nie powielaj funkcjonalności standardowych bibliotek (jeśli jest błąd w twoim kompilatorze, zrób tymczasową łatkę, wrapper, ...) * nie ma szans że Twój kod będzie lepszy niż kod utrzymywany przez setki ludzi i testowany przez dziesiątki tysięcy * upewnij się, że rzeczywiście naprawiłeś wszystkie błędy zgłaszane przez narzędzia automatyczne (GCC, valgrind) * błędy mogą nie powodować awarii programu teraz, ale * nigdy nie zastosują się do zaleceń, które zawierają „nigdy nie używaj funkcji X” * takie zalecenia są zwykle nieaktualne, przesadzone lub nadmiernie uproszczone


title: Jak ponownie rozpocząć karierę w tworzeniu oprogramowania po 7-letniej przerwie?

text: Jestem absolwentem elektroniki i pracowałem w dziedzinie elektroniki analogowej przez około 4 lata, ale teraz mam przerwę około 7 lat w mojej karierze. Jakie mam opcje, aby ponownie rozpocząć karierę? Czy ktoś może zasugerować kursy przypominające, aby wejść w dziedzinę oprogramowania?


title: Co powinno znaleźć się na liście kontrolnej „Dzień rozpoczęcia transmisji na żywo”?

text: Poza szczegółami technicznymi, co powinno znaleźć się na liście kontrolnej przed rozpoczęciem programu? **Czy są rzeczy, które możesz zrobić w ostatniej chwili, aby bezproblemowo wprowadzić oprogramowanie do produkcji?** (zakładając, że podczas tworzenia używałeś zasad dźwięku i testowałeś średnią ilość) Więcej testów? Dyskusja z klientem? Optymalizacje w ostatniej chwili?


title: Czy automatyczne generowanie kodu testów jednostkowych jest wykonalne i przydatne?

text: Wcześniej wpadłem na pomysł oparty na konkretnym rzeczywistym przypadku użycia, który chciałbym sprawdzić pod kątem wykonalności i użyteczności. To pytanie będzie zawierało sporą część kodu Java, ale można je zastosować do wszystkich języków działających wewnątrz maszyny wirtualnej, a może nawet poza nią. Chociaż istnieje prawdziwy kod, nie używa on niczego specyficznego dla języka, więc czytaj go głównie jako pseudokod. **Pomysł** Spraw, aby testowanie jednostkowe było mniej uciążliwe, dodając kilka sposobów na automatyczne generowanie kodu na podstawie interakcji **człowieka** z bazą kodu. Rozumiem, że jest to sprzeczne z zasadą TDD, ale nie sądzę, aby ktokolwiek kiedykolwiek udowodnił, że robienie TDD jest lepsze niż tworzenie kodu, a zaraz potem testy. Może to być nawet przystosowane do TDD, ale to nie jest mój obecny cel. Aby pokazać, w jaki sposób ma być używany, skopiuję tutaj jedną z moich klas, dla której muszę wykonać testy jednostkowe. public class PutMonsterOnFieldAction implementuje PlayerAction { private final int handCardIndex; prywatne końcowe int fieldMonsterIndex; public PutMonsterOnFieldAction(final int handCardIndex, final int fieldMonsterIndex) { this.handCardIndex = Arguments.requirePositiveOrZero(handCardIndex, "handCardIndex"); this.fieldMonsterIndex = Arguments.requirePositiveOrZero(fieldMonsterIndex, "fieldCardIndex"); } @Override public boolean isActionAllowed(final Player player) { Objects.requireNonNull(player, "player"); Ręka ręka = player.getHand(); Pole pola = player.getField(); if (handCardIndex >= hand.getCapacity()) { return false; } if (fieldMonsterIndex >= field.getMonsterCapacity()) { return false; } if (field.hasMonster(fieldMonsterIndex)) { return false; } if (!(hand.get(handCardIndex) instanceof MonsterCard)) { return false; } zwróć prawdę; } @Override public void performAction(final Player player) { Objects.requireNonNull(player); if (!isActionAllowed(player)) { wyrzuć nowe PlayerActionNotAllowedException(); } Ręka ręka = player.getHand(); Pole pola = player.getField(); field.setMonster(fieldMonsterIndex, (MonsterCard)hand.play(handCardIndex)); } } Możemy zaobserwować potrzebę następujących testów: * Test konstruktora z poprawnymi danymi wejściowymi * Test konstruktorów z nieprawidłowymi danymi wejściowymi * `isActionAllowed` test z poprawnymi danymi wejściowymi * `isActionAllowed` test z nieprawidłowymi danymi wejściowymi * `performAction` test z poprawnymi danymi wejściowymi * ` Test performAction` z nieprawidłowymi danymi wejściowymi Mój pomysł skupia się głównie na teście `isActionAllowed` z nieprawidłowymi danymi wejściowymi. Pisanie tych testów nie jest zabawne, musisz zapewnić szereg warunków i sprawdzić, czy naprawdę zwraca `false`, można to rozszerzyć do `performAction`, gdzie w takim przypadku należy rzucić wyjątek. **Celem mojego pomysłu** jest wygenerowanie tych testów, poprzez wskazanie (miejmy nadzieję, poprzez GUI IDE), że chcesz generować testy oparte na określonej gałęzi. **Implementacja na przykładzie** 1. Użytkownik klika „Wygeneruj kod dla gałęzi `if (handCardIndex >= hand.getCapacity())`”. 2. Teraz narzędzie musi znaleźć przypadek, w którym to się utrzyma. (Nie dodałem odpowiedniego kodu, ponieważ może on ostatecznie zaśmiecać post) 3. Aby unieważnić gałąź, narzędzie musi znaleźć `handCardIndex` i `hand.getCapacity()` tak, aby warunek `>=` był spełniony . 4. Musi skonstruować `Player` z `Ręką`, która ma pojemność co najmniej 1. 5. Zauważa, że `pojemność` _prywatny int_ `Ręki` musi wynosić co najmniej 1. 6. Przeszukuje aby dowiedzieć się, jak ustawić ją na 1. Na szczęście znajduje konstruktor, który przyjmuje `pojemność` jako argument. Używa do tego 1. 7. Aby pomyślnie skonstruować instancję `Player'a, należy wykonać jeszcze trochę pracy, w tym tworzenie obiektów z ograniczeniami, które można zobaczyć, sprawdzając kod źródłowy. 8. Znalazł „rękę” o najmniejszej możliwej pojemności i jest w stanie ją skonstruować. 9. Teraz, aby unieważnić test, należy ustawić `handCardIndex = 1`. 10. Konstruuje test i stwierdza, że jest on fałszywy (zwracana wartość gałęzi) **Co narzędzie musi działać?** Do poprawnego działania będzie potrzebować możliwości skanowania całego kodu źródłowego ( łącznie z kodem JDK), aby poznać wszystkie ograniczenia. Opcjonalnie można to zrobić za pomocą javadoc, ale nie zawsze jest to używane do wskazania wszystkich ograniczeń. Może również wykonywać _niektóre_ metody prób i błędów, ale praktycznie zatrzymuje się, jeśli nie możesz dołączyć kodu źródłowego do skompilowanych klas. Następnie potrzebna jest podstawowa wiedza na temat typów _prymitywnych_, w tym tablic. I musi być w stanie zbudować jakąś formę "drzewa modyfikacji". Narzędzie wie, że musi zmienić określoną zmienną na inną wartość, aby uzyskać poprawny przypadek testowy. W związku z tym będzie musiał wymienić wszystkie możliwe sposoby jego zmiany, oczywiście bez użycia refleksji. To, czego to narzędzie nie zastąpi, to konieczność tworzenia dostosowanych testów jednostkowych, które testują wszystkie rodzaje warunków, w których dana metoda faktycznie działa. Służy wyłącznie do testowania metod, gdy unieważniają one ograniczenia. **Moje pytania** : * Czy stworzenie takiego narzędzia jest _wykonalne_? Czy to kiedykolwiek zadziała, czy są jakieś oczywiste problemy? * Czy takie narzędzie byłoby _użyteczne_? Czy w ogóle przydatne jest automatyczne generowanie tych przypadków testowych? Czy można go rozszerzyć, aby robić jeszcze bardziej przydatne rzeczy? * Czy przypadkiem taki projekt już istnieje i czy wymyśliłbym koło na nowo? Jeśli nie okaże się to przydatne, ale nadal jest możliwe do zrobienia, nadal uważam to za zabawę. Jeśli uzna się to za przydatne, _mogę_ zrobić dla niego projekt open source w zależności od czasu. Dla osób szukających dodatkowych informacji na temat używanych klas `Player` i `Hand` w moim przykładzie, proszę zapoznać się z tym repozytorium. W chwili pisania tego tekstu `PutMonsterOnFieldAction` nie został jeszcze przesłany do repozytorium, ale zostanie to zrobione, gdy skończę z testami jednostkowymi.


title: Jakie są kroki do grupowania powiązanych klas w pakiety?

text: Jakie kroki należy podjąć, aby pogrupować powiązane klasy w pakiety w Javie? W moim przypadku mam około kilku plików .java, które chciałbym pogrupować w 3 pakiety według wzorca MVC. Jeden pakiet dla klas Model, jeden pakiet dla klas View i jeden pakiet dla klas Controller. Zidentyfikowałem, które należą do jakiego pakietu, ale nie jestem pewien następnego kroku. Chcę wiedzieć, jak rozdzielić je na pakiety, czy zrobić 3 foldery i umieścić pliki .java w folderze, który reprezentuje pakiet, do którego należą?


title: Jak testować modele jednostkowe w aplikacji MVC/MVR?

text: Tworzę aplikację sieci web node.js i próbuję to zrobić po raz pierwszy w sposób oparty na testach. Do testowania używam nodeunit, który według mnie pozwala mi pisać testy szybko i bezboleśnie. W tej konkretnej aplikacji ciężkie zadanie polega przede wszystkim na tłumaczeniu danych SQL na złożony obiekt JavaScript i udostępnianiu ich do front-endu za pośrednictwem json. Podobnie aplikacja poświęca również dużo czasu na weryfikację kodu i tłumaczenie złożonych, wielowymiarowych obiektów JavaScript, które otrzymuje z interfejsu użytkownika na wiersze SQL. Dlatego użyłem grubego projektu modelu dla aplikacji — większość prawdziwego kodu znajduje się w modelach, w których zachodzi translacja danych. Jakie jest najlepsze podejście do testowania takich modeli za pomocą testów jednostkowych? Mam na myśli w szczególności metody, które tworzą obiekty javascript z wierszy SQL i podają je do front-endu. W tej chwili zajmuję się wykonywaniem poszczególnych żądań moich modeli z testami jednostkowymi i sprawdzaniem zwróconych danych dla wszystkich pól, które powinny tam być. Mam jednak podejrzenie, że nie jest to najsolidniejszy rodzaj testów, jaki mógłbym przeprowadzić. Mój obecny projekt testowania oznacza również, że muszę spakować kod mojej aplikacji z pewnymi fikcyjnymi danymi, aby moje testy mogły przewidywać rodzaj danych, które aplikacja _powinna_ zwracać po uruchomieniu testów. ## ZAKTUALIZOWANE PYTANIE: Konkretne pytanie: ### Czy ma sens wstrzykiwanie warstwy testowej między mój model a bazę danych? A może lepiej pozwolić modelom pracować na prawdziwej bazie danych z wstawionymi do niej predefiniowanymi danymi testowymi? Druga opcja, którą sobie wyobrażam, prawdopodobnie spowoduje dokładniejsze testowanie, ale pierwszy model wydaje się bardziej wszechstronny pod względem szczegółowości i sprawia, że testowanie i rozwój są bardziej przenośne (nie jest wymagane db)


title: Dlaczego niezbędne, mutowalne dane pochodne muszą mieć funkcję odwrotną?

text: Czytałem artykuł Out of the Tar Pit autorstwa Bena Moseleya i Petera Marksa, kiedy natknąłem się na następującą sekcję na stronie 25 dotyczącą istotnych mutowalnych danych pochodnych: > ### Essential Derived Data — Mutable > > Tak jak w przypadku niemutowalnych istotnych danych pochodnych , można to wykluczyć (a dane > ponownie uzyskać na żądanie), a zatem odpowiada _stanowi przypadkowemu_. > > Zmienność danych pochodnych ma sens tylko wtedy, gdy funkcja (logika) użyta > do wyprowadzenia danych ma odwrotność (w przeciwnym razie — biorąc pod uwagę jej zmienność — danych > nie można na bieżąco uważać za _pochodne_ i są one > efektywnie _dane wejściowe) . Odwrotność często występuje, gdy dane pochodne > reprezentują proste restrukturyzacje danych wejściowych. W tej sytuacji > modyfikacje danych można po prostu traktować identycznie jak > odpowiadające modyfikacje istniejącego _stanu podstawowego_. Nie rozumiem, dlaczego niezbędne mutowalne dane pochodne muszą mieć funkcję odwrotną. Rozważmy na przykład następujący kod JavaScript: inputbox.onchange = function () { outputbox.value = md5(inputbox.value); }; Tutaj `inputbox.value` to _input_ do systemu, a `outputbox.value` to podstawowe zmienne pochodne danych. Pochodzi z `inputbox.value` za pomocą funkcji `md5`. Jednak funkcja `md5` nie ma odwrotności. Niemniej jednak `inputbox.value` jest nadal niezbędny, zmienny i pochodny. Więc co właściwie mają na myśli autorzy, gdy mówią, że „zmienność danych pochodnych ma sens tylko wtedy, gdy funkcja (logika) użyta do wyprowadzenia danych ma odwrotność (w przeciwnym razie — biorąc pod uwagę jej zmienność — danych nie można na bieżąco uważać za _pochodne_ , i faktycznie jest to _input_ )"? Czy masz jakieś przykłady, aby wyjaśnić ich punkt widzenia?


title: Jak nauczyć się Pythona od zera do tworzenia stron internetowych?

text: Szukam nauki Pythona do tworzenia stron internetowych. Zakładając, że mam już podstawowe doświadczenie w tworzeniu stron internetowych w Javie (JSP/Servlets), znam już projektowanie stron internetowych (HTML, CSS, JS), podstawowe koncepcje programowania i że jestem zupełnie nowy w Pythonie, jak mam się do tego zabrać uczyć się Pythona w ustrukturyzowany sposób, który ostatecznie doprowadzi mnie do tworzenia stron internetowych w Pythonie i Django? Nie spieszy mi się z tworzeniem aplikacji internetowych w Pythonie, więc naprawdę chcę się tego dokładnie nauczyć, aby nie pozostawić żadnych luk w mojej wiedzy na temat technologii związanych z tworzeniem stron internetowych w Pythonie. Czy są jakieś książki, zasoby lub techniki, które pomogą mi w moich staraniach? W jakiej kolejności mam je zrobić/przeczytać? **AKTUALIZACJA:** Kiedy mówię, że uczenie się w sposób ustrukturyzowany, mam na myśli rozpoczęcie od podstaw, a następnie naukę zaawansowanych rzeczy bez pozostawiania niektórych ważnych szczegółów/funkcji, które ma do zaoferowania Python. Chcę wiedzieć, jak zastosować w Pythonie to, co już znam w programowaniu.


title: Co obejmuje Przegląd architektury specyfikacji projektu?

text: Zaprojektowałem system zarządzania dla praktyki medycznej i piszę specyfikację projektu i jestem trochę zbity z tropu, co napisać dla sekcji. Prosi mnie o pisanie o składnikach systemu, ale jestem zakłopotany. Czym dokładnie są komponenty w systemie? Czy jest to ogólnie uważane za cechy, które posiada system, czy też oznacza to coś zupełnie innego?


title: Co tak naprawdę oznacza „opiniowane oprogramowanie”?

text: Widziałem wielu innych programistów frameworków/bibliotek, którzy rzucali frazą „piszemy oprogramowanie oparte na opinii”, ale w praktyce, co to naprawdę oznacza? Czy to oznacza, że autor „Opinionated Framework X” mówi, że skoro piszą kod w określony sposób, to ty powinieneś pisać ten sam kod, co oni? Czy to nie jest trochę pretensjonalne?


Czy obecnie wymagane jest testowanie witryny na komputery stacjonarne dla IE6 i IE7? A może wystarczy IE8 i IE9? Słyszałem, że IE8 zastąpił IE7.


title: Uciekanie ciągów w warstwie bazy danych

text: Czy funkcje ucieczki (np. mysql_real_esacpe_string ) można przenieść w dół do warstwy bazy danych, gdzie będziemy przechodzić przez wszystkie parametry przekazywane dla wszystkich zapytań i usuwać wszystkie łańcuchy. Czy to byłby dobry projekt?


title: W jakim obszarze makro LISP-a jest lepsze niż „zdolność” Rubiego do tworzenia DSL?

text: Jedną z rzeczy, które sprawiają, że Ruby błyszczy, jest możliwość lepszego tworzenia języków specyficznych dla domeny, takich jak * Sinatra * Rspec * Rake * ActiveRecord Ruby on Rails Chociaż można powielać te biblioteki w LISPie za pomocą makr, myślę, że implementacja Rubiego jest bardziej elegancka. Niemniej jednak uważam, że istnieją przypadki, w których makro LISP-a może być lepsze niż makro Rubiego, chociaż nie mogłem wymyślić żadnego. Więc w jakim obszarze makro LISP-a jest lepsze niż "zdolność" Rubiego do tworzenia DSL, jeśli w ogóle? **aktualizacja** Pytałem o to, ponieważ współczesne języki programowania zbliżają się do osobliwości LISP, na przykład * C ma preprocesor rozwijania makr, choć bardzo prymitywny i podatny na błędy * C# ma atrybuty, chociaż jest to tylko do odczytu, ujawnione przez odbicie * Python dodany dekorator, który może modyfikować zachowanie funkcji (i klasy w wersji 3.0), choć wydaje się dość ograniczony. * Ruby TMTOWTDI, który tworzy eleganckie DSL, jeśli stosuje się pielęgnację, ale w sposób Ruby. Zastanawiałem się, czy makro LISP ma zastosowanie tylko do szczególnych przypadków i czy inne funkcje języka programowania są wystarczająco potężne, aby podnieść abstrakcję, aby sprostać dzisiejszym wyzwaniom w tworzeniu oprogramowania.


title: Javascript i SQL Lite (zapytania SQL/bazy danych offline w wielu przeglądarkach)

text: Jestem w wydziale wyborczym mojego hrabstwa i próbuję uprościć metodę wyszukiwania wyborców dla naszych sędziów w czasie wyborów. Obecnie używamy niezgrabnej, ciężkiej aplikacji, którą sędziowie muszą zainstalować, i obsługujemy tylko system Windows. Moim celem jest posiadanie rozwiązania opartego na przeglądarce offline (po stronie klienta), które będzie działać na dowolnej przeglądarce dla dowolnego systemu operacyjnego. Uważam, na podstawie badań, które przeprowadziłem za pomocą wyszukiwarek google i forów w3, że powinienem używać JavaScript + SQL Lite. Przeczytałem, że HTML5 ma dobre rozwiązanie, ale pamiętaj, że sędziowie wyborowi są zazwyczaj starsi i nie aktualizują swoich aktualizacji lub nie odbiegają od preinstalowanej przeglądarki (zazwyczaj IE), więc HTML5 nie jest prawdopodobnym rozwiązaniem dla naszych potrzeb . Zrobiłem kilka dni badań na ten temat i po prostu wyszedłem z pustymi rękami, ponieważ szczerze mówiąc NIE jestem pewien, czego powinienem szukać. Ale jak powiedziałem, kombinacja JS/SQLlite wydaje się być rozwiązaniem. Niestety nie mogę znaleźć żadnych tutoriali, które pomogłyby mi pogodzić te dwa systemy. Masz jakieś sugestie? W tym momencie wszystko jest pomocne. Dziękuję!!!!


title: Język wbudowany o znaczeniu krytycznym

text: Może pytanie brzmi trochę dziwnie, więc wyjaśnię trochę tło. Obecnie pracuję nad projektem na y uczelni, który będzie kompletnym oprogramowaniem pokładowym dla satelity. System jest programowany w C++ na bazie systemu operacyjnego czasu rzeczywistego. Jednak niektóre podsystemy, takie jak system kontroli położenia, wykrywanie błędów i symulacja przestrzeni, są obecnie wdrażane tylko w Matlab/Simulink, aby skutecznie prototypować algorytmy. Po ich weryfikacji zostaną przetłumaczone na c++. Kompletne oprogramowanie pokładowe stało się bardzo złożone i tylko garstka osób zna cały system. Co więcej, wielu studentów nie programowało jeszcze w C++, a ręczne zarządzanie pamięcią w C++ jeszcze bardziej utrudnia pisanie oprogramowania o znaczeniu krytycznym. Oczywiście główny system musi być zaimplementowany w C++, ale zadałem sobie pytanie, czy możliwe jest użycie języka wbudowanego do zaimplementowania podsystemu, który jest obecnie napisany w Matlabie. Ten wbudowany język powinien cechować się: * statycznym/silnym typowaniem i sprawdzaniem kompilatora w celu zminimalizowania błędów w czasie wykonywania * małym zużyciem pamięci i stosunkowo szybkim czasem działania * algorytmami kontroli nastawienia to głównie obliczenia numeryczne, więc dobre wsparcie numeryczne byłoby miłe * może jakiś rodzaj funkcjonalności funkcja programowania, matlab/simulink zachęcam do korzystania z niego też trochę googlowałem, ale znalazłem tylko Lua. Wygląda ładnie, ale nie użyłbym go w oprogramowaniu o znaczeniu krytycznym. Czy kiedykolwiek spotkałeś się z taką sytuacją lub znasz jakiś język, który spełniałby warunki? EDYCJA: Aby wyjaśnić niektóre rzeczy: osadzony oznacza, że powinien być w stanie osadzić język w istniejącym środowisku C++. Więc nie ma języków kompilowanych, takich jak Ada czy Haskell


title: Zmniejsz prawdopodobieństwo wybrania pozycji z listy na podstawie jej indeksu

text: Mam listę dźwięków, które mają być odtwarzane, gdy użytkownik naciśnie przycisk. Na razie po prostu generuję losową liczbę z zakresu listy i po prostu wybieram dźwięk z tym indeksem. (Uniemożliwiam również odtworzenie tego dźwięku przy następnym kliknięciu przycisku. Ponieważ jest to łatwe, chciałbym skoncentrować się _tylko_ na algorytmie wyboru i pozostawić wykluczenie za sobą.) Ponieważ umożliwia to odtwarzanie kilku dźwięków odtwarzane wielokrotnie we wzorcu, chciałbym dostosować mój algorytm: Po odtworzeniu pliku jest on przenoszony na koniec listy. Dźwięki z początku mają większą szansę na zagranie niż te na końcu – minimalizując tym samym powtarzalność. Zamiast przypisywać wagę każdemu indeksowi, chcę mieć jeden czynnik określający spadek prawdopodobieństwa. Na przykład ustawiłbym ten czynnik na 1,2, co oznacza, że każdy indeks jest 1,2 razy bardziej prawdopodobny niż następny. Miejmy nadzieję, że spowoduje to spory spadek prawdopodobieństwa. Najszybszym rozwiązaniem wydaje się być funkcja matematyczna, która odwzorowuje liczbę losową na zakres indeksów. W ten sposób nie muszę ustawiać interwałów, ale mogę bezpośrednio obliczyć wynik na podstawie liczby losowej. Po prostu nie potrafię rozgryźć matematyki i implementacji tego pomysłu, więc musisz mi to przedstawić. Algorytm będzie używany w aplikacji na Androida, więc językiem programowania, którego używam, jest Java.


title: JavaScript i dane aplikacji internetowych

text: Jestem całkiem nowy w programowaniu aplikacji internetowych, a więc w **OOP** JavaScript i nowych interakcjach **Klient-Serwer**. Mam kłopoty z zastanawianiem się, ile **AJAX** powinienem użyć lub ile danych muszę zapisać "lokalnie". Wyjaśniając to lepiej: w tej chwili, aby zarządzać danymi, które pozyskuję z żądania AJAX , wpycham je do **Struktury danych**, tak jak **Array's**, a następnie radzę sobie z nimi, pomagając sobie w renderowaniu html przez szablon. Teraz zastanawiałem się: czy to wszystko jest konieczne? Czy naprawdę muszę przechowywać wszystkie te dane w strukturach danych, czy mogę wykonać wywołanie AJAX dla każdej akcji wykonywanej przez użytkowników w mojej aplikacji? Przepraszam za wyjaśnienie, ale jest to dla mnie trudna koncepcja do wyjaśnienia po angielsku. Z góry dziękuję


title: Czy dzisiejsze strony internetowe używają semantyki sieciowej?

text: Czy dzisiejsze strony internetowe wykorzystują semantykę sieci Web? jaki jest potencjał semantyki internetowej (mam na myśli potencjał do ulepszania sieci)? semantyka internetowa polega na SEO?


title: Dostęp do zasobów na podstawie ról dla usługi RESTful

text: Nadal zastanawiam się nad REST, ale zastanawiam się, czy ktoś może pomóc z sugestiami lub podejściami do kontroli dostępu opartej na rolach dla usługi RESTful, szczególnie z punktu widzenia zabezpieczenia danych i tego, jak mogą wyglądać adresy URL. Prawdopodobnie najlepiej rozważyć przykład: Załóżmy, że mam usługę REST dla klientów i chcę podzielić użytkowników tej usługi REST na role administratora, redaktora i czytelnika: * Administratorzy mogą zmieniać wszystkie atrybuty zasobu klienta * Tylko redaktorzy niektórzy * Czytelnicy mogą je tylko przeglądać. Uprawnienia kontroli dostępu nadawane są podmiotom Klienta indywidualnie. Na przykład użytkownik usługi może mieć uprawnienia administratora do klientów 1,2 i 3, ale dostęp do edytora do 4,5 i dostęp do czytelnika do 7,8,9. Rozważmy teraz użytkownika wywołującego usługę. Jaki jest dobry sposób na oddzielenie listy Klientów dla aktualnego Użytkownika? **GET /Customer** \- może uzyskać listę wszystkich klientów, do których bieżący użytkownik ma dostęp Admin\Editor\Reader. Ale wtedy na każdym Kliencie konsument potrzebowałby wskazania, jaką rolę pełni. A może „lepiej” byłoby mieć coś takiego jak **GET /Customer/Admin** \- zwróć wszystkich klientów, do których bieżący użytkownik ma dostęp administracyjny. Po prostu szukam pewnych wskaźników wysokiego poziomu lub czytam na przyzwoity sposób na zabezpieczenie\filtrowanie zasobów na podstawie ról bieżącego użytkownika.


title: Konwencje biblioteki REST API

text: Większość bibliotek API definiuje jedną metodę dla każdego punktu końcowego. Jeśli istnieje punkt końcowy do pobierania informacji o użytkowniku, możesz mieć metodę taką jak: getUserInfo(userId); Ta prosta metoda jest często opakowaniem wokół innej funkcji, która faktycznie wykonuje wywołanie API: apiCall('/user/info', {userId: userId}); Inną opcją, którą widzę rzadziej, jest to, aby biblioteka zawierała tylko metodę, która wykonuje wywołanie API. Pierwsza metoda ma tylko zalety wykrywalności kodu, ale nie stanowi dużego problemu w przypadku języków dynamicznych. Niektórzy twierdzą, że eliminuje to również potrzebę czytania przez programistę dokumentacji interfejsów API, ale dlaczego miałbyś kiedykolwiek chcieć, aby ktoś używał interfejsów API bez czytania dokumentacji? Widzę, że druga metoda ma trzy zalety: * Biblioteka jest znacznie mniejsza * Metody nie muszą być aktualizowane, jeśli API kiedykolwiek się zmieni * Nie ma potrzeby prowadzenia dokumentacji biblioteki; dokumentacja API spełnia ten cel. Nie widzę jednak drugiej metody stosowanej zbyt często, więc może czegoś mi brakuje. Kiedy użycie którejś z metod pisania bibliotek API jest właściwe lub niewłaściwe?


title: Różnica między wzorcem Singleton a auto_ptr<> lub unikalny_ptr<>

text: Utrzymuję stary kod fizycznej symulacji. Obiekt obliczeniowy jest budowany jako singleton, aby zapewnić, że istnieje tylko jedna instancja. Współpracownik powiedział mi, że singletony są kompletnie nieaktualne i powinienem skonkretyzować go przez smartpointer. Ale myślę, że to nie to samo, ponieważ inicjalizacja przez smartpointer nie gwarantuje mi, że istnieje tylko jedna instancja tego obiektu, prawda? Jeśli chcę mieć jedną instancję obiektu w moim kodzie, który sposób jest preferowany: Użyj wzorca singleton lub zainicjuj obiekt za pomocą jednego z tych inteligentnych wskaźników (`auto_ptr<>` lub `unique_ptr<>`).


title: Poprawność projektu dla moich obiektów w pamięci reprezentacji wierszy bazy danych

text: Próbowałem zmienić projekt strukturalny systemu opartego na C#.NET, nad którym obecnie pracuję. Nowy projekt obejmuje raczej lekki framework do mapowania obiektowo-relacyjnego (staramy się trzymać z dala od ADO lub linq2sql). Przepraszam, przyszło to dość długo, ale nie mogę tego opisać krócej - to trochę skomplikowane. System ma dwie podstawowe funkcje: 1. Pobieranie wierszy z relacyjnej bazy danych SQL opartej na dyskach, a następnie udostępnianie ich za pomocą obiektów oznaczonych jako „[DataContract]” za pośrednictwem ASP do klienta internetowego, a także otrzymywanie aktualizacji do tych i przekierować je do bazy danych. 2. Odczytuj i udostępniaj te same rodzaje obiektów modułom serwerowym / rozproszonym, które z nimi współpracują, generują pewne wyniki i przesyłają je z powrotem do bazy danych. Wyniki (niektórzy mogą zapytać: „dlaczego przechowujesz wygenerowane dane?”) z obliczeń modułu _do_ muszą być przechowywane w bazie danych ze względu na rozmiar i długość obliczeń wymaganych do ich uzyskania, tylko po to, aby były pobierane w częściach przez web-klienta za pomocą funkcji (1). Obecnie wszystkie obiekty reprezentujące wiersze są zdefiniowane jako oddzielne klasy C# ze wspólnym trendem, ale z niewielkim dziedziczeniem lub bez wspólnej klasy bazowej. Chcę całkowicie przełamać ten wzorzec i wprowadzić bardziej rozbudowane dziedziczenie oparte na drzewie klas abstrakcyjnych i ewentualnie interfejsach. W ciągu ostatnich kilku dni przygotowałem implementację „wymaganą do testów”, ale jestem zaniepokojony rozsądkiem tego projektu. Oczywiście istnieje niedopasowanie impedancji obiektowo-relacyjnej, z którym radzę sobie tylko inicjując pola oparte na kolumnie bazy danych, chyba że inne enkapsulowane obiekty są dostarczane do konstruktora. Nie przejmuję się tym tak bardzo i jest to również problem dla starego projektu systemu. Oto, co mam do tej pory: Klasa `DatabaseColumnAttribute`, która celuje w pola i definiuje * nazwę kolumny, w której znajdują się dane dla pola. * typ bazy danych (lokalnie wspierany wyliczeniem) dla tej kolumny. Istnieje stały zestaw typów baz danych, które ten system ma obsługiwać, więc niech tak będzie. * czy kolumna dopuszcza wartość null. * przeczytaj frazę (tzn. jak reprezentujemy tę kolumnę w zapytaniu SELECT w instrukcji sql): jest ona generowana automatycznie na podstawie typu kolumny. Istnieje stała liczba typów, do których można uzyskać dostęp do danych, więc jeśli podczas odczytywania danych z kolumny występuje konwersja, zostanie ona uwzględniona. W przeciwnym razie wystarczy nazwa kolumny. * write wrapper (czyli funkcja bazy danych konwertująca dane przesłane do kolumny z C# na odpowiednią reprezentację) - również generowana na podstawie typu kolumny. Wszystko to jest używane w obiekcie `DatabaseFieldColumnWrapper`, który zawiera wszystkie metody wymagane do przeniesienia danych z kolumny do pola lub odwrotnie. `DatabaseFieldColumnWrapper` jest konstruowany dla każdej lokalizacji w kodzie, w której użyto `DatabaseColumnAttribute`, co oznacza, że nie jest on całkiem „statyczny”, ale raczej oparty na klasie, ponieważ modyfikuje pola klas pochodnych. Pola mogą przywracać właściwości, jest też klasa `BackedByFieldAttribute`, pominę ją dla zwięzłości. Wszystkie te elementy są używane w ramach abstrakcyjnej klasy `DataElement`, będącej korzeniem hierarchii. Definiuje następujące abstrakcyjne elementy członkowskie: funkcja, która zapewnia nazwę tabeli pomocniczej dla tej klasy obiektów, publiczną właściwość identyfikatora tylko do odczytu, prywatną funkcję do ustawiania identyfikatora (odpowiadającą kluczowi podstawowemu wiersza w tabeli) . Zapewnia również chronioną, statyczną funkcję pomocniczą do pobierania obiektów `DatabaseFieldColumnWrapper` dla określonych pól na podstawie wyrażeń Linq (aby uniknąć „magicznych ciągów”). Można to wykorzystać w typach pochodnych, aby łatwo zsynchronizować reprezentację bazy danych dla określonych pól/kolumn. Dostarcza metodę `Delete()`, która jest (nie destruktorem, ale funkcją) odpowiedzialną tylko za usuwanie reprezentacji bazy danych. Cały system jest zaprojektowany tak, aby umożliwić asynchroniczność i wielokrotne reprezentacje pamięci, chyba że określono inaczej. Oto część „mniej rozsądna”: istnieje klasa `DataElementAttribute`, która jest przeznaczona do modyfikowania nieabstrakcyjnych typów pochodnych. Jest _nie_ w pełni skonstruowany całkowicie od razu tam, gdzie jest zdefiniowany, zamiast tego jest wypełniany w sposób bezpieczny dla wątków po konstruowaniu pierwszego obiektu typu pochodnego. Nie jest dziedziczony i zawiera tylko dane specyficzne dla _klasy pochodnej_ wymagane do przyspieszenia konstrukcji (tj. skonstruuj wcześniej wszystkie niezbędne obiekty `DatabaseFieldColumnWrapper` i skojarz je z polami). To w zasadzie _narusza_ model C# OO, ponieważ jest „statyczny tylko w odniesieniu do bieżącej klasy w hierarchii”, a nie statyczny dla całego łańcucha. Zasadniczo sprawia, że obiekt `DataElmentAttribute` jest kojarzony z określonym obiektem Type. Przypomina to strukturę wygody, która jest generowana zgodnie z regułami określonymi w klasie bazowej _only_ , ale inicjuje jej elementy członkowskie na podstawie pól oznaczonych jako kolumny dla każdego typu pochodnego. Każda instancja tego konkretnego typu ma do niego odniesienie. Nie wiem, jak obejść ten problem, wydaje się, że jest to najlepsze pod względem „ponownego wykorzystania kodu”, ale wydaje się również, że naruszam wiele rzeczy, którymi nie powinienem być, gdy to robię. Jakieś pomysły, sugestie? W formie bardziej „pytania”: czy znasz lepszy sposób powiązania rzeczy z typami (bez dziedziczenia) i udostępnienia ich z każdej instancji tego typu, która jest zgodna z modelem OO? PS Nie szukam odpowiedzi typu „nie powinieneś”, ponieważ nie pozwoliłoby nam to ponownie wykorzystać więcej kodu.


title: Moduły już zatwierdzone, klient nie płaci, co mam zrobić?

text: Tak więc historia jest prosta, portal UE na wczesnym etapie zatrudnił mnie do zrobienia kilku dodatkowych modułów. Dostałem cały kod źródłowy do testów lokalnych, wykonałem swoją pracę, wprowadziłem nowy kod. Teraz wyszedłem z tego projektu, ale klient jeszcze mi nie zapłacił i nawet o tym nie myśli. Minęło kilka miesięcy i nie podpisano żadnej umowy, więc nie mogę podejmować żadnych działań prawnych. Co mam zrobić z całym kodem źródłowym? Sprzedaj to? Uruchomić dokładną kopię tego portalu? Udostępnić cały portal publicznie?


title: Dlaczego WCF nazywa się Windows

text: Zastanawiam się, dlaczego nie nazywa się Microsoft Communication Foundation. Czy opiera się na systemie Windows i czy będzie polegać na systemie Windows w przewidywalnej przyszłości?


title: Czy istnieją dobre zasoby do nauki pisania specyfikacji technicznych/dokumentów projektowych?

text: > **Możliwy duplikat:** > Pisanie specyfikacji wymagań oprogramowania > Jak stworzyć świetną specyfikację funkcjonalną Zaczynam pisać więcej specyfikacji technicznych i dokumentów projektowych. Jednak nie mam dużo czasu w szkole, żeby je pisać i nie mam dostępu do przykładów innych ludzi. Znalazłem kilka dobrych przykładów struktury tych dokumentów, na przykład: Zdefiniuj cele projektu Zdefiniuj architekturę/infrastrukturę systemu Zdefiniuj okna dialogowe użytkownika i przepływ sterowania Zdefiniuj zadania w tle Zdefiniuj model bazy danych Zdefiniuj interfejsy do innych systemów Zdefiniuj wymagania niefunkcjonalne (czasy odpowiedzi, bezpieczeństwo, ...) Ale szukam może trochę więcej na temat najlepszych praktyk pisania zawartości tego typu sekcji. Nie jestem pewien, czy to głupie pytanie, czy nie, ponieważ jest to tylko dokumentacja tego, co tam jest, ale dostaję rodzaj bloku z pustym płótnem i zaczynam po prostu myśleć o rzeczach


title: Jak zrobić świetną specyfikację funkcjonalną

text: Zamierzam wkrótce rozpocząć mały projekt poboczny, ale tym razem chcę nie tylko zrobić mały model domeny UML i diagramy przypadków, które często robię przed programowaniem, pomyślałem o stworzeniu pełnej specyfikacji funkcjonalnej. Czy jest ktoś, kto ma doświadczenie w pisaniu specyfikacji funkcjonalnych, który mógłby polecić mi to, co muszę do tego dodać? Jak najlepiej zacząć go przygotowywać? Tutaj opiszę tematy, które moim zdaniem są bardziej istotne: * Cel * Przegląd funkcji * Diagram kontekstowy * Krytyczne czynniki sukcesu projektu * Zakres (wejście i wyjście) * Założenia * Aktorzy (źródła danych, aktorzy systemowi) * Diagram przypadków użycia * Diagram przebiegu procesu * Diagram aktywności * Wymagania bezpieczeństwa * Wymagania dotyczące wydajności * Wymagania specjalne * Reguły biznesowe * Model domeny (model danych) * Scenariusze przepływu (sukces, alternatywa…) * Harmonogram (zarządzanie zadaniami) * Cele * Wymagania systemowe * Oczekiwane wydatki # # Co myślisz o tych tematach? Mam dodać coś jeszcze? a może coś usunąć? Pojechałem na każdą odpowiedź i chciałbym podziękować wszystkim za przydatne informacje. Robię ten poboczny projekt dla firmy, a oni oczekują ode mnie stałego przepływu komunikacji i będę musiał wyjaśnić, dlaczego robię wszystko, ponieważ będę musiał zarządzać zasobami, które mi dadzą. To będzie moja pierwsza specyfikacja func i jak powiedziałem, chcę, aby była użyteczna, a nie tylko duża i bezużyteczna. Myślę, że to jest coś, co trzeba zrobić, ale chcę to zrobić w sposób, który będzie bardziej użyteczny dla mnie i mojego zespołu. Szkoda, że nie mamy menedżera, dlatego też muszę zająć się niektórymi zadaniami administracyjnymi... Jeśli chodzi o programowanie zwinne, myślę, że jest to w 100% zgodne z podejściem zwinnym. Jestem programistą Agile i szczerze mówiąc, czułem się bardziej pewny siebie, gdy ktoś już za mnie myślał. Nadal jestem Junnior, ale pracowałem wcześniej jako web developer Tapestry w innych projektach, gdzie organizacja była totalnym chaosem. Nie zgadzam się, że robię podejście kaskadowe, myślę, że po prostu próbuję zdefiniować pewne granice, które ułatwią projekt, gdy rozpocznie się rozwój.


title: Dlaczego muszę przechowywać licencję na oprogramowanie open source w katalogu głównym?

text: Prawie wszystkie licencje na oprogramowanie typu open source wymagają (a przynajmniej prawnicy generalnie sugerują, że wymagają), aby użytkownicy dołączyli pełną licencję do katalogu głównego projektu, który chronią. Jeden z prawników, z którym rozmawiałem, sugeruje, że jest to spuścizna epoki płyt CD, kiedy konieczne było dołączenie pełnej licencji do pudełka na biżuterię. Ale dzisiaj żyjemy w epoce chmury. Dlaczego nie mogę, na przykład, po prostu hostować pełnej licencji na mojej stronie internetowej i umieścić tytuł + adres URL tej licencji w nagłówku moich plików źródłowych? **Bonus:** jeśli ogólnie przyjmuje się, że ustanowione licencje muszą pozostać nienaruszone w katalogu głównym, dlaczego OSI FSF nie zatwierdziło licencji, do której _możesz_ się odwoływać za pomocą adresu URL, i co powstrzymuje kogoś przed utworzeniem tej licencji?


title: Jakie są możliwości zarządzania pamięcią MySQL + JDBC (w świetle obliczeń autonomicznych)?

text: Interesuje mnie implementacja pewnego rodzaju funkcjonalności przetwarzania autonomicznego przy użyciu MySQL. Przez obliczenia autonomiczne rozumiem z grubsza pewne funkcje odporne na awarie, dzięki którym aplikacja wydaje się być przynajmniej trochę „inteligentna”. (pozostałe dwa – „samooptymalizacja” i „samoochrona” są dla nas w tej chwili zbyt abstrakcyjne/futurystyczne). Na przykład, jeśli mamy przykładową aplikację Java, która wykorzystuje bazę danych MySQL, możemy chcieć automatycznie zrestartować bazę danych MySQL, jeśli zajmujemy zbyt dużo pamięci. A może chcemy mieć możliwość dynamicznego dostosowywania pamięci bazy danych według potrzeb. Na przykład, kiedy uruchamiamy aplikację, baza danych zaczyna się od buforu o wielkości 56 megabajtów; ale potem, gdy wstawiamy tak wiele wierszy, chcemy, aby automatycznie skoczył do 512 MB, a następnie do 1024, aż do maks. 4096 MB. Czy wszystko to sugeruje, że MySQL jest zbyt „słaby” na to zadanie? Czy sugerujesz korzystanie z bazy danych Oracle? Mój profesor uważa, że używając Javy możemy w zasadzie nadrobić wszelkie braki w zarządzaniu pamięcią, które MySQL ma w stosunku do Oracle DB. Jestem nowy w MySQL, ale mam doświadczenie z Oracle. Jeśli wszystkie powyższe brzmią dziwacznie, to dlatego, że wciąż je rozwijam. Dziękuję


title: Czy moja praca nad testem programistycznym jest wykorzystywana?

text: Szukam pracy i aplikowałem na kilka stanowisk. Jeden z nich odpowiedział, miałem dość długą rozmowę telefoniczną (może godzina +), a następnie umówili mnie na test programisty. Powiedziano mi, że ten test ma trwać od 6 do 8 godzin i jeśli spotka się z ich aprobatą, mogę otrzymać wynagrodzenie za pracę nad nim. To dało mi trochę przerwy, ale postarałem się. Test deweloperski odbył się na maszynie wirtualnej dostępnej za pośrednictwem protokołu RDP. Zadanie polegało na zaimplementowaniu strony wyszukiwania w projekcie internetowym, która żąda danych z serwera, wyświetla je na ekranie w formie tabeli, ma dość skomplikowany schemat filtrowania wyszukiwania (jest około 15 statusów i wysyłając wyszukiwanie na serwer może wyszukiwać według tych statusów) oprócz wyszukiwania ciągu/pola. Chcą, aby niektóre ikony SVG zmieniały kolor na niektórych wartościach danych, chcą, aby niektóre dane były reprezentowane inaczej niż w bazie danych itp. Krótko mówiąc, zajęło to cholernie dużo dłużej niż 6-8 godzin. W dużej mierze było to spowodowane bardzo słabą maszyną wirtualną, na której działałem (załadowanie programu Visual Studio 2013 zajęło 10 minut i kolejne 15 minut, aby otworzyć ogromne rozwiązanie o pojemności 3 GB). Po zakończeniu kazano mi zatwierdzić moje zmiany w kontroli źródła... Hmm, OK. Dostaję wiadomość e-mail, że myśleli, że pliki SVG mogą mieć inny kolor, znaleźli błąd w tym przypadku na krawędzi, był sporadyczny problem z tą inną rzeczą, której nigdy nie doświadczyłem itp. Mam więc 13-14 lat godzin do tej rzeczy teraz i muszę zrobić poprawki błędów. Robię je, a oni wracają z kilkoma kolejnymi. To wszystko najwyraźniej trafia do aplikacji produkcyjnej. Zauważyłem pewne anomalie w kodzie, który już tam był, gdzie wyglądało na to, że inni ludzie zakodowali całą jedną funkcjonalność i nic innego, co mogłem znaleźć. Czy jestem tylko wykorzystywana do taniej siły roboczej? Nawet jeśli zapłacą mi obiecane 50 dolarów za godzinę za 6 godzin, poświęciłem teraz na to jakieś 18 godzin. Jeśli naprawię wszystkie rzeczy, które ciągle wymyślają, będę pracował co najmniej 16 godzin za darmo. Przeszedłem szereg testów programistycznych. Nigdy nie wziąłem takiego, w którym pracowałem nad kodem przeznaczonym do produkcji. Nigdy nie wziąłem takiego, w którym zaimplementowałem funkcję, która była w przygotowaniu do opracowania (było to zaplanowane i zaimplementowałem ją w trakcie testu). I nigdy nie wziąłem takiego, który trwał 4 rundy i łącznie ponad 20 godzin. Odnoszę wrażenie, że używają swojego testu deweloperskiego do przetestowania niektórych funkcjonalności, na które nie mają czasu w swoim normalnym zespole, za tanią cenę.


title: Czy powinienem używać zarówno WCF, jak i ASP.NET Web API?

text: Mamy już interfejs API WCF z basichttpbinding. Niektóre wywołania zawierają złożone obiekty zarówno w odpowiedzi, jak i żądaniu. Musimy dodać możliwości RESTful do API. Na początku próbowałem dodać punkt końcowy webHttp, ale otrzymałem co najwyżej jeden parametr body można serializować bez elementów wrappera. Muszę przeczytać to i to (które stwierdza "ASP.NET Web API to nowy sposób budowania usługi RESTful na .NET"). Więc moje pytanie brzmi, czy powinienem zrobić 2 interfejsy API (2 różne projekty)? jeden dla SOAP z WCF i jeden RESTful z ASP.NET Web API? czy jest coś złego architektonicznie w tym podejściu?


title: Kod źródłowy wirusa

text: Niedawno przeczytałem artykuł w BBC o szyfrowanych wirusach. Nie mam pojęcia, jak można by w ogóle zacząć programować coś takiego. Chciałbym zobaczyć kod źródłowy tego lub czegoś podobnego. Czy ktoś ma jakiś odpowiedni materiał? (Zastrzeżenie: nie chcę tworzyć własnego wirusa. Moje zainteresowania są czysto akademickie)


title: Modułowa architektura sieci aplikacji internetowych

text: Zakładając, że mam do czynienia z dedykowanymi serwerami fizycznymi lub serwerami VPS, czy jest to do pomyślenia i czy ma sens posiadanie odrębnych konfiguracji serwerów z następującymi rolami do hostowania aplikacji internetowej? 1. Reverse Proxy 2. Serwer WWW 3. Serwer aplikacji 4. Serwer bazy danych ![diagram chmury](http://i.stack.imgur.com/ycKgq.png) Konkretne punkty zainteresowania: 1. Jestem zdezorientowany, jak nawet oddzielić serwery WWW i aplikacji. Zrozumiałem, że takie 3-poziomowe architektury są wykonalne. 2. Nie jest dla mnie jasne, czy serwer aplikacji będzie znajdował się bezpośrednio między serwerem internetowym a serwerem bazy danych, czy też serwer sieciowy mógłby również bezpośrednio wchodzić w interakcję z bazą danych. Serwer aplikacji może albo wykonać ciężkie operacje obliczeniowe w imieniu serwera aplikacji, albo wykonać ciężkie operacje _plus kontrolować całą logikę biznesową_ (jak wskazano na powyższym diagramie, odmawiając w ten sposób serwerowi sieci Web bezpośredniego dostępu do bazy danych). 3. Nie jestem również pewien, jaką rolę może i powinien pełnić odwrotny serwer proxy (np. nginx) jako serwer WWW, biorąc pod uwagę wspomnianą konfigurację. Wiem, że nginx ma funkcje serwera WWW. Ale nie wiem, czy ma sens, aby odwrotny serwer proxy był własnym VPS, biorąc pod uwagę, że serwer sieciowy - teoretycznie - byłby oddzielony od serwera aplikacji.


title: Jak unikalny powinien być obiekt o identyfikatorze UUID?

text: Pracuję nad dość dużym projektem open source (Drupal), a następna główna wersja zacznie używać identyfikatorów UUID do wielu rzeczy, w tym obiektów konfiguracyjnych. Jeśli umieścimy UUID w konfiguracji, którą dostarczamy, a następnie różne witryny zmienią swoją konfigurację, wtedy na wolności będzie wiele, wiele obiektów z tym samym UUID, ale różnymi właściwościami. Czy to jest ok? A może lepiej jest wysyłać bez identyfikatorów UUID i generować je podczas instalacji?


title: Konstruować logikę rozwiązania w składni czy w szybszym i wydajniejszym modelu mentalnym?

text: Jestem nowicjuszem, studiuję programowanie i dzisiaj natknąłem się na to pytanie: Jak mogę się upewnić, że faktycznie uczę się programowania, a nie tylko poznaję szczegóły języka? Komentator, ChaosPandion, zadał pytanie **czy programista myśli w składni, czy w szybszym modelu mentalnym**. I pisząc rozwiązanie zawsze będę myślał o liczbie pętli lub warunku, który ma być użyty (na przykład). Czy robię to źle? Jeśli tak, jak mogę się poprawić i czego powinienem się nauczyć?


title: Co jest potrzebne do zaimplementowania użytecznego języka funkcjonalnego

text: Zrobiłem trochę programowania w mniej lub bardziej funkcjonalnym stylu, ale nigdy tak naprawdę nie studiowałem czystego programowania funkcyjnego. Jakie jest absolutne minimum potrzebne do wdrożenia języka funkcjonalnego? O ile wiem, potrzebujesz: * Umiejętności definiowania funkcji * Umiejętności wywoływania funkcji * Podstawiania parametrów * Jakaś operacja "jeśli", która może zapobiec rekursji, jak "?:". * Testowanie operatorów lub funkcji, takich jak "mniejsze niż" lub "równe" * podstawowa biblioteka podstawowych funkcji i operatorów (+ -...) Oznacza to, że NIE potrzebujesz: * pętli * zmiennych (z wyjątkiem parametrów) * instrukcji sekwencyjnych To jest dla bardzo prostego zastosowania matematycznego — prawdopodobnie nawet nie zaimplementuję manipulacji ciągami. Czy zaimplementowanie takiego języka znacząco ograniczy Cię w jakiś sposób, którego nie rozważam? Głównie obawiam się braku instrukcji sekwencyjnych i możliwości definiowania zmiennych, czy naprawdę możesz obejść się bez tych "normalnych" funkcji programowania?


title: Ile szczegółów technicznych jest zbyt wiele w rozmowach z menedżerami nietechnicznymi?

text: Mam szefa, który nie jest zbyt techniczny. Potrafi napisać podstawowy SQL, posługuje się żargonem programistycznym, ale w sumie nie jest profesjonalnym programistą. Często wpadam w kłopoty, podając mu wiele szczegółów i prosząc o podjęcie decyzji, w jakim kierunku chce iść. Na przykład ostatnio poprosił o kilka zmian w produkcie. Następnie usunął 80% zmian, mówiąc, że nie jest jeszcze gotowy do ich wydania. Ale potem rozmawiam z naszym głównym programistą, a on mówi mi, żebym to wszystko popchnął. W ten sposób unikniemy konieczności ręcznego scalania kodu, który chcemy wypchnąć z kodem, którego nie chcemy pushować (przez push mam na myśli przejście od dewelopera do QA, scalanie do przodu). Tak więc lekcja jest taka... rób to, co łatwe. Nie mów szefowi, że robisz wszystko. Nie wydaje mi się to etyczne, ale takie właśnie okazało się rozwiązanie. Więc gdzie mam narysować linię? Czy uważasz, że ukrywanie szczegółów jest nieetyczne, czy jest to zwykła praca programisty? Proszę tylko bardzo doświadczonych programistów o odpowiedź na to pytanie (ponad 10 lat). Wiem, że są uzdolnieni faceci z mniejszym doświadczeniem, ale chcę, żeby w tym przypadku przemawiało doświadczenie, a nie tylko umiejętności.


title: Czy repozytorium DDD może modyfikować encję w DB bez obiektu encji?

text: Załóżmy, że mam zagregowany root `Entity` z kilkoma flagami, które są reprezentowane przez hermetyzowany obiekt `EntityFlags`: class Entity { /** @var EntityFlags */ private $flags; ... } Mam repozytorium dla tej encji. Moim celem jest modyfikacja flag w DB. Widzę dwa sposoby: 1. Pobierz encję z repozytorium, zmodyfikuj flagi takie jak `$entity->getFlags()->set($name, true)` i zapisz ją: `$repository->save($entity) `. 2. Utwórz w repozytorium dodatkową metodę, np. `modifyFlags(EntityId $id, EntityFlags $flags)` Myślę, że pierwszy sposób jest zbędny. Ale wydaje się również niewłaściwe używanie repozytorium do częściowych aktualizacji encji, tak jak w drugim sposobie. Która droga jest właściwa? Może coś przegapiłem?


title: Czy języki to tylko składnia, czy też zawierają framework?

text: Budując historię języka dla Pascala zauważyłem, że w pewnym momencie języki zmieniły się z silnej granicy między językiem a jego wspólnymi bibliotekami w bardziej rozmytą. W pierwszych kilku wersjach Turbo Pascal nie było możliwości ponownego wykorzystania modułów do czasu wprowadzenia jednostek w wersji 4. Późniejsze wersje Pascala miały bardzo potężną kolekcję wspólnych bibliotek. Wraz z wprowadzeniem Delphi przyszedł z **RTL** i **VCL**. Zwłaszcza w przypadku RTL jest często uważany za część języka. Na przykład wyjątki są częścią języka, ale musisz użyć jednostki `SysUtils`, aby uzyskać prawidłową obsługę. Dodatkowo istnieje wbudowana jednostka `System`, która zawsze jest używana we wszystkich projektach Delphi. Następnie z Javą masz język Java ze środowiskiem wykonawczym Java i platformą Java. Nie możesz używać języka Java poza platformą Java. Teraz z .NET mamy VB.NET i C#, które są językami, które również nie istnieją bez swojego frameworka, podczas gdy Phyton, Ruby i inne istnieją zarówno w .NET, jak i bez. Więc moje pytanie brzmi, czy język jest tylko składnią i kompilatorem, czy też platforma i framework są również częścią języka? Gdzie jest linia? Dlaczego lub dlaczego nie?


title: Czy należy obciążać klientów godzinami spędzonymi na złym torze?

text: Podjąłem się małego wyzwania CSS do rozwiązania dla klienta i otrzymam wynagrodzenie według stawki godzinowej. W końcu go rozwiązałem, zajęło to 5 godzin, ale spędziłem mniej więcej 25% czasu na złej ścieżce, próbując rozwiązania CSS3, które działało tylko w najnowszych przeglądarkach, i w końcu odkryłem, że nie jest możliwe rozwiązanie awaryjne przez JS (jak początkowo myślałem). Czy powinienem obciążyć klienta kwotą 25%? Więcej szczegółów: nie przedstawiłem wyceny, podobało mi się samo wyzwanie, więc zacząłem nad nim pracować przed podaniem wyceny (ale pracowałem z nim wcześniej, więc wiem, że nie należy do tych osób, które mają nierealistyczne oczekiwania ). W najgorszym razie spędzę 5 bezpłatnych godzin na intrygującym wyzwaniu CSS. I podam najuczciwszy możliwy szacunek dla nas obu, ponieważ już wykonałem pracę. :) Edytuj: Dziękuję wszystkim, chciałbym przyjąć więcej niż jedną odpowiedź! Skończyło się na tym, że nie obciążałem go rachunkiem za dodatkowe godziny (rozliczyłem go za 3 i pół), ale wspomniałem o nich, aby wiedział, że pracowałem nad tym więcej, niż mu zapłaciłem. Może dlatego od razu zaakceptował „szacunek” (który w tym przypadku nie był szacunkiem, stąd cytaty).


title: Jaka jest ogólna definicja czegoś, co można włączyć lub wyłączyć?

text: Kiedy aplikacja przedstawia użytkownikowi listę elementów, dość często pozwala użytkownikowi na filtrowanie elementów. Często funkcja „filtru” jest implementowana jako zestaw reguł _include_ lub _exclude_. Na przykład: * _include_ wszystkie e-maile od bob@example.com i * _exclude_ te e-maile bez załączników Często widziałem ten wzorzec włączania/wyłączania; na przykład Maven i Google Analytics filtrują rzeczy w ten sposób. Ale teraz, kiedy sam wdrażam coś takiego, nie wiem, jak nazwać coś, co mogłoby być _włączone_ lub _wykluczone_. Konkretnie: 1. Jeśli mam tabelę bazy danych z regułami filtrowania, z których każda _zawiera_ lub _wyklucza_ pasujące elementy, jaka jest odpowiednia nazwa pola, które przechowuje `włącz` lub `wyklucz`? 2. Jaki jest dobry sposób na oznaczenie wartości „include” lub „exclude” podczas wyświetlania listy filtrów użytkownikowi? (jako bonus, czy ktoś może polecić dobrą implementację tego rodzaju filtrowania dla inspiracji?) * * * ### Edytuj: Moje rozwiązanie Dziękuję za odpowiedzi. Zdecydowałem, że użyję **operacji** do opisania włączania lub wykluczania. Tak więc pola bazy danych i zmienne programu nazywane są operacjami. Podoba mi się nazwa, ponieważ z grubsza zgadza się ze znaczeniem operacji w teorii mnogości. Jeśli chodzi o sposób wyświetlania dla użytkowników, sfałszowałem to, nigdy nie oznaczając „włącz” lub „wyklucz”. Zamiast tego jest zawsze przedstawiany jako część pełnego zdania: ![Mockup](http://img824.imageshack.us/img824/3695/examplerestrictionslist.png) Jedyną używaną etykietą są „Ograniczenia”, które moim zdaniem są bardziej szczegółowe niż „Filtry”. Nasi użytkownicy zwykle nie są zbyt obeznani technicznie, więc — chociaż lubię słowo operacja — uznałem, że wyświetlanie etykiety o nazwie „operacja” będzie dla większości naszych użytkowników niejasne. Używanie pełnych zdań może być nieco wolniejsze, ale pozwala uniknąć zamieszania.


title: Odfiltrować inżynierów oprogramowania o słabych umiejętnościach komunikacyjnych?

text: Osobiście staram się mówić i pisać nienagannie po angielsku. Staram się kapitalizować rzeczowniki własne wielką literą, poprawną interpunkcję, formą równoległą i precyzyjnym słownictwem. (Jestem też fanem przecinka oksfordzkiego, wiesz?) Jako programista wkładam równoważną ilość wysiłku w pisany przeze mnie kod, ponieważ kod jest czytany znacznie więcej razy niż jest napisany. Zwracam baczną uwagę na przewodniki po stylu, używam bezpośrednich, jasnych idiomów i staram się postępować zgodnie z uznanymi najlepszymi praktykami. Gdybym szukał innych do pracy, szukałbym tego samego. Moje pytanie brzmi: czy uważne używanie ludzkiego języka jest cechą, która koreluje z lepszym kodem? Jeśli tak, czy personel działu kadr mógłby wykorzystać to z dobrym skutkiem do selekcji kandydatów, czy też arbitralnie zmniejszyłby pulę wykwalifikowanych kandydatów?


title: Zalety płatnych serwerów aplikacji Java?

text: Jakie są zalety Weblogic lub Websphere nad Glassfish lub JBoss, skoro mogą osiągnąć koszty rzędu milionów dolarów? Edycja: czy jest dodatkowa funkcjonalność? Wszystkie posiadają certyfikat Java EE Full. **Pytanie dotyczy technologii, a nie biznesu czy marketingu. Czym różnią się serwery od technologicznego POV?**


title: Jak mam sobie radzić z klasami, które są używane tylko raz, powiedzmy tylko w jednej funkcji?

text: Mam klasę, która zasadniczo buduje wydajną pod względem pamięci wersję struktury, która ma być używana w sekcji kodu o krytycznym znaczeniu. Wynikowa struktura jest brzydka, ale niezwykle szybka, więc nieużywanie jej nie jest tak naprawdę opcją, ale nie mogę jej również użyć jako jedynej reprezentacji mojej struktury, ponieważ ma usunięte części nieistotne dla analizy. Czy wspomniałem, że jest też bardzo brzydki? Nazwijmy tę klasę „Szybką”. Mam też oryginalną, ładną reprezentację, nazwijmy ją „Śliczna”. Mam funkcję o nazwie `Process()`, która ma pobierać instancję `Pretty`, przekonwertować ją na `Fast`, a następnie wykonać na niej kilka milionów obliczeń i wypluć wynik: Całkiem ładny; // zrób coś z ładnym // w innym hpp: double Process(const Ładne&ładne) { Szybki szybki(ładny); // utwórz mój szybki obiekt // wykonaj przetwarzanie na szybkim zwrocie wyniku; // w tym momencie szybko umiera } Instancja `Fast` jest tworzona i umiera w `Process`, ale niestety nie mogę zadeklarować klasy w funkcji, więc muszę ją zadeklarować gdzie indziej. To, co _chciałbym_ zrobić, to uczynić całą klasę dostępną tylko dla `Procesu`, a nawet nie mieć jej _widzianej_ przez nikogo innego (podobnie jak odwrotnie zadeklarowałbym funkcję `private`, gdyby klasa była jedynym obiektem, który powinien mieć dostęp do niego). Ale nie mogę zadeklarować klasy jako prywatnej! Oto moja obecna próba: class Process { public: static double DoProcess(Całkiem ładna); // to jest funkcja procesu private: class Fast { // konstruuj tutaj szybko (tylko Process może zobaczyć tę klasę!) }; }; A potem po prostu wołam `Process::DoProcess()`. To naprawdę nie jest krytyczny problem, więc nie opublikowałem tego na SO, ale to pytanie dotyczące stylu i naprawdę chciałbym mieć schludne rozwiązanie! Nigdy wcześniej nie spotkałem się z tym problemem i zastanawiałem się, jak poradzili sobie z nim inni i czy wymyślili ładniejsze rozwiązanie.


title: kiedy używać skalowanego/zwinnego frameworka do tworzenia oprogramowania dla przedsiębiorstw, a kiedy pozwolić na „pojawienie się” zwinnych procesów?

text: Dostępnych jest kilka frameworków do tworzenia oprogramowania zwinnego dla przedsiębiorstw: * Scott Ambler: Zdyscyplinowane dostarczanie Agile * Dean Leffingwell: Skalowany framework Agile * Alan Shalloway: Enterprise Agile Book * Craig Larman: Skalowanie Lean i Agile * Barry Boehm: Równoważenie Agility and Discipline * Brian Wernham: Agile Project Management for Government – DSDM, Scrum i inne Rozmawiałem również z ludźmi, którzy twierdzą, że procesy zwinne w Twoim przedsiębiorstwie powinny po prostu „wyłonić się” i że nie powinieneś potrzebować ani używać frameworka, ponieważ Cię ograniczają. **Pytanie 1:** Kiedy należy wybrać zwinną platformę programistyczną dla przedsiębiorstw, a kiedy po prostu pozwolić, aby ich zwinne procesy „pojawiły się”. **Pytanie 2:** Wybierając zwinną platformę programistyczną dla przedsiębiorstw, w jaki sposób należy wybrać odpowiednią platformę do wykorzystania w organizacji? Prosimy o przedstawienie dowodów swojego doświadczenia lub badań podczas odpowiadania na pytania, a nie tylko przedstawiania opinii.


title: Jak języki z typem Maybe zamiast wartości null obsługują warunki brzegowe?

text: Eric Lippert zrobił bardzo interesującą kwestię w swojej dyskusji, dlaczego C# używa typu `null` zamiast `Maybe<T>`: > Spójność systemu typów jest ważna; czy zawsze możemy wiedzieć, że odwołanie niepodlegające unieważnieniu nigdy nie jest w żadnym wypadku uważane za nieważne? > A co z konstruktorem obiektu z polem typu referencyjnego, które nie dopuszcza wartości >? A co z finalizatorem takiego obiektu, gdzie obiekt > jest finalizowany, ponieważ kod, który miał wypełnić referencję > wyrzucił wyjątek? System typów, który kłamie na temat swoich > gwarancji, jest niebezpieczny. To było trochę otwierające oczy. Zainteresują mnie te koncepcje, pobawiłem się trochę z kompilatorami i systemami typów, ale nigdy nie myślałem o tym scenariuszu. W jaki sposób języki, które mają typ Maybe zamiast wartości null, obsługują przypadki brzegowe, takie jak inicjalizacja i odzyskiwanie błędów, w których rzekomo gwarantowane odwołanie inne niż null nie jest w rzeczywistości w prawidłowym stanie?


title: Jak wycenić pracę z PHPUnit?

text: Programowaniem stron zajmuję się od 15 lat, a PHP od około 5 lat. Zawsze pisałem solidny kod. JEDNAK mam klienta, który nalega na testowanie jednostkowe 80% kodu. Ponieważ klient jest ZAWSZE PRAWIDŁOWY, planuję używać PHP_CodeSniffer, aby upewnić się, że mój kod wygląda poprawnie, a PHPUnit do testów jednostkowych. Mam nadzieję, że dzięki temu doświadczeniu czegoś się nauczę. Czy są to odpowiednie narzędzia do użycia? Ile czasu zajmuje konfiguracja PHPUnit i napisanie dodatkowego kodu? Napisanie stron internetowych i autotestu powinno mi zająć około 8 tygodni, tak jak robiłem to w przeszłości. Jeśli dodam dodatkowe 4 dni (10%) na testy jednostkowe (PHPUnit), czy to wystarczy? Myśli? Propozycje? Dziękuję.


title: Jak programista powinien odrzucić niemożliwe wymagania?

text: Oto problem, z którym się borykam: * * * **Cytat od Project Managera:** Hej Spark, przydzielę Ci zadanie stworzenia frameworka, który mógłby być używany dla wielu różnych aplikacji iOS. Oto wymagania: * Powinien być w stanie wykryć grubość kciuka lub palców używanych do manipulowania interfejsem użytkownika. * Dzięki tym informacjom wszystkie elementy interfejsu użytkownika powinny być _automatycznie_ uporządkowane i zwymiarowane. * W przypadku większego kciuka elementy powinny znajdować się bliżej środka ekranu. * W przypadku mniejszego kciuka elementy powinny znajdować się bliżej rogów ekranu. * Aby uzyskać większy kciuk, wszystkie czcionki powinny być mniejsze. (W tym przypadku zakładamy osobę dorosłą.) * W przypadku mniejszego kciuka wszystkie czcionki powinny być większe. (W tym przypadku zakładamy młodszą osobę.) **Podsumowanie:** Ta struktura jest wymagana do programowego tworzenia przyjaznych dla użytkownika interfejsów użytkownika. Framework powinien być opracowany w taki sposób, abyśmy mogli używać go w tylu projektach, ile potrzeba, więc musi być również bardzo przyjazny dla programistów. * * * Jestem programistą, któremu powierzono to zadanie, więc moje pytania są następujące: * Jak mogę wyjaśnić, że te wymagania są trochę śmieszne? * Jak wytłumaczyć, że lepiej byłoby skoncentrować się na rozwijaniu rzeczywistych projektów? * Jak wytłumaczyć, że nawet gdyby to było możliwe, nie polecałbym rozwijania czegoś takiego? * Jak mam grzecznie, delikatnie iz szacunkiem powiedzieć NIE temu projektowi? * Jak wytłumaczyć, że nawet dla programisty z 3 letnim doświadczeniem może to nie być możliwe?


title: Czy musisz znać Javę przed wypróbowaniem Scala

text: Jestem zainteresowany nauką Scali. Dużo o tym czytałem, ale wiele osób to ceni, ponieważ ma model aktora, który jest lepszy dla współbieżności, znacznie lepiej obsługuje xml, rozwiązuje problem funkcji pierwszej klasy. Moje pytanie brzmi, czy musisz znać Javę, aby zrozumieć/docenić sposób, w jaki wszystko działa w Scali? Czy lepiej jest najpierw wbić się w Javę, a następnie wypróbować Scala, czy możesz uruchomić Scala bez żadnego wsparcia w Javie?


title: Funkcja anonimowa a oddzielna nazwana funkcja do inicjalizacji w jquery

text: Właśnie odbyliśmy kontrowersyjną dyskusję i chciałbym poznać Wasze opinie na ten temat: Powiedzmy, że mamy kod, który służy do inicjalizacji rzeczy podczas ładowania strony i wygląda to tak: function initStuff() { ...} ... $(dokument).gotowy(initStuff); Funkcja initStuff jest wywoływana tylko z trzeciego wiersza fragmentu kodu. Nigdy więcej. Teraz powiedziałbym: Zwykle ludzie umieszczają to w anonimowym wywołaniu zwrotnym w następujący sposób: $(document).ready(function() { //Body of initStuff }); ponieważ posiadanie funkcji w dedykowanej lokalizacji w kodzie tak naprawdę nie pomaga w czytelności, ponieważ z wywołaniem ready() staje się oczywiste, że ten kod jest inicjalizacją. Czy zgodziłbyś się czy nie zgodziłbyś się z tą decyzją? I dlaczego? Bardzo dziękuję za opinię!


title: Jak zarządzać deweloperem, który ma słabe umiejętności komunikacyjne

text: Zarządzam małym zespołem programistów nad aplikacją, która jest w połowie swojego cyklu życia, w dużej firmie. To niestety oznacza, że zwykle istnieje podział 30/70 zadań programistycznych na „inne prace techniczne”. Ta praca obejmuje: * Pracę z zespołami DBA / Unix / Network / Loadbalancer przy różnych zadaniach * Składanie i zarządzanie zamówieniami na sprzęt lub infrastrukturę w różnych regionach * Uruchamianie testów, które nie zostały jeszcze zmigrowane do CI * Analizę * Wsparcie / dochodzenie Powiedzieć, że wszyscy programiści woleliby programować, zamiast wykonywać te bardziej przyziemne zadania, więc staram się równomiernie rozdawać zabawne zadania programistyczne w zespole. Większość zespołu została zatrudniona, ponieważ chociaż mogą nie mieć elitarnych umiejętności programistycznych, aby napisać własny kompilator / silnik gry / system handlu o wysokiej częstotliwości itp., Są dobrymi komunikatorami, którzy "potrafią załatwić sprawy", współpracują z innymi zespołami , i nieco poruszać się po skomplikowanej biurokracji. Są dobrymi programistami, ale są też dobrymi wszechstronnymi pracownikami technicznymi. Jednak jeden członek zespołu prawdopodobnie ma ponadprzeciętne umiejętności kodowania, ale poniżej średniej umiejętności komunikacyjne. Tradycyjnie poprzedni kierownik ds. rozwoju zwykle powierzał mu zadania programistyczne, a nie bardziej przyziemne zadania wymienione powyżej. Nie sądzę jednak, by było to sprawiedliwe wobec reszty zespołu, który wykazała się zdolnością do rozwijania wszechstronnego zestawu umiejętności, który jest powszechnie wymagany w dziale IT dużego biznesu. Co powinienem zrobić w tej sytuacji? Jeśli nadal będę dawał mu więcej pracy programistycznej, wiem, że będzie to zrobione szybciej (i odwrotnie, spodziewałbym się, że inne prace wykona wolniej). Ale jest to sprzeczne z moimi zasadami i promuje ideę, że możesz wyrzeźbić sobie „wygodną niszę” po prostu będąc złym w zadaniach, których nie lubisz. **Aktualizacja** Jestem pod wrażeniem jakości i wnikliwości otrzymanych odpowiedzi. Chociaż większość zgadza się, że powinienem pracować nad mocnymi stronami poszczególnych członków zespołu, toczyła się dobra debata tam iz powrotem. Chcę wyjaśnić, że nie próbuję rozwiązać tego problemu z powodu urazy lub że mam „chip na ramieniu”, jak wspomniano. Szukam porady, jak utrzymać zgrany zespół, który jest szczęśliwy i zmotywowany. Obserwując różnorodność odpowiedzi na to pytanie, wydaje się, że istnieje wiele różnych opinii na temat tego, jak to osiągnąć.


title: Jaki jest cel dołączania plików nagłówkowych do rozwiązania w programie Visual Studio?

text: Dlatego dołączam pliki do moich projektów po prostu: `#include "myheader.hpp"` i dodając nagłówki do eksploratora rozwiązań. Ale ostatnio zdałem sobie sprawę, że mogę pominąć krok dodawania nagłówków do eksploratora rozwiązań, ponieważ niczego to nie zmienia. Jedynym ważnym faktem jest zdefiniowanie odpowiednich katalogów include we właściwościach projektu. Czy coś mi umyka ? Czy ktoś sprytny może mi to wyjaśnić?


title: Język programowania z natywną obsługą współbieżności dla dużych wykresów?

text: Obecnie szukam nowego języka programowania do nauki (obecnie pracującego przez niektóre C ++, znam trochę C i Python), w szczególności takiego, który ma wbudowaną obsługę współbieżności? Chcę spróbować zbudować dużą bibliotekę grafów, która może przetwarzać w klastrach lub wielu rdzeniach. Wiem, że biblioteka Boost C++ obsługuje współbieżność, ale chcę też nauczyć się nowego języka i zgaduję, że został zaprojektowany z myślą o współbieżności również przyjemniej byłoby wykonywać programowanie współbieżne. Ogólnie postrzegam to jako szansę nauczenia się nowego języka, nauki programowania współbieżnego i podjęcia dużego projektu. Patrząc dookoła, Clojure i Scala wydają się być dwoma popularnymi kandydatami, gdy szuka się wsparcia w programowaniu współbieżnym.. chociaż nie jestem pewien, jak te dwa wypada w porównaniu pod względem 1. Szybkość (szczególnie w przypadku równoczesnego przetwarzania dużych wykresów) 2. Społeczność ( myśląc o wrzuceniu tego projektu na miejsce takie jak GitHub) 3. Łatwość programowania jednocześnie Czy są inne języki, które powinienem rozważyć poza Clojure lub Scala? Nigdy wcześniej nie programowałem w języku funkcjonalnym, ale jestem otwarty na naukę tego.. Widziałem program jednego z moich znajomych w Haskell i Clojure i wygląda to zniechęcająco, ale słyszałem dobre rzeczy o programowaniu funkcjonalnym, zwł. do przetwarzania danych. Dziękuję!


title: Czy ktoś mógłby przełamać ten mój paskudny nawyk?

text: Niedawno ukończyłem studia na kierunku CS i byłem w większości niezadowolony, ponieważ zdałem sobie sprawę, że otrzymałem tylko podstawowe teoretyczne podejście do szerokiej gamy przedmiotów (co ma robić uczelnia, ale nadal...). W każdym razie przyzwyczaiłem się spędzać dużo czasu na szukaniu implementacji koncepcji i po ich znalezieniu wykorzystam je jako przewodniki do napisania własnej implementacji tych koncepcji dla zabawy. Ale teraz czuję, że jedynym sposobem, w jaki mogę w pełni zrozumieć nową koncepcję, jest próba wdrożenia od zera, bez względu na to, jak niezoptymalizowany może być wynik. W każdym razie to zachowanie prowadzi mnie do domyślnego wyboru trudnej drogi, która jest czasochłonna, zamiast korzystać z ładnie napisanej biblioteki, dopóki znowu nie uderzę głową w ogromną ścianę, a następnie spróbuję znaleźć bibliotekę, która działa w moim celu .... Czy ktoś inny to robi i dlaczego? Wydaje się to dziwne, dlaczego ktoś (w tym ja) miałby to zrobić? Czy to zła praktyka? a jeśli tak, jak mogę przestać to robić?