title: Jaki jest zakres scenariusza Bdd, szczególnie przy określaniu zmian w istniejącej aplikacji?

text: Współpracujemy z BDD od jakiegoś czasu i jeden problem, który ciągle się pojawia, jest związany z zakresem naszych scenariuszy. Zwłaszcza jeśli chodzi o wprowadzanie zmian w istniejącej funkcjonalności. Jako programista postrzegam scenariusze jako zbliżone do specyfikacji, tj. to jest zmiana, która jest wymagana. Jednak często wydają się zbaczać w stronę testów regresyjnych lub akceptacyjnych. Tak więc scenariusz 2 nie wymaga żadnych zmian w kodzie, ale może wskazywać funkcję, która również wymaga testowania po zmianie wprowadzonej w scenariuszu 1 (testowanie regresji). Lub Scenariusz 2 może zapewnić alternatywny test do tej samej funkcji co scenariusz 1 (testy akceptacyjne). Na pierwszy rzut oka nie wydaje się to nierozsądne, jednak znacznie zwiększa liczbę scenariuszy, co sprawia, że ich pisanie jest bardziej czasochłonne, a deweloperom trudniej jest zobaczyć drewno na drzewa. Jaki powinien być zakres scenariuszy przy wprowadzaniu zmiany w istniejącej funkcjonalności? Czy możemy mieć scenariusz, który określa zmianę w kategoriach ogólnych, zamiast oddzielnego scenariusza dla każdej powiązanej funkcji?


title: Gdzie dodać plik licencyjny?

text: Napisałem aplikację w Pythonie używając Tkintera i chcę dystrybuować na licencji WTFPL. Ale nie rozumiem, gdzie dodać plik copying.txt, który należy dodać w dystrybuowanym folderze. **Proszę o wyjaśnienie.


title: Certyfikaty Microsoft

text: Przeglądając oferty pracy zauważyłem, że niektórzy pracodawcy wymieniają certyfikaty MCSD lub MCAD. Czy te certyfikaty są odpowiednie dla programistów internetowych? Który utwór wybrać?. Zauważyłem też, patrząc na MCSD, że większość certyfikatów jest „wycofana”. Więc jak mają zdać egzamin, który już nie jest oferowany? Dziękuję


title: Czy licencjat z czegoś innego niż informatyka zaszkodzi karierze w tworzeniu oprogramowania?

text: Mam licencjat z geologii. Kiedy byłem już w połowie moich studiów licencjackich, odkryłem, gdzie są moje prawdziwe talenty. Czy mój podstawowy stopień będzie dla mnie problemem w postępie w dziedzinie oprogramowania (czuję, że wiele wiodących firm rozważa stopień podstawowy)? Co byś polecił, aby postawić mnie na równie kompetentnej pozycji przeciwko osobie z silnym licencjatem z informatyki. Z góry dziękuję.


title: Dlaczego języki programowania umożliwiają cieniowanie/ukrywanie zmiennych i funkcji?

text: Wiele z najpopularniejszych języków programowania (takich jak C++, Java, Python itp.) ma koncepcję **ukrywania** / **ukrywania** zmiennych lub funkcji. Kiedy spotkałem się z ukrywaniem lub cieniowaniem, były one przyczyną trudnych do znalezienia błędów i nigdy nie widziałem przypadku, w którym uznałbym za konieczne użycie tych funkcji języków. Wydaje mi się, że lepiej byłoby zabronić ukrywania się i zacieniania. Czy ktoś wie o dobrym wykorzystaniu tych pojęć? **Aktualizacja:** Nie odnoszę się do enkapsulacji członków klasy (członków prywatnych/chronionych).


title: Niskie sprzężenie: zasada pojedynczej odpowiedzialności a spójność

text: Przeczytałem kilka artykułów na temat _SRP_ i _spójności_ i wydają się one ze sobą sprzeczne, jeśli chodzi o _niskie sprzężenie_. Artykuły na temat _spójności_ argumentują, że umieszczenie blisko powiązanych obowiązków w klasie `Wysoce_spójna_klasa` zmniejsza sprzężenie, podczas gdy artykuły na temat _SRP_ twierdzą, że zmniejszymy sprzężenie, usuwając te ściśle powiązane obowiązki z klasy `Wysoce_spójna_klasa` na osobne klasy (tak, że każda klasa ma tylko jedną odpowiedzialność/powód zmiany). Czy te dwa twierdzenia nie są ze sobą sprzeczne? Mianowicie BTW - zdaję sobie sprawę, że klasa zgodna z zasadą SRP jest również uważana za klasę wysoce spójną, ale w tym poście termin _wysoce spójny_ odnosi się do klasy, która ma kilka ściśle powiązanych obowiązków, dziękuję


title: Czy ktoś zna algorytm, który pozwala na figurę taką jak ta?

text: Czy ktoś wie, jak stworzyć algorytm, który będzie w stanie wykonać figurę tak jak na obrazku, gdy otrzyma zestaw określonych punktów (tablica 3D) ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/ 9P1t0.jpg)


title: Przechowywanie znaku EOF (End of File) w typie char

text: Przeczytałem w książce Dennisa Ritchiego _The C Programming Language_, że `int` musi być użyty dla zmiennej przechowującej EOF - aby była wystarczająco duża, aby mogła przechowywać wartość EOF - nie `char`. Ale poniższy kod działa dobrze: #include<stdio.h> main() { char c; c=getchar(); while(c!=EOF) { putchar(c); c=getchar(); } } Gdy nie ma więcej danych wejściowych, `getchar` zwraca EOF. A w powyższym programie zmienna `c` o typie char jest w stanie go z powodzeniem przechowywać. Dlaczego to działa? Zgodnie z wyjaśnieniem w powyższej książce kod nie powinien działać.


title: Podmioty w nieprawidłowym stanie

text: Zastanawiam się nad rozwijaniem moich bytów, aby nie mogły być w niesprawnym stanie. W szczególności zaczynam od mojej jednostki Klienta. Miałyby to pola takie jak: * Tytuł (enum) * Imię (ciąg) * Nazwisko (ciąg) * Adres (obiekt wartości z kolejnymi 6 polami) * MainTelephone (ciąg) * AlternateTelephone (ciąg) * EmailAddress (ciąg) Dodałem metody takie jak ChangeOfAddress() ułatwiające zmianę adresu, które zapewnią wprowadzenie prawidłowego adresu jako zamiennika. W interfejsie użytkownika większość pól (oprócz AlternateTelephone i EmailAddress) uważam za „wymagane”, co zachęca użytkowników do wypełniania pól, takich jak Tytuł, aby ułatwić w przyszłości adresowanie wiadomości e-mail. W przypadku metod takich jak ChangeOfAddress() koncepcja „nieprawidłowego stanu” jest łatwa, ponieważ mogę zastosować walidację do nowego obiektu wartości adresu, ale w przypadku konstrukcji nowego obiektu Customer nie jestem tak pewien. Myślę, że moje pytanie brzmi, czy absolutne minimum do budowy encji Customer powinno obejmować wszystkie pola, które uważam za „wymagane” z perspektywy interfejsu użytkownika? Nie wyobrażam sobie, jak stworzenie Customer z samym tylko FirstName i LastName (bez danych kontaktowych) miałoby sens w sensie biznesowym, w którym zamierzam użyć obiektu Customer. Chociaż w pewnym sensie FirstName i LastName są dobrymi punktami wyjścia dla minimalny opis Klienta i myślę, że Klient nie byłby „nieprawidłowy”, po prostu nie miałby wystarczającej ilości informacji, aby były przydatne dla moich potrzeb biznesowych (czyli bym mógł się z nim skontaktować). Mam nadzieję, że to ma sens, chciałbym usłyszeć jakieś opinie, ponieważ wciąż się uczę.


title: Pierwsze z Dziesięciu Przykazań dla Programistów C++ autorstwa Steve'a Oualline'a zostało poprawnie przepisane?

text: Nie mam książki „Praktyczne programowanie C++” Steve'a Oualline'a, ale czytałem jego Dziesięć Przykazań dla programistów C++ na http://code.rkevin.com/2010/07/the-ten-commandments-for-c-programmers / i zastanawiałem się, czy pierwszy został poprawnie przepisany? Dla porównania, transkrypcja brzmi: „1. Nie powinieneś polegać na domyślnych metodach kompilatora przy konstruowaniu, niszczeniu, konstruowaniu kopii lub przypisywaniu do jakiejkolwiek innej niż najprostszej klasy. Powinieneś zapomnieć o tych „wielkich czterech” metodach dla każdej nietrywialnej klasy. " Wydaje się, że opowiada się za ręcznym definiowaniem konstrukcji kopii i przydziału kopii. Czy to jest prawidłowa interpretacja jego pierwszego przykazania? Edycja: Chociaż obecnie pozostawiam odpowiedź Adriana jako zaakceptowaną, chciałbym, aby każdy, kto ogląda to pytanie, przeczytał Jerry'ego. Zapytałem konkretnie, czy powyższy tekst jest trafnie przepisany, a nie o jego meritum (co jest chyba ciekawszą dyskusją). Ale Jerry ma kilka dobrych uwag na temat jego zalet (lub ich braku), które są podobne do moich opinii na ten temat. Chciałem tylko upewnić się, że mam cytat tuż przed skonstruowaniem dokładnego argumentu, dlaczego się z nim nie zgadzam.


title: Zaczynając od programowania 3D

text: Będę pracował nad projektem 3D i muszę szybko nauczyć się C++ i opengl. jak słyszałem, jest to najlepsza kombinacja do robienia grafiki. Chciałbym również otrzymać twoją rekomendację dotyczącą tej książki, z którą się natknąłem: Angel E, Interactive Computer Graphics: A top-down podejście z Open GL, wydanie 5, Addison Wesley 2008 co polecasz? Dziękuję!


title: Czy potrzebujemy umowy o zachowaniu poufności (NDA)?

text: Dzisiaj spotkamy się z potencjalnym nowym klientem i zaczęliśmy między sobą dyskutować o potrzebie zawarcia umowy o zachowaniu poufności (NDA) io tym, czy potrzebujemy jej w tym momencie. W tym przypadku nie sądzimy, że będziemy rozmawiać o szczegółach technicznych, ponieważ jest to wstępne spotkanie na temat tego, kim jesteśmy. Czy istnieje jakikolwiek precedens dotyczący tego, kiedy mali ISV powinni nalegać na umowy NDA, a kiedy naleganie może wydawać się przesadne i cenne. Wszystkie pomysły są mile widziane, choć w naszym przypadku interesuje nas prawo brytyjskie.


title: Jakie są korzyści z archiwizacji?

text: Zawsze widzę witryny, które przechowują tylko świeżą zawartość w domu lub podsekcjach, a reszta zawartości jest przechowywana w osobnej sekcji o nazwie „archiwum”. Ostatnio słyszałem również, że bazy danych NoSQL, takie jak MongoDB, są dobre do archiwizacji (co sprawia, że myślę, że ma to związek z wydajnością). Dlaczego więc witryny archiwizują swoją zawartość? Jaka jest przewaga nad prostym paginatorem, dzięki któremu można dotrzeć do wszystkich treści? Czy archiwizacja odbywa się na potrzeby wydajności? Lub SEO? Czy tylko doświadczenie użytkownika?


title: Czy jest jakiś sposób na obejście ograniczeń pola użytkowania w Javie?

text: Obecne ograniczenia dotyczące pola użytkowania zdefiniowane w „Umowie licencyjnej Oracle Binary Code dla produktów platformy Java SE” zabraniają jej używania w systemach wbudowanych. > „Komputery i serwery ogólnego przeznaczenia” oznaczają komputery, w tym > komputery stacjonarne i laptopy lub serwery, używane do ogólnych celów obliczeniowych > funkcje pod kontrolą użytkownika końcowego (takie jak, ale nie wyłącznie, > poczta e-mail, przeglądanie Internetu ogólnego przeznaczenia oraz produktywność pakietu > narzędzia). Korzystanie z Oprogramowania w systemach i rozwiązaniach, które zapewniają > dedykowane funkcje (inne niż wymienione powyżej) lub przeznaczone do użycia w > _wbudowanych_ lub specyficznych dla funkcji aplikacjach... są wyłączone z > tej definicji i _nie są licencjonowane_ na mocy niniejszej Umowy. Czy te ograniczenia dotyczą również OpenJDK i innych możliwych implementacji? Czy jedynym sposobem wykorzystania Javy w takim środowisku jest uzyskanie oddzielnej licencji od Oracle?


title: Komentowany krótki fantazyjny kod a nieskomentowany dłuższy, łatwy do zrozumienia kod — który jest preferowany?

text: Czasami algorytm można napisać na dwa sposoby: * Krótki, fantazyjny sposób; lub * Dłuższy, łatwy do zrozumienia sposób. Na przykład, tutaj jest dłuższy i łatwiejszy sposób kopiowania ciągu znaków `source` do `dest` w C: *dest = *source; while (*źródło != '\0') { źródło++; dest++; *docel = *źródło; } (PRAWDA); A oto krótki, fantazyjny sposób. // Skopiuj źródło ciągu znaków do dest while (*dest++ = *source++); Zawsze słyszałem i czytałem, że należy unikać wymyślnego kodu i zazwyczaj się z tym zgadzam. Ale co, jeśli weźmiemy pod uwagę komentarze? **Załóżmy, że tak jak w powyższych przykładach, mamy niekomentowany, dłuższy i podobno łatwiejszy do zrozumienia kod oraz dobrze zakomentowany, krótki, fantazyjny kod? Czy nadal preferowany jest kod, który nie jest fantazyjny?** **EDYTUJ:** Wielu komentowało nazwy zmiennych, więc zmodyfikowałem przykładowy kod, aby nie czynić tego czynnikiem, gdy preferuję inne. Próbowałem usunąć podwójne przypisanie w pierwszym przykładzie, ale to tylko sprawiło, że kod był mniej czytelny. Być może nie był to najlepszy przykład, ponieważ wielu uważa, że „wymyślny” kod jest bardziej czytelny i zrozumiały niż dłuższy kod. Pomysł polegał na tym, aby mieć jeden dłuższy kod, który byłby znacznie łatwiejszy do zrozumienia niż bardzo krótki, ale skomplikowany kod. **EDIT2:** Oto nowy przykład, który otrzymałem od SO: **Skomentowana fantazyjna wersja:** //bezpośredni wzór na xorowanie wszystkich liczb od 1 do N int Suma = (N & (N % 2 ? 0 : ~0 ) | ( ((N i 2)>>1) ^ (N i 1)) ); **Długa wersja bez komentarzy:** int Suma = 0; for (int i = 1; i < N; ++i) { Suma ^= i; //lub Suma = Suma ^ i; }


