title: PHP Framework dla RESTful Web Service

text: Od kilku dni kręcę się w kółko z tym pytaniem - który jest najlepszy framework PHP do stworzenia usługi sieciowej RESTful? Przeszukałem sieć w poszukiwaniu informacji i natknąłem się na trzy główne czynniki, które są ważne: * musi mieć wbudowaną architekturę REST w framework * musi być stabilną aplikacją * musi być w pełni funkcjonalna Może być tak, że to, czego chcę, nie istnieje, ale chciałem skontaktować się ze społecznością, aby zobaczyć, czy coś przegapiłem. Obecnie trzej rywale to: **CodeIgniter** Jest bardzo stabilnym frameworkiem z dużą społecznością i mnóstwem funkcji i „rozszerzeń”. Problem polega na tym, że nie jest to RESTful. Znalazłem kontroler RESTful, ale jest kilka rzeczy, które mi się w nim nie podobają. Głównie dlatego, że nie wydaje się poprawnie używać metod HTTP zgodnie z definicją architektury RESTful. Myślę, że wynika to z ograniczeń w rdzeniu CodeIgniter. **Yii** Ponownie, wydaje się, że jest to duża społeczność i jest stabilna z wieloma funkcjami, ale nie RESTful. **Laravel** Framework, który jest RESTful od razu po wyjęciu z pudełka i ma wiele funkcji. Problem polega na tym, że są to stosunkowo nowe ramy, więc brakuje im stabilności. Inne frameworki, które brałem pod uwagę: Zend \- z tego co przeczytałem, unikaj chyba pisania oprogramowania Enterprise. Recess \- RESTful, ale wydaje się bardzo nieaktywny i niewykorzystany. **UPDATE:** W końcu wybrałem Laravela. Nie mogę go wystarczająco polecić! Miałem RESTful API w ciągu tygodnia, a także prostego klienta internetowego. Niesamowite ramy.


Jak Facebook oblicza wspólnych znajomych? Czy buforuje wszystkich wspólnych znajomych dla każdego użytkownika? Czy używa MySQL do obliczania wspólnych znajomych za pomocą zapytania?


title: Więcej Zaawansowany język aplikacji internetowych po stronie klienta: JavaScript czy C#?

text: Obawy o przyszłość Microsoftu z Silverlight, HTML 5 i Windows 8 skłoniły mnie do ponownego rozważenia planów opracowania aplikacji biznesowej w ciągu najbliższych kilku lat w Silverlight. Może być trudno zdefiniować, co ma moc. Chcę tutaj zapytać o to jako o moc w sensie, który opisuje Paul Graham, jako o to, co można wyrazić językiem. Nie jestem pewien, ale wydaje się, że nawet najnowsze funkcje C# 4.0, takie jak typy dynamiczne, funkcje anonimowe, domknięcia, a nawet LINQ, istnieją w JavaScript. Czy sądzisz, że są plany dodania dodatkowej mocy do języka JavaScript w jego następnej wersji? Ponadto, aby lepiej radzić sobie ze stosem HTML5/JavaScript w porównaniu ze stosem Silverlight/C#: który jest lub będzie bardziej wydajny w sensie tego, jakie możliwości daje programistom i ich aplikacjom? np. Komunikacja WCF, narzędzia, kontrolki interfejsu użytkownika...


title: Czy istnieje duży bank używający Mysql lub PostgreSQL?

text: Zawsze myślałem, że największa skala banków korzysta z Oracle. Jednak nie ma dowodu, że naprawdę używają Oracle zamiast Mysql lub PostgreSQL, nikt nie zna tajemnicy. Masz pomysł, czego naprawdę używają? Czy mogę zbudować system bankomatów/banków, w których za pomocą Mysql będą odbywać się miliony transakcji? Czy mogę używać PostgreSQL? Czy muszę używać tylko Oracle?


title: Jakie języki programowania nigdy nie są przestarzałe, a stworzone programy będą mogły działać przez następne 20 lat?

text: Chcę wiedzieć, jakie języki programowania mają długowieczność? Mam na myśli, że kod napisany dzisiaj będzie mógł działać przez następne 20 lat?


title: Algorytm dokładnego rozwiązania problemu podróżującego nabywcy

text: czy znasz jakieś algorytmy, które dają dokładne rozwiązanie problemu podróżującego nabywcy. Mogę znaleźć tylko podejścia heurystyczne i probabilistyczne. Do tej pory zaimplementowałem algorytm genetyczny, który ze swej natury sam się nie kończy i nie zawsze daje optymalny wynik. Dlatego szukam dokładnego rozwiązania problemu, aby móc porównać moje rozwiązanie z dokładną/optymalną wartością dla danego zestawu danych testowych. Dla tych z Was, którzy nie słyszeli o problemie objazdowego sprzedawcy (TPP), _to_ **_nie_** _problem objazdowego sprzedawcy (TSP)_, ale jego uogólnienie. Jest więc również NP-twardy.


title: Używanie cudzego kodu w swoich komercyjnych produktach

text: Czy dopuszczalne jest używanie kodu stworzonego przez inne osoby, który został celowo udostępniony programistom internetowym? Rzeczy takie jak długie biblioteki kodu zawierające setki linii kodu, które możesz chcieć skopiować zamiast pisać samodzielnie, ponieważ jest zbyt długi i skomplikowany. Czy jest to niedopuszczalne i niemile widziane w społeczności programistów tylko dlatego, że każdy jest zobowiązany do samodzielnego napisania całego kodu i nie jest dozwolone kopiowanie w celu przyspieszenia działania? Ponadto, czy uważasz, że duże organizacje kopiowałyby gotowy kod, który został stworzony, aby przyspieszyć proces programowania stron internetowych? Czy muszą sami napisać każdy wiersz kodu?


title: Jak mogę przetestować pliki, które można połączyć/wykonywać, które wymagają ponownego hostowania lub retargetingu?

