title: Zażądano sugestii dotyczących metod wyszukiwania

text: Rzucam to pytanie do „większej kreatywności” w celu uzyskania sugestii dotyczących metodologii wyszukiwania, która może rozwiązać ten problem. Wymyśliłem nieco wymyślony przykład, aby spróbować wyjaśnić problem na tyle dobrze, że niektóre rozwiązania mogą być zalecane. Problem: Używamy relacyjnej bazy danych (MSSQL) i musimy przeszukiwać produkty z następującymi ograniczeniami: * Dostępność * Rynek * Cena Musimy również grupować i sortować według ceny, rynku i zbiorczego zestawienia większych jednostek. Zobaczę, czy potrafię wyjaśnić użycie encji półrzeczywistych: Pomyśl o aplikacji, która pozwala użytkownikom wyszukiwać pokoje hotelowe, które mogą zarezerwować. Przy wyszukiwaniu mogą być dostępne następujące kryteria: dni, na które pokoje będą zarezerwowane, rynek, na którym chcą mieć pokój hotelowy (np. NYC, Boston), udogodnienia, jakie mogą mieć pokoje hotelowe (jacuzzi, kominek , liczba łóżek, apartament czy nie). We wszystkich przypadkach powyższe kryteria wyszukiwania mogą, ale nie muszą być wybrane. Tak więc możliwe jest bardzo szerokie wyszukiwanie (w tych terminach nie obchodzi mnie który rynek) lub zróżnicowanie poziomów szczegółowości (w NYC, 2 łóżka, z kominkiem). Aby zwiększyć złożoność, musimy również zwrócić ceny pokoi hotelowych dla wybranych kryteriów. Oczywiście specjalne ceny, różne ceny na różne dni pobytu (jedna cena w czwartkowe wieczory i inna cena w piątkowe i sobotnie wieczory na pobyt weekendowy). Niektóre z rzeczy, którymi się bawiliśmy, to: Solr, Endeca, zapytania SQL, implementacja w kodzie C# i optymalizacja tam, gdzie to konieczne (pomyśl o wzorcu dekoratora). To, czego szukam tutaj, to kilka sugestii społeczności na temat: która z powyższych NIE jest odpowiednia dla tego problemu, która może być dobrze dopasowana do tego problemu, która inna technologia może działać lepiej, o której nie pomyśleliśmy, techniki które inni wykorzystali w podobnych problemach, które działały dobrze (niespecyficzne dla danej technologii).


title: Jak wypada porównanie testów Java IKM z certyfikatami Sun?

text: Czy test IKM jest trudniejszy w porównaniu z certyfikatami Sun? Czy możesz podzielić się swoimi doświadczeniami podczas testu na Java/J2EE? Jakie pytania są zadawane?


title: Czy przenośny język przeznaczony dla bardzo różnych środowisk wykonawczych ma prawdziwą wartość?

text: Kolejne pytanie dotyczące SO wprowadziło mnie do Oxygene, dawniej Chrome, zanim pojawiła się przeglądarka o tej samej nazwie. Jest w rodzinie składni Pascala, ale wprowadza wiele gramatyki obiektowej i elementów z rodziny C, zwłaszcza Java/C#. Jedną z jego dużych reklamowanych zalet jest to, że język jest zaimplementowany jako niezależny od środowiska uruchomieniowego; programy napisane w Oxygene mogą atakować platformy .NET, J2EE, Android lub Cocoa, dzięki czemu jest to język z zarządzaniem pamięcią prawie tak przenośny, jak C/C++ w niezarządzanym środowisku. Jednak moje pytanie brzmi, czy ten rodzaj niezależności jest naprawdę przydatny, biorąc pod uwagę, że ramy i środowiska, na które jest przeznaczona, są tak różne (i niezgodne). Istnieje wiele problemów związanych z napisaniem jednego programu, który może być skompilowany tak, aby był przeznaczony dla wszystkich trzech środowisk wykonawczych, a wspólny język jest tylko wierzchołkiem góry lodowej. Java nie ma przestrzeni nazw System.Windows.Forms; ma java.swing, a klasy pod spodem są zupełnie inne. Podobnie, współdziałanie bazy danych w Javie odbywa się za pośrednictwem JDBC, podczas gdy .NET ma podstrukturę ADO.NET. Chociaż posiadanie wspólnego języka jest miłe, bycie płynnym w „języku” jest tak samo (więcej, IMO) jak płynne posługiwanie się bibliotekami docelowymi, jak ze składnią języka. Czy ktoś ma wspólny przykład wykorzystania języków niezależnych od środowiska wykonawczego do tworzenia naprawdę przenośnych programów we wszystkich obsługiwanych środowiskach wykonawczych?


title: Czy program na licencji GPLv2 może polegać na bibliotekach licencjonowanych przez Apache?

text: Czy program licencjonowany na licencji GPL (wersja 2) może polegać na bibliotekach licencjonowanych w ramach APLv2 bez naruszania GPL? Język tutaj sugeruje mi być może nie. W moim konkretnym przypadku patrzę na demona, który używa niektórych bibliotek zewnętrznych z licencją APLv2. **UPDATE** (W odpowiedzi na odpowiedzi/komentarze.) 1. Na potrzeby tego pytania nie mogę zmienić licencji programu głównego (demon) 2. Program główny został rozszerzony o funkcjonalność wykorzystującą `apr-util` i być może inne komponenty APLv2 Moje pytanie brzmi, czy mogę wydać rozszerzonego demona na GPLv2, czy jest to coś, co muszę zachować dla siebie (bez dystrybucji) i/lub ponownie zaimplementować bez APLv2, jeśli jestem zobowiązany do **(a )** wydanie tego rozszerzenia i **(b)** utrzymanie demona na licencji GPL?


title: (prawie) dwukierunkowa komunikacja w czasie rzeczywistym w Javie

text: Najpierw wyjaśnię kontekst problemu. Do projektu uniwersyteckiego zamierzam zaimplementować aplikację na Androida. Aplikacja Android (i inne) będą mogły wysyłać dane do zdalnego źródła, które zdalne źródło będzie również mogło wysyłać wiadomości do aplikacji Android. Na przykład komunikaty mogą mieć postać „zastosuj konfigurację x”, „jaki jest twój status”. Chcę, aby zdalne źródło było w stanie wysyłać te wiadomości do: 1. Zmniejszenia kosztów ogólnych. Nie chcę, aby urządzenia z Androidem wysyłały dane, gdy nie jest to konieczne. To wykorzystuje dane i moc. 2. Żebym mógł to przeskalować, na przykład wersja 1 może pozwolić sprawdzić, jaka jest wartość x w aplikacjach na Androida, wersja 2 może pozwolić sprawdzić, co to jest y itp. Przyglądałem się implementacji tego za pomocą gniazd w Javie. Rozmowa aplikacji na Androida ze zdalnym źródłem jest łatwa. Skonfiguruję router (port forward) i wszystko OK. Problem polega na tym, że zdalne źródło może komunikować się z aplikacją na Androida. Mogą korzystać z publicznych hotspotów Wi-Fi, mieć włączone 3G itp. Nie byłbym w stanie zaadresować urządzenia bezpośrednio przez gniazda, prawda? Podejście do rozwiązania problemu nie jest tak powszechne, jak sądzę, co sprawia, że wierzę, że próbuję zrobić coś, czego nie powinno się robić. Czy ktoś może rzucić na to trochę światła i zaoferować mi wskazówki? Wielkie dzięki.


title: Zapis na standardowe wyjście i przekierowanie czy bezpośrednio do pliku?

text: Widzę dwa sposoby na wypełnienie pustego pliku danymi: $ run_program arg1 > data_file czy konkretnie napisanie kodu, który zarządza plikiem i zapisuje do niego? tj. strumień plików? **Co lepiej wdrożyć?**


title: Web App vs Portal Platforma – przekonywanie klienta

text: Oceniamy zestaw wymagań dla klienta, który chce Liferay, który ma głównie wymagania AAA i Web CMS oraz pozwala użytkownikowi na przesyłanie własnych treści. Również cała integracja odbywa się za pośrednictwem usług internetowych. Jednak nie ma potrzeby korzystania z innych funkcji, takich jak rzeczywiste „portlety”, i18n, mashupy, skórki, motywy, tagowanie, obecność w mediach społecznościowych, brak współpracy itp. Uważamy więc, że możemy to zrobić jako standardową aplikację internetową JEE i nie używać Liferay (lub jakikolwiek inny produkt portalu), ponieważ są to koszty ogólne, których nie potrzebujemy. Klient uważa, że **wymagania Web CMS + wgranie przez użytkownika uzasadniają produkt „portal”.** Czy ktoś może mi pomóc w kilku punktach, aby przekonać klienta? Zakładając, że nasz punkt widzenia jest słuszny.


title: Serializacja sesji w środowisku JavaEE

text: Rozważmy następujący scenariusz: Pracujemy nad projektem JavaEE, dla którego skalowalność zaczyna być problemem. Do tej pory byliśmy w stanie zwiększyć skalę, ale nie jest to już opcja. Dlatego musimy rozważyć skalowanie i przygotowanie aplikacji do środowiska klastrowego. Naszym głównym zmartwieniem jest teraz serializacja sesji użytkowników. Niestety od początku nie braliśmy pod uwagę tego problemu i napotykamy następujące wyjątek: java.io.WriteAbortedException: pisanie przerwane; java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade Przeprowadziłem pewne badania i ten wyjątek został zgłoszony, ponieważ w sesji przechowywane są obiekty, które nie implementują interfejsu `Serializable`. Biorąc pod uwagę, że w całej aplikacji jest sporo niestandardowych obiektów, które są przechowywane w sesji bez implementacji tego interfejsu, naprawienie wszystkich tych deklaracji klas wymagałoby dużo żmudnej pracy i poświęcenia. Naprawimy wszystkie te deklaracje, ale głównym problemem jest to, że w przyszłości może pojawić się programista, który doda do sesji obiekt, który nie nadaje się do serializacji i przerwie serializację i replikację sesji na wielu węzłach. Jako szybki przegląd projektu, rozwijamy się przy użyciu domowego frameworka opartego na Struts 1 z API Servlet 3.0. Oznacza to, że w tym momencie do pracy z sesją używamy standardowych `session.getAttribute()` i `session.setAttribute()`, a obsługa sesji jest rozproszona po całym kodzie. Poza aktualizacją klas obiektów przechowywanych w sesji i upewnieniem się, że implementują interfejs `Serializable`, jakie inne środki ostrożności powinniśmy podjąć, aby zapewnić niezawodną zdolność replikacji sesji w warstwie aplikacji? Wiem, że jest trochę za późno na rozważenie tego, ale jaka byłaby najlepsza praktyka w tym przypadku? Ponadto, czy są jakieś inne kwestie, które powinniśmy rozważyć w związku z tym przejściem? Z góry dziękuję!


title: Czy możesz wybrać swoje narzędzia, czy bierzesz to, co dostajesz?

