title: Testy akceptacyjne wykonane jako pierwsze... jak to zrobić?

text: Podstawową istotą większości metod Agile jest to, że funkcja nie jest „ukończona”, dopóki nie zostanie opracowana, przetestowana iw wielu przypadkach wydana. Ma to nastąpić w szybkich fragmentach czasu, takich jak „Sprinty” w procesie Scrum. Wspólną częścią Agile jest również TDD, który mówi, że testy są wykonywane w pierwszej kolejności. Mój zespół pracuje nad programem GUI, który wykonuje wiele specyficznych rysunków i tym podobne. Aby zapewnić testy, zespół testowy musi być w stanie pracować z czymś, co przynajmniej próbuje wykonać to, co próbuje przetestować. Nie znaleźliśmy sposobu na obejście tego problemu. Widzę, skąd się biorą, ponieważ gdybym próbował napisać oprogramowanie, które celowało w jakiś tajemniczy interfejs, byłoby mi bardzo ciężko. Chociaż mamy dość dobrze określone zachowanie, dokładny proces interakcji z różnymi elementami interfejsu użytkownika, jeśli chodzi o automatyzację, wydaje się być zbyt unikalny dla funkcji, aby umożliwić testerom pisanie automatycznych skryptów do sterowania czymś, co nie istnieje. Nawet gdybyśmy mogli, wiele rzeczy pojawiałoby się później jako brakujące w specyfikacji. Jedną z rzeczy, które rozważaliśmy, było skłonienie testerów do pisania „skryptów” testowych, które bardziej przypominają zestaw kroków, które należy wykonać, zgodnie z opisem z perspektywy przypadków użycia, aby mogły zostać „zautomatyzowane” przez człowieka. Może to być następnie wykonane przez programistę(ów) piszącego funkcję i/lub zweryfikowane przez kogoś innego. Kiedy później testerzy mają okazję, automatyzują „skrypt” głównie do celów regresji. To jednak nie przyjęło się w zespole. Testowa część zespołu faktycznie pozostaje w tyle za nami. To jeden z powodów, dla których pozornie dodatkowy czas na opracowanie „skryptu” dla człowieka po prostu się nie zdarzył…. są w kryzysie, aby nadążyć za nami, programistami. Gdybyśmy na nich czekali, nic byśmy nie zrobili. To tak naprawdę nie ich wina, są wąskim gardłem, ale robią to, co powinni i pracują tak szybko, jak to możliwe. Wydaje się, że sam proces jest skierowany przeciwko nim. Bardzo często kończymy na tym, że musimy cofnąć się o miesiąc lub więcej w tym, co zrobiliśmy, aby naprawić błędy, które testerzy wreszcie sprawdzili. To brzydka prawda, z którą chciałbym coś zrobić. Co więc robią inne zespoły, aby rozwiązać tę kaskadę niepowodzeń? Jak możemy sprawić, by testerzy wyprzedzili nas i jak sprawić, by rzeczywiście mieli czas na napisanie testów funkcji, które wykonujemy w sprincie, bez zmuszania nas do siedzenia i kręcenia kciukami w międzyczasie? Jak to się obecnie dzieje, aby funkcja została „ukończona” przy użyciu definicji zwinnych, programiści pracowaliby przez 1 tydzień, następnie testerzy pracowaliby w drugim tygodniu, a programiści, miejmy nadzieję, byliby w stanie naprawić wszystkie błędy, które wymyślą w ciągu ostatnich kilku dni. To się po prostu nie wydarzy, nawet jeśli zgodziłem się, że to rozsądne rozwiązanie. Potrzebuję lepszych pomysłów...


title: Zachowanie bibliotek w rozgałęzieniu w oparciu o istnienie bibliotek zewnętrznych

text: Ktoś zaproponował mi ten wzór, o którym nigdy wcześniej nie słyszałem i nie mogę znaleźć na jego temat żadnych informacji. Podstawowa idea polega na tym, że podczas budowania biblioteki, z której mogą korzystać inni programiści; jeśli programista dołącza moją bibliotekę wraz z biblioteką innej firmy, zachowanie wywołań API do mojej biblioteki zmienia się. Przykład: 1. Mam bibliotekę/API do wstawiania, pobierania, aktualizowania, usuwania w bazie danych. 2. Programista zawiera bibliotekę szyfrowania bazy danych innej firmy. 3. Moja biblioteka/API zmienia się tak, aby przed wstawieniem, pobraniem, aktualizacją i usunięciem wymagane było wywołanie „odszyfrowania (hasło)”. Czy to bezpieczna praktyka? Czy jest jeszcze coś takiego? Jakie zalety i wady ma ten wzór?


title: Czy powinieneś odpowiadać na pytania do wywiadu programistycznego z biblioteką?

text: Na niektóre pytania można łatwo odpowiedzieć, korzystając z określonej biblioteki językowej. Na przykład Java ma zestaw, mapy i listę. Czy można odpowiedzieć na te pytania związane z kodowaniem podczas wywiadu, korzystając z tej biblioteki, czy też powinniśmy bardziej zbliżyć się do tradycyjnego, przyziemnego podejścia, czyniąc to odpowiedzią typu C?


title: Czy programowanie długoterminowe wpływa na pisanie w rodzimych językach mówionych?

text: Mam więc kilka lat za pasem w programowaniu długoterminowym. Zauważyłem jednak, że kiedy częstotliwość i czas trwania zaczęły wzrastać podczas moich sesji kodowania, kiedy faktycznie poszedłem napisać artykuł, e-mail, dokument lub cokolwiek innego, co wymagało napisania więcej niż kilku zdań, na czym zdawała się cierpieć moja jakość pisania. Zacząłem zapominać o podstawowych zasadach i słownictwie pisanym angielskim. Teraz wracam po moich magisterskich i stwierdzam, że pisanie prac nie przychodzi tak łatwo jak kiedyś. Pamiętam, jak myślałem sobie, jak moje zajęcia z kreatywnego pisania na pierwszym roku studiów pomogły mi w pisaniu na inne zajęcia. Nienawidzę tego mówić, ale wydaje mi się, że przydałby mi się odświeżenie. Również moje pisanie odręczne szczególnie nie poprawiło się! Jestem skłonny powiedzieć, że jest to efekt uboczny programowania długoterminowego, ale chcę wiedzieć, czy przeprowadzono prawdziwe badania, czy tylko z osobistych doświadczeń programistów.


title: Jak prawidłowo przechowywać dane osobowe?

text: Nie chodzi o bezpieczeństwo czy coś. Istnieje tabela do zapisywania informacji o użytkowniku, takich jak nazwa użytkownika, hasło, kod pocztowy itd., jeden rekord na osobę. Istnieje również tabela o nazwie post, która służy do rejestrowania postów opublikowanych przez użytkowników. Bardzo łatwo jest ustawić relację, aby zidentyfikować użytkownika, który opublikował post. Ale pomyśl o tej sytuacji, jak przechowywać posty, które zostały przeczytane przez użytkownika? Jeśli użyjesz relacji wiele-do-wielu, tabela powiększy się do bardzo dużych rozmiarów. Co więcej, jest wiele rzeczy do nagrania, po prostu biorę na przykład jedną z nich. Nazywam to danymi osobowymi. Problem w tym, jak mam go właściwie przechowywać?


title: Jakie badania naukowe skłoniłyby Cię do zmiany praktyk związanych z oprogramowaniem?

text: Dzisiejsze tworzenie oprogramowania nie jest oparte na dowodach. Oznacza to, że tak naprawdę nie wybieramy technologii i praktyk opartych na wynikach badań naukowych tak, jak (mamy nadzieję!) robią, powiedzmy, w medycynie. Na przykład, na początku 2011 roku w Journal of the American Medical Association opublikowano badanie, w którym sugerowano, że usuwanie węzłów chłonnych u pacjentek z rakiem piersi nie poprawia przeżywalności, co miało natychmiastowy wpływ na praktykę chirurgiczną. Wyobraź sobie, że czytasz artykuł o badaniu inżynierii oprogramowania, który sugerował, że praktyka lub technologia, z której obecnie korzystasz, w rzeczywistości nie przyniosły korzyści, o których myślałeś: tj. to badanie było sprzeczne z twoim osobistym doświadczeniem. Zakładając, że artykuł został opublikowany w renomowanym miejscu, któremu ufasz, jakie właściwości musiałoby mieć badanie, aby faktycznie zmienić swoje praktyki w oparciu o wynik?


title: Złożoność czasowa zagnieżdżonej pętli, w której wartość wewnętrzna jest zmniejszana na każdym kroku

text: Mam problem z podaniem odpowiedniej złożoności czasowej w notacji O dla następującej pętli: k := 0 dla i := 0 do N dla j := k do M // coś k = k + 1 Gdzie N = M. Bez zmodyfikowana wartość początkowa j wartości wewnętrznej to oczywiście O(N*M), ale wraz ze zmniejszającym się czasem działania pętli wewnętrznej na każdym kroku pętli zewnętrznej jestem dość zdezorientowany. Jak można do tego podejść?


title: Struktura uprawnień IRC Bot, najlepsze podejście?

text: Tworzę bota IRC w PHP. I doszedłem do punktu, w którym muszę określić, jak wyglądałyby uprawnienia/dostępy użytkowników w bazie danych (i ogólnie w aplikacji). Oto wymagania: * Istnieją uprawnienia globalne i lokalne, globalne są dla wszystkich kanałów, a lokalne są specyficzne dla kanału. * Istnieją uprawnienia takie jak "root", "bot_admin" "glob_op" "op na #kanale", w tym przykładzie każde jest słabsze od poprzedniego (root jest najsilniejszy, co oznacza, że nikt nie może podejmować działań przeciwko rootowi). * Nie zdecydowałem dokładnie ile jest uprawnień, a bot będzie rozszerzalny, więc musi być opcja rozszerzenia. Kilka podejść, które miałem na myśli: * Przypisz każdemu poziomowi uprawnień numer (1, 2, 4, 8, 16) i dodaj je razem, aby utworzyć poziom dostępu określonego użytkownika (nawet dodając wszystkie liczby do `n-1 `, nadal byłyby niższe niż `n`). Jeśli chodzi o rozbudowę, mógłbym zostawić luki (1, 16, 256 itd.) i uzupełnić później. Nie sądzę, że jest zbyt dobry, ponieważ trudno byłoby go później utrzymać i czytać, nawet jeśli używam stałych, aby uczynić go bardziej czytelnym. * Mieć każde uprawnienie we własnej kolumnie logicznej. Wydaje się to po prostu głupie i nie ma łatwego sposobu na określenie relacji władzy między każdą rolą. Więc co powiesz? Czy mogę przyjąć lepsze podejście?


title: Czy „zwykły” jest terminem technicznym oznaczającym gramatykę?

text: Czytając specyfikacje języka Go, przeczytałem we wstępie: „Gramatyka jest zwarta i regularna, co pozwala na łatwą analizę za pomocą automatycznych narzędzi, takich jak zintegrowane środowiska programistyczne”. Czy słowo „regular” jest tutaj terminem technicznym, czy też należy je interpretować jako niejasne słowo angielskie?


title: Jakiego poziomu jakości w historii zatwierdzeń mogę/należy się spodziewać/wyegzekwować?

text: Przez długi czas pracowałem jako samotny programista. W tym czasie opracowałem sposób formułowania i porządkowania komunikatów o zatwierdzeniu: najpierw refaktoruj, dokładnie opisz powód zatwierdzenia w wiadomości, link do śledzenia problemów, ... Istnieje nawet skrypt do tworzenia kilku rodzajów dziennika zmian (publiczne, wewnętrzne firmy, deweloperskie) z historii zatwierdzeń. W ten sposób zawsze wiem, kiedy i dlaczego kod w bazie zmienił się do stanu, w jakim jest teraz. Wraz z nadejściem interaktywnej zmiany bazy i zmiany kolejności zatwierdzeń mogę łatwo upewnić się, że historia (a tym samym dokumentacja) wygląda dokładnie tak, jak chcę. Zły kod nie trafia nawet do historii. Tak więc każde zatwierdzenie ma swój dobrze zdefiniowany cel. Zajęło mi lata rozwinięcie tej praktyki, którą uważam za dobrą. (Czy tak jest?) Jednak zastosowanie tego do czyichś zmian w kodzie (tj. przepisanie historii cudzych zmian) jest dla mnie zadaniem boleśnie czasochłonnym. Próbowałem tego, aby zidentyfikować niepotrzebne lub nawet błędne zmiany. Całkowity rozmiar łatki, o której mowa, jest nieco za duży, aby można go było oceniać jako pojedynczą jednostkę, i jest kilka wątpliwych zmian w kodzie. W rzeczywistości okazuje się, że nie mogę sobie pozwolić na kontrolowanie bazy kodu jako „dyktator”. To po prostu kosztuje zbyt dużo czasu. Więc chciałbym stracić trochę kontroli przy zachowaniu dobrej jakości kodu. Obecnie po prostu nie wiem, jak to osiągnąć. „Jak czysta” powinna być historia projektu? Jakiego formatu i szczegółowości zatwierdzeń powinienem wymagać? Czy powinienem poprosić programistę o ponowne sformatowanie historii (np. o podzielenie zatwierdzenia), nawet jeśli wymagałoby to edukacji na temat tego, jak podzielić zatwierdzenie po fakcie? Czy powinienem uczyć programistów pracy nad gałęziami funkcji? Czy szablony commitów mogą pomóc? Jak często powinny być przeglądane zmiany przez innych?


title: Co to jest umowa na utrzymanie oprogramowania?

text: Jestem jednoosobową firmą uruchamiającą oprogramowanie i muszę rozważyć zawarcie umowy o utrzymanie oprogramowania dla klienta. Co to jest w prostych słowach? Jakie korzyści może przynieść mi lub mojemu klientowi?


title: Fałszywy element w operacji logicznej