text: _Ze względu na ochronę danych nie mogę omawiać drobnych szczegółów samej pracy, więc przepraszam_ **PRZYPADEK PROBLEMOWY** Czasami moje projekty oprogramowania wymagają połączenia/integracji z oprogramowaniem stron trzecich (klienta lub innych dostawców). te programy są często w plikach wykonywalnych lub kodach obiektowych, które można łączyć (wymaga to ponownego targetowania i łączenia z moim kodem źródłowym). Kiedy otrzymuję pliki wykonywalne lub kod obiektowy, nie mogę w pełni zweryfikować ich działania bez zintegrowania go z moim systemem. Moim początkowym pomysłem jest to, że pliki wykonywalne nie są przeznaczone do testowania jednostkowego, mają łączyć się z innym systemem, ale jaka jest gwarancja, że zachowanie po łączeniu i integracji będzie w porządku? Nie ma również wystarczającej dokumentacji (od klienta), aby wskazać, jak przejść do integracji plików wykonywalnych lub plików obiektowych. Wiem, że jest to pytanie filozoficzne, ale najwyraźniej w tej chwili nie można było znaleźć wystarczających badań, aby znaleźć rozwiązanie. Miałem nadzieję, że ludzie pomogą mi iść we właściwym kierunku, proponując podejścia. Na początek dowiedziałem się, że oprogramowanie Avionics OEM jest często rehostowane i retargetowane przez strony trzecie, m.in. twórcy symulatorów. Zastanawiam się, jak je testują. Z pewnością kod źródłowy nie zostanie dostarczony ze względu na przepisy dotyczące praw własności intelektualnej. **AKTUALIZACJA** Otrzymałem rozsądne i bardzo przydatne sugestie dotyczące tego obszaru. Moja obecna walka przeniosła się na testowanie kodu OBJECT innej firmy, który musi być połączony z moim własnym kodem źródłowym (retargeting) na moim komputerze-hoście. Jak mogę nawet przetestować kod obiektowy? Z pewnością muszę je najpierw połączyć, żeby chociaż pomyśleć o zrobieniu czegokolwiek. Czy jest to zachowanie post-link, które należy określić i oskryptować (przy użyciu perla, Tcl itp.), aby można było zweryfikować dane wejściowe i wyjściowe? Bladego pojęcia!! :( Dziękuję,


title: Korzystanie z MVP, jak utworzyć widok z innego widoku, połączonego z tym samym obiektem modelu

text: _**Background_** Używamy wzorca projektowego Model-View-Presenter wraz z wzorcem abstrakcyjnej fabryki i wzorcem „sygnał/slot” w naszej aplikacji, aby spełnić 2 główne wymagania Zwiększenie testowalności (bardzo lekki GUI, każda akcja może być symulowane w testach jednostkowych) Uniezależnienie "widoku" od reszty, dzięki czemu możemy zmienić rzeczywistą implementację widoku, bez zmiany czegokolwiek innego. W tym celu nasz kod jest podzielony na 4 warstwy : Rdzeń : w którym znajduje się model Prezenter : który zarządza interakcjami między interfejsami widoku (patrz poniżej) a podstawowymi interfejsami widoku : definiują sygnały i sloty dla widoku, ale nie implementację Widoki : rzeczywista implementacja widoków Kiedy prezenter tworzy lub zajmuje się widokami, używa abstrakcyjna fabryka i wie tylko o interfejsach widoku. Wykonuje wiązanie sygnału/slotu między interfejsami widoków. Nie dba o samą implementację. W warstwie „widoki” mamy betoniarnię, która zajmuje się wdrożeniami. Mechanizm sygnału/slotu jest zaimplementowany przy użyciu niestandardowego frameworka zbudowanego na boost::function. Naprawdę mamy coś takiego: http://martinfowler.com/eaaDev/PassiveScreen.html Wszystko działa dobrze. _**Problem_** Jest jednak problem, którego nie wiem jak rozwiązać. Weźmy na przykład bardzo prosty przykład przeciągania i upuszczania. Mam dwa ContainersViews (ContainerView1, ContainerView2). ContainerView1 ma ItemView1. Przeciągam ItemView1 z ContainerView1 do ContainerView2. ContainerView2 musi utworzyć ItemView2 innego typu, ale który „wskazuje” na ten sam obiekt modelu co ItemView1. Tak więc ContainerView2 otrzymuje wywołanie zwrotne wywołane dla akcji drop z ItemView1 jako parametrem. Wywołuje ContainerPresenterB przekazując go ItemViewB W tym przypadku mamy do czynienia tylko z widokami. W MVP-PV widoki nie powinny nic wiedzieć o prezenterze ani modelce, prawda? Jak mogę utworzyć ItemView2 z ItemView1, nie wiedząc, który obiekt modelu reprezentuje ItemView1? Pomyślałem o dodaniu "itemId" do każdego widoku, który jest identyfikatorem głównego obiektu, który reprezentuje widok. Tak więc w pseudokodzie ContainerPresenter2 zrobiłby coś takiego jak itemView2=abstractWidgetFactory.createItemView2(); this.add(itemView2,itemView1.getCoreObjectId()) Nie zagłębiam się w szczegóły. To po prostu działa. Problem, który mam tutaj, polega na tym, że te identyfikatory przedmiotów są jak wskaźniki. A wskaźniki mogą zwisać. Wyobraź sobie, że przez pomyłkę usuwam itemView1, a to usuwa coreObject1. ItemView2 będzie miał coreObjectId, który reprezentuje nieprawidłowy coreObject. Czy nie ma bardziej eleganckiego i „kuloodpornego” rozwiązania? Chociaż nigdy nie programowałem w ObjectiveC ani macOSX, nie mogłem nie zauważyć, że nasz framework jest bardzo podobny do frameworka Cocoa. Jak radzą sobie z tego rodzaju problemem? Nie można znaleźć bardziej szczegółowych informacji na ten temat w Google. Gdyby ktoś mógł rzucić na to trochę światła. Mam nadzieję, że to pytanie nie jest zbyt mylące...


title: Jakie są decydujące czynniki przy wyborze udostępnienia usługi sieci Web jako usługi SOAP lub REST?

text: O ile widzę, używanie SOAP wymaga stosu SOAP, więc klientom trudniej jest konsumować, tj. Muszą upewnić się, że mają stos SOAP, który poprawnie formatuje dane POST i nagłówki, a następnie zwraca ci trochę struktura danych, podczas gdy w przypadku REST po prostu wysyłasz żądanie HTTP GET z argumentami w ciągu zapytania i otrzymujesz tekst, który, jak sądzę, jest prawdopodobnie XML. Więc co daje dodatkowe obciążenie / złożoność SOAP, kiedy tego potrzebujesz, a kiedy możesz i czy powinieneś się bez niego obejść?


title: Jak przekonać szefa do używania REST zamiast SOAP?

text: Musimy stworzyć API do naszego systemu. Jak przekonać szefa, że REST jest lepszą opcją niż SOAP (lub XML-RPC)? Mówię, że REST jest... * łatwiejszy do wdrożenia i utrzymania * niewiele nowego do nauczenia -- zwykły stary HTTP * wiele osób wybrało go Yahoo ~ Facebook ~ Twitter * będzie dużo szybciej kodować Mój szef mówi, że SOAP jest... * bogatsze i bardziej wyraziste * to tylko standardowy XML (SOAP, WSDL, UDDI) - a więc będzie łatwiejszy w użyciu * dobrze ustandaryzowany niż REST * Google używa dużo SOAP * ważne jest przestrzeganie standardów SOAP niż utwórz własny schemat XML w REST


title: Dlaczego pytanie „daj pięć rzeczy, których nienawidzisz w C#” jest tak trudne do odpowiedzi podczas rozmowy kwalifikacyjnej?

text: W podcaście 73 Joel Spolsky i Jeff Atwood omawiają między innymi „pięć rzeczy, które każdy powinien nienawidzić w swoim ulubionym języku programowania”: > Jeśli jesteś zadowolony ze swojego obecnego łańcucha narzędzi, nie ma powodu, > aby się zmieniać. Jednakże, jeśli nie możesz wymienić pięciu rzeczy, których nienawidzisz w swoim > ulubionym języku programowania, to twierdzę, że nie znasz go wystarczająco dobrze > jeszcze, aby ocenić. Dobrze jest być świadomym alternatyw i mieć zdrowe > krytyczne oko na to, czego używasz. Z ciekawości zadałem to pytanie każdemu kandydatowi, z którym rozmawiałem. Żaden z nich nie był w stanie zacytować przynajmniej jednej rzeczy, której nienawidzi w C#¹. Czemu? Co jest tak trudnego w tym pytaniu? To właśnie ze względu na stresujący kontekst wywiadu respondenci nie potrafią odpowiedzieć na to pytanie? Czy w tym pytaniu jest coś, co sprawia, że nie nadaje się na rozmowę kwalifikacyjną? * * * Oczywiście nie oznacza to, że C# jest doskonały. Mam sobie listę pięciu rzeczy, których nienawidzę w C#: * Brak zmiennej liczby typów w rodzajach (podobnie jak `params` dla argumentów). `Działanie<T>`, `Działanie<T1, T2>`, `Działanie<T1, T2, T3>`, ⁞ `Działanie<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 , T11, T12, T13, T14, T15, T16>` Poważnie?! * Brak obsługi jednostek miary, jak w F#. * Brak właściwości tylko do odczytu. Pisanie zapasowego pola „private readonly” za każdym razem, gdy chcę mieć właściwość tylko do odczytu, jest nudne. * Brak właściwości z wartościami domyślnymi. I tak, wiem, że mogę je zainicjować w konstruktorze bez parametrów i wywołać go ze wszystkich innych konstruktorów. Ale nie chcę. * Wielokrotne dziedziczenie. Tak, powoduje zamieszanie i w większości przypadków nie jest to potrzebne. Jest to nadal przydatne w niektórych (bardzo rzadkich) przypadkach, a zamieszanie dotyczy również (i zostało rozwiązane w C#) do klasy, która dziedziczy kilka interfejsów zawierających metody o tej samej nazwie. Jestem prawie pewien, że ta lista jest daleka od kompletnej i jest o wiele więcej punktów do podkreślenia, a zwłaszcza znacznie lepszych niż moja. * * * ¹ Kilka osób skrytykowało niektóre zespoły w .NET Framework lub brak niektórych bibliotek we frameworku lub skrytykowało CLR. To się nie liczy, ponieważ pytanie dotyczyło samego _języka_ i chociaż potencjalnie mógłbym zaakceptować odpowiedź o czymś negatywnym w rdzeniu .NET Framework (na przykład coś takiego jak brak wspólnego interfejsu dla `TryParse` , więc jeśli chcesz przeanalizować ciąg do kilku typów, musisz powtórzyć się dla każdego typu), odpowiedź na temat JSON lub WCF jest całkowicie nie na temat.


title: korzystanie z bibliotek LGPL w zamkniętym oprogramowaniu Android

text: Zajmuję się kwestiami prawnymi korzystania z natywnych bibliotek LGPL w oprogramowaniu Android o zamkniętym kodzie źródłowym. Jak na razie moje badania na ten temat pokazują, że wykorzystanie bibliotek LGPL w oprogramowaniu o zamkniętym kodzie źródłowym jest wykonalne, a wymagania nie są specjalnie wysokie. Na zwykłej aplikacji (np. aplikacji o zamkniętym kodzie źródłowym C) dynamicznie podlinkowałbym bibliotekę i dystrybuował binaria aplikacji wraz z biblioteką z odpowiednim odniesieniem do niej i instrukcją jak zastąpić tę bibliotekę wersją użytkownika chciałby. (Może zapominam o kilku rzeczach, ale nie o to chodzi w moim pytaniu). Moje pytanie dotyczy oprogramowania Android i JNI. Zakładając, że buduję oprogramowanie na Androida przy użyciu JNI, posiadam: Moje źródło java Folder JNI zawierający: * plik Android.mk do kompilacji aplikacji * kod źródłowy biblioteki * pliki _.cpp/_.h łączące kod źródłowy z JNI Aby skompilować moją aplikację, wymagane są dwa kroki: * Kompilacja biblioteki przy użyciu NDK do wygenerowania pliku *.so * Kompilacja aplikacji Android przy użyciu Ant. Kod java zawiera System.loadlibrary("nameOfTheLibrary") Problem, z którym się borykam, polega na tym, że kod źródłowy biblioteki jest najpierw kompilowany do pliku *.so. Można to uznać za pracę pochodną, mam rację? Jak mogę dołączyć natywne biblioteki LGPL i rozpowszechniać je we właściwy sposób, aby uniknąć problemów prawnych?


title: Zachowanie niezależności pomiędzy modułami

text: Czytam Algorithms 4th Edition autorstwa Roberta Sedgewicka iw rozdziale 1.2 omawia on projektowanie API. Mówi: „Kluczem do sukcesu w programowaniu modułowym jest zachowanie niezależności między modułami. Robimy to, kładąc nacisk na to, aby API było jedynym punktem zależności między modułami”. Teraz książka jest oparta na Javie. Rozważam to pod kątem programowania w C++ (ale wyobrażam sobie, że koncepcje są podobne). Czy to sugeruje, że jeśli mam bibliotekę, np. do pracy w sieci, jeśli klient #dołącza mój nagłówek net.hpp (nazwa fikcyjna) i może ustawia link do net.lib, to żadne inne dołączenia lub biblioteki nie powinny być wymagane? Czy to jest sedno tego? A może jest coś jeszcze?


title: Na jakiej licencji może być rozpowszechniana aplikacja „Hello World” oparta na PyQt?

text: **Aktualizacja:** myliłem się co do licencji PyQt. To nie tylko licencja GPL. Autorzy PyQt zawierają specjalny zestaw wyjątków, które pozwalają użytkownikom na wydawanie własnego kodu na innej licencji, o ile jest to jedna z licencji Open-Source wyszczególnionych w pliku `GPL_EXCEPTION.TXT` PyQt. * * * Na potrzeby tej dyskusji rozważ następującą w pełni funkcjonalną aplikację, która zależy od PyQt: # hello_world.py z PyQt4.QtGui import QApplication, QPushButton app = QApplication([]) button = QPushButton("Hello, World !", clicked=app.quit) button.show() app.exec_() (W przypadku, gdy ma to związek z dyskusją, proszę zauważyć, że programy w Pythonie takie jak ten nie wymagają "łączenia" per se). rozpowszechniać mój kod na licencji **permisywnej**, np. licencja BSD. Jednak PyQt jest wydany na ~~GNU GPL~~ **GNU GPL ze specjalnymi wyjątkami**. Mając to na uwadze, jakie mam tutaj opcje? Czy jestem zobowiązany do wydania na licencji GPL, nawet jeśli nie rozprowadzam samego PyQt? Mówiąc bardziej szczegółowo, w którym (jeśli w jakimkolwiek) z poniższych scenariuszy mogę wydać swój kod na licencji BSD w porównaniu z obowiązkiem wydania na GPL? * **Scenariusz 1:** Daję ci w pełni spakowany plik binarny zawierający `hello_world.py` i PyQt. * **Scenariusz 2:** Daję Ci kod źródłowy `hello_world.py` i PyQt w jednym pobraniu (powiedzmy `.tar.gz`), ale od Ciebie zależy, czy będą działały razem. * **Scenariusz 3:** Daję ci tylko `hello_world.py`, dzięki czemu możesz samodzielnie zdobyć PyQt. Wiem, że większość z nas nie jest prawnikami, więc bardzo doceniamy, jeśli możesz przytoczyć źródła, na których opiera się Twoja odpowiedź.


title: Czy uważasz, że kod jest samodokumentujący?

text: To pytanie, które zadano mi wiele lat temu jako absolwentowi podczas rozmowy o pracę, od czasu do czasu dręczy mój mózg i nigdy tak naprawdę nie znalazłem dobrej odpowiedzi, która by mnie usatysfakcjonowała. Ankieter, o którym mowa, szukał czarno-białej odpowiedzi, nie było między nimi kompromisu. Nigdy nie miałem okazji zapytać o uzasadnienie tego pytania, ale jestem ciekaw, dlaczego to pytanie zostałoby zadane programiście i czego można by się dowiedzieć z odpowiedzi „tak” lub „nie”? Z własnego punktu widzenia umiem czytać Javę, Pythona, Delphi itp., ale jeśli mój menedżer podchodzi do mnie i pyta, jak daleko jestem w projekcie, a ja mówię „Kod jest w 80% gotowy” (i wcześniej zaczynasz mnie zestrzeliwać, słyszałem, że deweloperzy wypowiadali się o tym w kilku biurach), jak dokładnie jest to samodokumentowanie? Przepraszam, jeśli to pytanie wydaje się dziwne, ale wolałbym zapytać i uzyskać kilka opinii na jego temat, aby lepiej zrozumieć, dlaczego zostałoby zadane komuś podczas wywiadu.


title: Plusy i minusy pracy w firmie, która korzysta z wielu własnych frameworków

text: Mam możliwość pracy w firmie, która dobrze wygląda z zewnątrz, ale ma w sobie coś, co mnie niepokoi. Nie korzysta z komercyjnych technologii. Głównym językiem, który będzie używany, jest Java, ale firma nie używa wszystkich znanych technologii, takich jak Spring, Struts, Hibernate itp. Zamiast tego ma własne technologie, które robią prawie to samo. Czy możesz mi powiedzieć, jakie są plusy i minusy pracy w takiej firmie?


title: Czym jest zamknięcie?

text: Od czasu do czasu widzę wzmiankę o „zamknięciach” i próbowałem to sprawdzić, ale Wiki nie podaje wyjaśnienia, które rozumiem. Czy ktoś mógłby mi tu pomóc?


title: Odświeżenie projektu i architektury strony internetowej

text: Mam witrynę internetową zbudowaną z formularzy internetowych asp.net. Chciałbym odświeżyć design (za pomocą css, html5, responsive design), a także zmienić go z formularzy webowych na asp.net MVC. Dla mnie to bardziej projekt frontendowy. Ponieważ istnieje już backend, konieczne jest „jedynie” jego ponowne wykorzystanie w MVC. Czy powinienem zacząć od aktualizacji projektu czy MVC? Ten projekt jest o wiele łatwiejszy niż zakładanie nowej strony internetowej od początku, czy się mylę?


title: Tworzenie klas według struktury

text: Dostaję tablicę przez usługę SOAP, w tablicy w każdej wartości będącej strukturą jest opis dowolnych elementów wizualnych (rozmiar, pozycja, wartość domyślna itp.) takich jak CheckBox, RadioButton itp. I zastanawiam się, jak napisać kod który zwróci instancje tych dowolnych komponentów wizualnych zgodnie z parametrem wejściowym z użyciem wzorca projektowego. Który wzorzec projektowy jest do tego najlepszy?


title: Unikaj zbyt skomplikowanej metody - Cyclomatic Complexity

text: Nie jestem pewien, jak postępować z tą metodą, aby zmniejszyć złożoność cyklomatyczną. Sonar zgłasza 13, podczas gdy spodziewane jest 10. Jestem pewien, że nie ma nic złego w pozostawieniu tej metody, ponieważ stanowi ona jedynie wyzwanie dla mnie, jak postępować zgodnie z regułą Sonara. Jakiekolwiek propozycje będą mile widziane. public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } spróbuj { długie milis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { millis = new ExtractInMinute(sValue).invoke(); } else if (sValue.endsWith("H") || sValue.endsWith("h")) { millis = new ExtractHour(sValue).invoke(); } else if (sValue.endsWith("d")) { millis = new ExtractDay(sValue).invoke(); } else if (sValue.endsWith("w")) { millis = new ExtractWeek(sValue).invoke(); } else { milis = Long.parseLong(sValue); } zwróć milis; } catch (NumberFormatException e) { LOGGER.warn("Wyjątek formatu liczb", e); } zwróć 0; } Wszystkie metody ExtractXXX są zdefiniowane jako `statyczne` klasy wewnętrzne. Na przykład jak poniżej - private static class ExtractHour { private String sValue; public ExtractHour(String sValue) { this.sValue = sValue; } public long invoke() { long millis; millis = (long) (Double.parseDouble(sValue.substring(0, sValue.length() - 1)) * 60 * 60 * 1000); zwrot mili; } } * * * ## UPDATE 1 Zamierzam ustatkować się z mieszanką sugestii, aby zadowolić gościa od Sonar. Zdecydowanie miejsce na ulepszenia i uproszczenia. Guava `Funkcja` to tutaj po prostu niechciana ceremonia. Chciałem zaktualizować pytanie o aktualny stan. Tutaj nic nie jest ostateczne. Przelej swoje myśli proszę.. public class DurationParse { private static final Logger LOGGER = LoggerFactory.getLogger(DurationParse.class); prywatne statyczne końcowe Map<String, Function<String, Long>> MULTIPLIERS; prywatny statyczny końcowy Pattern STRING_REGEX = Pattern.compile("^(\\d+)\\s*(\\w+)"); static { MNOŻNIKI = new HashMap<>(7); MULTIPLIERS.put("S", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractSecond(input).invoke(); } }); MULTIPLIERS.put("s", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractInSecond(input).invoke(); } }); MULTIPLIERS.put("ms", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractMillisecond(input).invoke(); } }); MULTIPLIERS.put("m", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractInMinute(input).invoke(); } }); MULTIPLIERS.put("H", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractHour(input).invoke(); } }); MULTIPLIERS.put("d", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractDay(input).invoke(); } }); MULTIPLIERS.put("w", new Function<String, Long>() { @Nullable @Override public Long apply(@Nullable String input) { return new ExtractWeek(input).invoke(); } }); } public static long parseTimeValue(String sValue) { if (isNullOrEmpty(sValue)) { return 0; } Matcher matcher = STRING_REGEX.matcher(sValue.trim()); if (!matcher.matches()) { LOGGER.warn(String.format("%s to nieprawidłowy czas trwania, zakładając 0ms", sValue)); zwróć 0; } if (MULTIPLIERS.get(matcher.group(2)) == null) { LOGGER.warn(String.format("%s jest nieprawidłową konfiguracją, zakładając 0ms", sValue)); zwróć 0; } return MULTIPLIERS.get(matcher.group(2)).apply(matcher.group(1)); } private static class ExtractSecond { private String sValue; public ExtractSecond(String sValue) { this.sValue = sValue; } public long invoke() { long millis; mili = Long.parseLong(sValue); zwrot mili; } } private static class ExtractMillisecond { private String sValue; public ExtractMillisecond(String sValue) { this.sValue = sValue; } public long invoke() { long millis; milis = (długi) (Double.parseDouble(sValue)); zwrot mili; } } private static class ExtractInSecond { private String sValue; public ExtractInSecond(String sValue) { this.sValue = sValue; } public long invoke() { long millis; milis = (długi) (Double.parseDouble(sValue) * 1000); zwrot mili; } } private static class ExtractInMinute { private String sValue; public ExtractInMinute(String sValue) { this.sValue = sValue; } public long invoke() { long millis; milis = (długi) (Double.parseDouble(sValue) * 60 * 1000); zwrot mili; } } private static class ExtractHour { private String sValue; public ExtractHour(String sValue) { this.sValue = sValue; } public long invoke() { long millis; milis = (długi) (Double.parseDouble(sValue) * 60 * 60 * 1000); zwrot mili; } } private static class ExtractDay { private String sValue; public ExtractDay(String sValue) { this.sValue = sValue; } public long invoke() { long millis; milis = (długi) (Double.parseDouble(sValue) * 24 * 60 * 60 * 1000); zwrot mili; } } private static class ExtractWeek { private String sValue; public ExtractWeek(String sValue) { this.sValue = sValue; } public long invoke() { long millis; milis = (długi) (Double.parseDouble(sValue) * 7 * 24 * 60 * 60 * 1000); zwrot mili; } } } * * * ## UPDATE 2 Chociaż dodałem swoją aktualizację, jest ona tylko tyle warta czasu. Mam zamiar iść dalej, ponieważ Sonar teraz nie narzeka. Nie martw się zbytnio i akceptuję odpowiedź mattnz, ponieważ jest to droga i nie chcę dawać złego przykładu tym, którzy wpadną na to pytanie. Konkluzja -- Nie przesadzaj z inżynierią ze względu na Sonar (lub Half Baked Project Manager) narzeka na CC. Po prostu zrób to, co warte jest grosza za projekt. Dziękuje za wszystko.