text: Często spotykam się z pytaniami o to, jakich narzędzi użyć do rozwiązania konkretnego problemu lub sugerując, że jedno narzędzie jest lepsze od drugiego i mówi coś o jakości programisty, który używa narzędzia gorszego. Niektóre z nich to argumenty religijne, ale niektóre narzędzia są ogólnie uważane za mniej niż idealne. W każdej wykonywanej przeze mnie pracy środowisko i narzędzia są już kupione i używane. Zaczynam korzystać z tego, co mają, i chociaż mogę mieć coś do powiedzenia w przyszłości, nie mam nic do powiedzenia w obecnym środowisku. Czy firma często pozwala programiście wybrać narzędzia, których będzie używał? A może częściej zdarza się, że programista zostaje wrzucony do istniejącego środowiska i korzysta z tego, co otrzyma? Zgaduję, że programista kontraktowy ma więcej do powiedzenia niż programista FT – prawda? (Na przykład w mojej poprzedniej pracy używaliśmy Access do bazy danych, Visual C++ do języka programowania i Visual Studio do IDE, z WinXP do systemu operacyjnego. Mieliśmy też Source Safe i Test Track. W mojej obecnej pracy korzystam z SQL Server i Oracle zamiast Access, więcej ColdFusion niż C#.net i VB.net, i przechodzimy z XP na Win7.)


title: Dlaczego komunikaty o błędach szablonu C++ są tak przerażające?

text: Szablony C++ są znane z generowania długich, nieczytelnych komunikatów o błędach. Mam ogólne pojęcie o tym, dlaczego komunikaty o błędach szablonu w C++ są takie złe. Zasadniczo problem polega na tym, że błąd nie jest wyzwalany, dopóki kompilator nie napotka składni, która nie jest obsługiwana przez określony typ w szablonie. Na przykład: szablon <klasa T> void docoś(T& x) { x += 5; } Jeśli `T` nie obsługuje operatora `+=`, kompilator wygeneruje komunikat o błędzie. A jeśli zdarzy się to gdzieś głęboko w bibliotece, komunikat o błędzie może mieć tysiące linii. Ale szablony C++ są w zasadzie tylko mechanizmem do pisania kaczką w czasie kompilacji. Błąd szablonu C++ jest koncepcyjnie bardzo podobny do błędu typu środowiska uruchomieniowego, który może wystąpić w dynamicznym języku, takim jak Python. Rozważmy na przykład następujący kod Pythona: def dosomething(x): x.foo() Tutaj, jeśli `x` nie ma metody `foo()`, interpreter Pythona zgłasza wyjątek i wyświetla ślad stosu wraz z dość wyraźnym komunikatem o błędzie wskazującym na problem. Nawet jeśli błąd nie zostanie wywołany, dopóki interpreter nie znajdzie się głęboko w jakiejś funkcji bibliotecznej, komunikat o błędzie w czasie wykonywania nadal nie jest tak zły, jak nieczytelne wymiociny wyrzucane przez typowy kompilator C++. Dlaczego więc kompilator C++ nie może wyraźniej określić, co poszło nie tak? Dlaczego niektóre komunikaty o błędach szablonu C++ dosłownie powodują przewijanie okna konsoli przez ponad 5 sekund?


title: Czy mógłbym dowiedzieć się więcej o programowaniu od dekonstrukcji Drupala, zamiast kontynuować pracę z ZF?

text: Kiedy decydowałem, jak nauczyć się projektować aplikacje internetowe PHP, sensowne było skierowanie się w stronę środka i przejście z Zend Framework, abym mógł zbliżyć się do niższego poziomu, ale byłbym w stanie zejść do biznes też dość łatwo, jednocześnie ucząc się wzorców projektowych itp. Wydawało się, że całkiem nieźle się udało, ale teraz zastanawiam się, czy nie nauczyłbym się więcej o projektowaniu z bardziej odgórnego podejścia, takiego jak tworzenie drupala miejsce i dekonstruowanie go. Zdaję sobie sprawę, że stopień wyższości vs. dolny w tym kontekście jest dość znikomy w spektrum wszystkich doświadczeń programistycznych, ale myślę, że bardzo ważne jest, gdzie zaczynasz, szczególnie na samym początku, ponieważ twój świat jest mały; to podstawa, a sposób, w jaki rozwijasz swoją osobowość „w domu”, może decydować o tym, jak podchodzisz do innych problemów w przyszłości. Wierzę, że ludzie mają tendencję do powtarzania swoich sukcesów, co często oznacza wybieranie tego, co jest im znajome. Nie chciałem, że tak powiem, „uczyć się w kącie”, więc starałem się dążyć do poziomu, który przygotowałby mnie na jak najwięcej innych doświadczeń. LAMP z ZF wydawał się dobrze zaokrąglonym, holistycznym wyborem, ponieważ za jednym razem uczyłbym się projektowania baz danych, wzorców, tworzenia aplikacji internetowych, konfiguracji serwera i języka programowania opartego na C. Ok, świetnie, ale tak naprawdę nie posunąłem się tak daleko, jak się spodziewałem, szczerze. A teraz zaczynam się zastanawiać, czy nie wyrządziłem sobie krzywdy, że chciałem zacząć bliżej dna w porównaniu z uczeniem się produkowania jak najwięcej od razu. Moim instynktem w tamtym czasie było to, że „oczywiście, CMS sprawi, że zaczniesz działać, produkując rzeczy od razu, ale w końcu trafisz na ścianę i i tak będziesz musiał nauczyć się rzeczy niższego poziomu, a prawdopodobnie trafisz to wcześniej niż później, więc równie dobrze możesz zacząć od tego. Nie jedz najpierw deseru. Ale teraz myślę „co by mnie powstrzymało przed zagłębieniem się w tryby CMS?” Może nauczyłbym się więcej, widząc pełniejszą implementację i dekonstruując ją, zamiast odkrywać koło na nowo. A może mógłbym być dokładnie tam, gdzie powinienem zacząć dopiero w grudniu? A ja po prostu nie znam odpowiedzi. Chcę rozpocząć nowy projekt (przerobić moją stronę internetową — właściwie jestem kompozytorem (muzyki)). Znam podstawy Zend Framework i jestem prawie pewien, że mógłbym napisać dla siebie prosty CMS do swoich celów, ale czy nauczyłbym się więcej od dekonstrukcji gotowego CMS-a, takiego jak drupal?


title: Jeśli wiemy tylko, że film ma rozdzielczość 720P, 480P lub 240P, czy może to jednoznacznie powiedzieć nam o rozdzielczości?

text: Głównym problemem, który mam tutaj, są klasy 720P, 480P, 240P... do określania jakości wideo, czy też jednoznacznie określają rozdzielczość wideo? Na przykład artykuł w Wikipedii o 240P odnosi się do rodziny rezolucji.


title: Open source i aktualizacje

text: Znalazłem bibliotekę open source, która może dobrze współpracować z moim projektem, ale zauważyłem, że nie jest często aktualizowana i obawiam się, że nie mam niezbędnego wsparcia. Czy częstotliwość aktualizacji jest właściwym kryterium wyboru biblioteki open source, a nie innym?


title: wyjątki c++ a wstępne sprawdzanie warunków błędu

text: ## Preambuła Jednym z pojęć używanych w pisaniu kodu w Pythonie jest "Łatwiej prosić o wybaczenie niż pozwolenie", czyli _EAFP_. Dosłownie oznacza to, że zamiast sprawdzać, czy operacja jest możliwa, wykonujesz operację i „prosisz o wybaczenie”, jeśli to, co robisz, się nie powiedzie. Technicznie oznacza to (tylko przykład bez szczególnego znaczenia): try: obj.x = 10 obj.y = 20except AttributeError: pass Ta technika jest często używana, gdy wiadomo, że kod w bloku `try..except` działa bez wszelkie błędy w większości przypadków lub jeśli kod jest wykonywany ponownie. Ten sam kod ze wstępnymi kontrolami wyglądałby następująco: if hasattr(obj, 'x'): obj.x = 10 if hasattr(obj, 'y'): obj.y = 20 ## Praktyki C++ Chociaż generalnie nie stanowi to problemu w Pythonie C ++ ma „dziedzictwo” płomiennej wojny „funkcji zwracającej stan błędu” w porównaniu z „rzucaniem wyjątków”. To było dużo dyskutowane, ale nie mogę znaleźć żadnego dobrego źródła informacji, które opisałoby, czy EAFP podobny do Pythona ma zastosowanie w Pythonie. Np. rozważ następujące kwestie: if (node.has_element('x')) { node['x'] = 10; } kontra try { node['x'] = 10; } catch(ElementNotFoundException e) { // pass } Które podejście jest zwykle stosowane w kodzie C++? Jeśli wydajność nie jest problemem, czy napisałbyś kod w stylu EAFP? Dziękuję Ci.


title: Poszukiwanie programistów do współpracy w korporacyjnym projekcie open source

text: Jestem założycielem i jedynym twórcą oprogramowania open-source przeznaczonego dla małego podzbioru przedsiębiorstw. Został pierwotnie opracowany dla i obecnie działa w jednej z firm typu, dla którego został zaprojektowany. To mój największy projekt i chciałem zrobić z niego coś jeszcze większego. Stworzenie firmy zajmującej się tworzeniem oprogramowania i sprzedaż produktu nie jest dla mnie opcją, więc zdecydowałem się na open-source i sprzedaż usług wdrożeniowych i wsparcia przedsiębiorstwom w mojej okolicy. Problem, z którym się zetknąłem, polega na tym, że nie mogę znaleźć programistów, którzy przyczyniliby się do projektu. Większość artykułów i książek na temat rosnącej społeczności open-source stwierdza, że deweloperzy pochodzą z bazy użytkowników, jednak baza użytkowników mojego projektu jest niewielka i nie jest związana z IT. Tak więc jest naprawdę mało prawdopodobne, aby jeden z moich klientów był entuzjastą opensource, który zna stos technologii, których używam. Myślałem o tym od dawna i wydaje się, że jedynym sposobem na przyciągnięcie kogoś do współpracy jest poszukanie programistów w mojej okolicy i zaproponowanie im współpracy zarówno w rozwoju, jak i komercjalizacji projektu. Nikt inny nie byłby zainteresowany udziałem w moim projekcie. _Czy to prawda i nie ma innej opcji?_ Uogólnione pytanie brzmi: **W jaki sposób projekty opensource z małą bazą użytkowników niezwiązanych z IT (np. projekty oprogramowania dla przedsiębiorstw) znajdują programistów do współpracy?**


title: Używać kontrolek Sklepu Windows w aplikacji klasycznej Windows 8?

text: Czy można używać kontrolek Sklepu Windows 8 w aplikacji komputerowej Windows 8? Przydatne byłyby kontrolki, takie jak FlipView i SemanticZoom. Nie znalazłem żadnych informacji na ten temat i przypuszczam, że odpowiedź brzmi nie, ale pomyślałem, że ktoś miałby bardziej ostateczną odpowiedź.


title: Najlepsze i najbezpieczniejsze API dla funkcji, która wypełnia bufor danymi o zmiennej długości

text: Mam funkcję, która odbiera bufor i zwraca niektóre dane w buforze. Dane mogą być mniejsze niż pojemność bufora. Który interfejs API jest do tego najlepszy i najbezpieczniejszy? * `int fn(void *buffer, size_t buffer_len)`: rozmiar danych zapisanych do `buffer` jest zwracany przez funkcję. Wada: zwracana wartość musi również wskazywać, że wystąpił jakiś błąd (wskaźnik błędu w paśmie). * `errno_t fn(void *buffer, size_t *buffer_len)`: w tym przypadku `buffer_len` działa zarówno jako wejście (pojemność bufora), jak i wyjście (rozmiar danych). Funkcja może zwrócić kod błędu. Myślę, że to jest w porządku, ale trochę niezręczne. * `errno_t fn(void *buffer, size_t *data_len, size_t buffer_len)`: jak poprzedni, ale z wejściem/wyjściem rozdzielonymi na dwa argumenty. Zwraca również kod błędu, ale jest również niewygodny z powodu zbyt wielu argumentów. (Jakieś inne opcje?)


title: Czy użycie tablicy mieszającej w zbieraniu śmieci rozwiąże światowy problem znakowania i zamiatania?

text: W algorytmie mark-sweep-compact garbage collection musisz zatrzymać świat podczas przenoszenia obiektów, ponieważ wykres referencyjny staje się niespójny i musisz zastąpić wartości wszystkich referencji wskazujących na obiekt. Ale co by było, gdybyś miał tablicę mieszającą z identyfikatorem obiektu jako kluczem i wskaźnikiem jako wartością, a referencje wskazywałyby na wspomniany identyfikator zamiast adresu obiektu ... wtedy naprawienie referencji wymagałoby zmiany tylko jednej wartości, a pauza byłaby potrzebna tylko wtedy, gdy obiekt próbuje się wpisać podczas kopiowania... Czy jest jakiś błąd w moim toku myślenia?


title: Idealny „pośredni” format pliku do użycia w przypadku tekstu strukturalnego/stylizowanego?

text: Mam pliki, które chcę udostępnić w różnych formatach: * HTML * PDF * EPUB * Zwykły tekst (być może) Większość plików będzie _sourced_ w formacie doc, docx lub rtf, więc należy to wziąć pod uwagę. Potrzebuję więc jakiegoś formatu, który dobrze konwertuje z docx, doc i rtf i ma mnóstwo bibliotek do konwersji na PDF, EPUB, HTML itp. Idealnie biblioteki w Pythonie, ale Java też jest w porządku.


title: Jaki jest najlepszy/najbardziej standardowy sposób mierzenia obciążenia serwera?

text: Jestem trochę zielony do aplikacji internetowych, chociaż jestem w końcowej fazie tworzenia jednej dla klienta. Używam Django z Gunicorn/Nginx na AWS m1.medium. Baza danych (MongoDB) znajduje się na osobnej instancji. Klient ma paranoję na punkcie skalowania, więc zebrałem prymitywny serwer monitorujący, który ma możliwość rozkręcania nowych instancji AWS, instalowania kodu aplikacji i równoważenia obciążenia (wiem, wiem, mogłem użyć ELB. Powiedziałem, że zielony, a mimo to fajnie było to pisać). Pytanie brzmi, tak naprawdę nie wiem, jakich wskaźników powinienem być świadomy. Skąd będę wiedzieć, że mój serwer aplikacji jest obciążony? PROCESOR? BARAN? Opóźnienie żądania? Wszystkie powyższe? Wszelkie wskazówki w tym zakresie będą mile widziane.


Czy w Windows Phone 7 (Mango) są nowe API, które wymagają nowego sprzętu telefonicznego? Rzeczy z żyroskopu? BTW, czy AppHub jest jedynym oficjalnym forum Microsoftu dla WP7? Strona rejestracji prosi o podanie nazwy wydawcy, strony internetowej i płatności? Chcę tylko zadawać pytania na forum.


title: dlaczego terminy używane w Scrum są tak dziwne?

text: Nie jestem native speakerem, obecnie czytam kilka artykułów o Scrumie. Zastanawiałem się, czy angielskie terminy używane w Scrumie wydają Ci się dziwne? Na przykład zaległości zamiast rzeczy do zrobienia; artefakt zamiast elementu; retrospektywa zamiast przeglądu; nawet nazwa Scrum nie ma dla mnie sensu jako nazwa procesu. Czy ktoś może mi coś podpowiedzieć? Na przykład nie widzę związku między scrumem w piłce nożnej a procesem iteracji. Fei


title: Wartości inne niż l-wartości jako parametry funkcji w C++

text: Czytam Accelerated C++ iw Rozdziale 4 przywołują pojęcie l-wartości. Jest przykład czegoś, co _nie powinno_ działać, ale po wypróbowaniu tego sam stwierdziłem, że rzeczywiście działa. W szczególności stwierdzają, że biorąc pod uwagę te funkcje: // zwróć pusty wektor wektor<podwójny> emptyvec() { wektor<podwójny> v; powrót v; } // wczytaj dane ze strumienia wejściowego do wektora<double> // (pomijam tutaj treść funkcji, ponieważ jest ona nieistotna) istream &read_things(istream& in, vector<double>& hw); To nie powinno być dozwolone: read_stuff( cin, emptyvec() ); Ponieważ emptyvec() jest wyrażeniem i zwraca obiekt tymczasowy (_nie-lwartość_, jak nazywali to w książce). Jednak to nie tylko się kompiluje, ale faktycznie działa (Windows 7/VisualStudio 2010). Więc co się dzieje? Czy to tylko zły przykład ze strony autorów, czy dzieje się coś innego, czego nie rozumiem. Dziękuję.


title: Jak możemy stworzyć określoną rzecz wbudowaną w język c z naszym własnym plikiem nagłówkowym?

text: Chcę dokonać podstawowych funkcji trygonometrycznych w funkcjach wbudowanych matematyki przy użyciu własnego pliku nagłówkowego. aby użytkownicy mogli wykonywać trygonometrię w kompilatorach języka c.


title: Projektowanie klasy listy z filtrowaniem i sortowaniem

text: Aplikacja, którą tworzę, musi wyświetlać listy elementów. Dość proste, ale jest kilka rzeczy, które mogą się zmienić w zależności od danych wprowadzonych przez użytkownika: * Pozycje mogą być dodawane/usuwane z listy. * Pozycje na liście można aktualizować. Wiele elementów można aktualizować jednocześnie! * Filtry można aktualizować. Wiele filtrów może być aktualizowanych jednocześnie! * Kolejność sortowania elementów może ulec zmianie. Prawdopodobnie istotne informacje: * Jest to wieloplatformowa aplikacja Java. * Jedną z platform, na których dystrybuujemy, jest MIDP, co ogranicza możliwości językowe/biblioteki/itp. * Implementacja jest obecnie podzielona na klasę modelu (we wspólnym kodzie) i klasy widoku/kontrolera specyficzne dla urządzenia. Próbowałem kilku podejść do zaprojektowania odpowiedniej implementacji listy, ale oba mają wady: **Podejście 1:** Implementacje kontrolera specyficzne dla platformy są odpowiedzialne za wywoływanie metody `refresh()` za każdym razem, gdy dzieje się coś, co może się zmienić Lista. Takie podejście sprawia, że implementacja klasy listy (modelu) jest dość prosta, ale pozostawia znaczną część odpowiedzialności implementacji kontrolera specyficznej dla platformy. Im więcej logiki jest w tych klasach, tym większa szansa na wkradanie się błędów. Zachęca to również kontrolerów do bezpośredniego powiadamiania o widoku aktualizacji, co wydaje się kiepskim projektem. **Podejście 2:** Model jest całkowicie odpowiedzialny za zgłaszanie zdarzeń w celu powiadamiania widoków specyficznych dla platformy o zmianach. Pozycje listy, filtr i sortery powiadamiają model o zmianach, a następnie powiadamiają widoki o zmianach. Dzięki temu klasy specyficzne dla platformy są znacznie prostsze i wydają się mocniejszym projektem (mniejsze sprzężenie między klasami itp.). Jednak implementacja klasy list staje się znacznie bardziej skomplikowana. Moim głównym problemem związanym z tym podejściem jest radzenie sobie z proliferacją zdarzeń, gdy wiele elementów/filtrów jest aktualizowanych w ramach jednej operacji. **Moje pytania:** 1. Czy są inne metody, które mógłbym/powinienem wypróbować? 2. Czy istnieje uznany sposób zarządzania/unikania eksplozji wydarzeń w podejściu nr 2?


title: Czy programiści powinni tworzyć własne wersje oprogramowania (jeśli istnieje zespół wsparcia prod)?

text: Wiem, że zawsze będą różnice w zależności od konkretnego rozmiaru, personelu itp., ale chciałem uzyskać ogólną opinię na temat: **W środowisku, w którym masz zespół wsparcia produkcyjnego, który zajmuje się wsparciem pierwszej linii i zarządzaniem wydaniami, czy to jest lepiej po prostu pozwolić programistom zarządzać własnymi wydaniami? W tym przypadku jego wewnętrzne oprogramowanie w firmie ubezpieczeniowej, ale pytanie powinno być ważne w każdej firmie, wielkości itp. ** Obecnie nasz zespół produkcyjny robi wydania, ale istnieje argument, że jest nieefektywny i że jeśli ty pozwoliło deweloperom na zrobienie tego, skupią się bardziej na uproszczeniu i wydajności oraz unikną przekazywania skryptów itp. do innego zespołu. Kontrargumentem jest to, że jeśli nie masz kontroli i równowagi, możesz pozyskać zespół programistyczny (lub osobę), która nie wykonuje zbyt chytrych zadań związanych z udostępnianiem swojego oprogramowania (wprowadzanie zmian w locie, a nie dokumentowanie proces, itp.) i zmuszając zespół wsparcia prod do faktycznego wydania, wymusza spójność i odpowiednie kontrole i równoważenie. Wiem, że to nie jest czarno-biała sprawa, ale chciałem zobaczyć, co ludzie o tym sądzą, więc dyscyplina i konsekwencja są, ale bez poczucia, że proces jest nieefektywny.


title: Jak radzić sobie z funkcjami asynchronicznymi, kiedy naprawdę chcesz tylko zsynchronizować rzeczy?

text: Jestem całkiem nowy w NodeJS i trudno mi owijać głowę wokół asynchronicznej natury funkcji, kiedy naprawdę chcę, aby jedno wywołanie następowało po drugim w sposób zsynchronizowany. Powiedz na przykład, że dzwonię do metod usług internetowych. Każda metoda ma funkcję zwrotną. Ale co, jeśli chcę zadzwonić do 10 z nich w określonej kolejności? Czy naprawdę muszę łączyć/osadzać wszystkie funkcje w pierwszym wywołaniu zwrotnym? Co się stanie, jeśli za drugim razem łańcuch będzie nieco inny? Czy istnieją jakieś eleganckie wzorce radzenia sobie z sytuacjami, w których naprawdę chcesz, aby rzeczy były synchroniczne? Czy naprawdę powinienem odpuścić tego rodzaju programowanie, przyzwyczaić się do innego sposobu myślenia? Jeśli to prawda, może ktoś może wskazać mi czysty przykład dłuższego łańcucha funkcji za pomocą wywołań zwrotnych...


title: zatrudnienie projektanta stron internetowych: zadanie projektowe

text: Muszę zatrudnić projektanta stron internetowych. Jak przetestować jego kreatywność i umiejętności, zanim go zatrudnię. Idealnie chciałbym dać mu dość otwarte zadanie, tj. Podaję mu opis problemu i poproszę o zaprojektowanie pliku PSD. Jakieś sugestie dotyczące opisu problemu, który mógłbym mu dać? Czy jest też lepszy sposób na zatrudnienie/przetestowanie projektanta stron internetowych?


title: Jak poprawnie zwalidować swój kod?

text: Mam około 4000 linijek kodu do aplikacji webowej w JavaScript / PHP / CSS / HTML. Jak mogę to właściwie przetestować? Obsługuję tylko najnowszą wersję IE i Safari. Rozpracowałem wszystkie błędy. Czy istnieje dobry sposób na przetestowanie tego, abym mógł posunąć się do wywołania kodu odpornego? Rozważałem użycie perla Mechanize do automatycznego wypełniania formularzy lub zrobienia czegoś podobnego. Mam również klasę testową PHP do testowania wewnętrznego działania moich klas PHP. Czy jednak istnieją jakieś standardy lub wytyczne dotyczące zgodności, które należy spełnić? Czy istnieje sposób, aby powiedzieć, że ten kod spełnia standardy IEEE xxx foo dla odporności kodu itp.? Sprawdziłem mój HTML za pomocą walidatorów W3 i zweryfikowałem mój JavaScript za pomocą jslint.com. Oto lista elementów do staranności: 1. HTML / CSS przechodzi walidację W3 2. JavaScript przechodzi jslint 3. PHP przechodzi wewnętrzne testy PHP Test Class User Testing 1. Utwórz zestaw akcji użytkownika i zaimplementuj używając perl mechanize lub podobnego. Czy istnieją standardy lub procedury publikowania kodu w sieci?


title: Testowanie fasad, czy to dobry pomysł?

text: Natknąłem się na potrzebę stworzenia cienkiego interfejsu I/O Layer, aby oddzielić klasę od konieczności poznania publicznego interfejsu I/O IFileIOProvider { Task WriteFileAsync(String content, String path); Task<String> ReadFileAsync (ścieżka String); } Czy dobrym pomysłem jest przetestowanie domyślnej implementacji, która _tylko_ wraca do standardowych klas .Net System.IO, bez dołączonej logiki?. Myślę, że to może być przesada, ale chcę tylko, aby moja strategia została sprawdzona przez bardziej doświadczonych programistów


title: Jak zmienia się koncepcja klasy podczas przekazywania danych do konstruktora zamiast parametrów metody?

text: Powiedzmy, że robimy parser. Jedną z implementacji może być: public Sealed class Parser1 { public string Parse(string text) { ... } } Lub możemy przekazać tekst do konstruktora zamiast tego: public sealed class Parser2 { public Parser2(string text) { this.text = tekst; } public string Parse() { ... } } Użycie jest proste w obu przypadkach, ale co to _oznacza_ włączyć wprowadzanie parametrów do `Parser1`, w porównaniu z innymi? Jaką wiadomość wysłałem do kolegi programisty, gdy spojrzy na API? Ponadto, czy w niektórych przypadkach są jakieś zalety/wady techniczne? Kolejne pytanie pojawia się, gdy zdaję sobie sprawę, że interfejs byłby zupełnie bez znaczenia w drugiej implementacji: public interface IParser { string Parse(); } ...gdzie interfejs na pierwszym z nich mógłby służyć przynajmniej do pewnego celu. Czy to coś szczególnego oznacza, że klasa jest „interfejsowa” czy nie?


title: Jeśli instancja jest przeznaczona dla klasy, co jest dla szablonu?

text: Nie jestem w stanie znaleźć odpowiedniego technicznego terminu, aby wymienić dziecko lub wystąpienie szablonu. Co jest właściwe, dziecko, instancja lub coś innego, czego nie jestem świadomy? Przepraszam za moje niejasne oryginalne pytanie. Nie jest związany z żadnym językiem. Szablon, o którym mówię, to koncepcja biznesowa w mojej aplikacji. Powiedzmy na przykład, że mam szablon „krzesło”. Ustawiłbym dla niego kilka wartości właściwości, aby utworzyć użyteczne instancje. Potrzebuję tego do nazewnictwa i dokumentacji. Na krótkiej liście 3 terminy: Instancja, Definicja, Dziecko. Co lepiej pasuje?


title: Czy można wprowadzać zmiany stylu kodowania w projekcie typu open source, który nie jest zgodny z najlepszymi praktykami?

text: Ostatnio natknąłem się na kilka projektów open source Ruby (lub większość z nich to Ruby) na GitHub, które po sprawdzeniu za pomocą narzędzia do analizy kodu, takiego jak Rubocop, powodują wiele wykroczeń. Obecnie większość z tych wykroczeń obejmuje używanie podwójnych cudzysłowów zamiast pojedynczych cudzysłowów (gdy nie jest to interpolacja), nieprzestrzeganie reguły 2 spacji na poziom, przekraczanie reguły długości wiersza 80 znaków lub używanie `{` i `}` dla wielu znaków bloki liniowe. > [The] Przewodnik po stylu Ruby zaleca najlepsze praktyki, aby programiści Ruby > w świecie rzeczywistym mogli pisać kod, który może być utrzymywany przez innych programistów Ruby > w świecie rzeczywistym. ~ Źródło: Przewodnik po stylu Ruby Chociaż są one małe i łatwe do naprawienia, czy jest właściwe, aby zmienić styl kodowania projektu open source poprzez naprawienie wykroczeń i wykonanie Pull Request? Przyjmuję do wiadomości, że niektóre projekty, takie jak Rails, nie akceptują kosmetycznych zmian, a niektóre są po prostu zbyt duże, aby je „naprawić” za jednym razem (na przykład Railsy generują ponad 80 000 wykroczeń, gdy uruchomiony jest Rubocop - niezależnie od tego, mają swój własny mały zestaw kodowania konwencje, których należy przestrzegać podczas wnoszenia wkładu). W końcu przewodnik po stylu Ruby istnieje nie bez powodu wraz z narzędziami takimi jak Rubocop. Ludzie doceniają spójność, więc wprowadzanie tego rodzaju zmian jest dobrą rzeczą dla całej społeczności Ruby, prawda? > [Autorzy przewodnika po Ruby Style Guide] nie wymyślili wszystkich zasad > znikąd - opierają się one głównie na mojej rozległej > karierze jako profesjonalnego inżyniera oprogramowania, opiniach i sugestiach od członków > Społeczność Ruby i różne wysoko cenione zasoby programistyczne > Ruby, takie jak "Programming Ruby 1.9" i "The Ruby Programming Language". ~ Źródło: > Przewodnik po stylu Ruby Czy przestrzeganie wspólnotowych konwencji stylistycznych i najlepszych praktyk nie zachęca do _złych_ praktyk?


title: Jak program przetwarza współbieżne wykonania?

text: Mam aplikację konsolową, która jest uruchamiana przez pobranie parametrów wejściowych. Można go skonfigurować poprzez podanie parametru nazwy raportu, np. `reportgen.exe sprzedaż.xml`. Trafia do bazy danych i pobiera dane do pliku xml i wysyła na stronę sftp. Cały ten proces jest rejestrowany, a `pliki xml` są zapisywane w katalogu. Ten `exe` musi być zaplanowany codziennie, więc co się stanie, jeśli plik exe zostanie zaplanowany w tym samym czasie z różnymi parametrami. Czy jest bezpieczny dla wątków i może być uważany za niezależne wykonanie wykonujące to, co powinno? **Edytuj:** używa log4net do rejestrowania informacji debugowania. do pliku. A więc, w jaki sposób zapisuje instrukcje dziennika w jednym pliku w celu równoczesnego wykonywania.


title: Laptop FRC Robotyka? Windows 7 czy 8?

text: Doradzam zespołowi FRC Robotics i kupujemy nowy komputer. Patrzę na Lenovo Thinkpad W540. Do projektowania będziemy używać C++/WPILIB i SolidWorks. Czy ktoś ma doświadczenie z tym laptopem? Czy powinniśmy pozostać przy Windows 7-64bit, czy przejść na Windows 8? Jestem również ciekaw, czy oprogramowanie antywirusowe wpływa na wydajność… errr… czy to powinno być osobne omówienie? Dziękuję!


title: Ile powinniśmy wydać na poprawę bezpieczeństwa oprogramowania?

text: Czy istnieje „naukowa” metoda określania, ile zasobów/pieniędzy należy przeznaczyć na poprawę bezpieczeństwa oprogramowania? Pracuję w zespole, w którym priorytetem naszej pracy jest właściciel produktu (ala Scrum). Właściciel produktu jest w pewnym sensie napędzany sprzedażą i skupia się na nowych funkcjonalnościach wymaganych przez klientów, a mniej na infrastrukturze. Myślę, że potrzebuję sposobu, aby przekonać go, że musimy poświęcić więcej czasu na poprawę bezpieczeństwa. Oczywiście nie chcę go przekonywać szerzeniem strachu i sam nie jestem pewien, ile pieniędzy powinniśmy wydać na poprawę bezpieczeństwa. Oczywiście bezpieczeństwo naszego oprogramowania jest cały czas poprawiane, ale podejrzewam – nie wiedząc na pewno – że rozsądne byłoby podwojenie wysiłków w tym obszarze. Mam słabą pamięć czytając o tym, gdzie zasugerowano coś takiego: 1. Pomyśl o słabym punkcie bezpieczeństwa w systemie 2. Oszacuj, ile kosztowałby udany atak pod względem utraconych/niezadowolonych klientów (X ) 3. Oszacuj prawdopodobieństwo, że nastąpi to w danym roku. (Y) 4. Oblicz ile należy wydać na naprawienie słabych punktów na podstawie X i Y. Nie musimy rozwiązywać problemu od razu, ale powinniśmy wydać na to Z procent.


title: Jak poradzić sobie z założeniami projektując dowolny system?

text: Przeszedłem przez różne przykłady projektowania systemów, aby zrozumieć, w jaki sposób podchodzimy do każdego pytania dotyczącego projektowania systemu. Oto, co zrozumiałem do tej pory. 1. Najpierw poznaj system i dowiedz się, jak działa. 2. Pomyśl o wszystkich przypadkach użycia. 3. Zidentyfikuj kluczowe elementy i ich obowiązki. 4. Połącz wszystkie komponenty, aby mogły się ze sobą komunikować. 5. Stosuj wszystkie standardowe praktyki podczas integrowania komponentów i, jeśli to możliwe, używaj standardowych wzorców projektowych. Czasami robimy założenia dotyczące systemu, więc te założenia powinny być wykorzystane do usunięcia jednego przypadku użycia lub dodania odmiany. Pytanie to postawię w kontekście projektu Parkingu. Jeśli założę, że Parking nie jest komercyjny, a jest parkingiem bezpłatnym, to projekt parkingu powinien traktować parking bezpłatny jako jeden z przypadków użycia i powinien być ogólny. LUB Po prostu zaprojektuj parking, który nigdy nie będzie działał na parkingu komercyjnym. Główną ideą jest to, że jeśli ktoś prosi Cię o zaprojektowanie parkingu, a to jest bezpłatny parking, to projekt powinien być ogólny czy konkretny?


title: Jak sprawić, by folder node_modules odczytywał/zapisywał w WebStormie?

text: Używam WebStorm w projekcie Node.js i chcę edytować pliki w folderze node_modules, ale WebStorm nie pozwoli na to. Znalazłem kłódkę w prawym dolnym rogu IDE, ale przełączanie między blokowaniem / odblokowaniem nie ma znaczenia. Jakieś pomysły?


title: Jaka jest najlepsza zawartość programistyczna, którą może skonsumować początkujący współzałożyciel techniczny (dla 2-osobowego zespołu)?

text: **Moje doświadczenie jest następujące:** Nie mam prawie żadnego doświadczenia w programowaniu (programowałem modyfikację gry w Jr. High i od 15 lat jestem uśpiony). Czuję się całkiem komfortowo zarówno z vimem, jak i emacsem (w przeszłości używałem ich do edycji tekstu ogólnego przeznaczenia). Jestem absolwentem matematyki z doświadczeniem badawczym w dziedzinie logiki. Czytałem od deski do deski _Język programowania C_ (wykonałem około 1/4 ćwiczeń) i _Pragmatic Programmer_. Czułem, że koncepcje omawiane w tych książkach przyszły mi całkiem naturalnie, chociaż podejrzewam, że _czytanie_ o programowaniu jest podobne do czytania o tym, jak uprawiać seks (tj. prawie bezwartościowe w praktyce). **Moim głównym celem programistycznym jest jak najszybsze konstruowanie wstępnych prototypów oprogramowania.** Chciałbym również zrozumieć ogólny obraz tego, jak wszystko działa na poziomie oprogramowania. Niestety nie wiem jeszcze, czy nasz pierwszy prototyp będzie zawierał aplikację na iOS czy aplikację webową. Mając to na uwadze, jaka jest najlepsza treść techniczna, którą mogę wykorzystać w krótkim okresie (z myślą o szybkim prototypowaniu), zanim dowiem się, co faktycznie próbuję zbudować i przetestować?


title: Czy programowanie gier wideo jest zwykle związane z fizyką?

text: Wiem, że to oczywiście nie jest prawdą w przypadku niektórych gier, saperów, gier karcianych itp. Ale co z każdą grą symulującą środowisko świata rzeczywistego. Oczywiście te gry mają jakąś formę inżyniera fizyki napędzającego grafikę. Dla kogoś takiego jak ja, które osobiście nie lubi fizyki, ale kocha gry wideo, czy mam szansę kiedykolwiek zaangażować się w cykl rozwoju takiej gry wideo, nie lubiąc fizyki?


title: Jakie są najlepsze praktyki minimalizowania kodu?

text: Podczas utrzymywania witryn stworzonych przez nasz zespół programistów natrafiliśmy na pliki dołączane i wtyczki, które okazały się bardzo przydatne dla więcej niż jednej części naszych aplikacji. Większość z tych modułów zawiera dwa różne pliki, normalny plik źródłowy i plik min. Widząc, że wydajność i szybkość strony można zwiększyć, minimalizując rozmiar pliku, zamierzamy zrobić to również na naszych stronach. Problem, który napotykamy, polega na tym, że wiele naszych normalnych stron (napisanych w klasycznym ASP) jest mieszanką HTML, ASP, JavaScript, CSS i plików dołączanych. Mamy kilka stron, które mają swój JS zarówno w plikach dołączanych, jak i na stronie, w zależności od tego, czy funkcja jest rzeczywiście używana tylko na tej stronie, czy też jest używana na wielu innych stronach. Na przykład mamy plik common.js i ajax.js, oba są używane na wielu stronach, ale nie na wszystkich. Oprócz posiadania pewnych funkcji na stronie, których umieszczanie na jednej stronie wzorcowej nie ma sensu. To, co widziałem, jak kilka innych osób robi online, to używanie jednego głównego pliku JS i umieszczanie w nim wszystkich swoich javascriptów, minimalizowanie go, gzipowanie i używanie tego tylko na swoim serwerze produkcyjnym. Znowu byłoby świetnie, ale nie wiem, czy to w pełni działa dla naszych celów. To, czego szukam, to jakiś kierunek, w którym mam się z tym pogodzić. Opowiadam się za umieszczeniem całego naszego JS w jednym pliku dołączonym i dołączeniem go do każdej trafionej strony. Jednak nie każda strona, którą mamy, potrzebuje każdego kawałka JS. Czy więc warto byłoby skompilować i minifikować pliki w jeden plik główny i umieszczać go wszędzie, czy też lepiej byłoby zminifikować wszystkie inne pliki i nadal uwzględniać je w razie potrzeby?


title: PHP Najprostszy tokenizer XML do przetwarzania ciągów znaków?

text:
Muszę wykonać kilka _zadań przetwarzania tekstu_ z _krótkimi fragmentami XML_. Sekcja "szczegóły" pokazuje przykład... Moim rozwiązaniem jest użycie _tokenizera_ opartego na _wyrażeniach regularnych_ , ale nie jest on elegancki i nie używa żadnej wbudowanej funkcji. Kandydujące funkcje wbudowane (które inni mi wskazują) to strtok i SimpleXML. Więc moje pytanie składa się z dwóch części: 1. **Moje założenia są poprawne?** Nie ma innych "kandydatów", tylko strtok i SimpleXML? Czy słuszne jest myślenie, że DomDocument jako „słoń” (z dużym obciążeniem procesora) do prostego _zadania przetwarzania tekstu_? 2. **Jak używać SimpleXML do wykonania tego samego (przedstawionego) zadania?** PS: Nie potrzebuję całego algorytmu lub implementacji, tylko kilka wskazówek. * * * # Szczegóły PHP oferuje tokenizer, strtok, bardzo prosty i nie wiem jak go używać z ciągiem XML. Opcja SimpleXML jest prawdopodobnie ciężka dla zadań takich jak "przetwarzanie tekstu" (zobacz ten przykład i poniżej) i jest czymś więcej niż tokenizerem. Co konkretnie chcę powiedzieć z „tokenizerem” i „przetwarzaniem tekstu”? Zobacz przykład poniżej. Użyłem "parsera regex", ale **Chciałbym algorytm oparty na jakiejś wbudowanej funkcji, takiej jak SimpleXML, jeśli jest prostszy i szybszy**. $xmlFrag = '
  Witaj świecie!

  Piękny dzień dzisiaj.
'; // TOKENIZOWANIE TAGÓW I encji: $reg=array(); $xmlFrag = preg_replace_callback( '/<!\-\-.+?\-\->|<.+?>|&[a-z0-9]+;/is', function ($m) { global $ reg; $reg[]=$m[0];$n=count($reg)-1;zwróć "##$n#"; }, $xmlFrag ); echo $xmlFrag; // wyniki: // ##0###1# Witaj świecie!##2# ##3###4###5# Piękny##6# dzień dzisiaj.##7# // PRZETWARZAJ TEKST : dowolny, w jednym kroku. Przykład: dolna, górna, zmiana ortografii itp. $xmlFrag = strtoupper($xmlFrag); echo $xmlFrag; // ###0###1# HELLO WORLD!##2# ##3###4###5# PIĘKNE##6# DZIEŃ DZISIAJ.##7# // ROZWIJANIE TOKENÓW: $xmlFrag = preg_replace_callback ( '/##([0-9]+)#/jest', function ($m) { global $reg; return $reg[$m[1]]; }, $xmlFrag ); echo $xmlFrag; //
  HELLO WORLD!
 //
  PIĘKNY DZIEŃ DZISIAJ.
 * * * ## Korzystanie z SimpleXML Jak zaimplementować algorytm SimpleXML w celu rozwiązania przedstawionego problemu (kod powyżej)? PROBLEMY: * Załaduj XML z nazwanymi jednostkami (jako ` ` w przykładzie). * Przemierz XML, aby uzyskać tylko węzły tekstowe. Za pomocą `$sx->xpath('//text()');` nie mogę edytować węzłów. ## Używanie DomDocument To jest poza kontekstem, ponieważ moje fragmenty XML są krótkie, a DomDocument nakłada duże obciążenie procesora (? czy to z góry założenie?) dla prostego przetwarzania tekstu.


title: Czy powinienem otwierać pull requesty z oddziału na oficjalnym repo czy na moim forku?

text: Mam dostęp do zatwierdzania w projekcie open source o nazwie Foo hostowanym na GitHub (istnieje wiele innych osób zatwierdzających, jeśli jest to istotne). Chciałbym wprowadzić zmianę poprzez pull request, aby ktoś inny sprawdził ją, zanim zostanie zatwierdzona do głównej gałęzi bazy kodu Foo. Aby wykonać to żądanie ściągnięcia, mogę albo utworzyć gałąź w oficjalnym repozytorium Foo, albo mogę forkować Foo i zobowiązać się do gałęzi na moim widelcu. Jakie kwestie powinienem wziąć pod uwagę przy podejmowaniu decyzji, czy złożyć żądanie ściągnięcia na oficjalnym repo, czy na moim widelcu?


title: Jaki jest najlepszy sposób przechowywania konfiguracji kodu powłoki/skryptu do późniejszego wykonania?

text: Pracuję nad narzędziem (Python, może być ważny lub nie), które pozwoli użytkownikowi na utrzymanie pliku konfiguracyjnego zawierającego dowolny kod powłoki i/lub języka, który będzie wykonywany przy określonych zdarzeniach i interwałach. Kod może zawierać wiele instrukcji. Rozumiem, że istnieją potencjalne zagrożenia behawioralne i bezpieczeństwa związane z wykonywaniem dowolnego kodu z pliku, ale nie sądzę, aby stanowiło to problem, ponieważ plik konfiguracyjny jest zarządzany tylko przez użytkownika końcowego. Daj mi jednak znać, jeśli przeoczam coś ważnego. Moje główne pytanie: jaki jest najlepszy sposób na przechowywanie tego kodu w konfigurowalny sposób? * * * Niektóre koncepcje rozważam przechowywanie kodu... We wspólnym pliku konfiguracyjnym (którego wiele bibliotek Pythona już szuka): # setup.cfg [mój_program] command_1 = cd /tmp && touch foobar W pliku YAML : # my_program.yaml command_1: cd /tmp && touch foobar W pliku źródłowym jako argumenty do `subprocess.call()`: # settings.py command_1 = [['cd', '/tmp'], ['touch' , 'foobar']] # wymaga specjalnej obsługi 'cd' W pliku źródłowym jako funkcji: # settings.py import os import subprocess def command_1(): os.chdir('/tmp') subprocess.call([' dotykać', 'foobar'])


title: Przechowywać zdjęcia w wysokiej rozdzielczości w bazie danych czy jako plik?

text: Prowadzę witrynę, która ma kilka milionów zdjęć i każdego dnia przesyła ponad 1000 zdjęć. Do tej pory nie zachowywaliśmy oryginalnego pliku, który został przesłany, aby zaoszczędzić miejsce. Dochodzimy jednak do momentu, w którym zaczynamy dostrzegać potrzebę posiadania oryginalnych wersji w wysokiej rozdzielczości. Zastanawiałem się, czy lepiej przechowywać je w systemie plików jako rzeczywisty plik, czy lepiej przechowywać je w bazie danych (np. mysql). Obrazy o wysokiej rozdzielczości są rzadko przywoływane, ale mogą być używane, gdy ktoś zdecyduje się je pobrać lub zdecydujemy się użyć ich do rzadkich procesów, takich jak tworzenie nowego zestawu rozmiarów miniatur / itp.


title: Ocena wskaźników C++ i funkcji: brak inspiracji

text: Mam ocenę do wystawienia moim uczniom. Chodzi o C++ i wskaźniki do funkcji. Ich umiejętności są średnie: to pierwszy rok szkoły programowania po licencjacie. Aby dać ci coś konkretnego, oto próbka **rozwiązania** jednego z **3** ćwiczeń, które musieli wykonać w ciągu 30 minut (pytanie brzmiało: „ _tutaj jest wersja kodu, który można napisać za pomocą funkcji wskaźniki, zapisz to samo, ale z funkcją wskaźniki_ "): typedef void (*fcPtr) (istream &); fcPtr ArrayFct [] = { Usuń , Wstaw, Zamień, Przenieś }; void HandleCmd (const string && Cmd) { string AvalaibleCommands ("DISM"); string::size_type Poz; strumień strumienia strumienia (Cmd); char CodeOp; Flux >> CodeOp; Pos = AvalaibleCommands.find (toupper (CodeOp)); if (Poz != string::npos) { ArrayFct [Poz](Flux); } } * * * Jakiś pomysł, gdzie mógłbym znaleźć inspirację? Niektórzy ze studentów zrozumieli zasady, mimo że pisanie kodu w C++ jest dla nich bardzo trudne. Znam ich, wiem, że są sprytni i jestem pewien, że powinni być bardzo dobrymi kierownikami projektów. Tak więc pisanie kodu w C++ nie jest _tak_ ważne. Zrozumienie jest najważniejszą częścią (IMHO). Zastanawiam się, czy może przełamać przyzwyczajenia i zadać połowę pytań o zasadę, a jeszcze lepiej dać próbkę w _innym_ języku i zapytać, dlaczego lepiej używać wskaźników do funkcji zamiast klasycznego programowania (zazwyczaj duży `przełącznik przypadku"). Jakiś pomysł, gdzie mógłbym zajrzeć? Znajdź inspirację?


title: Współbieżność i anulowanie na podstawie aktora

text: Czytam o współbieżności opartej na aktorach i doceniam prostotę aktorów sekwencyjnie przetwarzających wiadomości w jednym wątku. Jest jednak jeden scenariusz, który nie wydaje się możliwy. Załóżmy, że aktor A wysyła komunikat do aktora B, który następnie wykonuje długo działające zadanie i zwraca komunikat o zakończeniu do aktora A. Jak aktor A może zmusić aktora B do anulowania długo działającego zadania po jego uruchomieniu? Jeśli aktor B uruchamia zadanie w swoim wątku kolejki komunikatów, nie odbierze komunikatu o anulowaniu, dopóki nie zakończy zadania; jeśli aktor B wykonuje zadanie w tle, to wydaje się, że narusza to zasadę aktorów. Czy istnieje wspólny sposób, w jaki ten scenariusz jest obsługiwany przez aktorów? A może każdy język/rama aktora przyjmuje inne podejście? A może nie jest to odpowiedni problem do rozwiązania za pośrednictwem aktorów?


title: Jaki jest dobry język skryptowy do pisania zadań administracyjnych serwera?

text: Administruję setkami serwerów RHEL. Do wykonania jest wiele codziennych zadań. Obecnie zajmuję się skryptowaniem bash i pythonem. Zastanawiałem się, czy inne języki, takie jak Erlang, Lua, Ruby, Haskell lub Clojure.


title: Jakie są etapy tworzenia procesu testowania?

text: To pytanie zadano mi w ramach zadania. Pytanie jest trochę niejasne, a po przeszukaniu Internetu nie mogę znaleźć żadnego konkretnego zestawu kroków związanych z tym pytaniem. Najlepsze, jakie udało mi się znaleźć, to: 1. Zaprojektuj przypadki testowe 2. Przygotuj dane testowe 3. Uruchom program z danymi testowymi 4. Porównaj wyniki z danymi testowymi Czy są to prawidłowe kroki, które można wykonać, aby stworzyć proces testowy? Czy może źle interpretuję pytanie?


title: Czy początkowe nieefektywne rozwiązania mogą INSPIROWAĆ lepsze, a tym samym prowadzić do szybszego rozwiązywania problemów?

text: W obliczu pisania algorytmu do rozwiązania małego projektu/problemu, lepiej wymyślić pseudokod, który nie jest wydajny/optymalny, ale rozwiązuje problem, a następnie spróbować użyć nieefektywnego kodu, aby **zainspirować** lepszy/ dobre rozwiązanie? Rozwiązanie musi być akceptowalne, niekoniecznie typu „super-niesamowite-nie z tego świata”. Odpowiedź jest subiektywna, ale szukam ogólnej opinii lub konsensusu od doświadczonych programistów w celu opracowania lepszego procesu generowania algorytmów / rozwiązywania problemów. _Powodem, dla którego o to pytam, jest to, że często zaczynam komponować najbardziej intuicyjny algorytm, ale potem wykoleiłem się, myśląc o tym, jak nieefektywny jest i czy powinienem używać lepszych struktur danych itp. _


title: Jak znaleźć rodzeństwo drzewa?

text: Na rozmowie kwalifikacyjnej na staż zadano mi następujące pytanie: > Na tablicy napisz najprostszy algorytm z wykorzystaniem rekurencji, który > bierze korzeń z tzw. i połącz każde dziecko w tym drzewie > ze swoim rodzeństwem. Więc jeśli mam: 1 / \ 2 3 / \ \ 4 5 6 / \ 7 8, to rodzeństwo do 2 będzie miało 3, do czterech pięciu, do pięciu sześciu i do siedmiu ośmiu. Nie zrobiłem tego, chociaż zmierzałem we właściwym kierunku. Zrobiłem to później (następnego dnia) w domu, ale z użyciem debuggera. Zajęło mi to mniej więcej dwie godziny i 50 linijek kodu. Osobiście uważam, że to było bardzo trudne pytanie, prawie niemożliwe do poprawnego wykonania na tablicy. Jak byś to rozwiązał na tablicy? Jak zrozumieć to pytanie bez użycia debugera?


title: Czy to jest właściwa sytuacja, aby użyć stałej?

text: Więc mój profesor przekazywał informacje zwrotne na temat projektu, nad którym pracowałem. Zadokował kilka znaków dla tego kodu: if (comboVendor.SelectedIndex == 0) { createVendor cv = new createVendor(); cv.ShowDialog(); loadVendors(); } To jest w combobox handler "zmieniony indeks". Jest używany, gdy użytkownik chce utworzyć nowego dostawcę, moja górna opcja (indeks 0, który nigdy się nie zmienia) otwiera okno dialogowe „Utwórz nowego dostawcę”. Tak więc zawartość mojego pola kombi wygląda tak: Utwórz nowego dostawcę... Istniejący dostawca Istniejący dostawca 2 Istniejący dostawca 3 Jego problem dotyczy kodu pierwszej linii: if (comboVendor.SelectedIndex == 0) Twierdzi, że 0 powinna być stała i faktycznie zadokowała mi znaki z tego powodu. Twierdzi, że nie powinienem w ogóle używać literałów w swoim kodzie. Chodzi o to, że nie rozumiem, dlaczego miałbym chcieć, aby ten kod w tej sytuacji był stały. Ten indeks nigdy się nie zmieni i nie jest to coś, co trzeba by poprawić. Wydaje się, że trzymanie w pamięci pojedynczego 0, które jest używane w bardzo specyficznej sytuacji i nigdy się nie zmienia, wydaje się marnowaniem pamięci.


title: Jak mogę przetestować parser dla niestandardowego schematu XML?

text: I 'm analizuje format XML na zamówienie do wykresu obiektów przy użyciu .NET 4.0. Mój parser używa wewnętrznie przestrzeni nazw `System.XML`, następnie przesłuchuję odpowiednie właściwości XmlNodes, aby utworzyć wykres mojego obiektu. Mam pierwsze cięcie parsera działającego na podstawowym pliku wejściowym i chcę przeprowadzić kilka testów jednostkowych, zanim przejdę do bardziej złożonych plików wejściowych. **Czy istnieje wzorzec testowania parsera takiego jak ten?** Kiedy zacząłem się temu przyglądać, moim pierwszym krokiem było wykonanie new up i XmlDocument, XmlNamespaceManager i utworzenie XmlElement. Ale wydaje mi się, że jest to dość długie i podatne na ludzkie błędy. Mój parser jest dość rekurencyjny, jak możesz sobie wyobrazić, co może prowadzić do testowania całego systemu, a nie poszczególnych jednostek (metod) systemu. Więc drugie pytanie może brzmieć: **Jaka refaktoryzacja może sprawić, że parser rekurencyjny będzie bardziej testowalny?**


title: Tworzenie instancji klasy implementującej interfejs

text: Mam interfejs o nazwie `Cell`. Na początku kodu czytam dane wejściowe, z których mogę poznać klasę implementującą (nie jako obiekt klasy, ale mogę poznać np. ciąg znaków). A potem muszę wywołać konstruktora dla klasy implementującej, aby zainicjować obiekt. Jaki byłby najlepszy sposób na wdrożenie tego. Pierwszą rzeczą, o której myślę, jest zrobienie czegoś takiego ("Komórka" to interfejs, "Kula" i "Prostokąt" implementują "Komórkę". Po odczytaniu danych wejściowych mogę ustawić flagę logiczną o nazwie "sfera"): Komórka komórka startowa; if (sphere) startcell = new Sphere(0); w przeciwnym razie komórka startowa = new Rectangle(0); Ale czy to dobry projekt?


title: Równoległe wątki w oprogramowaniu wielojęzycznym?

text: Tworzę oprogramowanie, które zawiera wiele modułów/demonów działających równolegle, to czego szukam to jak to zaimplementować, nie mogę używać Thread ponieważ niektóre z tych modułów/demonów są prawdopodobnie zaimplementowane w innych językach (C, java ,C#...). Na przykład używam C do przechwytywania komunikatów wymienianych między jądrem systemu Windows a aplikacjami najwyższego poziomu, Java/C#, aby użyć jakiejś darmowej biblioteki do prostego parsowania XML (na przykład) lub do akceptowania i wykonywania poleceń przez sieć.. można to zrobić przez język C, ale tylko po to, by poprawić produktywność... Wreszcie dla GUI używam Ultimate++ (c++), który jest jak główny proces, który wywołuje i monitoruje (aktywuj/dezaktywuj/pobieraj stan) wszystkich innych modułów/Daemona poprzez interfejs. Przyznaję, że rozwój każdego modułu/Daemona w osobnym języku znacznie ułatwia utrzymanie, ale przede wszystkim jestem do tego zobowiązany.. Jak najlepiej to zrobić? Wszelka pomoc zostanie doceniona.


title: Co jest preferowane dla operacji we/wy plików w Javie?

text: Z trzech * BufferedReader/Writer * Binary Streams * Channels, który jest bardziej preferowany **w prawdziwym życiu** dla operacji we/wy plików w Javie i dlaczego? Wolę kanały dla danych binarnych, które mają być umieszczane w pliku lub odczytywane z BufferedReader/Writer for String data


title: Czy Dart ma jakieś przydatne funkcje dla programistów internetowych?

text: http://www.dartlang.org/ Bardzo krótko sprawdziłem stronę i zaciekawiło mnie to. Czy są jakieś zalety korzystania z Darta? Czy to tylko zamiennik JavaScript? Wygląda na prostszą Java. Pisząc dużo C# w pracy, język jest bardzo podobny do tego, do czego jestem przyzwyczajony, więc nauka składni wygląda jak pestka. Czy ktoś ma jakieś opinie lub doświadczenia z językiem? (W porównaniu do CoffeeScript (= nie robię składni Ruby) składnia wygląda na bardziej znajomą).


title: Dlaczego przeglądarki są obecnie dostarczane z narzędziami programistycznymi?

text: Właśnie przeczytałem pytanie, w jaki sposób Facebook blokuje ataki skryptowe oparte na konsoli. Powodem tej blokady było zapobieżenie ostatnio słynnemu "hackowi", w którym można nakłonić użytkownika do wstrzyknięcia złośliwego skryptu przez konsolę z obietnicą czegoś (natychmiastowe polubienia, kto mnie oglądał itp.). A potem zastanawiam się: _Dlaczego w dzisiejszych czasach przeglądarki w ogóle są dostarczane z narzędziami programistycznymi?_ Teraz kilka przemyśleń: * Nie każdy jest programistą i nie potrzeba tych narzędzi tylko do surfowania po Internecie i czytania e-maili. * Jeśli ktoś naprawdę chciałby debugować stronę, mógł po prostu wysłać ją jako osobny dodatek, podobnie jak Firefox miał Firebuga, zanim miał również własne narzędzia programistyczne. * Jeśli problemem było rozwiązywanie problemów, to czy konsola błędów, taka jak w Firefoksie 3, nie wystarczy? A przeglądarki w dawnych czasach nie miały narzędzi do debugowania, tylko jakiś interfejs do wyświetlania błędów (IE miał pasek stanu, Firefox miał konsolę błędów). * Czy nie byłoby dodatkowym obciążeniem dla przeglądarki, gdyby miała schowane te narzędzia? Dlaczego więc jest to trend w przeglądarkach w dzisiejszych czasach? Czy jest coś, co przegapiłem, co sprawia, że dostawcy naciskają na dostarczanie narzędzi wraz z przeglądarką.


title: W jaki sposób programiści zaimplementowali idee list połączonych przed paradygmatem obiektowym?

text: O ile widziałem, listy połączone są w dużej mierze implementowane przy użyciu idei zorientowanych obiektowo. (posiadanie obiektu, który zawiera pewne informacje i adres następnego linku). W jaki sposób zaimplementowano listy połączone przed pojawieniem się paradygmatu obiektowego? Czy zostały wynalezione(?) dopiero po opracowaniu OOP?


title: Jak konsekwentnie dążyć do celu, jakim jest stawanie się lepszym, a nie tylko kodowanie dla zabawy?

text: Jestem w ostatniej klasie liceum. Bardzo lubię programowanie (Java) i aspiruję do tego, aby w przyszłości robić to jako karierę. Jednak to nie jest temat tego pytania. Moje pytanie brzmi: jak mogę zacząć robić **konsekwentny postęp w dążeniu do celu** zostania świetnym programistą? Mam na myśli to, że pracuję nad własnymi projektami, lubię to robić i czuję, że z każdym kończonym projektem trochę się poprawiam. Nie wydaje mi się jednak, żebym konsekwentnie dążył do „celu zostania świetnym programistą”. Chcę mieć poczucie „pracy w kierunku celu”. To, co teraz czuję, jest bardziej podobne do „Koduję rzeczy, które są bardzo zabawne i poprawiam się, ale nie czuję, że robię postępy w kierunku mojego celu”** ”. „Nieznaczna poprawa z biegiem czasu, ponieważ koduję rzeczy” tak naprawdę nie przypomina „postępu w kierunku celu”. Do tych z was, którzy są doświadczonymi programistami: **jakie możecie mi udzielić rady, jak robić stałe postępy w dążeniu do osiągnięcia celu, jakim jest bycie świetnym w programowaniu**, a nie tylko kodowanie rzeczy dla zabawy?


title: Lokalizowanie aplikacji, której dane są powiązane z jednym językiem

text: Tworzę aplikację mobilną wyświetlającą informacje o systemie autobusowym w jednym z amerykańskich miast. De facto językiem urzędowym jest angielski, ale jest wielu studentów z innych krajów – zwłaszcza z Chin i Korei Południowej – i chciałbym umiędzynarodowić i zlokalizować moją aplikację, zarówno po to, aby była bardziej atrakcyjna dla osób, dla których angielski nie jest językiem ojczystym, jak i dlatego, że Chcę mieć doświadczenie w lokalizowaniu aplikacji. Jestem trochę niepewny, gdzie powinienem narysować granicę między strunami, które powinny być zlokalizowane, a tymi, które powinny pozostać w języku angielskim. Sam system autobusowy używa tylko angielskich nazw. Łatwo było mi zdecydować, żeby nie lokalizować nazw przystanków: są ich tysiące, co oznacza, że tłumaczenia byłyby drogie, a ponadto większość nazw przystanków to nazwy własne, które niekoniecznie _miełyby_ chińskie tłumaczenia (na przykład), czyniąc lokalizację bezcelową. Skoro przystanki będą zawsze wyświetlane tylko w języku angielskim, czy rozsądne jest, aby lista wszystkich przystanków w aplikacji zawsze używała tylko angielskiego zestawienia? System autobusowy używa kolorów do nazywania większości tras. Można by to przetłumaczyć, ale czy powinienem? Znak z przodu autobusu będzie zawsze wyświetlał tylko angielską nazwę trasy. Mając to na uwadze, czy jest jakaś korzyść z tego, że moja aplikacja wyświetla przetłumaczoną nazwę, którą użytkownik i tak będzie musiał mentalnie przekonwertować z powrotem na angielski? (Skłaniam się ku „nie”).


title: Dlaczego asynchronizacja jest tak popularna w JavaScript?

text: Programowanie asynchroniczne wydaje się naturalne w Javascript - jest to "pierwszy wybór" do robienia wielu rzeczy. Ale w większości innych języków programowania asynchronizacja jest raczej drugim wyborem niż pierwszym wyborem. Co sprawia, że programowanie asynchroniczne jest tak popularne i naturalne w JavaScript?


title: Rola sprawdzania kodu

text: Weź pod uwagę, że w projekcie jest menedżer i programista. Menedżer tworzy zadanie, które wykonuje programista. W tej sytuacji kto powinien sprawdzić, czy programista nie popełnił jakichś nietestowalnych błędów, takich jak użycie mapy nie bezpiecznej dla wątków w usłudze singleton? A kto sprawdza ogólną strukturę kodu projektu?


title: Potrzebujesz rekomendacji do przeniesienia umiejętności ASP.NET MVC do PHP

text: Szukam przetłumaczyć moje umiejętności w .NET na PHP - w szczególności w odniesieniu do ASP.NET MVC. W pracy obecnie używam .NET MVC 2.0 w różnych projektach i bardzo lubię platformę. Szczególnie podoba mi się bardzo minimalna konfiguracja wymagana do uruchomienia projektu (wystarczy utworzyć projekt, zdefiniować trasy i rozpocząć kodowanie), a także możliwość zwracania przez akcje kontrolera różnych elementów (np. `ActionResult`, `JsonResult` ). Innym elementem, który bardzo mi się podoba, jest sposób obsługi interakcji widok/model. Na przykład lubię mieć możliwość wywołania zwrotu View(model) i załadowania strony widoku (.aspx) oraz posiadania pełnego obiektu modelu dostępnego dla widoku, niezależnie od typu modelu. Poszukuję implementacji PHP MVC, która jest najbardziej zbliżona do tego, z czym już jestem zaznajomiony. Nie mam nic poza funkcjonalnością MVC. Przyjrzałem się Zend, Symfony, CodeIgniter, itp. i chociaż wyglądają na zabawne w przyszłości, zapewniają znacznie więcej funkcjonalności niż potrzebuję. Wolałbym napisać własny DAL, pomocników formularzy, programy obsługi delegatów, elementy uwierzytelniania/ACL itp. Krótko mówiąc, potrzebuję tylko czegoś do obsługi routingu i wyświetlania interakcji i sam będę się martwił o implementację modelu. Czy ktoś może wskazać mi jakiś lekki kod, który osiąga lub zbliża się do osiągnięcia moich powyższych celów. Lub, czy ktoś może zidentyfikować tylko części większego frameworka, które robią to samo (ponownie, nie jestem obecnie zainteresowany implementacją czegoś na dużym frameworku, tylko część MVC i chcę sam zaimplementować część modelu w jak największym stopniu) .


title: Jakich umiejętności powinienem się nauczyć, aby przejść do stałej roli zajmującej się analizą systemów?

text: Pracuję w firmie zajmującej się usługami oprogramowania od 5 lat i wpadłem w rolę „jack of all trades”, z której chcę się wycofać. Spędziłem około 1 roku na programowaniu (VB/VB.NET), wsparciu aplikacji, analizie systemów, a ostatnio testowaniu oprogramowania, które na moim obecnym stanowisku jest w całości manualne. Naprawdę straciłem zainteresowanie rolami programowania i testowania; Wolałbym stanowisko, na którym mogę więcej pracować z _ludźmi_ , na przykład analiza systemów. Dostałem nawet szansę bycia przez kilka miesięcy trenerem w tej samej firmie, na stanowisku tymczasowym, które bardzo mi się podobało. Biorąc pod uwagę, że większość mojego prawdziwego doświadczenia dotyczy oprogramowania, wsparcia i testowania, na jakich obszarach wiedzy i umiejętnościach powinienem skupić się na nauce i opanowaniu, aby stać się atrakcyjnym kandydatem na stałe stanowisko analityka biznesowego/systemowego?


title: Jak wyperswadować klientowi stronę Flash?

text: Ostatnio robiłem kilka projektów po stronie internetowej tylko za pośrednictwem rekomendacji ustnych. Chociaż pod żadnym względem jestem bardziej programistą niż projektantem, moje umiejętności projektowe nie są straszne i nie nienawidzę zajmowania się interfejsem użytkownika, jak wielu programistów. W rezultacie znalazłem się wciągnięty w kilka projektów pobocznych, w których oprócz minimalnego zaplecza do administrowania treścią, większość programowania jest na interfejsach front-endowych (czytaj javascript/css). Zdecydowanie największą frustracją, jaką miałem, było przekonanie klientów, że nie chcą Flasha. Poza tym, że naprawdę nie lubię „rozwoju” Flasha, istnieje wiele praktycznych powodów, dla których Flash jest niepożądany (brak kompatybilności na różnych urządzeniach, zmniejszona dostępność klienta, wymagania dotyczące wtyczek, wydłużony czas rozwoju itp.). Zamiast po prostu mówić klientom „nie zbuduję ci strony we flashu”, wolałbym raczej zastosować taktykę, aby przekonać/wytłumaczyć im, że tak naprawdę nie tego chcą, tj.: spełnić ich wymagania lepiej niż standardowy html /css/js i odwracaj uwagę użytkowników od ich treści. **Jakie doświadczenia z pierwszej ręki mają z tym inni? Jak wyjaśnić komuś, że javascript/css/AJAX jest zwykle lepszą opcją dla większości stron internetowych? Dlaczego ludzie tak bardzo chcą używać Flasha?** To pytanie dotyczy klientów, którzy nie mają żadnych technicznych powodów, by chcieć Flasha, ale chcą go po prostu, ponieważ uważają, że tworzy ładne strony internetowe.


title: Czy ten projekt bazy danych jest poprawny iw pełni znormalizowany?

text: Tworzę bazę danych do przechowywania słów. Zamierzonym zastosowaniem jest zapytanie bazy danych w celu znalezienia słowa pasującego do zestawu filtrów. Np. gdybym chciał znaleźć słowo, które ma < 10 liter, < 3 sylaby, rymuje się z 'at' i pasuje do tagu 'animal', zwróciłoby 'cat', 'bat', 'wombat'... Tabela nieznormalizowana wyglądałby tak: (klucz podstawowy jest oznaczony przez PK, informacje kontekstowe podano w nawiasach kwadratowych) Word( WordID PK, Word, AltSpelling, [inny akceptowany wariant, np. "kolor"/"kolor"] Rhyme, [część rymowa słowo, np. dla „wombat” rym to „w”] Wymowa, [jak wymawia się słowo w IPA] Liczba syllable, Tagi, [tagi odnoszą się do znaczenia słowa, np. „jabłko” miałoby tagi „okrągły” , „owoc”, „roślina” itp.] Kategorie, [kategorie określają hierarchiczną kategoryzację słowa, np. kot należy do kategorii „zwierzę”] WordClasses [klasa słowa, w której słowo może być użyte, np. „odpoczynek” „może być rzeczownikiem i czasownikiem] ) To jest diagram relacji między jednostkami opisujący, jak baza danych powinna działać: ![Schemat relacji encji bazy danych Word](http://i.stack.imgur.com/isopb.png) I wreszcie, jest to rozwiązanie, które wymyśliłem dla znormalizowanego projektu bazy danych. FK oznacza klucz obcy, CPK to złożony klucz podstawowy. Word(WordID PK, Word, OtherSpelling, RhymeID FK, SyllableCount) Rhyme(RhymeID PK, Rhyme) Wymowa (PronID PK, WordID FK, Pron, DialectZastosowanie [dialekt, w którym używana jest wymowa, np. RP, SE, Bre, AmE ]) Tag(TagID PK, TagName, TagReferentCount [liczba słów, których dotyczy tag]) WordTag(WordID CPK FK, TagID CPK FK) Category(CategoryID PK, CategoryName, CategoryReferentCount [por. TagReferentCount dla kategorii]) WordCategory( WordID CPK FK, CategoryID CPK FK) Class(ClassID PK, ClassName, ClassReferentCount [por. TagReferentCount dla klas słów]) WordClass(WordID CPK FK, ClassID CPK FK) Pytanie jest dwojakie: czy ten projekt bazy danych jest w pełni znormalizowany? A co ważniejsze, czy to brzmi? Nie mam praktycznego doświadczenia z bazami danych, więc chciałbym wiedzieć, czy popełniłem jakieś błędy, lub czy projekt można poprawić/zoptymalizować.


title: Koszt rozwoju Google Chrome

text: Ile pieniędzy przeznaczył Google na rozwój Chrome? Rzeczywista liczba prawdopodobnie nie jest znana publicznie. Wykształcone przypuszczenie byłoby w porządku. _Punkty bonusowe_ za dane szeregów czasowych :D


title: Łączenie plików źródłowych, takich jak pliki nagłówkowe

text: Mam projekt, w którym moje pliki wymknęły się spod kontroli z powodu ich objętości. Zacząłem łączyć klasy podobnych typów w pojedyncze pliki nagłówkowe, ponieważ można i nadal jest to dobra praktyka, teraz czy mogę zrobić to samo dla funkcji klas, które są zadeklarowane w plikach źródłowych. Czy dobrym pomysłem jest łączenie kilku funkcji klas w jednym pliku źródłowym, jeśli klasy są, powiedzmy, wszystkimi podklasami tej samej superklasy?


title: Czy powinienem opracować produkt przy minimalnym wykorzystaniu, aby móc powiedzieć, że go opracowałem?

text: Wygląda na to, że zrobiłem tu coś złego, więc spróbuję przeformułować to prościej, aby przestać sprawiać złe wrażenie. Jestem teraz na etapie planowania projektu, w wolnym czasie; Obecnie określam zakres projektu. Widzę, że ta aplikacja wydaje również aplikację na Androida; co więcej, od dawna chciałem zająć się tworzeniem Androida, a możliwość umieszczenia rzeczywistego projektu w moim CV wydaje się być korzystna. Jednak sama aplikacja jest o wiele bardziej użyteczna na komputerze PC niż na tablecie i prawie bezużyteczna na smartfonie; szanse są takie, że bardzo niewiele (jeśli w ogóle) ludzi _chce_ używać tego na Androidzie. Chcę go rozwijać, ale nie spodziewam się prawie żadnego popytu. Czy powinienem to zrobić z założeniem, że doświadczenie jest przydatne, czy też powinienem zachować je w tajemnicy, czy też nie robić tego, myśląc, że aplikacja, której nikt nie używa, wygląda źle dla przyszłych pracodawców? * * * Pierwotne pytanie: Planuję projekt open-source, głównie po to, by ulepszyć moje CV (ETA: OK, robię to głównie dlatego, że chcę to zrobić, ale wypuszczam go jako open- zamiast zatrzymywać go dla siebie, abym mógł łatwiej umieścić go w moim CV). Rozważam zrobienie wersji na Androida, przeznaczonej do uruchamiania na tabletach. Ale nie jest to najbardziej użyteczna rzecz na tablecie; ani ja, ani mój partner nie jesteśmy w stanie wyobrazić sobie nikogo, kto chciałby tego produktu. Jednak dodanie do mojego CV słowa „opracowane dla Androida” wydaje się dobrym punktem sprzedaży i chciałbym zająć się tworzeniem aplikacji mobilnych. Czy powinienem stworzyć aplikację, której nikt nie chce, abym mógł powiedzieć, że stworzyłem aplikację? A może powinienem się wstrzymać, dopóki nie wpadnę na lepszy pomysł? Edycja: Musiałem źle sformułować rzeczy, niektóre odpowiedzi wydają się mieć zły pomysł. Robię cały projekt do diabła; jeśli nie zrobię wersji tego konkretnego projektu na Androida, skończę ją wcześniej, zaplanuję coś innego i zrobię to. To oczywiste, że zawsze będę robił jakiś projekt i chcę to zrobić. Pytanie brzmi, czy zamiast tego powinienem zrobić coś bardziej przydatnego jako projekt „pobawmy się Androidem”? Czy zrobienie czegoś, czego nikt nie chce, zrani mnie na dłuższą metę?


title: Jak wytłumaczyć mojemu przełożonemu znaczenie oddzielenia obaw?

text:
Jestem bardzo początkującym programistą webowym pracującym w 2-osobowym sklepie budującym strony internetowe, a my jesteśmy w trakcie pisania od podstaw prostego systemu szablonów stron internetowych w PHP. Mój menedżer jest całkowicie samoukiem. Nalegał, aby nasz kod HTML był bezpośrednio cytowany w zmiennych, mieszając nasz kod back-end z elementami front-end. $foo = "
" . $bar . "
  "; echo $foo; Twierdzi, że w ten sposób łatwiej się pracuje. Nalegałem, abyśmy przynajmniej używali tagów PHP w naszym HTML, a nie HTML w PHP.
<?php echo $bar; ?>
   Czuję, że czytanie jest naprawdę uciążliwe i wygląda to na bałagan. Myślę, że dużo łatwiej byłoby oddzielić logikę od prezentacji, ale on jest pewien, że jego droga jest najlepsza. Jak mogę wyjaśnić znaczenie tego, aby zrozumiał? Nie potrafię tego dokładnie wyrazić słowami. EDIT: Myślisz, że moglibyście zostawić komentarz, kiedy głosujecie na mnie? Nie mam pojęcia, jak naprawić moje pytanie, jeśli po prostu zagłosujesz na nie i wyjdziesz bez sugerowania ulepszeń.


title: Co to znaczy, że jakaś technologia jest „standardem”?

text: Zacząłem uczyć się Javy EE 7 i często spotykam się z terminem „standard” i nie rozumiem, co on oznacza. Na przykład, oto cytat z tej książki: > W przeciwieństwie do SOAP i stosu WS-*, które opierają się na standardach W3C, REST nie ma > standardu i jest tylko stylem architektury z zasadami projektowania. REST > aplikacje w dużym stopniu opierają się na wielu innych standardach: HTTP, URI, URL... Mam pewne pojęcie, co to może oznaczać, ale nie jestem pewien. Najlepszym wyjaśnieniem, z jakim się zetknąłem, jest definicja stąd.


title: Czy książka o MySQL 5.1 jest nadal aktualna po wydaniu MySQL 5.5?

text: Rozważam zakup High Performance MySQL (2008). Ta książka omawia MySQL 5.0 i 5.1. Czy ta książka jest nadal aktualna, czy jest za stara?


title: Mam nieuporządkowaną listę prostokątów i ich sąsiadów z czterech stron bez pochodzenia. Jak mogę efektywnie przekonwertować to na siatkę?

text: Piszę kontener podobny do GtkGrid dla mojej biblioteki GUI dla Go i próbuję napisać rzeczywistą część układu kodu. Zasadniczo mam nieuporządkowaną listę kontrolek. Każda kontrolka jest prostokątem, a każdy wpis na liście zawiera wskaźnik do kontrolki na północy, południu, wschodzie i zachodzie. Nie wiem, jak skutecznie przekształcić to z powrotem w siatkę. Na początku pomyślałem, że mogę użyć "lewego górnego przycisku", aby zaznaczyć (0, 0) na siatce. Ale jaki jest lewy górny róg [ ][ ][X] [ ][X][X] [X][X][X] Każde inne rozwiązanie, które przychodzi mi do głowy, działa w czasie co najmniej O(n^k), ponieważ muszę przeszukiwać listę wiele razy, aby dowiedzieć się, co to jest każdy wiersz itp. Jakiego innego podejścia mogę użyć? Dziękuję. Algorytm będzie musiał być w stanie rozpocząć od dowolnej kontrolki z listy. (Programiści Go: powodem tego jest to, że lista jest mapą.) Mogę powiedzieć, że nie będzie wolnych kontrolek (wszystkie kontrolki muszą być dołączone do innej kontrolki, ale mogą być dołączone z dowolnej strony w dowolnym momencie). (Oczywiście z wyjątkiem sytuacji, gdy w ogóle jest tylko jedna kontrolka, ale wyobrażam sobie, że ten scenariusz wypada z rozwiązania.) (Mam nadzieję, że jest we właściwej subdomenie...)


title: Wyświetlanie ciągu Fibonacciego

text: napisał program do obliczania i wyświetlania pierwszych 20 liczb Fibonacciego, ciąg wygląda następująco: 1, 1, 2, 3, 5, 8, 13... (każda liczba jest sumą dwóch poprzednich liczb) Problem jest że liczby, które są wyświetlane, są od 2 wzwyż, pierwsza i druga liczba w sekwencji nie są wyświetlane, czy ktoś mógłby mi powiedzieć, co należy zrobić, aby to poprawić? Kod: private void button1_Click(object sender, EventArgs e) { int previousNumber = 1; int numer bieżący = 1; int następny numer = 1; while (bieżący numer <= 1100) { następny numer = poprzedni numer + bieżący numer; poprzedni numer = aktualny numer; bieżący numer = następny numer; textBox1.AppendText(Convert.ToString(nextNumber) + " "); następnyNumer++; } }


title: Zależności klient/serwer z ciągłą integracją

text: Zaczynam używać ciągłej integracji w jednym z moich projektów i miałem kilka pytań dotyczących struktury i architektury. Jest to w zasadzie usługa sieciowa dla wielu urządzeń, która jest podzielona na jedno repozytorium serwera i wiele repozytoriów klientów dla poszczególnych urządzeń. Moje pytanie brzmi: * Skoro klienci są zależni od serwera, aby uruchomić swoje testy, czy ma sens dzielenie ich na inne repozytorium? Zrobiłem kilka kompilacji z Travis CI jako przykładami i działało to świetnie, ale teraz, gdy chcę dodać testy, pojawia się kwestia zależności od projektu serwera. Serwer, który sam w sobie ma również własną kompilację i testy. Od strony architektury projektu sensowne jest rozdzielenie repozytoriów serwera i klienta, ale mam problemy z patrzeniem na szerszy obraz i integrację serwera CI.


title: Przydatność „kamieni milowych” w zwinnym rozwoju

text: Wiele trackerów problemów obsługuje coś, co nazywa się „kamieniami milowymi”. Nigdy nie znalazłem dla nich zastosowania. Wygląda na to, że kamienie milowe są przydatne tylko wtedy, gdy wykonujesz duże, zaplanowane działania, ale nie wtedy, gdy wprowadzasz nowe funkcje i poprawki błędów po ich zakończeniu. Kiedy/jak wykorzystałbyś kamienie milowe do zorganizowania zwinnego rozwoju?


title: Jak mam obsługiwać ustawienia aplikacji w C#?

text: Jestem całkiem nowy w .NET framework, więc proszę się ze mną. Piszę licznik czasu w języku C#, który zlicza czas, który upłynął od określonej chwili w czasie. Ten moment w czasie, jak na razie, jest na stałe zakodowany. Chciałbym, żeby było to konfigurowalne. To i kilka innych wartości. Stworzyłem więc formularz systemu Windows i zawiera on dwie kontrolki użytkownika: jedną, która jest ekranem głównym, a drugą, która jest ekranem konfiguracji. Aplikacja otwiera się na ekranie głównym i mogę wtedy użyć przycisku, aby przejść do ekranu konfiguracji. To, co chcę zrobić, to przejść do ekranu konfiguracji, wpisać swoje imię i wiek w polu tekstowym, wprowadzić określoną datę (prawdopodobnie za pomocą selektora daty i godziny) i kliknąć przycisk Zapisz. Te wartości, które wprowadziłem, powinny następnie wyświetlić się w odpowiednich miejscach na ekranie głównym, dopóki nie wrócę do ekranu konfiguracji i wprowadzę nowe wartości i je zapiszę. Jak bym to zrobił?


title: Rozmiar „modułu” Java

text: Czy rozsądne jest posiadanie mikromodułów, powiedzmy, że zawiera tylko kilka (być może jedną) klas? A może powinienem przechowywać rzeczy w większych repozytoriach? Jestem długoletnim programistą Java z doświadczeniem programistycznym. Staram się pisać dobrze zamknięty, skoncentrowany kod OO. Wcześniej pisałem kod w dużych modułach/projektach/repozytoriach z głównym modułem zależnym od "wspólnych" modułów. Moduły "Common" wydają się pachnieć kodem w taki sam sposób, jak klasy common/util - znak, że ktoś nie pomyślał, czym jest prawdziwa, czysta enkapsulacja. Teraz chcę opublikować kilka artykułów na blogu i wykonać kopię zapasową kodu na BitBucket, z 1 artykułem z własnym modułem i repozytorium. Lubię czyste zależności, nienawidzę duplikacji itp. I istnieją naturalne zależności od 1 modułu do "wspólnego" kodu. Java nie sprawia, że zarządzanie zależnościami jest bardzo łatwe (miejmy nadzieję, że zostało to naprawione w Javie 9 z Jigsaw), ale co ciekawe, Google Dart ma bardzo fajny mechanizm i wydaje się polecać małe, wąskie moduły (i przypuszczalnie repozytorium na moduł). Mam na myśli małe moduły Javy, z zależnościami od Mavena. Każdy moduł we własnym repozytorium. Jar jest opublikowany na jakiejś maven site. EDYCJA: 1) Chcę napisać kilka postów na blogu. Każdy post będzie dotyczył innego tematu. Każdy temat będzie dotyczył spójnego modułu kodu. Chcę, aby czytelnicy mogli pobrać moduł kodu do posta. 2) Używam Bitbucket jako mojego repozytorium git. Punkt 1) sugeruje (?), że potrzebuję repozytorium dla każdego modułu/artykułu na blogu. 3) Staram się robić rzeczy **rozsądnie** poprawnie: nie potrzebuję perfekcji 4) Artykuły na blogu są tylko częścią tego: chcę dobrego rozkładu na moduły ze względu na inżynierię dźwięku. 5) Nie jestem jeszcze gotowy do upublicznienia moich repozytoriów, są one niekompletne, ale obecnie planuję moduły: - 5a) Walidacja - tylko jedna klasa z przydatną walidacją (lubię rzeczy podobne do DbC!) 5b) Generator HTML - fajny moduł do generowania HTML z Javy - zależny od Walidacji 5c) Komponent Swing "panning" - znowu zależny od Walidacji 6) Każdy z modułów w 5) zależy od walidacji i są również oddzielnymi modułami. Czy powinienem więc mieć 6a) 3 x repozytoria (pozwalające ludziom na łatwe wybieranie i mieszanie) 6b) 1 x repozytorium budujące pojedynczy słoik 6c) 1 x budujące repozytorium 3 x słoik, 1 na „moduł”


