title: Ile błędów można się spodziewać

text: W poprzedniej pracy (około 2010 r.) mój menedżer wspomniał, że prowadzi badania nad wskaźnikami jakości. Najważniejsze jest udzielenie odpowiedzi na pytanie **ile błędów powinienem się spodziewać?** Celem jest próba przewidzenia, ile błędów nadejdzie, a co ważniejsze, ile błędów _prawdopodobnie jeszcze nie znaleźliśmy_. Z tym wskaźnikiem wiążą się pewne problemy. Historycznie rzecz biorąc, mamy tendencję do patrzenia na „wiersze kodu”, co jest okropnym sposobem mierzenia funkcjonalności. Punkty funkcjonalne wydają się lepsze, ale nie mam łatwego sposobu na opisanie i zmierzenie, ile punktów funkcyjnych ma dany program. Inną kwestią jest to, że jakość będzie się oczywiście różnić (szeroko) w zależności od tego, czy masz naprawdę okropną kontrolę jakości/programistów, czy naprawdę niesamowitą, czy gdzieś pośrodku. Kolejną kwestią jest oczywiście to, co definiujesz jako błąd. Niektóre zespoły postrzegają każdą zmianę funkcji jako błąd; inni próbują dzielić (np. nowa funkcjonalność kontra zepsuta, ale funkcjonalność „działa zgodnie z oczekiwaniami”). Czy są jakieś badania lub prace, które pomagają zespołom programistycznym identyfikować i przewidywać, ile błędów powinny znaleźć?


title: Określ lepszą praktykę kodowania

text: Jako początkującemu programiście tworzenie aplikacji zawsze było trudne, ponieważ wciąż jestem na etapie nauki. Rozumiem, że aby osiągnąć określony efekt lub funkcję w aplikacji, będzie wiele sposobów na osiągnięcie tego samego rezultatu. Jednak czy powinienem po prostu stworzyć funkcję do jej stanu roboczego, co oznacza, że dopóki działa, tak jak tego chcę, powinno być w porządku. Czy jacyś koledzy programiści wyższego poziomu mogą uprzejmie poinformować mnie, jak należy robić rzeczy?


title: Czy konieczne jest napisanie komentarza javadoc dla KAŻDEGO parametru w podpisie metody?

text: Jeden z programistów z mojego zespołu uważa, że konieczne jest napisanie komentarza javadoc dla KAŻDEGO parametru w podpisie metody. Nie sądzę, że jest to konieczne, a wręcz sądzę, że może to nawet zaszkodzić. Po pierwsze, uważam, że nazwy parametrów powinny być opisowe i samodokumentujące. Jeśli nie jest od razu oczywiste, do czego służą twoje parametry, prawdopodobnie robisz to źle. Rozumiem jednak, że czasami nie jest jasne, do czego służy parametr, więc w takich przypadkach tak, powinieneś napisać komentarz javadoc wyjaśniający parametr. Ale myślę, że nie trzeba tego robić dla KAŻDEGO parametru. Jeśli już wiadomo, do czego służy parametr, komentarz javadoc jest zbędny; po prostu tworzysz dla siebie dodatkową pracę. Co więcej, tworzysz dodatkową pracę dla każdego, kto musi dbać o Twój kod. Metody zmieniają się w czasie, a utrzymywanie komentarzy jest prawie tak samo ważne jak utrzymywanie kodu. Ile razy widziałeś komentarz taki jak „X robi Y ze względu na Z” tylko po to, aby zobaczyć, że komentarz jest nieaktualny, a w rzeczywistości metoda nie przyjmuje już parametru X? Dzieje się tak cały czas, bo ludzie zapominają aktualizować komentarze. Twierdzę, że wprowadzający w błąd komentarz jest bardziej szkodliwy niż jego brak. A zatem istnieje niebezpieczeństwo nadmiernego komentowania: tworząc niepotrzebną dokumentację, robisz więcej pracy dla siebie i wszystkich innych, nie pomagasz nikomu zrozumieć swojego kodu, a zwiększasz prawdopodobieństwo, że kod się skończy. -of-date komentarze w pewnym momencie w przyszłości. Szanuję jednak drugiego programistę w moim zespole i akceptuję, że być może ma rację, a ja się mylę. Dlatego zadaję wam moje pytanie, koledzy programiści: Czy rzeczywiście konieczne jest napisanie komentarza javadoc dla KAŻDEGO parametru? Załóżmy tutaj, że kod jest wewnętrznym kodem mojej firmy i nie zostanie wykorzystany przez żadną osobę z zewnątrz.


title: Twórcy backendu odrzuceni przez historie użytkowników

text: Planowałem pokroić w pionie rozwój backendu na historyjki użytkowników. Ale facet od backendu w naszym zespole zaczął narzekać, że to sprawia, że jego praca jest niewidoczna. Moja odpowiedź była taka, że * na spotkaniach dotyczących planowania i przeglądu sprintów omawiamy zadania backendowe przed interesariuszami, aby było to widoczne, a * utrzymanie wysokiej jakości podczas projektu spowoduje wolniejsze tempo startu niż inne zespoły, ale będziemy mieli stabilna prędkość podczas projektu. A szybkość jest bardzo widoczna dla interesariuszy. Nadal nalega na opowiadanie takich historii, jak: „Jako programista muszę mieć warstwę domeny, aby móc zawrzeć logikę biznesową”. Jak mogę rozwiązać problem, zanim zanieczyści zespół? Podstawą problemu jest to, że nasze kierownictwo systematycznie traktuje pracę backendową jako niewidoczną i dzwoni do górników deweloperów lub innych pejoratywnych terminów.


title: wymagania funkcjonalne - używać sformułowań opartych na czasownikach?

text: ### Pytanie Czy wymagania funkcjonalne w dokumencie wymagań powinny używać sformułowań opartych na czasownikach? ### Kontekst Zadanie szkolne, praca w zespole, praca poprzez SDLC. Dokument wymagań został ukończony i teraz zajmujemy się projektowaniem. ### Problem Dokument wymagań zawiera wyliczoną listę tego, co nazwałbym cechami aplikacji - wymaganiami funkcjonalnymi. Na tej liście znajdują się rzeczy, o których pomyślałbym raczej jako „jak jest” niż „co jest”, a teraz, próbując pracować nad projektem, czuję, że część projektu została przedwcześnie podyktowana. Nie robiłem tego wcześniej! Dla mnie powinienem zajmować się ściśle rzeczami, które opisują „co”. ### Przykład aktualnego Udawaj, że zadanie polega na zrobieniu omletu. Aukcja: rozbij jajko, wbij do miski, wymieszaj itp.; przekracza linię na terytorium jak. Na tej ścieżce podążają sformułowania takie jak: tworzenie, generowanie, lista, obliczanie, określanie, walidacja itp. - w zasadzie czasowniki. W tej chwili mam listę wymagań, które są częściowo zakorzenione w czasownikach. Mój pomysł na dokument wymagań dla omletu byłby bardziej podobny do: ma dwa jajka, x uncji szynki, x uncji bekonu, x uncji sera montery-jack, x uncji kolendry itp. ). Mógłbym i mógłbym wypowiedzieć się przed sfinalizowaniem dokumentu wymagań, gdybym miał jakieś doświadczenie.


title: Czy istnieją wzorce projektowe lub uogólnione podejścia do symulacji cząstek?

text: Pracuję nad projektem (na uczelni) w C++. Celem jest napisanie programu, który może mniej więcej symulować wiązkę cząstek przelatujących przez synchrotron LHC. Nie chcąc się spieszyć, ja i mój zespół zastanawialiśmy się, jak to wdrożyć i zastanawiałem się, czy istnieją ogólne wzorce projektowe, które służą do rozwiązywania tego rodzaju problemów. Ogólne podejście, które do tej pory wymyśliliśmy, jest następujące: * istnieje `Świat`, który przechowuje wszystkie obiekty * możesz dodawać do tego świata obiekty, takie jak `Cząstka`, `Dipol` i `Kwadrupol` * czas jest skrócony w dyskretnych krokach i w każdym momencie, dla każdej „cząstki” siły magnetyczne i elektryczne generowane przez każdy obiekt w „świecie” są obliczane i sumowane (na szczęście elektromagnetyzm jest liniowy). * każda `cząstka` porusza się odpowiednio (używając prostego podejścia estymacji do rozwiązania równań ruchu różniczkowego) * zapisz pozycje `cząstek` * powtórz To wydaje się dobre podejście, ale na przykład trudno jest wziąć pod uwagę symetrie, które mogą być obecne (takie jak pole magnetyczne każdego „kwadrupola”) i czy jest to zatem nieoptymalne. Aby wziąć pod uwagę takie symetrie, jak w przypadku pola „kwadrupol”, byłoby znacznie łatwiej (również) uczynić przestrzeń dyskretną i jakoś przechowywać gdzieś formę pola „kwadrupol”. (Ponieważ są przechowywane około 2532 `kwadrupolowe`, powinno to prowadzić do ogromnego wzrostu wydajności, bez konieczności ponownego obliczania każdego pola `kwadrupolowego`). Czy są więc jakieś wzorce projektowe? Czy podejście „światowe” jest wykonalne, czy jest to staromodne, złe programowanie? A co z symetrią, jak to się ogólnie bierze pod uwagę?


title: Czy uczeń powinien być Jack of All Trades?

text: Obecnie jestem studentem i wybieram się na 8-miesięczny staż w styczniu tego roku po moim pierwszym roku studiów i planuję poszerzyć swoje umiejętności programowania w weekendy lub wieczory. Od około 2-3 lat uczyłem się tyle, ile mogłem tylko dlatego, że tak bardzo podobało mi się programowanie, kiedy zaczynałem 2 lata temu. Niektóre rzeczy, które wiem to: * kontrola kodu źródłowego * Java * Python * C * C++ * Bash * Linux Problem w tym, że znam tylko podstawy powyższego, nic dogłębnego (poza Javą) i zastanawiam się, co by mi dało więcej w przyszłości, kiedy skończę studia. Czy powinienem nauczyć się czegoś nowego? (Chciałem spróbować sił w SICP) A może powinienem rozwinąć coś, co teraz znam (lubię programować na niskim poziomie) i zbudować coś użytecznego i dużego? FWIW, zamierzam używać Javy (JSP, serwlety) i SQL na moim stażu.


title: Dlaczego ludzie mylą ciągi typu C z ciągami STL?

text: W zeszłym tygodniu widziałem co najmniej trzy pytania, w których ludzie byli zdezorientowani co do różnic między `char *` a `std::string` lub popełnili kilka powiązanych błędów. Nie zrozum mnie źle, nie mam z tym problemu, po prostu nie rozumiem dokładnego powodu tego. Może to był tylko zbieg okoliczności.


title: Jak radzić sobie z Programowaniem != Problem z opisem stanowiska pracy?

text: Obecnie jestem w sytuacji, w której wiele osób prawdopodobnie się tutaj znajdzie: uwielbiam programować, robię wiele fajnych projektów pobocznych, ale to nie jest mój zawód. Pracuję jako kierownik projektu elektrotechniki, ale w pewnym momencie na początku mojej kariery napisałem aplikację, która rozwiązywała trudny problem z przetwarzaniem sygnałów. Teraz firma tworzy produkt, który będzie zawierał te same funkcjonalności, które stworzyłem jakiś czas temu. Poprosili mnie o pomoc w zaprojektowaniu go do systemu i potencjalnej pomocy w jego zaprogramowaniu. Moje pytanie do społeczności brzmi: jak radziłeś sobie z tego typu sytuacjami w przeszłości, jeśli chodzi o płace i odpowiedzialność? Chociaż bardzo chciałbym programować jako praca na pełen etat, nie jestem gotowy, aby przejść na tę rolę. Byłbym szczęśliwy mogąc nad tym pracować jako dodatek do mojej pracy, ale uważam, że ten rodzaj specjalistycznej pracy zasługuje na jakąś formę premii lub umowy pobocznej. Wyobrażam sobie, że może to również prowadzić do stałej odpowiedzialności za wsparcie, ale myślę, że może to zostać przekazane normalnemu zespołowi programistycznemu po zakończeniu projektowania i początkowej implementacji. Czy byłaby to nieuzasadniona prośba w typowym Fortune500?


title: Dlaczego TDD tutaj nie działa?

text: Chcę napisać klasę `A`, która ma metodę `calculate(<params>)`. Ta metoda powinna obliczyć wartość przy użyciu danych z bazy danych. Napisałem więc klasę `Test_A` do testów jednostkowych (TDD). Dostęp do bazy danych odbywa się za pomocą innej klasy, którą wyśmiewałem klasą, nazwijmy ją `Accessor_Mockup`. Teraz cykl TDD wymaga ode mnie dodania testu, który kończy się niepowodzeniem i wprowadzenia najprostszych zmian do „A”, aby test przeszedł. Dodaję więc dane do `Accessor_Mockup` i wywołuję `A.calculate` z odpowiednimi parametrami. **Ale dlaczego `A` w ogóle ma używać klasy akcesora?** Byłoby prościej (!), gdyby klasa po prostu „znała” wartości, które mogłaby pobrać z bazy danych. Do każdego testu, który piszę, mogłem wprowadzić taką nową wartość (lub gałąź if lub cokolwiek). Ale poczekaj… TDD to więcej. Jest część refaktoryzacji. Mogę dokonać refaktoryzacji klasy A przy użyciu akcesora DB. Ale mógłbym to refaktoryzować również w inny sposób (np. wprowadzając nowe klasy enkapsulujące dane). Więc znowu: **Jak pisać testy, które zmuszają A do korzystania z bazy danych (i niczego więcej)?**


title: Jak wygląda procedura identyfikacji, która rejestruje urządzenie mobilne na koncie abonenta i instaluje zakupione treści?

text: Wiemy, że w systemie, takim jak Apple Store lub Google Play, jest kilka ruchomych części. Przynajmniej; * Urządzenie posiada unikalny identyfikator sprzętowy lub kartę SIM * Użytkownik ma login/hasło * Witryna „sklepu” ma pewne krypto W jakiej kolejności i formacie (cyfr/zwykły tekst) dane są wymieniane między urządzeniem a oprogramowaniem sklepu przed zawartością jest zainstalowane?


title: API dla hoteli i lotów