title: Czy dobrze napisana dokumentacja jest wystarczającym powodem do nauki języka programowania?

text: Obecnie uczę się Pythona, który nie był częścią mojego programu studiów. W wywiadzie zapytano mnie, dlaczego wybrałem Pythona i odpowiedziałem, że jest łatwy do nauczenia, a dokumentacja jest bardzo dobrze napisana. Ankieter nie odpowiedział, czy to wystarczający powód. Wyglądał na przekonanego, ale nie mam pewności. Czy dobrze napisana dokumentacja i łatwość nauki to wystarczający powód, aby wybrać język skryptowy? A może powinienem był bardziej szczegółowo opisać dostępność bibliotek Pythona i większą bazę użytkowników Pythona? Tylko uwaga. Python nie był wymagany do tego zadania. Firma pracowała nad Rubinami na szynach. Python był w moim CV i myślę, że ankieter chciał tylko wiedzieć, jakie rozważania poczyniłem jako świeższy przy wyborze języka programowania.


title: SaaS / PaaS / IaaS / HaaS

text: Przeczytałem: * Warunki IaaS, PaaS i SaaS jasno wyjaśnione i zdefiniowane oraz * Przetwarzanie w chmurze – demistyfikacja SaaS, PaaS i IaaS I mam 2 pytania: 1. Czy Google App Engine jest uważany za PaaS czy IaaS? 2. Czy HaaS jest podzbiorem IaaS, czy naprawdę HaaS jest tylko inną nazwą IaaS?


title: Jak udokumentować projekt zorientowany obiektowo w tekście?

text: W moim następnym projekcie zamierzam udokumentować mój projekt zorientowany obiektowo prostym tekstem, zanim przeskoczę do pistoletu, aby go zakodować. Chcę to zrobić z dwóch powodów. 1. Chcę dobrze przemyśleć mój projekt i ewentualnie kilkakrotnie go poprawić. 2. Nie zdecydowałem dokładnie, w jakim języku chcę zaimplementować swój projekt. Szukam konwencji, aby zarysować mój projekt prostym tekstem, zamiast diagramu UML. Lubię wygodę tekstu. Mogę kontrolować wersję i łatwo umieścić ją na blogu lub wiki, aby ją udostępnić. Myślę o czymś zwięzłym, np. jak możesz kodować w Pythonie. Jednak chcę, aby reprezentacja była niezależna od języka. Rozejrzałem się po Internecie, ale nic nie znalazłem. Najbliższy byłby prawdopodobnie sposób definiowania właściwości i metod w polu reprezentującym klasę w modelu UML. **Aktualizacja:** chciałem tylko wyjaśnić „w tekście”. Moim celem jest stworzenie zarysu modelu obiektowego na wiki github. Wyobrażam sobie, że oprócz kodu jest to rodzaj projektu open source. W ten sposób mogę utworzyć stronę Wiki dla każdej jednostki i zidentyfikować relacje za pomocą linków i formatowania itp. Jednak chciałem uzyskać sugestie, jak nakreślić specyfikację jednostki na jej stronie.


title: Jak zapewnić użytkownikom, że strona internetowa i hasła są bezpieczne?

text: Na wiarygodnych stronach internetowych zawsze widzę twierdzenia takie jak „Wszystkie dane są zaszyfrowane” lub „Wszystkie hasła są zaszyfrowane przy użyciu szyfrowania 128-bitowego” itp. Jednak nigdy nie spotkałem się z twierdzeniami typu „Wszystkie hasła są zaszyfrowane”. Na mojej stronie będę przechowywać wszystkie hasła użytkowników w bazie danych po użyciu SHA-512 (najprawdopodobniej) haszowania z losową solą. Chcę dodać fragment zapewniający użytkowników, że ich hasła są bezpieczne, więc nie zniechęcą ich do korzystania z mojej witryny, ponieważ wymaga ona hasła. Chcę, aby użytkownicy czuli się bezpiecznie, ale nie sądzę, że wszyscy wiedzą, czym jest haszowanie. MOJE PYTANIE: Czy w porządku jest przesłanie komunikatu, że „Wszystkie hasła są zaszyfrowane i bezpieczne”, ponieważ nie sądzę, aby przeciętny użytkownik wiedział, jaka jest różnica między haszowaniem a szyfrowaniem, i prawdopodobnie będzie czuł się bezpiecznie tylko dlatego, że widzi słowo komfortu „szyfrowanie”? Czy jest jakaś alternatywna wiadomość, którą powinienem podać? Na marginesie, jestem nowy w szyfrowaniu i haszowaniu haseł i zastanawiałem się, czy na razie byłoby to wystarczająco bezpieczne, gdy uruchamiam moją witrynę. Nie chcę mówić użytkownikom, że jest to bezpieczne, jeśli tak nie jest. Wszelkie informacje byłyby bardzo mile widziane. Dziękuję.


title: Używam JSON i degraduję z wdziękiem, więc jak zapobiec duplikowaniu kodu?

text: W Stack Overflow jest kilka pytań dotyczących tego, czy AJAX powinien zwracać JSON lub HTML, a większość wydaje się zgadzać, że najlepiej jest zwrócić JSON ze względu na szybkość. Oznacza to jednak, że jeśli zgrabnie się degraduję, będę miał zduplikowany kod, ponieważ generuję ten sam znacznik zarówno w PHP, jak i JavaScript. Hipotetyczny przykład: strona internetowa zawiera listę linków do opowiadań. Jeśli użytkownik korzysta z JavaScript, kliknięcie jednego z tych łączy wczytuje historię bez odświeżania strony. Odbywa się to za pomocą żądania AJAX, które zwróciło plik JSON z informacjami o historii. JavaScript generuje znaczniki dla historii. Jeśli użytkownik nie ma JavaScript, kliknięcie tego samego linku powoduje ponowne załadowanie strony z załadowaną historią. PHP generuje znaczniki dla historii. Czy istnieje rozwiązanie umożliwiające korzystanie z formatu JSON i degradację z wdziękiem bez duplikowania kodu?


title: Zamieszanie GPL (popełniłem błąd)

text: Mam projekt, który stworzyłem na licencji GPL (jestem właścicielem praw autorskich). Błąd, który popełniłem, polega na tym, że zdecydowałem się przejść na zamknięte źródło, robiąc to, usunąłem dostęp do pobierania open source i usunąłem projekt z sourceforge. Trzecia strona weszła i odtworzyła projekt na sourceforge (pod tą samą nazwą) z ostatnim wydaniem GPL i planami modyfikacji oprogramowania. (Dla dostępu do pobrania) Czy GPL wymaga, aby jakieś gałęzie projektu pod nową nazwą? http://www.gnu.org/licenses/gpl-faq.html#WhyDoesTheGPLPermitUsersToPublishTheirModifiedVersions „Czasami proponuje się kontrolę nad zmodyfikowanymi wersjami, aby zapobiec pomyłkom między różnymi wersjami wprowadzanymi przez użytkowników. problem.Wiele wersji Emacsa zostało stworzonych poza Projektem GNU, ale użytkownicy mogą je odróżnić.GPL wymaga, aby twórca wersji umieścił na niej swoje imię i nazwisko, aby odróżnić ją od innych wersji i chronić reputację inni opiekunowie UPDATE Strona trzecia i ja postanowiliśmy pozostawić stronę projektu na miejscu i przekierować użytkowników na nową stronę dla wersji open source.W ten sposób stara strona służy do powiadamiania byłych użytkowników o statusie projektu.


title: Gdzie należy postawić granicę między testami jednostkowymi a testami integracyjnymi? Czy powinny być oddzielne?

text: Mam mały framework MVC, nad którym pracowałem. Jego baza kodu zdecydowanie nie jest duża, ale nie jest to już tylko kilka klas. W końcu zdecydowałem się zaryzykować i zacząć pisać dla niego testy (tak, wiem, że powinienem był to robić cały czas, ale do tej pory API było bardzo niestabilne) W każdym razie, moim planem jest uczynienie go niezwykle łatwym do testowania , w tym testy integracyjne. Przykładowy test integracji przebiegałby w następujący sposób: Fałszywy obiekt żądania HTTP -> framework MVC -> obiekt odpowiedzi HTTP -> sprawdź, czy odpowiedź jest poprawna Ponieważ to wszystko jest wykonalne bez żadnego stanu lub specjalnych narzędzi (automatyzacja przeglądarki itp.), mógłbym faktycznie rób to z łatwością dzięki regularnym frameworkom testów jednostkowych (ja używam NUnit). Teraz wielkie pytanie. Gdzie dokładnie powinienem postawić granicę między testami jednostkowymi a testami integracyjnymi? Czy powinienem testować tylko jedną klasę na raz (w miarę możliwości) za pomocą testów jednostkowych? Ponadto, czy testy integracyjne powinny być umieszczane w tym samym projekcie testowym, co mój projekt testów jednostkowych?


title: DDD: usługa zawiera dwa repozytorium

text: Czy to poprawny sposób, aby mieć dwa repozytorium w jednej usłudze i czy będzie to usługa aplikacji lub domeny? Załóżmy, że mam obiekt Passenger, który powinien zawierać obiekt Passport (identyfikator rządu). Pobieram pasażera z PassengerRepository. PassengerRepository tworzy żądanie do serwera i pobiera dane (json), a następnie analizuje otrzymane dane i przechowuje w repozytorium. Pomyliłem się, ponieważ chcę przechowywać Passport jako Entity i umieścić go w PassportRepository, ale wszystkie informacje o haśle zawierają wewnątrz json niż otrzymałem powyżej. Myślę, że powinienem stworzyć PassengerService, który będzie zawierał PassengerRepository i PassportRepository z kilkoma metodami, takimi jak `removePassport, addPassport, getAllPassenger` itd. **UPDATE:** Więc myślę, że lepszym sposobem jest reprezentowanie Passport jako VO i przechowywanie wszystkich paszporty w agregacie Pasażerów. Jest jednak inne pytanie: gdzie mam umieścić metody (metody wywołujące serwer api) do zarządzania paszportem pasażera. Myślę, że lepsze miejsce jest w agregacie Pasażerów.


title: Stałe i duże O

text: Czy stałe są zawsze nieistotne, nawet jeśli są duże? Na przykład to O(10^9 * N) == O(N) ?


title: Po co tworzyć nowy język MDX zamiast rozszerzać SQL?

text: Mam wieloletnie doświadczenie z SQL, ale ostatnio zacząłem pracować z technologiami datawarehouse i OLAP: budowaniem tabel faktów i wymiarów, które następnie są odpytywane za pomocą MDX (MultiDimensional eXpressions). Problem polega na tym, że MDX działa z zupełnie inną logiką niż SQL i jest to zupełnie nowa krzywa uczenia się nawet dla kogoś z silnym doświadczeniem SQL. Tak, MDX pozwala robić rzeczy, które byłyby trudne lub prawie niemożliwe przy użyciu zwykłego SQL. Ale czasami frustrujące jest spędzanie godzin przy MDX, aby zrobić coś, co można osiągnąć w ciągu kilku minut przy użyciu SQL (ok, możesz mi powiedzieć RTFM ...). Ale po co zawracać sobie głowę tworzeniem zupełnie innego języka, skoro można budować na SQL, rozszerzać go o funkcje potrzebne aplikacjom OLAP?


title: Jak mogę złożyć wniosek o „zarządzanie zależnościami”?

text: Obecnie staram się zaadaptować zarządzanie zależnościami dla kompilacji (ala Maven, Ivy, NuGet) i stworzyć wewnętrzne repozytorium dla modułów współdzielonych, których mamy kilkanaście w całym przedsiębiorstwie. Jakie są główne zalety tej techniki budowania? Te, które mam do tej pory: * Ułatwiają proces dystrybucji i importu modułów współdzielonych, zwłaszcza uaktualnień wersji. * Wymaga dokładnego udokumentowania zależności współdzielonych modułów. * Usuwa współdzielone moduły z kontroli źródła, przyspieszając i upraszczając ewidencjonowanie/ewidencjonowanie (jeśli masz aplikacje z ponad 20 bibliotekami, jest to prawdziwy czynnik). * Zapewnia większą kontrolę lub świadomość tego, jakie biblioteki stron trzecich są używane w Twojej organizacji. Czy są jakieś punkty sprzedaży, których mi brakuje? Czy są jakieś badania lub artykuły podające wskaźniki poprawy?


Czy Twoja firma ma pisemną politykę dotyczącą udziału w projektach open source? Wnosimy styl „nie pytaj, nie mów”, ale nadszedł czas, aby coś zapisać. Byłbym wdzięczny zarówno za pełny tekst polityki, jak i fragmenty. **Aktualizacja** : poczyniliśmy pewne postępy od czasu, gdy zadałem to pytanie i teraz mamy taką politykę - przeczytaj to.