title: Zrozumienie arytmetyki w C

text: Mam żenująco proste pytanie, ale muszę się upewnić, że dobrze je rozumiem. Mam plik *.c z następującym wierszem: CSRConstant = 2*macroParticleCharge*particleCharge/pow(3*rho0*rho0, 1./3.)/(4*PI*epsilon_o*particleMass*sqr(c_mks)); Czy jest to interpretowane jako: ![wpisz tutaj opis obrazu](http://i.stack.imgur.com/yT3MG.png)


title: Jak idealnie obliczyć marżę zysku przy zerowej sprzedaży

text: Jak poradzisz sobie z następującym scenariuszem bez wartości null? Masz ten problem (w Javie): BigDecimal sales = ...; Koszt BigDecimal = ...; Zysk BigDecimal = sprzedaż.odejmowanie(koszt); // Profit Margin = zysk / sprzedaż BigDecimal profitMargin = profit.divide(sales, 20, RoundingMode.HALF_UP); Ponieważ `sales` jest czasem zerem, zamieniamy ostatnią linię na: BigDecimal profitMargin = sales.compareTo(BigDecimal.ZERO) == 0 ? null : profit.divide(sprzedaż, 20, RoundingMode.HALF_UP); W takim przypadku, jeśli `profitMargin == null`, wiemy, co to oznacza. Jeśli ustawisz `profitMargin` = 0, to nie jest tak naprawdę poprawne, podobnie jak `infinity` również nie jest dobrą wartością. Najlepiej wydaje się, że pozostanie **nieokreślone**. Jest to jednak „niewybuchowa bomba”. Jak więc najlepiej sobie z tym poradzić? Te pytania, jak pierwotnie zadano na Stack Overflow, a także odesłały mnie do pytania Czy referencje zerowe są naprawdę złe?


title: Najlepsze techniki sztucznej inteligencji w grze karcianej

text: Próbuję opracować sztuczną inteligencję do gry karcianej i trochę utknąłem w technice/algorytmie, którego powinienem użyć. Oto kilka założeń dotyczących gry: * Po rozdaniu kart graczom nie ma losowości. Mam tu na myśli to, że każdy gracz może wybrać, które karty zagra, ale nie zachodzi proces losowy, jak przy rozdawaniu kart na początku gry. * Istnieje ograniczenie dotyczące kart, które można zagrać, gdy karta została już zagrana. * Gracz, który wygra lewę, gra jako pierwszy. Np. Gracz 1 zagrywa kartę, Gracz 2 zagrywa kartę i wygrywa. Następnie Gracz 2 zagrywa kartę, a następnie Gracz 1 zagrywa. Znam wiele wskazówek/zasad (np. jeśli wiem, że gracz ma karty A, B, C, to powinienem zagrać w D), które pomagają mi wygrać grę. Dlatego najpierw chciałem użyć sieci bayesowskiej do opisania tych reguł. Problem polega na tym, że nie znam żadnych prawdopodobieństw do przypisania, ale mogłem obliczyć heurystykę na podstawie historii rozegranych gier (przeciwko człowiekowi). Po drugie, jest bardzo prawdopodobne, że nie znam wszystkich zasad i że istnieją pewne ukryte zasady, których AI potrzebuje, aby znaleźć optymalną grę. Nie jestem pewien, czy byłby to dobry sposób na opracowanie sztucznej inteligencji do takiej gry karcianej? Zastanawiam się też, czy istnieją inne techniki, które najlepiej pasowałyby do problemu. Na przykład spojrzałem na minimax (może z algorytmem przycinania), ale czy byłaby to dobra opcja na ten problem? Nie jestem pewien, ponieważ najważniejsze zagrania są na początku gry, kiedy występują najwyższe nieznane parametry (większość kart nie jest jeszcze rozgrywana).


title: Przekaż strukturę jako argument w metodzie c#

text: Chcę wiedzieć, czy możliwe jest przekazanie Structure jako parametru w metodzie c# i jeśli to możliwe, czy jest to dobra praktyka? Mam metodę c#, która przyjmuje sześć argumentów, naprawdę tego nienawidzę. Mógłbym do tego utworzyć klasę przewoźnika i przekazać ją jako argument, ale chcę wiedzieć, czy struktura może wykonać zadanie. Chcę tutaj wspomnieć, że kilka argumentów tej metody jest typu ref, a niewiele jest typu wartości.


title: Kiedy powinniśmy używać słabych encji podczas modelowania bazy danych?

text: To jest w zasadzie pytanie o to, czym są słabe podmioty? Kiedy powinniśmy ich używać? Jak należy je modelować? Jaka jest główna różnica między bytami normalnymi a bytami słabymi? Czy słabe jednostki odpowiadają obiektom wartości podczas projektowania opartego na domenie? Aby pomóc utrzymać pytanie w temacie, oto przykład zaczerpnięty z Wikipedii, którego ludzie mogą użyć, aby odpowiedzieć na to pytanie: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/KTj4v.png) W tym przykładzie „OrderItem” został wymodelowany jako słaba encja, ale nie mogę zrozumieć, dlaczego nie można go zamodelować jako normalnej encji. Kolejne pytanie brzmi: co jeśli chcę śledzić historię zamówień (tj. zmiany w jej statusie), czy byłby to normalny lub słaby podmiot?