text: Chcę zaimplementować hotele i linie lotnicze w mojej aplikacji internetowej. Ludzie będą przychodzić i szukać hoteli i biletów lotniczych oraz porównywać wyniki. Jakie są sposoby uzyskania tych informacji? Czy istnieje API, które daje mi to wszystko na cały świat? LUB jakie są inne możliwe sposoby uzyskania tych danych? Potrzebujesz jakiegoś Crawlera?


title: Tworzenie nowego formatu pliku: Najpierw napisz kod lub dokumentację?

text: Tworząc nowy format pliku dla aplikacji, możesz najpierw napisać kod lub dokumentację. Pisząc najpierw dokumentację, masz lepsze pojęcie o tym, co powinieneś zaimplementować. Jednak może zajść potrzeba zmiany wielu dokumentacji, które napisałeś później podczas pisania kodu, ponieważ możesz odkryć, że pewne rzeczy nie są zbyt wydajne do zaimplementowania w ten sposób. Tak więc: **Gdy tworzysz nowy format pliku, co powinieneś najpierw napisać: kod czy dokumentację?**


title: Co sprawia, że język jest bardziej odpowiedni dla sztucznej inteligencji?

text: Zawsze czytałem, że LISP dobrze nadaje się do sztucznej inteligencji, ale nigdy nie dowiedziałem się dlaczego.


title: Czy kompilatory Intela są naprawdę lepsze od Microsoftu?

text: Lata temu byłem zaskoczony, gdy odkryłem, że Intel sprzedaje kompilatory zgodne z Visual Studio. Wypróbowałem go w szczególności dla C/C++ oraz fantastycznych narzędzi diagnostycznych. Ale kod po prostu nie był tak intensywny obliczeniowo, aby zauważyć różnicę. Jedyne wrażenie było takie: czy Intel naprawdę zrobił to za mnie właśnie teraz, wow, niesamowite narzędzia z rozdzielczością nanosekundową, niewiarygodne. Ale proces się skończył i zespół nigdy poważnie nie rozważał zakupu. **Z Twojego doświadczenia wynika, że jeśli koszt licencji nie ma znaczenia, który sprzedawca jest zwycięzcą?** _Nie jest to szerokie lub niejasne pytanie ani próba wywołania świętej wojny. Tego rodzaju pytanie dotyczy dwóch bardzo widocznych narzędzi. Nikt nie lubi, gdy narzędzia mają jakieś tajemnice lub niespodzianki. A wybory między najlepszymi a najlepszymi są zawsze bolesne. Rozumiem też, że trawa jest zawsze bardziej zielonym argumentem. Chcę posłuchać wszystkich historii typu „a co, jeśli”._ _A co, jeśli Intel po prostu lokalnie zoptymalizuje go pod kątem chip stepping miesiąca, a nie każdy docelowy sprzęt będzie działał tak dobrze, jak skompilowany przez Microsoft? Co jeśli sprzęt AMD jest celem i wszystko będzie zwalniać bez powodu? Lub z drugiej strony, co jeśli sprzęt Intela ma tak wiele niezauważalnych możliwości, że twórcy kompilatorów Microsoftu są zbyt powolni, aby go adoptować i nigdy nie implementują go w kompilatorze? Co jeśli oba są dokładnie takie same, w rzeczywistości jedna baza kodu po prostu zapakowana w dwa różne pudełka i licencjonowana dla obu dostawców przez jakiś zewnętrzny sklep?_ _I tak dalej. Ale ktoś zna kilka odpowiedzi._


title: jak prześledzić skrypt formularza Drupala

text: Jestem zupełnie nowy w Drupalu. Przejęta przeze mnie witryna www.statehr.com ma na pierwszej stronie formularz, który a) oczywiście przesyła i przetwarza dane, oraz b) sprawdza, czy nie ma zduplikowanej nazwy użytkownika, na przykład za pośrednictwem zdarzenia onkeypress. Czy ktoś może dać mi pomysł, gdzie znaleźć skrypt, który otrzyma post? Akcja polega na tym, że .htaccess prawdopodobnie ją przechwytuje i widzę dwa kluczowe ukryte pola form_id form_build_id, które prawdopodobnie pasują do siebie po stronie odbierającej. Formularz umieszcza dane w tabeli użytkowników, ale chcę z nim zrobić jeszcze kilka rzeczy.


title: zoptymalizuj czytelną dla człowieka bazę danych z indeksem

text: muszę przechowywać dużą ilość danych - około 10 milionów wpisów formatu unikalny hash (64 znaki), wartość 1 (5 znaków), wartość 2 (9 znaków) będę czytać i usuwać (ale nie aktualizować) te dane w krótkim odstępie czasu. na przykład mogę napisać 10 wierszy, następnie przeczytać 3 i usunąć 3 wiersze, zanim przejdę do kolejnych zapisów i odczytów... jest to jednowątkowy program komputerowy, więc odczyty są inicjowane dopiero po zakończeniu zapisywania i usuwania. chciałbym uniknąć korzystania z bazy danych, aby dane były czytelne dla człowieka z systemu plików i aby osoby, które pobierają i używają mojego programu, mogły je zobaczyć i sprawdzić samemu. oczekuję, że moi użytkownicy będą korzystali z systemu operacyjnego Linux, a mój program jest napisany w Pythonie. wymyśliłem trzy możliwe opcje przechowywania tych danych: **opcja 1** umieść dane w jednym pliku. ponieważ skróty są unikatowe, mogę je uporządkować w kolejności rosnącej jak indeks, aby dać czasy odczytu `log2 N`. usuwanie i wstawianie będzie się zdarzać często i spowalnia proces, ponieważ `N` staje się duże. **opcja 2** użyj unikalnego skrótu jako nazwy pliku i umieść wartości wewnątrz tego pliku. byłaby to moja preferowana opcja, o ile nie ma oczywistych wad wydajności? Wiem, że niektóre systemy plików zwalniają, gdy w jednym katalogu istnieje duża liczba plików. i naprawdę nie mogę zrobić żadnych założeń co do tego, jakiego systemu plików będą używać użytkownicy mojego programu. muszę wybrać rozwiązanie, które jest szybkie we wszystkich systemach plików. **opcja 3** użyj unikalnego hasza do stworzenia katalogu do przechowywania wartości. więc na przykład, jeśli rekord ma hash `abcd`, utworzyłbym katalog i plik `base_dir/a/b/c/d. txt`. czy to omija problem z wydajnością systemu plików? czy jest to tak samo złe, jak opcja 2, w zależności od typu systemu plików, z którego korzysta użytkownik? **pytanie**, więc naprawdę szukam pomocy, aby zdecydować, którą opcję wybrać. również jeśli masz jakieś inne opcje, które są lepsze od tych, które tutaj wymieniłem, chciałbym je usłyszeć. może jakieś oprogramowanie bazodanowe, takie jak mysqli, które niszczy dane w czytelnym dla człowieka tekście? to byłoby naprawdę idealne, ale wyobrażam sobie, że większość baz danych używałaby binarnych dla wydajności...


title: Jakiego wzorca projektowego powinienem użyć do importu, aktualizacji, eksportu

text: Muszę stworzyć prosty walidator płatności. Na poniższym diagramie klas starałem się przedstawić model płatności. Jak widać, każdy rodzaj płatności dziedziczy po klasie Payments. ![Schemat płatności](http://i.stack.imgur.com/wd1Yw.png) Teraz chcę pracować z tymi płatnościami, ale ukryć szczegóły, aby użytkownik miał dostęp tylko do tego, czego potrzebuje. A te rzeczy to: `Załaduj` płatności ze ścieżki i zwróć listę płatności `Zapisz` płatności do ścieżki `Update` wprowadź listę płatności i zwróć zaktualizowaną listę Nie jestem pewien czy sposób, w jaki to robię jest poprawny. Moim pomysłem byłoby wykorzystanie wzorca Facade, dlatego należy stworzyć klasę `PaymentsModel` zawierającą następujące metody: public class PaymentsModel { IList<ToBePaidPaymentsDto> GetToBePaidPayments(string path){ return new IList<ToBePaidPaymentsDto>(); } IList<DonePaymentsDto> GetDonePayments(string path){ return new IList<DonePaymentsDto>(); } IList<MissedPaymentsDto> GetMissedPayments(string path){ return new IList<MissedPaymentsDto>(); } ... } Następnie utwórz klasę abstrakcyjną: public abstract class Płatności<T> { protected string Ogranicznik {get; private set;} protected int NumberOfHeaders {get; private set;} public abstract IList<T> LoadRecords(string path); public abstract IList<T> UpdateRecords(IList<T> rekordy); public void SaveRecords(string path, DataGridViewRowCollection records) { } } gdzie T jest obiektem transferu danych w zależności od typu płatności, więc: klasa `ToBePaidPayments` użyje `ToBePaidPaymentsDto` klasa `DonePayments` użyje `DonePaymentsDto` jak przedstawiono poniżej public class PaymentsToBePaid : Payments<IcsToBePaidPaymentDto> { public override IList<IcsToBePaidPaymentDto> LoadRecords(string path){ return null; } publiczne nadpisanie IList<IcsToBePaidPaymentDto> UpdateRecords(IList<IcsToBePaidPaymentDto> records){ return null; } } i public class PaymentsDone : Payments<IcsDonePaymentDto> { public override IList<IcsDonePaymentDto> LoadRecords(string path){ return null; } publiczne nadpisanie IList<IcsDonePaymentDto> UpdateRecords(IList<IcsDonePaymentDto> records){ return null; } } Teraz moje ostatnie pytanie brzmi - czy robię to poprawnie? Czy stosuję prawidłowy wzorzec projektowy i czy stosuję go poprawnie? Dziękuję za radę.


title: Wielowątkowość JavaScript

text: Cóż w dzisiejszych czasach JavaScript jest głównym graczem we wszystkich technologiach tworzenia stron internetowych, po stronie klienta w celu ulepszenia interfejsu użytkownika, logiki po stronie klienta, na niektórych serwerach internetowych również logiki po stronie serwera Dodaj do tego fakt, że ludzie (przynajmniej niektórzy z nich) zaczęli przejście w tworzeniu gier internetowych z flasha na javascript i HTML5 Czy nie nadszedł czas, aby wspierać wielowątkowość! czy istnieją przeglądarki, które pozwalają na wielowątkowość JavaScriptu, czy jest on dostępny w jakichś standardach, HTML5 lub przyszłych wersjach?!


title: Czy zgłaszanie błędów w porzuconych projektach open source jest niegrzeczne?

text: Czy zgłoszenie błędu w porzuconym projekcie open source lub porzuconej gałęzi wciąż trwającego projektu jest uważane za niegrzeczne? Czy jest to postrzegane jako składanie prośby byłych autorów projektu, których nie chcą już spełniać, czy też raporty o błędach postrzegane są jedynie jako opis aktualnej wersji oprogramowania, które mogą zostać naprawione przez inna osoba w przyszłości?


title: Licencja na zawartość niekodowaną GPL/LGPL/MPL

text: Chcę użyć słownika (w zasadzie pliku tekstowego, bez kodu), który jest dołączony do wtyczki do sprawdzania pisowni w otwartym biurze. Wtyczka jest na licencji GPL/LGPL/MPL, której nie rozumiem. czy to legalne? Jeśli jest to nielegalne, co jeśli napiszę skrypt, który używa wspomnianej wtyczki open office do generowania słownika (zakładając, że jest to technicznie możliwe, skrypt wygeneruje wszystkie możliwe permutacje liter, przekaże go do wtyczki i zapisze poprawną jedynki) ? Będę używał słownika w komercyjnej aplikacji o zamkniętym kodzie źródłowym. Słownik jest w języku, który ma bardzo mało zasobów online i poza tworzeniem własnego słownika nie ma żadnych alternatyw. Wyjaśnienie: Pomysł na skrypt, o którym wspomniałem powyżej, nie jest _dziwną_ techniką, wygenerowałbym dokument ze wszystkimi możliwymi słowami i użyłbym otwartego biura z zainstalowaną wtyczką, aby pokazać błędy ortograficzne i je usunąć, czy nie jest to zamierzone zastosowanie wtyczki (sprawdzanie pisowni)?


title: Jak znaleźć doświadczenie zawodowe jako nieletni?

text: Obecnie mam 16 lat i uważam się za dobrego programistę. Przez ostatni rok pracowałem jako freelancer iz izraelską firmą (która obsługuje inne międzynarodowe firmy) i do tej pory całkowicie usatysfakcjonowałem moich klientów stałą oceną 10/10. Jednak ostatnio próbowałem znaleźć doświadczenie zawodowe w prawdziwym życiu we wpływowej firmie programistycznej, ale z ograniczonym (i przez ograniczony mam na myśli nie) sukcesem (aplikowałem tylko w mniejszych firmach, z których wszystkie były dostępne w reklamach stanowiska pracy). Wymagane jest odbycie tygodniowego doświadczenia zawodowego w moim stanie, ale zrobiłem to już w szpitalu (aby wypróbować wybór kariery mojego rodzica dla mnie 0 lekarza) i chcę spróbować w firmie programistycznej . Wysłałem około 4 e-maili do różnych firm na ten temat, ale nie otrzymałem jeszcze żadnych odpowiedzi (minęły tygodnie). Jak mam zdobyć doświadczenie zawodowe jako 16-latek?


title: Uczę się Javy i zastanawiam się, jak i kiedy uczyć się Androida?

text: Uczę się Javy i zastanawiałem się, kiedy najlepiej będzie dla mnie stworzyć coś na Androida? Mam dwie konkretne obawy. 1. Czym różni się interfejs Android API od głównego interfejsu Java API? Czy są podobne, czy radykalnie różne? 2. Słyszałem, że trzeba wykonać wiele wersji danej aplikacji na różne urządzenia. Czy to jest poprawne? Nie mam pojęcia, od czego zacząć, odpowiadając na te pytania.


title: Jak sprawić, by manager pozyskał mi korzystne projekty

text: Z jakiegoś dziwnego powodu mój menedżer daje mi gruntowną pracę, której nikt nie chce wykonywać. Obecnie pracuje nad projektem Flex/AS, z którym mam wcześniejsze doświadczenie, a nie, ale nie chce mnie do tego projektu skierować. Przytacza inne potrzeby związane z projektami i trzyma mnie przy nich.. czy to czas, aby wyjść lub porozmawiać z nim lub jego szefem???


title: Dlaczego grafika wektorowa z akceleracją sprzętową nie została zdjęta?

text: Pracuję nad aplikacją, która umożliwia manipulowanie ścieżkami wektorowymi w czasie rzeczywistym przy 60 klatkach na sekundę i jestem bardzo zaskoczony tym, jak mało jest informacji na ten temat. Początkowo próbowałem zrealizować mój pomysł za pomocą CoreGraphics, ale nie działał on odpowiednio do moich celów. Odkryłem wtedy, że istnieje standard Khronos dla grafiki wektorowej z akceleracją sprzętową o nazwie OpenVG i na szczęście życzliwa dusza napisała półimplementację OpenGL ES o nazwie MonkVG. Ale pomimo tego, że OpenVG jest bardzo praktycznym API, wydaje się, że Khronos jest mniej lub bardziej porzucony. Według Wikipedii, od 2011 roku grupa robocza „postanowiła… nie organizować regularnych spotkań [sic] w celu dalszej standaryzacji”. Dokumentacja, najlepiej jaką mogę znaleźć, składa się tylko z jednej karty referencyjnej. Co więcej, w Internecie nie ma prawie żadnych przykładów OpenVG. W mgnieniu oka mogę znaleźć setki samouczków OpenGL, ale najwyraźniej brakuje OpenVG. Można by pomyśleć, że wektory przyspieszane sprzętowo byłyby ważniejsze w dzisiejszym świecie szybko rosnących rozdzielczości, i wydaje się, że wiele firm wdraża własne sposoby robienia tego. Na przykład Qt i Flash mają schematy wektorów przyspieszanych sprzętowo, a wiele narzędzi Adobe ma akcelerację sprzętową jako opcję. Ale wygląda na to, że koło zostaje wynalezione na nowo, gdy standard już istnieje! Czy brakuje mi czegoś w OpenVG, co czyni go nieodpowiednim do użytku w świecie rzeczywistym? A może po prostu norma nie przyjęła się na czas i teraz jest skazana na zapomnienie? Czy uważasz, że w przyszłości jest miejsce na ustandaryzowane API dla grafiki wektorowej z akceleracją sprzętową, czy po prostu łatwiej będzie korzystać z tradycyjnych technik rastrowych? A może wektory po prostu wychodzą, zanim jeszcze się tam znalazły?


title: Tworzenie aplikacji P2P przy użyciu Java

text: Przygotowuję się do rozpoczęcia 3 roku projektu w Javie. Celem jest stworzenie aplikacji P2P, w której użytkownicy mogą jednocześnie pisać, rysować i edytować. Połączenie między nimi musi być P2P. W tym momencie nadal nie znam szczegółów dotyczących projektowania itp. i po prostu czytam. Zrobiłem wcześniej prostą aplikację sieciową, ale była to klient/serwer. Na co powinienem zwrócić uwagę, aby zrozumieć, jak stworzyć sieć P2P? Czy muszę używać JXTA, czy w przypadku aplikacji na małą skalę lepiej zrobić własny protokół? PS. Zamieściłem to samo pytanie na Stack Overflow, ale zostało zamknięte. Mam nadzieję, że to lepsze miejsce. **Aktualizacja** JXTA okazała się nieco zbyt skomplikowana jak na moje potrzeby. W rezultacie korzystałem z JGroups, które okazały się bardzo proste w obsłudze i wystarczająco wydajne dla moich potrzeb.


title: Nocne kompilacje dla jednoosobowych projektów

text: Pracuję nad wrapperem C++ dla libpcap i chciałbym bardziej zagłębić się w kontrolę wersji, ponieważ nie mam w tym doświadczenia (jedynym powodem, dla którego go użyłem, było umieszczenie kodu na GitHub :)). Czy ma sens planowanie nocnych kompilacji dla jednoosobowego projektu? Jakie są z tego korzyści?