text: Chciałbym wiedzieć, czy istnieje sposób, aby dowiedzieć się, który element operacji logicznej jest fałszywy? Przykład. if( String.IsNullOrEmpty(obj1) || (String.IsNullOrEmpty(obj2) ) throw("...............");Jak mogę wiedzieć, który z nich jest pusty jeden?


title: Jak odejść od PHP w branży internetowej?

text: Po prostu szukam wskazówek na temat ucieczki od używania PHP do tworzenia stron internetowych. Jestem samozatrudniony, ale wygląda na to, że cała praca, którą znajduję, dotyczy PHP. Nie narzekam na pracę - po prostu zły wybór języka, który jest niesamowicie popularny. Chciałbym tworzyć strony internetowe w Pythonie, Perlu, C#, a nawet zabawnym i fantazyjnym języku funkcjonalnym. Jest takie stare powiedzenie, że nie mówi się stolarzowi, jakiego młotka ma użyć. Jednocześnie mówisz im, z jakiego materiału wybudujesz swój dom i ile chcesz wydać. Problem, na który wpadam, polega na tym, że nie wiem, jak wydostać się z tej spirali. Nie mogę tak po prostu odmówić pracy, bo wtedy nie miałabym żadnej. Naprawdę nie chcę pracować w innej firmie – a nawet gdybym to zrobił, prawdopodobnie nadal utknąłbym, używając czegoś, co nie sprawia mi przyjemności. Mam nadzieję, że ktoś już tam „był” i może mieć dobre pomysły, jak wyjść z tej sytuacji. Dziękuję!


title: wywoływanie metod testowych w ramach innych metod testowych

text: Aby przetestować metodę, która zwraca klon obiektu, który jest wywoływany, muszę ponownie uruchomić zestaw testów na nowo utworzonym obiekcie, jeśli mam zapewnić zachowanie pełnej funkcjonalności, stwierdziłem, że moim instynktem było sklonowanie obiektu następnie wywołuj kolejno wszystkie inne metody testowe, aby zmniejszyć powielanie kodu. Jednak to podejście teraz pachnie i nie potrafię wskazać dlaczego. Czy istnieje lepszy sposób na przetestowanie tego rodzaju funkcjonalności?


title: Czy istnieje wartość oznaczająca klucz jako „Podstawowy”?

text: Pytanie: Czy oznaczenie klucza jako „Podstawowy” ma wartość? To pytanie nie dotyczy definicji klucza podstawowego. Nie chodzi o to, że podstawowe nie są nullable. Nie chodzi tu o implementacje takie jak MySQL, które automatycznie wykonują zakulisowe voodoo indeksowania klastrowego na kluczach podstawowych. **UWAGA** : Pytanie nie dotyczy korzyści z zastępowania automatycznego numeru identyfikacyjnego nad kluczami naturalnymi. Załóżmy, że tabela ma 3 klucze kandydujące. Wszystkie niepodlegające unieważnieniu. Wszystkie niezmienne. Nie znajduję żadnej wartości oznaczającej klucz jako „drugorzędny” lub „trzeciorzędny”. Uważam, że pojęcie pierwszeństwa nie jest przydatne w przypadku wielu kluczy. Uważam, że ta sama logika w odniesieniu do flag „drugorzędny” i „trzeciorzędny” dotyczy flagi „podstawowej”. Uważam nawet, że słowo „kandydat” nie jest przydatne dla klucza. Oznacza to, że kandydat nie jest tak ważny jak klucz, który wygrał prawybory. Nie wydaje mi się, żeby pierwszeństwo miało miejsce w opisie kluczy. Atrybuty samego klucza (unikalne, nie dopuszczające wartości null itp.) powinny być wystarczające. Czy w modelu relacyjnym czegoś by brakowało, gdybyśmy nie mieli atrybutu „primary” opisującego 1 z kluczy tabeli?


title: Co obejmuje termin wirtualizacja?

text: Widziałem w wielu życiorysach termin „wirtualizacja”. Chociaż każde CV jest wyjątkowe, co oznacza lub implikuje szerszy termin lub umiejętność „wirtualizacja”? Czuję, że możliwość instalacji maszyn wirtualnych nie jest jedyną rzeczą, która to oznacza. Zainstalowałem maszyny wirtualne i z mojego doświadczenia wynikało, że w większości postępowałem zgodnie z instrukcjami. Czy jest coś jeszcze, czego mi brakuje, na przykład _programowanie_ maszyn wirtualnych? Czy istnieje dorozumiana wiedza informatyczna na ten temat lub odpowiednia wiedza programistyczna?


title: Jak wytłumaczyłbyś HTTP laikowi?

text: Dostałem to pytanie w jednym z wywiadów, które przeprowadziłem. Zacząłem od wyjaśnienia, że jest to zbiór zasad, których należy przestrzegać przy przenoszeniu zasobów, ale nie czułem się przekonany. Czy istnieje jakaś inna analogia lub podejmę się tego pytania?


title: Czy wkład w projekty open source w celu zwiększenia CV ma sens?

text: Pracowałem tylko nad projektami komercyjnymi i ciężko mi znaleźć projekt, który mnie interesuje. Niedługo szukam nowej pracy i myślę o wzięciu udziału w kilku projektach open source w krótkim okresie, aby móc dodać je do mojego CV. Czy ważne jest posiadanie projektów open source w CV? Jeśli tak, czy próba wniesienia wkładu do kilku osób w ciągu kilku miesięcy wyglądałaby jak próba wzbogacenia mojego życiorysu?


title: Jak bezpieczne są ukryte żądania AJAX, które fałszują wydajność?

text: ## Co to jest ukryte żądanie AJAX? Zauważyłem wzrost użycia ukrytych żądań AJAX zaprojektowanych tak, aby akcja użytkownika wydawała się następować natychmiast. Ten typ żądań AJAX będę określał jako nieblokujące. Jest to żądanie AJAX wykonane bez świadomości użytkownika, że się dzieje, jest wykonywane w tle i jego działanie jest ciche ( _nie ma pełnej informacji wskazującej na pomyślne zakończenie wywołania AJAX_ ). Celem jest sprawienie, aby operacja wyglądała na to, że nastąpiła natychmiast, gdy tak naprawdę się nie zakończyła. Oto przykłady nieblokującego żądania AJAX; * Kliknięcia użytkownika usuwają zbiór e-maili. Pozycje znikają natychmiast ze swojej skrzynki odbiorczej i mogą kontynuować inne operacje. Tymczasem żądanie AJAX przetwarza usuwanie elementów w tle. * Użytkownik wypełnia formularz dla nowych rekordów. Oszczędność kliknięć. Nowa pozycja pojawia się na liście natychmiast. Użytkownik może kontynuować dodawanie nowych rekordów. Aby wyjaśnić, oto przykłady blokowania żądania AJAX; * Kliknięcia użytkownika usuwają zbiór e-maili. Pojawi się kursor klepsydry. Wysłano żądanie AJAX, a gdy odpowie, kursor klepsydry zostaje wyłączony. Użytkownik musi poczekać sekundę na zakończenie operacji. * Użytkownik wypełnia formularz dla nowych rekordów. Oszczędność kliknięć. Forma staje się szara z animacją ładowacza AJAX. Zostanie wyświetlony komunikat „Twoje dane zostały zapisane”, a nowy rekord pojawi się na liście. Różnica między dwoma powyższymi scenariuszami polega na tym, że nieblokująca konfiguracja AJAX nie zapewnia informacji zwrotnej o wydajności operacyjnej, a blokująca konfiguracja AJAX tak. ## Ryzyko ukrytych żądań AJAX Największym ryzykiem tego stylu żądania AJAX jest to, że aplikacja internetowa może być w zupełnie innym stanie, gdy żądanie AJAX nie powiedzie się. Na przykład przykład nieblokujący; * Użytkownik wybiera kilka e-maili. Klika przycisk usuwania. Operacja wydaje się następować natychmiast (elementy po prostu znikają z listy). Następnie użytkownik klika przycisk tworzenia i zaczyna pisać nową wiadomość e-mail. W tym momencie kod JavaScript wykrywa, że żądanie AJAX nie powiodło się. Skrypt mógłby pokazywać komunikat o błędzie, ale w tej chwili naprawdę nie ma to sensu. Alternatywnie, przykład blokujący; * Użytkownik wybiera kilka e-maili. Klika przycisk usuwania. Widzi klepsydrę, ale operacja się nie udaje. Otrzymują komunikat o błędzie o treści „błąd. bla bla bla”. Wracają do listy e-maili i nadal mają zaznaczone e-maile, które chcieli usunąć. Mogliby ponownie spróbować je usunąć. Istnieją również inne zagrożenia techniczne związane z wykonywaniem nieblokujących żądań AJAX. Użytkownik może zamknąć przeglądarkę, przejść do innej witryny i przejść do innej lokalizacji w bieżącej sieci, co sprawia, że kontekst jakiejkolwiek odpowiedzi na błąd jest bez znaczenia. ## Więc dlaczego staje się tak popularny? Facebook, Google, Microsoft itp. itd. Wszystkie te duże domeny coraz częściej używają nieblokujących żądań AJAX, aby _wydawać_ się_, że są wykonywane natychmiast. Zauważyłem również wzrost liczby edytorów formularzy, które _nie mają przycisku zapisywania ani przesyłania_. Jak tylko opuścisz pole lub wciśniesz enter. Wartość została zapisana. Nie ma komunikatu _Twój profil został zaktualizowany_ ani kroku zapisywania. Żądania AJAX nie są pewne i nie powinny być traktowane jako udane, dopóki nie zostaną zakończone, ale tak wiele głównych aplikacji internetowych działa właśnie w ten sposób. Czy te witryny, które używają nieblokujących wywołań AJAX do symulowania responsywnych aplikacji, podejmują niepotrzebne ryzyko kosztem szybkiego pojawiania się? Czy jest to wzorzec projektowy, którego wszyscy powinniśmy przestrzegać, aby pozostać konkurencyjnym?


title: Wykonanie algorytmu listy pomijania

text: Oto prosty kod losowej listy pomijania: Coin_Side flip() { if ( random() % 2 == 0 ) return HEADS; w przeciwnym razie zwróć OGONY; } Uwaga: random() zwraca liczbę całkowitą, która używa modułu postaci M = 2^B. Jaka jest zatem oczekiwana wydajność algorytmu listy pomijania? Mamy więc: (ax mod M) mod 2 = (ax mod 2^B) mod 2 = (ax mod 2) mod 2^B Widzę, że ((ax mod 2) == 0) będzie prawdziwe, jeśli ax jest nawet. Następnie, dodając mod 2^B, pominiemy więcej wartości na liście pomijania. Mielibyśmy tylko liczby parzyste, które są wielokrotnościami 2^B. Czy to sprawi, że algorytm będzie lepszy czy gorszy?


title: Dlaczego libxml2 nie obsługuje XPath 2.0?

text: Libxml2 to szybszy, stabilny i najpopularniejszy "silnik open DOM"... Oraz "parser XML C i zestaw narzędzi Gnome". Pierwsze wydanie Libxml2 miało miejsce we wrześniu 1999, 13 lat temu. XPath v1.0 został również wydany w 1999 roku. XPath v2.0 stał się rekomendacją w styczniu 2007 roku, 6 lat temu. Możemy przypuszczać, że społeczność Libxml2 ma czas i ludzi na opracowanie XPath2... Więc, _w czym problem?_ **Dlaczego libxml2 (lub "rozgałęzienie libxml2" lub "libxml2 eksperymentalna"!) nie obsługuje XPath 2.0?** Niektórzy podnieśli hipotezy do dyskusji przy odpowiedziach, 1. Ponieważ społeczność Libxml2 (i społeczność Gnome) nie lubi i nie ma motywacji do rozwijania czegoś na XPath2 lub xQuery. 1.1. XPath2 potrzebuje (dowód matematyczny) bardzo ciężkiego parsera, znacznie wolniejszego itp., który nie jest odpowiedni dla rzeczywistych aplikacji Libxml2. 1.2. Inne „ideologiczne” antypatie/motywacje. 2. Ponieważ jest napisany w C, a dla XPath2 lepiej jest programować w C++. 3. Ponieważ powyższa hipoteza „Społeczność Libxml2 ma czas i ludzi” jest fałszywa. 4. Ponieważ XPath2 stał się stabilny w 2010 roku wraz z wydaniem „Second Edition”, a ~2,5 roku to (?) za mało czasu.


title: jak pracować w zespole i organizować zadania w webdeveloperze

text: Mój problem polega na tym, że pracowałem jako freelancer web developer. Teraz pracuję w firmie i mam mały zespół. Odpowiadam za organizację tego zespołu do pracy w projekcie. Nie mam pojęcia o organizowaniu zadań lub układaniu planu dla zespołu. Czy ktoś może mi powiedzieć, jak to zrobić.


title: Jak zapewnić powodzenie procesów po wystąpieniu wyjątku zakleszczenia?

text: Bez względu na język programowania i jaka jest baza danych, koncepcja powinna być taka sama: mam 2 wątki, z których każdy blokuje niektóre jednostki bazy danych i dodaje nowe dane do bazy danych. Załóżmy, że te wątki działają jednocześnie, co może powodować wyjątki zakleszczenia. Oczywiście głównym działaniem, które możemy zrobić przede wszystkim, jest dogłębna analiza kodu, aby znaleźć dobrą alternatywę, która pozwoli uniknąć impasu. Ale czasami naprawdę nie możemy ich uniknąć. Czy powinienem złapać wyjątek i spróbować ponownie wykonać dany proces? Na pierwszy rzut oka byłoby to do przyjęcia, ale… co, jeśli te sprzeczne procesy będą się powtarzać w tym samym czasie, znowu inne impasy (wąż gryzie swój ogon)? Jaki jest dobry sposób na zapewnienie, że procesy w końcu się powiodą?


title: Termin opisujący słowo kluczowe, po którym następuje blok instrukcji

text: Czy istnieje ogólny termin opisujący słowo kluczowe, po którym następuje blok instrukcji? NP. if() {blok instrukcji} while() {blok instrukcji} try{blok instrukcji} ostatecznie{blok instrukcji} Lub nawet coś wymyślonego: `controlScope{blok instrukcji}`


title: Czy wynagrodzenie za szkolenie nie jest normalne?

text: Jestem świeżo upieczonym absolwentem college'u i niedawno miałem rozmowę kwalifikacyjną w firmie o pracę w programowaniu na poziomie podstawowym. Firma powiedziała mi, że wymaga dwóch miesięcy bezpłatnego szkolenia dla wszystkich programistów na poziomie podstawowym. Jako powód podano, że skoro zapewniają darmowe szkolenia, nie byłoby żadnej rekompensaty. Czy to normalne? **Aktualizacja** Dla innych młodszych programistów, którzy się temu przyglądają: nie wybieraj tego typu oszustw. To był mój pierwszy wywiad. Rozmawiałem z 10 innymi firmami w okolicy i otrzymałem od nich około 9 ofert pracy. Pracowałem dla firmy Fortune 50 przez 9 miesięcy z dobrą pensją, a ostatnio znalazłem lepszą okazję do jeszcze lepszej płacy i lepszej pracy. Sądzę, że moralność to cierpliwość i zaufanie do siebie.


title: Bezpieczeństwo domeny obejmujące logikę domeny

text: Wraz z logiką domeny mojej aplikacji staram się nakreślić model bezpieczeństwa. Utknąłem na wymaganiu, które uniemożliwia mi traktowanie bezpieczeństwa jako przekrojowego problemu logiki mojej domeny. Oto moja sytuacja. Użytkownik w moim systemie może potencjalnie mieć możliwość tworzenia pewnego rodzaju obiektów, powiedzmy, „filtrów”. Wprowadzam uprawnienie o nazwie „CREATE_FILTER”, a użytkownik może tworzyć filtry lub nie, w zależności od tego, czy administrator przypisał takie uprawnienie temu użytkownikowi, czy nie. Ok. Rozważmy teraz bardziej złożone wymaganie, gdy liczba filtrów, które może utworzyć użytkownik, jest ograniczona. Tak więc m.in. administrator powinien mieć możliwość ustawienia maksymalnej liczby filtrów, które każdy użytkownik może utworzyć, a nawet bardziej skomplikowane, aby przypisać maksymalną liczbę indywidualnie użytkownikom, powiedzmy wartość 3 do User1, 5 do User2 i tak dalej. Tak więc system zabezpieczeń, aby autoryzować użytkownikowi tworzenie filtrów, nie wystarczy sprawdzić, czy użytkownik ma takie uprawnienie, ale musi kompleksowo przeanalizować model domeny, aby sprawdzić, ile jest filtrów już utworzone przez użytkownika, aby podjąć decyzję. Aby skomplikować sprawę, możemy sobie wyobrazić, że maksymalny limit będzie zależał od ilości pieniędzy, jakie użytkownik ma na swoim koncie, czy czegoś takiego. Chcę oddzielić pojęciowo (przynajmniej moim zdaniem), czy tak skomplikowana logika bezpieczeństwa dotyczy wyłącznie bezpieczeństwa (co oczywiście będzie zależeć od modelu domeny), czy jest to już pełnoprawna część samej logiki domeny? Czy ma sens zachowanie koncepcji „uprawnień”, gdy przypisywanie/usuwanie uprawnień niewiele pomaga (ponieważ to od stanu domeny zależy decyzja autoryzacyjna, a nie przydzielone uprawnienia)? Czy byłaby to droga, powiedzmy, do posiadania skomplikowanej koncepcji zezwolenia, która nie tylko pozwala na działanie przez sam fakt jego istnienia, ale raczej wymaga jakiejś złożonej logiki podejmowania decyzji?


title: Debugowanie uszkodzenia pamięci

text: Po pierwsze, zdaję sobie sprawę, że to nie jest idealne pytanie w stylu pytań i odpowiedzi z absolutną odpowiedzią, ale nie mogę wymyślić żadnego sformułowania, które poprawiłoby to działanie. Nie sądzę, że istnieje absolutne rozwiązanie tego problemu i jest to jeden z powodów, dla których zamieszczam to tutaj zamiast stackoverflow . W ciągu ostatniego miesiąca przepisałem dość stary fragment kodu serwera (mmorpg), aby był bardziej nowoczesny i łatwiejszy do rozszerzenia/modyfikacji. Zacząłem od części sieciowej i zaimplementowałem bibliotekę 3rd party (libevent) do obsługi rzeczy dla mnie. Po wszystkich refaktoryzacjach i zmianach w kodzie wprowadziłem gdzieś uszkodzenie pamięci i walczyłem, aby dowiedzieć się, gdzie to się dzieje. Wygląda na to, że nie mogę wiarygodnie odtworzyć tego w moim środowisku deweloperskim/testowym, nawet podczas implementowania prymitywnych botów do symulacji jakiegoś obciążenia, nie mam już awarii (naprawiłem problem z libevent, który powodował pewne rzeczy) Próbowałem do tej pory: Valgrinding the hell poza tym - Żadnych nieprawidłowych zapisów, dopóki coś się nie zawiesi (co może zająć ponad 1 dzień w produkcji... lub tylko godzinę), co mnie naprawdę wprawia w zakłopotanie, na pewno w pewnym momencie uzyska dostęp do nieprawidłowej pamięci i nie nadpisze rzeczy przez przypadek? (Czy istnieje sposób na „rozłożenie” zakresu adresów?) Narzędzia do analizy kodu, a mianowicie Coverity i cppcheck. Chociaż wskazywali na pewne... paskudne i skrajne przypadki w kodzie, nie było nic poważnego. Nagrywanie procesu aż do awarii za pomocą gdb (poprzez undodb), a następnie cofam się. To /brzmi/ powinno byćwykonalne,ale albo kończy się awarią gdb, używając funkcji autouzupełniania, albo trafiam do jakiejś wewnętrznej struktury libeventu, w której gubię się, ponieważ istnieje zbyt wiele możliwych gałęzi (jedno uszkodzenie powoduje drugie i tak na). Myślę, że byłoby miło, gdybym mógł zobaczyć, do czego wskaźnik pierwotnie należy/gdzie został przydzielony, co wyeliminowałoby większość problemów z rozgałęzieniami. Nie mogę jednak uruchomić valgrind z undodb, a normalny zapis gdb jest bezużytecznie wolny (jeśli to nawet działa w połączeniu z valgrindem). Przegląd kodu! Sam (dokładnie) i kilku przyjaciół przeglądających mój kod, chociaż wątpię, żeby był wystarczająco dokładny. Myślałem o może zatrudnieniu programisty, aby zrobił ze mną przegląd/debugowanie kodu, ale nie mogę sobie pozwolić na włożenie w to zbyt dużo pieniędzy i nie wiedziałbym, gdzie szukać kogoś, kto byłby skłonny pracować za mało… nie ma pieniędzy, jeśli nie znajdzie problemu ani nikogo w ogóle nie kwalifikuje. Powinienem również zauważyć: zwykle otrzymuję spójne ślady wsteczne. Jest kilka miejsc, w których dochodzi do awarii, głównie związanych z uszkodzeniem klasy gniazda. Czy to nieprawidłowy wskaźnik wskazujący na coś, co nie jest gniazdem, czy też sama klasa gniazda zostaje nadpisana (częściowo?) bełkotem. Chociaż podejrzewam, że najbardziej się tam zawiesza, ponieważ jest to jedna z najczęściej używanych części, więc jest to pierwsza uszkodzona pamięć, która jest używana. W sumie ten problem zajmował mnie przez prawie 2 miesiące (z przerwami, bardziej hobbystyczny projekt) i naprawdę frustruje mnie do tego stopnia, że staję się zrzędliwym IRL i myślę o poddaniu się. Po prostu nie mogę myśleć o tym, co jeszcze mam zrobić, aby znaleźć problem. Czy są jakieś przydatne techniki, które przegapiłem? Jak sobie z tym radzicie? (To nie może być tak powszechne, ponieważ nie ma zbyt wielu informacji na ten temat... lub jestem po prostu ślepy) Edycja: Niektóre specyfikacje, jeśli ma to znaczenie: Używanie c++(11) przez gcc 4.7 (wersja dostarczona przez debian wheezy) codebase to około 150k linii Edytuj w odpowiedzi na post david.pfx: (przepraszam za powolną odpowiedź) > Czy prowadzisz dokładne zapisy awarii, aby szukać wzorców? Tak, wciąż mam zrzuty ostatnich awarii leżące dookoła > Czy te kilka miejsc jest naprawdę podobnych? W jaki sposób? Cóż, w najnowszej wersji (wydaje się, że zmieniają się za każdym razem, gdy dodaję/usuwam kod lub zmieniam powiązane struktury) zawsze zostałby złapany w metodę timera przedmiotów. Zasadniczo przedmiot ma określony czas, po którym wygasa i wysyła zaktualizowane informacje do klienta. Nieprawidłowy wskaźnik gniazda byłby w (nadal poprawnym, o ile wiem) klasie Player, głównie z tym związane. Doświadczam również wielu awarii w fazie czyszczenia, po normalnym zamknięciu, w którym niszczy wszystkie statyczne klasy, które nie zostały jawnie zniszczone (__run_exit_handlers w backtrace). Głównie dotyczy std::map jednej klasy, zgadując, że to dopiero pierwsza rzecz, która się pojawia. > Jak wyglądają uszkodzone dane? Zera? Ascii? Wzory? Nie znalazłem jeszcze żadnych wzorów, wydaje mi się trochę przypadkowy. Trudno powiedzieć, bo nie wiem, gdzie zaczęła się korupcja. > Czy to ma związek ze stertą? Jest to całkowicie związane ze stertą (włączyłem ochronę stosu gcc i nic nie wychwyciłem) > Czy uszkodzenie następuje po free()? Będziesz musiał trochę to rozwinąć. Czy masz na myśli posiadanie wskazówek na już uwolnione obiekty leżące wokół? Ustawiam każdą referencję na null, gdy obiekt zostanie zniszczony, więc o ile gdzieś czegoś nie przegapiłem, nie. To powinno pojawić się w Valgrind, ale tak się nie stało. > Czy jest coś charakterystycznego w ruchu sieciowym (rozmiar bufora, > cykl odzyskiwania)? Ruch sieciowy składa się z surowych danych. Tak więc tablice znaków, (u)intX_t lub spakowane (aby usunąć wypełnienie) struktury dla bardziej złożonych rzeczy, każdy pakiet ma nagłówek składający się z identyfikatora i samego rozmiaru pakietu, który jest sprawdzany względem oczekiwanego rozmiaru. Mają one około 10-60 bajtów, a największy (wewnętrzny pakiet 'bootup', uruchamiany raz przy starcie) ma rozmiar kilku mb > Dużo i dużo twierdzeń produkcyjnych. Awaria wcześnie i przewidywalnie, zanim obrażenia się rozprzestrzenią. Miałem kiedyś awarię związaną z uszkodzeniem std::map, każda jednostka ma mapę swojego „widoku”, każda jednostka, która może ją zobaczyć i na odwrót, jest w niej. Dodałem 200bajtowy bufor z przodu i po, wypełniłem go 0x33 i sprawdzałem przed każdym dostępem. Zepsucie po prostu magicznie zniknęło, musiałem coś przesunąć, co spowodowało zepsucie czegoś innego. > Logowanie strategiczne, aby dokładnie wiedzieć, co działo się tuż przed. > Dodaj do rejestrowania, gdy zbliżasz się do odpowiedzi. Działa... do pewnego stopnia. > Czy w desperacji możesz zapisać stan i automatycznie uruchomić się ponownie? Przychodzi mi do głowy kilka programów produkcyjnych, które to robią. Poniekąd tak robię. Oprogramowanie składa się z głównego procesu „pamięci podręcznej” i kilku innych procesów roboczych, z których wszyscy uzyskują dostęp do pamięci podręcznej, aby uzyskać i zapisać rzeczy. Tak więc z każdą awarią nie tracę wiele postępów, nadal rozłącza wszystkich użytkowników i tak dalej, to zdecydowanie nie jest rozwiązanie. > Współbieżność: wątki, wyścigi, itp. Istnieje wątek mysql do wykonywania zapytań "asynchronicznych", ale to wszystko jest nietknięte i udostępnia informacje tylko klasie bazy danych za pośrednictwem funkcji z wszystkimi blokadami. > Przerwania Istnieje zegar przerwań zapobiegający blokowaniu, który po prostu przerywa, jeśli nie zakończył cyklu przez 30 sekund, ten kod powinien być jednak bezpieczny, chociaż if (!tics) { abort(); } w przeciwnym razie tiki = 0; tiki to "lotne int. tiki = 0;" który jest zwiększany za każdym razem, gdy cykl jest zakończony. Stary kod też. > zdarzenia/wywołania zwrotne/wyjątki: nieprzewidywalne uszkodzenie stanu lub stosu Wiele wywołań zwrotnych jest używanych (asynchroniczne io sieci, liczniki czasu), ale nie powinny one robić nic złego. > Nietypowe dane: nietypowe dane wejściowe/czas/stan Miałem kilka skrajnych przypadków z tym związanych. Odłączenie gniazda, gdy pakiety są nadal przetwarzane, skutkowało uzyskaniem dostępu do nullptr i tym podobnych, ale do tej pory były one łatwe do wykrycia, ponieważ każde odwołanie jest czyszczone zaraz po poinformowaniu samej klasy, że zostało to wykonane. (Sama niszczenie jest obsługiwane przez pętlę usuwającą wszystkie zniszczone obiekty w każdym cyklu) > Zależność od asynchronicznego procesu zewnętrznego. Możesz rozwinąć temat? Tak jest poniekąd w przypadku wspomnianego powyżej procesu pamięci podręcznej. Jedyne, co mógłbym sobie wyobrazić, to to, że nie kończy się wystarczająco szybko i używa śmieciowych danych, ale tak nie jest, ponieważ to też korzysta z sieci. Ten sam model pakietu.


title: Dobre skróty dla XML ... rzeczy

text: Nigdy nie byłem zbyt dobry w utrzymywaniu spójnej grupy nazw zmiennych do łączenia się z plikami XML, ponieważ nigdy nie nazywam zmiennych w moich interfejsach w ten sam sposób w całym moim źródle. Istnieją elementy, atrybuty, dokumenty, listy węzłów, węzły, fragmenty dokumentów i inne rzeczy. Jaki jest dobry schemat śledzenia tych rzeczy jako zmiennych? Czy istnieje norma dotycząca notacji węgierskiej? Czy umieściłeś w ogóle coś, co oznaczałoby, że dane są w rzeczywistości XML, czy to zła praktyka? Jaka jest także różnica między sposobem nazywania stałych (oznaczających przestrzenie nazw, elementów i nazw atrybutów) a zmiennymi (oznaczających przestrzenie nazw, elementy, atrybuty, węzły, listy węzłów i dokumenty)


title: Treść kursu Groovy/Grails

text: Niektórzy programiści Javy pytali, czy mógłbym dać im 2-dniowy element wprowadzający na temat programowania Grails. Zakładam, że są zaznajomieni z: * językiem i bibliotekami Java * tworzeniem stron internetowych w języku Java, m.in. Serwlety, JSP * Spring * Hibernate * Programowanie po stronie klienta, CSS, HTML, JavaScript Zakładam, że nie mają oni żadnego doświadczenia z Groovy lub Grails. AFAIK, aplikacja, którą będą tworzyć, to nowy projekt, więc nie ma potrzeby omawiania takich tematów, jak używanie GORM ze starszą bazą danych. Staram się zdecydować, jak powinienem ustrukturyzować kurs, m.in. jakie tematy poruszyć i ile czasu poświęcić na każdy z nich. Uważam, że około 1/2 - 3/4 dnia na Groovy i reszta czasu na Grails byłaby wystarczająca. Prawdopodobnie użyję konsoli Groovy do zademonstrowania koncepcji języka Groovy i prostej aplikacji Grails do wyjaśnienia konwencji i struktury projektu Grails. Jeśli ktoś ma listę tematów Groovy/Grails, które powinienem omówić, a nawet zarys podobnego kursu, który prowadzili/przejmowali, byłbym bardzo wdzięczny. Oczywiście docenię wszelkie zasoby, z których korzystam podczas kursu.


title: Dlaczego programiści C# wprowadzają nowe nawiasy otwierające wiersz?

text: Większość ostatnich kilku lat spędziłem pracując głównie z C# i SQL. Każdy programista, z którym pracowałem w tym czasie, miał zwyczaj umieszczania nawiasu otwierającego funkcji lub instrukcji przepływu sterowania w nowej linii. Więc ... public void MyFunction(string myArgument) { //do rzeczy } if(myBoolean == true) { //zrób coś } else { //zrób coś innego } Zawsze uderzało mnie, jak brzydkie i marnujące miejsce to jest, zwłaszcza w instrukcjach if/else. I wiem, że w późniejszych wersjach C# istnieją alternatywy, takie jak: if(myBoolean == true) //zrób coś w jednym wierszu kodu Ale mało kto z nich korzystał. Wszyscy robili to z zakręconymi nawiasami na nowej linii. Potem po długiej nieobecności wróciłem do JavaScriptu. W mojej pamięci programiści JavaScript robili dokładnie to samo, co nawias klamrowy i nowy wiersz, ale przy tych wszystkich wymyślnych nowych bibliotekach i innych rzeczach większość programistów umieściła nawias otwierający po deklaracji: function MyJavaScriptFunction() { //zrób coś } Możesz Zobacz sens w tym, ponieważ odkąd używanie domknięć i wskaźników do funkcji stało się popularne w JavaScript, oszczędza to dużo miejsca i czyni rzeczy bardziej czytelnymi. Zastanawiałem się więc, dlaczego nie było to postrzegane jako skończone w C#. W rzeczywistości, jeśli wypróbujesz powyższą konstrukcję w Visual Studio 2013, w rzeczywistości sformatuje ją za Ciebie, umieszczając nawias otwierający w nowym wierszu! Właśnie zobaczyłem to pytanie na Code Review SE: http://codereview.stackexchange.com/questions/48035/questions-responses-let-me-tell-you-about-you, w którym dowiedziałem się, że w Javie język, którego nie znam zbytnio, uważa się, że otwieranie nawiasów klamrowych zaraz po deklaracji, we współczesnym stylu JavaScript, jest uważane za zbyteczne. Zawsze rozumiałem, że C# był pierwotnie wzorowany na Javie i utrzymywał wiele tych samych podstawowych standardów kodowania. Ale w tym przypadku wydaje się, że nie. Zakładam więc, że musi być dobry powód: jaki jest powód? Dlaczego deweloperzy języka C# (i Visual Studio) wymuszają otwieranie nawiasów klamrowych w nowym wierszu?


title: Czy powinienem znać więcej niż jedną implementację kontroli wersji?

text: Używam systemu Windows i czuję się komfortowo z SVN (no cóż, TortoiseSVN), ponieważ jest to bardzo proste. Mi to pasuje. Ponieważ jednak działa tak dobrze, nie mam powodu, by próbować czegokolwiek innego. Czy powinienem zawracać sobie głowę nauką innego systemu, na przykład Mercurial lub Git?


title: Ujawnianie wrażliwych informacji o poprzednich pracodawcach podczas rozmowy kwalifikacyjnej

text: Podczas rozmowy kwalifikacyjnej z potencjalnymi przyszłymi pracodawcami, oczywiście korzystne dla obu stron jest omówienie tego, co wiązało się z Twoją poprzednią pracą (tj. co robiłeś przez ostatnie kilka lat). A co, jeśli technologia (i pomysły stojące za technologią), nad którą pracujesz, jest wrażliwa i poufna? W tej chwili pracuję nad naprawdę fajnymi rzeczami, które zaimponowałyby ankieterowi, które mogłyby pokazać moją pasję i zrozumienie, ale jednocześnie nie mogę po prostu wyjść i wyjaśnić naturę tego bez zbytniego ujawnienia o moim obecnym pracodawcy. Z drugiej strony, jeśli utrzymam to niejasno bez wyjaśniania subtelności, wydaje mi się, że pracuję nad dość podstawowymi aplikacjami. Klucz leży pośrodku – w sposobie budowy aplikacji – co sprawia, że to, co obecnie robię, jest wyjątkowe i trudne. Ale nawet uznanie tego kompromisu daje ważne informacje o tym, jak mój pracodawca konkuruje. Mam nadzieję, że to miało jakiś sens. Co powinienem zrobić podczas rozmowy kwalifikacyjnej? Czy istnieje dwustronna umowa NDA dotycząca wywiadów, abym mógł po prostu rozpocząć dogłębne wyjaśnienie mojego przeszłego doświadczenia, czy też muszę być celowo niejasny i przeprosić za niemożność wchodzenia w szczegóły?


title: Jak używać wzorca typu opcji w języku, który nie obsługuje generyków?

text: Byłem zainteresowany rozpoczęciem używania podejścia ~~Null Object /~~ Option Type do zastąpienia moich starych nawyków sprawdzania wartości null wielu części mojego kodu. Ale z wielu przykładów, które tam widziałem, wydaje się, że jest to wzorzec używany w połączeniu z rodzajami. Jestem pewien, że świetnie nadaje się do C#, Java, Haxe i wielu innych. _NIE_ tak świetne dla **ActionScript 3.0** (do czego miałem zamiar go użyć). Czy więc mam błędne wrażenie, że nie będzie to możliwe/warte zachodu w języku, który nie obsługuje generyków? A może istnieje sposób, aby to zrobić bez nich? **UWAGA:** Wygląda na to, że wzorzec „ _Null Object_ ” pokazany w **tym samouczku PatternCraft** nie do końca przypomina sposób, w jaki _Option Type_ został opisany w innych dyskusjach na tej stronie wymiany stosów. Jego sposób wygląda bardziej jak klasa fabryczna, która wypluwa **_Null???_** pochodną jakiejś klasy bazowej. Miałem nadzieję, że może istnieć sposób na tworzenie obiektów zerowych bez konieczności pisania dedykowanej klasy dla scenariuszy każdego pojedynczego przypadku, w których zwykle używa się sprawdzania wartości null. * * * **EDYTUJ: Przepraszam, nie zdawałem sobie sprawy, że "Obiekt zerowy" i "Typ opcji" to dwie zupełnie różne bestie. Aby jednak odpowiedzi i opinie były istotne dla pytania, zmieniłem tylko tytuł (pierwotnie był to `Jak używać wzorca typu obiektu / opcji zerowego w języku, który nie obsługuje generyków?`).**


title: Projektowanie NoSQL - Przechowywanie zadań projektowych

text: Obecnie mam narzędzie do planowania korzystające z tabel SQL, które są tak ustawione: * Tabela dat (zawiera daty i wskazuje, czy ten dzień jest weekendem / świętem itp.) * Pracownik (proste dane) * Projekt (proste dane) * Zadania ( Wiąże trzy tabele, klucz data + id pracownika + id projektu) Mam jedno zapytanie SQL, które na konkretny miesiąc/rok łączy listę pracowników + daty + przydział, np. 01.01.2014 pracownik_1 projekt_1. W przypadku braku przydziałów i tak zwracał datę, ponieważ dzięki temu jest najłatwiejszy do zarządzania na froncie. Po raz pierwszy bawiłem się dzisiaj z node.js i mongodb i zastanawiałem się, czy moja konfiguracja jest czymś, co można dobrze przełożyć na NoSQL. Naprawdę podoba mi się pomysł korzystania z notacji JSON przez cały czas, ale domyślam się, że może to być jeden z tych przypadków, w których lepiej jest mi korzystać z RDBMS?


title: Jakie są wady niedeklarowania statycznej metody klasowej?

text: Na ścieżce „Interfejsy” w witrynie Oracle mamy następujący scenariusz: > Wyobraź sobie futurystyczne społeczeństwo, w którym zrobotyzowane samochody sterowane komputerowo > przewożą pasażerów ulicami miasta bez udziału człowieka. > Producenci samochodów piszą oprogramowanie (oczywiście Java), które obsługuje > samochód — zatrzymuj, ruszaj, przyspieszaj, skręcaj w lewo i tak dalej. Inna grupa > przemysłowa, producenci elektronicznych przyrządów naprowadzających, wytwarza > systemy komputerowe, które odbierają dane pozycyjne GPS (Global Positioning System) i bezprzewodową transmisję warunków drogowych i wykorzystują te informacje do kierowania samochodem. > > Producenci samochodów muszą opublikować interfejs będący standardem branżowym, który > szczegółowo określa, jakie metody można zastosować, aby wprawić samochód w ruch (dowolny samochód, od dowolnego producenta). Producenci wytycznych mogą następnie napisać > oprogramowanie, które odwołuje się do metod opisanych w interfejsie, aby sterować > samochodem. Żadna grupa przemysłowa nie musi wiedzieć, jak wdrażane jest > oprogramowanie drugiej grupy. W rzeczywistości każda grupa uważa swoje oprogramowanie za wysoce > zastrzeżone i zastrzega sobie prawo do jego modyfikowania w dowolnym momencie, o ile będzie ono > zgodne z opublikowanym interfejsem. > (http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html) Tworzymy więc taki interfejs: public interface OperateCar { // stałe deklaracje, jeśli są // sygnatury metod // An wyliczenie wartości RIGHT, LEFT int turn (kierunek kierunku, podwójny promień, podwójny startSpeed, podwójny endSpeed); int changeLanes (kierunek kierunku, podwójna prędkość początkowa, podwójna prędkość końcowa); int signalTurn (kierunek kierunku, sygnał binarny włączony); int getRadarFront (podwójna odległość do samochodu, podwójna prędkość samochodu); int getRadarRear (podwójna odległość do samochodu, podwójna prędkość samochodu); ...... // więcej sygnatur metod } i zaimplementuj jako: public class OperateBMW760i implementuje OperateCar { // sygnatury metod OperateCar, z implementacją -- // na przykład: int signalTurn(Direction direction, boolean signalOn) { / / kod włączający lewy kierunkowskaz BMW // kod wyłączający lewy kierunkowskaz BMW // kod włączający PRAWY kierunkowskaz BMW // kod wyłączający PRAWY kierunkowskaz BMW } // inni członkowie, as potrzebne -- na przykład klasy pomocnicze nie // widoczne dla klientów interfejsu } Jak na razie dobrze. Załóżmy teraz, że dodatkowo każdy producent samochodów jest zobowiązany do stworzenia samochodu prototypowego i załóżmy, że z jakiegoś powodu chcemy śledzić te samochody prototypowe. Jednym z rozwiązań jest dodanie nowej metody do interfejsu `OperateCar`: public OperateCar getPrototype(); Następnie każda klasa implementująca mogłaby zaimplementować tę metodę, zwracając swój prototypowy samochód. Ale jest z tym problem: samochód prototypowy nie ma nic wspólnego z żadną instancją klasy implementującej; zamiast tego należy do samej klasy. Innymi słowy, gdybyśmy nie mieli interfejsu, automatycznie zadeklarowalibyśmy tę metodę jako `statyczną`. Ale nie możemy tego zrobić tutaj, ponieważ interfejsy Java nie pozwalają na metody statyczne. Jakie są problemy związane z niedeklarowaniem statycznych metod klasowych? Czy w tym przypadku można po prostu pominąć słowo kluczowe `static`, aby kod się skompilował? A może wady są tak duże, że lepiej poszukać innego rozwiązania?


title: Ciśnienie sprintu powoduje problemy z jakością?

text: Wykres wypalania pokazuje wyraźny termin i postęp w jego realizacji. Kiedy postęp jest powolny, a ukończenie zaangażowanej pracy jest zagrożone, ludzie zaczynają być niechlujni w zakresie projektowania i przeglądów kodu oraz dogłębności testów. Jakość cierpi. Pytanie brzmi, czy w Twojej organizacji udało Ci się utrzymać wysokie standardy jakości niezależnie od czasu pozostałego do zakończenia Sprintu. Innym pytaniem jest, czy być może najlepiej jest porzucić wykres spalania, aby nieco zmniejszyć presję, a nawet odejść od Scrum, Kanban lub innej metodyki zwinnej, która nie wymaga iteracji.


title: Czy posiadam prawa autorskie do programu, który stworzyłem we własnym czasie?

text: Stworzyłem pakiet oprogramowania, który pomaga inżynierom elektrykom w wykonywaniu typowych obliczeń stosowanych na miejscu (w szczególności podstacje). Pakiet stworzyłem w swoim czasie, bez pytania i bez wskazówek. Pakiet jest obecnie szeroko stosowany w mojej firmie i zamierzam go dystrybuować w całym kraju. Czy posiadam prawa autorskie? Moja umowa stwierdza, że cała wyprodukowana praca jest ich, ale to było poza pracą i poza moim „zakresem pracy”. Moja firma jest głównie firmą cywilno-budowlaną i nie miała żadnego wpływu na tworzenie programu. **Z komentarzy:** To jest paragraf „W trakcie świadczenia usługi ujawnisz firmie wszystkie informacje, formuły, procesy, wynalazki lub ulepszenia, których poznałeś, odkryłeś lub rozwinąłeś w trakcie świadczenia usługi lub w związku z działalnością firmy i podpisze wszelkie niezbędne dokumenty, które umożliwią firmie uzyskanie ochrony patentowej bez względu na to, czy jest jeszcze w służbie firmy, czy też nie.” Traktują to poważnie i mają swoich prawników. AKTUALIZACJA::::::::::::::: e-mail właśnie otrzymał Dave, Jak wiesz, realizujemy wniosek, który ty i twój rzecznik patentowy złożyliście na początku tego roku, parafrazując poniżej: ... rzecznik patentowy , który poradził mi, abym przed uruchomieniem firmy zwrócił się do _{zredagowano}_ o oficjalne wyjaśnienia dotyczące własności intelektualnej i praw autorskich. W efekcie stworzą umowę prawną, w której wszystkie prawa własności intelektualnej i prawa autorskie należą do mnie w zamian za bezpłatne kopie _{zredagowano}_ dla wszystkich inżynierów MUS. Bezpłatna oferta nie obejmuje firm partnerskich. Ten proces weryfikacji trwał dłużej niż się spodziewaliśmy, ponieważ jesteśmy zobowiązani do sprawdzenia naszego stanowiska umownego z _{zredagowano}_, a także z naszym pracodawcą _{zredagowano}_. Jednak _{zredagowano}_ są gotowi zwolnić wszystkie prawa autorskie do własności intelektualnej pod warunkiem, że nadal będziemy używać _{zredagowano}_ dla naszych inżynierów _{zredagowano}_ i otrzymamy 15% tantiem od zysków ze sprzedaży _{zredagowano}_ licencje na okres do uzgodnienia. Z przyjemnością omówię tę propozycję z Państwem w dogodnym dla obu stron czasie, a my możemy skorzystać z pomocy Państwa doradców prawnych lub naszych do przygotowania umowy przeniesienia własności intelektualnej. Pozdrawiam, _{zredagowano}_


title: Testowanie Node.JS z Jasmine, bazami danych i istniejącym kodem

text: Niedawno zbudowałem początek podstawowego systemu, który prawdopodobnie zamieni się w potworny produkt. Buduję system za pomocą node.js i po zbudowaniu małej bazy zdecydowałem, że dobrym pomysłem byłoby zacząć używać jakiegoś zautomatyzowanego zestawu testów do testowania aplikacji. Zdecydowałem się użyć jaśminu, ponieważ wydaje się dość solidny i ma wiele funkcji służących do blokowania metod i klas szpiegowania i wyśmiewania. Aplikacja posiada wiele zewnętrznych magazynów danych i dostęp do API (kestrel, mysql, mongodb, facebook i inne). Mój problem polega na tym, że mam napisaną dużą ilość kodu, który chcę rozpocząć testowanie - ponieważ reprezentuje on podstawy aplikacji. Jakie są najlepsze praktyki testowania metod/klas, które uzyskują dostęp do zewnętrznych interfejsów API, nad którymi mogę mieć kontrolę lub nie? Jako przykład mam strukturę danych, która pobiera kilka danych z bazy danych MySQL. Chcę przetestować metodę, która pobiera dane; i nie jestem pewien, jak się do tego zabrać. Mógłbym przetestować metodę `fetch`, która ma zwracać tablicę obiektów, ale aby wyizolować metodę z bazy danych, muszę zdefiniować własne dane urządzeń. Więc to, co w końcu robię, to zatykanie wykonania mysql i zwracanie statycznego zestawu danych. Tak więc skończyłem na pisaniu funkcji, która zwraca zestaw danych, który sprawia, że mój test przechodzi pomyślnie. To nie wydaje się faktycznie testować kodu, poza sprawdzeniem, czy wywoływana jest metoda. Wiem, że jest to trochę abstrakcyjne i niejasne, wydaje się, że idea testowania jest jednak bardzo abstrakcyjna, więc miejmy nadzieję, że ktoś ma pewne doświadczenie i może poprowadzić mnie we właściwym kierunku. Wszelkie porady lub lektury, które mogę zrobić, są więcej niż mile widziane. Z góry dziękuję.


title: Jak długo trzeba czekać, aby rozważyć zmianę projektu w kodzie?

text: Miałem kilka dni temu. Miałem problem z wątkami. Miałem wiele pytań zadawanych na StackOverflow i szczerze po raz pierwszy nie otrzymałem odpowiedzi, której szukałem. W końcu zdecydowałem się na ogromny przeprojektowanie mojego kodu systemowego i magicznie w ciągu kilku godzin znalazłem rozwiązanie. Więc moje pytanie brzmi, czy to normalne, że często przeprojektowuję się, jeśli utknę z problemem, czy też powinienem mocno naciskać, aż znajdę rozwiązanie? Pamiętaj, że po raz pierwszy tak długo utknąłem na kawałku kodu.


title: Tworzenie oprogramowania zespołowego przy użyciu Ruby on Rails

text: Wcześniej pracowałem sam nad małymi i średnimi projektami programistycznymi i **nie mam doświadczenia w pracy zespołowej**. Obecnie we własnym zespole programistycznym, który ma za zadanie opracować szereg oprogramowania dla instytucji akademickiej, będzie nas trzech. Zdecydowaliśmy się korzystać z sieci w większości projektów i planujemy w tym celu wybrać Ruby on Rails. Chciałbym poprosić o wasze wkłady, porady i podejścia w odniesieniu do tworzenia oprogramowania jako zespołu przy użyciu frameworka internetowego RoR. Jedną z rzeczy, która mnie naprawdę wprawiła w zakłopotanie, jest to, jak dzielicie zadania programistyczne projektu, jeśli jest was trzech, którzy naprawdę robią kodowanie. To oczywiste, że my jako programiści podchodzimy do problemu w sposób modułowy i kończymy go po kolei. Jeśli projekt składa się z 3 modułów, czy każdy z nas powinien skupić się na każdym z tych modułów? Czy w ten sposób byłoby szybciej? Co powiesz na to, żeby nasza trójka najpierw skupiła się na jednym module (to jest to, co naprawdę wolę). Czy korzystanie z rozproszonego systemu kontroli wersji, takiego jak Git, jest odpowiedzią na tego typu problem? Nie zapomnij umieścić swoich wskazówek i doświadczeń dotyczących tworzenia oprogramowania zespołowego. Twoje zdrowie!


title: Przechowywanie pozycji menu z uprawnieniami użytkownika

text: Tworzę system menu w PHP i MySQL. Będę miał kilka różnych menu, a do każdego z nich będzie podłączony zestaw elementów menu. Na stronie mam również różne uprawnienia użytkownika, niektórzy użytkownicy widzą wszystkie elementy menu, a niektóre elementy są ukryte przed niektórymi użytkownikami. Jestem ciekaw, w jaki sposób mógłbym w przejrzysty sposób obsłużyć uprawnienia, które pozwolą na łatwe dodawanie większej liczby typów użytkowników w przyszłości. Mam do tej pory coś takiego: ------------------- |Menu ------------------- |id| |wyświetlana nazwa| -------- ------------------------------- --------------------------- |Pozycje menu -------------------- -------------------------------------- |id| |identyfikator_menu| |etykieta| |link| |rodzic| |sortuj| |pozwolenie| -------------------------------------------------- -------- Myślę, że kolumna `permission` może być ciągiem oddzielonym przecinkami, który mogę dopasować do identyfikatora uprawnień bieżącego użytkownika. Może to być również odniesienie do jakiejś innej tabeli, która definiuje wszystkie możliwe kombinacje aktualnie istniejących uprawnień. Jednym z rozwiązań może być również po prostu przechowywanie wielu pozycji menu, w których jedyną różnicą jest pozwolenie, chociaż prowadziłoby to do powielania przechowywania i być może bólu w administrowaniu. Chciałbym usłyszeć trochę myśli o tym, jak to skonstruować i co można uznać za czyste, dynamiczne i kiepskie. Dziękuję.


title: Testowanie a nie powtarzaj się (DRY)

text: Dlaczego powtarzanie się poprzez pisanie testów jest tak bardzo zachęcane? Wydaje się, że testy zasadniczo wyrażają to samo, co kod, a zatem są duplikatem (w koncepcji, a nie implementacji) kodu. Czy ostatecznym celem DRY nie byłoby wyeliminowanie całego kodu testowego?


title: Jak wywnioskować moje założenia, na których oparłem swój szacowany czas?

text: W odpowiedzi na temat szacowania czasu mówi się, że należy spisać wszystkie założenia, które poczyniłeś podczas szacowania projektu. Wydaje się, że to dobry plan. Problem polega na tym, że zakładając, że już zrobiłem z siebie osła, nie zdając sobie z tego sprawy. Założenia to te złe rzeczy, które lubią pozostać w ukryciu, rzeczy, które uważałem za oczywiste. Jakie techniki mogę więc zastosować podczas przeglądania mojego oszacowania, aby odkryć założenia, na których oparłem swoje oszacowanie czasu?


title: Fabryczny wzorzec projektowy - pobieranie typów z tabeli

text: Zaimplementowałem fabrykę generyczną, jak opisano tutaj. Muszę zarejestrować elementy w kodzie fabrycznym w następujący sposób: Factory.Register(1, typeof(MyClass)); ta fabryka będzie musiała być skorelowana z prostą tabelą typów danych domeny [id,Display], w tym przypadku id 1 jest powiązany z MyClass. Myślałem o dodaniu kolumny do tej tabeli z kwalifikowanym typem, abym mógł po prostu pobrać identyfikator do typów. tabela będzie miała postać [id,Display, typeName], a ja użyję fabryki w następujący sposób: Factory.Register(id, Type.GetType(typeName)); Próbowałem i działa dobrze. **czy to dobry projekt?** **czy są jakieś luki w zabezpieczeniach?** **czy jest lepszy sposób na robienie rzeczy?**


Mocowanie DAL/Repository, które przekazuję do BLL/ViewModels do celów testowych, nie różni się zbytnio od tworzenia DAL w pamięci. W tej chwili używam DAL w pamięci w nowym projekcie zamiast kpić z niego i jak dotąd działa bardzo dobrze (nawet łatwiej niż konfigurowanie makiet, które powiedziałbym). Ponieważ nie widziałem tego w przykładach online/książkowych, pomyślałem, że zapytam. Czy istnieje problem z pisaniem DAL w pamięci do testowania BLL/ViewModels? W mojej architekturze wszystkie komponenty mają wspólną bibliotekę ze wszystkimi odpowiednimi interfejsami. Rzeczy są późne, co pozwala mi zamienić dowolny komponent na inny z tego samego interfejsu.


title: Co się stało z Borland Delphi?

text: Mam wrażenie, że Delphi nie jest już bardzo popularne. Ale teraz w pracy musiałem dokonać pewnych zmian w starym programie Delphi, którego wciąż używamy. Użyłem Borland Developer Studio 2006 i praca z nim była bardzo przyjemna i intuicyjna, mimo że praktycznie nie miałem z nią wcześniej kontaktu. Czy Delphi jest nadal szeroko stosowany i po prostu nie jestem tego świadomy, czy są inne powody jego rezygnacji?


title: Doświadczenie z „nowymi zaczepami importu PEP-302” Pythona

text: Jestem jednym z twórców Ruby (CRuby). Pracujemy nad wydaniem Ruby 2.0 (planowane wydanie 2012/luty). Python ma „PEP302: Nowe zaczepy importu” (2003): > Ten PEP proponuje dodanie nowego zestawu zaczepów importu, które oferują lepsze > dostosowanie mechanizmu importu Pythona. W przeciwieństwie do obecnego haka > **import**, hak nowego stylu może zostać wstrzyknięty do istniejącego schematu, > pozwalając na bardziej szczegółową kontrolę nad tym, w jaki sposób znajdują się moduły i jak są > ładowane. Rozważamy wprowadzenie do Ruby 2.0 funkcji podobnej do PEP302 (CRuby 2.0). Chcę złożyć propozycję, która może przekonać Matza. Obecnie CRuby może w standardowy sposób ładować skrypty tylko z systemów plików. Jeśli masz jakieś doświadczenia lub rozważania dotyczące PEP 302, podziel się nimi. Przykład: 1. To świetna specyfikacja. Nie trzeba tego zmieniać. 2. Prawie dobrze, ale ma ten problem... 3. Gdybym mógł cofnąć się do 2003 roku, to zmieniłbym specyfikację na... przepraszam, jeśli takie pytanie nie pasuje tutaj. Opublikowałem tutaj, ponieważ nie jestem pewien, czy mogę zadać to pytanie w python-dev (oczywiście lista nie jest przeznaczona do programowania cruby). Ten post został przeniesiony z http://stackoverflow.com/questions/11188229/experience-of-pythons-pep-302-new-import-hooks.


title: Dlaczego warto korzystać z klas częściowych?

text: W moim rozumieniu słowo kluczowe „częściowe” nie robi nic innego, jak tylko pozwala na podzielenie klasy między kilka plików źródłowych. Czy jest jakiś powód, aby to zrobić, poza organizacją kodu? Widziałem to używane do tego w wygenerowanych klasach interfejsu użytkownika. Wydaje się, że to kiepski powód, by tworzyć całe słowo kluczowe. Jeśli klasa jest wystarczająco duża, aby wymagać wielu plików, prawdopodobnie robi za dużo. Pomyślałem, że być może mógłbyś użyć go do częściowego zdefiniowania klasy, którą inny programista mógłby gdzieś ukończyć, ale lepiej byłoby zrobić klasę abstrakcyjną.


title: Czy implementacja interfejsu zdefiniowanego w podpakietu jest antywzorcem?

text: Załóżmy, że mam: pakiet me.my.pkg; public interface Something { /* ... kilka metod przejdź tutaj ... */ } i: package me.my; importuj mnie.mój.pkg.Coś; public class SomeClass implementuje Something { /* ... implementacja Something is here ... */ /* ... kilka innych implementacji metod też tutaj ... */ } Oznacza to, że _klasa implementująca interfejs jest bliżej root hierarchii pakietów niż interfejs, który implementuje, ale oba należą do tej samej hierarchii pakietów. Powodem tego w tym konkretnym przypadku, który mam na myśli, jest to, że istnieje wcześniej istniejący pakiet grupujący funkcjonalność, do której logicznie należy interfejs `Coś`, oraz logiczną (jak w przypadku „tego, którego można się spodziewać” i "ta, do której musi się udać, biorąc pod uwagę obecną architekturę") istnieje wcześniej i znajduje się o jeden poziom "w górę" od logicznego rozmieszczenia interfejsu. _Klasa implementująca nie należy logicznie nigdzie pod me.my.pkg._ W moim konkretnym przypadku klasa, o której mowa, implementuje kilka interfejsów, ale wydaje się, że nie ma to żadnego znaczenia (lub przynajmniej żadnej znaczącej) różnicy. **Nie mogę się zdecydować, czy jest to akceptowalny wzorzec, czy nie. Czy tak jest, czy nie i dlaczego?**


title: Jak wyrazić subtelne relacje w moich danych?

text: „A” jest powiązane z „B” i „C”. Jak pokazać, że „B” i „C” mogą, w tym kontekście, być również powiązane? ### Przykład: Oto kilka nagłówków na temat niedawnej sztuki na Broadwayu: 1. Glengarry Glen Ross Davida Mameta, w roli głównej Al Pacino, premiera na Broadwayu 2. Al Pacino w „Glengarry Glen Ross”: Co sądzą krytycy? 3. Al Pacino zbiera słabe recenzje na Broadway 4. Recenzja teatralna: Glengarry Glen Ross sprzedaje swoje gwiazdy na twardo 5. Glengarry Glen Ross; Hej, kto zabił światła Kliega? ### Problem: Uruchomienie dopasowania rozmytego ciągu na tych rekordach ustanowi pewne relacje, ale nie inne, nawet jeśli czytelnik mógłby wychwycić je z kontekstu w znacznie większych zbiorach danych. Jak znaleźć związek, który sugeruje, że #3 jest powiązane z #4? Obydwa można łatwo połączyć z #1, ale nie ze sobą. Czy istnieje nazwa (dostępna w Google) dla tego rodzaju danych lub struktury? Jakiego algorytmu szukam? ### Cel: Biorąc pod uwagę 1000 nagłówków, system automatycznie sugeruje, że te 5 elementów _prawdopodobnie_ dotyczy tego samego. Szczerze mówiąc, minęło tak dużo czasu, odkąd zaprogramowałem, że nie wiem, jak właściwie wyartykułować ten problem. (Nie wiem czego nie wiem, czy to ma sens). To jest projekt osobisty i piszę go w Pythonie. Z góry dziękuję za pomoc, porady i wskazówki!


Jaka jest różnica między Microsoft.Web.Helpers i System.Web.Helpers? Czy jedna zajęła miejsce drugiej (ta sama rzecz, inna wersja/nazwa), czy są to odrębne rzeczy. Jeśli tak, to czym się różnią? Jaka jest racja bytu każdego z nich i czy są scenariusze, w których możesz użyć obu z nich?


title: Czy pokazałbyś swój kod produkcyjny kandydatom podczas rozmowy kwalifikacyjnej?

text: Widziałem to wielokrotnie: kandydat lubi firmę, odnosi sukcesy na rozmowie kwalifikacyjnej. Potem przychodzi do pracy i pod koniec pierwszego dnia jest pewien, że baza kodu/projekt nie jest tym, z czym chciałby spędzać czas. Więc szybko odchodzi. Myślę, że wprowadzenie kandydatów do codebase na rozmowie kwalifikacyjnej mogłoby potencjalnie rozwiązać ten problem. Może nawet lepiej: mieszając to z pytaniami z wywiadu, takimi jak „jak ulepszyłbyś tę część kodu?” W ten sposób byłoby oczywiste, czy kandydat jest „dobrze dopasowany do bazy kodu”. Czy kiedykolwiek widziałeś, jak to podejście jest stosowane? Czy podczas rozmowy kwalifikacyjnej pokazałbyś swoją własną bazę kodów kandydatom: gdyby zapytali/w ramach procesu rozmowy kwalifikacyjnej?


title: Czy przyczyniasz się do tworzenia oprogramowania open source?

text: Niedawno John Resig (twórca biblioteki jQuery) napisał na swoim twitterze, że „Jeśli chodzi o zatrudnianie, każdego dnia zajmę się rejestracją zmian na Github w CV”. O ile to szanuję (motywowanie programistów do oddania społeczności), to również mnie zastanawia, ponieważ nie każdy z nas ma taką możliwość z wielu powodów (rodzina, umowy z pracodawcą itp.). Jak byś przedstawił sprawę dla dewelopera, który nie jest współtwórcą? Czy uważasz, że programiści, którzy nie wnoszą wkładu do oprogramowania open source, są skazani na pewne rodzaje organizacji?


title: Czy uważasz, że prośba o podpisanie umowy licencyjnej współtwórcy dla projektu open source stwarza opór współtwórcom?

text: Pracuję nad projektem open-source, który jest wspierany przez organizację. Organizacja płaci zespołowi za wykonanie tego projektu typu open source. Ten projekt będzie licencjonowany na licencji GPLv3. Rozmawiamy o zawarciu CLA dla współtwórców. Czy uważasz, że nałożenie CLA zmniejszy liczbę współpracowników? Zauważyłem, że ludzie nie mają problemów z podpisaniem CLA, gdy projekt jest naprawdę popularny. Czy myślisz, że CLA stworzy opór?


title: Gdybyś był kierownikiem zespołu 25 programistów, jak byś ich zmotywował?

text: Wyobraź sobie, że jesteś zatrudniony przez nowy start-up wspierany kilkoma milionami pochodzącymi od inwestorów venture capital. Twoja misja: „zorganizuj rozwój kolejnej zabójczej aplikacji”. 25 programistów to za dużo, aby zająć się każdym z osobna, więc **jakie decyzje byś podjął, aby ich zmotywować?** _Będę wdzięczny za wszelkie odpowiedzi od opcji na akcje po darmowe ciasteczka ;)_ Oczywiście trik tutaj (chyba że naprawdę jesteś menedżerem takiego startupu), postawiłeś się w sytuacji jednego z tych programistów. EDIT: to wyimaginowany kontekst. Celem tej historii jest pobudzenie twoich życzeń. Chcę uchwycić to, co motywuje programistów.


title: Podczas programowania: Ile czasu zajmuje nawigacja/przewijanie i ile pisania?

text: Kiedy programujesz często musisz iść i spojrzeć na inne fragmenty kodu w celach informacyjnych, szukać czegoś itp. Szukam liczb dotyczących stosunku czasu spędzonego na wpisywaniu kodu (kodowania) do czasu spędzonego na powrocie i między innymi częściami systemu, nie licząc nawet przeglądania internetu, czytania dokumentacji. Oczywiście zależy to od wielu czynników, prawdopodobnie także od twojego IDE, języka programowania itp. Potrzebuję tylko przybliżonych szacunków lub badań na ten temat. Tło: Chcę zbadać, jak duże opóźnienie sieci jest tolerowane przez programistę do pracy na maszynach wirtualnych (jeśli istnieją).


title: Projekty Open Source i ITAR/EAR

text: Jaka jest historia udziału w projektach open source w odniesieniu do Międzynarodowego Handlu Bronią (ITAR) lub Export Administration Regulations (EAR)? Z tego, jak czytają przepisy, wydaje się, że sama praca nad oprogramowaniem o otwartym kodzie źródłowym może narazić Cię na naruszenie przepisów dotyczących kontroli eksportu. Czy jest w tym jakiś priorytet? Czy toczyły się jakieś sprawy sądowe z tym związane?


title: Zarządzanie dużymi treściami do pobrania na urządzeniach mobilnych

text: To jest ogólne pytanie, jak najlepiej zarządzać dużą zawartością do pobrania na urządzeniach mobilnych. Rozważmy sytuację, w której aplikacja mobilna musi pobrać wiele bardzo dużych elementów treści, takich jak filmy HD, które mają ponad 500 MB, ale poniżej 2 GB. Załóżmy teraz, że ten system dostarczania treści powinien być skalowalny. Czy byłoby uczciwym założeniem, że: * Potrzebna byłaby renomowana usługa w chmurze - jeśli tak, to jaka jest niezawodna i opłacalna usługa w chmurze dla urządzeń mobilnych oparta na czyichś doświadczeniach? * Pobieranie dużych treści powinno odbywać się wyłącznie za pośrednictwem połączenia Wi-Fi, aby użytkownik końcowy nie ponosił dużych kosztów, np. podczas podróży. * Jeśli to możliwe, pobieranie powinno odbywać się w tle, ponieważ użytkownik nie będzie chciał długo czekać w aplikacji. Jeśli pobieranie się nie kończy lub system operacyjny zamyka aplikację, czy wszystkie pliki do pobrania powinny być kontynuowane przy następnej aktywacji aplikacji? Czy są jakieś inne pułapki, które ktoś mógł napotkać podczas zarządzania dużymi treściami na urządzeniach mobilnych? Dziękuję.


title: Jak testować aplikacje internetowe Java

text: Do tej pory nie testowałem ani nie uczyłem się testować moich aplikacji webowych Java. Jeśli tak, to jakich narzędzi potrzebujesz i czy naprawdę konieczne jest przetestowanie aplikacji webowej, która nie wymaga skalowania lub nie będzie obsługiwała dużego ruchu i wielu transakcji? Jakie rzeczy powinienem przetestować i jakie podejście powinienem podjąć, aby moja aplikacja działała poprawnie?


title: algorytm z artykułu naukowego

text: W mojej aplikacji chcę użyć kombinacji kilku algorytmów opisanych w kilku ostatnio opublikowanych pracach naukowych. Ale mam kilka pytań prawnych. **P1** Jeśli algorytm został opublikowany w pracy naukowej, a autorzy byli związani ze środowiskiem akademickim, a nie z prywatną firmą, czy jednocześnie może być chroniony patentem? Gdzieś wyczytałem, że nie ma możliwości uzyskania patentu na coś, co zostało szczegółowo opisane w publicznie dostępnym źródle. **P2** Jeśli użyję jakiegoś algorytmu opisanego w artykule, czy **muszę** podawać punkty w sekcji „prawne” lub „o” w moim programie, czy jest to po prostu dobrowolne i byłoby po prostu miłe z mojej strony? To **nie** nie chcę dawać kredytu. Raczej nie chcę wewnętrznie ujawniać, na czym program jest oparty i chciałbym jak najdłużej powstrzymywać naśladowców.


title: Jak efektywnie wykorzystać czas na konferencjach software'owych?

text: Microsoft (poprzez program Student Insider) hojnie wysłał mnie na Microsoft TechEd North America 2011. Wygląda na to, że strona internetowa sugeruje, że należy po prostu sporządzić harmonogram interesujących wykładów i tyle. Wygląda jednak na to, że kilka osób nie spędza dużo czasu na rozmowach i zamiast tego spędza czas na „sieciowaniu” (rodzaj ludzi, a nie oprogramowania). Jak zmaksymalizować efektywność swojego czasu na konferencjach software'owych?


title: Dlaczego mój pracodawca chce otrzymać listę moich przeszłych i obecnych projektów pobocznych?

text: Pracuję w Delaware i mieszkam w PA. Prawo w Delaware jest jasne: moje projekty programistyczne są moją własnością, a nie mojego pracodawcy, chyba że robię coś na boku, co jest bardzo podobne do pracy zarobkowej. (Patrz kod DE rozdział 19 sekcja 805 tutaj: http://codes.lp.findlaw.com/decode/19/8/805). Niemniej jednak mój pracodawca nie chce dać mi kawałka papieru uznającego moje prawo do własnych projektów pobocznych, a nawet prawomocności tego statutu DE. Nadal chcieli mieć listę wszystkich moich projektów, zanim zacząłem, czyli być może w sumie 20. Od tego czasu wypuściłem ponad 10 aplikacji na iOS, które napisałem wieczorami. Co oni knują? Jakie mam opcje?


title: Algorytm zapisu na zbiorze danych 2D w prostym języku angielskim

text: Rozpocząłem wstępne zajęcia w Javie, a materiał jest absolutnie _przerażający_ i muszę uzyskać doskonałe oceny, aby zostać przyjętym na studia magisterskie, stąd moje bardzo początkujące pytanie: W moim zadaniu muszę pisać algorytmy (jeszcze bez pseudokodu) do rozwiązać grę planszową (Sudoku). Zasadniczo notatki mówią, że algorytm jest specyfikacją danych wejściowych, wyników i zabiegów zastosowanych do danych wejściowych, aby uzyskać dane wyjściowe. Moje pytanie dotyczy sformułowań algorytmów, ponieważ prawdopodobnie mógłbym je zakodować, ale nie mogę tego spójnie przelać na papier. Gra ma planszę 9x9, a jeden z algorytmów do napisania musi znaleźć rozwiązanie, patrząc na 3 kwadraty (poziome lub pionowe) i sprawdzić, czy jeden z trzech podkwadratów pasuje do liczby, której szukasz. Jeśli żaden nie pasuje, liczba, którą chcesz umieścić, znajduje się w jednym z pozostałych 2 zestawów 3 podkwadratów (patrz zdjęcie, aby uzyskać lepszy pomysł). **Uwaga:** Zadaniem nie jest napisanie kompletnego solwera. Tylko algorytm do rozwiązania konkretnego przypadku, który opisałem. Naprawdę nie rozumiem, jak sformułować rozwiązanie w terminach opisanych powyżej, a może jest to po prostu zbyt proste, oto co myślałem: **Wkład:** Dwuwymiarowy zestaw danych o rozmiarze 9 na 9 do rozwiązania i numer do wyszukania. **Wynik:** dwuwymiarowy zestaw danych o rozmiarze 9 na 9 rozwiązany lub częściowo rozwiązany. **Zabieg:** zeskanuj każdy zestaw kwadratów 3x9 i 9x3. Dla każdego wiersza lub kolumny kwadratu 3x3 sprawdź, czy liczba pasuje do wiersza (lub kolumny). Jeśli tak, przejdź do następnego wiersza (lub kolumny). Jeśli nie, przejdź do następnego kwadratu 3x3 w tym samym wierszu (lub kolumnie). Wypłukać i powtórzyć. Czy to ma sens jako algorytm napisany prostym angielskim? Nie szukam odpowiedzi na sam algorytm, ale raczej na sformułowanie algorytmów w prostym języku angielskim. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/LWV1I.png) **Uwaga** : Najwyraźniej nie jest to jasne: nie chodzi o rozwiązywanie wszystkich możliwych rozwiązań. Chodzi o rozwiązanie tylko tego bardzo konkretnego zestawu zasad. Nie wykonałem zadania. W każdym razie nie jest to nawet w najmniejszym stopniu istotne, ponieważ nie jest to przedmiotem mojego pytania.


title: Jak wdrożyć jedną witrynę na wielu serwerach fizycznych?

text: Chcę wdrożyć moją witrynę internetową na wielu serwerach fizycznych. Czy są możliwe metody zapisywania plików i ustawień (a także danych wprowadzanych przez użytkownika) na wszystkich serwerach fizycznych, tak aby serwery wykonywały następujące zadania: 1. Serwery używane jako sieć, przyspieszając proces, dając solidną rzecz użytkownikowi końcowemu . 2. Dane, które mają być przechowywane na dyskach twardych wszystkich serwerów, oraz 3. Każdy serwer ma połączenie internetowe od innego dostawcy, czyli na przykład 1. jeśli któryś z dostawców Internetu ulegnie awarii lub 2. wystąpi jakiś sprzęt lub zasilanie awaria, strona nadal działa, bez przerwy i bez utraty danych. Czy ktoś wie o jakimś kursie online lub wyczerpujących samouczkach na ten temat?


title: Czy ten akapit w Code Complete 2 jest odwrócony, czy też źle go rozumiem?

text: W rozdziale 13, kiedy mówimy o wskaźnikach, znajduje się akapit: > Czasami jednak chciałbyś mieć semantykę przekazywania przez referencję — to znaczy, że przekazany obiekt nie powinien być zmieniany — z zastosowaniem > polecenia pass przez wartość — to znaczy przekazanie rzeczywistego obiektu, a nie kopii. Wygląda na to, że autor popełnił błąd i pomieszał te dwie rzeczy. Czy to prawda, czy nie rozumiem, co właściwie mówi?


title: Czy praca na zlecenie online jest opłacalna według amerykańskich standardów?

text: Zawsze ciekawiło mnie, jak wypróbować strony dla freelancerów online… fajnie byłoby pracować z domu, czuć się niezależnym, wybierać, nad czym chcę pracować, pracować nad różnymi technologiami, stracić PHB itp. Jednak nigdy tak naprawdę nie dałem im szansy, ponieważ jestem przyzwyczajony do amerykańskich stawek i zakładałem, że będę konkurował z ludźmi z Indii, Rosji, Chin itd., które poważnie podcięłyby mnie i nie byłyby dla mnie opłacalne. Czy mam rację w tym założeniu, czy powinienem spróbować? Jakiej stawki godzinowej mógłbym oczekiwać od krótkoterminowych prac programistycznych?


title: Standaryzowane języki programowania

text: Czy istnieje organizacja podobna do W3C, która tworzy standardy języków programowania? Jeśli tak, to czy są jakieś języki programowania, takie jak przeglądarki używające standardów W3C, które implementują te standardy? Przeprowadziłem własne badania i jak dotąd nie udało mi się, stąd pytanie. Odpowiedzi i większość komentarzy do tej pory są bardzo przydatne, ale zasadniczo szukam języka lub listy języków, które mają otwarty i niezawodny system licencjonowania. Myślę, że do tej pory W3C odnosi największe sukcesy z HTML, więc szukam języka, który ma podobną strukturę licencjonowania. Java ma pewne specyfikacje, takie jak specyfikacja serwletu EE, w której dostawcy tacy jak Tomcat implementują ją, ale ostatecznie jest to nadal standard należący do Oracle, prawda?


title: Kiedy powinienem przekazać wartość podobną do ustawienia jako zmienną klasy, a kiedy jako asoc. szyk?

text: Podążając za moim drugim pytaniem, czy istnieje ogólna zasada, kiedy powinniśmy przekazywać wartość podobną do ustawienia, która kontroluje zachowanie klasy (na przykład wyświetlane teksty) jako stałą lub zmienną klasy, pojedynczo i kiedy lepiej "zapakować" je do jednej tablicy asocjacyjnej? A może to tylko wybór dewelopera? Na przykład -- czy to podejście jest lepsze (kod PHP): class SomeClass { public $errorIncorrectProtocol = 'Proszę nie używać protokołu GET w tym kontekście!'; public $errorMissingId = 'Identyfikator nie może być pusty lub równy zero...'; } niż ta: class SomeClass { public $errorMessages = array ( 'IncorrectProtocol'=>'Proszę nie używać protokołu GET w tym kontekście!', 'MissingId'=>'Identyfikator nie może być pusty lub równy zero ...” ); } a jeśli tak - to dlaczego?


title: Jak korzystać z ORM w MVC?

text: Jeśli chcę używać ORM w systemie MVC Co jest/są poprawne? 1. Użyj obiektu ORM do zastąpienia Modelu 2. Hermetyzuj ORM wewnątrz modelu 3. Użyj ORM poza modelem, użyj ORM do uzyskania dostępu do bazy danych, a następnie użyj jednej instancji do przechowywania jednego rekordu danych. 4. Inne lepsze praktyki Proszę podać przykład


title: Projekt implementacji interfejsu, która zapewnia dodatkową funkcjonalność

text: Pojawił się problem projektowy, na który natknąłem się podczas implementacji interfejsu: Załóżmy, że istnieje interfejs urządzenia, który obiecuje zapewnić funkcje `PerformA()` i `GetB()`. Ten interfejs zostanie zaimplementowany dla wielu modeli urządzenia. Co się stanie, jeśli jeden model ma dodatkową funkcjonalność `CheckC()`, która nie ma odpowiedników w innych implementacjach? Wymyśliłem różne rozwiązania, z których żadne nie wydaje się być zgodne z wytycznymi projektowania interfejsu: * Aby dodać do interfejsu metodę `CheckC()` i pozostawić jedną z jej implementacji pustą: interface ISomeDevice { void PerformA(); int GetB(); bool SprawdźC(); } class DeviceModel1 : ISomeDevice { public void PerformA() { // robi rzeczy } public int GetB() { return 1; } public bool CheckC() { bool res; // przypisz res wartość na podstawie walidacji return res; } } class DeviceModel2 : ISomeDevice { public void PerformA() { // robi rzeczy } public int GetB() { return 1; } public bool CheckC() { return true; // bez sprawdzania czegokolwiek } } To rozwiązanie wydaje się niepoprawne, ponieważ klasa implementuje interfejs bez **naprawdę** implementacji wszystkich wymaganych metod. * Aby pominąć metodę `CheckC()` z interfejsu i użyć jawnego rzutowania w celu jej wywołania: interface ISomeDevice { void PerformA(); int GetB(); } class DeviceModel1 : ISomeDevice { public void PerformA() { // robi rzeczy } public int GetB() { return 1; } public bool CheckC() { bool res; // przypisz res wartość na podstawie walidacji return res; } } class DeviceModel2 : ISomeDevice { public void PerformA() { // robi rzeczy } public int GetB() { return 1; } } class DeviceManager { private ISomeDevice myDevice; public void ManageDevice(bool newDeviceModel) { myDevice = (newDeviceModel) ? nowy DeviceModel1() : nowy DeviceModel2(); mojeUrządzenie.WykonywanieA(); int b = mojeUrządzenie.PobierzB(); if (newDeviceModel) { DeviceModel1 newDevice = mojeUrządzenie as DeviceModel1; bool c = noweUrządzenie.SprawdźC(); } } } To rozwiązanie wydaje się powodować niespójność interfejsu. * Dla urządzenia, które obsługuje `CheckC()`: aby dodać logikę `CheckC()` do logiki innej metody, która jest obecna w interfejsie. To rozwiązanie nie zawsze jest możliwe. Jaki jest więc właściwy projekt do zastosowania w takich przypadkach? Może należy całkowicie zrezygnować z tworzenia interfejsu na rzecz innego projektu?


title: Czy języki znaczników mają równoważną koncepcję „semantyki”, którą można znaleźć w C lub C++?

text: Może czegoś mi brakuje, ale czy tak zwane języki znaczników mają równoważną koncepcję „semantyki”, którą można znaleźć w C lub C++? Sądząc po tym, jak parsujesz język, tak naprawdę nie masz zbyt wielu opcji, nie ma zbyt dużego kontekstu, po prostu parsujesz swoje tokeny i stosujesz je do kodu źródłowego. Pokuszę się o stwierdzenie, że nie tylko semantyka w tym przypadku nie istnieje, ale dzieje się tak tylko w językach znaczników: mam rację?


title: OO Design podczas korzystania z komunikacji

text: Mam 2 aplikacje, jedna jest napisana w C++, a druga w Javie. aplikacje komunikują się, przekazując tablice bajtów, które reprezentują obiekt serializowany. każdy obiekt komunikacyjny reprezentuje polecenie i przechowuje identyfikator polecenia i powiązane dane. Posłużę się przykładem, aby opisać mój problem. Powiedzmy, że mam 3 składniki. jeden odpowiada za przechowywanie danych i system plików, jeden odpowiada za prezentację interfejsu użytkownika, a jeden odpowiada za bezpieczeństwo i autoryzację użytkowników. Jednym ze sposobów uzyskania dostępu do określonego komponentu jest posiadanie jednego punktu wejścia, który wykona przypadek przełącznika na wszystkich możliwych identyfikatorach poleceń. pseudo: switch(commandId) { case ZAPISZ_PLIK: DATASTORAGE::Save(); przerwanie; case LOAD_FILE: DATASTORAGE::Load(); przerwanie; case AUTORYZUJ: SECURITY_CONTROLLER::authorize(); przerwanie; przypadek DENY_ACCESS: SECURITY_CONTROLLER::denyAccess(); ... } W tym przypadku, jeśli muszę zmienić kontroler bezpieczeństwa, muszę zmienić ten główny punkt wejścia. więc zamiast tego dodałem dodatkowe pole do obiektu komunikacyjnego, które przechowuje identyfikator komponentu, który ma przetworzyć polecenie. W tym przypadku, jeśli chcę dokonać autoryzacji wstępnej, wykonaję następujące czynności: communicationObject.commandId = AUTHORIZE; obiekt komunikacyjny.target = SECURITY_CONTROLLER_ID; A główny przełączy przypadek na możliwe cele i przekaże identyfikator polecenia do konkretnego komponentu, który jest odpowiedzialny za to polecenie. switch(target) { case SECURITY_CONTROLLER_ID: SECURITY_CONTROLLER::Process(commandId); przerwanie; sprawa DATASTORAGE_ID: DATASTORAGE::Process(commandId); ... } Nie podoba mi się również ten nowy projekt, ponieważ wymaga, aby nadawca znał wewnętrzną strukturę odbiorcy. z drugiej strony, gdybym miał bezpośredni dostęp do innych klas aplikacji (nie używając byte [] do komunikacji) to druga opcja zostanie zmapowana na coś takiego: SECURITY_CONTROLLER::Authorize(); podczas gdy pierwsza opcja zostanie zmapowana na coś takiego jak Main.AUTHORIZE(), co zdecydowanie nie jest właściwą drogą! jakie jest najlepsze podejście w tym przypadku?


title: Jak zaprojektować modułowy "konfigurator ekranów" dla aplikacji bazodanowej?

text: Obecnie pracuję z produktem, który jest skutecznie gloryfikowaną aplikacją CRUD. (Jest to aplikacja desktopowa C# .NET 4.0 wspierana przez bazę danych Oracle 11gR2). Program kliencki przedstawia listę "ekranów", które użytkownik może otworzyć; każdy przedstawia widok niektórych danych oraz szereg przycisków służących do wykonywania operacji na danych. Obecnie te ekrany można konfigurować w zakresie decydowania, jakie dane mają być wyświetlane na ekranie i co każdy z przycisków powinien zrobić. Jednak to, co chciałbym zrobić, to uczynić każdą kontrolkę "modułem" i umożliwić użytkownikowi wykonującemu konfigurację przeciąganie i upuszczanie tych modułów do modelu szkieletowego, aby stworzyć dostosowany ekran w locie. Na przykład chciałbym mieć moduł „grid” (efektywnie już go mamy jako kontrolkę WPF) taki, żebym mógł mieć tyle „siatek” na ekranie, ile mi się podoba, a każda z nich mogłaby mieć inną konfigurację – np. jakie pola są wyświetlane i które pola można edytować. Co więcej, każda siatka może być połączona, tak aby wybranie elementu w jednej siatce powodowało ładowanie powiązanych danych w innej siatce. Jak podejść do tego projektu?


title: Przerywane migotanie przy ruchu myszy

text: Mamy wewnętrzną stronę internetową napisaną w javascript i jquery i używaną tylko w ie8. Wszystko jest w porządku, ale po pewnym czasie zaczyna pojawiać się migotanie ekranu, gdy mysz przechodzi między pewnymi elementami (co może być denerwujące dla użytkowników). Naprawdę nie mogę umieścić żadnego kodu, ponieważ jest ich całkiem sporo, ale zastanawiałem się, czy ktoś może wiedzieć, co zapoczątkowało ten dziwny problem lub kiedykolwiek miał podobne problemy!?!? Skrypt wykonuje 4 wywołania ajax podczas ładowania strony, które dynamicznie ładują zawartość, a także znajdują się w ramce iFrame. Sprawdziłem kilka możliwych źródeł, tj. Problemy / wycieki pamięci, jquery / modalne, liczniki czasu, iFrames, ale po prostu nie rozumiem, dlaczego nie jest to spójne?


Jak powinien być przechowywany kod w kontroli wersji? **Przyjazny dla programistów**? żeby programista mógł szybko pobrać najnowsze i móc uruchomić ze swojego edytora bez robienia wielu zmian? (jak pliki konfiguracyjne wskazujące na dev DB..etc) lub Czy powinno być **przyjazne dla produkcji**? source powinien być w sposób łatwy do wdrożenia w środowisku produkcyjnym, a gdy programista pobierze najnowsze, powinien wykonać zmiany zgodnie ze swoimi potrzebami programistycznymi.


title: Najlepsze podejście do rozwiązania do zbierania i raportowania danych konfiguracyjnych serwera ze starszego skryptu?

text: Mam projekt, który polega na zbieraniu danych konfiguracyjnych z serwerów Windows w naszej (bardzo dużej) nieruchomości serwerowej. Mój menedżer chce, abym zebrał ponad 150 elementów danych we wszystkich obszarach konfiguracji, w tym dane konfiguracji sieci, dyski, wartości rejestru, wersję BIOS-u, wersje dll, co tylko chcesz. Zespół wsparcia serwera używa obecnie paskudnego skryptu vbScript, który jest ogromny, niechlujny i został z czasem przekazany i rozwijany organicznie. Skrypt jest obecnie używany do zbierania danych i tworzenia bardzo prostego, płaskiego raportu HTML z kolumną dla każdego z ponad 150 elementów, dla których zbiera dane. Moim zadaniem jest przekształcenie go w odpowiednie rozwiązanie programowe z nowymi dzwonkami i gwizdkami, stroną internetową, raportami itp. Pomysł polega na tym, że administrator systemu przejdzie do strony intranetowej, wstawi nazwę serwera i naciśnie przycisk Go, rozwiązanie zbiera dane i przesyła je do bazy danych w celu późniejszego raportowania. Mój menedżer chce, aby rozwiązanie zbierało dane, z których część odwołuje się do znanych pożądanych wartości (np. sterowniki kart RAID dla serwerów modelu ABC są w wersji 1.2.5.1), aby sprawdzić, czy są poprawne lub aktualne, przechowywać je w SQL bazy danych, a następnie użyj witryny sieci Web frontonu do tworzenia raportów. W raportach chce, aby możliwe było porównanie dwóch zbiorów danych; na przykład jeden dla serwera ABC123 i jeden dla serwera DEF987 w jednym raporcie, podkreślając wszelkie różnice między nimi. Robi się dość szybko bałagan, ponieważ niektóre dane będą zbierane na niektórych serwerach, ale nie na innych (kontrolery domen nie będą gromadzić danych o stanie uruchomionych usług wymiany). Istnieje wiele różnych elementów, które nie pasują do obszaru modelu danych i tak naprawdę nie mają domu ... to bałagan. Nie mam nic przeciwko zbieraniu danych (za pomocą .Net), ale nie wiem, gdzie najlepiej robić takie rzeczy, jak przechowywanie i wyszukiwanie/porównywanie elementów z dobrze znanymi wartościami (XML, DB?). Czy powinienem to zrobić jako część fazy zbierania danych, a następnie wepchnąć go do DB. A może powinienem to wszystko poślubić jako część danych sprawozdawczych? Idę ze schematem magazynu danych (zdenormalizowanych) dla bazy danych. Prawdopodobnie będzie około 20 tabel, z których dane będą musiały zostać pobrane, więc nie mam pojęcia, jak najlepiej porównać zestaw danych z jednego zbioru danych serwera z innym, z tak ogromnym zestawem pól do porównania. Jak myślicie, jakie są moje najlepsze opcje podejścia do tego projektu i architektury rozwiązania?


Niektórzy powiedzieliby: napisz dużo kodu. To z pewnością prawda, pomogło mi pisanie dużej ilości kodu. Widziałem pułapki. Refaktoruję. Czytam. Przeczytałem niezliczoną ilość książek i uznaję wzorce projektowe. Jednak, jeśli chodzi o faktyczne używanie ich w prawdziwym życiu, umykają mi. Widzę kod zaśmiecony wymyślnymi funkcjami i eleganckimi rozwiązaniami i zastanawiam się: ojej, dlaczego o tym nie pomyślałem? Jak przejść od średnio zaawansowanego do eksperta? Jakie rzeczy powinieneś czytać codziennie? Jak możesz poprawić swoje umiejętności? Twoje mieszkanie do rozwiązywania problemów? Ostatecznie, jak możesz wypełnić lukę między dobrymi a świetnymi?


title: Czy kod chroniony prawem autorskim trafi do domeny publicznej po wygaśnięciu jego praw autorskich?

text: Ponieważ licencja kodu źródłowego jest chroniona prawem autorskim (dokładnie, konwencją berneńską), a wszystkie materiały chronione prawem autorskim pozostaną w domenie publicznej przez określoną liczbę lat, w zależności od kraju. 1. Czy kod źródłowy chroniony prawem autorskim, zamknięty lub otwarty, będzie w domenie publicznej po wygaśnięciu jego praw autorskich? 2. W przypadku zamkniętego źródła, czy mogę poprosić firmę o zamknięty kod źródłowy po jego wygaśnięciu (zakładając, że na podstawie tego, co do tej pory zrozumiałem :-) )? 3. Zakładając, że pytanie 1 jest prawdziwe, jak mogę zapobiec dostaniu się kodu źródłowego do domeny publicznej po wygaśnięciu praw autorskich, jeśli jest to możliwe?


title: Jak najlepiej zarządzać udostępnianiem kodu open source z poufnego kodu badawczego mojej firmy?

text: Moja firma (nazwijmy je Acme Technology) posiada bibliotekę około tysiąca plików źródłowych, które oryginalnie pochodziły z jej grupy badawczej Acme Labs, były inkubowane w grupie programistów przez kilka lat, a ostatnio zostały dostarczone garstce klientów pod nieujawnianie. Acme przygotowuje się do udostępnienia około 75% kodu społeczności open source. Pozostałe 25% zostałoby wydane później, ale na razie albo nie jest gotowe do użytku przez klientów, albo zawiera kod związany z przyszłymi innowacjami, które muszą trzymać z dala od konkurencji. Kod jest obecnie sformatowany za pomocą #ifdefs, które pozwalają tej samej bazie kodu współpracować z platformami przedprodukcyjnymi, które będą dostępne dla badaczy uniwersyteckich i znacznie szerszego grona klientów komercyjnych po przejściu na open source, jednocześnie będąc dostępne do eksperymentowania i prototypowania oraz testowania zgodności z przyszłą platformą. Utrzymanie jednej bazy kodu jest uważane za niezbędne dla ekonomii (i zdrowego rozsądku) mojej grupy, która miałaby trudności z utrzymaniem dwóch kopii równolegle. Pliki w naszej obecnej bazie wyglądają mniej więcej tak: > // Copyright 2012 (C) Acme Technology, All Rights Reserved. > // Bardzo duża, często zróżnicowana i restrykcyjna licencja praw autorskich w języku angielskim i francuskim, > // czasami także osadzona w plikach make i skryptach powłoki z różnymi > // stylami komentarzy. > > > ... Zwykłe nagłówki... > > void initTechnologyLibrary() { > nuiInterface(on); > #ifdef UNDER_RESEARCH > holographicVisualization(on); > #endif > } Chcielibyśmy przekonwertować je na coś takiego: > // GPL Copyright (C) Acme Technology Labs 2012, Niektóre prawa zastrzeżone. > // Acme dziękuje za zainteresowanie swoją technologią, prosimy o kontakt pod adresem xyz@acme.com > // w celu uzyskania pomocy technicznej oraz www.acme.com/emergingTech w celu uzyskania aktualizacji i kanału RSS. > > ... Zwykłe nagłówki... > > void initTechnologyLibrary() { > nuiInterface(on); > } Czy istnieje narzędzie, biblioteka parsowania lub popularny skrypt, który może zastąpić prawa autorskie i usunąć nie tylko #ifdefs, ale także odmiany, takie jak #if defined(UNDER_RESEARCH) itp.? Kod znajduje się obecnie w Git i prawdopodobnie byłby hostowany w miejscu, w którym jest używany Git. Czy istniałby sposób na bezpieczne połączenie repozytoriów, abyśmy mogli skutecznie ponownie zintegrować nasze ulepszenia z wersjami open source? Porady dotyczące innych pułapek są mile widziane.


title: Serwer proxy do przekierowywania DNS podczas opracowywania

text: Używam Genymotion do testowania aplikacji. Aplikacja jest w zasadzie przeglądarką, która łączy się z moją witryną. Nie mam źródła aplikacji. Zajmuję się tworzeniem i testowaniem strony w domenie takiej jak ta: dev.mywebsite.com Aplikacja łączy się z mywebsite.com. Genymotion pozwala mi korzystać z proxy HTTP. Moje pytanie brzmi, czy jest jakieś oprogramowanie dla systemu Windows lub Linux, które działałoby jako proxy i przekierowywałoby wszystkie żądania z mywebsite.com na dev.mywebsite.com?


title: Kiedy funkcja jest wywoływana w JavaScript, czy istnieje łatwy sposób na znalezienie miejsca, w którym funkcja jest zadeklarowana?

text: Byłoby wspaniale, gdyby jakieś IDE oferowało możliwość kliknięcia prawym przyciskiem myszy, gdy funkcja jest wywoływana i ma natychmiastową opcję przeskoku do funkcji, gdy jest ona zdefiniowana. Czy jest to możliwe w JavaScript? Może po prostu byłem nieświadomy - czy istnieje nazwa dla tej techniki?


title: Jak zaimplementować DDD w aplikacji rozproszonej z NHibernate?

text: Mam witrynę sieci Web ASP.NET MVC działającą w ten sposób: (w kontrolerze) var user = _applicationService.GetUserById(1); user.ChangeEmail("mynemail@somewhere.com"); user.ChangeAddress("moja nowa ulica", "21"); (W HttpModule) void EndRequest(){ if (HttpContext.Error is null){ _sessionFactory.GetCurrentSession.Transaction.Commit(); } Jest to możliwe, ponieważ fabryka sesji jest wbudowana w start aplikacji serwisu WWW. Możliwe jest wywołanie wielu metod domeny i jednokrotne wywołanie zatwierdzenia na końcu żądania. Ale w aplikacji rozproszonej nie można bezpośrednio używać obiektów domeny, zamiast tego usługa WCF musi otrzymać obiekt DTO. Teraz moje pytanie brzmi: jak zaprojektować metody `ChangeEmail` i `ChangeAddress` dla scenariusza rozproszonego? Każda z nich musi być odrębną operacją w serwisie WWW? Jeśli tak, to w przypadku zmiany adresu e-mail użytkownika ORAZ jego adresu konieczne jest dwukrotne zadzwonienie do serwisu. Lub zamiast tego muszę modelować usługę sieciową w następujący sposób: var userDTO = _wcfService.GetUserDTOById(1); userDTO.Email = "moja nowa poczta@somewhere.com"; userDTO.Street = "Moja nowa ulica"; userDTO.StreetNumber = "21"; _wcfService.PersistChanges(userDTO)


title: O czym powinienem pomyśleć przy przejściu z Pythona na Javę?

text: > **Możliwe duplikowanie:** > Nauka programowania przez programistów Java w języku Python: jakich koncepcji potrzebuję, aby się nad tym zastanowić? Byłem programistą Java na początku 2000 roku, przeszedłem na Pythona w 2008 roku, a teraz znowu pracuję w Javie. Jak Java zmieniła się od początku XXI wieku? Jakie są główne aktualizacje oprócz leków generycznych? Czy jest coś specjalnego, o czym twoim zdaniem powinienem pamiętać, wracając do środowiska Java? Kiedyś pracowałem z EJB 1.0, nie pracowałem z EJB 2.0, a teraz mamy JPA. Czuję się swobodnie programując w Javie, a moja nowa praca w Javie jest znacznie lepsza niż moja praca w Pythonie, chociaż Python jest moim ulubionym językiem, narzędzia i inne rzeczy związane z moją pracą w Javie sprawiają, że jest znacznie lepsza. Kiedy szukałem ofert pracy, stwierdziłem, że zapotrzebowanie na programistę Java było znacznie większe niż zapotrzebowanie na programistów Pythona - czy masz podobne doświadczenie?


title: Kiedy przestać pisać historyjki użytkowników i zacząć kodować?

text: Kiedy odkrywasz historie do pierwszego sprintu, skąd wiesz, kiedy przestać pisać i ruszyć do przodu? Zapytałem kilka osób, które znam, i zasadniczo odpowiedź, którą otrzymałem, jest taka, że zależy to od kontekstu, w którym istnieje projekt i jak ograniczony czasowo jest cały projekt. Czy istnieje standardowy sposób, aby wiedzieć, kiedy przestać pisać historyjki użytkownika, a jeśli tak, to jaka jest tego podstawa i jak ma to zastosowanie do przyszłych sprintów?


title: Jak sprawić, by testy jednostkowe działały podczas refaktoryzacji?

text: W innym pytaniu ujawniono, że jednym z problemów związanych z TDD jest utrzymanie synchronizacji pakietu testowego z bazą kodu podczas i po refaktoryzacji. Teraz jestem wielkim fanem refaktoryzacji. Nie zamierzam się poddać, żeby robić TDD. Ale doświadczyłem też problemów z testami pisanymi w taki sposób, że drobna refaktoryzacja prowadzi do wielu niepowodzeń testów. Jak uniknąć łamania testów podczas refaktoryzacji? * Czy piszesz testy „lepiej”? Jeśli tak, czego powinieneś szukać? * Czy unikasz niektórych rodzajów refaktoryzacji? * Czy istnieją narzędzia do refaktoryzacji testów? **Edytuj:** Napisałem nowe pytanie z pytaniem, o co mi chodziło (ale zachowałem to jako interesujący wariant).


title: Czym jest piękny kod?

text: Często czytam, że programiści muszą pisać piękny kod, ale dla początkującego, jakim jestem, pozostaje niejasne, czym jest piękny kod i jak go rozpoznać? Wynikające z tego pytanie brzmi: **Jak pisać piękny kod i jakie są praktyczne nawyki, aby poprawić jakość kodu?** , na czym powinienem się zatroszczyć, aby kod, który piszę, był piękny (i czego powinienem się nauczyć).


title: Czy buforowanie połączeń działa poprawnie, aby wykonać 60 zapytań DB w celu załadowania strony?

text: Używamy Linq2Sql w aplikacji ASP.NET. Niestety szybkie ładowanie w Linq2Sql nie jest tak wydajne, jak w Entity Framework, więc wiele danych musi być ładowanych z opóźnieniem w razie potrzeby. Biorąc pod uwagę łączenie połączeń, czy strona internetowa może wykonać 60 zapytań w celu załadowania strony? Wykonywanie jednego dużego zapytania prawdopodobnie nie będzie dużo lepsze, ponieważ te 60 zapytań będzie wszystkimi połączeniami z puli połączeń i nie otworzy za każdym razem nowego połączenia (co zdaję sobie sprawę, że jest powolne). jakieś pomysły?


title: Jak dokumentować zasady biznesowe

text: Zastanawiam się, jaka byłaby formalna i najczęściej stosowana metoda dokumentowania reguł biznesowych? Również w jaki sposób dokumentujesz specyfikacje interfejsu użytkownika artefaktów programistycznych (np. Dokumentowanie pól formularza i zachowanie przycisków w formularzu, tekst informacyjny itp.)


title: Utraciłem kontakt ze znacznikami, przeniosłem się do nowych zasobów lub odświeżyłem stare?

text: Od wielu miesięcy nie dotykałem XHTML/CSS. Nie jestem tak wydajny, jak kiedyś. Tworzenie bardziej skomplikowanych rzeczy zajmuje mi ostatnio dużo czasu. Co powinienem zrobić, aby odświeżyć swoje umiejętności? Po prostu przećwicz kilka samouczków? Przejrzeć starą dokumentację przed przejściem do HTML5 i CSS3?