title: Jak ważna jest umiejętność pisania kodu tak, jakbyś pisał prozę

text: Niedawno słyszałem o firmie, która podczas rozmów kwalifikacyjnych prosi potencjalnych pracowników o wstanie i napisanie kodu na tablicy. Najwyraźniej to przeraziło wielu rozmówców. To dało mi do myślenia i chociaż uważam się za rozsądnego programistę, trudno byłoby mi napisać długi kod bez odwoływania się do poprzedniego kodu, który napisałem lub szybkiego wyszukiwania w Google. Ilu programistów mogłoby bezpiecznie powiedzieć „Tak, mógłbym napisać cały mój kod, tak jak pisałem e-mail”?


title: Przyszłość aplikacji desktopowych na Windows 8

text: Istnieje wiele wątków omawiających istnienie WPF/Silverlight/HTML5 na Windows 8, muszę tylko wyjaśnić obraz tylko o aplikacjach desktopowych, mam następujące pytania do ekspertów 1. Jakie są dostępne technologie do tworzenia aplikacji desktopowych na Windows 8? 2. Jakie technologie mogę wykorzystać do tworzenia bogatych aplikacji multimedialnych. Obecnie mam aplikację z DirectX 9 i WPF. Jeśli mam stworzyć coś takiego dla Windows 8, to jakie opcje są dla mnie dostępne i jakie są ich plusy i minusy. 3. Czy dobrym pomysłem jest kontynuowanie tego samego kodu DirectX 9 również w systemie Windows 8? Jaka jest najlepsza opcja równoważna DirectX, czy to XNA, czy jest to DirectX 11 lub coś innego? Wydajność i rozszerzalność to dla mnie krytyczne punkty. Wszelkie sugestie są mile widziane. Z góry dziękuję.