title: Licencja zgodna z AGPL

text: Używam biblioteki java na licencji AGPL3. Jednak chciałbym licencjonować swoją własną pracę jako BSD, tak aby mój kod mógł być następnie zintegrowany z zastrzeżonymi projektami, jeśli ktoś obetnie bibliotekę. Czy będę mógł to zrobić? Do tej pory nie mogłem znaleźć jasnej odpowiedzi na mój problem w sieci lub w tekście licencji (nie prawnik). Podwójne licencjonowanie wydaje się kłopotliwe i brzydkie. EDYCJA: Co się stanie, jeśli użyję innych bibliotek, które są licencjonowane pod BSD lub cokolwiek innego?


title: Nad jakim projektem pracowałeś będąc początkującym C++?

text: Potrzebuję pomysłów na projekty, które pomogą mi poprawić moje umiejętności. Oto wymagania dla projektu 1. Musi być w win32 2. Potrzebuję czegoś trudniejszego niż zrobienie kalkulatora


title: Proces oprogramowania małej firmy

text: Zastanawiam się, jak powinny przebiegać testy w małych zespołach (lub zespołach start-upów). Mówię o 5-10 programistach, którzy są przypisani do wielu zadań programistycznych. Z mojego doświadczenia wynika, że w procesie tworzenia oprogramowania jest niewiele lub nie ma żadnych testów, ale słyszę również, że małe zespoły **mogą** przejść przez początkowy poziom dojrzałości procesu tworzenia oprogramowania. Jak przebiega kontrola jakości i testowanie podczas tworzenia w dojrzałym, ale małym zespole? (proszę, jeśli możesz, opisz cały proces tworzenia oprogramowania, w tym kto powinien co robić) EDIT (więcej szczegółów): Szczególnie interesuje mnie zespół rozwijający back-end o intensywnym przetwarzaniu rozproszonym ze stroną internetową, ponieważ jest to API. Te dwie części (back-end, front-end) są tworzone przez dwie różne grupy po 3. Chcę zrozumieć **kto co testuje i kiedy**. Jeśli piszę moduł i są to testy jednostkowe, to czy piszę testy integracyjne podczas kończenia kodu? Czy powinieneś przydzielić programistę do tak małej grupy, aby skupił się na testowaniu?


title: Ocena algorytmu: Czytelność vs. Zwartość

text: Rozważ następujące pytanie egzaminacyjne / wywiadowe: * * * Zaimplementuj funkcję strcpy() w C: `void strcpy(char *destination, char *source);` _Funkcja`strcpy` kopiuje ciąg znaków C wskazywany przez `source` do tablica wskazywana przez `destination`, w tym kończący znak null. Załóżmy, że rozmiar tablicy wskazywanej przez `destination` jest wystarczająco długi, aby zawierać ten sam łańcuch C co `source` i nie nakłada się w pamięci na `source`._ * * * Powiedz, że byłeś ankieterem \ egzaminatorem, jak czy oceniłbyś następujące odpowiedzi na to pytanie? 1) void strcpy(char *destination, char *source) { while (*source != '\0') { *destination = *source; źródło++; miejsce docelowe++; } *cel = *źródło; } 2) void strcpy(char *destination, char *source) { while (*(destination++) = *(source++)) ; } Pierwsza implementacja jest prosta - jest czytelna i przyjazna dla programistów. Druga implementacja jest krótsza (jedna linia kodu), ale mniej przyjazna programistom; nie jest tak łatwo zrozumieć sposób działania tego kodu, a jeśli nie znasz priorytetów w tym kodzie, to jest to problem. Zastanawiam się, czy pierwsza odpowiedź w oczach ankietera/egzaminatora pokazałaby większą złożoność i bardziej zaawansowane myślenie, mimo że oba algorytmy zachowują się tak samo i chociaż czytelność kodu jest uważana za ważniejszą niż zwartość kodu. Wydaje mi się, że skoro zrobienie tak zwartego algorytmu jest trudniejsze do zaimplementowania, to jako odpowiedź na egzaminie pokaże wyższy poziom myślenia. Możliwe jest jednak, że ankieter \ egzaminator uzna drugą odpowiedź za niewłaściwą, ponieważ jest nieczytelna. Chciałbym również wspomnieć, że nie jest to specyficzne dla tego przykładu, ale ogólne dla czytelności kodu vs. zwartość przy implementacji algorytmu, szczególnie na egzaminach \ rozmowach kwalifikacyjnych.


title: Co to znaczy, że algorytm sortujący jest „stabilny”?

text: Czytając o różnych algorytmach sortowania, zauważyłem, że niektóre są „stabilne”, a inne nie. Co to oznacza i jakie kompromisy są na tej podstawie związane z wyborem algorytmu?


title: Jak to się dzieje, że wciąż jest tyle pracy programistycznej?

text: Zastanawiam się, dlaczego zadania programistyczne jeszcze nie „wyschły” z powodu ewolucji oprogramowania. Na przykład sam jestem programistą, co oznacza, że dbam o oprogramowanie (to znaczy nie jestem typem faceta, który potrzebuje komputera głównie do przeglądania Internetu), a mimo to nie miałbym nic przeciwko, gdybym nigdy otrzymuj więcej aktualizacji na moim komputerze z Ubuntu. Uważam, że zapewnia wszystko, czego potrzebuję, i chociaż aktualizacje zapewniają różne poprawki / ulepszenia, nie miałbym nic przeciwko używaniu go w obecnym stanie przez resztę mojego życia. Przez dwa lata użytkowania Ubuntu nigdy nie natknąłem się na poważny błąd/problem. Innym przykładem jest Windows. Prawie połowa jego użytkowników nadal korzysta z systemu Windows XP, który jest już praktycznie stary, ale uważa, że spełnia on wszystkie ich potrzeby (z czym się z nimi zgadzam). Mógłbym podać o wiele więcej przykładów, ale teraz rozumiesz mój punkt widzenia i moje pytanie. Podczas gdy cały czas pojawiają się nowe „trendy” (jak nowy mobilny system operacyjny), który działa na nowych platformach i wymaga trochę świeżej pracy programistycznej, nadal większość wysiłku związanego z oprogramowaniem jest przeznaczana na to, co uważam za „zakończone projekty” lub na przynajmniej stan projektu, który wystarczy do uznania za ukończony. Czy masz wyjaśnienie?


title: Czy rozsądne jest oczekiwanie, że starszy programista wie, jakie są wzorce projektowe OOP?

text: Przygotowuję pytania do rozmów kwalifikacyjnych na stanowisko rozwojowe. Zadanie obejmowało projektowanie zorientowane obiektowo, a istniejące oprogramowanie wykorzystuje wzorce projektowe, więc chciałbym poprosić kandydatów o wyjaśnienie kilku wzorców projektowych, które znają, z których korzystali, w jaki sposób z nich korzystali, dlaczego używał ich i tak dalej. Jednak w poprzednich wywiadach, kiedy pytałem starszych programistów z co najmniej 5-10-letnim doświadczeniem o wzorce projektowe, prawie nikt o nich nie słyszał. Myślę, że dwóch na dwudziestu programistów mogłoby wymienić jeden wzorzec projektowy (odpowiednio Singleton i MVC). Więc moje pytanie brzmi: czy zadawanie tych pytań ma sens? A może jest to tak mało znany temat, że nie można oczekiwać, że nowi pracownicy już je znają? Czy starszy programista powinien mieć wcześniejsze doświadczenie z wzorcami projektowymi, czy też powiedziałbyś, że wzorce projektowe są tak prostym tematem, że każdy porządny programista może je poznać podczas szkolenia? Jeśli tak, jakie pytania zadałbyś zamiast tego, aby ocenić ich zdolności projektowe? **Dodaj** Po przeczytaniu dotychczasowych odpowiedzi, powinienem podać kilka wyjaśnień: * Zadanie jest dla programisty .NET z doświadczeniem w OOP/OOD * Istniejący kod używa nazw klas, takich jak `IParameterGraphVisitor` i `IStorageFactory` w wiele miejsc * Jak zapytać ludzi o ich przeszłe doświadczenia z projektami OO, które stworzyli, jeśli nie mają słownictwa, aby wyjaśnić swoje projekty? To właśnie chcę zrobić i wszystko, co mogę wymyślić, to „proszę, narysuj hierarchię projektu/obiektu ostatniego projektu na tablicy”.


title: aplikacja internetowa dla wielu klientów, czy powinienem użyć niestandardowych kontrolek użytkownika lub wspólnej kontroli użytkownika?

text: Załóżmy, że moja firma zamierza zbudować skomplikowany system edukacji w formie internetowej asp.net. Jednym z modułów jest rejestracja internetowa. Aby była elastyczna, decydujemy się na użycie kontroli użytkownika (ascx) z mechanizmem reguł (przepływ pracy) regulującym całą logikę biznesową, która się za nimi kryje. Dlatego w przyszłości, dla różnych klientów, możemy po prostu skonfigurować podstawowe istniejące reguły lub dodać nowe reguły. (Reguły przechowywane w db lub XML na klienta). Teraz pytanie brzmi jak poradzić sobie z kontrolkami użytkownika (ascx)? Moja opinia jest dla różnych klientów, którzy budują inną kontrolę użytkownika od podstaw. inny głos jest jak ponowne wykorzystanie istniejących elementów sterujących użytkownika.


title: Czy języki funkcjonalne są lepsze w rekurencji?

text: TL; DR : Czy języki funkcjonalne lepiej radzą sobie z rekurencją niż języki niefunkcjonalne? Obecnie czytam Code Complete 2. W pewnym momencie książki autor ostrzega nas przed rekurencją. Twierdzi, że należy tego unikać, gdy tylko jest to możliwe, a funkcje wykorzystujące rekurencję są generalnie mniej efektywne niż rozwiązania wykorzystujące pętle. Jako przykład autor napisał funkcję Javy używającą rekurencji do obliczenia silni takiej liczby (może to nie być dokładnie to samo, ponieważ w tej chwili nie mam przy sobie książki): public int factorial(int x) { if (x <= 0) zwróć 1; w przeciwnym razie zwróć x * silnia(x - 1); } Jest to przedstawiane jako złe rozwiązanie. Jednak w językach funkcjonalnych preferowanym sposobem działania jest często rekurencja. Na przykład tutaj mamy funkcję silni w Haskell używającą rekurencji: silnia :: Integer -> Integer silnia 0 = 1 silnia n = n * silnia (n - 1) I jest powszechnie akceptowana jako dobre rozwiązanie. Jak widziałem, Haskell bardzo często używa rekurencji i nie widziałem nigdzie, na co by się ona nie podobała. Więc moje pytanie zasadniczo brzmi: * **Czy języki funkcjonalne radzą sobie z rekurencją lepiej niż niefunkcjonalne?** EDIT: Zdaję sobie sprawę, że przykłady, których użyłem, nie są najlepsze do zilustrowania mojego pytania. Chciałem tylko zaznaczyć, że Haskell (i ogólnie języki funkcjonalne) używają rekurencji znacznie częściej niż języki niefunkcjonalne.


title: Czy powinieneś zaoferować zapamiętanie użytkownika podczas rejestracji?

text: Jaki jest typowy wzorzec zapamiętywania użytkowników na stronie internetowej? Czy oferujesz zapamiętanie użytkownika podczas logowania i rejestracji, czy tylko podczas logowania, czy też w zależności od nastroju :) ? Nie interesują Cię szczegóły wdrożenia, tylko zalecana praktyka?


title: Strategie liczenia obiektów podrzędnych

text: Jaki jest wydajny, OOP sposób liczenia rekordów podrzędnych obiektu? W moim bieżącym projekcie _District_ może zawierać zero lub więcej rekordów _School_. Obiekt _Districts_ działa jak zbiór District i może wykonać jedno zapytanie, aby pobrać dane z kilku _District_ za jednym razem, zamiast zapytania każdego District (Active Record) o własne dane. District->schools() zapewnia dostęp do szkół dla dzieci. Na tej stronie chcę wymienić wszystkie okręgi i liczbę ich szkół podrzędnych. Staje się to bardzo powolne w miarę wzrostu liczby okręgów, ponieważ każdy okręg musi ponownie odpytywać tabelę szkół. Ponadto używany przez nas sterownik bazy danych nie podaje liczby wierszy dla zestawu rekordów, więc byłoby to inne zapytanie. Kilka rzeczy, które brałem pod uwagę: * Opcjonalny obiekt dostępny za pośrednictwem lokalizatora usług, który może dostarczyć liczby. * Przechowywanie liczby dzieci w rekordzie rodzica. Tak więc moja obecna metoda liczenia rekordów dzieci jest dość ciężka. W jaki sposób mogę zmniejszyć obciążenie?


title: W scrum, jak oszacować pozycję zaległości, która jest głównie badaniami?

text: Kilka sprintów temu przydzielono mi zadanie, które było przede wszystkim badaniem. Musiałem wymyślić, jak sprawić, by nasz produkt współpracował z bardzo złożoną czarną skrzynką, której nie opracowaliśmy. Nie mogłem wymyślić sposobu oszacowania tej pracy. Nawet gdybym puścił piłkę i znał najpilniejszy problem, z którym się zmierzyłem, nie mogłem pojąć, ile innych problemów będę musiał później rozwiązać. Nigdy nie mogłem stwierdzić, czy już prawie skończyłem, czy daleko mi do tego. Jak mam oszacować taką pozycję zaległości? * * * Chcę omówić charakter tego zadania. Wiedziałem, jakie telefony muszę wykonać, aby współpracować z czarną skrzynką. To była łatwa część. Ale API przyjęło jako parametr bardzo, bardzo złożony obiekt. Wywołanie API spowodowałoby błąd i nie było łatwo dowiedzieć się, co ten błąd próbuje mi powiedzieć. Czarna skrzynka nie powiedziałaby mi wszystkich problemów związanych z moją prośbą, po prostu podałaby pierwszy znaleziony problem. To sprawiło, że bardzo trudno było określić, ile pracy mi zostało.