title: Product Owner i testy automatyczne

text: Jednym z twierdzeń związanych z rozwojem w stylu BDD jest to, że wypełnia lukę między Właścicielem Produktu a programistami: Właściciel Produktu pisze historię, która może zostać przekształcona w równoważną „ramkę” automatycznego testu, która w końcu powinna przejść. Chciałbym usłyszeć, jak dalej wypełniać lukę: kiedy już wdrożą się testy automatyczne, jak możesz pomóc Właścicielowi Produktu je zweryfikować? Czy wystarczy, aby Właściciel Produktu wiedział, że test przeszedł pomyślnie, bez patrzenia na sam kod testu? Krótko mówiąc, jak blisko powinien być właściciel produktu z faktycznie wdrożonymi testami i jak utrzymać go produktywnie zaangażowane w testy poza początkowym pisaniem historii? Powód tego pytania jest podwójny. Po pierwsze, między artykułem papierowym a szczegółami implementacji mogą wkraść się pewne założenia, a przegląd testu przez autora historii może być nieoceniony. Z drugiej strony, implementacja wprowadza również sporo szumu i wymaga, aby PO był dość techniczny (czytaj kod, uruchamiaj testy). Czy implementacja testowa jest "detalem programisty", czy uczciwe jest żądanie PO, aby stał się trochę programistą w tej dziedzinie? Wtedy, w większości przypadków, PO może faktycznie zweryfikować test bez testu automatycznego, po prostu korzystając z aplikacji. Jednak niektóre historie są „bezgłowe” i można je zweryfikować tylko za pomocą kodu, więc jeśli operator nie będzie wiedział, jak czytać i przeprowadzać testy, nigdy nie będzie w stanie stwierdzić, że zweryfikował historię jako kompletną.


title: Bazy danych dla jednego najemcy - tworzenie i aktualizacja nowych najemców za pomocą PHP

text: Zbudowaliśmy aplikację internetową dla jednego dzierżawcy w PHP i każda hostowana „witryna” ma własną bazę danych. Jednak musimy być w stanie uruchomić skrypt, aby utworzyć bazę danych, przypisać użytkownika mysql i wstawić domyślny sql. Teraz baza danych i obsługa użytkowników działają bez zarzutu, to tylko import SQL. Z tego, co mogę powiedzieć, PHP po prostu jest do bani, jeśli chodzi o obsługę plików sql, więc przechowywanie „szablonu” pliku sql wydaje się być wykluczone. Moją następną myślą było być może przechowywanie żywej bazy danych, która jest następnie klonowana, dając witrynie wstępnie zapełnioną bazę danych, jednak nie wiem, jak to działa. Jednocześnie wolałbym nie "twardo kodować" kreacji tabel do PHP, tak jakby przeprowadzać jakiekolwiek aktualizacje, które chcemy, aby móc zaktualizować SQL bezpośrednio z naszego panelu kontrolnego zaplecza. Z pewnością musi istnieć logiczny sposób obsługi kreacji i aktualizacji w SaaS dla wielu dzierżawców?


title: Jak zaktualizować zależność w czasie wykonywania w mojej aplikacji .NET?

text: Mam aplikację serwer-klient. Czasami serwer jest aktualizowany, co wymaga aktualizacji niektórych bibliotek DLL w kliencie (DLL są zależnościami głównego pliku wykonywalnego). Na razie musimy zamknąć klienta, ręcznie wdrożyć biblioteki DLL, a następnie ponownie uruchomić klienta. Jest to swego rodzaju niedogodność, ponieważ klient jest aplikacją zautomatyzowaną, więc normalnie nie wymaga żadnej interwencji użytkownika. Czy można to zrobić automatycznie bez restartu lub interwencji użytkownika? Na przykład klient pobrałby najnowszą bibliotekę DLL i podmienił obecną?


title: Czy przegląd kodu, który wykorzystuje tylko komentarze do kodu, to dobry pomysł?

text: ## Warunki wstępne * Zespół używa DVCS * IDE obsługuje parsowanie komentarzy (takich jak TODO itp.) * Narzędzia takie jak CodeCollaborator są drogie jak na budżet * Narzędzia takie jak gerrit są zbyt złożone do zainstalowania lub nie nadają się do użytku ## Przepływ pracy * Autor publikuje gdzieś w funkcji centralnego repozytorium gałąź * Recenzent pobiera go i rozpoczyna recenzję * W przypadku jakiegoś pytania/problemu recenzent tworzy komentarz ze specjalną etykietą, np. „REV”. Taka etykieta NIE MOŻE znajdować się w kodzie produkcyjnym -- tylko na etapie przeglądu: $somevar = 123; // REV Dlaczego powtarzamy to tutaj? echo $jakaś zmienna; * Kiedy recenzent zakończy publikowanie komentarzy - po prostu zatwierdza głupie "komentarze" i odpycha * Autor cofa gałąź funkcji i odpowiada na komentarze w podobny sposób lub poprawia kod i odpycha go * Kiedy komentarze "REV" znikną, możemy pomyśleć , ta recenzja została pomyślnie zakończona. * Autor interaktywnie przestawia gałąź funkcji, ściska ją, aby usunąć te „komentarzowe” zatwierdzenia, a teraz jest gotowy do scalenia funkcji w celu opracowania lub wykonania dowolnej akcji, która zwykle może nastąpić po pomyślnym wewnętrznym przeglądzie ## Obsługa IDE Wiem, że możliwe są niestandardowe tagi komentarzy w zaćmieniu i netbeans. Pewnie, że powinien też być w rodzinie blablaStorm. ![Przykład niestandardowego filtrowanego zadania-od-komentarze w zaćmieniu](http://i.stack.imgur.com/Iq6wo.png) ## Pytania 1. Czy uważasz, że ta metodologia jest opłacalna? 2. Czy znasz coś podobnego? 3. Co można w nim poprawić?


title: Podejście SDLC do małych projektów

text: Czy w przypadku projektów o małych rozmiarach warto przestrzegać SDLC? czy rozwój SCRUM/agile jest lepszym podejściem? **Edycja** : Projekt, który mam na myśli, to niewielka zmiana, ale wpłynie na wiele warstw/części aplikacji, więc będzie zaangażowanych 2 lub 3 programistów z innego zespołu, a następnie kod zostanie zintegrowany na późniejszy krok. Dziękuję.


title: Czy pokrycie warunkowe obejmuje pokrycie krawędzi?

text: Jestem trochę zdezorientowany kryteriami pokrycia kodu; szczególnie kondycja i pokrycie krawędzi. Jak stwierdzono w tej książce, pokrycie krawędzi nie obejmuje pokrycia warunków; ALE mój materiał wykładowy definiuje pokrycie warunku w następujący sposób: _Kryterium pokrycia krawędzi:_ Wybierz zestaw testowy `T` taki, że wykonując program `P` dla każdego `d` w `T`, każda krawędź `P` wykres przepływu kontroli przechodzi co najmniej raz _Kryterium pokrycia warunku:_ Wybierz zestaw testowy `T` w taki sposób, że wykonując `P` dla każdego elementu w `T` każda krawędź grafu przepływu `P` jest przemierzane, a wszystkie możliwe wartości składników złożonych warunków binarnych są wykonywane co najmniej raz. Tak więc pierwsza część definicji pokrycia warunków jest oczywiście taka sama jak cała definicja pokrycia krawędzi. Dlatego pomyślałem, że pokrycie warunków implikuje pokrycie krawędzi… Czy definicja jest zepsuta? Co się zgadza?


title: Jeśli każda instancja typu ma być losowa, jak powinien być przechowywany obiekt generatora Random?