title: Zasoby do internacjonalizacji

text: Przyglądamy się internacjonalizacji naszej aplikacji i szukamy dobrych zasobów, które możemy polecić, aby nam pomóc. Książki, posty na blogu, artykuły, co tylko chcesz, byłbym zainteresowany. Aplikacja to Java / SQL Server / Oracle z interfejsami użytkownika zarówno webowymi (HTML / JavaScript), jak i formularzami Java. Wewnętrzne obejmują XML / XSL-T. Wszystko, od wysokopoziomowych „to są rzeczy do przemyślenia” po szczegółowe oceny zestawów znaków, kolejności sortowania i formatów dat, byłoby mile widziane.


title: Jaka jest dobra długość Javadoc dla klasy, która ma, powiedzmy, 800 linii?

text: Robię przegląd kodu na czyimś kodzie na zajęcia. Klasa ma około 800 linii, zawiera kilkanaście funkcji, ale opis ma długość 1 linii. Zastanawiam się, ogólnie mówiąc, jak długi powinien być opis zajęć? (w Javie)?


title: Czy do generowania klas można używać diagramów klas MS Visio?

text: Jestem całkiem nowy w Visio i zastanawiałem się, czy istnieje sposób, aby automatycznie wygenerować kod z diagramów Visio. Szukałem do generowania klas C#, instrukcji SQL do budowania warstwy bazy danych lub obiektów EntityFramework. Używam MS Visio Professional 2010