title: Struktura bazy danych dla różnych pozycji

text: Tworzę bazę danych sqlite dla aplikacji na Androida, która będzie zawierać listę elementów, z których każdy ma inną charakterystykę. Niektóre cechy są dostępne dla wszystkich obiektów, inne dotyczą tylko podzbioru obiektów. Na przykład wszystkie moje przedmioty mają nazwę, opis, obraz. Niektóre elementy będą miały również datę ważności, inne nie. Niektóre będą miały rozmiar, inne nie. Itd... Jak powinienem zbudować moją bazę danych, ponieważ nie wiem, ile cech można dodać w przyszłości, a wiedząc, że powinienem być w stanie filtrować listę według dowolnej cechy?


title: Prawidłowe używanie git w małym zespole

text: Jaki byłby najłatwiejszy sposób na poprawne użycie git w małym zespole około 5 programistów, z jednym serwerem, na którym działa aplikacja na żywo?


title: Zrezygnowałem z pracy, ale w okresie wypowiedzenia cofnąłem rezygnację... Czy popełniłem błąd?

text: Zainspirowany przeczytaniem artykułu z Lifehackera, chciałbym wyjaśnić, przez co przeszedłem kilka tygodni temu. Obecnie pracuję dla MNC w Indiach przez ostatnie 4,5 roku i 14 zeszłego miesiąca zdecydowałem się z tego zrezygnować ze względu na różne opcje podane poniżej: 1. Wiele obowiązków na mojej głowie i wraz z tym normalnym programowaniem za mniejsze wynagrodzenie . 2. Brak możliwości pójścia do pracy na miejscu z zespołem projektowym na miejscu. 3. Pracował prawie 3 z 4 weekendów w ciągu miesiąca i był zbyt duży nacisk związany z pracą z powodu doraźnych zmian w wymaganiach. 4. Prawie wypalony i brak równowagi między życiem zawodowym i prywatnym. 5. Brak wakacji. Wynagrodzenie na koniec miesiąca było moim głównym zmartwieniem związanym z decyzją o odejściu, ponieważ uważam, że za ilość pracy, którą wykonuję i rodzaj obowiązków, jakie przyjmuję, powinnam otrzymywać wynagrodzenie na poziomie rynkowym. Ale tak wielki MNC jak moja firma, wycena i podwyżki zdarzają się tylko raz w roku. Z tych wszystkich powyższych powodów zrezygnowałem 2 tygodnie wstecz. Ale ponieważ byłem krytyczny dla projektu, kierownictwo próbowało mnie zatrzymać, zgadzając się na rozpatrzenie mojej wizy H1B, na co zgodziłem się bez dwóch zdań, ponieważ mój główny problem (pieniądze) został załatwiony. Ale reszta, wszystkie moje obawy nadal się utrzymują, a kierownictwo wywiera na wszystkich presję dającą się osiągnąć, wprowadzając trudne terminy i zmieniając wymagania ad hoc. Teraz mam ochotę znowu rzucić... Jestem zdezorientowany. Wszelkie porady tutaj proszę...


title: Zespoły deweloperskie — czy jedno złe jabłko może zepsuć całą grupę?

text: > ...Jedną z najważniejszych cech, jakie powinien posiadać nowy pracownik, jest > zgodność z duchem ludzi, którzy już tam pracują. > {...} > Jestem przekonany, że uzyskanie wglądu w prawdziwą osobowość programisty > jest tak samo ważne jak sprawdzenie kompetencji zawodowych, ponieważ **jedno > złe dopasowanie może zniszczyć cały zespół.** od Hiring Developers - You' ponownie Robi to źle Czy to prawda? A jeśli tak, to czy dotyczy to również menedżerów?


title: Szyfrowanie paranoidalne

text: Nazwij mnie paranoikiem, ale naprawdę lubię trzymać swoje rzeczy w tajemnicy, ale łatwo dostępne w chmurze. Więc zadając to pytanie. 1. Jak bezpieczne i niezawodne jest oprogramowanie szyfrujące (np. Truecrypt)? Powodem, dla którego pytam, jest to, co szyfruję dzisiaj moimi danymi za pomocą tego oprogramowania i po kilku latach oprogramowanie zniknęło! Co dzieje się z moimi zaszyfrowanymi danymi? 2. Czy szyfrowanie AES przy użyciu 7-zip jest równie bezpieczne? Czy zapewni ten sam lub równoważny poziom szyfrowania co truecrypt lub inne oprogramowanie szyfrujące? (Zgadzam się, że truecrypt będzie lepszy ze względu na szyfrowanie kontenera, które zapewnia.) A co się stanie, jeśli 7-zip wyłączy się po 5 latach? Przepraszam, jeśli brzmię jak paranoik, ale wracam do mojego pierwotnego pytania... Czy istnieje szyfrowanie niezależne od aplikacji/oprogramowania? To znaczy, czy mogę szyfrować za pomocą jednego oprogramowania i odszyfrowywać za pomocą innego, aby nie być zależnym tylko od jednego dostawcy? Czy chcę, aby moje szyfrowanie zależało WYŁĄCZNIE od hasła, a NIE od programu/oprogramowania szyfrującego? Następne pytanie, czy mogę napisać własny program, który szyfruje AES/silniejsze szyfrowanie, gdy podam mu hasło, tak abym nie musiał polegać na oprogramowaniu stron trzecich do szyfrowania? Jeśli tak, który język obsługuje to samo? Czy ktoś może mi powiedzieć, gdzie szukać w przypadku napisania własnego programu szyfrującego?


title: Czy jest jakiś dobry powód, dla którego linie zawierające tylko białe znaki powinny być obcinane?

text: Zazwyczaj, gdy naciśniesz Enter w inteligentnym edytorze, kopiuje on wcięcie ostatniego wiersza, wstawiając taką samą ilość spacji, więc jeśli ich nie usuniesz, kod wygląda tak: sub sum { my @numbers = @ _; moja suma $ = 0; foreach (@_) { $sum += $_; } zwraca $sumę; } (Tak, przykład jest głupi; ten napis mógłby być napisany w dwóch lub trzech liniach. :)) Szczerze mówiąc, te linie przyprawiają o zawrót głowy, więc staram się je usuwać. (Przyznaję, że takie zachowanie generuje szumy popełniania błędów + niespójność.) Plus, białe znaki to niepotrzebne bajty. Cóż, prawdopodobnie żadna z tych rzeczy nie ma znaczenia, przynajmniej w najbardziej oczywisty sposób. Zastanawiam się więc, czy istnieje lepszy (tj. mniej subiektywny i mniej pedantyczny) powód, dla którego linie powinny być wygaszone (przez `s/^\s+$//`). **Uwaga:** I proszę nie kierować mnie do przewodnika po stylu. Wyobraź sobie, że to ja piszę przewodnik po stylu: czy powinienem odziedziczyć zasadę „usuń dodatkowe spacje”, czy po prostu dzielnie walczyć z intuicją i zostawić w spokoju te spokojne „\t” i „”?. Lub po prostu chcę ulepszyć mój „własny” przewodnik, z którego mogę korzystać tam, gdzie „oficjalny” przewodnik milczy lub go brakuje.


title: Java: jak mogę sprawić, by typ zwracany metody dziedziczonej w podklasie był taki sam jak podklasa?