text: Wydaje mi się, że jest to często spotykane w praktyce i zastanawiałem się, czy istnieje wzorzec projektowy dla następujących elementów: Załóżmy, że mam klasę reprezentującą kartę: public class Hand { private static Random rng; ranga prywatna; prywatny garnitur garnitur; public Hand() { if (prng == null) prng = new Random(); } //więcej rzeczy } } Za każdym razem, gdy tworzę kartę, chcę losową kartę. Robienie tego w powyższy sposób marnuje jedno porównanie do wartości null na instancję. Jeśli stworzę pole statyczne i przydzielę je do zwalniania: private static Random rng = new Random(); nowy obiekt Random jest tworzony za każdym razem - również niezbyt wydajny. Jeśli przekażę obiekt Random do konstruktora, naruszam „powiedz, nie pytaj”. Być może jest inna sugestia, ale jak dotąd uważam, że najlepszym sposobem jest sprawdzenie wartości zerowej.


title: Gwiazdki w komentarzach wielowierszowych

text: Używając Visual Studio 2012 z C#, kiedy piszę wielowierszowe komentarze, VS automatycznie zaczyna każdy wiersz gwiazdką, tak: /* * * */ Byłem tylko ciekaw, czy tak jest w przypadku języków programowania innych niż C#, czy jeśli istniał konkretny powód tego szablonu.


title: Czy użycie klauzuli final do wykonywania pracy po zwrocie jest złym stylem/niebezpieczne?

text: W ramach pisania iteratora znalazłem się na pisaniu następującego fragmentu kodu (obsługa usuwania błędów) public T next() { try { return next; } w końcu { następny = fetcher.fetchNext(next); } } znalezienie go nieco łatwiejszego do odczytania niż publiczne T next() { T tmp = next; następny = pobieranie.pobieranieNastępny(następny); powrót tmp; } Wiem, że to prosty przykład, w którym różnica w czytelności może nie jest aż tak przytłaczająca, ale interesuje mnie ogólna opinia, czy źle jest używać try-finally w takich przypadkach, w których nie ma wyjątków, lub jeśli jest to rzeczywiście preferowane, gdy upraszcza kod. Jeśli jest źle: dlaczego? Styl, wydajność, pułapki, ...? **Wniosek** Dziękuję za wszystkie odpowiedzi! Sądzę, że wniosek (przynajmniej dla mnie) jest taki, że pierwszy przykład mógłby być bardziej czytelny, gdyby był to powszechny wzorzec, ale tak nie jest. W związku z tym zamieszanie wprowadzone przez użycie konstrukcji niezwiązanej z jej przeznaczeniem, wraz z prawdopodobnie zaciemnionym przepływem wyjątków, przeważy nad uproszczeniami.


title: Przenośność: biblioteki/rozszerzenia Pythona C/C++ a biblioteki Java JRuby

text: Rozmawiałem z kolegami, którzy wybrali JRuby zgodnie z następującą argumentacją: JRuby może wykorzystać wszystko, co jest dostępne w Javie, ergo takie programy są bardziej przenośne bc Java jest bardziej przenośna. Prawdopodobnie szerokość, możliwości i szybkość bibliotek C/C++, które zostały opakowane dla Pythona, są nadal lepsze niż to, co jest dostępne w Javie. Ale ponieważ jest to C/C++, wszystkie problemy z przenośnością pojawiają się ponownie w ten sposób - a przynajmniej tak potoczyły się ich argumenty. Czy kiedykolwiek miałeś taki problem? czyli problem z przenośnością rozszerzeń Pythona? Osobiście nigdy nie uważałem tego za problem, ale YMMV, podczas gdy teoretycznie i potencjalnie jest to problem. Jestem ciekawa twoich doświadczeń.


title: Do jakiej problematycznej domeny jest stworzony LINQ?

text: Za każdym razem, gdy widzę pytanie opublikowane w Stack Overflow w C#, widzę co najmniej jedną lub dwie opublikowane odpowiedzi, które rozwiązują problem z LINQ. Zwykle ludzie o bardzo wysokiej reputacji wydają się używać LINQ jak zawodowcy. Więc moje pytanie brzmi: ** Do jakiej problematycznej domeny ma służyć LINQ? ** Również w uwagach bocznych: Czy są jakieś cele, w których należy tego unikać? Czy rozmiar zestawu danych wpływa na wydajność zapytań LINQ?


title: Czy programiści są interesariuszami systemu?

text: Czy twórcy produktu są uważani za interesariuszy?


title: Optymalny harmonogram filmów

text: Powiedzmy, że pan A idzie do kina i dostaje plan filmowy. Obecnie w programie jest N filmów (1 < N < 50) i dla każdego filmu czas rozpoczęcia i czas zakończenia podawany jest w minutach. Pan A chce oglądać jak najwięcej minut filmów. Ale w kinie obowiązuje jedna zasada: jeśli zaczyna się film, nie możesz go oglądać. Innymi słowy, jeśli Pan A obejrzy Film 1, aw międzyczasie rozpocznie się Film 2, Pan A nie może go oglądać. Znajdź maksymalną liczbę minut, które Pan A może spędzić na oglądaniu filmów. * * * Na początku posortowałem filmy według czasu rozpoczęcia. Następnie zrobiłem macierz NxN i wypełniłem ją fałszywymi wartościami. Teraz jeśli Film X i Film Y przecinają się, czyli grają w tym samym czasie nawet przez minutę, to Matrix[X][Y] i Matrix [Y][X] otrzymują prawdziwą wartość. Następnie sprawdzam przypadek, gdy każdy film jest w optymalnym rozwiązaniu. Umieściłem je w wektorze. Teraz za pomocą rekurencji sprawdzam każdą możliwą kombinację. Jeśli Film X nie ma przecięcia z każdym filmem wektora, wstawiam go do wektora, ponieważ nie będzie przecięcia, a następnie przechodzę do następnego filmu. I tak dalej. Ten algorytm działa, ale uważam, że jest to zbyt czasochłonne i jak chcę powiedzieć to „zmodyfikowana brutalna siła”. Czy istnieje lepszy sposób na osiągnięcie optymalnego rozwiązania. UWAGA: Interesuje nas tylko maksymalna liczba minut, a nie maksymalna liczba filmów. Na koniec program powinien wypisać maksymalną liczbę minut, a nie listę filmów, które powinien obejrzeć Pan A.


title: Obliczenia iteracyjne - dzieci dzieci dzieci

text: Chciałbym przenieść część logiki biznesowej z mojej aplikacji do procedury składowanej lub funkcji. Jestem gotów zmienić rdbms, gdy system jest aktualizowany/przepisywany. W tej chwili jest to Access 97 (zobacz, dlaczego jest aktualizowany?), ale jakiś czas temu, kiedy ostatnio oglądałem, SQLserver też nie mógł sobie z tym poradzić. Przynajmniej nie wiedziałem jak. Podstawowym problemem jest to, że zestaw jest używany, a użycie jest rejestrowane. Muszę zastosować użycie do podzespołów i ich podzespołów i tak dalej, aż skończę na elementarnych częściach zespołu. Może cztery lub pięć poziomów głębokości. Wiedząc, ile części zostało wykonanych w ciągu godziny, obliczam, ile „użytków” otrzymała każda część. Trudne jest to, że podzespoły można wymieniać podczas użytkowania. Na przykład maszyna pracuje 40 godzin, a podzespół oprzyrządowania jest wymieniany czterokrotnie. Czasami śruba zaciskowa na oprzyrządowaniu jest zmieniana, ale podzespół oprzyrządowania nie. Mam sygnatury czasowe włączania i wyłączania, kiedy rzeczy - podzespoły i/lub części - były instalowane i usuwane, oraz informacje o tym, na czym zostały zainstalowane w tabeli historii. Obecnie mam kod, który oblicza ile części wykonała maszyna, a następnie szuka ewentualnych podzespołów zainstalowanych na maszynie i oblicza, ile części wykonał każdy z zainstalowanych podzespołów, potem patrzy na rzeczy zainstalowane na nim, aż skończą mi się dzieci . Z pewnością niektóre rdbms pojawiły się od czasu Access 97, które mogą to zrobić? Dziękuję!


title: Czy ktoś może polecić niezależny od toolchain sposób deklarowania i dokumentowania zależności kompilacji między pakietami?

text: Obecnie mam pod ręką projekt, który wkrótce opuszczę (praca doktorska) i powinien zostać pozostawiony w zrozumiałej formie, ponieważ prawdopodobnie zostanie podjęty, choć nie wiadomo jeszcze przez kogo i kiedy. Dlatego chciałbym zostawić przynajmniej trochę dokumentacji, jak jest zbudowany. Projekt składa się z 7 pakietów, z których każdy jest niezależnym pakietem kodu źródłowego, którego kompilacja zależy tylko od bibliotek i nagłówków z innych pakietów. Cały proces budowania opiera się na standardach open source, tj. każdy projekt jest budowany przez autoconf i automake, jest zorientowany na Debiana, a zależności między pakietami są deklarowane w pakietach Debiana i sprawdzane w skryptach konfiguracyjnych. Wydaje się jednak, że jest to dość specyficzny sposób określenia dość ogólnego problemu. Jest prawdopodobne, że następny opiekun chciałby zbudować oprogramowanie z graficznym interfejsem Windows, który nie wie nic o autoconf lub Debianie. W tym przypadku chciałbym pozostawić bardziej sztywną dokumentację niż kilka komentarzy w różnych plikach INSTALL i deklaracje Build-Depends/Depends w plikach Debiana. Czy istnieje jakiś ustalony język lub standard niezależny od toolchaina do dokumentowania pakowania i budowania porządku? Dodatkowe punkty, jeśli można z tego wygenerować rzeczywiste specyfikacje systemu kompilacji (takie jak Debian Build-Depends).


title: Antydepresant i programowanie: czy zmniejsza zdolność myślenia i koncentracji?

text: Chciałam zapytać o zdanie na temat antydepresantów, ponieważ od 3 lat codziennie je zażywam, ale nie jestem pewna, czy jestem z nimi mniej sprawna, czy bez, ponieważ nigdy się nie wycofałam. Wciąż chodzę do szkoły w wieku 25 lat, wciąż mam problemy z motywacją (na przykład nie mogę się przyzwyczaić do robienia czegoś w szkole, jeśli nie sądzę, że czegoś mnie to nie nauczy), ale jestem dość zmotywowany do pracy w branży gier wideo, ponieważ mam na myśli kilka osobistych projektów. Znam programowanie w C++ itp., wciąż uczę się technik, ale czy uważasz, że powinienem spróbować więcej, aby wykonać mój projekt, zamiast po prostu podążać za pracą, do której zostałem przydzielony? Czy miałeś doświadczenie z depresją lub antydepresantami? Jak to wpłynęło na twoją pracę? Czy uważasz, że bycie przygnębionym lub na wpół przygnębionym może poprawić kreatywność? Czy uważasz, że wpłynęło to na sposób, w jaki ostatecznie piszesz swoje algorytmy? EDYTOWANO


title: zwrócić encję nhibernate z internetowego interfejsu API?

text: Czy warto zwrócić nHibernate Entity z WebApi? W przypadku prostych encji próbowałem użyć tego, ale co ze złożonymi encjami. Jak w takim przypadku poradzi sobie z leniwym ładowaniem?


title: Jak uczysz się nowego języka programowania?

text: Jestem programistą C++ z dobrym doświadczeniem. Kiedy próbuję nauczyć się nowego języka (do tej pory próbowałem Java, C#, python, perl) zwykle biorę książkę i próbuję ją przeczytać. Ale problem polega na tym, że te książki zazwyczaj zaczynają się od bardzo podstawowych pojęć programistycznych, takich jak pętle, operatory itp., I wkrótce zaczyna się nudzić. Czuję też, że zdobyłbym tylko wiedzę teoretyczną bez praktycznej wiedzy na temat pisania kodu. Więc moje pytanie brzmi: jak radzisz sobie z tymi sytuacjami? czy po prostu pomijasz rozdziały, jeśli wyjaśniają coś podstawowego? także, czy masz jakiś standardowy zestaw programów, które będziesz próbował napisać w każdym nowym języku programowania, którego próbujesz się nauczyć?


title: Jaki jest skuteczny sposób na zapoznanie się z nową aplikacją w nowym języku?

text: > **Możliwy duplikat:** > Jak szybko nauczyć się nowego języka, skoro znam kilka innych? Rozpocząłem nową pracę, pracując nad aplikacją, którą niejasno znam i jest ona w PERL! Pochodzę ze środowiska PHP i Java, więc chociaż rozumiem podstawy, w PERL jest wiele niuansów, które sprawiają, że jest to kłopotliwe. _zaktualizowane_ < Podobno jestem programistą UI, ale małość biura wymaga ode mnie nauki i robienia znacznie więcej niż tylko javascript. To było trochę nieoczekiwane w niektórych aspektach i zastanawiam się tylko nad tym, jakie podejście do tego zastosować > / _zaktualizowane_ Do tej pory przeglądałem kod, aby zrozumieć, co robi każda część, wydrukowałem kopie kodu i próbowałem wyszukać Interfejsy API, których nie znam, więc nie wiem, jak skuteczny jest ten proces — wydaje mi się, że zajmie to trochę czasu — i nie chcę, aby moi nowi pracodawcy czuli, że nie jestem produktywny. Czy ktoś ma jakieś pomysły lub podejścia do takiej sytuacji? Przeczytałem kilka pytań dotyczących nauki nowych języków, ale jestem ciekaw, czy ktoś miał z tym doświadczenie z PERL.


title: Jak szybko nauczyć się nowego języka, skoro znam kilka innych?

text: Jednym z rodzajów pytań, które wciąż pojawiają się na Programmers.SE, jest to, jak nauczyć się określonego języka, biorąc pod uwagę, że znasz kilka innych (zwykle dzięki dużemu doświadczeniu lub edukacji). Jednak w niektórych przypadkach może być konieczne szybkie nabranie tempa, aby uzyskać pracę lub rozwój osobisty, a nawet sprawdzić nową, gorącą platformę. Z twojego doświadczenia, jakie ogólne strategie zastosowałeś, aby szybko nauczyć się nowego języka? Czy są jakieś specyficzne aspekty języka, na których próbujesz się skupić, gdy zaczynasz przeziębienie? Jakie _rodzaje_ zasobów są dla Ciebie pomocne w tym procesie?


title: Jak byś zareagował, gdyby ktoś powiedział ci, że twój kod to bałagan?

text: Jestem dobrym programistą, a przynajmniej tak myślałem wcześniej. Zawsze lubię programować. I chcę się nauczyć wielu rzeczy o programowaniu, aby stać się lepszym programistą. Studiowałem programowanie przez 1 rok, a teraz pracuję jako programista od prawie 2 lat. Krótko mówiąc, mam prawie 3 lata doświadczenia w programowaniu. Nasz zespół składa się z 5 programistów, 4 z nas to nowi, 1 ma ponad 3-letnie doświadczenie. Pracujemy dla programu od prawie roku i nikt nigdy nie przeglądał mojego kodu, a ja dostałem stronę do pracy. Nigdy nie mieliśmy przeglądu kodu i wszyscy jesteśmy nowi, więc nie wiemy, jak wygląda czysty kod. Myślę, że programiści uczą się sami? Wdrożyliśmy nasz program do programu bez dokładnych testów. Teraz jest ciasno i potrzebujemy zatwierdzenia i przeglądu kodu przed wprowadzeniem zmian w kodzie. Po raz pierwszy ktoś przegląda mój kod i mówi, że to bałagan. Czuję się taki smutny i zraniony. Naprawdę uwielbiam programować i zmuszanie ich do powiedzenia czegoś takiego naprawdę mnie boli. Naprawdę chcę się poprawić. Ale wygląda na to, że nie jestem genialnym programistą jak w filmach. Czy możesz mi doradzić, jak być lepszym? Czy kiedykolwiek doświadczyłeś czegoś krytykującego Twój kod i czujesz się naprawdę zraniony? Co robisz na tych wydarzeniach.


title: Programowanie w C w Windows 7

text: Jaka jest najlepsza książka i jakie są najlepsze narzędzia do programowania w C w Windows 7? Czy używanie C w jakikolwiek sposób przeszkodzi mi, jeśli chodzi o używanie Windows API, w przeciwieństwie do używania C++ lub C#? Chciałbym użyć C, ponieważ wydaje mi się, że programowanie obiektowe jest złe dla wydajności, a abstrakcja wydaje się nieproduktywna tylko wtedy, gdy programowanie zajmują się właściwymi ludźmi. Będę głównie robił GUI i usługi działające w tle, które wykonują dużo pracy w sieci, prawdopodobnie w warstwie 2 OSI, i kryptografię klucza publicznego + kaskadowego klucza symetrycznego. Ponadto rdzeń programów (z wyjątkiem tych, które bezpośrednio obsługują warstwę 2 OSI) powinien być przenośny do systemu Android.


title: Jak programista VB6 może zaktualizować swoje umiejętności i zdobyć kwalifikacje do aktualnych ofert pracy w USA?

text: Jadę do USA i zastanawiałem się, jak mogę tam znaleźć pracę. Jestem programistą od 3 lat. Cóż, pracowałem nad dużymi projektami, takimi jak podstawowy system bankowy jednego z największych banków w kraju i ogólnie jestem dobry w programowaniu i rozwiązywaniu problemów. Ale niestety te projekty zostały opracowane przy użyciu VB6 i nie byłem w stanie zaktualizować swoich umiejętności. Mam tło w języku C#, ale nie jestem w tym biegły. Tak więc VB6 to jedyny język, w którym jestem wystarczająco dobry, aby znaleźć pracę. I jestem prawie pewien, że to nie pomoże mi znaleźć pracy w USA. Jak więc zaktualizować swoje umiejętności, aby uzyskać kwalifikacje programisty aplikacji Windows? Czy powinienem iść na studia czy coś takiego? Jestem w złej sytuacji i nie mam pojęcia, co robić. Każda pomoc z Twojej strony wiele by dla mnie znaczyła i jest bardzo ceniona. Z góry dziękuję. Edycja: Basile, Graham, spaceknarf i tgkprog dzięki za podzielenie się ze mną swoją wiedzą.


title: Wypuszczasz oprogramowanie typu open source, w tym biblioteki Apache2 i LGPL?

text: Piszę oprogramowanie (w Javie) przy użyciu trzech bibliotek: * Biblioteka A, na licencji **Licencja MIT** * Biblioteka B, na licencji **Apache License, Version 2.0** * Biblioteka C, na licencji **LGPLv3** Chciałbym udostępnić publicznie moje oprogramowanie na licencji MIT. Zamieszczę wszystkie biblioteki w postaci **źródłowej** i binarnej (jar), w tym ich **oryginalne licencje** i **informacje o prawach autorskich**. Umieściłem plik **LICENSE** w katalogu głównym mojego projektu z licencją MIT. Uważam, że powinno to obejmować wszystkie wymagania MIT i LGPLv3, ale zastanawia mnie plik NOTICE wymieniony w licencji Apache. > Jeśli Dzieło zawiera plik tekstowy „POWIADOMIENIA” jako część swojej dystrybucji, wówczas > wszelkie rozpowszechniane przez Ciebie Dzieła pochodne muszą zawierać czytelną kopię > uwag o atrybucji zawartych w takim pliku UWAGA, z wyłączeniem uwag, które nie dotyczą jakiejkolwiek części Prac Pochodnych, w co najmniej > jednym z następujących miejsc: w pliku tekstowym NOTICE dystrybuowanym jako część > Prac Pochodnych; w formie źródłowej lub w dokumentacji, jeżeli > są dostarczane wraz z Utworami Pochodnymi; lub w ramach wyświetlania wygenerowanego przez > Utwory pochodne, jeśli i gdziekolwiek takie zawiadomienia osób trzecich normalnie > się pojawiają. Zawartość pliku NOTICE służy wyłącznie do celów informacyjnych > i nie modyfikuje Licencji. Licencjobiorca może dodawać własne uwagi o atrybucji > w rozpowszechnianych przez siebie Dziełach pochodnych, obok lub jako dodatek do > tekstu POWIADOMIENIE z Dzieła, pod warunkiem, że takie dodatkowe informacje o atrybucji > nie mogą być interpretowane jako modyfikacja Licencji. http://www.apache.org/licenses/LICENSE-2.0.html Czy oznacza to po prostu, że muszę dołączyć pliki NOTICE, które są dostarczane z biblioteką, czy też muszę napisać własny plik NOTICE wymieniający biblioteki i ich prawa autorskie? Po drugie, czy są jakieś inne wymagania, które mogłem pominąć? Na koniec załóżmy, że używam również biblioteki D, na licencji **GPLv3**. Jak to zmienia sytuację? Rozumiem, że w tym przypadku musiałbym wydać swój projekt na GPLv3. Jakieś inne implikacje? Proszę zrozumieć, że jestem studentem i nie stać mnie na prawnika. :)


title: Programowo manipuluj wyrażeniami z uwzględnieniem pierwszeństwa operatorów

text: Czasami wyrażenie staje się mylące z powodu niejawnego pierwszeństwa operatora. Weźmy to wyrażenie Pythona: a, b, c, d = range(4) e = a + b // c << d >> a ** b lub a + c * d // c % c W innych językach może stają się jeszcze bardziej zawiłe. Wystarczy powiedzieć, że doświadczony programista może zrobić podwójne podejście do kodu takiego jak ten i dodać kilka nawiasów, aby wyjaśnić, co się dzieje. Chociaż jest to coś, co można zrobić ręcznie, grozi to pewnym błędem ludzkim, jestem ciekawy, czy istnieją rozwiązania, które wyraźnie określają pierwszeństwo operatora poprzez dodanie nawiasów (nie jestem tak zajęty dokładnym językiem, wszystko z operatorami w poprawce jest Cienki). Chociaż nie jest to mój cel, można (na przykład) wziąć trochę zaciemnionego kodu z http://www.ioccc.org i zbliżyć się do czegoś zrozumiałego. * * * _Uwaga, na potrzeby tego pytania nie martwię się o niekomunikatywne zachowanie operacji zmiennoprzecinkowych w niektórych językach._


title: Utworzyć podstawowe zespoły międzyoperacyjne czy je wygenerować?

text: Nigdy nie widziałem ostatecznej odpowiedzi na to pytanie: Jeśli utrzymujesz COM DLL, który może być używany przez program .NET, najlepiej jest: 1. Zaimportować COM DLL do każdego projektu, który generuje zestaw Interop dla każdego projektu ? lub 2. Generować podstawowy zestaw międzyoperacyjny za pomocą TLBIMP za każdym razem, gdy kompilowana jest biblioteka COM DLL? lub 3. Napisz podstawowy zestaw międzyoperacyjny w języku C# i kompiluj go za każdym razem, gdy kompilowana jest biblioteka COM DLL? Chciałbym zrobić albo numer 2, albo numer 3. Numer 2 brzmi przekonująco, ale nie widzę, jak ustawiasz atrybut _AssemblyTitleAttribute_ (i inne podobne atrybuty); Zakładam, że używasz niestandardowych atrybutów w IDL, które TLBIMP odbierze.


title: Testowanie jednostkowe algorytmów z natury losowych/niedeterministycznych

text: Mój obecny projekt, zwięźle, polega na tworzeniu „zdarzeń o ograniczonym losie”. Zasadniczo tworzę harmonogram przeglądów. Niektóre z nich opierają się na ścisłych ograniczeniach harmonogramu; przeprowadzasz kontrolę raz w tygodniu w piątek o godzinie 10:00. Inne inspekcje są „losowe”; istnieją podstawowe konfigurowalne wymagania, takie jak „kontrola musi odbywać się 3 razy w tygodniu”, „kontrola musi się odbyć w godzinach 9-21” oraz „nie powinno być dwóch kontroli w tym samym okresie 8 godzin”, ale bez względu na ograniczenia skonfigurowane dla określonego zestawu inspekcji, wynikowe daty i godziny nie powinny być przewidywalne. Testy jednostkowe i TDD, IMO, mają wielką wartość w tym systemie, ponieważ można je wykorzystać do przyrostowego budowania go, gdy pełny zestaw wymagań jest wciąż niekompletny, i upewnij się, że nie „przepracowuję” go, aby robić rzeczy, których nie robię obecnie nie wiem, czego potrzebuję. Ścisłe harmonogramy były dla TDD bułką z masłem. Jednak trudno mi naprawdę zdefiniować, co testuję, kiedy piszę testy dla losowej części systemu. Mogę twierdzić, że wszystkie czasy generowane przez program planujący muszą mieścić się w ograniczeniach, ale mógłbym zaimplementować algorytm, który przejdzie wszystkie takie testy, bez bardzo „losowych” rzeczywistych czasów. W rzeczywistości tak się właśnie stało; Znalazłem problem polegający na tym, że czasy, choć nie można ich dokładnie przewidzieć, mieściły się w małym podzbiorze dopuszczalnych zakresów dat/godzin. Algorytm nadal spełniał wszystkie twierdzenia, które uważałem za rozsądne, i nie mogłem zaprojektować automatycznego testu, który w takiej sytuacji zakończy się niepowodzeniem, ale zda, gdy otrzymam „bardziej losowe” wyniki. Musiałem wykazać, że problem został rozwiązany przez restrukturyzację niektórych istniejących testów, aby powtarzały się one kilka razy, i wizualnie sprawdzić, czy wygenerowane czasy mieszczą się w pełnym dopuszczalnym zakresie. Czy ktoś ma jakieś wskazówki dotyczące projektowania testów, które powinny oczekiwać niedeterministycznego zachowania? **EDYTUJ:** Dzięki wszystkim za sugestie. Wydaje się, że główna opinia jest taka, że **potrzebuję testu deterministycznego, aby uzyskać deterministyczne, powtarzalne, możliwe do potwierdzenia wyniki**. Ma sens. Stworzyłem zestaw testów „piaskownicy”, które zawierają algorytmy kandydujące dla procesu ograniczającego (proces, w którym tablica bajtów, która może być dowolna, staje się długa między min i max). Następnie uruchamiam ten kod przez pętlę FOR, która daje algorytmowi kilka znanych tablic bajtowych (wartości od 1 do 10 000 000 na początek) i ogranicza każdy algorytm do wartości od 1009 do 7919 (używam liczb pierwszych, aby zapewnić algorytm nie przeszedłby przez jakiś przypadkowy GCF między zakresami wejściowymi i wyjściowymi). Otrzymane ograniczone wartości są zliczane i wytwarzany jest histogram. Aby „przejść”, wszystkie dane wejściowe muszą być odzwierciedlone w histogramie (zdrowie, aby upewnić się, że nie „straciliśmy” żadnego), a różnica między dowolnymi dwoma segmentami na histogramie nie może być większa niż 2 (tak naprawdę powinna być <= 1 , ale bądźcie czujni). Zwycięski algorytm, jeśli taki istnieje, można wyciąć i wkleić bezpośrednio do kodu produkcyjnego i przeprowadzić stały test regresji. Oto kod: private void TestConstraintAlgorithm(int min, int max, Func<bajt[], long, long, long> ograniczenieAlgorytm) { var histogram = new int[max-min+1]; for (int i = 1; i <= 10000000; i++) { //To jest odpowiednik PRNG; tworzy znaną tablicę bajtów var buffer = BitConverter.GetBytes((long)i); długi wynik = boundAlgorithm(bufor, min, max); histogram[wynik - min]++; } var minCount = -1; var maxCount = -1; zmienna całkowita = 0; for (int i = 0; i < histogram.Length; i++) { Console.WriteLine("{0}: {1}".FormatWith(i + min, histogram[i])); if (minCount == -1 || minCount > histogram[i]) minCount = histogram[i]; if (maxCount == -1 || maxCount < histogram[i]) maxCount = histogram[i]; łącznie += histogram[i]; } Assert.AreEqual(10000000, suma); Assert.LessOrEqual(maxCount - minCount, 2); } [Test, Explicit("piaskownica, nie testuje kodu produkcyjnego")] public void TestRandomizerDistributionMSBRejection() { TestConstraintAlgorithm(1009, 7919, ConstrainByMSBRection); } private long ConstrainByMSBRection(byte[] buffer, long min, long max) { //Usuń bit znaku (jeśli istnieje) z najbardziej znaczącego bajtu przed konwersją na długi bufor[buffer.Length-1] &= 0x7f; var orig = BitConverter.ToInt64(bufor, 0); var wynik = oryg; //Zastosuj maskę bitową do wartości, usuwając MSB w każdej pętli, aż znajdzie się w zakresie. var maska = long.MaxValue; while (wynik > max - min) { maska >>= 1; wynik &= maska; } wynik += min; zwróć wynik; } [Test, Explicit("piaskownica, nie testuje kodu produkcyjnego")] public void TestRandomizerDistributionLSBRejection() { TestConstraintAlgorithm(1009, 7919, ConstrainByLSBRejection); } private long ConstrainByLSBRection(byte[] buffer, long min, long max) { //Usuń bit znaku (jeśli istnieje) z najbardziej znaczącego bajtu przed konwersją na długi bufor[buffer.Length - 1] &= 0x7f; var orig = BitConverter.ToInt64(bufor, 0); var wynik = oryg; //Przesuń bitową liczbę 1 w prawo, aż znajdzie się w zakresie while (wynik > max - min) wynik >>= 1; wynik += min; zwróć wynik; } [Test, Explicit("piaskownica, nie testuje kodu produkcyjnego")] public void TestRandomizerDistributionModulus() { TestConstraintAlgorithm(1009, 7919, ConstrainByModulo); } private long ConstrainByModulo(byte[] buffer, long min, long max) { buffer[buffer.Length - 1] &= 0x7f; var wynik = BitConverter.ToInt64(bufor, 0); //Modulo dzieli wartość przez zakres, aby uzyskać wartość mieszczącą się w tym zakresie. wynik %= max - min + 1; wynik += min; zwróć wynik; } ... a oto wyniki: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/RBnT5.png) Odrzucenie LSB (przesunięcie bitowe liczby, aż znajdzie się w zakresie) było STRASZNE , z bardzo łatwego do wyjaśnienia powodu; kiedy podzielisz dowolną liczbę przez 2, aż będzie mniejsza niż maksymalna, przestaniesz tak szybko, jak to jest, i dla dowolnego nietrywialnego zakresu, który spowoduje przesunięcie wyników w kierunku górnej jednej trzeciej (jak widać w szczegółowych wynikach histogramu ). To było dokładnie to zachowanie, które widziałem od skończonych dat; wszystkie godziny były popołudniami, w ściśle określone dni. Odrzucanie MSB (usuwanie najbardziej znaczącego bitu z liczby pojedynczo, aż znajdzie się w zakresie) jest lepsze, ale znowu, ponieważ odcinasz bardzo duże liczby z każdym bitem, nie jest to równomiernie rozłożone; jest mało prawdopodobne, że uzyskasz liczby w górnym i dolnym końcu, więc masz tendencję do środkowego trzeciego. Może to być korzystne dla kogoś, kto chce „znormalizować” losowe dane w dzwonkowatą krzywą, ale suma dwóch lub więcej mniejszych liczb losowych (podobnych do rzucanych kostką) dałaby bardziej naturalną krzywą. Dla moich celów to się nie udaje. Jedynym, który zdał ten test, było ograniczenie przez podział modulo, który również okazał się najszybszy z trzech. Modulo, z definicji, wytworzy możliwie równomierny rozkład, biorąc pod uwagę dostępne dane wejściowe.


title: Interesujące pytania dotyczące rozwoju sterowanego zachowaniem

text: W mojej pracy magisterskiej na Inżynierii Oprogramowania chcę zbadać nową technikę programistyczną BDD (Behaviour-Driven Development). Moim zdaniem ta technika może naprawdę poprawić zadowolenie klienta, pokrycie kodu i błędy ze względu na siłę wykonywalnych specyfikacji i zrozumiały dla klienta język. Jednak w mojej pracy dyplomowej zmagam się ze sposobem, w jaki zamierzam potwierdzić, że BDD może działać lepiej w pewnych okolicznościach. W firmie, w której pracuję na studiach, praca nadal jest w większości wykonywana w sposób tradycyjny, iteracyjny, gdzie czasami trudno jest zmienić wymagania po etapie pozyskiwania wymagań. Moje pytanie brzmi, czy są ludzie, którzy już realizowali projekty z BDD, jakie są ich doświadczenia i czy kiedykolwiek czułeś coś na temat BDD, co chciałbyś zbadać, zaczynając od powyższych akapitów? To może mi bardzo pomóc w konstruowaniu pytania badawczego. Z góry dziękuję!


title: jak zostać zaakceptowanym w dużej firmie, takiej jak google

text: Mam 18 lat; Zacząłem uczyć się programowania, gdy miałem dwanaście lat. Stworzyłem wiele projektów w PHP, Javascript, Ruby, Ruby on Rails. Niewiele wiem o C, C++, Objective C i rozszerzaniu PHP o rozszerzenia stworzone w języku programowania C. Teraz pracuję jako niezależny programista z bardzo niską pensją :( Moim marzeniem jest zrobienie dobrej kariery z bardzo wysoką pensją, więc pomyślałem o dużych firmach, takich jak Google lub Microsoft. Moje pytanie brzmi: jak uzyskać akceptację w tych duże firmy , jakich żądają wstępne zamówienia A czy trzeba ukończyć edukację w zakresie kolażu ?


title: Arkusz kalkulacyjny czy pisanie wniosku?

text: Kiedy zachowałbyś proste lub średnio skomplikowane obliczenia osobiste w arkuszu kalkulacyjnym (Excel itp.), a kiedy napisałbyś do niego mały program lub skrypt? Na przykład, gdy chcesz obliczyć, jaką kwotę kredytu hipotecznego możesz sobie pozwolić na zakup domu. Mógłbym stworzyć arkusz kalkulacyjny i mieć ładną reprezentację tabelaryczną. Z drugiej strony, gdybym napisał mały skrypt w ładnym języku (w moim przypadku Haskell), miałbym zabezpieczenie w postaci ładnego systemu typu, zapobiegającego literówkom itp. Jakie są według Ciebie zalety/wady?


title: Różne sposoby generowania w kodzie najnowszego podstawowego klucza obcego typu int

text: Jestem nowy w sql. Dodałem 2 nowe tabele w bazie danych. Klucz podstawowy pierwszego jest kluczem obcym w drugim. Typ kluczy to liczba całkowita. Teraz chcę wygenerować klucze w kodzie i przypisać je do nowych danych, aby skojarzenie między różnymi wierszami tabel było prawidłowe. Jak zapewnić unikalność kluczy, a także pobrać najnowszy klucz z bazy, aby nie było błędów podczas zapisywania. Gdybym używał guidów, przypisałbym nowy guid do klucza podstawowego, a następnie przypisałbym go do klucza obcego w drugiej tabeli. Istnieje również wielu klientów i jeden serwer, który zapisuje dane. Dane, które mają zostać wstawione do obu tabel, są określane w kodzie c# i nie pochodzą z wiersza wstawionego do tabeli podstawowej. Nawet jeśli otrzymamy id w db to również relacja między wierszami powinna być przechowywana w jakiejś formie z kodu, ponieważ po tym jest tracona.


title: Czy to oznaki złego programisty?

text: Kiedyś obwiniałem klientów o zmieniające się specyfikacje za gnicie kodu, nie zdając sobie sprawy, że modele biznesowe się zmieniają i moim zadaniem jest rozwijać się w sposób elastyczny. Teraz widzę to jako oznakę złego programisty (zmieniłem się!). Ale teraz widzę w sobie inne „skrzypienie”. Ostatnio kilka razy zdarzyło mi się mówić „to jest jak próba włożenia kwadratowego kołka w okrągły otwór”, a także obwiniam klienta za niezdecydowanie, że projekt się nie rozwija. Czy istnieją znaki, na które powinienem zwracać uwagę, gdzie powinienem zmienić swoje nastawienie? Czy klient zawsze ma rację, czy czasami usprawiedliwiam się, że jestem sfrustrowany?


Myślę o czymś, co przeczytałem w książce: „Dobrze zaprojektowany system to system testowalny” i zastanawiam się, dlaczego tak jest. Z pewnością system, który jest bardzo przetestowany, jest prawdopodobnie dobrze zaprojektowany. Budując od podstaw na zasadach „test first” i zakładając podstawowe kompetencje, trudno wyobrazić sobie bardzo zły projekt. Ale stwierdzenie to odwraca ideę: dobrze zaprojektowany system jest testowalny. Czemu? Czy to dlatego, że dobre testy są domyślnie małe i proste, więc wykonanie dobrych testów na złym projekcie (gdzie zły projekt zwykle oznacza duże i złożone klasy) jest trudniejsze? Albo, że trudno jest, powiedzmy, przetestować pojedynczy aspekt klasy w izolacji, gdy klasa, o której mowa, jest klasą boską?


title: Jak zmapować TFS do dwóch lokalnych katalogów?

text: Pracuję z aplikacją webową, korzystając z TFS. Za każdym razem, gdy tworzę witrynę, ponowne uruchomienie zajmuje bezproduktywnie dużo czasu. Chciałbym mieć drugie mapowanie witryny na moim dysku c, gdzie otrzymuję najnowsze i buduję tylko raz dziennie, więc ta wersja zawsze byłaby szybka. To byłby katalog "tylko do odczytu", ponieważ osobiście nie wprowadzałbym w nim żadnych zmian. Daj mi znać, jeśli to możliwe, lub jeśli masz jakąś alternatywę.


title: Zweryfikuj 0 lub 2+ podsekcje w sekcji

text: Istnieje pisemna zasada: Kiedy dzielisz sekcję na podsekcje, zazwyczaj powinna ona mieć więcej niż jeden podrozdział. Wraca to do starych zasad kompozycji w liceum: jeśli masz sekcję A, potrzebujesz również sekcji B. Aby sprawdzić rozdział książki, którą piszę w LaTeX, robię tak: $ egrep -h '^\\(chapter|(sub)*section)\**{' ROZDZIAŁFILE.tex | sed -e 's/\*{/{/g' \chapter{Mój rozdział} \section{Temat} \subsection{Podtemat} \subsection{Inny podtemat} \subsection{Podtemat trzeci} \section{Więcej} \subsection {Więcej więcej} \subsection{Mniej znaczy więcej} \section{Odyseja} \subsection{Marge i Homer} \subsubsection{Bart} \subsubsection{Lisa} \subsubsection{Maggie} \subsection{Przykład} \section{Wiara} \section {Dane} Jaki jest skuteczny algorytm do weryfikacji przestrzegania reguły? Ta reguła dotyczy podsekcji w sekcji, podsekcji w podsekcji i tak dalej. (Chociaż w moim przypadku nie ma podpunktów) Dzięki poradom Barta oto kod, który stworzyłem. W niektórych miejscach jest to dziwaczne, ale jest proste i znalazłem błędy w moich plikach LaTeX: #!/usr/bin/env python import sys import fileinput TOKENS = [ ['\chapter', 0], ['\section', 1] , ['\subsection', 2], ['\subsubsection', 3], ['\subsubsection', 4], ] def getlevel(line): """Zgłoś poziom linii (liczbę podsekcji)."" " dla tokena, poziom w TOKENACH: if line.startswith(token): zwróć poziom podnieś Exception() def store(lst, level, value): """Zapisz wartość na pozycji na poziomie.""" while len( lst) < poziom: lst.append('PUSTY') return lst[:poziom] + [wartość] def segments(): """Odczytaj tekst wejściowy, uzyskaj listy segmentów.""" path = [] last_level = 0 dla linii w fileinput.input(): value = line[line.index('{') + 1 : line.index('}')] path = store(path, getlevel(line), value) yield path def get_tree(segs): """Zbuduj drzewo z list segmentów zwracanych przez generator segmentów""" tree = {} for s in segs(): t = tree for i in s: t = t.setdefault(i, {}) return tree def audit(t): """Audyt: Liście są w porządku, węzły są w porządku, jeśli mają >1 dzieci.""" error = False for k, v in t.items(): if audit( v): error = True if len(v) == 1: print 'BŁĄD: część z tylko jedną podczęścią: %s' % (k, ) error = True zwróć błąd def main(): tree = get_tree(segments) if audit(drzewo): zwróć 1 jeśli __name__ == '__main__': sys.exit(main())


title: Jakie są wady elastycznych tabstopów?

text: Spójrz tutaj: typowa święta wojna na tabulatory i spacje. A teraz spójrz tutaj: elastyczne tabstopy. Wszystkie problemy zostały rozwiązane i dodano kilka bardzo przydatnych nowych zachowań. ![elastyczne tabstopy](http://i.stack.imgur.com/60RvQ.gif) Czy w dyskusji o tabulatorach i spacjach wspomniano nawet o elastycznych tabulatorach? Dlaczego nie? Czy są tak poważne wady pomysłu elastycznego tabstopu, że nikt nigdy nie zaimplementował ich w popularnym edytorze? **EDYTUJ** : Przepraszam, że kładę zbyt duży nacisk na „dlaczego nie są wymienione”. Nie o to mi chodziło; _to_ pytanie jest prawdopodobnie nawet nie na temat. Chodzi mi o to, jakie są największe wady tego rozwiązania, które uniemożliwiają szersze przyjęcie oczywiście korzystnego pomysłu? (w idealnym świecie, w którym wszystko już to obsługuje) (Okazuje się, że w Microsoft Connect jest już prośba o implementację elastycznych tabulatorów w Visual Studio, a także żądanie w Eclipse. Plus jest pytanie o inne edytory, które implementują elastyczne tabstopy )


title: Właściwy projekt OO dla państwa i dowództwa

text: Pracuję (trochę) nad grą (strategią turową). Istnieją dwie klasy istotne dla tego pytania: * `State`: Jest to klasa niezmienna, która ujawnia wszystkie swoje pola (albo poprzez gettery, albo w inny sposób, jak uważałem za stosowne). Stan jest nieco skomplikowany, więc zdekomponowałem go na kilka klas w pakiecie `...state` * `Command`: Jest to abstrakcyjna klasa niezmienna z kilkoma podklasami, takimi jak `MoveCommand(Field from, Field to)` , `PassCommand()`, `BidCommand(kwota int)` itp. w pakiecie `...command`. Wszystkie pola mają publiczne pobieracze. Potrzebuję jednej z dwóch metod * `State Command.applyTo(State)` lub * `State State.apply(Command)` zwracających nowy stan (uzyskany przez zastosowanie polecenia do stanu). Pierwsza metoda wygląda lepiej na pierwszy rzut oka, ponieważ wysyła do różnych implementacji `applyTo` w podklasach `Command`. Niestety zmusza mnie to do majstrowania przy wielu szczegółach `State` w klasie `Command`. Aby to zadziałało, potrzebuję czegoś takiego jak `MutableState` lub `State.Builder`, lub wieloargumentowego konstruktora `State`, lub cokolwiek innego. Użycie drugiej metody wygląda brzydko, ponieważ zmusiłoby mnie do użycia `instanceof` (lub innego brzydkiego sposobu na symulację wysyłania metody wirtualnej). OTOH, skoncentrowałby pracę ze stanem w samej klasie. Więc myślę, że pierwsza metoda jest do zrobienia. Z `Command` i `State` w osobnych pakietach oznacza to, że `MutableState` (lub cokolwiek użytego do zbudowania wynikowego `State`) musi być klasą publiczną, ponieważ w Javie nie ma `friend`s. Nie ma problemu, ale nie fajnie, prawda? Więc jaki jest właściwy projekt?


title: Dlaczego atomy/symbole?

text: Dlaczego języki programowania, takie jak Ruby, używają symboli? Rozumiem, że manipulacja ciągami jest znacznie wolniejsza niż użycie tabeli odnośników, a także pomysł, że ciągi są ponownie przydzielane w pamięci, bez względu na to, czy są one takie same, czy inne niż używane wcześniej, ale czy interpretery nie mogą tego zrekompensować? Wygląda na to, że interpreter nadal musi przeanalizować wpisane słowo, aby dopasować je do symbolu, więc dlaczego nie zrobić tego samego z obiektem ciągu? Na przykład, dlaczego kompilator nie przyjmuje: myHash["myKey"] = ... i nie traktuje go jako myHash[:myKey] = ... w każdym razie za kulisami? Nawet jeśli klucz jest dynamiczny - jest to interpreter, więc czy nie powinien wiedzieć, jaki będzie klucz, zanim znajdzie wartość i nadal będzie traktować klucz ciągu jako symbol? np.: concatMe = "Key" myHash["my" + concatMe] = ... Dlaczego interpreter nie może nadal traktować tego jako myHash[:myKey] Jeśli wie, czym jest "mój" + concatMe _zanim_ znajdzie wartość według klucza?


title: Jak podobny jest rozwój Androida/smartfona do rozwoju Androida/innej platformy?

text: Im więcej programuję na platformie Android na smartfony, tym bardziej lubię. Sposób, w jaki sprawili, że zarządzanie zadaniami i wiadomości między zadaniami były przejrzyste i łatwe, to przyjemność (np. AsyncTask, nadawcy, odbiorcy itp.). Jak podobny jest rozwój Androida na innych platformach, na przykład tabletach lub nowszych telewizorach z systemem Android, do Androida dla smartfonów? Jak kompatybilny jest kod opracowany do uruchamiania na emulatorze systemu Android (telefon) z kodem systemu Android działającym na innych platformach sprzętowych. Jeśli napiszę dużo fajnego kodu dla smartfona z Androidem, ile z niego będę musiał ulepszyć/wymyślić na nowo, aby działał na innych platformach z Androidem? Prowadzi to do ogromnego pytania dotyczącego przenośności widżetów interfejsu użytkownika systemu Android (telefon). Czy kod, który używa tych obiektów, działa w niezmienionej formie na innych platformach Androida? Jeśli nie, to ile wysiłku wymaga uczynienie przenośnej platformy międzysprzętowej kodu Androida? Jeśli kod jest dość przenośny, myślę, że programowanie dla systemu operacyjnego Android na stole lub zwykłym komputerze z Androidem, jeśli zyska popularność, będzie doskonałym doświadczeniem. Jeśli ktoś z was programował Androida na smartfonach i innych platformach sprzętowych, chciałbym usłyszeć, jakie były wasze doświadczenia.


title: Jakie są przypadki użycia tych typów relacji?

text: # Przypadek użycia Jakie są przypadki użycia przy tworzeniu relacji **jeden do jednego**, w której rodzic wskazuje na dziecko w porównaniu z dzieckiem wskazującym na rodzica? Jeśli nie ma różnicy, czy jedno jest lepsze od drugiego? ## Przykład +---------+ +-------+ +-----------+ +----------+ + Rodzic + + Dziecko + + Rodzic + + Dziecko + +---------+ +----------+ vs. +-----------+ +---------- + + idDziecko + --> + id + + id + <-- + idRodzic + +---------+ +-------+ +--------+ + ----------+ Podejrzewam, że wybierasz między tymi relacjami w zależności od tego, która encja jest używana jako pierwsza w aplikacji. tj. Jeśli obiekt nadrzędny zawsze pojawia się przed obiektem podrzędnym, to relacja powinna być zmapowana z rodzica na dziecko.


title: Strona logowania/identyfikator sesji w module wewnętrznym

text: Mamy moduł C# ORM, który generuje zapytania. Rejestruje wygenerowane zapytania i inne informacje w pliku błędów/śledzenia. Jest używany przez naszą aplikację internetową. Większość naszych zapytań jest generowana dynamicznie (na podstawie dynamicznych reguł biznesowych i interakcji użytkowników), nad którymi nie mamy dużej kontroli. Oczywiście moduł ORM jest całkowicie oddzielony od aplikacji internetowej, a zatem jest całkowicie nieświadomy sesji internetowych, trafień na strony itp. Minusem jest to, że generowane przez niego wpisy dziennika nie mogą być prześledzone z powrotem do oryginalnego trafienia na stronę. Gdy zauważymy w dzienniku nieskuteczne zapytanie, nie możemy łatwo określić, które działanie strony generuje to zapytanie. Jak mogę utrzymać moduł ORM oddzielony od aplikacji internetowej, ale nadal pozwolić mu rejestrować wystarczającą ilość istotnych informacji, aby skorelować każdy wpis w dzienniku z działaniem sesji/strony? (Wiem, że możemy przekazać obiekt loggera, a obiekt loggera może zachować informacje o sesji. Jednak niektóre z tych wywołań funkcji są zagnieżdżone na 10 poziomach, więc przekazywanie loggera jest kłopotliwe).


title: Dlaczego do interfejsów w Javie 8 dodano metody domyślne i statyczne, skoro mieliśmy już klasy abstrakcyjne?

text: W Javie 8 interfejsy mogą zawierać metody implementowane, metody statyczne oraz tzw. metody „domyślne” (które klasy implementujące nie muszą zastępować). Z mojego (chyba naiwnego) punktu widzenia nie było potrzeby naruszania interfejsów w ten sposób. Interfejsy zawsze były kontraktem, który musisz wypełnić, a jest to bardzo prosta i czysta koncepcja. Teraz jest to mieszanka kilku rzeczy. Moim zdaniem: 1. metody statyczne nie należą do interfejsów. Należą do klas użytkowych. 2. "Domyślne" metody nie powinny być w ogóle dozwolone w interfejsach. Zawsze możesz użyć do tego celu klasy abstrakcyjnej. W skrócie: Przed Javą 8: * Można użyć klas abstrakcyjnych i zwykłych, aby zapewnić metody statyczne i domyślne. Rola interfejsów jest jasna. * Wszystkie metody w interfejsie powinny być nadpisane przez implementację klas. * Nie można dodać nowej metody w interfejsie bez modyfikacji wszystkich implementacji, ale jest to właściwie dobra rzecz. Po Javie 8: * Nie ma praktycznie żadnej różnicy między interfejsem a klasą abstrakcyjną (poza wielokrotnym dziedziczeniem). W rzeczywistości możesz emulować zwykłą klasę z interfejsem. * Podczas programowania implementacji programiści mogą zapomnieć o nadpisaniu domyślnych metod. * Wystąpił błąd kompilacji, jeśli klasa próbuje zaimplementować dwa lub więcej interfejsów z domyślną metodą o tej samej sygnaturze. * Dodając do interfejsu metodę domyślną, każda klasa implementująca automatycznie dziedziczy to zachowanie. Niektóre z tych klas mogły nie zostać zaprojektowane z myślą o nowej funkcjonalności, co może powodować problemy. Na przykład, jeśli ktoś doda nową domyślną metodę `default void foo()` do interfejsu `Ix`, to klasa `Cx` implementująca `Ix` i posiadająca prywatną metodę `foo` z tą samą sygnaturą nie skompiluje się. Jakie są główne powody tak dużych zmian i jakie nowe korzyści (jeśli w ogóle) dodają?


title: Dwa ściśle powiązane projekty — dwa repozytoria czy jedno?

text: ### Tło Koduję dwa ściśle powiązane projekty Java. Pierwszym projektem jest Single Facility Simulator, który symuluje bardzo prosty łańcuch dostaw z jednym obiektem. Drugim projektem jest Supply Chain Simulator, który symuluje bardziej złożone sieci łańcucha dostaw, czyli wiele obiektów ułożonych w formie grafu z ukierunkowanymi krawędziami pomiędzy niektórymi parami obiektów. Pierwszy projekt to projekt „zabawkowy” w tym sensie, że używam go do testowania i udoskonalania projektu na wysokim poziomie. Drugi projekt to „prawdziwy” projekt, którym jestem zainteresowany w celach zawodowych. Projekt wysokiego poziomu obu projektów jest taki sam, chociaż istnieją pewne różnice, na przykład obiekt „Zapotrzebowanie” w projekcie „zabawka” musi tylko generować wartość popytu na okres, podczas gdy obiekt „Zapotrzebowanie” w „prawdziwy” projekt musi generować wartość popytu na obiekt w okresie. ### Pytanie Obecnie projekt „zabawka” znajduje się we własnym repozytorium Git. Rozpoczynając realizację „prawdziwego” projektu, czy powinienem rozwidlić projekt „zabawki”, czy też powinienem zaimplementować „prawdziwy” projekt jako różne pakiety w tej samej przestrzeni, co projekt „zabawka”?


title: Buforowanie serwera pocztowego

text: Obecnie pracuję nad internetowym klientem poczty. Kiedy użytkownik się loguje, pobieram wszystkie maile ze SKRZYNKI ODBIORCZEJ od początku czasu. Zgodnie z oczekiwaniami jest to dość powolne. Planuję zaimplementować jakąś technikę filtrowania/cachowania i szukałem pomysłów. Jeśli wezmę wszystkie numery wiadomości, przytnę je i posortuję w porządku malejącym, czy otrzymam wiadomości od ostatniej otrzymanej wiadomości do pierwszej? Ponadto, czy byłoby lepiej przechowywać wiadomości e-mail w pośredniej bazie danych i stamtąd je pobierać?


title: Najlepszy sposób na odwoływanie się do statycznych danych bazy danych w kodzie?

text: Wiele aplikacji zawiera „dane statyczne”: dane, które tak naprawdę nie zmieniają się w czasie życia aplikacji. Na przykład możesz mieć listę obszarów sprzedaży, która prawdopodobnie będzie stałą listą w przewidywalnej przyszłości. Często zdarza się, że te dane statyczne znajdują się w tabeli bazy danych (często dlatego, że chcesz się do nich odwoływać w kluczach obcych innych tabel). Prosta przykładowa tabela będzie miała identyfikator do użycia jako klucz podstawowy i opis. Na przykład tabela SalesArea będzie miała (co najmniej) kolumnę SalesAreaId i SalesAreaDescription. Teraz w kodzie możesz nie chcieć traktować każdego wiersza tabeli tak samo. Na przykład możesz chcieć ustawić domyślny obszar sprzedaży na niektórych ekranach, podać różne wartości dla niektórych obszarów lub ograniczyć możliwości użytkowników w innych obszarach. Jaki jest najlepszy sposób odwoływania się do tych danych statycznych w kodzie? Czemu? 1. Zakoduj na stałe opisy w swoim kodzie. Użyj tego, aby wyszukać SalesAreaId z bazy danych, gdy jest to potrzebne. 2. Zakoduj identyfikatory na stałe w swoim kodzie. Użyj tego, aby wyszukać SalesAreaDescription, gdy jest to potrzebne. 3. Dodaj kolumnę do tabeli dla każdego celu, np. kolumna „IsDefaultOnProductLaunchScreen” i tak dalej (może być ich wiele). 4. Coś innego. Czy są jakieś inne specjalne uwagi, które powinienem wziąć pod uwagę, mając do czynienia ze statycznymi danymi bazy danych? Na przykład, nadając tym tabelom specjalną nazwę?


title: Zwiększyć motywację w Wiki naszego projektu dzięki osiągnięciom?

text: Obecnie prowadzimy mediawiki dla naszych programistów, a większość programistów nie dodaje wpisów, jeśli znajdą coś do udokumentowania. Zamiast tego wysyłają go na listę zawierającą wszystkich programistów i najczęściej dodaję wpisy. Pomyślałem, że dodanie czegoś takiego jak wynik, osiągnięcia, odznaki itp. może dodać motywacji, ale nie mogę znaleźć rozszerzenia dla wiki mediów. Czy istnieje takie rozszerzenie? Czy któryś z nich jest zalecany? Zabawny fakt: obecnie myślę, że system StackExchange pasowałby znacznie lepiej, ale potrzebujemy go wewnętrznie ;)


title: Jak wyznaczyć stretch cele dla zespołu programistów?

text: Planujemy sprowadzić na lato pięciu stażystów z college'u, aby pomogli w niektórych projektach rozwojowych. Każdy otrzyma dość samodzielny projekt, który mamy nadzieję będzie w stanie zrealizować. Chcielibyśmy jednak zapewnić pewną zachętę do wyjątkowej pracy, czy to wyjątkowej jakości, czy wyjątkowej wydajności. Powinno to być również coś ilościowego, a nie subiektywnego. W ten sposób możemy dać im cel wykraczający poza „uszczęśliwienie szefa i zdobądź nagrodę”. Ponadto wolimy, aby było to coś, co zachęci ich do współpracy, coś, co mogą osiągnąć jako grupa. Wreszcie, powinno być coś w rodzaju zabawy, aby doprowadzić do nagrody pod koniec lata. Szukamy czegoś inspirującego, co zachęci ich do osiągania więcej, a nie miernika, który nadejdzie nad ich głowami w czasie przeglądu. Jak inspirujesz zespół programistów?


title: Czy mądrze jest poruszać się tam iz powrotem między dwoma językami programowania?

text: Od prawie dwóch lat piszę sporo PHP. Teraz zajmuję się rozwojem .NET (głównie c#). Jednak czasami wracam i robię trochę php. Moje główne pytanie brzmi, czy mądrze jest kontynuować to, czy powinienem kontynuować programowanie w C#? Czy zaszkodziłoby mi to na dłuższą metę (pamiętaj, że moim głównym celem nie jest bycie waletem we wszystkich transakcjach), czy jest to dobra praktyka?


title: Czy istnieje dobry idiom do obsługi in-line startActivityForResult?

text: Mam trochę kodu Java, który wygląda mniej więcej tak. //Globalne wartości logiczne coś_wyniku; Monitoruj coś_monitor; // Jakaś klasa w wątku roboczym Intent intent = new Intent("android.something.ENABLE"); Global.coś_włączone = fałsz; Global.something_monitor = nowy Monitor(); currentActivity.startActivityForResult(zamiar, 1234); coś_monitor.Czekaj(); this.enabled = (Global.something_result = OK); // Część aktywności w wątku interfejsu użytkownika jest chroniona void onActivityResult(kod int, wynik int, dane intencji) { if(code == 1234) { Global.something_result = wynik; Global.coś_monitor.Sygnał(); } } Pomysł polega na tym, że wątek roboczy może coś zrobić w działaniu i czekać na wynik. Działa dobrze, ale są fragmenty kodu w trzech różnych miejscach, to dużo kodu do zrobienia, niektóre przypadki są bardziej skomplikowane i są replikowane dla każdej innej rzeczy, którą chcesz zrobić. Jest również podatny na błędy, ponieważ potencjalnie może powodować problemy z wątkami. To jest w zasadzie to, co „await” ma dla Ciebie zrobić. Czy istnieje dobrze znany idiom lub technika, aby zrobić to bezpiecznie i z lepszą hermetyzacją? Chociaż kontekst jest bardzo mocno związany z Javą na Androidzie, to znacznie bardziej chodzi o użyteczny idiom do rozwiązywania tego rodzaju problemu z wątkami, który mnie interesuje.


title: Kiedy mój kod jest automatycznie objęty GPL?

text: Obecnie pracuję z Wordpressem (GPL). Zasadniczo zrozumiałem, kiedy piszesz wtyczkę/moduł/itd. staje się GPL, ponieważ jest uważany za zależny od Wordpress. Ale wręcz przeciwnie, obrazy i CSS z motywów nie powinny być objęte GPL (są uważane za niezależne pliki danych, które mogą mieć znaczenie nawet bez Wordpressa). Co się stanie, jeśli utworzę bibliotekę matematyczną bez licencji GPL. Następnie tworzę wtyczkę Wordpress, która korzysta z tej biblioteki? Czy moja biblioteka stanie się GPL? Czy to oznacza, że nie mogę ich połączyć? Nie umieściłeś ich nawet w jednym pliku zip? Co zrobić, jeśli moja biblioteka jest usługą internetową? A co, jeśli usługa internetowa jest hostowana samodzielnie? Czy mogę połączyć go w całości z kodem wtyczki? Jeśli nie mogę stworzyć żadnego pakietu bez propagowania GPL, w jaki sposób można połączyć motyw (feat. css + obrazy) dla Wordpressa?


title: Testowanie aplikacji z funkcjami statystycznymi

text: > **Możliwy duplikat:** > Jak mam testować losowość? Czy opisano niektóre techniki testowania aplikacji, które wymagają pewnych cech statystycznych lub probabilistycznych? Mogą na przykład korzystać z generatorów liczb losowych, a klient może życzyć sobie określonej dystrybucji itp. W jaki sposób firmy programistyczne sprawdzają, czy wymagania statystyczne są spełnione?


title: Jak przetestować funkcję generowania losowego w aplikacji?

text: > **Możliwy duplikat:** > Jak mam testować losowość? Jedną z funkcji rozwijanych w naszej aplikacji było umożliwienie użytkownikowi kliknięcia przycisku, który losowo wybierze element spośród (zwykle 5-10) wartości zarejestrowanych w bazie danych. Losowość nie musi być bezpieczna ani jednolita naukowo, ale potrzebujemy, aby była w jakiś sposób nieprzewidywalna i nie była zauważalnie nastawiona na jedną z wartości. Jakieś sugestie, jak napisać dobry test jednostkowy i test funkcjonalny dla tej funkcji?


title: Jak nazywali programowanie zorientowane obiektowo, zanim Alan Kay wymyślił ten termin?

text: Alan Kay twierdzi, że „wymyśliłem termin „zorientowany obiektowo” i mogę powiedzieć, że nie miałem na myśli C++. Miał na myśli oczywiście Smalltalk. Ale sam nie wymyślił programowania obiektowego; podstawowe idee otrzymał od Simuli. Więc jeśli termin nie został jeszcze wymyślony, jak pierwotnie nazywali programowanie obiektowe w Simuli?


title: Aplikacja internetowa wykorzystująca JSF-Front end i node.js-Back end

text: Planuję zbudować aplikację internetową eCommerce (podobną do http://zovi.com/) używając JSF 1.2 i node.js. Wszystkie komponenty frontonu będą komponentami jsf powiązanymi z backing bean. Chcę osiągnąć funkcjonalność czasu rzeczywistego (np. wyświetlanie **Dzisiejszych gorących sprzedawców** , **Klienci, którzy oglądali ten przedmiot, oglądali również** takie wzory) za pomocą node.js. A wszystkie operacje pobierania danych z bazy danych (MySQL) powinny być realizowane przy użyciu węzła i wyświetlania w komponentach JSF. Jestem zdezorientowany, jak powiązać dane, które otrzymuję z węzła do odpowiedniej zarządzanej właściwości fasoli (ponieważ powiązałem ją z odpowiednim komponentem JSF). **Na przykład** przy ładowaniu muszę pobrać dane za pomocą node.js i wypełnić komponent datatable, a także powinienem zaktualizować backing bean. Czy jest to możliwe bez korzystania z usług internetowych, takich jak REST Mam nadzieję, że rozumiesz ten kontekst. Proszę zasugerować kilka rozwiązań. Słyszałem, że wydajność Node.js jest wydajna tylko dla małych aplikacji internetowych, a nie dla poziomu Enterprise. Czy moje podejście jest prawidłowe?


title: Prośba/Odpowiedź, jak należy zainicjować faktyczne wysyłanie transmisji?

text: Pracuję nad interfejsami na poziomie języka do internetowych API. Biblioteki te są oczywiście zbudowane wokół istniejących interfejsów żądania/odpowiedzi HTTP. Widzę, że mam kilka opcji przesyłania metody w obiekcie żądania, np. moje $req = Request->new( ... ); moja $odpowiedź = $żądanie->prześlij; # zwraca odpowiedź my $res2 = $req->submit; # ponownie wysyła to samo żądanie lazy request akcesor my $req = Request->new( ... ); moja $odpowiedź = $żądanie->odpowiedź; # zwraca referencję do odpowiedzi my $res2 = $req->response; # nie wysyła ponownie, po prostu zwraca referencję $req->clear_response; # czyści wartość odpowiedzi my $res3 = $req->response; # wysyła ponownie, ponieważ nie ma odpowiedzi To są dwie opcje, o których myślę. Widziałem więcej przykładów tego pierwszego, ale nie jestem pewien, czy jest powód, dla którego. Czy masz jakieś preferencje dotyczące stylu interfejsu? czy są inne sposoby, o których nie myślę? Ogólnie staram się rozeznać, jaki jest najlepszy interfejs API do pobrania odpowiedzi.


title: Twitter w przeglądarce aplikacji + ciąg agenta użytkownika

text: Niedawno (chyba kilka tygodni temu) wraz z najnowszą aktualizacją aplikacji Twitter na iOS wszystkie linki znalezione w tweetach są otwierane we wbudowanej przeglądarce Twittera. Moje pytanie brzmi, jak znaleźć agenta przeglądarki Twittera, aby móc wyświetlać niestandardowe wiadomości. Na przykład: Jeśli przeglądarka jest przeglądarką Twittera w aplikacji, wyświetl niestandardową wiadomość przez HTML+PHP. Wydaje się, że nie ma znanego agenta. Każda pomoc byłaby wdzięczna.


title: Jaką drogę projektowania powinienem obrać?

text: Więc wziąłem się do projektu w pracy, który ciężko mi atakować, i chciałbym trochę opinii i sugestii. Pracuję dla internetowego sklepu detalicznego, w którym mamy stary skrypt +7k-line, którego używamy do tworzenia różnych plików danych o produktach (głównie dla CSE, takich jak Produkty Google, Pricegrabber itp.). Stało się to kompletnym bałaganem, głównie dlatego, że każdy kanał jest nieco inny i ponieważ prawie nie ma rozdzielenia obaw. Dostałem zadanie refaktoryzacji, do czego zgłosiłem się na ochotnika z zapałem, i wkrótce muszę wymyślić projekt. Moim głównym celem jest posiadanie systemu łatwego w utrzymaniu i łatwego dodawania nowych kanałów w razie potrzeby. Jeśli wydajność trochę ucierpi, nie jest to wielkim problemem, chociaż zwiększenie wydajności byłoby wspaniałe, gdyby nie kolidowało z dwoma pierwszymi golami. Do tej pory większość tego, nad czym pracowałem, była dość liniowa i imperatywna; dane przychodzą na górze i wychodzą na dole. Ale ze względu na różne kanały z różnymi potrzebami, zastanawiam się, czy podejście zorientowane obiektowo byłoby korzystne. Programowanie OO wciąż jest dla mnie trochę zagadką, więc ten problem był trochę trudny do zaatakowania. Moja podstawowa idea jest następująca; obiekty istnieją dla każdego głównego problemu (zdjęcia, opisy produktów, obsługa plików itp.). Następnie każdy kanał ma obiekt (być może implementujący klasę abstrakcyjną), który komunikuje się z innymi obiektami, prosząc o potrzebne informacje. Na przykład obiekt Pricegrabber przesyła obiektowi Image listę produktów wraz z niektórymi parametrami (maksymalny rozmiar obrazu itp.), a obiekt Image zwraca listę produktów z odpowiednimi adresami URL obrazu. W ten sposób obiekt Pricegrabber nie wie ani nie dba o to, jak obiekt Image znajduje swoje adresy URL ani jakie tabele mysql obiekt Image użył lub utworzył; po prostu wchodzi na listę produktów i otrzymuje listę adresów URL obrazów. Pricegrabber robi to z każdym głównym obiektem, dopóki nie zostanie utworzony plik danych. Główne pytania: * Czy ten wzorzec projektowy ma sens? Czy istnieje lepszy wzór, którego mógłbym użyć? * Czy OO wydaje się przesadą dla tego, co próbuję osiągnąć? * Chociaż normalnie używamy Perla do naszych raportów, czy warto byłoby zamiast tego używać PHP? Jeśli tak, dlaczego? (Chciałbym użyć Pythona lub Rubiego, ale IT położyło na tym kabosz).


title: Klasa z samymi metodami

text: Jak nazywa się klasa, która ma tylko metody? Brak pól/właściwości. Tylko dwie metody z możliwością parsowania pliku na dwa sposoby. Nazwałem klasę Parser, ale nie wydaje się właściwe, aby klasa robiła tylko to. Lub? Czy powinno być w klasie? EDYCJA: Dummy Przykładowa klasa Parser { public int parseMethod1(string file) { //parse & return } public string[] parseMethod2(string file) { //parse & return } } Jak mogę napisać interfejs `IParser` który mi pozwolił mieć podklasę implementować tylko jedną z metod?


title: Zrozumienie specjalnej składni Scali

text: Rozumiem to: List("jedno słowo", "inne słowo") unzip (_ span (_ != ' ')) Ale nie rozumiej, co się dzieje tutaj **poniżej** w `span`. `span` przyjmuje predykat i myślę, że nawiasy klamrowe można pominąć, ponieważ `span` jest używane w linii i ma tylko jeden parametr, ale dlaczego nie ma żadnego `_` i co to jest `' '.!=` List("jeden słowo", "inne słowo") rozpakuj (_ span ' '.!=)


title: Czy muszę najpierw nauczyć się Pythona, aby zrozumieć część 2 książki Test Driven development?

text: Wygląda na to, że Python jest używany jako język kodowania w drugiej części książki Kenta Becka Test Driven Development. Przeczytałem pierwszą część tej książki i zacząłem doceniać wartość TDD. Pierwsza część była łatwa do zrozumienia, ponieważ przykłady były w Javie i jest to jedyny język, nad którym pracowałem. Jak przygotować się do przeczytania drugiej części książki? Jaką to przyniesie? Nie planuję sam pisać frameworka testowego. Czy mogę to całkowicie pominąć i przejść do trzeciej sekcji?


title: Czy istnieje nowoczesny zamiennik narzędzia do testowania mutacji, takiego jak Jester dla Javy?

text: > „Dlaczego po prostu uważasz, że twoje testy są dobre, skoro możesz mieć pewność? Czasami Błazen mówi mi, że moje testy są szczelne, ale czasami zmiany, które wykryje, przychodzą jak grom z jasnego nieba. Wysoce rekomendowane." - Kent Beck Ale widzę, że w stackoverflow nie ma nawet tagu o nazwie "_Jester_". Więc jaki jest współczesny zamiennik _Jester_, jeśli w ogóle? Skąd można mieć pewność, że napisane testy jednostkowe są solidne, poza znajdowaniem statystyk z pokrycia kodu za pomocą narzędzi takich jak _Cobertura_ i _Clover_?


title: Czy można rozpowszechniać system śledzenia problemów?

text: Myślałem o oprogramowaniu do śledzenia problemów, takim jak Redmine, Trac, a nawet tym, który jest w Fossil i coś mnie uderzyło: czy istnieje powód, dla którego Redmine i Trac nie mogą być rozpowszechniane? A może jest to możliwe i po prostu nie wiem jak to możliwe? Jeśli to niemożliwe, dlaczego? Przez dystrybucję rozumiem takie jak Facebook czy Google lub inne aplikacje, które efektywnie działają na wielu urządzeniach jednocześnie, ale udostępniają dane.


title: Podaj zdarzenie OnChange dla właściwości wewnętrznej, która jest kontrolowana zewnętrznie?

text: Dla zabawy i na żądanie aktualizuję ten komponent ImageGrid, rodzaj pola listy dla obrazów, które ma właściwość `FileNames` typu `TSStrings`. Dla ułatwienia pisania nadużywałem jego właściwości `FileNames.Objects` do przechowywania bitmap. Ale ponieważ typ `TSrings` sugeruje, że użytkownicy komponentu mogliby lub chcieliby używać właściwości `Objects` do niestandardowych danych, np. podobnie jak `TListBox.Items`, przepisuję komponent, aby przechowywać mapy bitowe w innym miejscu i pozostawić `FileNames.Objects` nietknięty do nieznanego przyszłego użycia. Teraz zastanawiam się, czy zapewnić zdarzenie „OnChange”. A jeśli tak, czy uruchamiać go, gdy zmieni się jeden lub więcej obiektów `FileNames.Objects`. Próbując samodzielnie odpowiedzieć, zanurkowałem w VCL Delphi i natknąłem się na: * `TMemo`: ma zdarzenie `OnChange`, ale ignoruje `Lines.Objects` * `TListBox`: nie ma zdarzenia `OnChange`, ale jest w stanie przechowywania `Items.Objects` * `TSringGrid`: nie ma zdarzenia `OnChange`, ale może przechowywać `Objects`, `Rows.Objects`, `Cols.Objects` Więc teraz jestem trochę zakłopotany, ponieważ nie mogę sobie wyobrazić Deweloperzy firmy Borland nie dodali wydarzeń do kilku obiektów „Objects” z łatwością. Oczywiście, gdy użytkownik zmienia `FileNames.Object` w moim komponencie, wie, że to robi i może sam zaimplementować odpowiednią interakcję. Ale czy nie byłoby wygodnie, gdyby składnik robił to automatycznie? Czego można by się spodziewać po tym komponencie pod tym względem?


title: Jak powstały pierwsze kompilatory?

text: Zawsze się nad tym zastanawiam i być może potrzebuję dobrej lekcji historii na temat języków programowania. Ale skoro większość kompilatorów w dzisiejszych czasach jest tworzonych w C, jak powstały pierwsze kompilatory (AKA przed C) lub czy wszystkie języki zostały po prostu zinterpretowane? Mając to na uwadze, nadal nie rozumiem, jak powstał nawet pierwszy język asemblerowy, rozumiem, czym jest język asemblerowy, ale nie widzę, jak udało im się uruchomić BARDZO pierwszy język asemblerowy (jak, jak zrobili pierwszy komendy (takie jak `mov R21`) lub w/e ustawione na odpowiednik binarny?


title: Czy zmienne flagi są absolutnym złem?

text: Czy zmienne flagi są złe? Czy poniższe rodzaje zmiennych są głęboko niemoralne i czy złe jest ich używanie? > "zmienne logiczne lub całkowitoliczbowe, którym przypisujesz wartość w określonych miejscach, a następnie > poniżej sprawdzasz to lub robisz coś lub nie, na przykład > używając `newItem = true` następnie kilka linii poniżej `if (newItem ) then `" Pamiętam, jak zrobiłem kilka projektów, w których całkowicie zaniedbałem używanie flag i skończyłem z lepszą architekturą/kodem; jednak jest to powszechna praktyka w innych projektach, nad którymi pracuję, a gdy kod rośnie i dodawane są flagi, rośnie również IMHO code-spaghetti. Czy powiedziałbyś, że istnieją przypadki, w których używanie flag jest dobrą praktyką, a nawet konieczne?, czy też zgodzisz się, że używanie flag w kodzie to... czerwone flagi i należy ich unikać/refaktoryzować; ja, po prostu radzę sobie z wykonywaniem funkcji/metod, które sprawdzają stany w czasie rzeczywistym.