title: Jaka jest najbardziej odpowiednia metoda testowania w tym scenariuszu?

text: Piszę kilka aplikacji Objective-C (dla OS X/iOS) i aktualnie wdrażam usługę, która ma być między nimi udostępniana. Usługa ma być dość samodzielna. Dla obecnej funkcjonalności, którą sobie wyobrażam, będzie tylko jedna metoda, którą klienci będą wywoływać, aby wykonać dość skomplikowaną serię kroków, zarówno przy użyciu prywatnych metod w klasie, jak i przekazując dane przez kilka „klas przetwarzających dane”, aby uzyskać wynik końcowy. Istotą kodu jest pobranie dziennika zmian, przechowywanego w wewnętrznej pamięci danych usługi, które wystąpiły od określonego czasu, uproszczenie dziennika tak, aby zawierał tylko ostatnią odpowiednią zmianę dla każdego obiektu, dołączenie zserializowanych wartości dla dotknięte obiekty i zwróć to wszystko klientowi. Moje pytanie brzmi zatem, jak mogę przetestować tę metodę punktu wejścia? Oczywiście każda klasa miałaby dokładne testy jednostkowe, aby upewnić się, że ich funkcjonalność działa zgodnie z oczekiwaniami, ale punkt wejścia wydaje się trudniejszy do „odłączenia” od reszty świata. Wolałbym nie wysyłać każdej z tych klas wewnętrznych w stylu IoC, ponieważ są one małe i są tylko klasami spełniającymi zasadę pojedynczej odpowiedzialności. Widzę kilka możliwości: 1. Utwórz "prywatny" nagłówek interfejsu dla testów z metodami wywołującymi klasy wewnętrzne i przetestuj każdą z tych metod osobno. Następnie, aby przetestować punkt wejścia, utwórz częściową mock klasy usługi z tymi prywatnymi metodami i po prostu sprawdź, czy metody są wywoływane z odpowiednimi argumentami. 2. Napisz serię grubszych testów dla punktu wejścia bez wyśmiewania czegokolwiek, testując całą funkcjonalność za jednym razem. Dla mnie wygląda to bardziej jak „testowanie integracyjne” i wydaje się kruche, ale spełnia zasadę „testowania tylko przez interfejs publiczny”. 3. Napisz fabrykę, która zwraca te usługi wewnętrzne i weź je w inicjatorze, a następnie napisz fabrykę, która zwraca ich fałszywe wersje do użycia w testach. Ma to tę wadę, że konstrukcja usługi jest denerwująca i przecieka wewnętrzne szczegóły do klienta. 4. Napisz „prywatny” inicjator, który przyjmuje te usługi jako dodatkowe parametry, użyj go do dostarczenia fałszywych usług i użyj publicznego zaplecza inicjatora do tego. Zapewniłoby to, że kod klienta nadal będzie widział inicjator łatwy/ładny i żadne wewnętrzne elementy nie zostaną ujawnione. Jestem pewien, że jest więcej sposobów rozwiązania tego problemu, o których jeszcze nie pomyślałem, ale moje pytanie brzmi: jakie jest _najwłaściwsze_ podejście zgodnie z najlepszymi praktykami testowania jednostkowego? Zwłaszcza biorąc pod uwagę, że wolałbym najpierw napisać ten test, co oznacza, że powinienem tworzyć tylko te usługi, ponieważ kod wskazuje na ich potrzebę.