text: Nie mam doświadczenia w Javie i mam problem z utworzeniem podklasy utworzonej przeze mnie klasy. Utworzona przeze mnie klasa o nazwie `Vector2D` zawiera metody, takie jak `add(Vector2D addend)`, która przyjmuje jako argument obiekt `Vector2D` i zwraca obiekt `Vector2D`. Ta metoda w szczególności ma na celu dodanie dwóch wektorów i zwrócenie sumy. Następnie zacząłem kodować podklasę o nazwie `Position2D`, która zamierzam mieć wszystkie funkcje klasy `Vector2D`, z wyjątkiem dodatkowych funkcji i używania `Vector2D` wewnątrz istniejących klas, czy to jako argument, typ zwracany itp., zastąpiony przez `Position2D`, dzięki czemu funkcja `add(Position2D addend)` dodaje dwa wektory `Position2D` i zwraca sumę jako `Position2D`. Pojawia się problem, że gdy `Position2D` dziedziczy z `Vector2D`, takie funkcje nadal działają w kategoriach obiektów `Vector2D`, wyrzucając błąd, gdy tylko obiekt `Position2D` zostanie przez nie przepuszczony. Odpowiedni kod dla klasy `Vector2D` jest następujący: public class Vector2D{ //Zmienne polowe private double x; //Prywatne podwójne y o współrzędnej x wektora; //Współrzędna y wektora //Konstruktory public Vector2D(){ //Konstruuje pusty wektor. zbiórX(0); zestaw Y(0); } //Metody public void setX(double newX){ //Ta metoda nie stwarza problemów, gdy jest dziedziczona dla podklasy. x = nowyX; } public void setY(double newY){ //Ta metoda też nie jest problematyczna. y = nowy Y; } public Vector2D add(Vector2D addend){ // Dodaje dwa wektory i zwraca sumę. //Ta metoda stwarza jednak problem. Suma Vector2D = nowa Vector2D(); suma.x = x + dodatek.x; suma.y = y + dodatek.y; suma zwrotu; } } Jedyne obejście, jakie mogę obecnie wymyślić, jak mógłby wyglądać kod w `add(Position2D addend)` w `Position2D` to: public Position2D add(Position2D addend){ // Dodaje dwa wektory pozycji i zwraca suma. Suma Pozycja2D = nowa Pozycja2D(); suma.x = x + dodatek.x; suma.y = y + dodatek.y; suma zwrotu; } tj. powtórz metodę z `Vector2D` i zmodyfikuj ją ręcznie. To oczywiście nie jest wydajne i marnuje czas, zwłaszcza gdy to samo trzeba zrobić dla podobnych metod, a tym bardziej, gdy zamierzam stworzyć więcej podklas, np. „Prędkość2D”. Dlatego szukam znacznie czystszego i wydajnego sposobu na zrobienie tego.


title: Czym są Dependency Injection i dlaczego są przydatne?

text: Słyszałem o ninject i muszę zbudować wiele aplikacji, które muszą integrować się z innymi narzędziami. WIĘC zastanawiałem się, co to jest i jak jest używane.


title: Czy są jakieś badania dotyczące wydajności/skuteczności Agile vs Waterfall?

text: Na spotkaniu innego dnia stwierdzono, że agile jest tylko o 60% bardziej efektywne w czasie tworzenia w porównaniu do wodospadu. Nie zamierzam potwierdzać ani odrzucać tego twierdzenia. Ciekawe, czy były jakieś badania porównujące te dwie metodologie. Czy są jakieś badania porównujące te dwie rzeczy?


title: Korzystanie ze zwykłych klas Java w aplikacjach internetowych Java

text: Pracuję nad prostą aplikacją internetową do blogowania przy użyciu Javy i MySQL jako backendu bazy danych. Całą aplikację implementuję używając zwykłego HTML i serwletów. Używam klasy Java ze statycznymi metodami, które są wywoływane z poziomu serwletów do obsługi komunikacji z bazą danych. Czy to dobry projekt? Albo co powinienem zrobić zamiast tego?


title: Praktyki dotyczące modeli domen w JavaScript (z frameworkami)

text: To jest pytanie, z którym od jakiegoś czasu miałem do czynienia i nie szukałem i niczego nie znalazłem: jakie są przyjęte praktyki dotyczące duplikowania modeli domen w JavaScript dla aplikacji internetowej, gdy używam frameworka takiego jak Backbone czy nokaut? Mając aplikację internetową o nietrywialnym rozmiarze z zestawem modeli domen po stronie serwera, czy powinniśmy zduplikować te modele w aplikacji internetowej (patrz przykład na dole)? A może powinniśmy użyć dynamicznej natury do załadowania tych modeli z serwera? Moim zdaniem argumenty za powielaniem modeli polegają na ułatwieniu walidacji pól, upewnieniu się, że pola, które mają być obecne, faktycznie istnieją itp. Moje podejście polega na traktowaniu kodu po stronie klienta jak prawie oddzielnej aplikacji, wykonując trywialne rzeczy sam i polega tylko na serwerze dla danych i złożonych operacji (które wymagają danych, których nie ma po stronie klienta). Myślę, że traktowanie kodu po stronie klienta w ten sposób jest podobne do oddzielenia jednostek z ORM i modeli używanych z widokiem w warstwie interfejsu użytkownika: mogą mieć te same pola i odnoszą się do tej samej koncepcji domeny, ale są różne rzeczy. Z drugiej strony wydaje mi się, że powielanie tych modeli po stronie serwera jest wyraźnym naruszeniem DRY i może prowadzić do różnych wyników po stronie klienta i serwera (gdzie jeden element jest aktualizowany, a drugi nie ). Aby uniknąć tego naruszenia DRY, możemy po prostu użyć dynamiki Javascript, aby uzyskać nazwy pól i dane z serwera, gdy są one potrzebne. **Więc: czy istnieją jakieś przyjęte wytyczne dotyczące tego, kiedy (a kiedy nie) powtarzać się w takich sytuacjach? Czy to czysto subiektywna rzecz, oparta na projekcie i deweloperze?** Przykład Klasa modelu po stronie serwera M { int A DateTime B int C int D = (A*C) double SomeComplexCalculation = ServiceLayer.Call(); } Funkcja modelu po stronie klienta M(){ this.A = ko.observable(); to.B = ko.obserwowalny(); this.C = ko.observable(); this.D = function() { return A() * C(); } this.SomeComplexCalculation = ko.observalbe(); zwróć to; }l M.GetComplexValue = function(){ this.SomeComplexCalculation(Ajax.CallBackToServer()); }; Zdaję sobie sprawę, że to pytanie jest dość podobne do tego, ale myślę, że chodzi bardziej o prawie całkowite uwolnienie aplikacji internetowej od serwera, gdzie to pytanie dotyczy robienia tego tylko w przypadku skomplikowanych obliczeń.


title: Ile pieniędzy generują frameworki takie jak Django i RoR?

text: Twórcy tych frameworków muszą generować jakieś pieniądze, nie? Nie wszyscy są zwykłymi starymi dżentelmenami, którzy w wolnym czasie zajmują się tworzeniem frameworków internetowych na pełny etat z zamiłowania do programowania? Czy same strony generują jakiekolwiek dochody? A może zarabiają na wygłaszaniu przemówień? Pisanie książek? Chciałbym zobaczyć jakieś liczby/statystyki, jeśli je posiadasz.


title: Czy dyplom CS może przynieść korzyści starszemu programiście?

text: Czy jest jakaś korzyść ze zdobycia dyplomu CS w połowie lat czterdziestych _mądrość kariery_? Czy zwiększone prawdopodobieństwo przejścia przez filtr HR byłoby tego warte? To coś, co może sprawiać mi przyjemność, i nie miałbym nic przeciwko utrwaleniu moich podstaw, ale zmniejszyłbym swoją zdolność zarobkową w ciągu lat, które zajęłoby ukończenie studiów, a do czasu skończę, będę miał W mojej karierze zostało może 15 lat. (obecnie nie mam dyplomu ukończenia studiów)


title: Jakie mogą być zalety i wady rozpadu tablic Nd na wskaźniki na poziomie N?

text: Zastanawiałem się nad kilkoma możliwymi rozszerzeniami języka C, na temat których chciałbym poznać opinię innych.1 To dotyczy tablic wielowymiarowych. Wyobraź sobie następującą sytuację w C: void matrix_mul(double **res, double **a, double **b, size_t n, size_t m, size_t r); Nie możesz przekazać `podwójnej maty[4][4]` (na przykład) do tej funkcji. Jeśli zdefiniujesz funkcję jako: void matrix_mul_N_M_R(double res[N][R], double a[N][M], double b[M][R]); Po prostu marnowałbyś doskonale napisany, dokładny algorytm na określonej wielkości macierzy. To, co przyszło mi do głowy (oczywiście pod prysznicem), to rozpad wielowymiarowych tablic na wielopoziomowe wskaźniki. Jest to rozszerzenie do rozpadu tablic 1d na wskaźniki. Semantycznie umożliwiłoby to działanie pierwszego typu funkcji na dowolnej dwuwymiarowej tablicy. Technicznie tak to zostałoby zaimplementowane. Poniższy kod: double a[3][5]; podwójne b[5][4]; podwójne c[3][4]; ... matrix_mul(c, a, b, 3, 5, 4); byłoby równoważne: double a[3][5]; podwójne b[5][4]; podwójne c[3][4]; ... double **__a_decay = {a[0], a[1], a[2]}; /* wygenerowany przez kompilator */ double **__b_decay = {b[0], b[1], b[2], b[3], b[4]}; /* wygenerowany przez kompilator */ double **__c_decay = {c[0], c[1], c[2]}; /* wygenerowany przez kompilator */ matrix_mul(__c_decay, __a_decay, __b_decay, 3, 5, 4); /* pierwsze trzy argumenty zanikły */ Czy zastosowanie takiego rozszerzenia jest bardzo ograniczone? Czy są pułapki? Czy może to prowadzić do niezabezpieczonego kodu, w którym niekorzystanie z tej funkcji nie byłoby możliwe? Gdzie jeszcze taka funkcja mogłaby się przydać? 1 Zwróć uwagę, że sam nie zamierzam tworzyć innego języka, ale chciałbym się upewnić co do zalet i pułapek tej funkcji, zanim spróbuję zasugerować je Komitetowi Standardów C.


title: Jak udokumentować nieograniczone parametry argumentów?

text: W PHP funkcja może przyjmować nieskończoną liczbę argumentów, takich jak /** * Wykonaj abc... * * @od 1.0 * @param mixed $arg1 Opis argumentu * @return string Wyniki */ function abc($arg1 = null ){ $args = func_get_args(); // zrób coś z $args } Jak mam to zilustrować w moim DocBlock?


title: Dać programistom open-source bezpłatną licencję na moje komercyjne oprogramowanie?

text: Tworzę pakiet oprogramowania, który przyda się programistom, inżynierom i naukowcom. Cena katalogowa będzie wynosić około 1000 USD – znacznie przekracza budżet większości programistów open-source, hobbystów i entuzjastów. Rozważam więc dwie rzeczy, pierwsza hojna, druga może trochę chciwa: 1. Oferowanie darmowej licencji poszczególnym programistom open source po potwierdzeniu ich referencji i szczegółów ich projektu. Być może także akademicy. 2. Uzależnienie darmowej licencji od udzielenia mi przez dewelopera komercyjnej licencji na wykorzystanie napisanego przez nich kodu open source we własnych projektach. W przypadku akademickim sprawa jest trudniejsza, być może po prostu zaliczenie, kopia artykułów itp. W jaki sposób (1) i (2) zostałyby odebrane? Czy są tu jakieś przykłady najlepszych praktyk lub dobre precedensy, które mogę naśladować?


title: Inicjalizacja klas C++

text: Jestem programistą Pythona, który widzi dużo kodu C++, ale nie zna języka i wydaje się, że istnieją dwa sposoby na zainicjowanie klasy. Miałem nadzieję, że ktoś może mi powiedzieć różnicę. class Punkt { int x, y; publiczne: int get_x(); int get_y(); Punkt(wew, wewn); } // ok, zostawimy niezaimplementowane metody i konstruktory dla zwięzłości // teraz część, która mnie zastanawia Punkt p(5, 5); // ..lub Punkt p = nowy Punkt(5, 5); Jaka jest różnica między tymi dwoma?


title: Tworzenie stron internetowych — 100% separacja kodu vs elastyczność

text: Jest to prawdopodobnie święty temat, ale mimo to. Czy w idealnym systemie zarządzania treścią swoich marzeń wolałbyś system szablonów, który jest całkowicie oddzielony od Twojego kodu i używa składni deklaratywnej do tworzenia (X)HTML (takich jak `<Twój kod>` -> DOM /XML -> XSLT -> HTML), czy może wolisz wybrać system, który pozwala Twojemu kodowi na gotowanie fragmentów HTML, a następnie uruchamia zestaw szablonów, aby połączyć te elementy w celu uzyskania kompletnej strony? Z góry dziękuję. **EDYTUJ** Żeby było to pewnie nieco jaśniejsze, mam na myśli, że HTML jest deklaratywnym "językiem", podczas gdy większość dynamicznych rzeczy jest wykonywana w językach imperatywnych/funkcjonalnych. Szablony sklejają te dwa elementy, ale sposób, w jaki to robią, nie zawsze jest czysty (jak w czystym rozdzieleniu paradygmatów).


title: CMS vs system homebrew do realizacji pokazu slajdów

text: Istnieje podstawowa strona internetowa (strona główna i 5 podstron) ze statyczną treścią, chcemy dodać coś w rodzaju pokazu slajdów aktualnych ofert z niestandardowymi obrazami, które będą się zmieniać co miesiąc. Chcemy również dołączyć galerię obrazów z efektami takimi jak Lightbox. Osoba, która zamierza dodawać/modyfikować/usuwać obrazy w dwóch nowych modułach, nie chce zajmować się FTP. Zgodnie z Twoim doświadczeniem, czy powinniśmy zainstalować w tym celu CMS (Joomla/Drupal), czy po prostu stworzyć własny podstawowy system zarządzania obrazami, aby przesyłać/wybierać/usuwać obrazy?


title: Jak nazywasz swoje osobiste biblioteki?

text: Nie jestem w stanie nazywać rzeczy. Jedyną nazwą, którą każdy ogólnie wymyśli, jest „pomocnik”. Powiedzmy, że jeśli mam plik nagłówkowy, który zawiera funkcje pomocnicze do manipulowania ścieżkami, zwykle umieszczam go w moim katalogu „helper” i nazywam go „path-helper.hpp” lub coś w tym stylu. Oczywiście to zła konwencja nazewnictwa. :) Chcę mieć spójny schemat nazewnictwa dla mojego folderu (i przestrzeni nazw), którego mogę używać, aby zawsze odnosić się do moich własnych nagłówków i bibliotek, ale mam problem ze znalezieniem nazw, które są łatwe do wpisania lub zapamiętania (takie jak `boost`) ... więc w końcu nazywam niektórych z nich „pomocnikiem” lub „stdext” lub czymkolwiek innym, co nie jest dobrym pomysłem. Jak znaleźć nazwy bibliotek, które są łatwe do zapamiętania i łatwe do wpisania, i które nie są zbyt ogólne (np. „helper”, „std”, „stdext” itp.)? Jakieś sugestie, jak to zrobić?


title: Uruchamianie aplikacji internetowej z bazą danych bez statycznego adresu IP

text: Stworzyłem małą aplikację internetową i chcę ją wdrożyć. Użyłem struts2 i mysql do bazy danych. Problem polega na tym, że nie mam statycznego adresu IP, aby uruchomić aplikację na moim komputerze. Czy ktoś może zasugerować mi usługi hostingowe obsługujące strony java i mysql? Ponieważ jest to projekt, którego nie robię dla pieniędzy, wolałbym darmowe serwery, nawet jeśli pozwalają na użytkowanie przez krótki czas.


title: Co powinna zrobić osoba testująca (zapewniająca jakość) w zespole scrumowym?

text: Pochodząc ze środowiska scrumowego bez zintegrowanego wsparcia testowego i niezależnego personelu QA, jak najlepiej zintegrować testera (osobę QA) z zespołem scrumowym? Co powinni zrobić? Niektóre funkcje testowe to: * Testowanie jednostkowe * Testowanie integracyjne * Testowanie funkcjonalne * Testowanie wydajności * Testowanie akceptacyjne


title: Jaki jest standard nazewnictwa zmiennych i dlaczego?

text: Przechodzę szkolenie dotyczące celu-c. Trener sugeruje ustawienie nazw parametrów pojedynczych znaków. Deweloper .NET we mnie płacze. Czy to naprawdę konwencja? Czemu? Na przykład @interface Square : NSObject { int size; } -(void)setSize: (int)s; Widziałem programistów używających podkreśleń `int _size` do deklarowania zmiennych (myślę, że ludzie nazywają zmienną zadeklarowaną w `@interface` ivar z jakiegoś nieznanego powodu). Osobiście wolę używać nazw opisowych. NP. @interface Square : NSObject { int Rozmiar; } -(void)setSize: (int)rozmiar; C, podobnie jak C#, rozróżnia wielkość liter. Dlaczego więc nie używamy tej samej konwencji co .NET?


title: Czy jest różnica między wielozadaniowością a podziałem czasu?

text: Przeglądając notatki szkolne, mój nauczyciel identyfikuje _wielozadaniowy system operacyjny_ i _system operacyjny z podziałem czasu_ jako dwie różne rzeczy. Naprawdę nie widzę różnicy między tymi dwoma. **WIELOZADANIOWOŚĆ** : Wczytujesz wiele programów do pamięci i wykonujesz je. Wykonujesz inny program, jeśli kwant czasu przydzielony do bieżącego programu wygaśnie LUB jeśli kontynuuje wykonywanie operacji we/wy i opuści procesor LUB jeśli zakończy wykonywanie. **DZIELENIE CZASU**: to samo, znowu. To samo dotyczy _przetwarzania seryjnego_ i _przetwarzania wsadowego_. Chociaż są takie same, myślę, że jedyną różnicą byłby sposób, w jaki informacje sterujące są przekazywane do procesora. Być może, i znowu BYĆ MOŻE, w przetwarzaniu seryjnym musisz zapewnić kartom dziurkowanym wszystkie procesy, podczas gdy w partii, cała partia używa tego samego zestawu informacji kontrolnych. Jak wszystkie zadania drukowania miałyby te same informacje kontrolne.


title: jakiego wzoru użyć - jeśli w ogóle

text: Jestem całkiem nowy w używaniu wzorców i chociaż rozumiem niektóre z nich do pewnego stopnia, trudno mi określić, którego z nich użyć w konkretnej sytuacji. Próbuję zapakować istniejący schemat bazy danych w kilka obiektów i nie jestem pewien, czy powinienem po prostu używać dziedziczenia, czy mieszaniny niektórych wzorców. Mam tabelę opcji, przechowującą podstawowe właściwości elementu w ten sposób: id type code name Opcje te mają również dostępność - przechowywane w innym stole id (z tabeli opcji) fromdate todate i ceny w innym stole id (z tabeli opcji) validfrom oddate todate cena i na końcu zarezerwowany stolik tym razem wpisany na id opcji i osoby, która ma booked it id (z tabeli opcji) personid bookedPrice Aby dodać więcej do miksu, istnieje również kilka konkretnych typów opcji, które mają dodatkowe właściwości, które są dla nich unikalne. Myślę, że w większości przypadków powinienem używać dziedziczenia - ponieważ bity ceny/dostępności są używane dla WSZYSTKICH typów opcji, a następnie ozdobić unikalne opcje tymi dodatkowymi bitami w tych szczególnych przypadkach. Tak więc w różnych okolicznościach te dane będą musiały zostać załadowane do różnych obiektów. Zastanawiam się, czy najlepiej jest dziedziczyć po opcji podstawowej - tworząc opcję AvailabilityOption i PricedOption itp. i rozszerzając opcję podstawową w ten sposób lub dekorując opcję podstawową rozszerzonymi właściwościami. Nie jestem pewien, czy jest tu wystarczająco dużo informacji, aby na to odpowiedzieć. Zastanawiam się, czy ktoś mógłby wyjaśnić zalety i pułapki każdego z nich, abym nie wpadł w ślepy zaułek?


title: Jak bezpieczne jest poleganie na bibliotekach Pythona innych firm w produkcie produkcyjnym?

text: Jestem nowicjuszem w Pythonie i pochodzę ze świata PHP typu pisz wszystko sam (przynajmniej tak zawsze do tego podchodziłem). Używam Flask, WTForms, Jinja2 i właśnie odkryłem Flask-Login, którego chcę użyć. Moje pytanie dotyczy niezawodności korzystania z bibliotek innych firm w celu zapewnienia podstawowych funkcji w projekcie, który ma funkcjonować przez kilka lat. Zainstalowałem te biblioteki (poprzez pip) w środowisku virtualenv. Co się stanie, jeśli te biblioteki przestaną być rozpowszechniane? Czy powinienem wykonać kopię zapasową tych bibliotek (czy to jajka)? Czy mogę przechowywać te biblioteki w samym projekcie, zamiast polegać na pip, aby zainstalować je w środowisku wirtualnym? Czy powinienem przechowywać je osobno? Obawiam się, że będę polegał na bibliotece, aby uzyskać podstawową funkcjonalność, a pewnego dnia ściągnę niekompatybilną wersję przez pip, albo autor lub opiekun przestanie ją rozpowszechniać i nie będzie już dostępna. Jak mogę się przed tym zabezpieczyć i upewnić się, że wszystkie biblioteki innych firm, których używam w moich projektach, będą zawsze dostępne tak, jak są teraz?


title: Dlaczego wolne oprogramowanie jest dobre dla programistów?

text: Kiedy mówię Wolne Oprogramowanie, mam na myśli terminy FSF. Free jak w Free Speech, a nie jak w Free Beer. Dlaczego dobrym pomysłem dla programistów jest używanie _i_ pisanie Wolnego Oprogramowania?


title: Dlaczego ankiety są akceptowane w programowaniu internetowym?

text: Obecnie pracuję nad projektem Ruby on Rails, który pokazuje listę obrazów. Niezbędnym elementem tego projektu jest pokazywanie nowych postów w czasie rzeczywistym bez konieczności odświeżania strony internetowej. Po chwili szukania natknąłem się na niektóre rozwiązania i usługi JavaScript, takie jak PubNub; jednak żadne z dostarczonych rozwiązań nie miało sensu. W rozwiązaniu JavaScript (odpytywanie) dzieje się co następuje: * Użytkownik 1 przegląda listę zdjęć. * W tle kod JavaScript co sekundę odpytuje punkt końcowy, aby sprawdzić, czy pojawił się nowy post. * Użytkownik 2 dodaje nowe zdjęcie. * Przed wyzwoleniem nowego cyklu i pobraniem nowych danych występuje opóźnienie wynoszące 50 ms. * Nowa zawartość jest ładowana w DOM. Wydaje się to dziwne w przekładzie na przykład ze świata rzeczywistego: * Użytkownik 1 trzyma stos zdjęć na swoim biurku. * Co sekundę podchodzi do fotografa i pyta, czy ma nowego. * Fotograf robi nowe zdjęcie. * W tej sekundzie, kiedy wchodzi, może zrobić zdjęcie i położyć je na stosie. Moim zdaniem rozwiązanie powinno wyglądać następująco: * Użytkownik 1 trzyma na biurku stos zdjęć. * Fotograf robi nowe zdjęcie. * Fotograf podchodzi do stosu i kładzie go z resztą. Rozwiązanie PubNub jest w zasadzie takie samo, jednak tym razem między stronami chodzi stażysta, aby udostępnić dane. Nie trzeba dodawać, że oba rozwiązania są bardzo energochłonne, ponieważ są uruchamiane nawet wtedy, gdy nie ma danych do załadowania. O ile moja wiedza sięga, nie ma (logicznego) wyjaśnienia, dlaczego ten sposób implementacji jest używany w prawie każdej aplikacji czasu rzeczywistego.


title: „UML to najgorsza rzecz, jaka kiedykolwiek spotkała MDD”. Czemu?

text: William Cook w tweecie napisał, że: „_UML to najgorsza rzecz, jaka kiedykolwiek spotkała MDD. Na szczęście wiele osób zdaje sobie teraz z tego sprawę…_ „Chciałbym poznać uzasadnienie tego twierdzenia (najwyraźniej nie mam na myśli tego jego osobista opinia). Zauważyłem, że wiele osób nie lubi tak bardzo UML. Warto również wspomnieć, że jest na uczelni, gdzie UML jest świętym Graalem efektywnego projektowania i modelowania.


title: Pracujesz za darmo?

text: Natknąłem się na artykuł Praca za darmo, który dał mi do myślenia. > Celem każdego pracodawcy jest uzyskanie większej wartości od pracowników niż firma > wypłaca wynagrodzenie; w przeciwnym razie nie ma wzrostu, nie ma awansu ani > korzyści dla pracodawcy. Odwrotnie, celem każdego pracownika powinno być > wniesienie większego wkładu do firmy, niż otrzymuje wynagrodzenie, a tym samym > dostarczenie solidnego uzasadnienia dla otrzymywania podwyżek i awansu w firmie. >> Nie muszę ci mówić, że odmowa nie wytrwała długo w tej pracy. >> Dla kontrastu, oto historia z zeszłego tygodnia. Zadzwonił mój telefon. Był to wydział pracy > głównego uniwersytetu. Mężczyzna rozmawiający przez telefon > pytał o wyniki osoby, która w zeszłym roku pracowała nad stroną > Mises.org. Udało mi się opowiedzieć mu o niezwykłym młodym człowieku, który > przystąpił do działania podczas kryzysu i jak pracował przez trzy dni po 19 godzin > trzy dni z rzędu, jak pilnie uczył się nowego oprogramowania, jak zachował > super, jak poruszał się z gracją i doświadczeniem pośród około 80 > różnych wtyczek i baz danych innych firm, jak radził sobie z > nieuniknionymi problemami, jak wziął na siebie odpowiedzialność za wyniki i wiele > więcej. > > Nie powiedziałem ankieterowi, że ta osoba zrobiła to wszystko bez > żądania jakiejkolwiek zapłaty. Czy ten fakt wpłynął na mój raport na temat jego > wydajności? Nie jestem do końca pewien, ale ankieter prawdopodobnie wyczuł w moim głosie moje poczucie podziwu wobec tego, co ta osoba zrobiła dla Instytutu Misesa. Prowadzący wywiad powiedział mi, że zapisał mi 15 różnych > pytań, ale odpowiedziałem na nie już w trakcie > mojego monologu i że był zachwycony, słysząc te wszystkie szczegóły. > > Osobie zaproponowano pracę. Zrobił bardzo mądrą rzecz; zdobył wielbiciela na całe życie. > > Im trudniejsze ekonomicznie czasy, tym więcej pracodawcy muszą wiedzieć, co otrzymują, gdy kogoś zatrudniają. Podania o pracę napływają wiadrami, > wszystkie wyściełane stopniami i wykonane tak, aby wyglądały tak imponująco, jak to tylko możliwe. To wszystko > tylko papier. Dziś liczy się to, co człowiek może zrobić dla firmy. CV staje się pro forma, ale nie decydujące w tych warunkach. Ale żeby były szef lub menedżer > zachwycał się tobą przed potencjalnym pracodawcą? To jest warte wszystkiego. Co myślisz? Czy ktoś tu pracował za darmo? Jeśli tak, czy w jakikolwiek sposób przyniosło ci to korzyści? Dlaczego (nie) miałbyś pracować za darmo (zakładając, że masz pieniądze z innych środków, aby utrzymać się w ruchu)? Czy możesz podzielić się swoim doświadczeniem? Ja biorę rok na studiach i nie mam jeszcze dyplomu, więc prawdopodobnie większość moich podań o pracę jest ignorowana. Więc myślę o pracy za darmo dla doświadczenia?


title: Próbujesz dowiedzieć się, jak korzystać z usług WCF w aplikacji WPF przy użyciu MVVM

text: Pracujemy nad dużym przepisaniem starszej aplikacji VB6 do aplikacji WPF. Napisałem kilka usług WCF, które mają być używane z nową aplikacją WPF. W tym celu chcemy użyć wzorca projektowego MVVM, ale nie mamy w tym doświadczenia. Tak więc, aby nauczyć się MVVM, obejrzeliśmy wideo na WindowsClient zatytułowane How Do I: Build Data-driven WPF Application using the MVVM pattern. To świetne wprowadzenie i często się do niego odwołujemy, ale w naszej sytuacji to nam nie wystarcza. Na przykład nie jesteśmy pewni, jak używać zestawów danych zwróconych przez moje usługi WCF w naszej nowej aplikacji WPF, korzystając z pomysłów, które Todd Miranda przedstawił w filmie wideo, do którego się odwołuję. Jeśli zrobiliśmy tak, jak sądzimy, że powinniśmy zrobić, powinniśmy zaprojektować klasę, która jest dokładnie taka, jak klasa danych zwracanych w mojej usłudze WCF. Ale zastanawiamy się, po co to robić, skoro usługa WCF ma już taką klasę? A jednak klasa w aplikacji WPF musi przynajmniej zaimplementować interfejs INotifyPropertyChanged. Więc nie jesteśmy pewni, co robić.


title: Czy aplikacja mobilna musi odpytywać zewnętrzne źródła danych, czy może odbierać dane w inny sposób?

text: Rozpoczynam etapy projektowania aplikacji mobilnej. Szukam wiedzy na temat typowych praktyk dotyczących powiadomień użytkowników. Rozumiem, że SDK dla urządzenia ujawni metody, które pozwolą mi powiadomić użytkownika, jak i kiedy tego potrzebuję. Nie jestem pewien, w jaki sposób moja aplikacja jest powiadamiana z zewnętrznego źródła danych. Czy powszechną praktyką jest okresowe odpytywanie usługi sieciowej pod kątem danych? Czy jest bardziej prawdopodobne, że moja aplikacja będzie miała możliwość odbioru danych w dowolnym momencie? Na przykład: Mam stronę internetową, która prosi użytkowników o wypełnienie formularza kontaktowego. Chciałbym, aby moja aplikacja mobilna wyświetlała powiadomienie, gdy jeden z tych formularzy zostanie wypełniony. Czy moja aplikacja powinna odpytywać mój serwer danych w poszukiwaniu zaktualizowanych rekordów, czy też moja witryna powinna w jakiś sposób powiadamiać moją aplikację o nowym rekordzie? Wszelkie opinie lub porady są mile widziane. Dziękuję.


title: Po co używać podejścia OO zamiast gigantycznego „przełącznika”?

text: Pracuję w sklepie .Net, C# i mam współpracownika, który upiera się, że powinniśmy używać w naszym kodzie gigantycznych instrukcji Switch z dużą ilością "przypadków", a nie bardziej zorientowanych obiektowo. Jego argument konsekwentnie wraca do faktu, że instrukcja Switch kompiluje się do „tabeli skoku procesora” i dlatego jest najszybszą opcją (nawet jeśli w innych kwestiach nasz zespół jest informowany, że nie zależy nam na szybkości). Szczerze, nie mam przeciwko temu argumentów... bo nie wiem, o czym on do cholery mówi. Czy on ma rację? Czy on tylko obgaduje swój tyłek? Po prostu próbuję się tutaj uczyć.


title: Dlaczego mam pchać, jeśli pracuję sam w lokalnym repozytorium?

text: Wchodzę w interakcję z Git przez GitHub dla Windows, co jest zabawne, ponieważ nigdy nie wypchnę mojego repozytorium do GitHub. Pracuję nad tym sam i jest przeznaczony tylko dla mnie. Zauważyłem, że moje zatwierdzenia są wymienione pod „niezsynchronizowanymi zatwierdzeniami”, a pod „historią” jest napisane „brak zatwierdzeń”. Co prowadzi mnie do pytania, co osiągnę poprzez pushowanie, z wyjątkiem moich zatwierdzeń wymienionych w "historii"?


title: Jakie względy prawne muszę mieć podczas programowania?

text: Ostatnio pracowałem z grupą nad stworzeniem systemu rejestrowania dla laboratoriów korepetycji, aby śledzić godziny pracy korepetytora i wykorzystanie laboratoriów. Musieliśmy zmienić projekt, aby był zgodny z FERPA. Moje pytanie wynika z ciekawości, że na moich studiach nigdy nie było wzmianki o tym, jak ludzie z tej dziedziny muszą radzić sobie z przestrzeganiem prawa w swojej pracy. Chciałabym więc wiedzieć, jak bardzo programiści muszą brać pod uwagę prawo w swojej pracy.


title: Podpis metody interfejsu nie jest wystarczająco restrykcyjny

text: Jakiś czas temu napisałem kawałek kodu w swojej pracy. Podczas pisania kodu napisałem kilka interfejsów, które pozwoliłyby mi na większą elastyczność, a także starałem się głębiej zrozumieć koncepcję OOP. Czyli w interfejsie, który napisałem mam sygnaturę metody podobną do tej : void Add(ImyBase objToAdd) A potem mam kilka klas implementujących ten interfejs. Ale niepokoi mnie to, że robię tego typu rzeczy dość często w tej metodzie `Add` public void Add(ImyBase objToAdd) { if(!(objToAdd to ImyBaseDeviation)) throw new ArgumentException("blablabla"); //do rzeczy } W tamtym czasie był to dla mnie śmierdzący zapach, ale tak naprawdę nie przejmowałem się tym po prostu dlatego, że pracuję solo nad tym projektem, a ten fragment kodu jest używany tylko w mojej firmie i jest tylko 2 informatyków w tam (ja + ktoś inny) i to się nie zmieni. W każdym razie ostatnio wróciłem do tego fragmentu kodu i z mojej poprzedniej lektury (właściwie więcej, ale ten jest dość podobny) teraz naprawdę wygląda to dla mnie naprawdę źle i próbuję znaleźć najlepszy sposób na ulepszenie tego fragmentu kodu. Nie podoba mi się kod w obecnej formie, ponieważ interfejs pozwala na więcej niż typ konkretny ogólnie pozwala, więc w zasadzie konkretna implementacja nie respektuje umowy podanej przez interfejs. Trudno mi o kilka rozwiązań Najpierw po prostu usuń metodę `Add` z interfejsu, ponieważ wywołanie `Add` i tak ma dużą szansę na zgłoszenie wyjątku. Tak więc, aby wywołać „Dodaj”, i tak potrzebujesz konkretnego typu. Więc tutaj obiekt nadal miałby metodę `Add`, ale z akceptowanym typem jako parametrem. Po drugie dodaj metodę, która wyglądałaby mniej więcej tak w interfejsie bool IsValidToAdd(ImyBase objToTest) Ale to mnie nie satysfakcjonuje. Dlatego szukam porady u bardziej zaawansowanych ludzi, takich jak ty, aby pomogli mi dowiedzieć się, jaki byłby najlepszy sposób na wdrożenie tego, aby pozostał jak najczystszy. Przepraszam, nie jestem rodzimym anglofonem, więc jeśli moje pytanie wymaga edycji lub poprawienia gramatyki, proszę śmiało. Dziękuję Ci


title: Czy są jakieś komplikacje lub skutki uboczne zmiany końcowego modyfikatora dostępu do pola/widoczności z prywatnego na chroniony?

text: Mam „prywatne pole końcowe” w jednej klasie, a następnie chcę zająć się tym polem w podklasie. Chcę zmienić modyfikator dostępu/widoczności do pola z `private` na `protected`, więc nie muszę wywoływać metody `getField()` z podklasy i zamiast tego mogę adresować to pole bezpośrednio (co jest bardziej przejrzyste i spójne) . Czy wystąpią jakiekolwiek skutki uboczne lub komplikacje, jeśli zmienię pole „prywatne” na „chronione” na pole „ostateczne”? AKTUALIZACJA: z logicznego punktu widzenia oczywiste jest, że potomek powinien mieć bezpośredni dostęp do wszystkich pól poprzedników, prawda? Istnieją jednak pewne ograniczenia, które JVM nakłada na pola `private final`, takie jak 100% gwarancja inicjalizacji po fazie budowy (przydatne dla współbieżności) i tak dalej. Chciałbym więc wiedzieć, czy zmiana z „prywatnego” na „chroniony” nie spowoduje naruszenia tego lub innych ograniczeń?


title: Struktura repozytorium Git

text: Przepraszam, jeśli to jest duplikat, szukałem. Przechodzimy do Gita. W Subversion jestem przyzwyczajony do posiadania folderów \trunk, \branches i \tags. W przypadku Git przełączanie między gałęziami zastąpi zawartość katalogu roboczego, więc czy mam rację, zakładając, że sposób, w jaki kiedyś pracowaliśmy, po prostu nie ma zastosowania do Git? Domyślam się, że miałbym folder repo z być może gitignore i readme.txt, a następnie folderami projektów, które składają się na repozytorium, i to wszystko.


title: Biblioteka do fałszowania sporadycznych awarii zgodnie z polityką zdefiniowaną przez testera?

text: Szukam biblioteki, której mogę użyć do pomocy w mockowaniu komponentu programu, który działa tylko sporadycznie - zwykle działa dobrze, ale czasami zawodzi. Załóżmy na przykład, że muszę odczytać dane z pliku, a mój program musi unikać awarii lub zawieszenia się, gdy odczyt nie powiedzie się z powodu awarii głowicy dysku. Chciałbym modelować to przez posiadanie funkcji czytnika danych pozornych, która zwraca dane próbne 90% czasu, ale w przeciwnym razie zawiesza się lub zwraca śmieci. Lub, jeśli testuję mój pełny program, mogę włączyć debugowanie kodu w moim module czytnika danych rzeczywistych, aby zwracał prawdziwe dane przez 90% czasu i zawiesił się w przeciwnym razie. Teraz, oczywiście, w tym konkretnym przykładzie mógłbym po prostu ręcznie zakodować moją mock, aby przetestować ją z procedurą `random()`. Jednak szukałem systemu, który pozwalałby na wdrożenie dowolnej polityki niepowodzeń, w tym: * Porażka losowo w 10% przypadków * Powodzenie 10 razy, niepowodzenie 4 razy, powtórzenie * Porażka półlosowo, tak, że jedna porażka a następnie seria kolejnych niepowodzeń * Dowolna polityka, którą tester chce zdefiniować Ponadto, chciałbym móc zmienić politykę niepowodzeń w czasie wykonywania, używając zewnętrznych pokręteł lub przełączników, które można usunąć (wraz z resztą biblioteki) przed wysłaniem kodu. (Jeśli komponent jest ładowany przez framework wstrzykiwania zależności, moglibyśmy dostarczyć mock jako jedną implementację w wersji testowej i wstrzymać ją od dostarczonej kompilacji.) W pig-Java wyobraziłbym sobie interfejs `FailureFaker` w następujący sposób: interface FailureFaker { /** Zwróć wartość true wtedy i tylko wtedy, gdy symulowana operacja się powiodła. Realizatorzy powinni zastąpić tę metodę wersjami zgodnymi z ich zasadami niepowodzeń. */ publiczna próba logiczna(); } A każda polityka niepowodzenia byłaby klasą implementującą `FailureFaker`; na przykład istniałby `PatternFailureFaker`, który odniósłby sukces N razy, następnie zakończył się niepowodzeniem M razy, a następnie powtórzył, oraz `AlwaysFailFailureFaker`, którego używałbym tymczasowo, gdy potrzebuję zasymulować, powiedzmy, kogoś usuwającego moje dane z zewnętrznego dysku twardego była na. Polityka może być następnie użyta (i zmieniona) w moim fałszywym kodzie obiektowym, jak na przykład: class MyMockComponent { FailureFaker faker; public void doCoś() { if (faker.attempt()) { // ... } else { wyrzuć nowy wyjątek RuntimeException(); } } void setFailurePolicy (polityka FailureFaker) { this.faker = polityka; } } Wygląda to na coś, co byłoby częścią prześmiewczej biblioteki, więc nie zdziwiłbym się, gdyby zostało to zrobione wcześniej. (W rzeczywistości wpadłem na pomysł z _Writing Solid Code_ Steve'a Maguire'a, gdzie omawia dokładnie ten pomysł na stronach 228-231, mówiąc, że takie udogodnienia były powszechne w kodzie Microsoftu z tamtych wczesnych lat 90-tych). znają EasyMock i jMockit for Java, a ani AFAIK nie mają tej funkcji, ani czegoś podobnego z inną składnią. Stąd pytanie: czy istnieją takie biblioteki jak opisałem powyżej? Jeśli tak, to gdzie uważasz, że są przydatne? Jeśli nie uznałeś ich za przydatne, dlaczego nie?


title: Dlaczego zmienne „klasowe” mają błędną pisownię?

text: Zacząłem widzieć takie inicjalizacje zmiennych w bibliotekach Javy: Class clazz = new Class(); lub Class klass = new Class(); Czy istnieje jakiś szczególny powód, dla którego ludzie błędnie wpisują słowo „klasa” podczas deklarowania tych zmiennych i używają stylu pisania „kool boyz”? Co jest złego w używaniu czegoś takiego jak `cls` lub coś podobnego?


title: Jak zmniejszyć rozmiar aplikacji (zużycie pamięci i rozmiar fizycznej pamięci masowej)?

text: Mam swój własny projekt, nad którym pracuję, chociaż jest on dość intensywny dźwiękowo i graficznie i zastanawiałem się, czy macie jakieś sugestie lub rozwiązania, jak można zminimalizować rozmiar i zużycie pamięci przez ich aplikację? Moja aplikacja to aplikacja na iPhone'a i, jak Apple zawsze wyjaśnia, aplikacja może używać tylko określonej ilości pamięci (pod względem wydajności i rzeczywistego rozmiaru).


title: Jak radzić sobie z błędami, które chyba naprawiłem, ale nie jestem do końca pewien

text: Istnieje kilka rodzajów błędów, które są bardzo trudne do odtworzenia, zdarzają się bardzo rzadko i pozornie przypadkowo. Może się zdarzyć, że znajdę możliwą przyczynę, naprawię ją, przetestuję program i nie będę w stanie odtworzyć błędu. Ponieważ jednak nie można było wiarygodnie odtworzyć błędu i zdarzało się to tak rzadko, jak mogę to wskazać w bugtrackerze? Jaki jest powszechny sposób robienia tego? Jeśli ustawię **`status`** na naprawiony, a **`rozwiązanie`** na naprawiony, oznaczałoby to, że coś jest całkowicie naprawione, prawda? Czy powszechną praktyką jest ustawianie **`status`** na naprawiony i **`rozwiązanie`** na otwarcie, aby wskazać testerom, że „prawdopodobnie jest to naprawione, ale wymaga większej uwagi, aby się upewnić” ? **Edytuj:** większość (jeśli nie wszystkie) bugtrackerów ma dwie właściwości określające status błędu, być może nazwy nie są takie same. Przez **`status`** mam na myśli _nowy, przypisany, naprawione, zamknięte itd._ , a przez **`rozwiązanie`** mam na myśli _otwarte (nowe), naprawione, nierozwiązywalne, nie do odtworzenia, duplikat, a nie błąd_ itp.


title: Klient chce, abyśmy sprawdzali maszyny robocze pod kątem pornografii. Czy to możliwe?

text: Długoletni klient poprosił nas o pomoc w sprawdzaniu ich maszyn roboczych pod kątem pornografii. Martwią się o odpowiedzialność w przypadku znalezienia wrażliwych materiałów. Ich główne obawy (z oczywistych względów) to pliki wideo, audio i graficzne. Jeśli to możliwe, chcieliby również skanować dokumenty tekstowe w poszukiwaniu nieodpowiednich treści. Mają hierarchię treści nie do pracy, zaczynając od rażąco nielegalnych (nie muszę wymieniać szczegółów), przechodząc do oczywiście obraźliwych, a także zawierają rzeczy, które mogą być obraźliwe dla niektórych - pomyśl o reklamach bielizny, kartach z żartami pęknięcia tyłków i wszystko, co ma związek z Howiem Mandelem. Moje pytania to: * Czy to jest etyczne? Myślę, że to dlatego, że każdy pracownik prawnie zgadza się, że jego maszyna robocza należy do firmy i podlega przeszukaniu. Pokazy nie mają odbywać się na przywożonych do pracy maszynach osobistych. * Czy to możliwe? Zrobiłem dużo przetwarzania/indeksowania obrazu, ale wygląda to na zupełnie nowy świat złożoności. * Jakieś odniesienia do skutecznych technik odkrywania pornografii? * Czy mogę archiwizować wyniki, gdy coś zostanie odkryte?


title: Jakie są rodzaje problemów z konkursami programistycznymi?

text: Zasadniczo chcę stworzyć świetne odniesienie do użycia z konkursami programistycznymi, które miałyby wszystkie algorytmy, które mogę połączyć, których potrzebuję podczas konkursu, a także przykładowe użycie kodu. Mam zamiar zrobić z tego coś w rodzaju książki, którą będę mógł wydrukować i zabrać ze sobą na zawody. Chciałbym to zrobić, zamiast po prostu przynosić inne książki (takie jak książki o algorytmach), ponieważ myślę, że sam nauczę się dużo więcej, przeglądając wszystkie algorytmy, a także będę wiedział dokładnie, co mam w książce, dzięki czemu jest bardziej wydajny w posiadaniu i używaniu. Tak więc robiłem badania, aby określić, jakie typy problemów programistycznych i algorytmów są powszechne w konkursach, a jedyne, co mogę znaleźć, to to (do którego widziałem kilka razy): Hal Burch przeprowadził analizę wiosną przerwa 1999 i dokonała niesamowitego odkrycia: jest tylko 16 rodzajów konkursowych zadań programistycznych! Co więcej, kilka pierwszych obejmuje prawie 80% problemów obserwowanych w IOI. Oto one: Programowanie dynamiczne Chciwy Pełne wyszukiwanie Wypełnianie powodzią Najkrótsza ścieżka Rekursywne techniki wyszukiwania Minimalne drzewo rozpinające Plecakowa geometria obliczeniowa Przepływ sieci Ścieżka Eulera Dwuwymiarowy kadłub wypukły BigNums Wyszukiwanie heurystyczne Wyszukiwanie przybliżone Problemy ad hoc Najtrudniejszymi problemami są problemy kombinacyjne, które obejmują pętlę (kombinacje, podzbiory itp.) wokół jednego z powyższych algorytmów - lub nawet pętla jednego algorytmu z innym wewnątrz niego. Wydaje się, że są one niezwykle trudne do wykonania, nawet jeśli koncepcyjnie są „oczywiste”. To dobrze i wszystko, ale to badanie zostało przeprowadzone w 1999 roku, czyli 13 lat temu! Jedno wiem, że nie ma już problemów z BigNums (ponieważ Java ma klasę BigInteger, przestali sprawiać takie problemy). Zastanawiam się więc, czy ktoś zna jakieś nowsze badania nad typami problemów, które można zobaczyć w konkursie programistycznym? Albo jakie byłyby najbardziej przydatne algorytmy w konkursach?


title: Czy test jednostkowy powinien znajdować się w oddzielnym repozytorium?

text: Czy powinienem umieścić testy jednostkowe w osobnym repozytorium, a nie w tym samym repozytorium co biblioteka programistyczna? Więc odnoszę się do biblioteki programowania jako podmodułu. Ale większość projektów open source, które widziałem, nie organizuje projektów tak, jak wspomniałem powyżej. Czy ktoś może wyjaśnić, które podejście jest lepsze?


title: NAJLEPSZY format/protokół dla RESTful SOA

text: Jaki jest najlepszy protokół/format dla projektów SOA przy użyciu REST. Oto kilka opcji, ale nie mogę się zdecydować... * XML * JSON * YAML * ProtoBuf * _... wszystko, co mogłem przegapić_ Oto moje wymagania... * powinien być lekki i zużywać mniej przepustowości * powinien mieć istniejące biblioteki klienta w Pythonie i PHP * powinny być skalowane BARDZO DOBRZE _**\-- UPDATE --_** Mamy dwie maszyny (jedna to Python -- nasza warstwa pośrednia), a druga to PHP (front end -- używany do renderowania inny kod HTML dla starych przeglądarek, przeglądarek HTML 5 i naszego klienta Adobe AIR). Potrzebujemy potoku komunikacyjnego między maszyną Python i PHP -- i uważamy, że potok usług RESTful będzie dobrym pomysłem -- po prostu nie możemy zdecydować się na format.


title: Jak zautomatyzować dokument API Diff?

text: Możemy użyć doxygen do zrobienia dokumentacji, ale jak mogę zrobić API Diff? Jakieś otwarte lub darmowe rozwiązanie? Czy muszę ręcznie przygotować? Dziękuję.


title: Jak działa treść edytowalna?

text: Niedawno natknąłem się na artykuł, w którym jeśli wpiszesz data:text/html,%20<html contenteditable> w pasku adresu przeglądarki obsługującej HTML5, możesz wpisać w oknie. Udało mi się wymyślić, że dzięki temu można w zasadzie napisać html w pasku adresu (byłoby to raczej niewygodne), ale nie rozumiem, jak i dlaczego to działa. Jakie są inne funkcje tego polecenia?


title: Zmiana wiadomości bez ponownego wdrażania / ponownego uruchamiania aplikacji

text: Pytanie: W aplikacji Java, Jak zmienić komunikat o błędzie lub prosty tekst alertu bez ponownego instalowania / restartowania aplikacji Najbliższe odpowiedzi, jakie mógłbym wymyślić **(1)** to nowe komunikaty o błędach w określonym pliku w określonej lokalizacji, mówiące `"\ root\resources\messages.txt"`i utworzyć dla niego obiekt pliku. File msgFile = new File("\root\resources\messages.txt"); `msgFile.exist()` zwróci prawdę lub fałsz w zależności od wyniku możemy wyświetlić wstępnie zdefiniowaną wiadomość w innym miejscu w aplikacji lub użyć tej wiadomości **(2)** posiadanie _pliku właściwości_ może brzmieć tak samo, ale to' zostanie załadowany tylko raz, gdy aplikacja zostanie uruchomiona, więc musimy zrestartować. Czy jest inny sposób, aby to osiągnąć? nie ma lepszego miejsca niż tutaj.


title: Jak zacząć korzystać z Github (dla mnie)?

text: Zarejestrowałem się na github kilka dni temu. Głównie do rozpoczynania projektów, aby dzielić się niektórymi moimi pomysłami z innymi, a także pozyskiwać źródła dostępne z dowolnego miejsca. To moja pierwsza strona z otwartym wkładem. To znaczy, nie korzystałem z Sourceforge ani Google Code. Teraz instalacja oprogramowania klienckiego i inny proces konfiguracji nie zostały jeszcze zakończone. Ponieważ uznałem to za nieco zagmatwane. Prawdopodobnie przyczyną jest to, że nie mam pojęcia o git jako systemie kontroli źródła. Użyłem tylko Perce z GUI (p4v) w miejscu pracy i znam podstawy, takie jak uzyskanie wersji/otwarte do edycji/zatwierdzenia/przywrócenia itp. Ponadto będę głównie pracował z C#. I będę używał Visual Studio i Windows. Dowiedziałem się w internecie, że są inni klienci studia wizualnego. Niech te będą dla mnie lepsze. Więc jakie są twoje sugestie? Jak mogę zacząć i kontynuować?


title: Usługa sieci Web ASP.NET MVC — bezpieczeństwo dla przemysłowych klientów z systemem Android

text: Próbuję zaprojektować system, który pozwoli kilku urządzeniom z systemem Android na bezpieczne logowanie do usługi sieci Web ASP.NET MVC REST. Obecnie żadna ze stron nie jest realizowana. Istnieje jednak witryna ASP.NET MVC, w której usługa sieci Web będzie znajdować się obok. Obecnie używane jest uwierzytelnianie formularzy. Pomysł będzie polegał na tym, że urządzenia z Androidem będą pobierać dane z usługi internetowej, a następnie będą mogły pracować w trybie offline, przechowując dane we własnych lokalnych bazach danych, gdzie użytkownicy będą mogli dokonywać aktualizacji tych danych, a następnie synchronizować aktualizacje z powrotem do głównego serwer tam, gdzie to możliwe. Usługa sieci Web będzie używać protokołu HTTPS, aby zapobiec przechwyceniu połączeń i zmniejszyć ryzyko przechwycenia połączeń. System jest systemem przemysłowym i nie będzie używany przez ogólną populację Androida. Zamiast tego tylko autoryzowane urządzenia z systemem Android będą autoryzowane przez usługę internetową do wykonywania połączeń. W związku z tym myślałem o użyciu numeru seryjnego urządzenia z Androidem jako nazwy użytkownika, a następnie wygenerowanego długiego hasła, które urządzenie będzie mogło odebrać - po autoryzacji urządzenia po stronie serwera. Urządzenie będzie również posiadało loginy użytkownika – ale nie będą to logowanie do usługi sieciowej – tylko samo urządzenie – ponieważ urządzenie i użytkownik muszą mieć możliwość pracy w trybie offline. Dlatego nazwy użytkowników i hasła będą pobierane i przechowywane na samych urządzeniach. Moje pytanie brzmi... jaka forma zabezpieczenia jest najlepsza w konfiguracji usługi sieciowej? Czy powinien używać formularzy Uwierzytelnianie? Czy nazwa użytkownika i hasło powinny być po prostu przekazywane przy każdym wywołaniu GET/POST, czy też powinno rozpoczynać sesję tak jak ja ze stroną internetową? Strona Androida powoduje więcej zamieszania. Wydaje się, że jest tu kilka opcji Spring-Android, Volley, Retrofit, LoopJ, Robo Spice, które wydają się korzystać ze wspomnianego Springa, Retrofit lub Google HttpClient. Mam problem ze znalezieniem prostego przykładu, który uwierzytelnia się za pomocą systemu uwierzytelniania opartego na formularzach. Czy to dlatego, że robię to źle? Czy jest inna opcja, która lepiej by do tego pasowała?


title: Teraźniejszość i przyszłość programowania w lokalnych językach

text: Czy programowanie może stać się niezależne od języka? Czy zawsze będziemy programować w języku angielskim? Czy kiedykolwiek będziemy mogli programować w naszych lokalnych językach? Czy są jakieś badania, które dotyczą tej sprawy? Czy są takie zmiany?


title: Warstwa abstrakcji na jednostkach generowanych przez ORM

text: Uczę się LINQ to SQL (i planuję nauczyć się Entity Framework). Początkowo użyłem warstwy abstrakcji do konwersji jednostek LINQ na SQL na obiekty domeny. Później odkryłem opcję „Mapowanie dziedziczenia”, usunąłem warstwę abstrakcji i zacząłem używać jednostek ORM bezpośrednio jako obiektów domeny. Po pewnym czasie dostałem blokadę drogi, gdy nie używam warstwy abstrakcji. Przeczytaj to tutaj: http://stackoverflow.com/questions/11470037/get-all-associate-compozyt-objects-inside-an-object-in-abstract-way 1. Czy możliwe jest wykonanie wszystkich zadań bez użycia abstrakcji warstwa nad ORM? 2. Jakie są przesłanki, by zdecydować, czy mieć/nie mieć warstwę abstrakcji? **ODNIESIENIA** : 1. http://martinfowler.com/bliki/OrmHate.html


title: Gdzie mogę uzyskać beta testerów biblioteki oprogramowania?

text: Jest już kilka podobnych pytań do tego. Ale mój różni się na tyle, że powinienem zapytać o to osobno. Napisałem bibliotekę uwierzytelniania ASP.Net i szukam beta testerów. Pisałem na forach, które często odwiedzam, ale nie są to fora powszechnie używane przez użytkowników .Net. Próbowałem zapraszać znajomych, ale szczerze mówiąc nie znam osobiście wielu osób korzystających z ASP.Net. Obawiam się, że wysłanie takiej prośby na http://asp.net/forums zostałoby oznaczone jako spam i usunięte. Co jeszcze mogę zrobić, aby znaleźć programistów do testowania mojej biblioteki?


title: Czy w przypadku wysoce responsywnej strony internetowej najefektywniej będzie dostosować bootstrap / użyć czegoś innego (czyste-io?) / zastosować własne zasady

text: W przygotowaniu jest kilka nietrywialnych responsywnych kompilacji stron internetowych. Nie są to platformy ani aplikacje, ale duże witryny marketingowe/broszury, w których liczy się dbałość o szczegóły. Szeroko korzystałem z bootstrapa, a także z pure.io, a także z własnych zasad. Zastanawiam się, jaki jest najskuteczniejszy sposób ich budowania. Planuję zacząć od bootstrapu i dostosowywania, ale w przeszłości wybrałem pure.io, ponieważ musiałem wprowadzić tak wiele zmian w bootstrapie, aby uzyskać bardzo kłopotliwy projekt (tj. był sprzeczny z konwencjami bootstrapowymi) Czy ktoś ma jakieś porady na ten temat?


title: Testowanie jednostkowe: Czy powinniśmy dbać o rozróżnienie między Mockami a Stubs?

text: Dużo mówiło się na różnych blogach, forach i na StackExchange na temat rozróżnienia między obiektami Mock i Stub (większość z nich odnosi się konkretnie do frameworka Rhino Mocks). Należą do nich posty Martina Fowlera i rozdział w „The Art of Unit Testing” Roya Osherove'a. Obecnie przyglądam się, jak napisać bardziej łatwe w utrzymaniu, czytelne testy, a robiąc to, przyglądam się alternatywnym ramom izolacji dla Rhino. Zajrzałem do biblioteki nSubstitute, która po prostu odwołuje się do "Substitutes" zamiast "Stubs" lub "Mocks". Ten post od Ayende sugeruje, że może zmierzać w podobnym kierunku do RhinoMocks 4.0. Moje pytanie brzmi - choć wydaje się, że istnieje konsensus co do różnicy między celem Mock i Stub, czy naprawdę warto się tym przejmować? Czy rozróżnienie między tymi dwoma prowadzi do bardziej utrzymywanych/czytelnych testów, czy po prostu wprowadza niepotrzebną złożoność?


title: jaka licencja na aplikację korzystającą z bibliotek z różnymi licencjami

text: Opracowałem oprogramowanie .NET, które korzysta z dwóch bibliotek: * Biblioteka A posiada licencję MIT i używam swojej własnej wersji do edycji kodu źródłowego tej biblioteki. * Biblioteka B posiada licencję MS-PL i używam tylko plików binarnych. Moja aplikacja będzie swobodnie rozpowszechniana w binariach i kodzie źródłowym (w tym w kodzie źródłowym biblioteki A). Ponieważ po raz pierwszy rozpowszechniam aplikację publiczną, chcę wiedzieć kilka rzeczy: * jaką licencję mam wybrać. * część z wybranej licencji Eula zaprezentowała użytkownikowi w instalacji , co jeszcze powinienem zrobić dla binariów ? * w przypadku kodu źródłowego, co dokładnie powinienem uwzględnić?


title: Na co zwrócić uwagę u partnera zewnętrznego

text: Pracuję w małym startupie jako jedyny programista w wolnym czasie. Możemy potrzebować dodatkowej pomocy programistycznej i szukamy indyjskiej firmy, która jest polecana przez kogoś, kogo znamy (choć nie są zbyt techniczne). Będę miał z nimi nieformalną pogawędkę i pomyślałem, że zobaczę, czy ludzie tutaj mają trochę mądrości w kwestii tego, czego szukać i jakie są dobre pytania do zadawania. Przynajmniej pomyślałem, że spróbuję uzyskać kilka: * Przykłady kodu * Informacje na temat wszelkich zasad dotyczących dokumentacji kodu, które mogą mieć * Trochę informacji o ludziach, z którymi będziemy pracować Jeśli potraficie wymyślić cokolwiek innego, powinienem być szczególnie jeśli szukasz lub masz jakieś inne wskazówki dotyczące prowadzenia rozmowy, Twój wkład będzie bardzo mile widziany! ** **Aktualizacja** ** Dla jasności: mam kilka pytań, które należy zadać jedynemu programiście/freelancerowi. W tym przypadku będę rozmawiał z indyjską firmą oferującą usługi outsourcingowe. Jestem ciekaw, czy są jakieś szczególne problemy, o których powinienem być świadomy i czy ktoś z tego rodzaju doświadczeniem ma jakąkolwiek ciężko wypracowaną mądrość, którą może się podzielić. Zobacz odpowiedź MainMa na jeden z takich punktów, chociaż nie jest to specyficzne dla programisty. Widzę, że tytuł pytania został nieco zmodyfikowany, więc nie przekazuje już poprawnie tego, o co próbowałem zapytać.. może to było niewłaściwe miejsce na to pytanie. :/


title: Czy 10 lat temu łatwiej było uzyskać stopień naukowy w dziedzinie informatyki?

text: Obecnie jestem studentem trzeciego roku informatyki na kanadyjskim uniwersytecie. Uważam, że jest to dość trudne i niezwykle interesujące. Jedną z rzeczy, które zauważyłem, jest to, że każda osoba, z którą rozmawiam, a która uczestniczyła w zajęciach 3 lub więcej lat temu, nauczyła się znacznie mniej niż ja w tej samej klasie, a ludzie, którzy uczęszczają na zajęcia pierwszego roku, robią więcej, niż pamiętam w moim Zajęcia I roku. Czy to tylko ja źle pamiętam, czy uważasz, że uzyskanie stopnia naukowego w informatyce było łatwiejsze 10 (a nawet 5) lat temu?


title: Czy to ma sens i czy mówienie „kodem .NET” jest dopuszczalne?

text: Jest kod C#, kod VB.NET... **Czy mogę również powiedzieć "kod .NET" jako ogólny termin obejmujący wszystkie języki, których można używać z frameworkiem .NET?** Widziałem ludzi używających go a także ludzi, którzy twierdzą, że nie powinno się go używać...


title: Jak mogę doskonalić swoje umiejętności podczas pracy nad rzeczywistymi projektami, pod nieobecność bardziej doświadczonych programistów?

text: Jestem głównym programistą w małej firmie, pracuję z C# i ASP.Net. Nasz zespół jest mały, 2-3 osobowy, bez dużego doświadczenia w rozwoju i projektowaniu. Nie mam możliwości uczenia się od starszych programistów, w moim zespole nie ma nikogo, kto by mnie poprowadził i pomógł mi wybrać najlepsze podejścia, ponieważ sam zajmuję się większością projektów. Jak mogę poprawić swoje umiejętności programistyczne podczas pracy nad rzeczywistymi projektami, pod nieobecność bardziej doświadczonych programistów?


title: Jak działają interfejsy zdalne z JavaEE i Glassfish?

text: Chciałbym wiedzieć, co się dzieje „pod maską”, jeśli używam zdalnych interfejsów w JavaEE. W projekcie wykorzystuję bezstanowy bean korporacyjny, który implementuje zdalny interfejs. I mogę wywoływać metody w tym zdalnym interfejsie z klienta (wszystko działa na tym samym serwerze Glassfish, ale powinno działać również z innej maszyny). Zdalny interfejs znajduje się w Bibliotece klas Java, zarówno komponent korporacyjny, jak i klient zawierają tę bibliotekę, ale tylko w kodzie bean, który jest implementowany. Jestem całkiem nowy w JavaEE i Glassfish. Wiem, że jest pojemnik, który zarządza ziarnami i wieloma innymi rzeczami, które sprawiają, że wszystko jest bardzo łatwe, ale nie wiem jeszcze, co dzieje się za kulisami. Czy możesz podać mi krótki opis tego, co dzieje się podczas rozmowy zdalnej? Myślę, że to ma coś wspólnego z JNDI. A gdybym uruchomił klienta na zupełnie innej maszynie, jak JNDI znalazłoby moją fasolę na innej maszynie? (Ponieważ używam netbeans z glassfish, nie musiałem niczego konfigurować w glassfish) Dzięki! EDYCJA: Używam iniekcji zależności, więc wszystko, czego potrzebuję, aby uzyskać dostęp do fasoli, to adnotacja @EJB (działa to z powodu biblioteki klas)


title: Potrzebujesz pomocy z nazewnictwem (kierowanie wywołaniami interfejsu)

text: **To pytanie zostało ponownie otwarte w „Języku angielskim i użyciu”:** http://english.stackexchange.com/questions/53683/synonyms-for-multiplexing-and-demultiplexing/ To pytanie jest związane z czymś napisanym w C#, ale mogą na nie odpowiedzieć programiści znający _dowolny_ język, ponieważ pytanie nie dotyczy samego kodu, ale _nazywania_ tego, co ten kod robi. Wysłałem pytanie na StackOverflow zatytułowane Multipleksowanie wywołań metod interfejsu do jednego delegata i demultipleksowanie z pytaniem, czy ktoś zna jakikolwiek mechanizm, który będzie porządkował wywołania metod interfejsu do wywołań uniwersalnego delegata (lub interfejsu pojedynczej metody) w postaci `object AnyCall( int method_selector, object[] arguments )` i powrót z takich wywołań do oryginalnych wywołań metod interfejsu. Ponieważ nic odpowiedniego nie wyszło, poszedłem dalej i stworzyłem taki mechanizm. (Jeśli nie jest dla Ciebie jasne, co robi ten mechanizm, przeczytaj oryginalne pytanie.) Następnie napisałem artykuł o tym mechanizmie, który jest prawie gotowy i mam zamiar opublikować go na CodeProject, ale zanim to zrobię Potrzebuję pomocy przy wyborze nazwy. Nazewnictwo jest dla mnie bardzo ważne i uważam słowniki.com i thesaurus.com za narzędzia programistyczne, ale czasami pomoc rodzimych użytkowników języka jest niezbędna, zwłaszcza gdy próbuje się wprowadzić nową koncepcję lub zastosować istniejącą technikę, która do tej pory nie przypisano mu żadnej specjalnej nazwy i nadać jej specjalną nazwę, promując ją w ten sposób do koncepcji.


title: Dlaczego w większości witryn internetowych liczba wyświetleń wiadomości jest opóźniona?

text: Zauważ, że liczba wyświetleń filmów na YouTube jest zawsze opóźniona? Na przykład film ma około 1000 komentarzy i nadal ma 500 odsłon, a później będzie miał 10000 odsłon. Youtube nie jest w tym odosobniony. Większość forów dyskusyjnych jest zaimplementowanych w ten sposób, a liczniki wyświetleń są aktualizowane co około 10 minut. Czy ktoś zna powód tego? Dziękuję.


title: Ile wierszy na klasę to za dużo w Javie?

text: Jaka jest przydatna zasada, z Twojego doświadczenia, określająca, ile wierszy kodu jest za dużo dla jednej klasy w Javie? Żeby było jasne, wiem, że liczba linii nie jest nawet zbliżona do rzeczywistego standardu, który powinien być używany w danej klasie, a co nie. Zajęcia powinny być zaprojektowane zgodnie z właściwą filozofią OOP (enkapsulacja itp.). To powiedziawszy, praktyczna zasada może stanowić przydatny punkt wyjścia do rozważań dotyczących refaktoryzacji (tj. „Hmmm, ta klasa ma >n wierszy kodu; prawdopodobnie jest nieczytelna i wykonuje kiepską pracę enkapsulacji, więc mogę chcieć sprawdzić, czy powinna być refaktoryzowane w pewnym momencie”). Z drugiej strony, może spotkałeś się z przykładami bardzo dużych klas, które nadal dobrze przestrzegały projektu OOP i były czytelne i łatwe w utrzymaniu pomimo swojej długości? Oto powiązane, niezduplikowane pytanie dotyczące linii przypadających na funkcję.


title: co zrobić z najbardziej cenionym profesjonalistą firmy Microsoft, który uważa, że typy .NET są albo prymitywne, albo złożone?

text: Myślałem, że w .NET typy są albo typami wartości, albo typami referencyjnymi. Ale ten facet, zapytany o typy .NET, mówił o „typach pierwotnych” i „typach złożonych”. Rozumiem, że ludzie czasami używają różnych nazw w odniesieniu do tych samych pojęć, ale czy to nie dziwne, że certyfikowany specjalista Microsoft używa tego rodzaju terminologii?


title: Jak prowadzisz badania podczas programowania w parach?

text: Niedawno rozpocząłem nową pracę i łączenie w pary pomogło mi bardzo szybko osiągnąć tam efektywną pracę. Mam jednak trudny czas, kiedy musimy przeprowadzić krótkie wspólne badania podczas naszego przepływu pracy, obejmujące funkcje API, przykłady kodu lub opcje poleceń. Kierownictwo mojego zespołu nalega, abyśmy przeprowadzali wszystkie badania na naszej stacji parowania, a nie na poszczególnych laptopach, i synchronizowali nasze badania poprzez ustne negocjowanie kroków między różnymi zasobami sieciowymi. Badam, czytam i przyswajam informacje inaczej niż mój partner w parze i czuję się znacznie bardziej produktywny, kiedy mogę śledzić wątek poszukiwań na następnej stronie internetowej dokładnie wtedy, gdy chcę, zamiast starać się dotrzymywać dokładnego tempa i miejsca z tym, co czytanie mojego partnera. Oboje jesteśmy sprytni i szybcy, ale nie możemy powstrzymać się od poruszania się na różne sposoby i natychmiastowych prędkości, gdy rozwiązujemy różne rzeczy. Wydaje się, że o wiele łatwiej jest pogrzebać indywidualnie przez minutę, dopóki jedno z nas nie powie „mam to”, a potem znów się zbierzemy i zakodujemy. Kiedy łączysz program, jak radzisz sobie z krótkimi zadaniami badawczymi? Co działa najlepiej dla Ciebie i jak zachować synchronizację ze swoim partnerem?


title: Czego użyć do projektowania kodu?

text: Czego używasz, projektując, jak wszystko w programie będzie ze sobą współpracować? Używasz programu? Ołówek i papier? Biała tablica? Twój umysł? A jak reprezentujesz te projekty? UML? UML2? Coś innego? A jeśli nie jest to zbyt szerokie, co zwykle definiujesz w swoich projektach?


title: Jakie są najczęstsze pułapki związane z Cloud Development, na które się natknąłeś?

text: Patrzę na rozpoczęcie prac nad aplikacją opartą na chmurze i chciałbym usłyszeć o doświadczeniach kogokolwiek z pułapkami, na które natknęli się, szczególnie z punktu widzenia projektowego / architektonicznego podczas pracy z platformami w chmurze. Czy są jakieś oczekiwania, które mogą się znacznie zmienić w stosunku do zwykłej praktyki tworzenia stron internetowych? Rzeczy, o których chciałbyś wiedzieć, zanim zacząłeś, lub które mogły wpłynąć na Twój wybór platformy, gdybyś o nich wiedział? Zdaję sobie sprawę, że istnieją znaczne różnice między różnymi opcjami, ale uważam, że istnieją wystarczająco duże podobieństwa, aby uzasadnić zadanie tego pytania jako ogólnego pytania. Wszelkie doświadczenia z konkretnymi platformami również byłyby dobre - ciekawie byłoby zobaczyć, czy inni również znaleźli podobne rzeczy dziejące się na innych platformach...


title: Koncepcyjnie, jak stworzyć silnik reguł/ograniczeń (nie grafiki/fizyki) dla gry?

text: Chcę stworzyć prostą grę podobną do książek przygodowych typu „wybierz sam”. Gracz otrzymuje tekst narracyjny i może wybrać swoją akcję z listy możliwości. To z kolei prowadzi do nowego tekstu narracyjnego, ad infinitum. Jedynym haczykiem jest to, że w zależności od wcześniejszych decyzji lista możliwości może się różnić. Na pierwszy rzut oka brzmi to jak ładunek instrukcji if-else, co sugeruje, że silnik reguł byłby na miejscu. Ale dla mnie brzmi to również jak maszyna skończonych stanów. Zaraz napiszę to w Javie, a może Groovy. Obecnie bardziej interesują mnie kwestie koncepcyjne, tj. jak to zrobić na szerokim poziomie (jak ludzie realizują szachy lub gry karciane?), ale mile widziane są też porady dotyczące konkretnej biblioteki. Oczywiście „silnik gry” z tytułu nie odnosi się do wykrywania kolizji czy innej mechaniki fizyki/grafiki, ale do logiki decydującej o tym, jakie opcje gracz ma w danej sytuacji i jego aktualnym stanie.


title: Właśnie dostałem wstępną ofertę pracy. Jak prosić o więcej bez żadnego uzasadnienia?

text: Właśnie dostałem wstępną ofertę pracy programisty za $75k + benefity. Jest to oferta wstępna, więc wydaje mi się, że powinienem złożyć kontrofertę, aby uniknąć niepotrzebnego pozostawiania pieniędzy na stole, ale nigdy wcześniej nie negocjowałem wynagrodzenia i nie mam żadnego prawdziwego powodu, aby prosić o więcej pieniędzy poza: „Nie powinienem po prostu przyjąć wstępnej oferty”. Pytania... 1. Jeśli jestem zadowolony z początkowej oferty, czy mądrze byłoby dać kontrofertę i poprosić o więcej pieniędzy i zaryzykować utratę oferty pracy? 2. Jeśli tak, jak mam podejść do prośby o więcej bez prawdziwego uzasadnienia? Powinienem wspomnieć, że mam już pracę (w bardzo znanej firmie programistycznej), ale płaci ona 16 tys. USD rocznie mniej bez żadnych korzyści. W związku z tym nie czuję, że posiadanie już pracy poprawia moją pozycję. Z góry dziękuję za mądrość!


title: Co jest potrzebne, aby programista samouk mógł przejść na wyższe stanowiska i stanowiska kierownicze?

text: Jestem programistą samoukiem, który ma obecnie wystarczająco dużo doświadczenia, aby przeciwstawić się moim kolegom machających stopniami. Mimo to czuję, że brakuje mi pewnych ważnych umiejętności, aby awansować na stanowisko specjalisty wyższego szczebla w wiodącej roli, szczególnie w aspektach inżynierii, planowania i projektowania oprogramowania. Dotknąłem powierzchni UML, ERM/ERD, miałem doświadczenie w projektach zarządzanych za pomocą wodospadu i Scrum. Czuję, że czegoś brakuje, bo za każdym razem, gdy zaczynam nowy projekt, nie wiem od czego zacząć. Czy powinienem zacząć tworzyć diagramy i jak? Czy powinienem najpierw zacząć pisać dokument opisujący projekt na poziomie technicznym, czy powinienem najpierw zagłębić się w pisanie wstępnych testów i kodu lub pseudokodu? Chciałabym wiedzieć, jaka w moim przypadku byłaby najlepsza droga naprzód, dowiedzieć się, jak mogę rozwiązać ten problem w przyszłości i być lepszym w prowadzeniu i rozpoczynaniu projektu. Niewiele nie wiem o moich narzędziach technicznych i językach, ale kiedy robi się abstrakcja, mam kłopoty.


title: Przechodzisz z MySQL na PostgreSQL?

text: Spędziłem ostatni rok, stając się naprawdę zadowolonym z MySQL, ale ze względu na rosnącą popularność i chęć ujednolicenia moich aplikacji internetowych za pomocą Heroku, chciałbym zamiast tego zacząć używać PostgreSQL do moich aplikacji internetowych. Istnieją zasoby do nauki PostgreSQL, ale tak naprawdę nie chcę ponownie wyjaśniać mi pojęć dotyczących baz danych od podstaw i nie chcę ponownie uczyć się wszystkich rzeczy, które są prawie takie same. Jakie są krytyczne różnice, które muszę zrozumieć - składniowe i pojęciowe - między MySQL i PostgreSQL, które będą miały na mnie wpływ na co dzień?


title: Jakie są techniki uczenia programistów wzorców projektowych?

text: Jestem w sytuacji, w której moi programiści proszą o nauczenie się wzorców projektowych. Do tej pory stworzyliśmy klub książki czytający Heads First Design Patterns. Podczas tego opracowaliśmy przykłady i rozmawialiśmy o tym, jak zastosować to do obszarów naszych własnych produktów. Problem polega na tym, że te ćwiczenia się nie trzymają i nadal proszą o ich naukę. Ten post zawiera kilka świetnych przykładów książek, z których moglibyśmy skorzystać, ale szukam również technik, jak uczyć informacji. Co więc zrobiłeś, aby nauczyć innych programistów wzorców projektowych?


title: Jakie są dobre praktyki wykonywania optymalizacji opartej na oprogramowaniu?

text: W projekcie, nad którym pracuję, napotkaliśmy pewne problemy z wydajnością. Zdecydowaliśmy się zrezygnować z hibernacji na rzecz zwykłego Jdbc, aby zwiększyć wydajność bazy danych. Konwertując nasz kod do Jdbc, osiągnęliśmy wydajność, do której dążyliśmy, ale wydaje się, że jakość kodu uległa pogorszeniu. A wdrożenie systemu zajęło nam trzy miesiące, co mnie zastanawia, czy dodawanie większej ilości sprzętu byłoby tańsze. **Co byś zrobił, aby zoptymalizować swoją aplikację w sposób ograniczający wpływy uboczne na architekturę i złożoność?** (Głównie interesują odpowiedzi z perspektywy aplikacji internetowych, ale mile widziane są inne perspektywy)