title: Co robisz, aby przekonać szefa do aktualizacji środowiska programistycznego?

text: Ledwie mi się to udało, zastanawiam się tylko, jak przekonałeś swojego szefa do aktualizacji i czy radzisz sobie lepiej ode mnie. Oto na czym stoję: 1. Używam Delphi 7. 2. Kupiliśmy Delphi 2009 dla każdego programisty. 3. Nadal używam Delphi 7. 4. Jest prawie 2011, a Delphi 2010 i Delphi XE już się skończyły. Więc utknąłem w timewarp, jest zbyt wiele zobowiązań, aby zawracać sobie głowę tworzeniem błędów poprzez aktualizację naszego IDE. Mam złe przeczucie, że kiedy w końcu zaczniemy używać Delphi 2009, będzie to tak samo nieprzyjemne jak Delphi 7. (Może to być zły przykład ogólny, ponieważ w aktualizacji 2009 są specjalne względy Unicode, ale chciałbym uzyskać ogólne odpowiedzi - bo robię coś więcej niż tylko programowanie Delphi dla mojej firmy)


title: Napisanie minimalnego kodu, aby zdać test jednostkowy - bez oszukiwania!

text: Kiedy robisz TDD i piszesz test jednostkowy, w jaki sposób można oprzeć się pokusie „oszukiwania” podczas pisania pierwszej iteracji kodu „implementacyjnego”, który testujesz? Na przykład: Załóżmy, że muszę obliczyć silnię liczby. Zaczynam od testu jednostkowego (używając MSTest) coś takiego: [TestClass] public class CalculateFactorialTests { [TestMethod] public void CalculateFactorial_5_input_returns_120() { // Rozmieść var myMath = new MyMath(); // Ustaw długie wyjście = myMath.CalculateFactorial(5); // Assert Assert.AreEqual(120, wyjście); } } Uruchamiam ten kod i kończy się niepowodzeniem, ponieważ metoda `CalculateFactorial` nawet nie istnieje. Więc teraz piszę pierwszą iterację kodu implementującą testowaną metodę, pisząc minimalny kod wymagany do przejścia testu. Chodzi o to, że ciągle mam ochotę napisać: public class MojaMatematyka { public long CalculateFactorial(long input) { return 120; } } Jest to technicznie poprawne, ponieważ _naprawdę_ jest minimalnym kodem wymaganym do _zaliczenia tego konkretnego testu_ (przejście na zielony), chociaż jest to wyraźnie "oszustwo", ponieważ tak naprawdę nie _prób_ wykonać funkcji obliczania Silnia. Oczywiście teraz część refaktoryzacji staje się ćwiczeniem z „napisania poprawnej funkcjonalności”, a nie prawdziwą refaktoryzacją implementacji. Oczywiście dodanie dodatkowych testów z różnymi parametrami zakończy się niepowodzeniem i wymusi refaktoryzację, ale musisz zacząć od tego jednego testu. Tak więc moje pytanie brzmi: jak uzyskać równowagę między „pisaniem minimalnego kodu, aby przejść test”, a jednocześnie zachowaniem jego funkcjonalności i ducha tego, co faktycznie próbujesz osiągnąć?


title: Porzucenie szkoły średniej – czy to zawsze takie trudne?

text: > **Możliwy duplikat:** > Czy ktoś może znaleźć pracę jako programista bez wykształcenia? Popełniłem wiele błędów, gdy byłem młodszy i nigdy nie skończyłem nawet w dziewiątej klasie (to jest Kanada i przyznam się do niewiedzy, ponieważ nie jestem pewien, jak różnią się systemy edukacyjne w różnych krajach). Mam teraz 24 lata i od dłuższego czasu szukam pracy w zakresie programowania. Wydaje się, że wszyscy chcą mieć dyplomy (czy to na uniwersytecie, czy w college'u) z jakiegoś rodzaju programowania komputerowego, co pozostawia mnie w impasie. Nie mam dyplomu ukończenia szkoły średniej, nie mówiąc już o szkole policealnej. Co takiego facet jak ja robi, żeby być traktowanym poważnie jako programista? Jestem samoukiem, ale wydaje się, że nikt nie przywiązuje do tego wielkiej wagi tak daleko w północnym Ontario. Rozważałem kodowanie w otwartym kodzie źródłowym i próbuję zbudować z tego portfolio, ale znowu nie wiem, czy zostanie to potraktowane bardzo poważnie. Zastanawiałem się nawet nad blogowaniem o programowaniu, jeśli nie po to, żeby mieć jakiś rodzaj walidacji, o której wiem, o czym mówię. Niestety, w dzisiejszych czasach zbyt łatwo jest udawać, że wiesz cokolwiek o **czymkolwiek**, więc zastanawiam się – czy któryś z was odpadł, a jeśli tak, to jak potraktowano was poważnie? Ponadto, jeśli są ludzie, którzy zatrudniają programistów, co musiałby zrobić ktoś, aby być branym pod uwagę w twoich oczach? Dziękuję.


title: Czy klasy/metody abstrakcyjne są przestarzałe?

text: Kiedyś tworzyłem wiele abstrakcyjnych klas/metod. Potem zacząłem używać interfejsów. Teraz nie jestem pewien, czy interfejsy nie czynią przestarzałych klas abstrakcyjnych. Potrzebujesz w pełni abstrakcyjnej klasy? Zamiast tego utwórz interfejs. Potrzebujesz abstrakcyjnej klasy z pewną implementacją? Stwórz interfejs, stwórz klasę. Odziedzicz klasę, zaimplementuj interfejs. Dodatkową korzyścią jest to, że niektóre klasy mogą nie potrzebować klasy nadrzędnej, ale po prostu zaimplementują interfejs. Czy zatem klasy/metody abstrakcyjne są przestarzałe?


title: Projektowanie interfejsu użytkownika i paradygmat potwierdzania

text: Właśnie widziałem ten wykład Spolsky'ego, w którym kwestionuje potrzebę wyborów i dialogów potwierdzających. W pewnym momencie ma okno ustawień MacOS i wspomina, że „teraz niektórzy pozbywają się przycisku OK”. W oknie faktycznie nie ma przycisku OK (lub Anuluj). Zmiana ustawienia powoduje jego zmianę, kiedy skończysz konfigurację, zamkniesz to okno, kropka. Będąc długoletnim użytkownikiem systemu Windows i niedawnym właścicielem komputera Mac, różnica jest początkowo zauważalna. Szukałem przez chwilę przycisku OK, by całkiem naturalnie i bezboleśnie przekonać się, że go nie ma. Wyraziłem satysfakcję i poszedłem swoją wesołą drogą. Jednak jestem ciekaw, czy ten wzorzec projektowania interfejsu użytkownika odniósłby sukces w świecie opartym na systemie Windows. Przyznaję, że gdyby Microsoft wydał go, powiedzmy, Windows-8 (mała szansa, wiem), ludzie w końcu się do tego przyzwyczaili. Ale czy istnieje jakieś doświadczenie takiego podejścia, zmiany „paradygmatu konfirmacji” na platformie, na której jest tak rozpowszechnione? Czy pozostawiło to użytkowników (zwłaszcza tych nietechnicznych) zdezorientowanych, sfrustrowanych, przestraszonych lub szczęśliwych? TL; DR: Usuń potwierdzenie OK / anuluj, co się stanie? EDYCJA: Mac GUI dla ustawień wyglądu. ![tekst alternatywny](http://i.stack.imgur.com/YtoYX.png)


title: Czy możemy skonfigurować serwer svn na komputerze lokalnym bez dostępu do sieci?

text: Chcę skonfigurować repozytorium SVN na moim komputerze bez dostępu do sieci. Pracuję nad kodem bez współpracowników, więc nie chcę, aby był publicznie dostępny. Przeczytałem ten post, ale sugeruje on korzystanie z internetowych usług repozytoriów SVN, które udostępniają bezpłatne repozytoria. W takim przypadku mój kod będzie publicznie dostępny (zgodnie z warunkami bezpłatnych planów). Zastanawiałem się więc, czy mogę skonfigurować lokalny serwer na moim komputerze z systemem Windows XP, do którego tylko ja mam dostęp, nawet jeśli nie mam połączenia z Internetem?


title: Czym dokładnie jest ponowne użycie OO?

text: I dlaczego tak często się o tym mówi? Tak jak ja wiem, czym jest programowanie OO... ale ludzie zawsze mówią "Oh OO reuse to największy mit programistyczny w historii". Co to dokładnie oznacza?


title: Czy występują problemy z nauką programowania na maszynie wirtualnej?

text: Nie jestem programistą, ale analitykiem finansowym z zawodu, który uczy się kodować (Python, Django, C w/ctypes, gdy potrzebuję czegoś, co działa naprawdę szybko) w wirtualnej konfiguracji Ubuntu na moim laptopie do pracy. Pytanie: Po prostu założyłem, że kodowanie na maszynie wirtualnej nie różni się od tego, że Linux był moim głównym systemem operacyjnym. Czy to złe założenie? Czy jest coś, na co muszę uważać? Dzięki, Mike


title: Jak określić ilościowo wartość testów jednostkowych

text: Nasza organizacja rozważa zintegrowanie testów jednostkowych z naszym przepływem pracy tworzenia oprogramowania. Słyszałem wiele anegdotycznych historii o tym, jak zachęca do lepszego, łatwego w utrzymaniu i dobrze zaplanowanego kodu. Jako programista rozumiem korzyści. Aby jednak zbudować konsensus wokół wykorzystania testów jednostkowych w projektach, które mogą mieć wpływ na klientów, chciałbym wykazać jego wartość ilościowo, pod względem oszczędności godzin czasu programisty. Czy ktoś w społeczności ma jakieś dane historyczne lub doświadczenie, którymi chciałby się podzielić jako dowód ilościowy w moim przypadku na potrzeby testów jednostkowych?


title: Zautomatyzowane testy jednostkowe, testy integracyjne lub testy akceptacyjne

text: Testy TDD i jednostkowe wydają się być w tej chwili wielkim entuzjazmem. Ale czy to naprawdę jest tak przydatne w porównaniu z innymi formami automatycznego testowania? Intuicyjnie domyślam się, że automatyczne testowanie integracyjne jest o wiele bardziej przydatne niż testowanie jednostkowe. Z mojego doświadczenia wynika, że najwięcej błędów pojawia się w interakcji między modułami, a nie w rzeczywistej (zwykle ograniczonej) logice każdej jednostki. Również regresje często miały miejsce z powodu zmiany interfejsów między modułami (oraz zmienionych warunków wstępnych i końcowych). Czy coś nie rozumiem lub dlaczego testowanie jednostkowe jest tak bardzo skupione w porównaniu z testowaniem integracyjnym? Dzieje się tak po prostu dlatego, że zakłada się, że testowanie integracyjne jest czymś, co masz, a testowanie jednostkowe to kolejna rzecz, której musimy się nauczyć jako programiści? A może testowanie jednostkowe daje po prostu największy zysk w porównaniu ze złożonością jego automatyzacji? ** Jakie masz doświadczenia z automatycznymi testami jednostkowymi, automatycznymi testami integracyjnymi i automatycznymi testami akceptacyjnymi, a także, z Twojego doświadczenia, co przyniosło najwyższy zwrot z inwestycji? i dlaczego?** Gdybyś miał wybrać tylko jedną formę testowania do zautomatyzowania w następnym projekcie, co by to było? Z góry dziękuję.


title: Jak wyjaśnić wartość testów jednostkowych

text: Chcę przedstawić koncepcję testów jednostkowych (i ogólnie testowania) moim współpracownikom; w tej chwili nie ma żadnych testów, a rzeczy są testowane, faktycznie wykonując zadania za pośrednictwem interfejsu użytkownika, aby zobaczyć pożądany wynik. Jak możesz sobie wyobrazić, kod jest bardzo ściśle powiązany z dokładną implementacją - nawet w wyniku tego, że kod, który powinien znajdować się w klasie i ponownie używany w całym systemie, jest kopiowany i wklejany między metodami. Ze względu na zmienione wymagania zostałem poproszony o zmodyfikowanie modułu, który napisałem wcześniej i który jest dość luźno powiązany (nie tak bardzo, jak bym chciał, ale najlepiej jak potrafię bez konieczności wprowadzania wielu innych koncepcji). Zdecydowałem się dołączyć zestaw testów jednostkowych do mojego poprawionego kodu, aby „udowodnić”, że działa zgodnie z oczekiwaniami i zademonstrować, jak działa testowanie; Nie podążam za prawdziwym TDD, ponieważ część kodu jest już napisana, ale mam nadzieję, że będę podążać za niektórymi koncepcjami TDD dla nowego kodu, który będę musiał stworzyć. Teraz nieuchronnie jestem pewien, że zostanę zapytany, dlaczego napisanie kodu zajmuje mi więcej niż dzień lub dwa, ponieważ części tego, z czym będę wchodzić w interakcję, już istnieją w systemie (choć bez żadnych testów i bardzo ciasno połączone), a kiedy sprawdzę kod w, zostaniem zapytany, czym jest ten projekt „Testy”. Potrafię wyjaśnić podstawy testowania, ale nie potrafię wyjaśnić rzeczywistych korzyści w sposób zrozumiały dla innych (ponieważ uważają, że testowanie wymaga samodzielnego uruchomienia aplikacji, ponieważ często rzeczywisty interfejs użytkownika ma znaczenie przy ustalaniu, czy funkcja „działa” " albo nie). Nie rozumieją idei luźnego łączenia (oczywiste jest to, że nic nie jest luźno połączone; nie ma nawet żadnych interfejsów poza kodem, który napisałem), więc próba wykorzystania tego jako korzyści prawdopodobnie by mnie zarobiła "Hę?" niby wygląda, i znowu nie mogę być tak luźny, jak bym chciał, bez konieczności przerobienia kilku istniejących modułów i prawdopodobnie wprowadzenia jakiegoś kontenera IoC, co byłoby postrzegane jako strata czasu, a nie „programowanie”. Czy ktoś ma jakieś sugestie, w jaki sposób mogę wskazać ten kod i powiedzieć „Powinniśmy zacząć tworzyć testy jednostkowe” bez popadania w protekcjonalność (np. „Pisanie testów zmusza do pisania dobrego kodu”, co prawdopodobnie oznaczałoby kod z wyjątkiem tego, że moje jest _złe_ ) lub bez sprawiania wrażenia, że jest to strata czasu, która nie dodaje żadnej rzeczywistej wartości?


title: Jak zapobiegasz mylącym testom?

text: Testowanie kodu pod kątem poprawności jest ważne. Niezależnie od tego, czy wykonujesz ścisłe TDD, czy nie, testy są naprawdę jedynym sposobem, w jaki projekt może skalować się poza punkt, w którym każdy członek zespołu może rozsądnie przechowywać całą wiedzę o kodzie załadowaną do swoich mózgów jednocześnie. Po tym momencie testy są konieczne, aby zapewnić, że przyszłe modyfikacje nie łamią starej logiki (to lub spalasz wiele zasobów, robiąc to samo ręcznie). Większość ludzi rozumie to, co powiedziałem powyżej - nie ma z czym się spierać. Jednak bez dużego zaplecza CS, jest wiele otwartych na interpretację. Naiwnie, _testy_ prawdopodobnie oznaczają po prostu _kod, który uruchamia inny kod_. Chociaż to prawda, to nie maluje całego obrazu. Z mojego doświadczenia wynika, że bez większej troski o prawidłowe testowanie, ludzie poproszeni o napisanie testów **jednostkowych** będą generować mnóstwo testów **integracyjnych** lub **funkcjonalnych**. Niezależnie od tego, czy nie jesteś wtajemniczony w testowanie niuansów, czy po prostu je zignorujesz (w interesie czasu lub dlatego, że nie lubisz testowania), wynik jest taki sam. Dostajesz projekt z mnóstwem „pomieszanych testów” lub testów, które tak naprawdę nie przestrzegają granicy między testowaniem jednostkowym, funkcjonalnym i integracyjnym. Innymi słowy, otrzymujesz testy, które nie mają jasnego celu innego niż ćwiczenie jak największej ilości kodu. Jest to frustrujące, ponieważ analizowanie wyników tych testów w poszukiwaniu istotnych informacji staje się coraz bardziej kłopotliwe. * _Czy testy zakończyły się niepowodzeniem, ponieważ mój zdalny serwer jest wyłączony, lub moja logika jest nieprawidłowa?_ * _Dlaczego ten "jednostkowy" test kończy się niepowodzeniem, gdy zamieniam [nie]powiązany komponent systemowy`x` na komponent `y`?_ I tak dalej . Jak możesz zilustrować to rozróżnienie w sposób, z którym może utożsamiać się osoba z bardziej inżynierskim nastawieniem? W skrócie, jak sprawić, by ludzie „przejmowali się” rozróżnieniem? Rzeczywiście, na ostatnim spotkaniu testowym Androida na Twitterze zespół stwierdził, że pełne testowanie oprogramowania to projekt sam w sobie. A projekty wymagają zasobów. Nie możesz po prostu wsunąć testów na bok i nie myśleć o tym zbyt wiele. _Zasoby muszą być przydzielane, a programiści muszą traktować je poważnie_. To dobry początek, ale nie możemy po prostu skierować retrospektywnych zasobów i uwagi na kod, który już został napisany. Jestem ciekawa, jakie podejścia sprawdzają się w przypadku niejasnego krajobrazu testowego i jak w ogóle zapobiegać występowaniu niejasnych testów?


title: Jak wyjaśnić moim kolegom znaczenie przypadków testowych NUNIT?

text: Obecnie zajmuję się tworzeniem oprogramowania dla aplikacji obejmujących wiele obliczeń matematycznych. W rezultacie istnieje wiele przypadków testowych, które musimy wziąć pod uwagę. Nie mamy żadnego systemu przypadków testowych NUNIT, zastanawiam się, jakie korzyści mam z wdrożenia testów NUNIT na oczach moich kolegów i szefa. Jestem pewien, że bardzo by to pomogło naszemu zespołowi. Każda pomoc dotycząca tego samego będzie bardzo mile widziana.


title: .Net społeczność w Niemczech

text: Niedawno przeprowadziłem się do Niemiec i interesuje mnie, jak wygląda niemiecka społeczność .Net. Czy znasz jakieś regularnie organizowane warsztaty w Niemczech (najlepiej w okolicach Mannheim)?


title: Transgraniczne zaciemnianie danych i jak sobie z tym radzić?

text: Obecnie mam do czynienia z sytuacją, w której będę musiał zaciemniać dane ze względów prawnych (są to przepisy ogólnokrajowe, a nie specyficzne dla mnie) nadal będę musiał współpracować z zespołami spoza tego obszaru, które nadal będą musiały uzyskać dostęp do aplikacji/baz danych w celu testowania/ wdrożenie i tak dalej, jednak dane muszą być w pełni zaciemnione. Jakie są twoje doświadczenia związane z tym scenariuszem? np. Kto jest właścicielem na jakim etapie procesu, jaki dostęp mają różne strony, jak silne jest szyfrowanie, jak odbywają się aktualizacje


title: Dlaczego iostream nie jest już dołączany jako plik nagłówkowy?

text: Przede wszystkim przeszedłem przez to pytanie Dlaczego #include <iostream.h> jest złe? i tam powodem było po prostu to, że jest przestarzałe, ale osobiście uważam, że jako nagłówek iostream był lepszy, ponieważ nie musisz deklarować obiektów takich jak cout i endl w zasięgu globalnym, ponieważ były już w zasięgu globalnym, a ponadto odkąd # nie jest używane, co oznacza, że nie podlega dyrektywie dotyczącej preprocesora. Muszę tylko wiedzieć, dlaczego to zrobiono? Nadal czasami używam turbo i czuję się komfortowo w programach c++, mimo że gcc i g++ zapewniają lepsze debuggery i wszystko inne.


title: Optymalizacja parametrów zmiennych w czasie

text: Muszę znaleźć optymalny zestaw „n” wartości parametrów, które minimalizują funkcję celu (symulacja 2-godzinna systemu). Przyjrzałem się algorytmowi genetycznemu i metodom symulowanego wyżarzania, ale zastanawiałem się, czy istnieją lepsze algorytmy i wskazówki dotyczące ich zalet i ograniczeń. Dzięki powyższym metodom optymalizacji mogę znaleźć optymalne wartości parametrów, które będą prawdziwe przez cały czas trwania symulacji. W przypadku, chcę znaleźć optymalne „zmienne w czasie” wartości parametrów (wartości parametrów zmieniają się w czasie podczas 2-godzinnej symulacji), czy są jakieś metody / pomysły inne niż uczynienie za każdym razem zmieniającej się wartości parametru zmienną do optymalizacji? jakieś pomysły?


title: Organizacje GitHub dla projektu obejmującego wiele repozytoriów?

text: Rozpocząłem projekt, który obejmuje co najmniej trzy repozytoria na GitHub. Jedno z repozytoriów to ogólny zrzut dokumentacji i przykładów, a pozostałe dwa zawierają implementację dwóch programów, które tworzą szkielet projektu. Czy do obsługi takiej konfiguracji powinienem używać organizacji GitHub? A może powinienem po prostu zrzucić to wszystko na własne konto, wraz z tuzinem innych, zupełnie niepowiązanych repozytoriów?


title: Strukturyzacja aplikacji, która odczytuje z pliku .properties

text: Mam aplikację Java z trzema klasami: `Foo`, `Bar` i `Baz`. Wszystkie trzy zależą od kilku bieżących stałych zdefiniowanych w każdej klasie w celu określenia sposobu działania. Ponadto `Baz` współdziała z wieloma klasami budowniczymi, które należy skonfigurować na różne sposoby. Chciałbym dokonać refaktoryzacji wszystkich informacji konfiguracyjnych do pliku .properties, aby nie musiałem ponownie kompilować za każdym razem, gdy zmieniam stałą. Ale nie jestem pewien, jak to ustrukturyzować: czy mam `ConfigInfoSingleton`, który przechowuje wszystkie parametry aplikacji we właściwościach statycznych i czy inne klasy proszą go o informacje, kiedy tego potrzebują? Wydaje się to błędne, ponieważ wprowadza stan globalny. Czy mam przekazać `ConfigInfoMap` jako parametr do wszystkich klas, które potrzebują tych informacji? Następnie muszę mieć analizujące łańcuchy `Foo`, `Bar` i `Baz`, aby zdecydować, co mają zrobić, a to wydaje się bardzo błędne. Zwłaszcza w przypadku `Baz`, gdzie nie mogę po prostu przekazywać wartości, ale muszę użyć instrukcji `switch` w informacjach o konfiguracji, aby określić wywołania metod konstruktora. Czy analizuję informacje w innych zajęciach i każę innym informować innych, jak mają się skonfigurować? Następnie mam klasę, która musi wiedzieć o szczegółach implementacji wszystkich innych, co wydaje się błędne, ale mniej niż inne opcje. To wydaje się być naprawdę podstawowym pytaniem, ale nie jestem pewien, jak postępować, jeśli chodzi o dobre projektowanie oprogramowania, a nie miałem zbyt wiele szczęścia w Googlingu. Jaka jest „właściwa” rzecz do zrobienia?


title: Jaki czas należy zapisać w odniesieniu do punktów historii, aby określić prędkość i godziny na punkt?

text: Ostatnio próbowaliśmy skorelować godziny spędzone na sprintach z historiami przypisanymi do projektu (aby uzyskać wyobrażenie o prędkości i godzinach na punkt). Jednak nasz system nagrywania pozwalał nam tylko na zmierzenie czasu z projektem, a więc obejmował czas taki jak: * Spotkania z klientami / rozmowy telefoniczne * Scrumy * Rozwój / testowanie Czy cały czas powinien być brany pod uwagę przy próbie określenia szybkości. Czy też należy brać pod uwagę tylko czas tworzenia / testowania, który wystąpił w odniesieniu do konkretnych artykułów. Jeśli wszystko, to czemu scrums i spotkania powinny być przeciwne. Czy powinna istnieć osobna historia dla nich, czy po prostu zarejestrowana w odniesieniu do innej metryki, tj. Opracowanie projektu a rozwój projektu. Czy tylko rozwój potrzebujemy bardziej drobnoziarnistego systemu nagrywania do rejestrowania czasu spędzonego na projekcie? **EDYTUJ**: Oprócz prędkości staramy się również uzyskać lepsze pojęcie o liczbie godzin na punkt **EDYTUJ**: Miałem kilka komentarzy, że to nie jest sposób na to (to świetnie) . Jednak nikt w tych komentarzach nie zasugerował, w jaki sposób możemy podać wycenę na następną partię pracy, jeśli nie będziemy wiedzieć, ile czasu zajęły punkty w przeliczeniu na godzinę. Klient chce wiedzieć, ile będzie kosztować następna część pracy. Kilka dodatkowych punktów, na które należy zwrócić uwagę to: 1\. Zespół nie jest oddany wyłącznie temu projektowi. Niektóre osoby spędzają trochę czasu na innej pracy i może się to różnić. 2\. Zespół może różnić się wielkością w miarę realizacji projektu, gdy członek przychodzi i odchodzi (chyba to wpływa na szacunki, ale w jaki sposób?)


title: Jeden czy wiele plików do testowania jednostkowego jednej klasy?

text: Badając najlepsze praktyki testowania jednostkowego, aby pomóc w zestawieniu wytycznych dla mojej organizacji, natknąłem się na pytanie, czy lepiej lub lepiej jest oddzielić urządzenia testowe (klasy testowe), czy też przechowywać wszystkie testy dla jednej klasy w jednym pliku. Fwiw, mam na myśli „testy jednostkowe” w czystym sensie, że są to testy białoskrzynkowe skierowane na pojedynczą klasę, jedno asercję na test, wyśmiewane wszystkie zależności itp. Przykładowym scenariuszem jest klasa (nazwijmy ją Dokumentem), która ma dwie metody: zaewidencjonowanie i wyewidencjonowanie. Każda metoda implementuje różne reguły itp., które kontrolują ich zachowanie. Zgodnie z zasadą „jedna asercja na test”, będę miał wiele testów dla każdej metody. Mogę umieścić wszystkie testy w jednej klasie `DocumentTests` o nazwach takich jak `CheckInShouldThrowExceptionWhenUserIsUnauthorized` i `CheckOutShouldThrowExceptionWhenUserIsUnauthorized`. Albo mógłbym mieć dwie oddzielne klasy testowe: `CheckInShould` i `CheckOutShould`. W tym przypadku moje nazwy testów zostałyby skrócone, ale zostałyby zorganizowane tak, aby wszystkie testy dla określonego zachowania (metody) były razem. Jestem pewien, że są plusy i minusy, do których można się zbliżyć i zastanawiam się, czy ktoś poszedł drogą z wieloma plikami, a jeśli tak, to dlaczego? Lub, jeśli wybrałeś podejście z jednym plikiem, dlaczego uważasz, że jest to lepsze?


title: Znajdź punkty, których odległości parami przybliżają daną macierz odległości

text: **Problem.** Mam symetryczną macierz odległości z wpisami od zera do jedynki, tak jak ta: D = ( 0,0 0,4 0,0 0,5 ) ( 0,4 0,0 0,2 1,0 ) ( 0,0 0,2 0,0 0,7 ) ( 0,5 1,0 0,7 0,0 ) I chciałbym znaleźć punkty na płaszczyźnie, które mają (w przybliżeniu) odległości parami podane w D. Rozumiem, że zwykle nie będzie to możliwe przy ściśle poprawnych odległościach, więc byłbym zadowolony z „dobrego” przybliżenia. Moje matryce są niewielkie, nie większe niż 10x10, więc wydajność nie jest problemem. **Pytanie.** Czy ktoś zna algorytm, który to umożliwia? **Tło.** Mam zestawy gęstości prawdopodobieństwa, pomiędzy którymi obliczam odległości Hellingera, które chciałbym zwizualizować jak powyżej. Każdy zestaw zawiera nie więcej niż 10 gęstości (patrz wyżej), ale mam kilkaset zestawów. **Co zrobiłem do tej pory.** * Rozważałem wysłanie na math.SE, ale patrząc na to, co jest tam oznaczone jako „geometria”, wydaje się, że tego rodzaju pytanie o geometrię obliczeniową byłoby tutaj bardziej aktualne. Jeśli społeczność uważa, że należy to przenieść, proszę śmiało. * Wygląda to na prosty problem w geometrii obliczeniowej i zakładam, że każdy zaangażowany w grupowanie może być zainteresowany taką wizualizacją, ale nie byłem w stanie niczego wygooglować. * Jednym prostym podejściem byłoby losowe opuszczenie punktów i zakłócenie ich, aż macierz odległości zbliży się do D, np. za pomocą symulowanego wyżarzania lub uruchomienie algorytmu genetycznego. Muszę przyznać, że jeszcze tego nie próbowałem, licząc na mądrzejszy sposób. * Jedną konkretną operacjonalizacją „dobrego” przybliżenia w powyższym sensie jest Problem 4 w sekcji Otwarte Problemy tutaj, gdzie k=2. Otóż, chociaż znalezienie algorytmu, który jest _gwarantowany_ do znalezienia minimalnej odległości l1 między D a wynikową macierzą odległości, może być kwestią otwartą, nadal wydaje się możliwe, że istnieje przynajmniej pewne przybliżenie tego optymalnego rozwiązania. Jeśli nie dostanę tutaj odpowiedzi, wyślę dżentelmenowi, który postawił ten problem, i zapytam, czy zna jakiś algorytm aproksymacyjny (i opublikuję każdą odpowiedź, którą otrzymam tutaj).


title: Długotrwałe zadanie zainicjowane na stronie internetowej

text: W planach jest stworzenie rozwiązania generycznego dla długotrwałych zadań inicjowanych w serwisie WWW przez użytkowników takich jak: 1\. prześlij duży plik i wykonaj niestandardowe przetwarzanie, a następnie wstaw do bazy danych. 2\. eksportuj duże ilości danych Ale nie chcemy uruchamiać tych zadań na serwerach internetowych i zamiast tego uruchamiać je na dedykowanym innym serwerze. Mam kilka poniższych rozwiązań, ale szukam sugestii dotyczących tych rozwiązań lub nowej opcji. 1. Witryna internetowa wywołuje usługę WCF na innym serwerze (operacje jednokierunkowe / zapomnij o pożarze). Usługa WCF zawiera wszystkie informacje do przetworzenia żądania, a zadanie zostanie uruchomione w usłudze WCF. 2. Usługa Windows, ale nie wiesz, w jaki sposób usługa Windows uruchomi zadanie tak szybko, jak to możliwe, ponieważ nie chcemy żadnych opóźnień między wysłaniem formularza przez użytkownika a czasem rozpoczęcia procesu. Potrzebujesz jakiejś flagi do uruchomienia usługi Windows.


title: Jak opublikować moją aplikację jako oprogramowanie open source?

text: Ostatnio napisałem jakąś (mam nadzieję) użyteczną aplikację. Chciałbym podzielić się nim z każdą osobą na świecie, czyniąc go open source. Chciałbym opublikować kod źródłowy oraz pliki binarne (zarówno dla Windows jak i Linux). Do napisania aplikacji użyłem wyłącznie darmowych narzędzi: Code::Blocks, MinGW, gcc/g++, Linux Ubuntu/Linux Mint, Windows 7 z zakupioną licencją. Czytam o różnych rodzajach licencji, ale wciąż mam pewne wątpliwości. Zajrzałem do kodu źródłowego jakiegoś oprogramowania open source, na przykład tutaj: https://polarssl.org/aes-source-code lub tutaj: http://qt-project.org/doc/qt-5/qtnetwork -blockingfortuneclient-blockingclient-h.html. Pliki te mają nagłówek, w którym można znaleźć licencję jako komentarz. Oto moje pytania: 1. Czy jest jakieś miejsce w internecie, gdzie mogę o tym poczytać? Licencjonowanie, jak opublikować mój kod? 2. Czy powinienem skopiować licencję do każdego pliku mojego kodu źródłowego, gdy chcę go opublikować? Skąd mogę wziąć licencję, aby ją skopiować? (czyli czy powinienem go skopiować zarówno w pliku `*.h` jak i `*.cpp`?) 3. Dla wersji Windows mojej aplikacji użyłem Visual Studio Express Edition oraz Qt. Aby utworzyć plik `*.exe`, który będzie działał po wyjęciu z pudełka bez dodatkowych instalacji, muszę rozprowadzić wraz z moim plikiem `*.exe` kilka plików z Qt i Visual (pliki `*.dll`). Jak i gdzie mogę sprawdzić, czy redystrybucja tych plików z moją aplikacją jest bezpłatna? 4. Która licencja byłaby najlepsza dla moich potrzeb? Zrobiłem trochę badań i znalazłem tę licencję: http://opensource.org/licenses/BSD-3-Clause. Czy to w 100% odpowiada moim potrzebom, jakieś rady?


title: Monetyzacja oprogramowania, która nie jest zła

text: Mam darmowy projekt open source z około 800 000 pobrań. Od czasu do czasu kontaktowały się ze mną firmy zajmujące się zarabianiem i je odrzucam, ponieważ nie chciałem, aby złośliwe oprogramowanie paska narzędzi było powiązane z moim oprogramowaniem. Zastanawiałem się jednak, czy istnieje niezły sposób na zarabianie na oprogramowaniu? Oto opcje, jakie znam: * **Dodaj przycisk darowizny.** * Nie czuję się z tym komfortowo, ponieważ naprawdę nie potrzebuję „darowizn” - płacę całkiem dobrze. * Użytkownicy przekazujący darowizny mogą czuć się uprawnieni do wsparcia itp. (patrz przedostatni punkt) * **Dodaj reklamy w swojej aplikacji. * ** W sieci może to być akceptowalne, ale w programie komputerowym wygląda to niesamowicie kiepsko. * **Pobieraj niewielką kwotę za każde pobranie.** * Ten model dobrze sprawdza się w świecie mobilnym, ale podejrzewam, że nikt nie zdecyduje się na to na komputerze stacjonarnym. * Nie miesza się dobrze z open source, chociaż przypuszczam, że mógłbym pobierać opłaty tylko za binaria (większość użytkowników nie będzie miała kłopotów z kompilacją źródeł). * Ludzie mogą oczekiwać wsparcia itp. po wyraźnym zapłaceniu (patrz następny punkt). * **Zarabiaj pieniądze na usłudze/społeczności/wsparciu związanym z programem.** * To jest jedna droga, której zdecydowanie nie chcę iść, nie chcę żadnych kłopotów poza kodowaniem. Zapewniam, że program jest na najwyższym poziomie (choć prosty) i na razie nie jestem świadomy żadnych błędów (są fora pomocy technicznej i komentarze na blogach, na których użytkownicy mogą je zgłaszać). Jest również bardzo prosty, udokumentowany i wykrywalny, więc myślę, że mam powód, aby dostarczyć go „tak jak jest”. * **Dodaj sugestie podmiotów stowarzyszonych do swojego instalatora.** * Jeśli korzystasz z firmy zajmującej się zarabianiem, tracisz kontrolę nad tym, co proponują. Jeśli nie uda ci się zbudować pewnego rodzaju silnego zaufania z firmą, aby dostarczać wysokiej jakości sugestie (szczerze w to wątpię), nie mogę tego mieć. * Wybór własnego partnera (np. bezpośrednio sugerującego Google Toolbar) jest prawdopodobnie jedynym realnym rozwiązaniem dla mnie. Problem polega na tym, gdzie znajdę solidnego partnera, który może faktycznie nadać wartość użytkownikowi, zamiast infekować jego komputer crapware? Myślałem, że może Babylon (oczywiście nie pasek narzędzi, nienawidzę pasków narzędzi)?


title: Jakieś historie sukcesu przy ciągłym korzystaniu z komercyjnych narzędzi do analizy statycznej dla C++?

text: Nie mogę się zdecydować, czy oferta komercyjnego narzędzia do analizy statycznej jest warta wydania środków. Wypróbowaliśmy to narzędzie na kilku milionach linijek naszego kodu C++ i znaleźliśmy około 50 prawdziwych problemów. Chcieliśmy dowiedzieć się, jak te problemy mogły wpłynąć na użytkowników. Złapaliśmy roczną wersję stabilnej gałęzi i przeanalizowaliśmy ją, a następnie zajrzeliśmy do bazy usterek - żaden z problemów znalezionych w starym kodzie nie spowodował żadnego z problemów zgłaszanych przez użytkowników. Nie tylko te defekty nie wydają się ujawniać użytkownikom, ale korzystanie z narzędzia wymaga nietrywialnego wysiłku - usuwaj fałszywe alarmy, analizuj każde ostrzeżenie generowane przez narzędzie. Również narzędzie nie znajduje wszystkich defektów, oczywiście znajduje tylko niektóre defekty. Tak więc po raz kolejny * zauważalny wysiłek * bardzo mała liczba znalezionych problemów * wykryte problemy wydają się nie mieć wpływu na klientów Narzędzie jest licencjonowane za 7 tys. euro dla pięcioosobowego zespołu rocznie. Obecnie wygląda na to, że jest to dużo pieniędzy i wysiłku i nie ma powrotu, z wyjątkiem tego, że _teraz nasz kod może mieć mniej wad, które prawdopodobnie się nie ujawnią_. Wydaje się, że mogliśmy poświęcić ten wysiłek na rozwiązywanie problemów, które teraz bolą. Dostawca twierdzi, że wykorzystanie jego narzędzia w procesie rozwoju pomaga _drastycznie_ poprawić jakość kodu. Obecnie nie mogę uzyskać żadnego wyjaśnienia, czym może być ta _drastyczna_ poprawa - wszystkie fakty, które brałem pod uwagę, są wymienione powyżej. Chciałbym usłyszeć historie, które brzmią tak: _zanim wydaliśmy licencję X, byliśmy nieszczęśliwi, ponieważ (co konkretnie było nie tak), teraz używamy X przez cały czas mamy (co jest teraz znacznie lepsze niż wcześniej), więc jesteśmy ładni szczęśliwy - pieniądze zostały dobrze wydane_ i przydatne byłoby również negatywne doświadczenie z wystarczającą ilością szczegółów. Czy ktoś miał naprawdę pozytywne doświadczenia z ciągłym używaniem komercyjnych narzędzi do analizy statycznej? Czy nastąpiła drastyczna poprawa jakości kodu źródłowego, która bezpośrednio wpływa na klientów? Czy wynik był wart opłaty licencyjnej i wysiłku?


title: Porównanie i system rankingowy 1 do 1

text: Chcę stworzyć system porównań i rankingów, który pozwoli użytkownikom przeglądać 2 przedmioty, kliknąć ten, który według nich jest lepszy, a następnie otrzymać 2 kolejne losowe przedmioty i kontynuować to, dopóki nie zdecydują się przestać. W tle chcę, aby system używał tych wygranych i przegranych do rankingu każdego przedmiotu w ogólnej tabeli rankingowej, abym mógł zobaczyć, co jest numerem 1, a co nie. Nie mam pojęcia, od czego zacząć formułę, ale wyobrażam sobie, że muszę rejestrować wygrane i przegrane. Każda pomoc/wskazówki są mile widziane!


title: Makra Lisp: praktyczne podejście

text: Na mojej drodze do nauki Lispu odkryłem wszechmocne i przerażające tak zwane Makra, a następnie po ciężkim czasie próbując je zrozumieć i ich użyteczność, powiedziałem sobie: WRESZCIE TO ZROBIŁEM. Nie mogłem się bardziej mylić, myślałem, że jedynym celem makr było zdefiniowanie nowych struktur kontrolnych i to było wszystko, co musiałem wiedzieć, dopóki nie zacznę czytać coraz więcej na ten temat i przyszedł do mnie zupełnie nowy świat ! Można używać makr do nowego **Języka specyficznego dla domeny** , **Transformacji kodu** i aby uniknąć **Kodu wzorcowego**. Dlatego też, gdyby można było podać kilka przykładów, na których można było podać wyżej wymienione zastosowania makr i innych, z zwięzłym i prostym do zrozumienia wyjaśnieniem, byłoby naprawdę miło.


title: „Odczytaj” plik bez użycia wskaźnika pliku

text: To pytanie zadano mi w wywiadzie. Mam jakoś "czytać" plik do mojego programu w C jako dane wejściowe bez użycia wskaźnika pliku (w tym funkcji "f", np. fgets, fscanf itp.). Nie wolno mi też przekierowywać go za pomocą terminala, tj. brak wywołań systemowych lub exec. Program nie otrzyma pliku w czasie wykonywania (tak powiedział). Ankieter nie odpowiedział na pytanie, mimo że bardzo go prosiłem, a chciałbym wiedzieć, jak to możliwe.


title: Jaki jest powód wyboru PascalCasing zamiast camelCasing lub odwrotnie z POV do projektowania języka programowania?

text: Podoba mi się oba, ale zauważam, że języki, które używają camelCasing dla członków, czasami wymagają więcej korekt, gdy chcesz edytować swój kod. Na przykład (w Pythonie): node.customData() vs node.setCustomData() niestandardowe zmiany wielkości liter. Można by tego uniknąć, gdyby tak było: node.getCustomData() W C# będą używać na przykład PascalCasing. Wiem, że niektórzy nawet nie używają wielkości liter, więc: node.getcustomdata() Wygląda na to, że języki skryptowe generalnie preferują camelCasing bardziej niż PascalCasing, aby być bardziej zrelaksowanym? Czy jest jakiś powód, aby wybrać jeden z nich z POV do projektowania języka programowania?


title: Obiekty domeny z interfejsami

text: Jestem w sytuacji, w której część mojego systemu jest zależna od innego modułu w tym samym systemie, ale same moduły muszą pozostać niezależnie wdrażalne, gdzie części, od których zależą, zostaną wypełnione inną implementacją. Moduł w tym przypadku to koncepcja kilku komponentów, które przyczyniają się do obsługi funkcji biznesowej. System jest również zbudowany w C#. Tak więc, gdy jestem zależny od innego modułu, moduł źródłowy definiuje interfejs opisujący funkcje, których potrzebuje moduł strony zależnej do zaimplementowania. Typy kontraktów (obiekty modeli domen) są również interfejsami dla modułu zależnego. Tutaj robi się dla mnie trochę mglisto. W tym momencie zasada odwrócenia zależności nie siedzi mi w głowie. Oba te „moduły” mają dla siebie takie samo znaczenie. Który powinien definiować interfejsy i zmuszać innych do odwoływania się do nich? Podejrzewam, że 3rd projekt siedzi między modułami, które obsługuje konfigurowanie zależności (prawdopodobnie kontener DI). Czy jednostki w modułach powinny być połączone? Są to po prostu worki get/set (bez DDD tutaj). Czy ktoś może tu zaoferować jakieś wskazówki? Z góry dziękuję. **Edycja 1:** Struktura projektu: Module1.Interfaces IModuleOneServices Module1.Models ModuleOneDataObject Module1 Module1 implementuje IModuleOneServices Module2.Interfaces IModuleTwoServices Module2.Models ModuleTwoDataObject - posiada właściwość typu ModuleOneDataObject Module2 Module2 implementuje IModuleTwoServices zależnie od wymagań IModuleOne do wdrożenia przez moduł2 sam i pozostaje kompilowalny, a czasami uruchamia się w ogóle bez modułu 1.


title: Jak przechwycić różne wersje kompilacji tej samej wersji artefaktu wydania produkcyjnego w Artifactory?

text: Załóżmy, że mam artefakty „mylibrary-5.2.jar” i „mylibrary-5.3.jar” reprezentujące wersje 5.2 i 5.3 biblioteki, które nasz projekt tworzy i publikuje dla jednego z naszych innych projektów. Czy Artifactory obsługuje posiadanie wielu „wersji” każdego z tych artefaktów reprezentujących różne kompilacje, które zostały wykonane podczas wydania w celu skonstruowania tego artefaktu? Na przykład, aby wyprodukować ostateczną wersję wersji 5.2 „mylibrary”, czyli artefaktu: **mylibrary-5.2.jar** , przeszliśmy przez 3 kompilacje, aby uzyskać wersję, która przeszła zautomatyzowane testy naszego środowiska integracyjnego i naszego użytkownika test wstępny. Były więc trzy oddzielne kompilacje, które wyprodukowały trzy oddzielne artefakty w wydaniu 5.2. Chcemy mieć możliwość zachowania i potencjalnego przywołania artefaktów tych różnych kompilacji w późniejszym terminie (do testowania itp.). Aby to zrobić, która z poniższych opcji zadziała? 1. Przechwyć artefakty jako osobne artefakty, tj. build-5.2-b1.jar (artefakt z kompilacji 1), build-5.2-b2.jar (artefakt z kompilacji 2), build-5.2-b3.jar (artefakt z kompilacji 3) oraz build-5.2.jar (ostateczna wersja produkcyjna; która pasuje do kompilacji 3) 2. Przechwyć POJEDYNCZY artefakt o nazwie „build-5.2.jar”, który ma WERSJE artefaktu, który przechwytuje kompilacje od 1 do 3 i który można później przywołać przez numer wersji. 3. Inna opcja, której nie braliśmy pod uwagę, ale powinniśmy


title: Czy należy usunąć nadmiarowy kod jawnie przypisujący wartości domyślne?

text: Czasami, gdy coś edytuję, widzę jakiś bezużyteczny kod dodany przez innych programistów, prawdopodobnie z przyzwyczajenia. Edycja tego kodu nie zrobi żadnej różnicy, więc czy jest to właściwe? W moim konkretnym przypadku mówię o polach prywatnych Javy w następujący sposób: private int aSimpleInt = 0; private boolean myBool = false; prywatny obiekt MyObject = null; deklarowanie wartości domyślnych jest zbędne i bezużyteczne. Czy powinienem je usunąć, czy po prostu pominąć?


title: Czy mogę zachować prawa autorskie do nazwy/logo aplikacji objętej prawem copyleft (GPL)?

text: Chciałbym wydać aplikację, która zasadniczo ma licencję „kod jest na licencji GPLd, ale forki nie mogą używać nazwy ani logo”, z zamiarem uniknięcia zamieszania wśród użytkowników. Czy to możliwe, czy jest to umowa typu „wszystko albo nic”?


title: Czy dystrybucja zasobów nieobjętych GPLd za pomocą aplikacji GPL narusza licencję?

text: Jest to nieco związane z moim innym pytaniem, ale w rzeczywistości jest inne. Chciałbym licencjonować aplikację Windows Phone na licencji GPL. Pomijając wszystkie inne problemy z Windows Phone Marketplace (zapytam je na forach), chciałbym dołączyć ikony dostarczane z SDK do mojej aplikacji. Chociaż jest to powszechna praktyka (dokumentacja wskazuje na lokalizację ikon), nie jestem pewien, czy wymuszałbym GPL na ikonach (ruch wyraźnie zabroniony przez Umowę Dostawcy Aplikacji). Jak to zwykle jest obsługiwane w GPL, czy po prostu nie mam szczęścia? **EDYTUJ** Ikony, o których mowa, są kopiowane do drzewa źródłowego projektu i dystrybuowane wraz z aplikacją. Licencja dostarczana z SDK stanowi, że **nie** możesz: > modyfikować ani rozpowszechniać kodu źródłowego jakiegokolwiek Kodu Dystrybucyjnego [w tym. ikony >], aby jakakolwiek jego część podlegała Licencji Wyłączonej. Licencja > Wyłączona to licencja, która wymaga, jako warunek użytkowania, modyfikacji > lub dystrybucji, aby > > * kod był ujawniany lub rozpowszechniany w formie kodu źródłowego; lub > * inni mają prawo do jego modyfikacji. > Moje pytanie brzmi teraz: czy mogę rozpowszechniać ikony z moją aplikacją na licencji GPL w jakikolwiek sposób (na przykład poprzez dołączenie postanowień do tekstu mojej licencji), który nie narusza ani GPL, ani umowy SDK?


title: Czy powinniśmy zatrudnić nowego programistę już teraz, czy poczekać, aż kod zostanie zrefaktoryzowany, aby był odpowiedni dla środowiska zespołowego?

text: Wspieram i rozwijam duży system wykorzystujący różne technologie m.in. c++,.net,vb6 itp. Jestem jedynym programistą. Zastanawiam się, czy teraz jest właściwy moment, aby zwrócić się do mojego menedżera (który nie jest programistą) z pytaniem, czy można zrekrutować innego programistę. Nie mam doświadczenia w pracy w zespołach programistycznych. Zawsze byłem samodzielnym programistą. Obawy jakie mam to: 1. Jest jeszcze wiele do zrobienia. Szkolenie innego programisty wymagałoby czasu i odciągało mnie od moich obowiązków. 2. Firma nie inwestuje dużo w narzędzia m.in. kontrola kodu źródłowego 3. Kod w tym systemie wymaga refaktoryzacji, aby wprowadzić koncepcje takie jak interfejsy, polimorfizm itp., które są wspierane przez metodologie takie jak Agile (odziedziczyłem system około 12 miesięcy temu). Stopniowo próbuję przerobić kod. Myślę, że mam dwie możliwości: 1. Skontaktuj się teraz z moim menedżerem 2. Poczekaj, aż będę miał czas na refaktoryzację kodu, aby był bardziej odpowiedni dla środowiska zespołowego. Która opcja jest najlepsza? Mam nadzieję usłyszeć od innych programistów, którzy byli w mojej sytuacji.


title: Zrozumienie testowania jednostkowego dla dynamicznie zmieniających się warunków

text: Od kilku dni próbowałem zrozumieć, jak pisać testy jednostkowe. Myliłem się z następującymi scenariuszami w istniejącym kodzie. W pierwszej funkcji wartość max zmienia się w zależności od obiektu tworzonego w czasie wykonywania, ale w drugim przypadku jest stała. UWAGA: Poniższe funkcje nie są powiązane. To są dwa różne scenariusze. SomeFunction1(arg1,....) { if(arg1 > someObject.MaxAllowedValue) { wyrzuć wyjątek; } } SomeFunction2(arg1,....) { if(arg1 > maxAllowedValue) { wyrzuć wyjątek; } } Próbuję sprawdzić, czy funkcja zgłasza wyjątek po przekroczeniu wartości maksymalnej. Czy test jednostkowy pozostaje taki sam w obu przypadkach, czy jest inny?


title: Co robisz, gdy zdajesz sobie sprawę, że twoja praca wymaga od ciebie zrobienia czegoś poza twoją głębią?

text: Ostatnio w przypadku dużego projektu programistycznego byłem naprawdę zagubiony. I rzeczywiście to wiedziałem; i że jedynym powodem, dla którego zostałem zatrudniony, był głównie brak innych wykwalifikowanych kandydatów. Zadanie polegało na zbudowaniu dużej aplikacji na PHP/MySQL, systemie, z którym miałem niewielkie doświadczenie. (Wcześniej poinformowałem o tym pracodawcę - rozpieszczały mnie C# ASP.NET/MVC i MSSQL Server) Głównym powodem, dla którego zastosowałem, była lokalizacja, lokalizacja, lokalizacja - na zadaniach kampusowych, które faktycznie mają jakikolwiek komponent programistyczny, są stosunkowo rzadki. Przez prawie półtora roku przebrnąłem przez to i myślę, że mogę powiedzieć, że wiem (przynajmniej trochę) co teraz robię. Popełniłem kilka błędów, wyrwałem trochę włosów i ruszyłem dalej. (Wciąż pracuję nad tym systemem, ale nie czuję się już całkowicie zagubiony) Jednak w przyszłości chciałbym, aby moje osobiste i zawodowe ja było trochę zdrowsze niż to, co miało miejsce w tym przypadku. Więc jestem ciekawa - jaki jest najlepszy sposób radzenia sobie z taką sytuacją?


title: Przechodzenie między schematami XML a klasami C# w rozsądny sposób

text: System .NET/C# odbiera komunikaty XML do przetwarzania i dalszej transmisji. Ponieważ praca bezpośrednio na dokumentach XML byłaby bardzo niewygodna, konieczna jest deserializacja wiadomości do obiektu C#, a następnie serializacja tuż przed dostarczeniem. Do tej pory robiono to za pomocą narzędzia XSD firmy Microsoft (xsd.exe) i wykonuje to zadanie, ale słabo. Narzędzie jest stare i wadliwe i generuje skandaliczne nazwy klas i reprezentacje kodu różnych konstrukcji schematów XML. Czy są lepsze sposoby na osiągnięcie tego w .NET, czy powinienem zrobić to zupełnie inaczej?


title: Kluczowe wiązania wojna w moim mózgu

text: Ile wiązań klawiszy jest w twoim mózgu? Osobiście używam Intellij Idea jako mojego podstawowego IDE do rozwoju, ale czasami przełączam się trochę na Eclipse i Netbeans, a czasami używam Jedit, Notepad ++, Emacs, Vim. Zawsze staram się znaleźć idealne powiązania klawiszy, których będę mógł używać przecinając wszystkie edytory. Jaki masz pomysł na rozwiązanie tego problemu?


title: Lista struktur w pamięci

text: Czy ktoś mógłby opisać, w jaki sposób struktury list, które składają się z nagłówka i ogona, które odwołują się do reszty listy, tj. listy połączonej, są reprezentowane w pamięci komputera? Czy komputer korzysta z rejestrów procesora do przechowywania wskaźników w nagłówku i pozostałej części listy?


title: Jak tymczasowo zapisać wynik zapytania, aby użyć go w innym?

text: Mam ten problem, myślę, że możesz mi pomóc. PS Nie wiem, jak to nazwać, więc jeśli ktoś znajdzie bardziej odpowiedni tytuł, edytuj go. ## Tło * Tworzę tę aplikację do wyszukiwania linii tranzytowych autobusów. * Linie autobusowe mają trzycyfrowy numer, są unikalne i nigdy się nie zmienią. * Wymagana jest możliwość wyszukiwania linii od przystanku A do przystanku B. * Interfejs użytkownika już pomyślnie podpowiada użytkownikowi, aby używał tylko prawidłowych nazw przystanku. * **Wymaganiem jest, aby móc wyświetlić, czy trasa ma bezpośrednią linię, a jeśli nie, wyświetlić kombinację 2-, a nawet 3-liniową.** ### Przykład: muszę dojechać z punktu A do punkt D. Program powinien pokazywać: * Jeśli istnieje prosta linia A-D. * Jeśli nie, wyświetl alternatywne kombinacje 2 linii, takie jak A-C, C-D. * Jeśli nie ma kombinacji 2-liniowych, wyszukaj kombinacje 3-liniowe: A-B, B-C, C-D. Oczywiście aplikacja powinna wyświetlać numery linii autobusowych, a także czas zmiany autobusów. ## Co mam: Moja baza danych ma następującą strukturę (uproszczona, rzeczywista baza danych zawiera lokalizacje i godziny itd.): +-----------+ | przystanki_autobusowe | +----+------+ | identyfikator | nazwa | +----+------+ +-------------------------------+ | lines_stops_relationship | +--------------+------------+-------+ | autobus_linia | stop_id | zamów | +--------------+---------+-------+ Gdzie `lines_stops_relationship` opisuje relację wiele-do-wielu między liniami autobusowymi i przystanki. Kolejność, oznacza kolejność, w której stopnie pojawiają się w jednej linii. Nie wszystkie linie idą tam i z powrotem, a kolejność ma znaczenie (punkt A z porządkiem 2 występuje po punkcie B z porządkiem 1). ## Problem * Dowiadujemy się, czy linia może dość łatwo przejść przez trasę. Po prostu wyszukaj pojedynczą linię, która przechodzi przez oba punkty we właściwej kolejności. * Jak mogę sprawdzić, czy istnieje kombinacja 2/3 linii? Myślałem o wyszukaniu linii, która pasuje do przystanku źródłowego i przystanku docelowego, i zobaczę, czy mogę uzyskać wspólny przystanek między nimi, gdzie użytkownik może zmienić autobusy. **Jak zapamiętać ten przystanek?** * Kombinacja 3 linii jest jeszcze trudniejsza, znajduję linię dla źródła i linię dla celu, a potem co? Szukaj linii, która ma chyba 2 przystanki, ale znowu, **Jak zapamiętać przystanki?** ## tl;dr Jak zapamiętywać wyniki zapytania, aby móc go ponownie użyć? Mam nadzieję, że uda mi się to osiągnąć w jednym zapytaniu (dla każdego zapytania o trasy 1-wierszowe, zapytanie o 2 i zapytanie o kombinacje 3-wierszowe). _**Uwaga:_ Nie mam nic przeciwko, jeśli ktoś zasugeruje zupełnie inne podejście niż to, które mam, jestem otwarty na wszelkie rozwiązania.** Udzielę pomocy ciastkiem i upvotem. Z góry dziękuję!


title: Bycie produktywnym w czasie przestoju

text: Powiedzmy, że jesteś w miejscu, gdzie kodowanie i łączenie się z Internetem nie jest możliwe (na przykład podczas ruchliwego lotu). Co robisz, aby zachować produktywność? Rzeczy, które chciałbym zrobić, to przeczytać każdą książkę techniczną, którą aktualnie przeglądam, i być może narysować kilka rzeczy związanych z interfejsem użytkownika lub przepływów pracy. Co jeszcze mógłbym robić?


title: Kiedy masz wystarczające doświadczenie?

text: Przez całą moją karierę w szkole średniej pracowałem nad trzema udanymi projektami (freelancer); jednak dotyczą one przede wszystkim technologii internetowych. Wiem, że jestem biegły w konfigurowaniu stosów LAMP, pracy z PHP, bazach danych i projektowaniu ze ścisłymi znacznikami, kontrolą wersji, testowaniem użyteczności i wszystkimi tymi zabawnymi rzeczami, ale odkąd zacząłem programować, widziałem wyraźną lukę między złożoność, od map mieszających po drzewa wyszukiwania binarnego (Java jest najlepszym PL do nauki bez względu na stan w branży). Chociaż staram się robić różnorodną karierę w projektowaniu oprogramowania, czy naprawdę konieczne jest dążenie do wykształcenia uniwersyteckiego (najlepiej w Berkley lub Stanford w CS), zanim w pełni zaangażuję się w programowanie? Czy trzy udane projekty dotyczące projektowania stron internetowych, tworzenia stron internetowych i przesyłania strumieniowego wideo (i wszystkich towarzyszących technologii) wystarczą, aby uznać je za „doświadczone”? Czy to doświadczenie sprawi, że zatrudnię mnie? Ostatecznie, kiedy jest wystarczająco dużo doświadczenia, aby stopnie uniwersyteckie stały się nieistotne?


title: MongoDB Embedded vs Reference Informacje prywatne

text: Szukałem intensywnie podobnego projektu schematu Mongo i nie mogę znaleźć odpowiednich przykładów. Mam sklep (z informacjami publicznymi), każdy sklep ma konto (z informacjami o koncie prywatnym). // obiekt sklepu { name: "Dom towarowy", email: "contact@store.com", konto: { // prywatne informacje nie zwrócone przez API managera: "Steve", pracownicy: [...] } } Sklepy będą przeszukiwane przez publiczny interfejs API. Ograniczam zapytania wyszukiwania za pomocą funkcji MongoDB, aby ograniczyć zwracane dane: db.stores.find({}, {account:0}); **Moje pytanie** : czy bardziej efektywne jest przechowywanie danych prywatnych jako poddokumentu czy w oddzielnym zbiorze? Wygląda na to, że oddzielna kolekcja z informacjami o koncie jest najlepszym wyborem, ponieważ będę wybierał z osadzonego dokumentu. Referencje: * schemat mongo (osadzanie a odniesienie) * dokument osadzony a odniesienie w modelu projektu mongoose?


title: Co jest lepsze do kodowania - komputer stacjonarny czy laptop?

text: Korzystanie z komputerów stacjonarnych zmniejsza się z dnia na dzień w codziennym życiu, ale czy są jakieś powody, aby używać komputera stacjonarnego zamiast laptopa?


title: Pytanie o hierarchię klas - czy implementujesz oddzielne klasy dla tego samego zachowania?

text: **UWAGA:** Język, którego używam, to C#. Obecnie pracuję nad mingrą „The Quest”, w której jest gracz i kilku wrogów. Mój projekt do tej pory zawierał podstawową klasę abstrakcyjną o nazwie „Mover” i interfejs o nazwie „IAttacker”, ponieważ obiekt gracza i obiekt (obiekty) wroga zarówno poruszają się, jak i atakują, choć na różne sposoby. Myślę jednak, że może to być również niepotrzebne, ponieważ mógłbym stworzyć jeden duży interfejs, 'IMoveAttack' lub coś w tym rodzaju. Co więcej, mój przyjaciel, który dał mi wyzwanie, polecił, aby klasa Broni (gracz może po drodze podnosić leżące na podłodze bronie) była podklasą Mover, nawet jeśli Bronie tak naprawdę nie muszą się ruszać, muszą tylko odradzać się w losowych miejscach na każdym poziomie. Jaka jest najlepsza zasada projektowania w tym przypadku?


title: Czy potrzebujemy poziomów przypadków użycia, czy nie?

text: Myślę, że nikt nie argumentowałby za rozkładaniem przypadków użycia, to jest po prostu złe. Czasami jednak konieczne jest określenie przypadków użycia, które są na niższym, bardziej technicznym poziomie, jak np. uwierzytelnianie i autoryzacja, które dają aktorowi wartość, ale są odległe od jego potrzeb biznesowych. Cockburn w razie potrzeby argumentuje za poziomami i wyjaśnia, jak przenieść przypadki użycia z/na różne poziomy i jak określić właściwy poziom. Z drugiej strony m.in. Bittner sprzeciwia się poziomom przypadków użycia, chociaż używa podprzepływów, wymaga dokumentów wizji, które zawierają informacje o przeznaczeniu systemu w biznesie, podobnie jak przypadki użycia na wyższym poziomie, a na końcu swojej książki wspomina, że przynajmniej przez większość czasu potrzebne są dwa poziomy. Moje pytanie brzmi, czy uważasz, że poziomy przypadków użycia są konieczne, pomocne czy niechciane? Jakie są powody? Czy brakuje mi ważnych argumentów?


title: Jak usprawnić proces tworzenia i prowadzenia dokumentacji?

text: Wiem, że to bardzo subiektywne pytanie, ale jest to jedna z sekcji inżynierii oprogramowania, w której nie zauważyłem żadnej poprawy, jeśli chodzi o to, jak możemy to zrobić w lepszy sposób. Chyba każdy programista robi dokumentację z pewną frustracją, ale podczas pracy czuję, że jest to dla mnie najważniejsze narzędzie. Jak lepiej przebiegać proces tworzenia i utrzymywania dokumentacji?


title: czy błąd logiczny może nastąpić znacznie później niż jego przyczyna?

text: Dla porównania, w przypadku krytycznego błędu w czasie wykonywania często przyczyną błędu jest to, że błąd powoduje awarię programu. W przypadku błędu logicznego nie powoduje awarii programu. Dzieje się tak, gdy stan wykonania programu nie jest taki, jakiego oczekujemy po raz pierwszy. Myślę, że przyczyną błędu logicznego w programie, podobnie jak przyczyną krytycznego błędu w czasie wykonywania, jest dokonanie korekty, a program nie będzie miał błędu logicznego. Zastanawiam się, czy przyczyną błędu logicznego musi być miejsce, w którym wystąpił błąd, czy może być znacznie wcześniej? Dziękuję.


title: Asercje w funkcjach prywatnych – gdzie postawić granicę?

text: Używamy asercji, aby sprawdzić nielegalne zachowanie, które po prostu nie powinno mieć miejsca, jeśli wszystko działa tak, jak powinno, na przykład używając argumentu `NULL`, gdy wyraźnie nie powinno. To bardzo dobrze, kiedy piszesz funkcje publiczne, ponieważ nie możesz ufać, że programista, który ich użyje, nie popełni błędu. Ale co z funkcjami prywatnymi, które nie będą dostępne z zewnątrz? Oczywiście funkcja korzystająca z tych funkcji prywatnych może zawierać błąd (tj. popełniłeś błąd), ale czy powinniśmy _zawsze_ używać asercji w funkcjach prywatnych? Czy istnieje wiersz, w którym możemy powiedzieć „Hej, nie potrzebujemy tutaj asercji, ponieważ ze względu na poprzednie asercje i użycie funkcji prywatnej możemy założyć, że parametry są zawsze bezpieczne”? Teraz sam jestem trochę sceptyczny co do tej ostatniej części - czy możemy kiedykolwiek bezpiecznie założyć, że wszystko jest zawsze tak, jak powinno być?


title: Kto powinien napisać plan testów?

text: Jestem w wewnętrznym zespole programistycznym mojej firmy i rozwijamy strony internetowe naszej firmy zgodnie z wymaganiami zespołu marketingowego. Przed udostępnieniem im witryny do testów akceptacyjnych poproszono nas o przekazanie im planu testów do wykonania. Jednak zespół programistów uważa, że ponieważ wymagania pochodziły od zgłaszających, mieliby najlepszą wiedzę na temat tego, co testować, na co zwracać uwagę, jak rzeczy powinny się zachowywać itp., a zatem plan testów nie jest wymagany. Zawsze się o to kłócimy, a programiści uważają, że stratą czasu jest zapisywanie takich rzeczy jak: 1. Kliknij przycisk _A_. 2. Wprowadź _XYZ_ w polu formularza i kliknij przycisk _B_. 3. Powinieneś zobaczyć zachowanie _C_. które musimy powtórzyć dla każdego żądanego wymagania/funkcji. Jest to w zasadzie przeformułowanie tego, co już jest w dokumencie wymagań. Zmierzamy w kierunku stosowania podejścia Agile do zarządzania naszymi projektami i jest to również wymagane na końcu każdej iteracji. Pomijając testy jednostkowe i integracyjne, kto powinien opracować plan testów akceptacyjnych użytkownika końcowego? Czy powinni to być zamawiający czy deweloperzy? Z góry bardzo dziękuję. Pozdrawiam CK


title: Jak wytłumaczyć, że haczyk(...) jest zły?

text: Mam problem: Teraz Microsoft się zmienił i w odniesieniu do standardu C++, począwszy od Visual Studio 2005 teraz: * Naruszenie zasad dostępu nie powinno być przechwycone w `catch(...)` Jednakże, jeśli skompiluje się z `/EHsc` lub inne podobne flagi w VS2003 i wcześniejszych, wtedy naruszenie zasad dostępu jest naprawdę przechwytywane przez `catch(...)`. Tak naprawdę. W mojej nowej firmie odpowiednio zabezpieczyli całą aplikację. A teraz mam **całą aplikację** z setkami, może tysiącami `catch(...)` skompilowanych w VS2003. Te „chwyty” nie kończą procesu. Czasami miejmy nadzieję, że wyśledzą coś w rodzaju „nieoczekiwany błąd w...”, ale tylko czasami. Jak mam im wytłumaczyć, że to po prostu źle? Że ukrywa zepsucie do momentu, w którym nie da się stwierdzić, co jest nie tak?


title: Jak połączyć ze sobą punkty w tablicy

text: Mam serię punktów o długościach i obrotach w ten sposób: ![punkty](http://i.stack.imgur.com/xiG62.jpg) Muszę utworzyć oddzielne łańcuchy z punktów, których linie nakładają się, ale mam prawdziwe kłopoty z robieniem tego skutecznie. Mam tablicę prostych obiektów Point, w dowolnej kolejności, i mogę je przeglądać i testować za pomocą prostej funkcji „przecięcie”. Muszę skończyć z tablicą łańcuchów, każdy z uporządkowaną listą punktów. (Lub inny sposób przedstawiania łańcuchów). W tej chwili każda droga, którą odkrywam, wydaje się wiązać z zawiłymi szykami, szturchnięciami i krówkami. Ponieważ nigdy nie studiowałem informatyki, zastanawiam się, czy istnieje jakaś struktura danych lub technika, która pasowałaby do tego rodzaju rzeczy.


title: Jakich różnic mogę się spodziewać na egzaminie Java 6 w porównaniu z egzaminem Java 5?

text: Biorę zajęcia z języka Java, które uczą w oparciu o książkę Java 5 i prof. mówi, że jeśli zdobędziemy certyfikat Java, to od razu zdamy klasę, co brzmi jak umowa. Moje pytanie brzmi, ponieważ chcę przejść na najnowszą certyfikację (Java 6), czego mogę się spodziewać po zmianie? Powiedziano mi, że Java 6 jest tak podobna do Javy 5, że nauka Java 5 nie jest bezużyteczna, ale co z różnicami egzaminacyjnymi?


title: Jaki był najczęściej używany język programowania przed utworzeniem C?

text: C to język napisany między '69 a '73 według Wikipedii. Wyobrażam sobie, że znacznie ułatwiło to programowanie i otworzyło furtkę dla innych języków programowania. Mam jednak pytanie, jaki język programowania dominował na rynku przed pojawieniem się C? Kusi mnie fortran i/lub BASIC, ale wtedy nawet nie żyłem, więc nie mam pojęcia. Przez „najczęściej używany” mam na myśli język programowania, który MUSI SIĘ NAUCZYĆ, którego używała wówczas większość programistów.


title: Jakie obowiązki pociąga za sobą praca związana z zarządzaniem systemami informacyjnymi?

text: W mojej szkole podobno jest kierunek Informatyka, który znajduje się pod „wydziałem nauk przyrodniczych”, podczas gdy Systemy Informacji Zarządzania to „biznes”. Poza zwykłymi opisami, które można znaleźć na temat obu zawodów, zastanawiałem się, czym faktycznie praca MIS różni się od powiedzmy inżyniera oprogramowania lub programisty. Po prostu ciekawy, dzięki


title: Jak wyprowadzać dane testowe/benchmarkowe biblioteki w frameworku internetowym?

text: Piszę ramy MVC. Mam folder pełen klas bibliotecznych, z których każda jest samodzielna i może zostać wyrwana z frameworka i używana samodzielnie. Jedynym problemem jest to, że kilka z tych bibliotek (benchmarking, testowanie jednostkowe) wyświetla HTML w celu raportowania wyników. Zastanawiam się, czy wyświetlić ten kod HTML w pliku widoku, czy na stałe zakodować go w klasie? Jeśli użyję plików widoku, te moduły nie będą już mogły być używane samodzielnie i będą wymagały metody print_view() znalezionej w innej klasie. Jeśli jednak zakoduję ten kod HTML na stałe w klasie biblioteki, klasa staje się trudna do odczytania, a także utrudnia modyfikowanie aspektów projektowych raportów. Jakieś sugestie/myśli?


title: Narzędzie do zarządzania zależnościami dla punktów końcowych REST

text: Pracuję w środowisku zorientowanym na odpoczynek. Liczba punktów końcowych jest dość duża i obejmuje wiele aplikacji. Zależności między punktami końcowymi są również liczne i niezbyt dobrze zaplanowane. Aplikacje mają cykliczne zależności między sobą. Niestety nie ma centralnej lokalizacji, w której wszystkie punkty końcowe są udokumentowane i deklarują zależności (punkty końcowe, które z kolei wywołują). Czy istnieje narzędzie, które pomoże w takim zarządzaniu zależnością. Próbowałem szukać narzędzia online, ale nie wiem, jak by to się nazywało, nic nie mogę znaleźć.


title: Jak ułatwić pisanie złożonych zapytań SQL?

text: Bardzo trudno jest mi pisać złożone zapytania SQL, zawierające sprzężenia w wielu (przynajmniej 3-4) tabelach i obejmujące kilka zagnieżdżonych warunków. Zapytania, które mam napisać, można łatwo opisać kilkoma zdaniami, ale ich ukończenie może wymagać zwodniczej ilości kodu. Często używam tymczasowych widoków do pisania tych zapytań, które wydają się trochę kulą. Jakie wskazówki mogę wykorzystać, aby ułatwić te złożone zapytania? Dokładniej, jak podzielić te zapytania na kroki, których potrzebuję do rzeczywistego napisania kodu SQL? _Zauważ, że jestem SQL, który mam napisać, jest częścią zadań domowych na kurs bazy danych, więc nie chcę oprogramowania, które wykona tę pracę za mnie. Chcę właściwie zrozumieć kod, który piszę._ Więcej szczegółów technicznych: * Baza danych jest utrzymywana na serwerze PostgreSQL działającym na komputerze lokalnym. * Baza danych jest bardzo mała: nie ma więcej niż siedem tabel, a największa tabela ma mniej niż około 50 wierszy. * Zapytania SQL są przekazywane bez zmian do serwera za pośrednictwem LibreOffice Base.


title: Jak przekonać kogoś, że test powinien wykonywać asercję (nie asercje), a nie metody pomocnicze?

text: Dołączyłem do nowego pracodawcy i natknąłem się na nowy styl pisania testów. @Test() public testMethodWhichDoesNotDoAnyAssertion() { LoginPage loginPage = signUpPage.doLogin("nazwa użytkownika","hasło"); oneMoreCommonMethodCalledHere() otherCommonMethodCalledHere() } public void doLogin(String userName, String password) { //zaloguj się tutaj Assert.assertTrue("Logowanie powiodło się") } public void oneMoreCommonMethodCalledHere() { //Tutaj więcej operacji. Assert.assertTrue("To również się powiodło") } public void anotherCommonMethodCalledHere() { //Tutaj więcej operacji. Assert.assertTrue("Nawet to się udało! Twój kod jest niesamowity!!!") Do tej pory robiłem asercje w testach, a nie w metodach, które są wywoływane z metody testowej. Problemów, które mam z podejściem, jest wiele - w jednej metodzie występują dwa liczne asercje, choć pośrednio, co jest sprzeczne z ideą jednej odpowiedzialności na test Są chwile, kiedy chcę wykonać jedno asercję w mojej metodzie testowej podczas testowania pracy pływ. Wiele metod pomocniczych, które zostałyby wywołane, może potwierdzić rzeczy, a nawet zawieść, co utrudni test przepływu pracy. Teraz usłyszałem rzecz przemawiającą za tym podejściem - łatwo jest każdemu po prostu podłączyć metodę pomocniczą do testu, nie martwiąc się o asercje, które należy wykonać dla scenariusza, ponieważ metoda pomocnicza się tym zajmuje. Uwagi?


title: Jak przedstawić asynchroniczną zmianę stanu na wykresie lub diagramie?

text: Zacząłem studiować _wykres przejścia między stanami_. Jak widzę, zakłada, że wszystkie zmiany stanu są wykonywane natychmiast, bez czasochłonnego. Ale w większości przypadków jestem mocno zależny od asynchronicznych operacji we/wy, więc modelowanie ich za pomocą wykresu wydaje się mniej wydajne. Jak myślisz o tym, jak przedstawić asynchroniczną zmianę stanu? Proszę mi coś polecić :)


title: Czy pojedyncze dziedziczenie ogranicza to, co możemy zrobić z uogólnianiem?

text: Z reguły uogólnianie stosuje się tylko w określonych okolicznościach. Na przykład, kiedy możemy powiedzieć, że X jest dosłownie podklasą Y. Możemy więc szczęśliwie powiedzieć, że Horse jest podklasą Mammal. Zawsze byłem przekonany, że powinniśmy tu stosować uogólnianie i dziedziczenie. Jeśli nie mamy tej ścisłej zgodności między dwoma przedmiotami, to nie powinniśmy. Koń to ssak. Jest to jednak również dosłownie środek transportu. Więc co się dzieje w świecie jednego dziedzictwa, w którym koń nie może dziedziczyć po obu? Czy zatem podporządkowujemy fakt, że koń jest dosłownie środkiem transportu, realizacji, tj. interfejsowi typu ITransportable?


title: Dlaczego korzystanie z bibliotek C++ jest tak skomplikowane?

text: Przede wszystkim chcę zauważyć, że uwielbiam C++ i należę do tych osób, które uważają, że łatwiej jest kodować w C++ niż w Javie. Z wyjątkiem jednej drobnej rzeczy: bibliotek. W Javie wystarczy dodać trochę jara do ścieżki budowania i gotowe. W C++ zwykle musisz ustawić wiele ścieżek do plików nagłówkowych i samej biblioteki. W niektórych przypadkach trzeba nawet użyć specjalnych flag kompilacji. Używałem głównie Visual Studio, Code Blocks i w ogóle nie korzystałem z IDE. Wszystkie 3 opcje nie różnią się zbytnio, jeśli chodzi o korzystanie z zewnętrznych bibliotek. Zastanawiam się, dlaczego nie było prostszej alternatywy? Podobnie jak posiadanie specjalnego pliku .zip, który zawiera wszystko, czego potrzebujesz w jednym miejscu, dzięki czemu IDE może wykonać całą pracę za Ciebie, ustawiając flagi kompilacji. Czy jest do tego jakaś bariera techniczna?


title: Czego możemy się nauczyć z nieaktywnych języków asemblera?

text: Wciąż istnieją grupy programistów, którzy wspierają stare mikroprocesory, np. Z80, 6510, 68000 itd. Czego możemy się nauczyć ze starych języków asemblerowych w czasach, gdy programowanie funkcjonalne staje się modne? **EDYTUJ** Wyobrażam sobie, że systemy wbudowane wymagają jeszcze więcej nauki. Jednak style asemblera mają zastosowanie w bardziej ograniczonym zakresie do programowania internetowego, gdzie używane jest buforowanie, a rozmiar procedur nie ma tak naprawdę znaczenia. Wytyczne dotyczące najlepszych praktyk w zakresie stylów osadzonych i internetowych znacznie się różnią (różne są style serwera i klienta). Na przykład, optymalizacja multipleksera sprite, który ma działać, powiedzmy, poniżej 30 bajtów, różni się od typów optymalizacji, które wykonalibyśmy dla kodu, który zamierzamy uruchomić na serwerze sieciowym. Rodzaje optymalizacji są bardzo różne. Multiplekser sprite jest napisany z wykorzystaniem pamięci jako głównym priorytetem, ale jeśli chodzi o naszą procedurę serwera WWW, chcemy maksymalnej wydajności, która ma niewiele wspólnego z efektywnym wykorzystaniem pamięci, chyba że mówimy o współdzielonych zasobach.


title: Skompiluj kod GPL do biblioteki współdzielonej obsługującej JNI i używaj jej w oprogramowaniu komercyjnym

text: Zajmuję się tworzeniem aplikacji na Androida w JAVA, która wywołuje kod C na GPLed przez JNI. Zmodyfikowałem i zamknąłem oprogramowanie na licencji GPL pod interfejsem JNI i skompilowałem je jako bibliotekę współdzieloną (.so), której mogę używać przez JNI z mojej części JAVA (komercyjnej części z zamkniętym źródłem). Ponieważ pozbawiłem oryginalnego oprogramowania GPL wszystkiego, co nie jest potrzebne mojemu oprogramowaniu, to oprogramowanie na GPL nie ma już innych zależności GPL, które wyraźnie zabraniają używania go jako biblioteki współdzielonej w oprogramowaniu o zamkniętym kodzie źródłowym (takim jak np. SecretRabbitCode zabrania tego). Nie mam problemu z ustawieniem mojej zmodyfikowanej wersji oprogramowania GPL online, ale nie mogę tego zrobić z moim oprogramowaniem komercyjnym. Ponieważ potrzebuję zmodyfikowanej wersji oprogramowania GPL w moim oprogramowaniu, muszę spakować je w jeden pakiet (plik APK w systemie Android). Niestety, oprogramowanie na GPL ma 1 lub 2 więcej zależności od kodu GPL (tylko pliki C, takie jak aes.c), więc nie jest to tak proste, jak po prostu zapytać autora tego oprogramowania na GPL. Ponieważ sposób na Androida polegający na "pakowaniu JAVA i plików .so razem, pakowaniu ich i rozpowszechnianiu" jest całkiem nowy, nie jest to tak proste, jak w przypadku czystej JAVA lub czystego kodu C. Kto może pomóc?


title: Udostępnianie API między różnymi językami programowania?

text: Właśnie zastanawiałem się, jak API mogą być współdzielone między różnymi językami programowania. Chodzi mi o to, że MS ma .Net, który używa VB.net C# i różnych innych technologii. Wątpię, aby .Net był napisany dla każdego języka programowania. W jaki sposób struktury i klasy są współdzielone między językami? To samo dotyczy również Unity3D - JavaScript współdzieli API z C# i BOO. Jak?


title: Co by się stało, gdyby kawałek kodu GPL wkradł się do kodu źródłowego Windows?

text: Wyobraź sobie, że niewierny (a może nieostrożny) pracownik Microsoftu zdołał przemycić trzy linijki kodu GPL do rdzenia dystrybucji Windows. Czy nie oznaczałoby to, że Microsoft musiałby również opublikować cały swój kod źródłowy na licencji GPL? Czy może po prostu przepisać trzy wiersze, gdy zostaną powiadomieni o problemie? Czy Microsoft nie powinien bać się tego na śmierć? **Edytuj** W komentarzach poniżej Kenneth stwierdza, że tak się stało, więc byłbym najbardziej zainteresowany wszelkimi odniesieniami. Nie rozumiem też, jak to pytanie mogło się zamknąć.


title: Konfigurowanie struktury ASP.NET dla kodu

text: Podczas tworzenia aplikacji internetowych zawsze kodowałem w C# MVC3. Ale teraz chciałem dowiedzieć się nieco więcej o tworzeniu witryn internetowych za pomocą tylko ASP.NET. Ale teraz zastanawiam się, jaka byłaby dobra konfiguracja mojego kodu. Dla mnie wzór podobny do MVC wydaje się być dobrym sposobem. Ale oczywiście ASP.NET nie ma żadnych klas `router` i `controller`. Więc myślę, że ludzie mają inny sposób konfigurowania swojego kodu, gdy robią ASP.NET. Więc szukam więcej informacji, jak zacząć z tym. Tak naprawdę nie są to podstawy ASP.NET, ale coś, co skupia się na dobrej konfiguracji kodu. Jakieś dobre tutoriale/informacje na ten temat/?


title: Inny sposób wyrażania „brudnego” kodowania

text: Piszę brief na nowego startera w firmie. Wskazałem cele, które chcę osiągnąć, a teraz piszę kilka sugerowanych (ale nie konkretnych) rozwiązań. Dla każdego z celów proponuję szybką, brudną metodę i wolniejsze, ale bardziej niezawodne rozwiązanie. Nie mam na myśli „brudnego”, jak w niekomentowanym i pozbawionym tabulatorów kodzie, ale po prostu jak w szybszym, hackishy kodzie. Cieszę się, że nowy starter wybiera drogę, którą uważa za konieczną, i czuję, że moje użycie słowa „brudny” zniechęci go do tego konkretnego rozwiązania. Prawdopodobnie spróbują zaimponować kierownictwu, a nie chcę, aby „brudne” rozwiązanie było dla nich wykluczeniem, jeśli to jest to, z czym czują się najbardziej komfortowo. Czy możesz mi pomóc zdecydować się na nieco lepszą terminologię niż brudna? Staram się kontrastować między hacky/szybkim rozwiązaniem (które nadal jest aktualne) a bardziej niezawodnym, skalowalnym rozwiązaniem. W przypadku projektu tak trywialnego jak ten, który produkujemy, obie metody zostaną zaakceptowane.


title: Jakie tematy muszę zbadać, aby móc ukończyć przydzielony przeze mnie „Projekt szkoleniowy”?

text: Chcę kontynuować naukę C#. Przeczytałem fragmenty kilku polecanych tu książek iz dnia na dzień język jest coraz bardziej znajomy. Chciałbym zająć się średniej wielkości osobistym projektem, aby przenieść moją wiedzę na wyższy poziom. To, co chciałbym zrobić, to stworzyć aplikację, która „zarządza wydatkami”, działająca na wielu komputerach w sieci LAN. Na przykład, powiedzmy, że mamy person1 i person2 na osobnych komputerach z uruchomioną aplikacją, kiedy person1 wprowadzi wydatek, pojawi się on w widoku person2 (ładny interfejs użytkownika) bazy danych wydatków i na odwrót. Jakie tematy muszę zbadać, aby było to dla mnie możliwe? Planuję uczyć się WPF dla interfejsu użytkownika (chociaż stroma krzywa uczenia się (a przynajmniej tak mi powiedziano) na tym etapie trochę mnie niepokoi.Jeśli chodzi o bazę danych, którą bazę danych poleciłbyś użyć? nie chcę „serwera”, na którym ma działać baza danych, więc czy muszę używać wbudowanej bazy danych, w której każdy komputer kliencki uruchamia kopię tych aktualizacji (po uruchomieniu/wprowadzaniu kosztów na dowolnym komputerze itp.)? w zakresie sieci, na który powinienem patrzeć?Nie uczyłem się wcześniej sieci w żadnym języku, więc czy muszę się uczyć o gniazdach, czy?


title: najlepsze praktyki dotyczące inicjowania członków klasy w php

text: Mam dużo takiego kodu w moich konstruktorach:- function __construct($params) { $this->property = isset($params['property']) ? $params['właściwość'] : default_val; } Czy lepiej to zrobić, niż określić wartość domyślną w definicji właściwości? czyli `public $właściwość = default_val`? Czasami istnieje logika dla wartości domyślnej, a niektóre wartości domyślne są pobierane z innych właściwości, dlatego robiłem to w konstruktorze. Czy powinienem używać ustawiaczy, aby cała logika dla wartości domyślnych była oddzielona?


title: Jaki związek ma oprogramowanie Scrum lub Lean z koncepcjami inżynierii przemysłowej, takimi jak teoria ograniczeń?

text: W Scrumie praca jest dostarczana klientom poprzez serię sprintów, w których praca projektowa jest ograniczona czasowo do ustalonej liczby dni lub tygodni, zwykle 30 dni. W oszczędnym tworzeniu oprogramowania celem jest jak najszybsze dostarczanie oprogramowania, co pozwala na wczesną informację zwrotną dla następnej iteracji. Obie techniki podkreślają znaczenie przepływu pracy, w którym produkt pracy oprogramowania nie akumuluje się w fazie rozwoju w oczekiwaniu na wydanie w pewnym przyszłym terminie. Obydwa pozwalają na reagowanie na nowe lub udoskonalone wymagania i informacje zwrotne od QA i klientów z możliwie najmniejszym opóźnieniem w oparciu o priorytety. Kilka lat temu wysłuchałem wykładu, na którym prelegent opowiedział pokrótce o rodzinie pojęć z zakresu inżynierii przemysłowej zwanej teorią ograniczeń. W fabryce stosują model operacyjny oparty na trzech komponentach: bębnie, zderzaku i linie. Bęben synchronizuje produkt pracy, gdy przepływa przez system. Bufory, które chronią system, przechowując dane wyjściowe z jednego etapu w oczekiwaniu na zużycie przez kolejny. Lina ciągnie produkt z jednego stanowiska pracy do drugiego. Historycznie, czy te idee są częścią dziedzictwa Scrum i Lean, czy też są na osobnym torze? Chcieliśmy myśleć o Scrumie i Lean w kategoriach bębna-bufora-liny, jakie są części? * Bęben = {codzienne spotkanie scrumowe, comiesięczne wydanie)? * Bufor = {lista wypalania, system kontroli źródła)? * Rope = { codzienne spotkanie, stały serwer integracyjny, comiesięczne wydania}? Inżynierowie przemysłowi definiują przepływ pracy w odniesieniu do różnych rodzajów fabryk. * I-Factories: rurociąg prosty. Jedno wejście, jedno wyjście. * Fabryki A: wiele wejść i jedno wyjście. * V-Factories: jedno wejście, wiele produktów wyjściowych. * T-Plants: wiele wejść, wiele wyjść. Jeśli tak, to jaki rodzaj fabryki najbardziej przypomina Scrum czy Lean i dlaczego?


title: Kiedy, jeśli w ogóle, można zignorować standardy kodu?

text: Moja firma zdecydowała się używać procedur składowanych do wszystkiego, co dotyczy bazy danych (ponieważ nie znała żadnego innego sposobu poza surowym SQL), i jak mówi powiedzenie "Kiedy w Rzymie...", więc staram się podążać. Ostatnio musiałem dodać poprawkę hakerską, która wymagała pobrania wartości z bazy danych, a ponieważ była to pojedyncza wartość z jednej tabeli, napisałem ją jako inline SQL (oczywiście sparametryzowaną), ponieważ nie wydawało się, że istnieje potrzeba procedura składowana dla jednego trywialnego wiersza kodu używanego w pojedynczej części aplikacji jako kludge. Oczywiście powiedziano mi, żebym to naprawił i używał tylko Stored Procs do wszystkiego, co dotyczy bazy danych. To trochę za bardzo, jak ślepe podążanie za dogmatami, zamiast używania zdrowego rozsądku. Nie zrozum mnie źle, rozumiem cel posiadania standardów kodowania, ale jestem również zwolennikiem ignorowania standardów, gdy nie mają sensu, a nie tylko ślepego podążania za nimi, jakby były Ewangelią.


title: Podział logiki, danych, układu i „hacków”

text: Jasne, wszyscy słyszeliśmy o wzorcach programowania, takich jak MVVM, MVC i tym podobnych. Ale to nie jest to, nad czym się zastanawiam, ponieważ układ, dane i logika są już w dużej mierze podzielone (znaczniki układu XML, baza danych, _tu wstaw wybrany język_ ). Platforma, dla której pracuję, jest trudna do utrzymania w zaktualizowanych wersjach i starszych systemach operacyjnych. Projekt znacznie się rozrósł w ciągu ostatnich kilku miesięcy i radzenie sobie z różnymi wersjami platform naprawdę jest uciążliwe. Na przykład zwykłe wyłączenie kontroli interfejsu użytkownika dla wszystkich istniejących wersji zajęło mi około 40 wierszy kodu w warstwie logicznej, męcząc się z wywoływaniem, delegowaniem, singletonami zapewniającymi obsługę interfejsu użytkownika i tak dalej. Czy istnieje czysty sposób na śledzenie tych „hacków” poprzez może wykluczenie ich w osobnych klasach lub nawet w pakietach? Czy powinienem nadpisać istniejący kod frameworka, aby poprawnie obsługiwać _moje_ wymagania? Jeśli tak, czy ta koncepcja ma nazwę?


title: Symulacja/developing_a_testing_strategy dla czynników, które mogą spowodować, że ten sam algorytm da różne wyniki w systemach rozproszonych

text: To jest **Pytanie czysto akademickie** **Kontekst:** Pracuję z niektórymi algorytmami, które mają na celu osiągnięcie konsensusu w systemach rozproszonych. Za pomocą tych algorytmów zamierzałem uporać się z bizantyjskimi błędami. W tym celu zaimplementowałem kilka algorytmów opublikowanych w artykułach IEEE i potrzebuję platformy do testowania tych algorytmów. Chciałem przetestować zalety istniejących algorytmów. W tym celu zaimplementowałem tysiące kontenerów linuksowych w moim systemie i teraz chcę przesyłać wiadomości między nimi lub powiedzieć _symulować_ mój system rozproszony. Ale pytanie brzmi, że dane, które przepływają, muszą mieć _błędy_. Taka jest geneza tego pytania. Dlaczego potrzebuję czegoś bardziej _wyrafinowanego_ niż RNG jest to, że będę musiał dołączyć do mojej pracy prawdziwą wiarygodność. Chcę, aby poradziła sobie z niektórymi rzeczywistymi aplikacjami generującymi błędy, a nie tylko naprawiła błędy, które sam wygenerowałem w algorytmie. Muszę więc zasymulować czynniki, które powodują błędy bizantyjskie. LUB, cytując FrustatedWithFormsDesigner: `Muszę opracować strategię testowania, która będzie zawierała zamierzoną liczbę błędów do przetestowania obsługi błędów` Podsumowując: **Załóżmy, że uruchamiam program w środowisku rozproszonym, to jakie są czynniki, które może skończyć się generowaniem błędów bizantyjskich i czy mogę wprowadzić te czynniki do mojej symulacji i jak? ** Potrzebuję więc: programu, który zrobi małe nie. błędów od czasu do czasu i nie powinnam wiedzieć, jakie błędy popełniła i kiedy. _Nie potrzebuję go do popełnienia wielu błędów w jednym zestawie (uruchomieniu algorytmu), ale raczej planuję wykonać (powiedzmy) 10 000 uruchomień programu i potrzebuję go do popełnienia błędów 2000 razy.._ Bardzo ważne, że musi być optymistyczne, że nie ma więcej niż (1/5)n błędów, gdzie n jest całkowitą liczbą. wyników wygenerowanych za pomocą programu. _Wyniki_, o których tu mówię, mogą być wszystkim, co jest wymierne i weryfikowalne, jak np. tablica wartości. Robimy coś takiego: 1for(int i=0; i<10000; i++) 2 //jedna piąta razy umieszcza śmieci w tablicy za pomocą funkcji losowej!! 3 dla (int j=0; j<5; j++) 4 tablica[j]=j; użycie RNG w kroku `2` do _ukrycia_ miejsca, w którym występuje usterka, jest zbyt uproszczone, trywialne i niewystarczająco _realne_. Pomyślałem, że mógłbym użyć algorytmu zbudowanego wokół jakiejś funkcji matematycznej, która z pewnością zawiedzie 1/5 razy, ale nie mogłem wymyślić żadnego. PS Powiedz mi, czy potrzebujesz więcej danych, aby zrozumieć problem.


title: Powiedziano mi, że wyjątki powinny być używane tylko w wyjątkowych przypadkach. Skąd mam wiedzieć, czy moja sprawa jest wyjątkowa?

text: Moim konkretnym przypadkiem jest to, że użytkownik może przekazać ciąg do aplikacji, aplikacja analizuje go i przypisuje do obiektów strukturalnych. Czasami użytkownik może wpisać coś nieprawidłowego. Na przykład ich wkład może opisywać osobę, ale mogą powiedzieć, że jej wiek to „jabłko”. Prawidłowe zachowanie w takim przypadku to wycofanie transakcji i poinformowanie użytkownika, że wystąpił błąd i będzie musiał spróbować ponownie. Może istnieć wymóg zgłaszania każdego błędu, który możemy znaleźć w danych wejściowych, a nie tylko pierwszego. W tym przypadku argumentowałem, że powinniśmy rzucić wyjątek. Nie zgodził się, mówiąc: „Wyjątki powinny być wyjątkowe: oczekuje się, że użytkownik może wprowadzić nieprawidłowe dane, więc nie jest to wyjątkowy przypadek”. Tak naprawdę nie wiedziałem, jak argumentować, ponieważ z definicji tego słowa, on wydaje się mieć rację. Ale rozumiem, że właśnie dlatego wymyślono Wyjątki. Kiedyś _musiałeś_ sprawdzić wynik, aby zobaczyć, czy wystąpił błąd. Jeśli nie sprawdziłeś, złe rzeczy mogą się zdarzyć bez twojej uwagi. Bez wyjątków każdy poziom stosu musi sprawdzić wynik wywołanych przez siebie metod, a jeśli programista zapomni sprawdzić jeden z tych poziomów, kod może przypadkowo kontynuować i zapisać nieprawidłowe dane (na przykład). Wydaje się, że w ten sposób jest bardziej podatny na błędy. W każdym razie możesz poprawić wszystko, co tutaj powiedziałem. Moje główne pytanie brzmi: jeśli ktoś mówi, że wyjątki powinny być wyjątkowe, skąd mam wiedzieć, czy mój przypadek jest wyjątkowy?


title: Albo monada, albo wyjątkowe okoliczności

text: Mam funkcję zwracającą Either, taką jak GetUserFromDb (int id). Jeśli baza danych jest w trybie offline, czy powinienem wychwycić błąd w funkcji i zapakować go w błąd / lewy przypadek, czy też powinienem wypuścić go jako wyjątek, ponieważ nic nie mogę zrobić, a to naprawdę wyjątkowa sytuacja?


title: Czy powinienem użyć wyjątku w takim przypadku?

text: Mam usługę systemu Windows z interfejsem płynnym, takim jak: aRequest = Repository.getRequest() .createProcess() .validate(); Czasami `getRequest()` może zwrócić wartość `null`, co może spowodować błąd w `createProcess()`. Mógłbym banalnie oddzielić `getRequest()` od `createProcess()`, ale gdybym tego nie robił, jaką drogą powinienem podążać, co jest lepsze: * Sprawdź, czy żądanie (`this`) jest puste i w przypadku return null: if(this is null) return null Mógłbym to sprawdzić w każdej metodzie obok `getRequest()`. Na końcu `aRequest` będzie miał wartość `null`. * Zgłoś wyjątek, jeśli metoda `createProcess()` otrzyma wartość `null`: if(this is null) throw new NullRequestException(); PRO drugiego sposobu: Tylko druga metoda wymaga sprawdzenia, niezależnie od liczby metod w łańcuchu. KON pierwszego sposobu: Każda metoda w łańcuchu wymaga sprawdzenia Teraz pytanie: Czy drugi sposób to złe użycie koncepcji wyjątków, skoro czasami brak żądania może być normalny?


title: Które języki programowania obsługują następujące funkcje?

text: Moje osobiste doświadczenie w programowaniu jest głównie w Javie, z odrobiną Ruby, odrobiną Scheme, a ostatnio, ze względu na rozwój iOS, Objective-C. W moim przejściu z Javy do Objective-C pokochałem niektóre funkcje Objective-C, których Java nie ma. Obejmują one obsługę zarówno statycznego, jak i dynamicznego typowania, programowania funkcjonalnego i zamknięć, które staram się częściej wykorzystywać w moim kodzie. Niestety istnieją kompromisy, w tym brak obsługi generyków i (przynajmniej na iOS) brak zbierania śmieci. Te kontrasty skłoniły mnie do rozpoczęcia wyszukiwania niektórych języków programowania, które obsługują następujące funkcje: * Zorientowane obiektowo * Obsługa programowania funkcjonalnego * Zamknięcia * Ogólne * Obsługa pisania zarówno statycznego, jak i dynamicznego * Zarządzanie modułami w celu uniknięcia piekła klas/dll * Dostępne wyrzucanie śmieci * Przyzwoita obsługa IDE Trzeba przyznać, że niektóre z tych funkcji (obsługa IDE, zarządzanie modułami) mogą nie być specyficzne dla samego języka, ale oczywiście wpływają na łatwość programowania w języku. Które języki spełniają te kryteria?


title: Czy deklarowanie pól na klasach jest rzeczywiście szkodliwe w PHP?

text: Rozważmy następujący kod, w którym setter jest celowo zepsuty z powodu przyziemnego błędu programistycznego, który popełniłem kilka razy w przeszłości: <?php class TestClass { private $testField; function setField($nowaWartość) { $testField = $nowaWartość; // celowo zepsute; powinno być `$this->testField = $newVal` } function getField() { return $this->testField; } } $testInstance = new TestClass(); $testInstance->setField("Witaj świecie!"); // Właściwie nic nie drukuje; getField() zwraca null echo $testInstance->getField(); ?> Fakt, że zadeklarowałem `$testField` na początku klasy pomaga ukryć przede mną ten błąd programistyczny. Gdybym nie zadeklarował tego pola, to po wywołaniu tego skryptu w moim dzienniku błędów pojawiłoby się coś podobnego do następującego ostrzeżenia, co potencjalnie byłoby cenne w pomaganiu w debugowaniu - zwłaszcza, gdybym popełnił taki błąd w duża i skomplikowana aplikacja w świecie rzeczywistym: > PHP Uwaga: Właściwość niezdefiniowana: TestClass::$testField w /var/www/test.php > w linii 13. W deklaracji nie ma ostrzeżenia. Być może czegoś mi brakuje, ale zdaję sobie sprawę tylko z dwóch powodów deklarowania pól klas w PHP: po pierwsze, że deklaracje działają jako dokumentacja, a po drugie, że bez deklaracji nie można użyć opcji `private` i `protected ` modyfikatory dostępu, które są prawdopodobnie przydatne. Ponieważ ten ostatni argument nie ma zastosowania do pól publicznych – przypisanie do niezadeklarowanego pola obiektu czyni go publicznym – wydaje mi się, że powinienem przynajmniej skomentować wszystkie moje deklaracje pól publicznych. Komentarze zapewnią dokładnie taką samą wartość dokumentacji, ale skorzystam z ostrzeżeń, jeśli spróbuję odczytać niezainicjowane pole. Jednak po zastanowieniu wydaje się, że nie ma sensu na tym poprzestać. Ponieważ z mojego doświadczenia wynika, że próba odczytania niezainicjowanego pola jest znacznie częstszą przyczyną błędu niż próba niewłaściwego odczytania lub modyfikacji pola prywatnego lub chronionego (robiłem to pierwsze kilka razy już w mojej krótkiej karierze programistycznej, ale nigdy nie ), wygląda na to, że komentowanie wszystkich deklaracji pól - nie tylko publicznych - byłoby najlepszą praktyką. To, co sprawia, że się waham, to fakt, że nigdy nie widziałem, aby ktoś inny robił to w swoim kodzie. Dlaczego nie? Czy jest korzyść z deklarowania pól klas, o których nie wiem? Czy mogę w jakiś sposób zmodyfikować konfigurację PHP, aby zmienić zachowanie deklaracji pól, aby móc używać prawdziwych deklaracji pól i nadal korzystać z ostrzeżeń „Niezdefiniowana właściwość”? A może jest jeszcze coś, co pominąłem w mojej analizie?


title: Techniki synchronizacji danych w czasie rzeczywistym między dwoma systemami

text: Muszę wymyślić projekt aktualizacji danych w czasie rzeczywistym z produktu COTS (system Point of Sales) do własnej aplikacji .NET (system zarządzania zapasami). W szczególności każda transakcja sprzedaży w systemie POS wymaga natychmiastowej (w czasie rzeczywistym) aktualizacji bazy magazynowej (obecnej w systemie Inventory Management). Jedynym sposobem, w jaki inny system może komunikować się z systemem POS, jest interfejs API udostępniany jako usługi sieciowe. Myślałem o wprowadzeniu Service Bus (lub dowolnego takiego narzędzia EAI) pomiędzy dwoma systemami i skorzystaniu z modelu publikuj-subskrybuj, aby każde uszczuplenie sprzedaży w systemie POS powodowało aktualizację danych do systemu IM za pośrednictwem magistrali usług . Moje pytania to: 1. Czy to dobre/wykonalne rozwiązanie? 2. Czy masz jakieś inne sugestie dotyczące takiej synchronizacji danych w czasie rzeczywistym między różnymi systemami?


title: Białe tablice – kto z nich korzysta?

text: Tak więc zarówno jako programista na pełen etat, jak i hobbysta (rozwijający własne rzeczy na własny użytek i być może do sprzedania któregoś dnia), czuję, że kupię dużą białą tablicę do powieszenia w moim pokoju w domu lub coś bardzo przydatnego . Czy ktoś tutaj ma też taki, który można wykorzystać do projektów wysokiego poziomu (UML, architektura itp.) I takich rzeczy jak bardzo wczesne makiety interfejsu użytkownika itp.? Jeśli je macie, to które kupiliście? Nie mogę przypiąć takiego, który byłby dobry do użytku domowego i nie jestem pewien ceny / innych rzeczy. Dziękuję!


title: Zawsze reimplementuję kod obserwatora/podmiotu w Javie. Czy jest lepsza opcja?

text: Zawsze piszę interfejsy obserwator/temat w konkretnym projekcie Java, np.: /** * Rejestruje odbiorcę do dyspozytora. * Gdy nadejdą dane, które odbiorca może przetworzyć, * zostaną przekazane do odbiorcy. * ... */ void addReceiver(odbiorca IDataReceiver); /** * @return * Prawda, jeśli odbiorca został zarejestrowany, w przeciwnym razie fałsz. * ... */ boolean hasReceiver(odbiornik IDataReceiver); ... Kiedy klasa implementuje te interfejsy, muszę zaimplementować kod, przetestować go, debugować itd. Ciągłe wprowadzanie podobnej logiki wydaje się bezcelowe. Czy jest _jakaś_ lepsza opcja w Javie?


title: Jak zatrudnić programistę internetowego: dla nie-programisty

text: Nie jestem programistą, który korzystał z usług: freelancer, odesk itp. Próbowałem zapytać o to, czego potrzebuję, ale nie mogę znaleźć nikogo, kto mógłby mi pokazać jakikolwiek przykład podobny do tego, o który prosiłem w specyfikacje dotyczące programowania internetowego. Mają front-endy i back-endy, ale nie spełniają prawdziwych wymagań witryny „na żywo”. "na żywo", aby być gotowym do obsługi ruchu, z kluczami w ręku, może być stale aktualizowany przeze mnie, ... Jak obliczyć, jak ocenić programistę? Jak wylicytować odpowiednią cenę za usługi?


title: Dlaczego tak nazywa się polecenie „zabij”?

text: Dlaczego zdecydowano się na wywołanie polecenia `kill` "zabij"? To znaczy tak, to narzędzie jest często używane do kończenia procesów, ale w rzeczywistości może być używane do wysyłania dowolnego sygnału. Czy to nie jest trochę mylące? Może są powody historyczne. Wszystko, co wiem z `man kill`, że to polecenie pojawiło się w wersji 3 AT&T UNIX.


title: Etykieta Open Source

text: Zacząłem pracę nad moim pierwszym projektem open source na Codeplex i natknąłem się na okropny kod. (dowiedziałem się, że C# nadal ma instrukcję "goto") Zacząłem dodawać funkcje, których chciał "właściciel" i po przejrzeniu bazy kodu i zobaczeniu, jaki to był bałagan (np. za pomocą "goto") chciałem to posprzątać trochę. Ale jestem trochę zaniepokojony i dlatego zwracam się do Was wszystkich: czy to właściwa etykieta, aby "naprawić" "zły kod", czy też powinienem na to pozwolić i popracować nad nowymi funkcjami? Jak powiedziałem wcześniej, jestem nowy na całej scenie OSS i ogólnie pracuję w zespole, więc nie chciałbym tego zepsuć.


title: Kiedy powinienem używać AtomPub?

text: Przeprowadziłem pewne badania nad projektowaniem usług internetowych RESTful i dotarłem do tego, co uważam za kluczowy punkt decyzji, więc pomyślałem, że zaproponuję to społeczności, aby uzyskać porady. Zgodnie z zasadami architektury RESTful chcę zaprezentować wykrywalne API, więc będę wspierał różne czasowniki HTTP tak w pełni, jak to możliwe. Moja trudność wiąże się z wyborem reprezentacji tych zasobów. Widzisz, łatwo byłoby mi wymyślić własny interfejs API, który obejmowałby sposób prezentacji wyników wyszukiwania i sposobu dostarczania linków do innych zasobów, ale byłoby to unikalne dla mojej aplikacji. Czytałem o protokole Atom Publishing Protocol (RFC 5023) i o tym, jak OData promuje jego użycie, ale wydaje się, że dodaje dodatkowy poziom abstrakcji do tego, co jest (obecnie) raczej prostym interfejsem API. Więc moje pytanie brzmi, kiedy programista powinien wybrać AtomPub jako swoją reprezentację - jeśli w ogóle? A jeśli nie, jakie jest obecnie zalecane podejście?


title: Powody, dla których warto korzystać z kontroli wersji

text: > **Możliwy duplikat:** > Jestem maniakiem Subversion, dlaczego powinienem brać pod uwagę Mercurial lub > Git lub jakikolwiek inny DVCS? > Jaka jest wartość korzystania z kontroli wersji? Jestem względnym noobem w programowaniu i nie zamierzam w najbliższym czasie tworzyć super dobrego oprogramowania ani nawet programować profesjonalnie. Czy w tej sytuacji naprawdę jest jakiś powód, aby uczyć się git, subversion lub jakichkolwiek innych systemów kontroli wersji?


title: Jaka jest wartość korzystania z kontroli wersji?

text: Jestem nowy w kontroli wersji (obecnie używam SVN), ale nie rozumiem, jak to pomaga programistom. Co robi kontrola wersji, co czyni ją użyteczną w środowisku programistycznym?


title: Wykorzystanie Test-Driven Development w projektach innych niż greenfield?

text: Oto pytanie do Ciebie, po przeczytaniu kilku świetnych odpowiedzi na pytania, takie jak „Rozwój oparty na testach – Przekonaj mnie”. Więc moje pytanie brzmi: ** „Czy można efektywnie wykorzystać programowanie sterowane testami w projektach innych niż Greenfield?”**. Obecne elementy TDD? I problemy, z którymi się potem borykali._


title: Odpowiednik MASS dla kompilatorów i architektur Intel

text: Szukałem alternatywy Intela dla bibliotek MASS IBM (Mathematical Acceleration Subsystem). Wiem, że Intel implementuje biblioteki MKL, ale nie wiem, czy jest w nim jakaś konkretna biblioteka akceleracji matematycznej.


title: Jak uzyskać spójność w kodzie źródłowym / interfejsie użytkownika bez tłumienia kreatywności programisty?

text: Mamy mały zespół (2-3) programistów piszących program z dużą ilością formularzy i okien dialogowych. Mamy problem, w którym nie możemy zachować spójności w tym, co piszemy lub jak to piszemy. Ostatnim problemem, który zauważyłem, jest to, że mamy wiele miejsc, w których mamy zakres dat i używamy wszelkiego rodzaju sformułowań, aby wskazać ten zakres, czy jest to początek/koniec, od/do lub „między **_ a _* * ”. Drugą stroną tego jest to, że jeden z programistów może wymyślić lepszy sposób na zrobienie czegoś (na przykład inicjowanie stanu pola wyboru z pliku ustawień). A potem będziemy mieli wszystkie „stare” rzeczy napisane w stary/zły sposób i nowe rzeczy napisane lepszą metodą. Staram się być cały czas czujny w pierwszej kolejności, ale wydaje mi się, że zawsze znajduję nowe porażki. Drugi stwarza ogromne obciążenie, jeśli zamierzamy wrócić i naprawić wszystkie stare rzeczy, gdy tylko wymyślimy nieco lepszy sposób na zrobienie czegoś. Albo to, albo ignorujemy wszystkie stare rzeczy, dopóki coś się nie zepsuje, a wtedy nie mamy pojęcia, co do cholery robi oprogramowanie, ponieważ jest napisane zupełnie inaczej niż to, co piszemy obecnie. I ostatnia rzecz, jeśli zrzucimy ciężar „napraw to wszędzie teraz, gdy już go znalazłeś” na programistę, który wymyśli lepsze rozwiązanie, jego samopokonanie, ponieważ jest to świetne, to lepszy sposób, aby to sprawdzić błąd, teraz napraw go wszędzie w kodzie. Szefowie nie wydają się nigdy dbać o jakość kodu, właśnie wtedy, gdy będziemy mogli wydać następną wersję (ale to inna dyskusja).


title: Jaki jest najlepszy sposób, aby odgórny programista proceduralny nauczył się OOP?

text: Jestem staromodnym programistą procedur odgórnych. Zacząłem od Turbo Pascala w środowisku DOS. Za każdym razem, gdy próbuję samodzielnie nauczyć się OOP, potykam się. Staram się, aby OOP w jakiś sposób pasowało do mojego odgórnego sposobu myślenia. To bardzo frustrujące, wydaje mi się, że mam blokadę psychiczną. Jaki jest najlepszy sposób dla kogoś takiego jak ja, aby nauczyć się OOP?


title: Jak programiści znajdują czas, aby być na bieżąco z najnowszymi technologiami?

text: Byłem niezależnym twórcą stron internetowych do około 2004 roku, kiedy zacząłem podążać ścieżką zarządzania, ale postanowiłem spróbować ponownie wrócić do programowania (w szczególności aplikacji internetowych / mobilnych aplikacji internetowych JavaScript i HTML5) i naprawdę mam wrażenie, że jestem naprawdę dobry w tym i podobnym szybko zmieniającym się technologiom należy poświęcić stałą ilość czasu, aby zainwestować w doskonalenie istniejących umiejętności oprócz uczenia się nowych umiejętności. Rozumiem, że teraz, odkąd wracam do rzeczy, jest dość stroma krzywa uczenia się, ale widząc, jak wielu dobrych facetów tam jest – jedynym sposobem, w jaki widzę, aby się tam dostać, jest poświęcenie dużej ilości czasu. Dla tych, którzy pracują jako pełnoetatowi programiści, staram się zrozumieć to - w większości dni, ile czasu spędza się w biurze na szlifowaniu kodu w porównaniu z nauką/badaniami. Mógłbym z łatwością spędzać 2-4 godziny dziennie, opracowując najlepsze sposoby robienia rzeczy. Czy większość dobrych programistów zatrudnionych na pełny etat poświęca wiele godzin poza pracą na doskonalenie swoich umiejętności? A może zupełnie źle na to patrzę?