title: Używanie wzorca fabrycznego, gdy klasy mają niewiele wspólnego

text: Użyłem wzorca Factory, w którym mam wiele klas, które wykonują podobną pracę, ale nie chcę, aby klient martwił się o tworzenie instancji klasy i typy zwracane. Tak więc twórz dynamiczne wystąpienie wymaganej klasy w zależności od danych wejściowych i przekaż wartości. Te klasy mają podobne metody, ale wykonują nieco inną pracę i te klasy dziedziczą ten sam wspólny interfejs. Czy to właściwy sposób, czy mogę go jeszcze bardziej ulepszyć?


title: W sumie: jak będziemy konserwować starsze systemy?

text: > NOWY JORK – Wybuch, który sprawił, że drapacze chmur zadrżały, 83-letnia rura > wysłała potężny komunikat, że ciągnące się pod nim kilometry rur, przewodów i żelaza > Nowy Jork i inne amerykańskie miasta starzeją się i mogą > stać się niebezpiecznie > nietrwały. Lipiec 2007 Historia o pękniętej rurze parowej na Manhattanie * * * Słyszeliśmy o gniciu oprogramowania i długu technicznym. A słyszeliśmy od takich jak: * "Wujek Bob" Martin - który ostrzegał nas przed "konsekwencjami robienia bałaganu". * Michael C. Feathers — który udzielił nam wskazówek dotyczących „skutecznej pracy ze starszym kodem”. Więc z pewnością społeczność inżynierów oprogramowania jest świadoma tych problemów. * * * Ale czuję, że nasze społeczeństwo nie docenia tego, jak te problemy mogą nękać działające systemy i aplikacje. Jak zauważa Steve McConnell: > ...W przeciwieństwie do zadłużenia finansowego, dług techniczny jest znacznie mniej widoczny, a więc ludziom > łatwiej jest go zignorować. Jeśli to prawda, a wierzę, że tak, to obawiam się, że rządy i firmy mogą odroczyć regularną konserwację i fortyfikację przed hakerami, dopóki nie będzie za późno. [Podobnie jak NYC i rury parowe.] * * * Moje pytanie: * Czy istnieje sposób na uniknięcie programowego odpowiednika NYC i rur parowych?