title: Przerwa w przypadku domyślnej obudowy w przełączniku

text: Jestem trochę zakłopotany tym, czy dodać `break` po ostatnim przypadku, często `default`. switch (typ) { case 'produkt': // Przerwij zachowanie; default: // Wykonaj domyślne przerwanie zachowania; // Czy uważa się to za potrzebne? } Jedynym celem `break` jest w moim rozumieniu powstrzymanie kodu przed uruchomieniem przez resztę przypadku `switch`. Czy w takim razie uważa się za bardziej logiczne, aby „przerwa” była ostatnia ze względu na spójność, czy też pominęła ją z powodu „przerwy”, która nie ma żadnego zastosowania funkcjonalnego? Oba są moim zdaniem logiczne na różne sposoby. Można to do pewnego stopnia porównać z zakończeniem pliku `.php` na `?>`. Nigdy nie kończę na `?>` głównie ze względu na ryzyko wypisania spacji, ale można by argumentować, że logiczne byłoby zakończenie pliku.


title: Czy narzędzie do zmniejszania rozmiaru plików Jar wpływa na wydajność?

text: Słyszałem, że zmniejszanie Jar ProGuard wpływa na wydajność aplikacji. Czy to prawda? A jeśli tak, to o ile wolniej Słój kurczy się w porównaniu z nieskurczonym?


title: Dropbox jako narzędzie kontroli wersji

text: Kilku znajomych mówi mi, że Dropbox może być używany jako narzędzie do kontroli wersji. Zawsze korzystałem z SVN lub Gita. Rozglądałem się po Dropbox i nie mogłem znaleźć niczego, co mówiłoby mi o cechach takich jak łączenie, rozwidlenie i innych cechach kompletnego systemu VCS. Czy ktoś może mi wskazać, czego mi brakuje.


title: Zostajesz „DBA aplikacji”?

text: Muszę przyznać, że do niedawna nie wiedziałem, że istnieje coś takiego jak „System DBA” i „Aplikacja DBA”. Obecnie jestem administratorem aplikacji/systemu dla dużego CMS. Chciałbym kontynuować ścieżkę/szkolenie, które ostatecznie doprowadziłoby do tej roli „DBA aplikacji”, a ostatecznym celem jest zrozumienie, jak najlepiej korzystać z aplikacji i baz danych razem. Nasze aplikacje działają na Oracle 10g. Dobrze sobie radzę z podstawowym SQL (wybiera, wstawia, aktualizuje i potrafię wymyślić sprzężenie lub dwa itp.), ale obecnie większość naszej obsługi bazy danych (np. generowanie i interpretacja raportów AWR itp.) pochodzi z DBA systemu. Natknąłem się na kilka postów, które mówiły o zostaniu DBA, ale byłbym wdzięczny za wszelkie porady i wskazówki dotyczące roli „Aplikacji DBA”.


title: Jak przeprowadzić wywiad z kimś, kogo dobrze znasz?

text: Jak byś przeprowadził wywiad z kimś, kogo dobrze znasz lub z kimś, z kim możesz się nawet przyjaźnić? Co jeśli znasz już ich mocne i słabe strony. Wolałbym uniknąć tej sytuacji, delegując to zadanie komuś innemu, ale co, jeśli nie ma takiej możliwości. Czuję, że w grę wchodzi zbyt wiele osobistych uczuć i prawie niemożliwe jest bycie bezstronnym. Jeśli byłeś w podobnych sytuacjach, jak sobie z nimi radziłeś?


title: Budujesz stronę internetową, chcesz używać java

text: Chciałbym stworzyć prostą stronę internetową, która jest zasadniczo małą grą. Naciśnięcia klawiszy mają zostać przetworzone i wysłane na serwer (już zdobyty i powinien obsługiwać SQL i JSP, jak sądzę), który następnie jest tłumaczony na lokalizację i zapisywany w DB. Zapytania SQL mają być używane do pobierania tych lokalizacji i pisania do innych klientów podłączonych do witryny. Ich strona ma zostać zaktualizowana o te lokalizacje. Mam praktyczną wiedzę na temat Java, jQuery/Ajax, SQL i JavaScript, ale nie jestem zaznajomiony z JSP i tym, jak wszystko się łączy. Jestem również świadomy paradygmatu MVC. Czy w przypadku mojego pomysłu na małą grę te technologie będą działać? Czy zastanawiam się nad tym i mogę znacznie ułatwić wdrożenie? Jaki może być dobry samouczek lub przykład do przestudiowania? EDYCJA: Właśnie zostałem poinformowany, że nie będę mógł używać plików WAR na serwerze. Nie przepadam za php i naprawdę nie lubię z nim programować, czy nadal mogę używać Javy?


title: Jaki jest najlepszy sposób tworzenia HTML w kodzie C#?

text: Mam przekonanie, że znaczniki powinny pozostać w znacznikach, a nie w kodzie. Doszedłem do sytuacji, w której myślę, że budowanie kodu HTML w kodzie z tyłu jest dopuszczalne. Chciałbym mieć pewien konsensus co do tego, jakie są lub powinny być najlepsze praktyki. Kiedy dopuszczalne jest budowanie kodu HTML w kodzie? Jaka jest najlepsza metoda tworzenia tego html? (przykład: Strings, StringBuilder, HTMLWriter itp.)


title: Jak śledzić zadania produkcyjne

text: Zarządzam zespołem programistów (5 osób) utrzymujących kilka modułów w dużym projekcie. Oprócz kodowania wykonujemy również produkcyjne zadania operacyjne (takie jak sprzątanie serwera, śledzenie zaległości wsadowych) Te zadania są wykonywane codziennie, wykonywane przez 1 osobę i są rotowane co tydzień Problem polega na tym: Te zadania są rutynowe, ale ja nie potrafię wymyślić praktycznego sposobu na zapewnienie, że osoba robi to, co powinna. Pomyślałem o użyciu arkuszy kalkulacyjnych do śledzenia lub w zakresie robienia papierowej listy kontrolnej, którą osoba dyżurna będzie musiała fizycznie podpisać. Chcę tylko, żeby facet na służbie pamiętał i wykonywał każdą codzienną pozycję. Co działa w Twoim projekcie?


title: Czym różni się „przetwarzanie w chmurze” od „klienta-serwera”?

text: Obserwując dyrektora generalnego nowej firmy zajmującej się przetwarzaniem w chmurze, opisującego swoją firmę w programie telewizyjnym poświęconym finansom, powiedział coś w stylu: „Przetwarzanie w chmurze jest lepsze od staromodnego przetwarzania klient-serwer”. Teraz jestem zdezorientowany. Czy ktoś może wyjaśnić, co oznacza „przetwarzanie w chmurze” w przeciwieństwie do klient-serwer? O ile rozumiem, przetwarzanie w chmurze jest bardziej modelem usług sieciowych, takim, że nie posiadam ani nie utrzymuję fizycznego sprzętu. „Chmura” to wszystko, co jest na zapleczu. Ale nadal mogę mieć aplikację, która komunikuje się z tym środowiskiem „chmury”. A jeśli uruchomię witrynę internetową, która przedstawi formularz, który użytkownik wypełni, naciśnie przycisk na stronie i zwróci raport, który został wygenerowany przez serwer sieciowy, czy to nie to samo, co przetwarzanie w chmurze? A czy nie uznalibyście mojej przeglądarki internetowej za „klienta”? Proszę zauważyć, że moje pytanie dotyczy konceptu „przetwarzania w chmurze” w odniesieniu do „klient-serwer”. Przepraszamy, jeśli jest to nieodpowiednie pytanie dla tej witryny; to ten najbliżej we wszechświecie Stack i jest to mój pierwszy raz tutaj. Jestem starym zegarkiem, który programuje od czasów mainframe'ów w późnych latach 70-tych.


title: Jak przekonać mój zespół, że specyfikacja wymagań jest zbędna, jeśli przyjmujemy historie użytkowników?

text: Planujemy adaptację historii użytkowników, aby uchwycić „intencje” interesariuszy w sposób lekki, a nie ciężki SRS (specyfikacje wymagań oprogramowania). Wydaje się jednak, że chociaż rozumieją wartość historii, nadal istnieje chęć „przekształcenia” historii na język podobny do SRS ze wszystkimi atrybutami, priorytetami, danymi wejściowymi, wynikami, źródłem, przeznaczeniem itp. Historie użytkowników „ wyeliminować potrzebę formalnego SRS, takiego jak artefakt, więc jaki jest sens w posiadaniu SRS? Jak mam przekonać mój zespół (którzy, nawiasem mówiąc, wszyscy są bardzo wykwalifikowanymi specjalistami od CS - zarówno z wykształcenia, jak i praktyki), że SRS zostałby "wyeliminowany", gdybyśmy zaadaptowali historie użytkowników do uchwycenia wymagań funkcjonalnych systemu? (NFR itp. również mogą zostać przechwycone, ale nie to jest celem pytania). Oto mój argument dotyczący przepływu pracy: Przechwyć początkowe wymagania jako historyjki użytkownika, a następnie opracuj je w przypadkach użycia (które muszą być udokumentowane na niskim poziomie, tj. Opisz interakcje z prototypami/makietami interfejsu użytkownika i stanowią dostarczalny post zastosowanie). W ten sposób przejście od historii użytkowników do przypadków użycia, a nie historii użytkowników do SRS i przypadków użycia. W jaki sposób obecnie rejestrujecie historie użytkowników w swoim miejscu pracy (jeśli w ogóle) i jak sugerujecie, abym „złożył argumentację” za brakiem SRS w obecności historyjek użytkowników?


title: Równowaga między obciążeniem pracą a pomocą nowo zatrudnionym

text: Jestem w swojej pierwszej pracy od około 2 miesięcy i zacząłem zauważać, że istnieje delikatna równowaga między obciążeniem pracą a pomocą nowo zatrudnionym. Ponieważ managmanet wywiera dużą presję, aby naprawić błędy i rozwiązać jak najwięcej problemów klientów, wszyscy w zespole wydają się być bardzo skoncentrowani na swoich zaległościach w pracy, zamiast pomagać nowo zatrudnionym w nauce. Nowo zatrudnieni mogą zadawać pytania, a czasami prosimy programistę, aby usiadł i nam pomógł, ale często otrzymujemy niejasną odpowiedź, którą zrozumie tylko weteran produktu, ponieważ jest zbyt zajęty swoim zadaniem. Rozumiem, że nowo zatrudniony musi również zachować równowagę. Czasami nowo zatrudniony zajmuje 3 dni, aby zbadać i naprawić coś, co weteran mógł to zrobić w 20 minut. Nowozatrudnieni muszą wykazać się wysiłkiem w nauce produktu i bazy kodu. Bez prostego zmniejszania obciążenia pracą weteranów, jak możesz zachować równowagę między pomaganiem nowo zatrudnionym a kontynuowaniem pracy nad swoimi zaległościami w rozsądnym tempie?


title: Wzorzec projektowy do budowania budżetu

text: Więc przyjrzałem się wzorcowi konstruktora, abstrakcyjnym interfejsom, innym wzorcom projektowym itp. - i myślę, że zastanawiam się nad prostotą tego, co próbuję zrobić, więc proszę was o pomoc albo zarekomenduję wzorzec projektowy, którego powinienem użyć, albo styl architektoniczny, którego nie znam, który pasuje do mojego zadania. Mam więc jeden model, który reprezentuje „Budżet” w moim kodzie. Na wysokim poziomie wygląda to tak: public class Budżet { public int Id { get; ustawić; } public List<MonthlySummary> Miesiące { get; ustawić; } public float SavingsPriority { get; ustawić; } public float DebtPriority { get; ustawić; } public List<Savings> SavingsCollection { get; ustawić; } public UserProjectionParameters UserProjectionParameters { get; ustawić; } public Lista<Dług> Windykacja należności { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } public List<Wydatki> Wydatki { get; ustawić; } public List<Dochód> IncomeCollection { get; ustawić; } public bool Autozapis { get; ustawić; } publiczny dziesiętny AutoSaveAmount { get; ustawić; } public FundType AutoSaveType { get; ustawić; } public dziesiętny TotalExcess { get; ustawić; } public dziesiętna Minimum Konta { get; ustawić; } } Zagłębianie się w szczegóły dotyczące niektórych właściwości nie powinno być konieczne, ale jeśli macie jakieś pytania na ich temat, wypełnię dla Was więcej. Teraz próbuję stworzyć kod, który buduje jedną z tych rzeczy na podstawie zestawu `BudgetBuildParameters`, które użytkownik utworzy i dostarczy. Będzie wiele typów tych parametrów. Na przykład na stronie głównej witryny będzie sekcja przykładowa, w której możesz szybko zobaczyć, jak wyglądają Twoje liczby, więc byłyby one znacznie prostszym zestawem `SampleBudgetBuildParameters`, a następnie powiedz, gdy użytkownik zarejestruje się i chce utworzyć w pełni wypełniony out `Budget` używając znacznie więcej informacji w `DebtBudgetBuildParameters`. Teraz wiele z tych kompilacji będzie używało podobnego kodu do niektórych zadań, ale może chcieć _również_ sprawdzić stan `DebtCollection` użytkowników podczas formułowania miesięcznego raportu wydatków, gdzie jako `Budżet`, który koncentruje się tylko na oszczędnościach, może nie chcieć. Chciałbym zredukować powielanie kodu (oczywiście) tak bardzo, jak to możliwe, ale w mojej głowie każdy sposób, w jaki mogę to zrobić, wymagałby użycia bazowego `BudgetBuilderFactory`, aby zwrócić poprawny konstruktor do wywołującego, a następnie utworzenia powiedz `SimpleBudgetBuilder`, który dziedziczy po `BudgetBuilder` i umieszcza wszystkie zduplikowane kody w `BudgetBuilder`, a `SimpleBudgetBuilder` zajmuje się jego własnymi sprawami. Problem polega na tym, że wiele unikalnych przypadków jest unikalnych dla 2/4 konstruktorów, więc oczywiście będzie tam zduplikowany kod _gdzieś_, jeśli to zrobię. Czy ktoś może pomyśleć o lepszym sposobie wyjaśnienia tego rozwiązania, które może być podobne do mojego lub nie, albo zupełnie innym wzorcem lub sposobem myślenia tutaj? Bardzo to doceniam.


title: Jakie są zalety sposobu „oszczędzania pamięci” w systemie Android — jawne przekazywanie wszędzie obiektów Context?

text: Okazało się, że to pytanie nie jest dla mnie łatwe do sformułowania, ale spróbujmy. W systemie Android prawie każdy obiekt interfejsu użytkownika zależy od „kontekstu” i ma zdefiniowany czas życia. Android może również w dowolnym momencie niszczyć i odtwarzać obiekty interfejsu użytkownika, a nawet cały proces aplikacji i tak dalej. To sprawia, że kodowanie operacji asynchronicznych nie jest proste. (i czasami _bardzo_ kłopotliwe) Ale nigdy nie widziałem prawdziwego wyjaśnienia, dlaczego to się robi w ten sposób? Istnieją inne systemy operacyjne, w tym systemy mobilne (na przykład iOS), które nie robią takich rzeczy. Więc jakie są wygrane Androida (nietrwałe obiekty UI i konteksty)? Czy to pozwala aplikacjom na Androida zużywać znacznie mniej pamięci RAM, czy może są inne korzyści?


title: Czy tłumienie błędów jest dopuszczalne w roli mechanizmu logicznego?

text:
Pojawiło się to podczas przeglądu kodu w pracy w kontekście operatora PHP i `@`. Jednak chcę spróbować zachować to w bardziej ogólnej formie, ponieważ kilka pytań na ten temat, które znalazłem w SO, ugrzęzło w szczegółach technicznych. Uzyskiwanie dostępu do pola tablicy, które nie jest ustawione, powoduje wyświetlenie komunikatu o błędzie i jest zwykle obsługiwane przez następującą logikę (pseudo kod): jeśli wartość pola jest ustawiona wartość pola wyjściowego Kod robił to tak: zacznij ignorować błędy wartość pola wyjściowego przestań ignorować błędy Uzasadnieniem tego ostatniego było to, że w tym konkretnym przypadku jest to bardziej zwarty i czytelny kod. Uważam, że te korzyści nie uzasadniają nadużywania (IMO) mechaniki języka. * Czy taki kod jest "sprytny" w zły sposób? * Czy odrzucenie ewentualnego błędu (z jakiegokolwiek powodu) jest akceptowalną praktyką nad jawną obsługą go (nawet jeśli prowadzi to do bardziej rozbudowanego i/lub intensywnego kodu)? * Czy operatorzy programujący mogą przekraczać granice zamierzonego użycia (tak jak w tym przypadku używanie obsługi błędów do sterowania wyjściem)? **Edytuj** Chciałem, aby był bardziej ogólny, ale omawiany kod wyglądał następująco: if (isset($array['field'])) { echo '
' . $tablica['pole'] . '
'; } a następujący przykład: echo '
' . @$tablica['pole'] . '
';


title: Nazywasz predykat: „warunek wstępny” lub „warunek wstępny_is_met”?

text: W mojej strukturze aplikacji sieci Web każda strona może mieć warunek wstępny, który musi zostać spełniony, zanim będzie można ją wyświetlić użytkownikowi. Na przykład, jeśli użytkownik 1 i użytkownik 2 grają w tę i z powrotem grę fabularną, użytkownik 2 musi poczekać, aż użytkownik 1 zakończy swoją turę, zanim będzie mógł wykonać swoją turę. W przeciwnym razie użytkownikowi zostanie wyświetlona strona oczekiwania. Jest to zaimplementowane za pomocą predykatu: def precondition(self): return user_1.completed_turn Najprostszą nazwą dla tego interfejsu API jest `warunek wstępny`, ale prowadzi to do kodu typu `if warunek wstępny(): ...`, co nie jest tak naprawdę oczywiste . Wydaje mi się, że bardziej trafne jest nazywanie go `precondition_is_met()`, ale nie jestem tego pewien. Czy istnieje najlepsza praktyka dotycząca nazewnictwa takich metod?


title: Czy praca z dobrym kodem czyni cię lepszym programistą, czy też sprawia, że stajesz się miękki?

text: Czy praca z dobrym kodem czyni cię lepszym programistą, czy też sprawia, że jesteś miękki i niechętny do pracy z czymkolwiek _gorszym_ niż kod wysokiej jakości?


title: Jak przetestować testy?

text: Testujemy nasz kod, aby był bardziej poprawny (w rzeczywistości _mniej prawdopodobne jest, że będzie niepoprawny_ ). Jednak testy są również kodem – mogą również zawierać błędy. A jeśli twoje testy zawierają błędy, nie poprawiają one twojego kodu. Przychodzą mi do głowy trzy możliwe typy błędów w testach: 1. Błędy logiczne, gdy programista źle zrozumiał zadanie, a testy robią to, co według niego powinny zrobić, co jest błędne; 2. Błędy w bazowym frameworku testowym (np. nieszczelna abstrakcja szydercza); 3. Błędy w testach: test działa nieco inaczej niż myśli programista. Błędy typu (1) wydają się niemożliwe do uniknięcia (chyba że programista po prostu... stanie się mądrzejszy). Jednak (2) i (3) mogą być wykonalne. Jak radzisz sobie z tego typu błędami? Czy masz jakieś specjalne strategie, aby ich uniknąć? Na przykład, czy piszesz jakieś specjalne „puste” testy, które sprawdzają tylko założenia autora testu? Jak podchodzisz do debugowania uszkodzonego przypadku testowego?


title: Dobry czy zły kod? Lub „tajemny powód”?

text: Myślę, że ten kod: if(file_exists("amodule.inc.php")) require_once("amodule.inc.php"); jest _wprowadzający w błąd_ ze względu na użycie parametru require_once. Myślę, że - aby zachować logikę i "sformułowanie" w jednej linii - "include_once" byłoby odpowiednie (gdzie jest wiele argumentów, aby w ogóle nie używać "if", ale chciałbym się skoncentrować na "wymagaj vs dołącz" ). Jeśli chodzi o moje zrozumienie, JEDYNA różnica między „wymagać” i „uwzględniać” polega na tym, że „wymaganie ma konsekwencję (zatrzymanie), jeśli plik nie istnieje, a uwzględnianie działa tylko z ostrzeżeniem. Ale w tym przykładzie, jeśli plik nie istnieje, kod require_once i tak nie zostanie wykonany.W związku z tym „wymaganie” _wprowadza w błąd_ z mojego punktu widzenia.Z powierzchownego punktu widzenia można by argumentować, że powyższy kod używający require_once i if(file_exists("amodule.inc. php")) include_once("amodule.inc.php"); są "identyczne", co moim zdaniem nie jest. Ponieważ: "Szorstka" analiza (jak automatyczne sprawdzenie projektu) wygeneruje komunikat, że "amodule.inc.php" jest ważnym plikiem projektu, którego kod pokazuje, że nie jest. Ponadto w (mało prawdopodobne) przypadku, że między wykonaniem instrukcji "if" a instrukcją require_once, plik może być usunięty. Wtedy, co gorsza, kod NIE wykonałby się zgodnie z oczekiwaniami (aby działał bez obciążenia), ale zrezygnował. tak tam się kłócić?


title: REST API po stronie backendu i framework MVC Javascript po stronie klienta

text: Buduję sieć społecznościową online. Skończyłem pisanie usługi RESTful API przy użyciu Django. Spowoduje to zwrócenie tylko odpowiedzi JSON (po stronie serwera nie zostanie wygenerowany kod HTML), aby można było użyć tej odpowiedzi JSON do tworzenia natywnych aplikacji na smartfony. Usługa API jest wspólna dla wszystkich klientów. Moje pytanie brzmi: skoro nie ma odpowiedzi HTML od strony serwera, czy frameworki JavaScript MV*, takie jak Angular / Backbone / Ember, mogą zająć się kompletnym Front-endem, już od generowania strony HTML z CSS?


title: Statystyki dotyczące szacunków czasu dla aplikacji webowej

text: Poproszono mnie o pomoc w oszacowaniu czasu potrzebnego na stworzenie aplikacji internetowej. Nie będę się zajmować faktycznym programowaniem, ale biorę udział jako "doświadczony" programista. Faktyczna praca zostanie prawdopodobnie przekazana firmie konsultingowej, ale klient (wydział uniwersytecki) chce mieć wycenę, aby mieć pojęcie, ile czasu i pieniędzy będzie potrzebne. Spróbujemy podzielić funkcje do wdrożenia, a następnie spróbujemy stworzyć coś w rodzaju ogólnego oszacowania całkowitego (chociaż Joel Spolsky twierdzi, że to nie zadziała), ale pomyślałem, że tego rodzaju aplikacje internetowe zostały zrobione setki razy i że musi być dużo doświadczenia, z którego można czerpać na jednej lub drugiej stronie wymiany stosów. ## Czy można odpowiedzieć na to pytanie: ile godzin/tygodni zazwyczaj zajmuje doświadczonemu programiście, korzystającemu z wybranego przez siebie języka i frameworka (czy to w Javie, Ruby on Rails, czy innej dość dużej technologii), aby stworzyć aplikacja internetowa, biorąc pod uwagę, że: * Jest dość standardowa, co oznacza, że istnieje baza danych, interfejs administracyjny i warstwa prezentacji dla ogółu społeczeństwa. * Jest napisany od podstaw, ale istnieją stare systemy, z których można czerpać doświadczenia. * Administratorzy (myślą, że) dość dobrze wiedzą, czego chcą. Wiem, że jest to **bardzo** niejasne, ale szukam twoich doświadczeń: (zmyślone przykłady poniżej) „ _Kupowaliśmy tego rodzaju systemy kilka razy i generalnie ich ukończenie zajmuje dwadzieścia pracowników-miesięcy._ „ ” _Używając Pythona i Django, powiedziałbym, że większość aplikacji internetowych działa w ciągu 6 miesięcy roboczych, góra._ " ## Edytuj: Trochę wyjaśnienia: * W moim pytaniu brakuje większości informacji na temat tego projektu. Klient napisał szczegółową wersję roboczą specyfikacji systemu, a także analizę wymagań opartą na opiniach użytkowników na temat starego systemu. * Chcę jeszcze raz stwierdzić, że szukam _Twoich doświadczeń_ (zobacz moje przykładowe odpowiedzi), a nie cytatu dla tego systemu. **Dziękujemy za wszystkie wnikliwe odpowiedzi!**


title: Konstruktor klonowania/kopiowania i klasa potomna

text: Chcę tylko opinii na temat tego, co uważa się za „najbardziej elegancki projekt” w takiej sytuacji. Mam obiekt, który jest niezmienny z niektórymi (rodzaj) konstruktorami kopiującymi, aby umożliwić tworzenie podobnej, ale zmodyfikowanej wersji mojego niezmiennego obiektu. Czyli coś takiego: class ImmutableObject{ Opłata opłata; Fi fi; Fo fo; public ImmutableObject(Opłata, Fi fi, Fo fo){ this.Opłata=opłata; to.fi=fi; this.fo=fo; } public ImmutableObject(ImmutableObject cloneObj, opłata){ this.fi=cloneObj.fi; this.fo=klonObiekt.fo; this.opłata=opłata; } public ImmutableObject(ImmutableObject cloneObj, Fi fi){ this.fee=cloneObj.fee; this.fo=klonObiekt.fo; this.fi=fi } public ImmutableObject(ImmutableObject cloneObj, Fo fo){ this.fi=cloneObj.fi; this.fee=cloneObj.fee; this.fo=fo; } } Rozszerzam to teraz, tworząc podklasę z dodatkowym zachowaniem: Class ImmutableChild extends ImmutableObject{ Fum fum; ImmutableChild(Opłata, Fi fi, Fo fo, Fum fum){ super(opłata, fi, fo); to.fum=fum; } Problem polega na tym, że mam kolekcję „ImmutableObjects”, która zawiera zarówno klasy oryginalne, jak i podrzędne. Kiedy próbuję je sklonować, aby uzyskać nowy obiekt z jednym zmodyfikowanym elementem Moje konstruktory kopiujące zawsze utworzą klasę typu nadrzędnego typu „ImmutableObject” i całkowicie stracą stan „fum”, jeśli faktycznie klonuję klasę podrzędną. Mogę łatwo zmienić to, aby spełnić dowolne rozwiązanie, jakie chcę, konstruktor kopiujący, metody klonowania itp. Jednak chociaż mogę uzyskać pożądane zachowanie, nie jestem pewien, co byłoby uważane za rozwiązanie zarówno eleganckie, jak i nieostre. Jaka jest najczystsza metoda pozwalająca utworzyć „klon” mojego obiektu z jedną zmodyfikowaną wartością, która działa dobrze z klasami potomnymi, które rozszerzają funkcjonalność?


title: Uzyskiwanie dostępu do 32-bitowej biblioteki DLL z procesu 64-bitowego

text: Wiem, że nie można załadować 32-bitowej biblioteki DLL do procesu 64-bitowego. Dana biblioteka DLL jest sterownikiem ODBC, który nie jest już obsługiwany (chociaż działa dobrze) i nie istnieje jego wersja 64-bitowa. Nie mam też dostępu do kodu źródłowego. Wydaje się, że nie ma gotowego sposobu "myślenia" między dwiema architekturami - jedyną opcją, o której mogę pomyśleć, jest napisanie 32-bitowego obiektu COM i zmuszenie go do zawinięcia 32-bitowej biblioteki DLL, a następnie napisz 64-bitową bibliotekę DLL, która udostępnia ten sam interfejs API, który udostępnia 32-bitowa biblioteka DLL, a następnie wypełnij lukę, serializując parametry do wywołania interfejsu API i wykorzystując funkcję marshalling danych DCOM, aby uzyskać dostęp do 32-bitowej / 64-bitowej granica. Jest to jednak dość żmudne podejście i może być dość powolne, jeśli interfejs jest „gadatliwy”. Zastanawiam się więc, czy istnieją inne sposoby rozwiązania tego problemu?


title: Czy przyszłość aplikacji internetowej będzie taka sama jak aplikacji desktopowej?

text: Zauważyłem wzrost liczby wydawanych aplikacji mobilnych, które oferują funkcje o wysokiej wartości, ale bez odpowiedniej wersji internetowej. Czytałem właśnie o nowej aplikacji medycznej na iPhone'a, która umożliwia lekarzom udostępnianie obrazów medycznych i gdyby ten pomysł powstał 5 lat temu, z pewnością byłaby to aplikacja internetowa. Teraz jest wydawany wyłącznie na iPhone'a bez żadnej alternatywy internetowej. Minęły lata, odkąd klient poprosił o aplikację desktopową, a wszystko opierało się na sieci, ale dziś wszystkie przyszłe projekty dotyczą jakiegoś rozwiązania mobilnego. Jak długo mam polecić klientom dalsze inwestowanie w aplikacje internetowe?


title: tworzenie struktury w javie i wyszukiwanie konkretnego członka

text: Im początkujący w Javie, mam następujący kod: operacje klas publicznych { public ArrayList<Integer> strumienia; public ArrayList<Integer> funkcja; public ArrayList<String> nazwa; public ArrayList<Integer> funcgroup; public ArrayList<Integer> źródło; } Przeczytałem i zrozumiałem, że klasy w Javie są porównywalne do struktur w C. W moim programie muszę uzyskać dane wejściowe od użytkownika dla nazwy i przeszukać klasę oraz podać inne pola (stream, func, funcgroup, source) jako wyjście. Moje pytanie jest podobne do Wydajny sposób na tasowanie obiektów Od pierwszej i najlepszej odpowiedzi rozumiem, że zamiast równoległych list, powinienem utworzyć pojedynczą listę, a następnie wywołać listę z tą klasą. Ale jak w takim przypadku dodać wszystkie moje elementy do różnych pól na liście? Mam już osobną `ArrayList` tych pól zebraną w innej klasie.


title: Jak radzić sobie ze współpracownikiem z „obsesyjnym zaburzeniem refaktoryzacji”

text: Mój współpracownik (który jest bardzo sprytny, ale z mocno ograniczonymi umiejętnościami interpersonalnymi) refaktoryzuje mój kod, nawet gdy jest w toku i przydzielony mi jako zadanie. Podczas gdy w pełni zgadzam się z ideą kolektywnej własności kodu, uważam to za niezwykle irytujące, ale próby powstrzymania go nie przynoszą efektów. Moja analiza jego osobowości jest taka, że uważa się za najlepszego i gdyby nie on, baza kodów byłaby w bałaganie. Dodam, że nie jestem nowicjuszem, znam swoje umiejętności i wykonuję prace wysokiej jakości. Niektóre z refaktoryzacji są rzeczywiście lepsze, większość to po prostu wprowadzenie stylu, który lubi bardziej niż mój. Ponadto ma prawie dziecinną potrzebę posiadania ostatniego słowa w każdej dyskusji i nigdy nie ma słowa pochwały za pracę wykonaną przez współpracowników. Zawsze jest coś, co on, mistrz, zrobiłby inaczej. Czuję, że to silnie wpływa na jakość mojego życia zawodowego. Co powinienem zrobić ?


title: Gdzie powinno odbywać się przetwarzanie do ustrukturyzowanego XML?

text: Otrzymałem zadanie przeprojektowania rozwiązania „wewnętrznego”, aby było możliwe do rozbudowy oraz łatwiejsze w utrzymaniu i administrowaniu. Oryginalne rozwiązanie zostało z czasem hashowane razem przy użyciu PHP, ponieważ dodano więcej wymagań, a potrzeba rozszerzenia jest spodziewana w dającej się przewidzieć przyszłości. Rozwiązanie gromadzi wiele różnych plików, takich jak dokumenty tekstowe i różne struktury dokumentów XML, z różnych "lokalizacji" i konwertuje każdy z nich na dokumenty XML o specjalnej strukturze, które są przesyłane za pośrednictwem usługi sieciowej. Aby dodać do tego zestawu, niektóre oryginalne pliki XML są pobierane z tej samej „lokalizacji”, ale mają różne poziomy przetwarzania, które są wymagane w zależności od tego, skąd pochodzą wcześniej (identyfikowane przez pole „klient” w XML) My Intencją jest uczynienie nowego rozwiązania tak modułowym, jak to tylko możliwe, tak aby przetwarzanie można było zawiesić na poziomie indywidualnego „klienta” lub „lokalizacji” bez wpływu na cokolwiek innego. Chociaż mam wiele łamigłówek do pokonania i pytań, na które muszę odpowiedzieć, pytanie, które nie daje mi spać w tej chwili, brzmi: „Gdzie powinno być wykonane przetwarzanie ustrukturyzowanego kodu XML?” Obecnie odbywa się to na „klienta”, ale jak możesz sobie wyobrazić, prowadzi to do wielu zduplikowanych kodów. Może jest to nieuniknione, ze względu na czasami wymagane specyficzne przetwarzanie „klienta”, ale zdrowie psychiczne podpowiada mi, że musi być lepszy sposób.


title: Jak skutecznie rozwiązywać problemy lub testować nowy kod, gdy konfiguracja sprzętu w celu odtworzenia błędów jest trudna lub niemożliwa do uzyskania?

text: Pracuję w średniej wielkości firmie (150 pracowników, ~10-osobowy zespół inżynierów), a większość moich projektów obejmuje współpracę ze sprzętem laboratoryjnym (oscyloskopy, analizatory widma optycznego itp.) w celu półautomatycznych aplikacji testowych. Zetknąłem się z kilkoma różnymi scenariuszami, w których nie jestem w stanie skutecznie rozwiązywać problemów lub testować nowego kodu, ponieważ nie miałem już lub nigdy nie miałem dostępu do konfiguracji sprzętu. **Przykład 1:** Konfiguracja, w której 10-20 procesów „wypalania” jest uruchamianych niezależnie przy użyciu czujnika typu laboratoryjnego – udało mi się zdobyć jeden taki czujnik do testowania i od czasu do czasu mogłem ukraść sekundę na symulację wszystkich aspekty łączenia się z wieloma urządzeniami (wyszukiwanie, łączenie, przesyłanie strumieniowe itp.). W końcu pojawił się błąd (i ostatecznie znalazł się w oprogramowaniu sprzętowym i sterownikach urządzenia), który był bardzo trudny do dokładnego odtworzenia za pomocą tylko jednej jednostki, ale osiągnął poziom „pokazuj zatrzymanie”, gdy 10-20 z tych urządzeń było jednocześnie używanych. To jest wciąż nierozwiązane i trwa. **Przykład 2:** Test wymagający drogiego analizatora widma optycznego jako podstawowego elementu. Urządzenie jest dość stare, dziedzictwo według producenta, które zostało przejęte przez większą firmę i w zasadzie rozwiązane, a jego jedyną dokumentacją był długi (i mało informacyjny) dokument, który wydaje się słabo przetłumaczony. Podczas początkowego rozwoju mogłem trzymać urządzenie przy biurku, ale teraz jest ono związane, zarówno fizycznie, jak i zgodnie z harmonogramem, podczas wielotygodniowych testów 24 godziny na dobę, 7 dni w tygodniu. Kiedy pojawiają się błędy związane lub niezwiązane z urządzeniem, często muszę trudzić się testowaniem kodu zewnętrznego względem aplikacji i dopasowaniem go lub pisaniem kodu na ślepo i próbą wycisnąć trochę czasu na testowanie między uruchomieniami. logika programu wymaga obecności OSA i reszty testowanego sprzętu. _Myślę, że moje pytanie brzmi, jak mam do tego podejść?_ Potencjalnie mógłbym spędzić czas na opracowywaniu symulatorów urządzeń, ale wliczenie tego w oszacowanie rozwoju zwiększy to bardziej niż większość prawdopodobnie by to doceniła. Może też nie odtwarzać dokładnie wszystkich problemów i dość rzadko można zobaczyć ten sam sprzęt używany tutaj dwukrotnie. Mógłbym być lepszy w testach jednostkowych… itd… Mogę też głośno mówić o problemie i sprawić, by inni zrozumieli, że wymagane będą tymczasowe opóźnienia, niewiele więcej niż ból głowy dla badań i rozwoju, ale zwykle odbierany jako żart po skierowaniu do produkcji.


title: Separacja obaw, warstwa dostępu do danych

text: Myślałem o tym dzisiaj wcześniej i pomyślałem, że otrzymam jakiś wkład w tej sprawie. Kiedy tworzę aplikacje, zwykle używam warstwy dostępu do danych w innym projekcie, na wypadek gdyby można było ją ponownie wykorzystać w innym miejscu w podobny sposób w przyszłości, ale także w celu umożliwienia aktualizacji DAL bez aktualizacji warstwy interfejsu użytkownika. Robiąc to, zajmuję się wszystkimi zapytaniami o dane itp. w DAL. Aplikacja nie musi wiedzieć, czy jest to ADO.NET, EF czy List. Jednak przyszło mi do głowy, że prawie we wszystkich przypadkach typy zwracane są określone w DAL. Tak więc warstwa interfejsu użytkownika musi wiedzieć o zdefiniowanych tam typach. Czy to normalne, czy jest sposób na większą separację? (inne niż używanie typów Anon)


title: Jak korzystać z przykładowych kodów podczas czytania książek o programowaniu?

text: Książki o programowaniu często zawierają dużo rozproszonego kodu. Zazwyczaj istnieje towarzysząca strona internetowa, na której można pobrać kod użyty w książce. Jak używasz kodu? Czy po prostu je uruchamiasz i sprawdzasz wyniki, czy kodujesz od nowa? Jeśli kodujesz go od zera, czy znalazłeś jakieś zalety (takie jak lepsze zapamiętywanie treści itp.)?


title: CSS w CMS - Plusy/Wady

text: Jestem stałym użytkownikiem Wordpressa i zawsze, gdy czuję potrzebę zmiany wyglądu elementu DOM, wolę używać go inline. Dzieje się tak dlatego, że nie chcę wracać do arkusza stylów i tworzyć nowych klas i stylów dla pojedynczego, inaczej wyglądającego elementu w konkretnym poście. Czy ktoś może wymienić **Wady i zalety tej techniki**. I czy powinienem to zmienić? _**PS — wszystkie sugestie należy podawać z uwzględnieniem czynnika CMS._**


title: Czy częste przerwy są rzeczywiście tak korzystne podczas programowania?

text: Ciągle czytam, że zaleca się, aby programista robił częste przerwy podczas programowania, a zwykłe zalecenie, które widzę, to 5 minut co pół godziny lub 10 minut co godzinę. Spróbowałem, ale dość często znajduję coś interesującego w ciągu tych 5 minut i odciąga mnie to od tego, nad czym pracowałem dłużej niż planowałem. Albo to, albo mój umysł skupia się na czymś innym i trudno mi wrócić do pracy i nie skupiać się zbyt dobrze. Czy to naprawdę takie korzystne, aby robić częste przerwy podczas programowania? Czy robię coś złego, aby zmniejszyć moją produktywność zamiast ją zwiększać?


title: Czy przed właściwym kodowaniem należy używać pseudokodu?

text: Pseudokod pomaga nam zrozumieć zadania w sposób niezależny od języka. Czy najlepszą praktyką lub sugerowanym podejściem jest tworzenie pseudokodu w ramach cyklu rozwoju? Na przykład: * Zidentyfikuj i podziel zadania kodowania * Napisz pseudokod * Uzyskaj aprobatę [przez PL lub TL] * Rozpocznij kodowanie na podstawie pseudokodu Czy jest to sugerowane podejście? Czy jest to praktykowane w branży?


title: Powód umieszczenia typu funkcji i nazwy metody w różnych wierszach w C

text: Właśnie zacząłem pracę w firmie i jednym z komentarzy dotyczących stylu podczas mojego pierwszego przeglądu kodu było to, że typ zwracany i nazwa metody powinny znajdować się w różnych wierszach. Na przykład to void foo() { } powinno być tym void foo() { } Zawsze używałem pierwszego stylu i zastanawiałem się, czy istnieje inny powód niż osobiste preferencje, dlaczego ludzie używają drugiego stylu? Nie sądzę, żeby pierwsza w ogóle szkodziła czytelności. Czy jeden jest bardziej powszechny niż drugi wśród programistów C i dużych projektów open source?


title: Limit Int32 dla kolumny tożsamości

text: To tylko kwestia dotycząca witryny, którą tworzę, i innych dużych witryn. Używam kolumny tożsamości do przechowywania identyfikatora niektórych moich tabel i mam klasy, których identyfikator jest ozdobiony `Int32` do przechowywania wartości identyfikatora pobranego z bazy danych. Martwię się, że w miarę wzrostu witryny niektóre tabele, które rosną wykładniczo, np. „QuestionComments” mogą w przyszłości przekroczyć limit „Int32”. Zmieniam więc klasę na `long`. public class Pytanie { public long QuestionID { get; ustawić; } ... } //Konwersja wartości bazy danych do typu .Net Pytanie q = new Pytanie(); q.IdPytania = Konwertuj.NaInt32(MyDataRow["IdentyfikatorPytania"]); Jak prawdziwe jest moje założenie? Czy użycie UniqueIdentifier byłoby lepsze? Czy istnieje inny sposób rozwiązania tego problemu? **AKTUALIZACJA:** Ale żeby dowiedzieć się, jak witryna taka jak FaceBook, Google, StackOverflow itp. obsługiwałaby tabelę odwiedzin, zakładając, że ma jako kolumnę tożsamości identyfikator odwiedzin


title: Jak do kodu osobistego praw autorskich

text: Piszę program przy użyciu VBA, ponieważ jest on łatwo dostępny, kod będzie dostępny dla Cracków, nawet jeśli zabezpieczę go hasłem. Wiedziałem o tym, kiedy wybrałem VBA, ponieważ przenośność jest ważniejsza niż ochrona. Moje pytanie dotyczy praw autorskich, umieszczam prawa autorskie i moje nazwisko w kodzie i na arkuszu kalkulacyjnym, aby wskazać, że to mój program, ale czy to wystarczy, gdy ludzie zaczną kopiować kod? Czy masz silną legalną wersję, którą mógłbym umieścić w swoim kodzie?


title: Jak podobne powinny być środowiska PreProd i Prod?

text: Niedawno pracowałem nad projektem i podczas wydania zdaliśmy sobie sprawę, że nie działa on w produkcji. Działa we wszystkich innych środowiskach, ale ponieważ mamy osobny zespół ds. wydań i nie możemy sami skonfigurować serwerów i środowisk, nie mamy wglądu w ich konfigurację. Podejrzewamy, że Prod ma pewne uprawnienia użytkownika w swoim koncie lub ustawieniach IIS, które są inne, więc teraz nad tym pracujemy. Więc myślę, że to wszystko było dla mnie pouczającym doświadczeniem i nie chcę, żeby to samo się powtórzyło. Chciałbym zapytać, jak różne powinny być te środowiska? Zawsze myślałem, że PreProd powinien być identyczną kopią do środowiska Prod, używając kopii tej samej bazy danych, używając kopii tego samego konta użytkownika, powinien być zainstalowany na tych samych serwerach itp. Ale jak daleko powinienem to posunąć? Jeśli strona internetowa jest skierowana na zewnątrz, czy PreProd powinien być skierowany na zewnątrz? Co się stanie, jeśli witryna zawiera komponenty, do których przejście nie wymaga konta użytkownika ani hasła? Czy nadal jest w porządku wystawić go na świat zewnętrzny?


title: Jak napisać serwer HTTP?

text: Jak mówi tytuł, chciałbym napisać serwer HTTP. Moje pytanie brzmi: jak to zrobić? Wiem, że brzmi to BARDZO ogólnie i na zbyt „wysokim poziomie”, ale jest metoda na moje szaleństwo. Odpowiedź na to pytanie powinna być, jak sądzę, agnostyczna językowa; to znaczy, bez względu na język, którego używam (np. C, C++, Java, itp.) odpowiedź powinna być taka sama. Mam ogólne pojęcie, jak to powinno działać: 1. Otwórz gniazdo na porcie 80. 2. Poczekaj, aż klient zgłosi żądanie. 3. Przeczytaj prośbę (tj. ta osoba chce stronę "kontakt-nas.html"). 4. Znajdź i przeczytaj "contact-us.html". 5. Wyślij nagłówek html, a następnie wyślij treść "contact-us.html" 6. Zrobione Jak powiedziałem, wierzę, że to jest proces, ale nie jestem w 100% pewien. To prowadzi mnie do sedna mojego pytania. Jak lub gdzie dana osoba dowiaduje się o tych informacjach? Co jeśli nie chcę pisać tylko serwera HTTP, co jeśli chcę napisać serwer FTP, serwer czatu, przeglądarkę obrazów itp.? W jaki sposób dana osoba dowiaduje się o dokładnych krokach/procesach potrzebnych do stworzenia działającego serwera HTTP? Współpracownik powiedział mi o nagłówku html, więc NIGDY nie wiedziałbym o tym bez niego. Powiedział też coś o przekazywaniu każdego żądania do nowego wątku. Czy jest jakaś wielka księga o tym, jak to wszystko działa? Czy istnieje instrukcja obsługi serwera HTTP? Próbowałem googlować „jak działa serwer HTTP”, ale jedyne odpowiedzi, jakie udało mi się znaleźć, były skierowane do przeciętnego Joe, a nie do osoby, która chce zaprogramować serwer HTTP.


title: Metoda Fabryki Abstrakcyjnej i Polimorfizm

text: Będąc programistą PHP od kilku lat, dopiero zaczynam zagłębiać się w zaawansowane style programowania i używać wzorców polimorficznych. Kiedyś oglądałem film o polimorfizmie, a gość prowadzący wykład powiedział, że jeśli to w ogóle możliwe, należy pozbyć się instrukcji `if` w kodzie, a przełącznik jest prawie zawsze znakiem, że polimorfizm jest potrzebny . W tym momencie byłem dość zainspirowany i od razu poszedłem wypróbować te nowe koncepcje, więc postanowiłem stworzyć mały moduł buforowania przy użyciu metody fabrycznej. _**Oczywiście**_ pierwszą rzeczą, którą muszę zrobić, to utworzyć przełącznik, aby zdecydować, jakie kodowanie pliku wybrać. NIEBEZPIECZEŃSTWO! class Main { public static function methodA($parameter='') { switch ($parameter) { case 'a': $object = new \name\space\object1(); przerwanie; przypadek 'b': $object = new \name\space\object2(); przerwanie; przypadek 'c': $object = new \name\space\object3(); przerwanie; domyślnie: $object = nowy \nazwa\przestrzeń\obiekt1(); } return (sekretInterface $obiekt); } } W tym momencie nie jestem do końca pewien, co robić. O ile wiem, muszę albo użyć innego wzorca i mieć oddzielne metody dla każdej instancji obiektu, albo zaakceptować, że przełącznik jest niezbędny do „przełączania się” między nimi. Co myślicie?


title: Software Manager, który zmusza programistów do zarządzania projektami

text: Jestem programistą pracującym w firmie zajmującej się systemami wbudowanymi. Mamy Project Managera, który zajmuje się całościowym harmonogramem projektu (w tym elektryką, jakością, oprogramowaniem i produkcją), stąd jego harmonogram oprogramowania jest bardzo krótki. Mamy też Software Managera, który jest moim szefem. Zmusza mnie do pisania i utrzymywania harmonogramu oprogramowania, dokumentów projektowych (projekt wysokiego i niskiego poziomu), SRS, zarządzania zmianami, planów weryfikacji i raportów, zarządzania wydaniami, przeglądów i oczywiście oprogramowania. Mamy tylko jednego Inżyniera Testów dla całego zespołu programistycznego (10 członków), aw każdej chwili jest w toku kilka projektów. 80% czasu spędzam na tworzeniu tych dokumentów. Mój szef wywodzi się z procesu i uważa, że potrzebujemy lepszej dokumentacji, aby ulepszyć oprogramowanie: (1) Uważa, że projekt jest najważniejszy, kodowanie to „po prostu spisywanie projektu”, nie powinno to trwać zbyt długo i "cały kod powinien być napisany zanim sprzęt będzie gotowy". (2) Nie rozumie różnicy między kontrolą wersji centralnej i rozproszonej, nawet po tym, jak powiedzieliśmy mu, że łatwiej jest współpracować z modelem rozproszonym. (3) Nie rozumie kodu i chce zrozumieć każdy błąd i jego proponowane rozwiązanie. (4) Uważa, że weryfikacja powinna być wykonana przez programistę, a walidacja przez Testera. Rzecz w tym, że nasza weryfikacja sprawdza tylko, czy implementacja jest poprawna (nie piszemy testów jednostkowych, nigdy nie jest to uwzględniane w harmonogramie), a walidacja to testowanie czarnoskrzynkowe, więc testów jednostkowych brakuje. Jestem bardzo zmieszany. (1) Czy jestem odpowiedzialny za utrzymanie wszystkich tych dokumentów? W gruncie rzeczy czuję się, jakbym zajmował się zarządzaniem projektami oprogramowania. Nie mam nic przeciwko dokumentacji technicznej, ale uważam, że planowanie/planowanie nie powinno być wykonywane przez programistę. (2) Nie lubię tworzyć dokumentów, chcę rozwiązywać problemy i pisać kod. Z mojego doświadczenia wynika, że tworzenie dokumentów projektowych tylko do pewnego stopnia pomaga, nigdy nie jest rozwiązaniem na lepszy lub szybszy kod. (3) Czuję, że szefowi nie zależy na tworzeniu lepszych produktów, a jedynie na byciu dobrym menedżerem w oczach kierownictwa. Co mogę zrobić? Przez cały rok zajęłam się 3 miesiącami właściwego kodowania, resztę spędziłem na tworzeniu dokumentów i oczekiwaniu na raporty o błędach od klientów.


title: Jak web-developerzy zajmują się projektowaniem stron internetowych jako freelancer?

text: Więc niedawno dostałem swoją pierwszą pracę jako młodszy web-developer. Moja firma tworzy małe/średnie witryny dla szerokiej gamy klientów: firm zajmujących się autobiznesem, agencji ślubnych, niektórych witryn z saunami itp. Mam nadzieję, że rozumiesz mój punkt widzenia. Nie robią dużych, poważnych rzeczy, takich jak systemy bankowe lub naprawdę duże systemy, to głównie małe/średnie strony internetowe dla startupów/średnich firm. Moje główne umiejętności to PHP/MySQL, znam też HTML i trochę CSS/JS/AJAX. Wiem, że dobry web-developer musi znać jakiś język backendowy (jak PHP/Ruby/Python) ORAZ kombinację HTML+CSS+JS+AJAX+JQuery. Jednak zawsze się zastanawiałem. W mojej firmie mamy projektanta stron internetowych. W innych poważnych organizacjach często widzę to samo: web-developerów, którzy tworzą logikę biznesową i web-designerów, którzy tworzą design. O ile mi wiadomo, projektanci po namalowaniu projektu strony internetowej oddają go programistom albo w PSD, albo w plasterkach, a programiści łączą to z logiką, ale projekt NIE jest tworzony przez programistów. Taka separacja wydaje się bardzo dobra w przypadku pracy na pełen etat, ale niepokoi mnie pytanie **_jak freelancerzy robią strony internetowe_**? **_Czy większość z nich po prostu płaci niezależnym projektantom za stworzenie dla nich projektu? A może niektórzy robią jedno i drugie?_** Powód, dla którego pytam – planuję rozpocząć pracę jako freelancer w wolnym czasie po tym, jak będę dobry w tworzeniu stron internetowych. Ale nie chcę tworzyć stron internetowych ze świetną logiką biznesową, ale kiepskim designem. Nie chcę też, aby ktoś inny stworzył dla mnie projekt. Bardzo lubię web-development i całkiem nieźle sobie radzę, lubię też design, chociaż trochę się zagubiłem w tym, jak go studiować i stawać się w tym lepszy. Ale boję się, że chodzenie w obie strony nie pozwoli mi stać się ekspertem, wydaje mi się, że są to dwie zupełnie różne prace, a bycie naprawdę dobrym w obu wydaje się bardzo trudne. Ale naprawdę chcę zrobić jedno i drugie. Co powinienem zrobić? Dziękuję Ci!


title: IDE o otwartym kodzie źródłowym wydane na licencji GPL

text: Niektóre IDE (lub edytory kodu, takie jak Notepad++) są wydawane na licencji GPL. Jeśli zdecyduję się stworzyć program przy użyciu IDE, czy muszę wydać swój program na licencji GPL? Czy tylko jeśli biorę kod z open source?


title: Jak sprawdzić poprawność żądania postu ajax, z którego pochodzi?

text: Zajmuję się tworzeniem aplikacji internetowej w **MVC4**. W mojej aplikacji cała funkcja jest wykonywana przez **ajax post call**. Nawet **nie publikuję pojedynczego formularza (nawet nie mam również znacznika formularza)** wszystkie rzeczy są wykonywane przez wywołanie ajax. ale boję się chybionego użycia mojego skryptu java. Każdy, kto otrzymał ten kod, może przesłać **dane fikcyjne** do mojej aplikacji. Muszę więc **sprawdzić**, czy żądanie posta pochodzi z mojej strony internetowej, czy nie. Pomyślałem, że wywołanie ajax jest dobre, zamiast wysyłać cały formularz na serwer. Przeprowadziłem również walidację tylko po stronie klienta. Czy to też jest zagrożenie dla mnie?


title: Używanie wzorca Decorator do dodawania publicznych metod do obiektu

text: Wzorzec Decorator jest zwykle używany do rozszerzenia funkcjonalności obiektu poprzez rozszerzenie jednej z jego bieżących metod. Aby to zilustrować, rozważ obiekt „obiekt” i dekorator „dekorator”. `object` ma jedną metodę o nazwie `methodA()`. `decorator`, ponieważ jesteśmy we wzorcu Decorator, również ma tę metodę przez dziedziczenie (zarówno `object` jak i `decorator` ostatecznie dziedziczą z tej samej superklasy, która ma `methodA()`. Nazwijmy ją `AbstractObject` ). `methodA()` w `object` wygląda tak: public void methodA(){ // zrobienie rzeczy } `methodA()` w `decorator` wygląda tak: public void methodA(){ // wykonanie dodatkowych rzeczy. owiniętyObiekt.metodaA(); // a następnie deleguj do opakowanego obiektu. } Wykorzystano by to tak: AbstractObject object = new ConcreteObject(); obiekt.metodaA(); // robi rzeczy obiekt = new ConcreteDecorator(object); obiekt.metodaA(); // robi rzeczy i jeszcze kilka rzeczy. rozszerzona metoda A(). Celem `decoratora` jest rozszerzenie funkcjonalności `object`, **i robi to poprzez rozszerzenie jednej z obecnych metod `object`**. Do tej pory klasyczny Dekorator. **Teraz moje pytanie:** Jak już wspomniałem, Dekorator zwykle rozszerza funkcjonalność obiektu, dodając zawartość do jednej z bieżących metod obiektu. Ale co, gdybym chciał użyć Dekoratora do **dodania publicznych metod do obiektu**? Rozważmy następujący scenariusz, w którym `decorator` ma inną metodę `methodB()`: AbstractObject object = new ConcreteObject(); obiekt.metodaA(); // robi rzeczy obiekt = new ConcreteDecorator(object); (obiekt (Beton Dekorator)).metodaB(); // methodB() należy do ConcreteDecorator(), ale nie do AbstractObject(). Jak widzisz, gdybym chciał to zrobić, musiałbym wrzucić `object` do `ConcreteDecorator`. Uwidacznia to konkretny typ „obiektu” i fakt, że jest on udekorowany, i jako taki nieco łamie intencje wzorca Dekoratora. Ponadto kod wywołujący metodę `methodB()` musiałby wiedzieć, że `object` jest dekorowany. Ponownie, niezbyt w duchu Dekoratora. **W związku z tym mam dwa pytania:** * Czy wzorzec Dekorator jest kiedykolwiek używany w ten sposób? Czy jest kiedykolwiek używany do dodawania publicznych metod do obiektu, w przeciwieństwie do „rozszerzania” jego obecnych metod? * Czy są sytuacje, w których byłoby to dobrym pomysłem lub mądrym użyciem Dekoratora?


title: Masz jakieś doświadczenia z przenoszeniem aplikacji Powerbuilder do Javy (lub innego języka)?

text: Czy ktoś ma jakieś doświadczenie w przenoszeniu dużej aplikacji klient/serwer Powerbuilder do aplikacji Java (lub innego języka)? Mówiąc ogólnie, mam na myśli coś na poziomie 2 milionów linijek kodu i dosłownie setki tabel bazy danych. Jak to zrobiłeś? Jak długo to trwało i ile to kosztowało? Jakie były największe wyzwania?


title: Aplikacja dziennika programisty?

text: Właśnie udostępniłem swoją aplikację publicznie i pracuję nad zaktualizowaną wersją, ale naprawdę uważam, że powinienem śledzić WSZYSTKIE zmiany w kodzie. W przypadku, gdyby jakaś funkcjonalność nagle zaczęła zawodzić, z historią wszystkich wprowadzonych przeze mnie zmian, znacznie łatwiej byłoby dowiedzieć się, gdzie to popsułem, na wypadek, gdyby problem już tam nie istniał. _Idealnie_ byłoby mieć super szybki komputer z ogromnym dyskiem twardym i aplikacją, która automatycznie zapisuje kopię zapasową całego projektu za każdym razem, gdy zmienię linię w kodzie, z narzędziem do porównywania plików, które pokaże mi każdą różnicę między dowolnymi dwa projekty z kopią zapasową, ale na razie nie jest to możliwe. Czy znasz jakąś aplikację, która ułatwia programiście śledzenie zmian dokonanych w kodzie źródłowym?


title: Serwer wielowątkowy

text: Napisałem program serwera/klienta, w którym używam 2 wątków: * Jeden do ciągłego odbierania danych i * Inny do wysyłania danych, gdy użytkownik zapisuje je na ekranie Problem: Utworzyłem wątki, ale podczas wykonywania kontrola utknie w odbierającym wątku ma nieskończoną pętlę do odbierania danych i nigdy nie przechodzi do wysyłającego wątku. Proszę mi powiedzieć, czy jest jakieś rozwiązanie problemu.


title: Jaki jest najbardziej niejasny algorytm sortowania, jaki znasz?

text: Właśnie przeczytałem o cyclesort w poście na blogu sortvis.org. Jest to prawdopodobnie najbardziej niejasny, o jakim słyszałem do tej pory, ponieważ używa matematyki, której nie znam (wykrywanie cykli w permutacjach zbiorów całkowitych). Jaki jest najbardziej niejasny, jaki znasz?


title: Koncepcje programowania obiektowego i wywiady

text: Jestem fanatykiem programowania obiektowego. Zawsze wierzyłem w rozwiązania modelowania pod kątem obiektów. To jest coś, co przychodzi do mnie naturalnie. Współpracuję ze start-upem usług, który zasadniczo zajmuje się tworzeniem aplikacji przy użyciu języków OOP. Dlatego staram się testować zrozumienie OOP u kandydata, z którym przeprowadza się rozmowę kwalifikacyjną. Ku mojemu szokowi, znalazłem bardzo niewielu programistów, którzy naprawdę rozumieli OOP. Większość kandydatów bezmyślnie wypluwa definicje, które wyłudzili z jakiejś akademickiej książki o programowaniu obiektowym, ale nie wiedzą, co mówią. Nie trzeba dodawać, że odrzucam tych kandydatów. Jednak z biegiem czasu odrzuciłem prawie 98% kandydatów. Teraz zaczynam się zastanawiać, czy zbyt krytycznie podchodzę do ich umiejętności OOP. Nadal uważam, że OOP to podstawa i każdy programista MUSI ją DOSTAĆ. Znajomość języka i doświadczenie są drugorzędne. Czy uważasz, że jestem zbyt krytyczny, czy niestety po prostu rozmawiam ze złymi programistami? **EDYTUJ:** Zwykle przeprowadzam wywiady z programistami z 2 do 5 letnim doświadczeniem. Stanowisko, na którym zazwyczaj przeprowadzam rozmowę kwalifikacyjną, to programista aplikacji Ruby/Ruby on Rails.


title: Dlaczego każdy instalator w systemie Windows musi być uruchamiany z podwyższonymi uprawnieniami?

text: Obecna tendencja do dostarczania nawet najmniejszych aplikacji (takich jak proste gry, narzędzia itp.) jako Instalator Windows (.msi) lub nawet z .exe, który może zrobić praktycznie wszystko, jest bardzo irytująca. Po zainstalowaniu aplikacja jest uruchamiana jako zwykły użytkownik, ale jest bezużyteczna, jeśli podczas instalacji może robić to, co chce. Na przykład, konfigurując zaporę, może nie chcę, aby mój nowy błyszczący 15 KB kalkulator miał pełny dostęp do Internetu (dla połączeń przychodzących :) ) Niestandardowe akcje wewnątrz plików instalatora Windows Installer są jeszcze gorsze, ponieważ można je uruchomić niestandardowa funkcja w dostarczonym pliku DLL! Jak sobie z tym radzisz, po prostu zignoruj problem, a może masz jakieś nieznane mi metody uruchamiania pakietów Windows Installer? A z drugiej strony, dlaczego na Ziemi wszyscy robią instalatory? W wielu przypadkach wystarczy zwykły plik ZIP, przynajmniej jako okazja do standardowego instalatora.


Od jakiegoś czasu mam przeczucie na temat Windows Workflow (WW). I do tej pory nie mogłem wymyślić odpowiednich słów, aby to wyjaśnić. Ponieważ myślę, że teraz mam dobry sposób na zwerbalizowanie tego, pomyślałem, że się podzielę. Wierzę, że w naszej branży istnieje problem, w którym duży procent programistów zajmuje dużo czasu, aby zrozumieć proste, solidne zasady OOP i wzorce projektowe. Rzeczywiście, wielu programistów nigdy nie osiąga tego poziomu zrozumienia. Moją nieuzasadnioną obawą jest to, że narzędzia takie jak WW dodatkowo chronią programistów przed dobrym projektowaniem. Powodem tego jest to, że bez WW, programiście można by pokazać, jak pisać kod przy użyciu wzorca stanu, wzorca łańcucha odpowiedzialności, silnika reguł, a nawet prostego OOP. Wielu programistów po prostu nie wie, jak zaimplementować polimorfizm. Obawiam się, że narzędzia takie jak WW dostarczają abstrakcji, która ukrywa lub hamuje dobry projekt, po prostu zapewniając programistom możliwość klikania pól na płótnie i pisania w nich kodu. To, co dzieje się pod maską, lub co powinno dziać się pod maską, jest dla dewelopera stracone. Czy narzędzia, takie jak Windows Workflow, hamują rozwój rozwoju? Zastrzeżenie: nie korzystałem z WW. Mogą istnieć świetne przypadki użycia go. Moje myśli powyżej są po prostu przeczuciem i chciałbym wiedzieć, co inni myślą o tym temacie.


title: Jakie systemy ESB działają najlepiej dla stosu .Net?

text: Z jakiej usługi Enterprise Service Bus skorzystasz i dlaczego?


title: Czy MVC jest optymalnym wzorcem do zbudowania usługi sieciowej RESTful?

text: Nie będąc praktykiem Java, niedawno poznałem specyfikację JAX-RS i framework Apache CXF. Wciąż owijając głowę wokół tych wszystkich rzeczy, przeczytałem również to pytanie na SO. Ponieważ MVC jest wzorcem projektowym, podczas gdy JAX-RS jest specyfikacją, byłem zdezorientowany porównaniem. Biorąc pod uwagę moje rodzące się zrozumienie JAX-RS, co sprawia, że jest on bardziej odpowiedni do implementacji RESTful API niż, powiedzmy, framework, który używa wzorca MVC? Uwaga Mam tło w C i Pythonie.


title: Jak ustrukturyzować usługę REST api, która akceptuje parametry POST w treści?

text: Wszystko, co przeczytałem, mówi o przekazywaniu parametrów do usługi REST w identyfikatorze URI, niezależnie od tego, czy jest to szablon, czy ciąg zapytania: https://www.myapp/my/login/api/authenticate/ganders/mypassword lub https://www .myapp/my/login/api/authenticate?user=ganders&password=mypassword Ale oczywiście ujawniają one moją nazwę użytkownika i hasło w jasnym widoku. Nasz ochroniarz mówi, że musimy przekazać parametry w treści żądania. Jak mogę to zrobić? Przykłady, lub tylko link do przykładu wystarczy, bo najwyraźniej moje umiejętności googlowania nie są zbyt wysokie. Jedną z rzeczy, które do tej pory znalazłem, jest to, że jeśli udekorujesz swoje metody usług atrybutem [FromBody], w ten sposób: public AuthenticationResult Authenticate(**[FromBody]**LoginData loginData) { return AuthenticationResult.Authenticated; } który wyrwie je z ciała. Moje inne zadanie to testowanie tego? Czy to zadanie dla Skrzypka? Lub narzędzia Chrome Dev? Inną rzeczą, którą do tej pory odkryłem, jest to, że możesz mieć tylko 1 parametr w poście, czy to dokładne? Przepraszamy, jest tu dużo pytań. Spędziłem cały wczorajszy dzień próbując to zbadać i oczywiście nie zaszedłem zbyt daleko... Edycja: Oto, co mam do tej pory, jest to wersja "GET", którą musimy przekonwertować na POST (to jest wywołanie Angulara C# REST API) $http.defaults.headers.common.Authorization = 'Podstawowy ' + zakodowany; var url = $rootScope.serviceBaseUrl + "logowanie/pobieranie" + "?username=" + użytkownik + "&password=" + hasło + "&accesstoken="; $http({metoda: 'Pobierz', url: url}).success(.....).error(......); I usługa REST: [HttpGet] public AuthenticationResult Get([FromUri]LoginModel login) { try { AuthenticationService authService = new AuthenticationService(); Wynik AuthenticationResult = authService.IsAuthenticated(login); if (result.IsAuthenticated) zwraca wynik; else { return new AuthenticationResult() { IsAuthenticated = false, User = new User() { UserId = login.Username } }; } } catch(Wyjątek ex) { return new AuthenticationResult() { IsAuthenticated = false, User = new User() { UserId = login.Username, Token = ex.Message } }; } } Edit2: Jestem coraz bliżej. Otrzymałem odpowiedź do przejścia (za pośrednictwem programu Fiddler), ale moja tablica danych json, którą przekazuję, nie jest mapowana do mojego typu złożonego. Oto co mam: W Fiddler: User-Agent: Fiddler Host: localhost:42761 Content-Length: 73 Content-Type: application/json Accept: application/json "Request Body": { "Username": "ganders" , "Password": "hashedPassword" } Mój obiekt "LoginData" jest tworzony po stronie usługi, ale moje dwie właściwości mają wartość NULL...


title: Łączenie programowania asynchronicznego i synchronicznego

text: Mam problem z owinięciem głowy wokół pewnego problemu: w mojej aplikacji do przepływu danych (edytor wizualny) mam oba autonomiczne obiekty, które komunikują się przez porty za pośrednictwem nieuporządkowanych jednoczesnych wiadomości, a zatem reprezentują system asynchroniczny. ![na tym obrazku f odbierze x z pierwszego obiektu, przekształci i natychmiast wyśle przekształconą wartość do następnego](http://i.stack.imgur.com/MNRFL.png) Mimo to chcę również użyć funkcje, które są synchroniczne, np. potrzebują danych wejściowych do obliczenia ich wartości Teraz problem polega na tym, jak połączyć oba z nietrywialnym systemem? ![2](http://i.stack.imgur.com/wHG9E.png) Na tym obrazku f potrzebuje x i y do obliczenia swojej wartości, ale w dowolnym momencie może być obecne tylko jedno wejście (załóżmy x jest obecne, y nie). Uogólnij to na wyższe wymiary Widzę możliwe wyjście: * utwórz x tablicę X = (x, y) i połącz dwa pierwsze obiekty, co daje w wyniku system typu 1 .. * lub stwórz f aktywnym obiektem, który buforuje x,y, a następnie oblicza * lub sprawia, że f zawsze oblicza jego wartość (np. gdy występuje tylko x, oblicz x*y = x*0 ...) * * * Tak więc wspomniano o możliwości przyszłości. Używam Javy, więc oprawię moje możliwe rozwiązanie za pomocą obiektów ![X jest wysyłane, brakuje y -> utwórz przyszłe \(może kopię f\) czekające na y](http://i.stack .imgur.com/4N34O.png) X jest wysyłane, brakuje y -> utwórz przyszłość (może kopię f) czekając na y ![tutaj wpisz opis obrazka](http://i.stack.imgur.com/ JJme0.png) ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/WWuPM.png)


title: DDD / Optymalizacja konkretnej usługi należącej do określonego ograniczonego kontekstu dotyczącego sprzętu

text: Dobrze znany jest podział całej aplikacji na kilka ograniczonych kontekstów w celu stworzenia języka wszechobecnego. ćwicząc projektowanie oparte na domenie. Ogólnie rzecz biorąc, 1 kontekst ograniczony = 1 plik archiwum gotowy do wdrożenia (JAR / EAR / DLL itp.) Moje pytanie dotyczy wdrażania kontekstów ograniczonych dotyczących optymalizacji sprzętu: Załóżmy, że chcę zoptymalizować jedną konkretną usługę w określonym kontekście ograniczonym (optymalizacja może być mocniejszy procesor, więcej pamięci RAM itp.), czy dobrą praktyką jest utworzenie konkretnego pliku archiwum tylko dla niego? Znaczenie dalszego dzielenia początkowego ograniczonego kontekstu. Tak więc, aby dostarczyć go na określonym sprzęcie stroi się do jego użytkowania. Czy też powinienem uznać 1 ograniczony kontekst za bycie **niepodzielną** jednostką, a zatem zoptymalizować ograniczony kontekst jako całość, nawet jeśli niektóre określone usługi nie wymagają tego wzrostu mocy sprzętu?


title: Projekt BAZY DANYCH do przechowywania specyfikacji?

text: Tworzę , witrynę taką jak gsmarena , czy ktoś może mi pomóc w projektowaniu bazy danych do przechowywania specyfikacji mobilnych, takich jak tutaj "http://www.gsmarena.com/asus_padfone_infinity_lite-6120.php", ponieważ użytkownik może dodać więcej niestandardowych specyfikacji,


title: Używanie klasy jak obiektu w Pythonie

text: Uczę się z _Naucz się Pythona na własnej skórze_, gdzie natknąłem się na ćwiczenie studyjne, w którym chcą wiedzieć, czy klasa może być używana jak obiekt. Jak eksperymentowałem: class A(object): def __init__(self): print "tutaj" def cat(self,name): print "mój kot",nazwa Tutaj jeśli napiszę `A.cat(A(), "Tom")`, działa i odkrył, że jego wywołanie jest niezwiązane. Czy to oznacza, że mogę założyć, że klasy mogą być używane jak obiekt?