title: Dlaczego wyrażenia drukują wartość zmiennej za pomocą System.out.print?

text: Dlaczego java wypisuje wartość zmiennej, do której jest przypisana w poniższym kodzie? Chcę zrozumieć, co się tutaj dzieje. Myślę, że wyrażenie wewnątrz metody println() jest oceniane jako pierwsze. W pierwszym przykładzie 5 jest przypisane do int x. Czy w tym momencie x staje się dostępne dla metody println(), aby wydrukować swoją wartość? Ten kod dezorientuje mnie. Nie sądziłem, że wyrażenie takie jak x=5 może zwrócić wartość. Dziękuję Ci. Przykłady: int x; System.out.println(x=5); //wypisuje 5 wartości logicznych isValid; System.out.println(isValid = prawda); //wypisuje prawdę String owoc; System.out.println(owoc = "Pomarańczowy"); //drukuje na pomarańczowo


title: Czy dobrym projektem jest wymaganie od użytkowników klasy używania referencji Rvalue?

text: Mam następującą sytuację, w której mam klasę bazową i wiele klas pochodnych polimorficznych: #include <iostream> class Base { public: virtual void foo() = 0; }; class Pochodna1 : public Base { public: virtual void foo() { std::cout << "Pochodna1::foo()\n"; }; }; class Derived2 : public Base { public: virtual void foo() { std::cout << "Derived2::foo()\n"; }; }; Chcę się upewnić, że użytkownicy mojej klasy _zawsze_ będą używać klasy bazowej do korzystania z obiektu tej hierarchii. Wpadłem na pomysł dostarczenia metod fabrycznych zwracających dobry obiekt. Od teraz metody wyglądają tak: Base&& make_base(int i) { if(i == 1) return Derived1(); w przeciwnym razie zwróć Pochodne2(); } Klient może go wtedy użyć w ten sposób: int main() { Base&& b = make_base(1); b.foo(); } Zakładając, że kompatybilność z C++03 jest **nie** potrzebna, czy jest to uważane za dobrą praktykę? PS: Przepraszam za moje pisanie, nie jestem rodowitym Anglikiem. # Edytuj AS _DeadMG_ wskazuje, że moja początkowa make_base ma niezdefiniowane zachowanie. Jeśli nie mogę wymagać od klientów, aby używali tylko klasy Base, to mogę ją polecić. Czy taka fabryka to lepszy pomysł? #include <type_traits> #include <string> template <class Pochodna> Pochodna make_base() { static_assert( std::is_base_of<podstawowa, pochodna>::value, "'Pochodna' musi pochodzić od 'Podstawa'."); // Domyślne zachowanie return Derived(); } template <> Pochodna2 make_base<Pochodna2>() { // Specjalizuj zachowanie // Zrób coś return Pochodna2(); } int main() { auto b = make_base<std::string>(); // Błąd, „Pochodna” musi pochodzić od „Podstawa”. Baza&& b1 = make_base<Pochodna1>(); // wywołaj make_base() Base&& b2 = make_base<Derived2>(); // wywołaj make_base<Derived2>() b1.foo(); b2.foo(); }


title: Czy konieczne jest odczytanie każdego bajtu, aby sprawdzić, czy skopiowany plik jest identyczny z oryginałem?

text: Niedawno dowiedziałem się o programie o nazwie Total Commander. Jest to zamiennik Eksploratora Windows i ma własne rzeczy do kopiowania plików. Aby sprawdzić, czy pliki są identyczne, zamiast obliczać CRC, sprawdza dosłownie każdy bajt, po kolei, zarówno w oryginale, jak i kopii. Moje pytanie brzmi: czy to konieczne? Czy CRC lub jakakolwiek inna taka technika może się nie udać? Czy jako programista powinieneś spróbować wdrożyć ten doskonały, ale powolny system, czy jest to zbyt ekstremalne?


title: Jak zmniejszyć błędy przed testowaniem?

text: W ciągu ostatniego roku kilka projektów firmy, w której pracuję, zakończyło się niepowodzeniem. Tworzymy oprogramowanie webowe, które nie jest specjalnie skomplikowane (najczęściej są to CRUDS i wyszukiwarka o te dane). Jednym z problemów zidentyfikowanych przez kierownictwo jest faza testowa. Mówiąc prościej, nasz protokół to: 1. Analiza wymagań 2. Rozwój 3. Po zakończeniu budowy, załaduj plik wykonywalny na serwer 4. Wykonaj test planu 5. Napraw błędy 6. Wykonaj plan testu, aby sprawdzić, czy błędy trwać. 7. Jeśli wszystko jest w porządku -> Wyślij do klienta. Problem polega na tym, że kiedy kończymy fazę 3 i zaczynamy fazę 4, liczba błędów jest cholernie wysoka, że plan wykonania zajmuje zbyt dużo czasu i dostajemy niekończącą się listę rzeczy, które musimy naprawić. Do czasu dotarcia do planu testów jesteśmy na czas, ale po tym spędzamy więcej godzin, które zostały zaplanowane, a następnie „porażka” projekt. Dostarczamy z wystarczającą jakością dla klienta, ale spędzamy więcej godzin na naprawie błędów. Kierownictwo szuka rozwiązania i planuje spotkanie, aby zapytać nas o pomysły na poprawę jakości przed pierwszym planem testów. Dowolny pomysł?


title: Ochrona informacji podczas rejestracji na stronach internetowych

text: Do tej pory wydaje się, że rejestrując się na losowej stronie internetowej, robisz to ze ślepym zaufaniem. Zakładasz, że witryna nie zbiera informacji i haseł. Zakładasz, że witryna jest dość bezpieczna. Zakładasz również, że przesłane przez Ciebie informacje nie są wykorzystywane w niepożądany sposób. Niedawno stało się możliwe połączenie się z witryną za pomocą konta Google+ lub Facebook. Ale to rodzi kolejny problem. Każdy, kto ma dostęp do konta społecznościowego, może uzyskać dostęp do wszystkiego, co jest z nim połączone. Więc czy myślisz o stworzeniu czegoś, co jest naprawdę niezależne? Coś w rodzaju szafki informacyjnej, którą dana osoba mogłaby sama założyć. Czy istnieją jakieś odpowiednie projekty?