title: Kierownik Projektu, który chce zawrzeć oszacowanie czasu z podpisaną umową

text: W poprzednim zatrudnieniu kierownik projektu (PM) nie był zadowolony z czasu dostarczenia kodu w projekcie, w którym byłem. Mój kierownik projektu powiedział mi, że kierownik projektu rozważa możliwość _podpisania przeze mnie umowy w celu zablokowania moich szacunków czasowych_, które podawałem na zadania i terminy dostaw. Sytuacja w projekcie była taka, że pracowaliśmy z nowymi technologiami, bazą kodu, standardami kodowania i bardzo podatnymi na zmiany wymaganiami. Uczyłem się nowych rzeczy i stosowałem je najlepiej, jak potrafiłem, zgodnie z ciągle zmieniającymi się wymaganiami. Wymagania we wszystkich iteracjach wzrosły 2-3 razy, a moje oszacowanie do ukończenia wzrosło około 5-8 razy. Jedyne, co się nie zmieniło, to szacunki i terminy dostaw. Tak, w końcu przegapiłem większość terminów. Pracowałem nad bardzo nowymi technologiami, w których nikt inny z całego zespołu programistów nie mógł naprawdę pomóc, ponieważ nie byłby z nimi zaznajomiony. Przynajmniej niełatwo. Wydawało mi się wtedy, że premier chciał, żeby jego liczby się zsumowały – i dlatego chciał, żebym podpisał umowę, aby „zapewnić”, że zawsze dostarczę działający kod na czas. Przypuszczam, że z podpisaną umową, PM mógłby wykorzystać to przeciwko mnie, gdybym nie mógł dostarczyć na czas. Wierzę, że to, co wydarzyło się później, było takie, że inni kierownicy projektów i/lub liderzy projektów bronili mnie i nie dopuścili do tego. Moje pytanie brzmi: **czy powinno to wywołać ostrzeżenie w związku z menedżerem?** Czy powszechną praktyką jest ustalanie przez menedżera szacunkowego czasu pracy programisty z podpisaną umową? Lub w tym przypadku spróbuj. _Proszę zauważyć, że byłem pełnoetatowym pracownikiem, a nie niezależnym konsultantem._ **Aktualizacja** : Chcę dodać, że co tydzień podawałem nowe szacunki, ale wygląda na to, że _oryginalne_ szacunki i terminy dostaw były tym, na czym fiksował PM .


title: Kontrole stron trzecich. Czy doświadczenie w korzystaniu z nich będzie miało znaczenie podczas szukania pracy?

text: W naszym rozwoju korzystamy z wielu kontroli stron trzecich. Pomagają nam rozwijać się szybciej, pomagają nam generować dobrze wyglądające raporty itp. Ale czy naprawdę pomagają nam znaleźć dobrą pracę gdzie indziej? Czy powinniśmy wyjaśnić o narzędziach stron trzecich, których użyliśmy w naszym CV?


title: Iteracyjna alternatywa dla dekoratorów?

text: Więc dekoratorzy rekurencyjnie zawijają klasę bazową, prawda? I mieć pojedynczy obiekt superklasy, który znajduje się w klasie „podstawowej”. Czy nie moglibyście po prostu dodać ArryList/LinkedList dekoracji w klasie „core” i osiągnąć to samo? Pozwoliłoby to uniknąć rekurencji (która jest kosztowna), ale pozwoliłoby na dynamiczne zachowanie polegające na możliwości „ozdabiania” klas. Czy to inny wzór, alternatywna wersja dekoratorów, czy coś innego? Np.: Decorator klasa napojów getDescription(){blah} cost(); HouseBlend dziedziczy po napoju cost(){2.99} CondimentDecorator dziedziczy po napoju napoju bev; cost(){.19 + bev.cost} getDescription{blah} VS Inne? Klasa napoju getDescription(){blah} cost(); HouseBlend dziedziczy z Beverage List<Beverage> condiments cost(){2.99 + iteracyjne condiments} CondimentDecorator dziedziczy z Beverage cost(){blah} getDescription{blah} Wygląda na to, że dekorator może być trochę bardziej elastyczny, ale inna wersja by na to pozwalała do śledzenia konkretnych wystąpień przedmiotów. Ponadto, jeśli masz espresso, możesz mieć podwójne ujęcie, gdzie z czystym dekoratorem byłoby trudne.


title: Najlepsze rozwiązania dotyczące wygaśnięcia tokenów w usłudze tokenu zabezpieczającego (STS)

text: Podczas tworzenia usługi tokenu zabezpieczającego (STS) dla modelu zabezpieczeń opartego na oświadczeniach wydaje się właściwe, aby tokeny były generowane w taki sposób, że wygasają po pewnym czasie, jak sugerowano tutaj. W związku z tą koncepcją mam kilka konkretnych pytań, ale czekam na wszelkie uwagi dotyczące najlepszych praktyk w tym obszarze. * Jakie są zalecane wartości długości limitu czasu i/lub co należy wziąć pod uwagę przy określaniu tego? * Jeśli użytkownik jest aktywny dłużej niż typowy okres wygaśnięcia, jak to zrobić, aby użytkownik nie musiał ponownie się uwierzytelniać w trakcie sesji? * Czy istnieje elegancki sposób zaprojektowania usługi do wykonywania działań wsadowych „w imieniu” innego użytkownika przy użyciu tokena? tzn. późniejsze wykorzystanie tokena mogło spowodować jego wygaśnięcie.


title: jaka jest różnica między chronioną metodą statyczną a chronioną metodą?

text: Jaka jest różnica między metodą `protected static` a `protected`? Na przykład `demo` i `demo2` w odpowiednio `Data2` Data.java: package pack1; importuj pakiet2.*; public class Data extends Data2 { public static void main(String args[]){ System.out.println("Z głównej klasy"); Dane d=nowa Dane(); d.pierwszy(); } najpierw void(){ Dane2 d2=nowa Dane2(); d2.demo(); d2.demo2(); } } Data2.java: pakiet pack2; public class Data2 { protected static void demo(){ System.out.println("W metodzie demo"); } protected void demo2(){ System.out.println("W metodzie demo2"); } }


title: Kto odpowiada za wady znalezione podczas rozwoju?

text: Kiedy kontrola jakości znajduje błąd, taki jak „uszkodzony projekt w programowaniu internetowym”, czy nazywasz go błędem, a poprawki „łatami”? (Załóżmy, że to wszystko jest przed dostawą.) Miałem wrażenie, że poprawki błędów znalezionych po dostawie nazywano łatami. Deweloperzy nie dodają błędów celowo i obowiązkiem kontroli jakości jest znalezienie błędów. Jasne, zgadzam się, że programista powinien być w stanie rozwiązać ten błąd, **ale czy należy winić programistę za te błędy?**


title: Jaką konfigurowalność dać użytkownikom w zakresie współbieżności?

text: To pytanie jest zawężeniem tych powiązanych pytań: * Ile wysiłku powinniśmy poświęcić na programowanie dla wielu rdzeni? * Współbieżność: Jak podchodzisz do projektowania i debugowania implementacji? Biorąc pod uwagę, że komputery każdego użytkownika mogą mieć inną charakterystykę wydajności w odniesieniu do obliczeń, pamięci, przepustowości we/wy dysku i przepustowości we/wy sieci oraz że trudno jest zaimplementować w oprogramowaniu zautomatyzowany system samodostrajania, zakres konfigurowalności powinien dajemy użytkownikom końcowym, aby mogli znaleźć sposoby (metodą prób i błędów?) na poprawę wydajności naszego oprogramowania? Jeśli damy użytkownikom możliwość zmiany tych ustawień, w jaki sposób przekażemy użytkownikom wizualną informację zwrotną, aby mogli mierzyć zmiany wydajności?


title: Czy brakuje mi wzoru?

text: Mam klasę, która jest singletonem i poza singletonem są właściwości, które przechowują wystąpienia wszystkich liczników wydajności w mojej aplikacji. public interface IPerformanceCounters { IPerformanceCounter AccountServiceCallRate { get; } IPPerformanceCounterKontoServiceCallDuration { get; } Powyżej znajduje się niekompletny fragment interfejsu dla klasy „PerformanceCounters”, która jest singletonem. Naprawdę nie podoba mi się liczba mnoga w nazwie i pomyślałem o zmianie jej na „PerformanceCounterCollection”, ale przestałem, ponieważ tak naprawdę nie jest to kolekcja. Myślałem też o „PerformanceCounterFactory”, ale tak naprawdę to też jest fabryka. Po porażce z tymi dwoma nazwami i kilkoma innymi, o których nie warto wspominać, pomyślałem, że może brakuje mi wzoru. Czy istnieje nazwa, która ma sens lub zmiana, którą mógłbym wprowadzić w kierunku znormalizowanego wzorca, który pomógłby mi nadać temu obiektowi trochę połysku i pozbyć się nazwy w liczbie mnogiej? Rozumiem, że mogę tu dzielić włos na czworo, ale dlatego pomyślałem, że giełda "Programistów" jest miejscem na tego typu rzeczy. Jeśli tak nie jest... przepraszam i nie popełnię tego błędu ponownie. Dziękuję!


title: Scrum ma określone sposoby testowania oprogramowania?

text: Czytając Scrum Guide, jako oficjalny tekst Scrum, dowiaduję się, że nie ma konkretnego rozwiązania, które zapewniałoby testowanie oprogramowania w scrumie. (jedyna wskazówka znajduje się na stronie 15) Nie wiem, czy scrum jest uważany za metodologię tworzenia oprogramowania, czy nie? Jeśli tak nie jest, to dlaczego niektóre z jego praktyk sprzeciwiają się _programowaniu ekstremalnemu_? (Wiem, że w przewodniku po scrum autor zauważa, że scrum jest frameworkiem, a nie metodologią, ale nadal nie jestem w tym do końca jasny) A co więcej, nie jestem pewien, czy jest jakiś inny ważny podręcznik, który ja Brakuje mi do tej pory o scrum. Potrzebuję, aby były oficjalne lub miały dużą akceptację społeczną.


title: Czy istnieje dobry wzorzec projektowy dla tej klasy obsługi wiadomości?

text: Czy jest do tego dobry wzorzec projektowy? Chcę utworzyć klasę wiadomości. Klasa zostanie przekazana: typ wiadomości (np. rejestracja, potwierdzenie rejestracji, przypomnienie hasła itp.) id klienta Klasa musi następnie wyszukać preferencje dotyczące wiadomości klienta w bazie danych (czy chce się komunikować przez e-mail, sms lub jedno i drugie ) Następnie w zależności od preferencji klienta sformatuje wiadomość na medium (krótka wersja na sms, długa na e-mail) i wyśle ją przez API naszego dostawcy poczty lub sms. Ponieważ chcemy mieć możliwość zmiany dostawców poczty i sms, jeśli zajdzie taka potrzeba, zastanawiałem się, czy Wzorzec Polecenia byłby dobrym wyborem.


title: Która książka wzorców dla rozwoju iOS zawiera te konkretne informacje?

text: Przeczytałem kilka książek na temat rozwoju iOS i Objective-C, jednak wiele z nich uczy, jak pracować z interfejsami i wszystkie zawierają model wewnątrz kontrolera widoku, tj. Widok oparty na `UITableViewController` będzie miał po prostu `NSArray ` jak to model. Interesuje mnie, jakie są najlepsze praktyki projektowania struktury aplikacji. W szczególności interesują mnie najlepsze praktyki w następujących kwestiach: * Jak oddzielić model od kontrolera widoku. Myślę, że wiem, jak to zrobić, po prostu zastępując przykład stylu `NSArray` określonym obiektem modelu, jednak to, czego nie wiem, to ostrzeganie widoku, gdy model się zmieni. Na przykład w .NET rozwiązałbym to, dostosowując się do `INotifyPropertyChanged` i wiązania danych, podobnie w Javie użyłbym `PropertyChangeListener`. * Jak utworzyć model usługi dla moich obiektów domeny. Na przykład chcę nauczyć się najlepszego sposobu tworzenia usługi dla hipotetycznego obiektu `Widget` do zarządzania wewnętrzną bazą danych, a także usług do komunikacji ze zdalnymi punktami końcowymi. Muszę nauczyć się najlepszych sposobów, aby to zrobić w taki sposób, aby komponenty interfejsu mogły subskrybować zdarzenia takie jak `widgetUpdated`. Usługi te powinny być klasami pojedynczymi i pewnymi zależnościami wstrzykiwanymi do obiektów modelu/kontrolera. Książki, które do tej pory przeczytałem to: * Programowanie w Objective-C (4th Edition) * Początek rozwoju iOS 5: Odkrywanie iOS SDK * Książka kucharska dla programistów iOS 5: Rozszerzona edycja elektroniczna: Podstawy i zaawansowane przepisy dla programistów iOS * Cel nauki -C na Macu: Dla OS X i iOS kupiłem również następujące zaktualizowane książki, ale jeszcze ich nie przeczytałem. * The Core iOS 6 Developer's Cookbook (4. edycja * Programowanie w Objective-C (5. edycja) Pochodzę z Javy i C# z 15-letnim doświadczeniem, rozumiem, że wiele sposobów, w jakie robię rzeczy w tych językach, może nie pasować do sposobu tworzenia aplikacji ObjC.Czy ktoś byłby w stanie dostarczyć mi _the_ książki na ten temat zawierającej ten konkretny temat?


title: Przydatne wzorce projektowe do pracy z FragmentManager na Androidzie

text: Pracując z fragmentami korzystałem z klasy złożonej ze statycznych metod, które definiują akcje na fragmentach. Dla dowolnego projektu mógłbym mieć klasę o nazwie `FragmentActions`, która zawiera metody podobne do poniższych: public static void showDeviceFragment(FragmentManager man){ String tag = AllDevicesFragment.getFragmentTag(); Fragment AllDevicesFragment = (AllDevicesFragment)man.findFragmentByTag(tag); if(fragment == null){ fragment = new AllDevicesFragment(); } FragmentTransaction t = man.beginTransaction(); t.add(R.id.main_frame, fragment, tag); t.zatwierdź(); } Zazwyczaj mam jedną metodę na ekran aplikacji. Robię coś takiego, gdy pracuję z małymi lokalnymi bazami danych (zwykle SQLite), więc zastosowałem to do fragmentów, które wydają się mieć podobny przepływ pracy; Jednak nie jestem z nim żonaty. Jak zorganizowałeś swoje aplikacje pod kątem interfejsu API fragmentów i jakie (jeśli w ogóle) wzorce projektowe Twoim zdaniem mają to zastosowanie?


title: Teoretyczne podstawy rozwoju jądra (Linux)

text: KernelDevViewpoint (pozornie poważne źródło) sprawia, że tworzenie jądra wygląda jak dostępna grafika. Według nich: > Wbrew powszechnemu przekonaniu, twórcy jądra rzadko muszą znać matematykę > na poziomie rachunku różniczkowego. Musisz być dobry w podstawach arytmetyki i musisz znać algebrę Boole'a, aby pracować ze sterownikami urządzeń. > > Jedną z umiejętności, której uczy się wielu programistów jądra w trakcie pracy, jest umiejętność > budowania maszyn stanowych w twojej głowie nad tym, co robi kod. (...) oraz > Umiejętności techniczne programistów jądra obejmują doświadczenie z językiem programowania C > oraz znajomość Git. Czy to podstawa rozwoju jądra? Podstawy arytmetyki, algebra Boole'a, C i Git? Oczywiście nie spodziewam się, że przeczytam „C w dziesięć dni” (lub jakąkolwiek podobną książkę) i zacznę przyczyniać się do rozwoju jądra Linuksa, jednak zastanawiam się, jak trudno będzie zdobyć odpowiednie umiejętności?


title: Kiedy należy przyciąć dane wejściowe?

text: Jestem praktykantem, który uczę się ton branży poza środowiskiem akademickim. Jedną z rzeczy, o których myślałem dzisiaj, było przycinanie danych wejściowych. Z jednej strony nie chcę, aby użytkownik/implementator stale otrzymywał nieoczekiwane wyniki, ponieważ ich dane wejściowe miały zbyt wiele spacji, dlatego muszę stale przycinać dane wejściowe użytkownika po każdym wywołaniu funkcji. Ale jednocześnie, jeśli tworzę bibliotekę ~~API~~ do użytku wewnętrznego tutaj w biurze, ciągi/prowadzące białe znaki mogą mieć kluczowe znaczenie dla wyników. Są też przypadki, w których nie jestem pewien, czy białe znaki będą ważne, czy nie. Dużym problemem dla mnie jest to, że ciągle wywołuję .trim() wszędzie w moim kodzie. Czy ktoś ma jakieś wskazówki/zasady praktyczne lub po prostu myśli, jak radzić sobie w określonych sytuacjach?


title: Dlaczego słowo kluczowe zysku jest używane w połączeniu ze zwrotem i przerwą, a nie samo?

text: W C# można konstruować metody ze zwracanym typem `IEnumerable<T>` i używać `yield return` i `yield break` do kontrolowania przepływu. Oto prosty przykład, który używa obu formantów: public IEnumerable<int> GetEvens(int start, int end) { if(end < start) yield break; if(start & 2 != 0) start++; for(int i = początek; i <= koniec; i+=2) { rentowność i zwrot; } } Moje pytanie brzmi, dlaczego pierwotnie został zaprojektowany tak, aby używał dwóch słów kluczowych z `yield` i nie używał go jak poniżej z pojedynczym `yield` "otrzymując wartość zwracaną": public IEnumerable<int> GetEvens(int start, int koniec) { if (koniec < początek) powrót; // zatrzymaj się całkowicie i nic nie zwróć if(start & 2 != 0) start++; for(int i = początek; i <= koniec; i+=2) { wydajność i; // zwraca aktualną wartość. } } Dla mnie jest to łatwiejsze do odczytania i zrozumienia.


title: Numer wersji jako część nazwy pliku

text: Widzę, że niektóre programy mają numer wersji zawarty jako część nazwy pliku, a inne nie. Jestem bardziej przyzwyczajony do drugiego typu i myślę, że jest bardziej popularny, ale czasami widzę ten pierwszy typ w bibliotekach javascript. Na przykład nazwa pliku jQuery to „jquery-2.1.0.js” zamiast „jquery.js”. Za każdym razem, gdy aktualizuję tego typu pliki, muszę szukać miejsc w innych programach, które ładują te pliki, i zmieniać nazwy plików, do których się odnoszą, oraz ręcznie usuwać starsze wersje tych bibliotek. Jest to dla mnie niewygodne, więc wolę zmienić nazwę pliku, aby wykluczyć numer wersji, i zachować nazwę pliku, aby nie zawierała numeru wersji. Podejrzewam, że te liczby służą do pewnego rodzaju kontroli wersji, ale nie jest jasne, kiedy i jak są używane. * Jakie są zalety i wady dołączania numerów wersji w nazwie pliku? * Czy istnieje de facto konsensus co do tego, które obszary oprogramowania lub języków używają numeru wersji w nazwie pliku, a które nie? Jeśli tak, czy są ku temu jakieś racje?


title: Dlaczego stosują technologie i języki do pracy dla jednej osoby?

text: Zbyt często to widzę. Potrzebują **jednego** faceta, który jest biegły w: 1. Assemblerze 2. C/C++ (sic!) 3. Python 4. Delphi 5. C# 6. PHP 7. SQL 8. Joomla 9. Drupalu ... i wkrótce. Czemu?


title: Jak obecne IDE mogą poprawić środowisko programistyczne? Jakie narzędzia pomocnicze powinny być podstawowe?

text: Nowoczesne IDE nie byłoby traktowane poważnie, gdyby nie miało dobrego edytora z podświetlaniem składni, kompleksowymi ostrzeżeniami i debugerem na poziomie źródła. Istnieje również wiele innych narzędzi/funkcji IDE, które programiści uważają za niezbędne: * Przekształcenia refaktoryzacji * Obsługa testów jednostkowych * Integracja kontroli kodu źródłowego Mimo to nadal istnieje **wiele dobrych narzędzi**, które nie mają takiej ekspozycji i użycia, jak powinny . Na przykład, następujące narzędzia są zwykle drogie lub trudne do znalezienia dla danego języka: * Automatyczne testowanie GUI * Dzielenie programu (np. CodeSurfer - przydatne do znalezienia, które stwierdzenia mogą wpłynąć na inne stwierdzenie) * Pokrycie testu (w zależności od języka, to może być bardzo łatwa do znalezienia lub dość trudna) * Analiza punktów ("Czy naprawdę muszę tworzyć tę listę równolegle, czy kiedykolwiek będzie ona dostępna w jednym wątku?") Częściowo jest to kwestia edukacji i świadomości, częściowo jest to spowodowane tym, że twórcy IDE są często zbyt zajęci wspieraniem następnej wersji języka, aby poświęcić zasoby na rozwój tych dodatkowych narzędzi. _Jakich funkcji brakuje w dzisiejszych środowiskach IDE? Jakie narzędzia drugorzędne powinny być naprawdę podstawowe? Co sprawia, że są tak przydatne?_ To znaczy, jakich funkcji, Twoim zdaniem, używałbyś co miesiąc lub codziennie, gdyby narzędzie było dostępne? Proszę wziąć pod uwagę narzędzia, które istnieją lub powinny istnieć. W przypadku narzędzia, które _powinno_ istnieć, upewnij się, że pomysł jest wykonalny.


title: Kiedy można używać zmiennej globalnej?

text: Ok, więc to jest naprawdę pytanie o diabła. Kiedy zmienne globalne są w porządku, a jeśli nigdy, czego użyjesz jako alternatywy? Ciekawym przypadkiem pobocznym tego pytania, czym różni się publiczne statyczne pole klasy od globalnego?


title: Obowiązki głównego programisty

text: W mojej obecnej pracy (jestem tu od 6 lat). Wiceprezes firmy zdecydował, że chce, abym został głównym programistą. Wierzę, że dzieje się tak, ponieważ mój obecny szef, który jest dyplomantem, został wbity w tę pozycję, a nie jest to coś, co chce robić. Zapytałem go, jakie są obowiązki, a on wspomniał, że będę miał do czynienia z błędami, wymyślaniem szacunków, a także nadal będę zajmował się kodowaniem. Teraz jestem kolejnym starszym programistą i juniorem. Młodsi i starsi nie wiedzą prawie tyle co ja o specyficznych komponentach firmy i zasadach biznesowych. Nie widzę siebie wykonującego jedno i drugie, szczerze mówiąc brzmi to jak dwie oddzielne prace. Błędy wymagają czasu na zbadanie i ustalenie poprawności itp. Pisanie e-maili tam i z powrotem do kierowników projektów. A ja nadal muszę być odpowiedzialny za kodowanie?? Moje pytanie brzmi, czy główni programiści zazwyczaj zarządzają zadaniami/ludźmi ORAZ także kodem?


title: Kiedy porównujesz pływaki, jak nazywasz próg różnicy?

text: Porównuję teraz floaty w Javie i najprostsza formuła to: Math.abs(a - b) < PRÓG Kiedy nazywasz zmienną dla progu różnicy, czy powinieneś nazwać ją delta czy epsilon? W szczególności, który z dwóch jest poprawnym terminem dla najmniejszej wartości, jaką może reprezentować liczba zmiennoprzecinkowa? Czy termin jest specyficzny dla języka programowania, czy jest uniwersalny w różnych językach?


title: Wymiana warstwy dao

text: Zajmuję się tworzeniem serii webservices (w oparciu o spring i spring mvc). Po raz pierwszy w mojej karierze dewelopera planuję w przyszłości zastąpić warstwę dao (zawsze o tym wspominałem, ale nigdy nie musiałem tego robić). Obecnie używam adnotacji wiosennych, więc mógłbym po prostu zmienić nazwę kwalifikatora wstrzykiwanego dao w każdym miejscu, w którym jest używany; czy istnieje lepszy (globalny) mechanizm, którego mógłbym użyć? Obecnie mój kod wygląda tak (deklarując dao): @Repository("regionDao") public class RegionDao implementuje IRegionDao i wstrzykuje go: @Resource(name = "regionDao") IRegionDao regionDao; Ale wejście do każdej klasy usług i zmiana nazwy kwalifikatora wydaje się dość długa, jest ich lepszym sposobem. Zasadniczo w przyszłości chcę przełączyć przełącznik, a każde odwołanie do _regionDao_ będzie wskazywać na _newRegionDao_ i tak dalej w przypadku innych dao. Preferowane jest rozwiązanie wykorzystujące adnotacje – nie z innego powodu niż subiektywnie je preferuję. Ale zdaję sobie sprawę, że może to być przypadek konfiguracji opartej na xml?


title: Czy kosztorysy dotyczące koszulek to dobry sposób na wstępne oszacowanie?

text: Czytałem artykuły z bardzo sprzecznymi argumentami na temat szacunków dotyczących koszulek. Żaden z artykułów nie wydawał się aż tak wiarygodny, więc pomyślałem, że poruszę to tutaj. Czy kosztorys koszulek to dobry pomysł? Dla tych, którzy o tym nie słyszeli: szacunki dotyczące koszulek to praktyka podawania bardzo niejasnych i wysokich szacunków, gdy podano niejasne, wysokie wymagania i brak zasobów do oszacowania. Bazują one na rozmiarach t-shirtów i jako takie są podzielone na: XS, S, M, L, XL itd. W zasadzie nie widzę w nich żadnego problemu. Gromadzenie wymagań, badanie wymagań i właściwe oszacowanie wymaga czasu. W większości przypadków „klienci” mogą zażądać przedwczesnych szacunków, a możliwość korzystania z szacunków dotyczących koszulek pozwala na udzielanie odpowiedzi, które są oczywiście zbyt niejasne i nie można ich utrzymać w żadnym standardzie. W tym czasie to satysfakcjonuje „klientów”, ponieważ mają przynajmniej coś, na czym mogą oprzeć swoje myślenie. I odwrotnie, jeśli miałbyś dać temu samemu klientowi odpowiedź 5000 godzin, ale podałeś zastrzeżenie, że to tylko zgadywanie i umieściłeś to pogrubionym, czerwonym i migającym tekstem. Istnieje ryzyko, że klient „zapomni” o tym, a następnie zdenerwuje się, gdy te godziny zmienią się drastycznie po dokonaniu właściwego oszacowania.


title: Czy kod GPL v2 może łączyć się z biblioteką LGPL v3?

text: Jeśli napiszę bibliotekę wydaną na warunkach licencji GPL v2 (lub wyższej, opcjonalnie); niech ta biblioteka _zależy_ od innej biblioteki wydanej na licencji LGPL v3 (lub wyższej), bez niejawnego egzekwowania GPL v3. Oznacza to, że łączę się wyłącznie z tą biblioteką. Czytając to i to rozumiem, że LGPL v3 i GPL v2 nie są "kompatybilne". Ale nie jest dla mnie jasne, czy kompatybilność oznacza tylko mieszanie kodu, czy też obejmuje linkowanie (bez modyfikowania biblioteki objętej LGPL).


title: Jak mogę zaangażować się w społeczności programistów w mojej okolicy?

text: Mieszkam w Manchesterze w Wielkiej Brytanii i chociaż w Londynie jest wiele społeczności programistów (regularne imprezy, spotkania itp.), „na północy” nie ma ich zbyt wiele. Znam kilka (NxtGenUg i ManchesterGeekNights), ale musi być ich więcej. Jakie są najlepsze sposoby, aby się o nich dowiedzieć? W jaki sposób ludzie zaangażowali się w tamtejsze społeczności?


title: Jak przekonać kierownictwo, że konkretne szkolenie produktowe jest ważne dla zapewnienia jakości?

text: Prowadzę 10-osobowy zespół QA. otrzymaliśmy prośbę o szkolenie z narzędzia ETL dataware do obsługi QA, wsparcia i rozwoju. Jednak kierownictwo nie uważa, że ważne jest, aby QA było zaangażowane w takie szkolenie, ponieważ to zespół wsparcia i rozwoju będzie zaangażowany w opracowywanie lub naprawianie problemów w produkcie. Jak przekonać kierownictwo, że to szkolenie jest bardzo ważne z punktu widzenia QA, ponieważ to zespół znajdzie błędy i obniży koszty utrzymania?


title: Czy to dobry pomysł, aby zainstalować Mercurial na swoim serwerze i hg pull, aby wdrożyć?

text: Właśnie rozpocząłem nową pracę w zeszłym miesiącu i wygląda na to, że NIE mają kontroli źródeł kodu. Polegają na kopiach zapasowych, które ich dostawca hostingu bierze dla nich. Po krótkiej rozmowie przekonałem szefa, że zdecydowanie powinniśmy używać kontroli źródeł, a po krótkim seminarium na ten temat cały zespół jest na pokładzie; kochali Mercurial. Tak więc teraz pracujemy w ten sposób: º----------BitBucket º---------/ º--------/ Ja i trzej inni programiści ` hg pull` z BitBucket, wprowadź nasze zmiany, a następnie `hg push` do BitBucket. Teraz w celu wdrożenia ktoś musiałby przesłać najnowsze pliki na serwer produkcyjny. Myślałem o zainstalowaniu Mercurial na naszym serwerze i użyciu `hg clone` (później `hg pull`), aby zapewnić aktualność wersji produkcyjnych. º---push->-----BitBucket----<-pull-----º (serwer produkcyjny) º---push->----/ º---push->- --/ Czy to dobry pomysł? Jakieś potencjalne pułapki, których mogę nie widzieć? Czy ktoś tutaj zrobił coś podobnego? Jak wdrożyć dużą aplikację frameworka PHP (używamy Moodle)?


title: Czy najlepiej jest spróbować pracować w firmie, w której Twoje oprogramowanie bezpośrednio przysparza firmie pieniędzy?

text: Powiedziano mi kiedyś, że najlepszym miejscem do pracy jako programista jest firma, w której oprogramowanie, które piszesz, jest tym, co przynosi firmie pieniądze, niezależnie od tego, czy jest to produkcja oprogramowania, czy usługi programistyczne, takie jak doradztwo. Jest to przeciwieństwo firmy, w której oprogramowanie, które piszesz, służy tylko do wspierania innej części firmy, która zarabia pieniądze, takiej jak produkcja lub finanse. Wiem, że zawsze są wyjątki, ale ogólnie, czy pracownicy są lepiej traktowani, jeśli są na pierwszej linii generowania zysków, czy nie są tylko kolejnym centrum kosztów? **Miejsce kosztów (n.)** — Centrum kosztów jest częścią organizacji, która nie generuje bezpośrednich zysków i dodaje do kosztów prowadzenia firmy. Przykładami centrów kosztów są działy badań i rozwoju, działy marketingu, help deski i centra obsługi klienta/kontakty.


title: Korzystanie z UML i przypadków użycia w projektowaniu gier

text: W przypadku użycia musisz wykonać wszystkie czynności, które użytkownik może wykonać. A następnie na diagramie aktywności muszę wyjaśnić Przypadki użycia, pokazać kroki, które obsługuje. Ale jeśli wszystko się zgadza, gdzie mam pokazać wrogom? Na przykład: Generuj ścieżkę, chód itp. Ponieważ nie jest kontrolowany przez gracza, gracz nie ma prawie żadnego wpływu na wroga.


title: Najlepsze praktyki git dla projektu Android z wieloma zestawami zasobów

text: Mam komercyjny projekt Androida, dla którego stworzyłem wersję specyficzną dla klienta (głównie poprawki interfejsu użytkownika). Ponieważ większość poprawek znajduje się w folderze res/ w plikach XML, mamy obecnie zmiany w gałęzi, ale naprawdę nie chcę przenosić zmian między gałęziami w nieskończoność. Jestem ciekaw, czy ktoś ma jakieś strategie kontroli źródła, które sprawią, że zarządzanie wieloma wersjami aplikacji na Androida będzie tak bezbolesne, jak to tylko możliwe. Nie jestem też pewien, czy to należy tutaj, czy StackOverflow. Zapraszam do przejścia tam, jeśli źle zgadłem.


title: Co powinienem wiedzieć przed założeniem firmy programistycznej?

text: Widząc, że tak wielu moich znajomych jest bezrobotnych, niektórzy z moich znajomych i ja planujemy stworzyć małą firmę programistyczną. Jakie są podstawowe rzeczy, które powinniśmy wiedzieć i robić? Czy są rzeczy specyficzne dla prowadzenia firmy programistycznej, o których powinniśmy być świadomi?


title: Czy istnieje konkretny termin określający zmienną w konstrukcji „foreach”?

text: Czy zmienna używana do iteracji w pętli „foreach” ma bardziej konkretny termin niż po prostu „zmienna foreach”? Zwłaszcza po to, by odróżnić ją od zmiennej kolekcji? Np. `pozycja` in `foreach (pozycja w kolekcji)` Edycja: Zasugerowano wariant pętli (wiki): > W informatyce wariant pętli jest funkcją matematyczną zdefiniowaną w > przestrzeni stanów programu komputerowego, której wartość jest monotonicznie zmniejszana > w odniesieniu do (ścisłej) dobrze uzasadnionej relacji przez iterację pętli while > w pewnych niezmiennych warunkach, zapewniając w ten sposób jej zakończenie. Dla mnie brzmi to podobnie do „zmiennej iteracji”. Czy to ściśle rzecz biorąc słuszne? Założyłbym, że „wariant pętli” odnosi się do wewnętrznej liczby całkowitej (lub podobnej), której moduł wyliczający „collection” używa do swojego stanu wewnętrznego, a nie do zmiennej, która jest ustawiona na wartość „Current” w każdej iteracji. Ponadto enumerator połączonej listy lub fikcyjny enumerator, który nigdy się nie kończy, nie ma monotonicznie malejących zmiennych, podczas gdy w tym samym czasie pętla `foreach` ma swoją zmienną `item`. Edycja 2: Motywacją tego pytania jest znalezienie opisowej nazwy parametru w API emitującym kod bajtowy. Ten parametr jest liczbą, która odnosi się do lokalnego, który zostanie ustawiony w każdej wygenerowanej iteracji foreach. Nie jest to „iteracjaLocal”, która byłaby myląca. Najbardziej przydatną nazwą może być `bieżącyLokalny`.


title: Pozyskiwanie zdarzeń dla aplikacji korporacyjnych

text: Czy w przypadku dużych aplikacji korporacyjnych możliwe jest przechowywanie informacji a la event sourcing? Wiem, że lokad używa go od dłuższego czasu, ale nie są w biznesie ERP Szukam tego rozwiązania, bo wydaje się bardzo interesujące.


title: Jak przekonać pracodawcę do przejścia na VB.Net w celu nowego rozwoju?

text: Trochę historii: Przez ostatnie pół roku pracowałem w małej firmie, w której pracowało tylko trzech programistów, w tym mój pracodawca. Firma utrzymuje dwa programy napisane w VB6. Do jednego z nich przydzielono mnie jako głównego programistę. W ciągu ostatnich sześciu miesięcy zajmowałem się konserwacją i wyszukiwaniem błędów, ale stworzyłem też kilka nowych funkcji. W grudniu miałam rozmowę kwalifikacyjną, która była korzystna i moja umowa została przedłużona. Jestem bardzo zadowolony z tego przebiegu wydarzeń, ponieważ certyfikat .Net uzyskałem dopiero rok temu i nie mam żadnych innych kwalifikacji (w dziedzinie kodowania). Uważam, że o ile migracja istniejącego programu do .Net jest wskazana, to najważniejsze jest, aby od teraz nowa funkcjonalność była pisana w bibliotekach klas VB.Net. Po kilku badaniach dowiedziałem się, jak łatwo można zintegrować biblioteki klas .Net ze środowiskiem programistycznym VB6 i jak łatwo dodać ich funkcjonalność do istniejących instalacji za pomocą manifestów aplikacji. Zdecydowałem więc, że nadszedł moment, aby zakasać rękawy i spróbować przekonać mojego pracodawcę, że powinien pozwolić mi na tworzenie nowego kodu w VB.Net, używając VB6 tylko do konserwacji. Dogadujemy się całkiem nieźle, ale myślę, że będę potrzebować całej amunicji, jaką zdołam, żeby go przekonać. Wszelkie argumenty, najlepiej poparte, są mile widziane, nawet te, które mają mnie odwieść ;-)


title: Rozczarowany zwinnością; jak przygotowujesz się do życia po wydaniu 1.1?

text: Moja firma pracuje pełną parą dzięki zwinnemu procesowi, z wieloma zwinnymi projektami w pracy. Pierwszy zespół zwinny, weryfikujący koncepcję, przeprowadził produkt przez wydanie i pierwsze wydanie postprodukcyjne. Po tych udanych wysiłkach zespół został szybko rozwiązany i wysłany, by pomagać innym projektom w ich zwinny sposób. Moje rozczarowanie agile pochodzi z trzeciego i późniejszego etapu cyklu życia oprogramowania. Agile jest dobry w przyciąganiu ekspertów i budowania, ekscytowaniu się projektem, ale jak zamknąć projekt i przenieść go na etap, na którym obecni klienci muszą być zadowoleni, aby nadal płacić za całą tę wczesną zwinną zabawę? Jeśli chcesz, impreza się skończyła, a to światło na dokumentacji, nie projektuj jej, dopóki jej nie potrzebujesz i ścigaj się do następnego sprintu, pozostawia niewiele dokumentacji, mało wizji i słabe zapisy, dlaczego podjęto decyzje projektowe. Ten etap życia ma również niewielkie zainteresowanie początkowymi programistami zwinnymi, ponieważ skończyli już z tym projektem i szukają nowych ekscytujących zespołów na początek. Rozumiem i przeżyłem kaskadę problemów związanych z planowaniem długoterminowym, niedotrzymaniem harmonogramów i nieaktualnymi wymaganiami, ale w części, która była użyteczna i zaakceptowana przez klienta, istnieją informacje i rozproszona wiedza o tym, dlaczego podjęto decyzje , jakie kroki zostały podjęte, a na końcu coś bardziej przydatnego. Zasadniczo, co musi robić zwinny zespół, co musi zrobić, co musi być możliwe do dostarczenia, aby projekt zwinny odniósł sukces, a sukces definiowany jest jako zrównoważony, możliwy do utrzymania i, miejmy nadzieję, produkt generujący przychody? Jeśli zwinnego oprogramowania, które tworzymy, nie da się utrzymać, za kilka lat agile będzie tylko kolejną złamaną obietnicą, za którą menedżerowie biznesowi nie zapłacą, umożliwiając im powrót do starego, mikro-zarządzanego procesu kaskadowego.


title: Narzędzia wspomagające dokumentowanie wymagań API dla Usługi REST

text: Musimy zdefiniować nasze wymagania dotyczące REST API. Jakie są narzędzia, które pomogą w stworzeniu dokumentu, który będzie w pełni opisywał serwis, tak aby mógł być stworzony przez inny podmiot?


title: Czy tabele bazy danych muszą mieć identyfikatory?

text: Czy pole ID jest zawsze potrzebne w tabelach bazy danych? W moim przypadku mam użytkownika z polami `firstName`, `lastName` i `email`. `email` jest unikalny i nie jest pusty, więc może być użyty jako identyfikator, prawda? Czy w takim razie czy powinienem/powinnam spróbować usunąć identyfikator? Również chcę mieć inny stół, który rozszerzy ten. Powiedzmy, że nazywa się pacjent i ma własne pole `additionalData` i chciałbym połączyć relację poprzez adres e-mail użytkownika, o którym wspomniałem. Więc relacja powinna wynosić 1 do 1, prawda? i nie potrzebuję identyfikatorów? W jakiś sposób MySQL Workbench chce, żebym używał identyfikatorów. Co myślicie. Jakieś sugestie na ten temat?


title: Jython i JRuby kontra Groovy (i Java)

text: Bardzo interesuje mnie Python do programowania na JVM i dużo pracowałem w Javie i Ruby (nie w JRuby) oraz do pewnego stopnia w Groovy. Jakie są obecnie ograniczenia integracji Java-Jython i Java-JRuby? A co z Groovy: czy są jakieś rzeczy, które klasa Java może zrobić, a których klasa Groovy nie może? A co z integracją z IDE (głównie Eclipse, ale ciekawe są też IntelliJ i Netbeans)? **Nie interesuje mnie, czy Python, Ruby czy Groovy są lepsze/bardziej zwięzłe/cokolwiek.** Interesuje mnie tylko, jak dobrze działają teraz w JVM i narzędziach (zwłaszcza IDE). Moim głównym zainteresowaniem nie jest serwer WWW, jeśli to ma znaczenie. Proste przykłady uzyskania HelloWorld, które rozszerza niestandardową klasę Javy i implementuje niestandardowy interfejs Javy, byłyby dla mnie bardzo przydatne.


title: Jak mierzysz skuteczność procesu rekrutacji i rozmowy kwalifikacyjnej?

text: Chociaż widziałem wiele dyskusji na temat tego, jak przeprowadzić rozmowę kwalifikacyjną i rozwinąć swoją markę, nie widziałem wielu dyskusji na temat tego, jak ustalić, czy proces rekrutacji i rozmowy kwalifikacyjnej działa dobrze. Myślę, że to pytanie składa się z dwóch części: 1. Skąd wiesz, że proces rekrutacji polega na pozyskiwaniu odpowiednich kandydatów do aplikowania i przejściu przez proces rozmowy kwalifikacyjnej? 2. Spośród osób, z którymi przeprowadzasz rozmowę kwalifikacyjną, jak możesz stwierdzić, że ci, których zdecydujesz się zatrudnić, są (średnio) lepsi od tych, których odrzuciłeś? Przypuszczam, że „ekstremalne” przypadki – kiedy kończysz z supergwiazdą lub totalnym niewypałem – są dość oczywiste, ale co z resztą?


title: Czym C różni się od C++?

text: Wiele osób powiedziało, że C++ jest zupełnie innym językiem niż C, ale sam Bjarne powiedział, że C++ jest językiem, który jest rozszerzeniem C, stąd też pochodzi `++`. Dlaczego więc wszyscy mówią, że C i C++ to zupełnie różne języki? W jaki sposób C różni się od C++, poza rozszerzonymi funkcjami w C++?


title: Jaka jest różnica między „Programistą” a „Koderem”?

text: Czasami słyszałem ludzi mówiących o tym, że „ten facet nie jest programistą, jest tylko programistą”. Czy ktoś mógłby określić jaka jest różnica między "programistą" a "koderem"? Czy zawód programisty IT w ogóle istnieje?


title: Czy istnieje coś takiego jak „zamknięcie” z pracą oprogramowania?

text: Wypaliłem się w zeszłym roku (po dekadzie pełnoetatowych prac programistycznych) i teraz jestem na urlopie naukowym. Po całej tej samoocenie zacząłem odkrywać niektóre z podstawowych przyczyn mojego wypalenia, a jedną z głównych jest w zasadzie to, że nigdy nie było żadnego rzeczywistego zakończenia pracy, którą kiedykolwiek wykonałem. Zawsze chodziło o wejście w otwarty grind w zakresie wsparcia/utrzymania i zestarzenie się. Kiedy po raz pierwszy wszedłem do branży, miałem wrażenie, że praca programistyczna jest bardzo oparta na projektach. Spodziewałem się, że projekty będą miały początek, początek i koniec. A potem ruszasz dalej i zaczynasz coś zupełnie nowego i świeżego. W zasadzie nigdy nie spodziewałem się, że wiele (większość) prac związanych z oprogramowaniem będzie polegać na wspieraniu i utrzymywaniu tej samej bazy kodu przez długie, otwarte okresy czasu - lata, a nawet dekady. To, w połączeniu z ogólnie swędzącymi stopami, sprawia, że myślę, że wypalenie jest dla mnie nieuniknione, po 2-3 latach, w KAŻDEJ pracy na pełnym etacie. Wszystko to brzmi tak, jakbym prawdopodobnie powinien był być wykonawcą, a nie pełnoetatowym. Ale kiedy rozmawiam o tym z ludźmi, wielu z nich mówi, że nawet WTEDY nie można uciec od konieczności powrotu i utrzymywania/wspierania rzeczy, nad którymi pracowałeś, w kółko (np. powrót do kontraktów wsparcia, na przykład ). Natura pracy z oprogramowaniem jest po prostu taka. Nie ma zamknięcia projektu, w przeciwieństwie do wielu innych dziedzin inżynierii. Więc moje pytanie brzmi - czy istnieją JAKIEKOLWIEK prace programistyczne, które opierają się na krótko- lub średnioterminowych projektach/odcinkach, a następnie poruszają się czysto? A czy jest jakaś szczególna branża lub specjalizacja, w której tego rodzaju praca projektowa jest typowa?


title: Jak stworzyć „kult jakości”

text: DeMarco i Lister (Peopleware) sugerują stworzenie „kultu jakości” w swoim zespole programistycznym. Frustrująco, nie sugerują, jak to robisz! Czy ktoś ma jakieś przemyślenia, jak to zrobić?


title: Czy Twoja firma wspiera finansowo projekty open source? Dlaczego nie?

text: Czy Twoja firma wspiera finansowo projekty open source? Moja firma nie. Korzystamy z systemów operacyjnych open source, narzędzi, bibliotek, IDE, serwerów aplikacji, baz danych, stron internetowych (Wikipedia) itp. Z tego produkujemy produkt, który sprzedajemy. Jednak nic nie wnosimy z powrotem. Jestem pewien, że to normalne w wielu firmach. Jak można to usprawiedliwić?


title: Jak radzić sobie ze złożonymi kodami w (ogromnych) projektach

text: Przygotowuję pamiętnik na temat „Dlaczego (niektóre) projekty IT stają się zbyt skomplikowane i jak tego uniknąć?”. Jeśli kiedykolwiek zetknąłeś się z projektami ze skomplikowanymi kodami lub byłeś trudny do utrzymania, jak udało ci się przez to przejść? Jeśli musisz wybierać między kilkoma aplikacjami do wykorzystania w swoim projekcie, jaki byłby Twój najwyższy priorytet pod względem ich funkcjonalności i dlaczego?


title: O dobre podejście do uprawnień użytkowników aplikacji

text: Mam aplikację, która ma wielu użytkowników. W mojej aplikacji użytkownik może - tworzyć kontakty (osoby) - edytować kontakty - przeglądać kontakty - tworzyć wpis do planu - przeglądać wpis z planu Ponadto potrzebuję, aby użytkownik A mógł przeglądać kontakty użytkownika B, ale nie mógł edytować tego kontaktu . Użytkownik B może przeglądać i edytować wpisy Użytkownika A w Agendzie. Aplikacja będzie miała około 10-15 uprawnień dla każdego modułu (Agenda, Kontakty, Dokumenty, EmailMarketing), a liczba modułów może osiągnąć około 20 Powiedzmy, że „Użytkownik A” to sprzedawca, a „Użytkownik B” to sprzedawca menedżer. Z pewnością każdy obiekt biznesowy (kontakt, wpis do agendy itp.) będzie miał identyfikator właściciela. Jakie jest najlepsze podejście/wzorzec projektowy/dobre praktyki do zastosowania w tej sytuacji?


title: Hierarchiczna (drzewa) kontrola dostępu

text: Obecnie mam za zadanie stworzyć hierarchiczny system zarządzania użytkownikami. Wymagania dla mnie to **użytkownicy** z uprawnieniami (rolami), **klienci** z uprawnieniami i **grupy** (kontenery dla klientów i podgrup). Klienci i grupy mogą mieć przypisanych użytkowników, a ci użytkownicy powinni mieć dostęp tylko do grup i klientów poniżej ich przypisanych grup/klientów. W tym celu obecnie szukam sposobów, jak to zaimplementować, moje obecne preferowane rozwiązanie byłoby oparte na MongoDB z tą koncepcją: Tablica przodków MongoDB Tablica `ancestors` byłaby następnie dodawana do grup i klientów, więc wybierając wszystkie dostępne grupy/klientów byłoby naprawdę szybkie, po prostu patrząc na tablicę `ancestors`. Również aktualizacja tablicy przodków wydaje się być dość szybka, również w przypadku przenoszenia grupy składającej się z dziesięciu tysięcy grup/klientów. Problem, który widzę, polega na tym, że grupy są przenoszone poniżej innych grup, w tym celu musiałbym usunąć starych rodziców z drzewa przodków za pomocą aktualizacji, a następnie dodać nowych rodziców do tablicy przodków za pomocą innej oddzielnej aktualizacji. Problem polega na tym, że MongoDB nie jest w stanie wyizolować tych 2 operacji i dlatego istnieje szansa na wystąpienie warunków rasowych, jeśli grupy zostałyby przeniesione dokładnie w tym samym czasie, a usuwanie i dodawanie przodków nakładałoby się na siebie. Jakieś pomysły, jak rozwiązać ten problem w Mongo? Wiem, że relacyjna baza danych zgodna z ACID może mi w tym pomóc, ale nie chcę tracić łatwości użytkowania podczas dodawania ustawień do klienta/użytkownika tylko przez dodanie do nich nowego poddokumentu, również skalowalność może być łatwiejsza. Czy LDAP byłby do tego dobrym rozwiązaniem? Trudne, nie mam żadnego doświadczenia w LDAP. Innym pomysłem byłoby regularne sprawdzanie i aktualizowanie przodków, jeśli coś jest nie tak, poprzez rekurencyjne sprawdzanie wszystkich elementów. Trudne to nie brzmi dla mnie zbyt czysto ;)


title: Kilka konkretnych pytań dotyczących tworzenia gier

text: Jeśli chodzi o programowanie gier ze starej szkoły sega, takich jak sonic, indie, gniewne ptaki, a nawet bardziej zaawansowane gry, takie jak Diablo, jak dokładnie wykonuje się projektowanie poziomów? Tak jak w przypadku, czy poziomy są czasami projektowane prosto z kodu w IDE? A może tworzą wizualny edytor projektowania poziomów, w którym można umieszczać rzeczy jednym kliknięciem myszy? Wyobrażam sobie gry oldschoolowe lub bardzo proste, takie jak indies, które są robione za pomocą kodu, gdzie niezwykle skomplikowane wymagają edytora wizualnego. Czy to jest poprawne? Ponadto, jeśli chodzi o biblioteki takie jak SDL lub XNA, jak często są one używane, a nie tylko wykorzystujące OpenGL lub DirectX? A co z tworzeniem własnego silnika gry, a nie wykorzystaniem już stworzonego? Czy większość korzysta z już zbudowanych silników? To pytanie jest skierowane do całego spektrum gier niezależnych/dużych gier. Dziękuję.


title: Czy warto uczyć się języków eksperymentalnych?

text: Jestem młodym programistą, który chce kiedyś pracować w terenie jako programista. Znam Javę, VB.NET i C#. Chcę nauczyć się nowego języka (jako programista wiem, że warto poszerzać to, co znam – uczyć się języków, które sprawiają, że myślisz inaczej). Zajrzałem do Internetu, aby zobaczyć, jakie języki były powszechne. Wszyscy znają C i C++ (nawet ci mugole, którzy tak mało wiedzą o komputerach w ogóle), więc pomyślałem, że może powinienem naciskać na C. C i C++ są fajne, ale są stare. Rzeczy takie jak Haskell i Forth (itd. itp. itp.) są stare i straciły na popularności. Z tego samego powodu boję się uczyć C (lub nawet C++). Java jest również dość stara i powolna, ponieważ jest uruchamiana przez JVM i nie jest skompilowana do kodu natywnego. Od dłuższego czasu jestem programistą Windows. Niedawno zacząłem używać Javy - ale tylko dlatego, że była bardziej wszechstronna i rozpowszechniana w innych miejscach. Problem polega na tym, że nie wygląda on na bardzo _użyteczny_ język z następujących powodów: * Najczęściej używanym przeznaczeniem są aplikacje internetowe i aplikacje na telefony komórkowe (w szczególności Android) * Jeśli chodzi o rzeczywiste produkty z nim wykonane, jedyne rzeczy, które przychodzą do umysł to Netbeans, Eclipse (hura za tworzenie i IDE z językiem, dla którego jest IDE - to jak tworzenie strony internetowej do pisania HTML/CSS/Javascript) i Minecraft, który jest zabawny, ale opóźniony i dwubiegunowy, jeśli chodzi o specyfikację komputera. Pomoc. * Poza tym jest używany do serwerów _ale do licha - nie chcę tylko tworzyć/konfigurować serwerów_. Języki .NET są jednak fajne: * Ludzie śmieją się, jeśli w poważnej rozmowie wspominam o VB.NET lub C#. * Nie jest wieloplatformowy, chyba że używasz MONO (które jest wciąż w fazie rozwoju i ma kilka ulepszeń do wprowadzenia). * Brakuje elementów niskiego poziomu, ponieważ podobnie jak Java z JVM, jest uruchamiany/zarządzany przez CLR. Moją pierwszą myślą było nauczenie się czegoś takiego jak C, a następnie użycie go do przeskoczenia do C++ (tylko po to, aby mieć mocne zrozumienie/podstawę), ale jak powiedziałem wcześniej, starzeje się z każdą minutą. * * * ## To, w co zajrzałem _**Fantom_** wygląda ładnie. Jest jak miły pośrednik między moimi dwoma ulubionymi językami, a nawet pozwala mi publikować między nimi zamiennie, ale w przeciwieństwie do tego, czego chcę, kompiluje się do CLR lub JVM (w zależności od tego, do czego publikujesz), zamiast być kompletną kompilacją . _**D_** też ładnie wygląda. Wygląda na bardzo użyteczny język iz wielu źródeł wydaje się być lepszy niż C/C++. Od razu bym z tym skoczył, ale nadal nie jestem pewien jego sukcesu, ponieważ najwyraźniej nie jest to w tym momencie zbyt mainstreamowe. Jest kilka innych, które wyglądały całkiem ładnie i skupiały się na innych rzeczach, takich jak Opa z tworzeniem stron internetowych i Go by GOOGLE. * * * ## Moje pytanie Czy warto uczyć się tych „eksperymentalnych” języków? Czytałem inne pytania, które mówią, że jeśli nie uczysz się ciągle języków i nie jesteś otwarty na wszystkie języki, to nie masz odpowiedniego nastawienia do programowania. Rozumiem to i nadal może nie do końca to rozumiem, ale tak naprawdę, jeśli język nie stanie się głównym nurtem, czy powinienem spędzać czas na uczeniu się czegoś innego? Nie chcę uczyć się starych (lub jakichkolwiek, które wkrótce będą stare) języków programowania. Wiem, że wiele osób postrzega to jako coś ważnego, *ale czy ktokolwiek z was kiedykolwiek rozważyłby (zakładając, że już nie wiedział) FORTRAN? Moim celem jest być na bieżąco, aby mieć pewność, że w przyszłości odniosę sukces. * * * ## Zastrzeżenie Tak, jestem młodym programistą, więc prawdopodobnie w swoim pytaniu wypowiedziałem wiele naiwnych stwierdzeń. **_Możesz mnie poprawić na WSZYSTKO! _** Muszę gdzieś zacząć się uczyć, więc jestem pewien, że duża część mojej wiedzy jest na tyle pobieżna, że spowodowała błędne stwierdzenia lub błędy w moim myśleniu. Prosimy o pozostawienie wszelkich odczuć w komentarzach. * * * ## Wyniki... Jestem naprawdę zdumiony niesamowitymi odpowiedziami, większość z nich tak ładnie wskazuje na moje nieporozumienia i błędne osądy. Wiele się z tego nauczyłem i jestem podekscytowany, że wykorzystam wszystko, czego się nauczyłem! Prawdopodobnie zacznę się uczyć Haskella (_nie_ tak starego języka, choć ma ponad 20 lat - _hahaha_ ), a potem zacznę szukać innych opcji wokół mnie. _**Dziękuję_**


title: Wzorzec stanu a dziedziczenie

text: Na poniższym obrazie dla **Wzorca stanu** z zastosowania projektu i wzorców opartych na domenie: z przykładami w C# i .NET ![wprowadź opis obrazu tutaj](http://i.stack.imgur.com/UCMr1. png) Próbuję utrwalić jednostkę `SalesOrder` w bazie danych. Normalnie miałbym tabelę `salesOrder` w mojej bazie danych z polem `currentState` wskazującym na aktualny stan jednostki. Ta implementacja jest w porządku, ponieważ istnieje **pojedyncza** encja, a jej stany zawierają tylko różne zachowania. **Jednak** co, gdybym musiał śledzić inne właściwości dla różnych stanów? Przykłady: * Kiedy zamówienie jest anulowane, muszę śledzić anulowaną `ilość`, `cancellationReason`, `cancelledBy`, `cancellationDate`. * Gdy zamówienie zostanie zwrócone, muszę śledzić `refundQuantity`, `refundPrice`, `refundFee`. Więc w zasadzie to tak, jakbym miał jednostki `CancelledSalesOrder` i `RefundedSalesOrder` z dodatkowymi atrybutami. To samo można powiedzieć o innych stanach. Mój problem polega więc na tym, że będę musiał zmienić projekt z używania wzorca stanu na używanie dziedziczenia. Dziedziczenie nie pozwala jednak na dynamiczną zmianę stanu w czasie wykonywania (problem, który początkowo rozwiązuje diagram stanu). więc moje pytania: 1. Czy wzorzec państwa nie powiedzie się, gdy podmiot w każdym stanie ma dodatkowe atrybuty? jaka jest alternatywa? 2. Jak mam podtrzymywać moje podmioty w tej sprawie? Dziedziczenie w jednej tabeli? tabela na klasę? tabela na klasę betonu? 3. Jeśli muszę zachować niektóre atrybuty z poprzedniego stanu (zwrot kosztów zamówienia wysłanego, ale nie usuwam adresu wysyłkowego ze stanu wysłane), jak można podejść do tego problemu? 4. Jak śledzisz kolejność występowania stanów?


title: Szablon do pisania wymagań/specyfikacji dla interfejsu usługi WCF

text: Muszę napisać wymagania/specyfikacje interfejsu usługi WCF między naszym systemem a serwerem BizTalk innej firmy. Nie jestem do końca pewien, jak to zrobić, więc szukam szablonu. Chyba powinienem przynajmniej zdefiniować sam interfejs, politykę uwierzytelniania i obsługę błędów. Wszelkie zasoby dotyczące dokumentowania wymagań WCF/SOA będą mile widziane.


title: Model danych Railsów - pytanie o najlepsze praktyki

text: Piszę aplikację książki kucharskiej Rails jako ćwiczenie edukacyjne. Stworzyłem tabelę Przepisy, która zawiera informacje o przepisie (nazwisko, autor, itp.). Mam również tabelę składników, która będzie główną listą składników, a następnie tabelę pośrednią zawierającą informacje specyficzne dla danego przepisu/kombinacji składników (na przykład tabela składników będzie zawierała listę składników cebuli, stół miałby ilość, technikę (krojenie, siekanie itp.) i cokolwiek innego dla konkretnego przepisu). W każdym razie - wszystko działa dobrze, ale kiedy dodaję składniki do tabeli, zdaję sobie sprawę, że istnieje kilka kategorii składników (przyprawy, warzywa, mięso, owoce itp.) i mają różne informacje, których chcę by o nich nagrać. Na przykład mięso i warzywa mogą mieć pole techniki (siekać, kroić w kostkę, mielone itp.), ale przyprawy mogą mieć pole „spice_type”, aby rejestrować, czy jest suche, czy świeże. Mięso może wymagać pola "wypieczenie" (dobrze wysmażone, krwiste, itp.), a owoce nie... Sedno mojego pytania - czy lepiej mieć jedną dużą tabelę składników z polami dla każdej kategorii, tylko używając tych, których potrzebuję w danym wierszu, czy może lepiej utworzyć pięć tabel, po jednej dla każdego rodzaju składnika? Zacząłem go kodować jako osobne tabele, ponieważ wydawało mi się to właściwe, ponieważ trzymam różne pola dla każdego typu, ale potem zdałem sobie sprawę, ile pracy będzie wymagało zakodowanie 5 x modeli, 5 x kontrolerów, 5 x widoków itp... WIĘC, lepiej umieścić to wszystko w jednej tabeli (w końcu wszystkie są składnikami!), niech każdy rekord po prostu zostaw nieodpowiednie pola zerowe i spraw, aby moje widoki/itp. były dynamiczne, aby dostosować się do dowolnego rodzaju składnika z którymi pracujesz (zasadniczo ukrywając lub wyświetlając odpowiednie pola)? Mam nadzieję, że to ma sens, za każdym razem, gdy wchodzę na tę stronę, staję się chaotycznym głupcem ;) Dzięki za pomoc **Aktualizacja:** Wczoraj robiłam piwo i myślałam o przepisach na piwo na wzór mojej książki kucharskiej, i zdałem sobie sprawę, że przepisy na piwo są znacznie lepszym przykładem tego, co próbuję zrozumieć, więc poniżej znajduje się to samo pytanie postawione w innym paradygmacie: W moich przepisach na piwo mam trzy rodzaje składników. Jest słód, chmiel i drożdże. Są wspólne w tym sensie, że wszystkie są składnikami i wszystkie mają kilka wspólnych atrybutów, takich jak nazwa, marka i cena. Jednak istnieją specyficzne atrybuty dla każdego z nich, które nie są wspólne - na przykład Słód ma atrybut SRM (zasadniczo kolor), podczas gdy chmiel ma atrybut AA (kwasy alfa), a drożdże ma atrybut flokulacji. Więc mam iść STI i rozłożyć stół w ten sposób? id, typ, nazwa, marka, cena, srm, aa, flokulacja Dodatkowo tabela „pomiędzy” będzie zawierać inne informacje o każdym z nich. Wszystkie składniki będą miały atrybut Amount, ale chmiel będzie miał BoilTime, a słody MashTemp, itd. Czy więc do przyłączenia się używam jednego stołu z STI i jednego stołu „pomiędzy”? Czy robię również stół "pomiędzy" STI? Mam dużo do przeczytania! :)


title: Dlaczego sem_post pthread_mutex_lock jest chroniony, a sem_wait nie?

text: Wszystkie przykłady semaforów pthread, które widziałem, chronią wywołanie sem_post za pomocą pthread_mutex_lock, ale sem_wait pozostaje niezabezpieczony! Wydaje mi się, że sem_wait również powinien być w jakiś sposób chroniony, chociaż będąc wywołaniem blokującym, zablokuje muteks na stałe! czego mi brakuje?


title: Jak SCRUM zarządza różnymi projektami dotyczącymi tego samego produktu z różnymi zespołami?

text: W moim miejscu pracy zdarza się, że kiedy produkt jest gotowy i zaledwie kilka tygodni przed jego wydaniem i zamknięciem projektu, pozostają pewne rozważania biznesowe dotyczące funkcji, które są pożądane w przyszłych wersjach. Po zamknięciu projektu dokonuje się korekty funkcji, a klienci i interesariusze wraz z zespołem zdecydowali, na przykład, że chcą otworzyć nowy projekt, którego celem jest utworzenie nowej wersji projektu, która obejmuje kilka nowych wymagań. Teraz jest to typowy przypadek, ale zdarzyło się wcześniej, że zespół, który wyprodukował produkt, pracuje teraz dla innej firmy i powstaje nowy, świeży zespół, który zajmie się tym projektem. Wiem, że Agile ma na celu nadanie wartości interakcjom, a nie dokumentacji, ale jak Agile to zarządza? Jak kontynuować nowy projekt, aby rozszerzyć już istniejący produkt bez dokumentacji?


title: Umieszczanie informacji o prawach autorskich w kodzie źródłowym

text: Mam zamiar opublikować mój projekt, z którego jestem naprawdę dumny na GNU GPL i mam kilka pytań: 1. Czy należy dołączyć informację o prawach autorskich do każdego pliku kodu źródłowego z ich projektu? Myślę, że twierdzenie o prawach autorskich do 3-liniowej klasy abstrakcyjnej jest trochę śmieszne. Czy należy dołączyć informację o prawach autorskich tylko do naprawdę ważnych plików kodu źródłowego? 2. Czy nie mogę dołączyć całej standardowej rzeczy? Ponieważ jest duży i nieporęczny i przeszkadza... Jeśli tak, to czy wariant poniżej jest ok/wystarczający? _Copyright rok Imię Nazwisko. Ten program jest wolnym oprogramowaniem: możesz go redystrybuować i/lub modyfikować zgodnie z warunkami Powszechnej Licencji Publicznej GNU opublikowanej przez Free Software Foundation._


title: Kiedy jest dobry moment, aby uzasadnić wydajność w Haskell?

text: Sam Simon Peyton Jones zdaje sobie sprawę, że rozumowanie dotyczące występów w Haskell jest trudne ze względu na nieścisłą semantykę. Mam jeszcze do napisania znaczący projekt w haskell, więc zastanawiam się: czy mogę wnioskować o wydajności dopiero na początku projektu (przy wyborze podstawowych struktur danych i biblioteki IO) i gdy pojawi się problem, poradzić sobie z tym profilerem? Innymi słowy, czy możliwe jest (tj. niezbyt bolesne) odłożenie radzenia sobie z wydajnością, gdy masz problemy z wydajnością, czy też musisz nauczyć się przewidywać, jak GHC uruchomi Twój kod (na przykład: wywnioskuj, co zdecyduje analizator ścisłości )?


title: Jakie są przykłady małych/średnich i dużych aplikacji?

text: Moje pytanie jest związane z przyjętą odpowiedzią na to pytanie. Mówi, że język powinien opierać się na fakcie, czy aplikacja jest mała, średnia czy duża. Jakie popularne aplikacje umieściłbyś w każdej kategorii? I dlaczego? (czy jest to rozmiar bazy kodu/liczba jednoczesnych użytkowników itp.) * * * Dzięki za wszystkie odpowiedzi. Ale w twoich przykładach nie widziałem żadnych aplikacji internetowych. Czy możesz dołączyć jakieś?


title: Konwencja nazewnictwa dla iOS

text: Uczę się programowania Objective-C i iOS i nie jestem pewien, jaka konwencja nazewnictwa powinna zostać użyta. Rozumiem, jak używać aspektu etykiet w metodach Obj-C, ale nie wiem, jak nazwać każdą etykietę. Jaka jest najlepsza praktyka dotycząca nazywania metod, właściwości, obiektów, gniazd i akcji? Ponadto, czy należy stosować różne konwencje nazewnictwa między kodem Obj-C a kodem C? A jeśli tak, jakie są różnice?


title: Odczytywanie danych wejściowych z wykresów do układanki programistycznej, a następnie jej rozwiązywanie

text: Właśnie wziąłem pytanie na konkurs programistyczny i całkowicie je zbombardowałem. Już na samym początku miałem kłopoty z odczytaniem zestawu wejściowego. Pytanie było w zasadzie wariantem tej układanki http://codercharts.com/puzzle/evacuation-plan, ale zawierało również element godzinowy w pierwszej linii (powiedzmy 3 godziny po rozpoczęciu ewakuacji). Brzmi tak: Ta zagadka jest hołdem dla wszystkich ludzi, którzy ucierpieli w wyniku trzęsienia ziemi w Japonii. Celem tej zagadki jest, biorąc pod uwagę sieć dróg i lokalizacji, określenie maksymalnej liczby osób, które można ewakuować. Należy ewakuować ludzi z punktów ewakuacyjnych do punktów ratunkowych. Podana jest lista dróg i liczba osób, które mogą przewieźć na godzinę. Specyfikacje wejściowe Twój program musi akceptować jeden i tylko jeden argument wiersza poleceń: plik wejściowy. Plik wejściowy jest sformatowany w następujący sposób: pierwszy wiersz zawiera 4 liczby całkowite n r s t n to liczba lokalizacji (każda lokalizacja jest podawana jako liczba od 0 do n-1) r to liczba dróg s to liczba lokalizacji do ewakuacji z (punktów ewakuacyjnych) t to liczba miejsc, do których ludzie muszą być ewakuowani (punkty ratunkowe) drugi wiersz zawiera s liczby całkowite określające położenie punktów ewakuacyjnych trzeci wiersz zawiera t liczby całkowite określające położenie punktów ratowniczych r następujące linie zawierają do definicji dróg. Każda droga jest zdefiniowana przez 3 liczby całkowite l1 l2 width gdzie l1 i l2 to lokalizacje połączone drogą (drogi są jednokierunkowe), a szerokość to liczba osób na godzinę, które mogą zmieścić się na drodze Teraz spójrz na przykładowy zestaw danych wejściowych 5 5 1 2 3 0 3 4 0 1 10 0 2 5 1 2 4 1 3 5 2 4 10 3 w pierwszym wierszu to dodatkowy składnik i jest zdefiniowany jako liczba godzin od rozpoczęcia resuscytacji, która wynosi 3 w ta sprawa. Teraz moim rozwiązaniem było użycie algorytmu Dijisktras, aby znaleźć najkrótszą ścieżkę między każdym z węzłów ratunkowych i ewakuacyjnych. Teraz mój problem zaczął się od odczytywania zestawu wejściowego. Przeczytałem pierwszą linię w Pythonie i zapisałem wartości w zmiennych. Ale wtedy nie wiedziałem, jak przechowywać wartości odległości między węzłami i jakiego DS użyć i jak go wprowadzić, aby powiedzieć, że jest to standardowa implementacja algorytmu dijikstras. Więc moje pytanie jest dwojakie 1.) Jak mogę wziąć wkład w takie problemy? - Z tym problemem spotkałem się ostatnio w kilku konkursach i mam nadzieję, że uda mi się uzyskać prosty fragment kodu lub wyjaśnienie w java lub python, aby odczytać zestaw wprowadzania danych w taki sposób, abym mógł go wprowadzić jako wykres do algorytmów wykresów jak dijikstra i floyd/warshall. Pomogłoby też rozwiązanie powyższego problemu. 2.) Jak rozwiązać tę zagadkę? Mój algorytm był następujący: Znajdź najkrótszą drogę między punktami ewakuacji (w powyższym przykładzie jest to 14 od 0 do 3) Pomnóż ją przez liczbę godzin, aby uzyskać maksymalną liczbę zapisów Również odpowiedź udzielona dla wariantu dla zbioru wejściowego to 24, które ja nie rozumiem. Czy ktoś może to również wyjaśnić. AKTUALIZACJA: Otrzymuję, jaka jest odpowiedź 14 w danym łączu problemu - wydaje się, że jest to po prostu najkrótsza ścieżka między węzłem 0 a 3. Ale z komponentem 3 godzinnym, jaka jest odpowiedź 24 AKTUALIZACJA Otrzymuję, jak to jest 24 - to jest pełne przechodzenie przez wykres co godzinę i tak to rozwiązuję Godzina 1 Węzeł 0 do węzła 1 - 10 osób Węzeł 0 do węzła 2-5 osób TotalRescueCount=0 Węzeł 1=10 Węzeł 2= 5 Godzina 2 Węzeł 1 do węzła 3 = 5(Uratowany) Węzeł 2 do węzła 4 = 5(Uratowany) Węzeł 0 do węzła 1 = 10 Węzeł 0 do węzła 2 = 5 Węzeł 1 do węzła 2 = 4 TotalRescueCount = 10 Węzeł 1 = 10 Węzeł 2= 5+4 = 9 Godzina 3 Węzeł 1 do Węzła 3 = 5(Uratowany) Węzeł 2 do Węzła 4 = 5+4 = 9(Uratowany) TotalRescueCount = 9+5+10 = 24 W tym przypadku jest to wystarczająco trudne, dla wielu punktów ewakuacji i ratownictwa, jak w świat czy napisałbym do tego pgm ?


title: Znaczenie jednolitości architektury deweloperskiej w całym zespole

text: Jeśli niektórzy programiści nadal używają 32-bitowego „Windows XP”, a inni „64-bitowego Windows 7”, czy byłoby wskazane, aby cały zespół pracował z 32-bitowymi narzędziami programistycznymi, nawet jeśli ich system operacyjny jest 64-bitowy? Czy są jakieś problemy, które mogą się zdarzyć, jeśli nie przestrzega się jednolitości?


title: Jak PHP5 radzi sobie z wcześniejszymi wersjami języka?

text: Chciałbym nauczyć się PHP do tworzenia stron internetowych, ale zostałem wycofany z powodu komentarzy takich jak następujące*: * PHP jest dobre, ale generuje kod spaghetti * PHP jest fajne, ale Python to materiał na małżeństwo * PHP nie ma rzeczy, które można uzyskać w innych językach, takich jak C# lub Java Ale dla PHP5 widziałem kilka obiecujących komentarzy. Tak więc moje pytanie brzmi: jak PHP5 radzi sobie z wcześniejszymi wersjami języka i czy jest teraz wystarczająco dobry, aby nauczyć się tworzenia stron internetowych. * Komentarze są tylko w celach informacyjnych, aby nie podżegać do wojny z ogniem. Nie jest wymagane porównanie PHP z innymi językami. Proszę o komentarz tylko na temat PHP5 i jego porównania z wcześniejszymi wersjami.


title: Projekt klienta API

text: Projektuję klienta do API Tomtom WEBFLEET.connect w PHP. (Więcej informacji o API można znaleźć w pełnej dokumentacji tutaj: https://uk.support.business.tomtom.com/ci/fattach/get/488198/1396263217/redirect/1/filename/WEBFLEET.connect- en- 1.19.1.pdf) API zapewnia interfejs CSV przez HTTP(S) (JSON i SOAP są również dostępne, ale ich interfejs JSON ma kilka problemów, które zauważyłem obecnie). Używam metody interakcji CSV, która jest trochę niekonwencjonalna, ale działa. Projektuję swoje klasy PHP tak, aby były w szczególności zgodne z zasadą Single Responsibility Principle, Open-Closed Principle oraz Dependency Inversion Principle. Pisanie tej biblioteki klienta API jest tak samo osobistym ćwiczeniem programistycznym, jak staram się ulepszyć moje zasady OOP i projektowanie klas. Poniżej zamieściłem krótki diagram klas. Proszę wybaczyć rozwlekłe nazwy, to oczywiście wyraża przestrzenie nazw PHP. Byłbym bardzo wdzięczny za kilka komentarzy dotyczących: * Ogólnych przemyśleń i krytyki dotyczących projektowania klas (np. zgodność z SRP, itp.) * Czy zalecane są odrębne obiekty dla każdego typu Żądania i Odpowiedzi, jak zaproponowałem poniżej (odzwierciedla to każde API metoda). * Jak powinien wyglądać publiczny interfejs API do zewnętrznego kodu wywołującego. Na przykład, czy powinienem mieć klasę 'factory' zwracającą instancję wybranego Transportu do kodu wywołującego? A może klasa centralna (podobna do wzorca poleceń) powinna przechowywać instancję klasy transportowej i odciążać do niej żądania? ![Diagram klas UML](http://i.stack.imgur.com/HzFIC.jpg) Większy adres URL obrazu: http://i.imgur.com/kneY9GE.jpg


title: Radzenie sobie z dużym żądaniem ściągnięcia

text: Obecnie pracuję nad projektem z zespołem, który używa przepływu pracy git. Jest to dość proste, master powinien być w stanie rozmieszczania, a gałęzie są używane do tworzenia funkcji i poprawek. Za każdym razem, gdy mamy ukończoną i przetestowaną funkcję lub poprawkę, przenosimy ją do masteru tak szybko, jak to możliwe. Pomysł polega na tym, aby gałęzie były jak najmniejsze, aby ułatwić ich ponowne połączenie z wzorcem. Mamy zasadę, że każdy kod wypchnięty do gałęzi master powinien być w stanie możliwym do wdrożenia i przejść testy. Zdarzyło nam się, że jeden z programistów wykonał dużo pracy (kilka miesięcy) na jednej gałęzi i ta gałąź nie została jeszcze włączona z powrotem do mastera. Jest teraz kilka oddzielnych funkcji i kilka zatwierdzeń w tej gałęzi, zasadniczo ta gałąź powinna być już kilka razy scalona, ale jak dotąd tak nie było. Większość kodu jest w dobrym stanie, z testami jednostkowymi, które można by ponownie połączyć z głównymi, ale najnowsze zmiany z pewnością nie powinny być, ponieważ nie są ukończone i nie są testowane. Jak najlepiej poradzić sobie w takiej sytuacji, gdy jedna branża jest naprawdę daleko od pozostałych? W jaki sposób możemy uniknąć sytuacji, w której gałęzie będą w przyszłości otrzymywać bardzo dużą liczbę zatwierdzeń od mastera?


title: Jakie są zalety i wady korzystania z szablonów html w porównaniu z tworzeniem kodu html w kodzie?

text: O ile widzę, istnieją dwa sposoby budowania strony html: "wewnątrz" języka (nazwę to _budowanie_ z braku lepszej nazwy) lub poza językiem (przy użyciu szablonów). Pozwólcie, że wyjaśnię trochę, co przez to rozumiem, zanim przejdę do pytań. ### Budowanie Jednym ze sposobów jest zbudowanie strony html "wewnątrz" używanego języka, najlepiej przy użyciu konstrukcji w języku (nie tylko przez łączenie łańcuchów) i przekonwertowanie tych konstrukcji na html w ostatnim kroku. Naprawdę dobrym tego przykładem jest biblioteka czkawki Clojure, która wykorzystuje mapy i wektory Clojure do reprezentowania html. Pozwala to na wykorzystanie pełnej mocy języka, w którym się pracuje, do manipulowania tymi strukturami. ### Szablony Drugim sposobem jest napisanie html oddzielnie od głównego programu i użycie pewnego rodzaju szablonu DSL do wstawienia logiki do szablonów. Przykładem tego jest pakiet Hamlet dla Haskella. **Teraz moje pytanie** brzmi: jakie są inne zalety i wady obu podejść? * * * Chciałbym bliżej zapoznać się z tymi pojęciami, więc wskazówki do artykułów itp. są mile widziane. Proszę również o poinformowanie mnie, jeśli istnieje inne podejście, o którym nie pomyślałem. * * * ## Podsumowanie dotychczasowych odpowiedzi ### Pro szablonowanie * Łatwiej oddzielić widok od reszty kodu. Kod będzie łatwiejszy w utrzymaniu i unikniesz mieszania logiki biznesowej z resztą kodu. * To podejście jest ogólnie bardziej dostępne dla osób o mniejszych umiejętnościach technicznych. ### Kontemplowanie _(do tej pory brak)_ ### Profesjonalne budowanie * Języki funkcjonalne ułatwiają natywne pisanie kodu deklaratywnego, dzięki czemu język szablonów nie jest wymagany. * Możesz uzyskać pełną moc i elastyczność swojego języka programowania, a jednocześnie czerpać korzyści ze składni deklaratywnej. ### Con building * Projektanci/klienci są źli w preferowanym przez Ciebie języku logicznym. * Wciąż sprowadza się do zakodowania strony w kodemie tylko, że nie jest to osobny kod szablonu. * Ma większą moc, którą można wykorzystać w niewłaściwy sposób. Musisz szczególnie uważać, aby oddzielić kod widoku i logikę biznesową. * W idealnych przypadkach jest jednak szybszy.


title: Jakie są typowe zastosowania makr Lisp?

text: Próbuję nauczyć się trochę LISP i dużo czytałem o znaczeniu makr LISP, więc chciałbym zdobyć trochę doświadczenia w pracy z nimi. Czy możesz zaproponować praktyczną dziedzinę zastosowania, która pozwoliłaby mi użyć makr do rozwiązania rzeczywistego problemu i zrozumieć przydatność tej konstrukcji programistycznej? **UWAGA** To nie jest ogólne pytanie **jaki projekt mam zrobić jako następny**. Jestem zainteresowany zrozumieniem, jakie rodzaje problemów są zazwyczaj rozwiązywane za pomocą makr LISP. Np. czy są dobre do implementowania abstrakcyjnych typów danych? Dlaczego ta konstrukcja została dodana do języka? Jakie rozwiązuje problemy, których nie da się rozwiązać za pomocą prostych funkcji?


title: Resharper — korzyści

text: Widząc kilka wzmianek o Resharper na tej stronie i na SO, pomyślałem, że rzucę okiem. Wygląda na to, że na ich stronie internetowej jest cholernie dużo dokumentacji, więc zastanawiałem się, w skrócie, jakie to przynosi korzyści i jakie są główne powody, dla których ludzie z niej korzystają?


title: Opieka nad swoim systemem ciągłej integracji

text: Jedną z moich ról w zespole jest _osoba budująca_. Odpowiadam za utrzymanie/aktualizację naszych skryptów kompilacji i upewnienie się, że kompilujemy „płynnie” na serwerze ciągłej integracji. Zwykle nie mam nic przeciwko tej pracy, chociaż często mam wrażenie, że ciągle opiekuję się serwerem CI. Ta praca może być czasami denerwująca, ponieważ jeśli kompilacja się zepsuje, muszę porzucić historię, nad którą pracuję i zbadać awarię kompilacji. Awarie kompilacji zdarzają się codziennie w naszym zespole. Czasami programiści po prostu nie budują lokalnie przed zatwierdzeniem, więc testy na serwerze CI kończą się niepowodzeniem. W takiej sytuacji lubię szybko dotrzeć do osoby, która miała „złe commit”, aby build nie pozostawał zepsuty zbyt długo. Czasami (o wiele rzadziej) na serwerze CI występuje dziwny stan, który wymaga debugowania. Wiem, że wiele dojrzałych zespołów korzysta z Ciągłej Integracji, ale nie ma zbyt wielu materiałów o dobrych praktykach. Czy moje problemy wskazują, że nasza ciągła integracja nie jest zbyt dojrzała, czy jest to po prostu część pracy? Jakie są dobre praktyki, których należy przestrzegać? Jakie są cechy _dojrzałej ciągłej integracji_? **Aktualizacja** Zamiast odpowiadać na komentarze, zrobię aktualizację. Mamy pojedyncze, proste polecenie, które robi dokładnie to, co zrobi serwer kompilacji podczas budowania aplikacji. Będzie się kompilować, uruchamiać wszystkie jednostki/integracje i kilka szybkich testów opartych na interfejsie użytkownika. Czytając odpowiedzi wszystkich, wydaje się, że możemy mieć dwa główne problemy. 1. Serwer CI nie narzeka wystarczająco głośno, gdy kompilacja się nie powiedzie. 2. Deweloperzy nie czują, że wszyscy są odpowiedzialni za upewnienie się, że ich commit przejdzie pomyślnie. To, co utrudnia pracę w moim zespole, to fakt, że mamy duży zespół (10+ programistów) ORAZ mamy kilku członków zespołu off-shore, którzy angażują się, gdy nie jesteśmy nawet w pracy. Ponieważ zespół jest duży i ustaliliśmy, że preferowane są częste, małe zmiany, czasami mamy naprawdę dużo aktywności w ciągu dnia.


title: Dlaczego w GSL niektóre funkcje przyjmują argument „obszar roboczy”?

text: W niektórych funkcjach GSL (Biblioteki Naukowej GNU), niektóre funkcje przyjmują jako argument środowisko „obszaru roboczego”. Na przykład `gsl_poly_dd_taylor` z tej strony. Czemu? Czy nie byłoby łatwiej funkcji przydzielić własną pamięć, a przynajmniej taką samą trudność? Przypuszczam, że to pozwala wywołującemu określić _gdzie_ funkcja działa, ale nie widzę, jak to pomaga.


title: Najbardziej przyjazny dla człowieka sposób porządkowania definicji metod klasowych?

text: W każdej definicji klasy widziałem definicje metod uporządkowane na różne sposoby: alfabetycznie, chronologicznie w oparciu o najczęstsze zastosowania, alfabetycznie pogrupowane według widoczności, alfabetycznie z grupami pobierającymi i ustawiającymi itd. Kiedy zaczynam pisać nową klasę, Zwykle po prostu wpisuję wszystko, a kiedy skończę pisać całą klasę, zmieniam kolejność. W związku z tym mam trzy pytania: 1. Czy zamówienie ma znaczenie? 2. Czy istnieje „najlepsze” zamówienie? 3. Zgaduję, że nie, więc jakie są zalety i wady różnych strategii zamawiania?


title: Stosowanie zasad DDD w serwisie internetowym RESTish

text: Zajmuję się tworzeniem serwisu internetowego RESTish. Myślę, że wpadłem na pomysł różnicy między agregacją a kompozycją. Agregacja nie wymusza cyklu życia/zakresu obiektów, do których _odwołuje się_. Kompozycja wymusza cykl życia/zakres obiektów, które _zawiera/własne_. Jeśli usunę obiekt złożony, wszystkie zawarte w nim/własne obiekty również zostaną usunięte, podczas gdy usunięcie agregacji root nie spowoduje usunięcia obiektów, do których się odwołuje. **1)** Jeśli prawdą jest, że usunięcie zagregowanych korzeni nie musi usuwać obiektów, do których istnieją odwołania, jaki sens ma brak repozytorium dla obiektów referencyjnych? A może korzenie zbiorcze są terminem odnoszącym się do tego, co jest znane jako obiekt złożony? **2)** Kiedy tworzysz usługę sieciową, będziesz mieć wiele punktów końcowych, w moim przypadku mam jedną encję `Książka` i drugą o nazwie `Komentarz`. Nie ma sensu zostawiać komentarzy w mojej aplikacji, jeśli książka zostanie usunięta. Dlatego książka jest obiektem złożonym. Myślę, że **nie** powinienem mieć repozytorium komentarzy, ponieważ złamałoby to egzekwowanie cyklu życia i reguł, które może mieć klasa książki. Mam jednak adres URL taki jak (tylko przykłady): GET /books/1/comments POST /books/1/comments Teraz, jeśli nie mam repozytorium komentarzy, czy to oznacza, że muszę załadować obiekt książki, a następnie wrócić przywołane komentarze? Czy mogę zwrócić listę encji Komentarz z BookRepository, czy to ma sens? Repozytorium Book może w końcu stać się dość duże dzięki różnym metodom. Czy mogę pisać JPQL (zapytania JPA), które są kierowane do komentarzy, a nie do książek w repozytorium? A co z paginacją i filtrowaniem komentarzy. Czy dodając nowy komentarz wywołany przez punkt końcowy POST, musisz załadować książkę, dodać komentarz do książki, a następnie zaktualizować cały obiekt książki? To, co aktualnie robię, to posiadanie własnego CommentRepository, mimo że komentarze są usuwane wraz z książką. Mogę potrzebować wskazówek, jak to zrobić poprawnie. Ponieważ udostępniasz nie tylko obiekty root w usługach RESTish, zastanawiam się, jak sobie z tym poradzić na backendzie. Używam Hibernate i Spring.


title: Ikony dla mojego programu

text: Tworzę prosty edytor tekstu, żeby trochę poćwiczyć. Rozwijam go pod Linuksem, ale ponieważ używam Qt jako GUI Framework, mogę go łatwo skompilować na Windows lub Mac z tym samym kodem (innymi słowy, jest to wieloplatformowy). Qt oferuje funkcję `QIcon::fromTheme()`. Ta funkcja pozwala mi uzyskać standardową ikonę m.in. ikonę _Nowy dokument_ i używaj jej do dowolnych celów. Te ikony są niestety dostępne tylko w systemie Linux. Napisałem jednak prostą funkcję do zapisywania tych ikon jako plików PNG w różnych formatach (16x16 do 1024x1024), abym mógł ich używać również w systemie Windows. Teraz moje pytanie, czy używanie tych obrazów również w systemie Windows jest legalne? Czy byłoby to dziwne, gdyby takie ikony pojawiały się w programie Windows? Ponieważ Linux ma zupełnie inny styl niż Windows... To samo z OS X'. Na przykład ikona _Nowy dokument_ wyglądałaby podobnie do tego: http://findicons.com/files/icons/2455/web_icons/48/empty_document_new.png


title: Potrzebujemy niestandardowej strategii zbierania nieobsłużonych wyjątków aplikacji. Jakie mamy opcje?

text: ## Termin „Nieobsługiwany wyjątek” W .NET Framework nieobsłużone wyjątki to wyjątki, które nie zostały obsłużone przez samą aplikację i powodują awarię. W przypadku aplikacji desktopowej oznacza to, że wyświetlane jest okno podobne do tego: ![tutaj wpisz opis obrazka](http://i.stack.imgur.com/96et2.png) oznacza głównie HTTP 500. Do nieobsłużonych wyjątków zaliczam również te, które są „obsługiwane globalnie”, czyli w przypadku aplikacji desktopowych obsługa globalna polegająca na wyświetlaniu niestandardowego okna zamiast domyślnego okna Windows. ## Kontekst Kiedy pracuję jako freelancer, korzystam z własnego, wewnętrznego rozwiązania, aby zbierać nieobsłużone wyjątki z różnych źródeł (aplikacje internetowe i aplikacje komputerowe). Zebrane wyniki są następnie wyświetlane na panelu monitorującym w czasie rzeczywistym, a także gromadzone do przyszłej analizy (w celu połączenia z oprogramowaniem do śledzenia błędów itp.) Obecnie pracuję w firmie, w której nie mógłbym korzystać z mojego wewnętrzne rozwiązanie do zbierania wyjątków (jednym z powodów jest to, że nie akceptują wysyłania wszystkich komunikatów o wyjątkach na moje serwery). Ta firma nie ma precyzyjnej strategii zbierania nieobsługiwanych wyjątków. Jedyne rozwiązanie, które było wcześniej stosowane, jest zarówno szczątkowe, jak i niepodważalne: polega na wysyłaniu każdego wyjątku pocztą elektroniczną. Oznacza to, że w przypadku nowego produktu, nad którym pracuję, powinniśmy opracować niestandardową strategię zbierania nieobsługiwanych wyjątków. ## Pytanie Zawsze mogę zrobić ręcznie część, która zapisze wyjątki do bazy danych lub dziennika oraz część, która załaduje je z bazy danych, dziennika lub zdarzeń Windows. Chciałbym uniknąć wymyślania koła na nowo i użyć czegoś, co jest już powszechnie używane. Jakie mam wybory? W jaki sposób nieobsłużone wyjątki są zwykle gromadzone i przetwarzane później? Przy okazji: * Czy są jakieś biblioteki, które pomagają w zbieraniu tych wyjątków? * Czy są jakieś oprogramowanie, które pomaga w analizie tych wyjątków?


title: Jakie koncepcje są istotne przy planowaniu strategii „dokumentacji dla użytkownika końcowego”?

text: Piszę dużo oprogramowania i czuję, że pisanie dobrej dokumentacji jest bardzo trudne. Ponieważ nie znam żadnej ustrukturyzowanej teorii na temat dokumentacji oprogramowania, zacząłem porządkować swoją wiedzę w tej dziedzinie i mam nadzieję, że pomoże mi to rozbić informacje na sensowne jednostki i sprawnie zorganizować dokumentację. Najpierw chciałbym sporządzić pełną listę istotnych pojęć, które zbadam w innych kwestiach. Jakie pojęcia są przydatne lub istotne przy opisie dokumentacji użytkownika? Jak te koncepcje współdziałają ze sobą? Czy istnieje jakaś metodologia, której mogę użyć do analizy mojego oprogramowania i opracowania odpowiedniej strategii dokumentacji? Zidentyfikowałem następujące pojęcia: * _Kategorie informacji_ takie jak przepisy („jak mam…?”), _odniesienia_ (takie jak strony podręcznika UNIX) lub _wiedza ekspercka_. * _Rola użytkownika_ jak zwykły użytkownik, użytkownik zaawansowany, administrator systemu i wszelkie inne role zdefiniowane przez system, takie jak kierownik ds. bezpieczeństwa, kierownik ds. danych itp. * _Średnia_ jak podręcznik w wersji papierowej, pomoc kontekstowa, edytowalna wiki. Koncepcje te współgrają ze sobą i prowadzą do różnych pytań: Kiedy warto napisać podręcznik dla każdej roli? Co powinno znaleźć się w wersji papierowej, a co w odnośniku on-line? Kiedy warto prowadzić wiki zbierające „przepisy”? Mam nadzieję, że dzięki tym przykładom będę mógł przedstawić przydatne wyjaśnienia tego, co rozumiem pod pojęciem „koncepcja” i „interakcja” w moich pytaniach.


title: Przedstawianie zwinnych szacunków dla projektu Pivotal Tracker

text: Rozwijam się od 6-7 lat, ale nigdy w sposób szczególnie zwinny. W najnowszym projekcie staram się, aby nasz proces rozwoju był bardziej profesjonalny i bardziej zwinny. Używamy Pivotal Tracker do śledzenia projektu i zebraliśmy kilka całkiem dobrze przemyślanych historii. Staramy się również, aby niektórzy z naszych kierowników projektów (nastawienie typu Prince2/Waterfall) byli zadowoleni. Do tej pory zmuszałem ich do zaakceptowania tego * wymagania zawsze się zmieniają * priorytety zawsze się zmieniają * niektóre z wymagań nie zostaną spełnione, jeśli poprawisz skalę czasu * powinieneś naprawić skalę czasu * krótkie sprinty i regularne przeglądy są dobre. nadal czują, że muszą lepiej zorientować się, ile z grubsza zostanie dostarczone w określonym czasie. Wymyśliłem arkusz kalkulacyjny, aby pokazać, czego możemy się spodziewać w 4 różnych skalach czasowych. ![Przykład szacunków](http://i.stack.imgur.com/VbHr9.jpg) Pytania * Czy narażamy się na niepowodzenie? * Czy są lepsze sposoby, aby to zrobić


title: Nasłuchiwanie i podnoszenie wydarzeń w BLL

text: Pracuję nad aplikacją do nagrywania WinForms .Net i mam RecordingMgr w moim BLL, aby nasłuchiwać nowych zdarzeń przechwyconych przez inną klasę. Chcę wyświetlić zdarzenia w moim interfejsie użytkownika i nie wiem, jaki jest **najlepszy** sposób, aby to zrobić. Przychodzi mi do głowy kilka scenariuszy, aby sobie z tym poradzić, ale wszystkie wydają się nieoptymalne: 1. Nasłuchuj i obsługuj nagrane zdarzenia zarówno w interfejsie użytkownika, jak i w RecordingMgr 2. Po otrzymaniu zdarzenia w RecordingMgr podnieś je ponownie, aby interfejs użytkownika może go pobrać 3. Utwórz zmienną w RecordingMgr (np. BindingList), z którą interfejs użytkownika może się powiązać i zaktualizować ją po odebraniu zdarzenia 4. Pozbądź się RecordingMgr i po prostu umieść logikę nagrywania zdarzeń w interfejsie użytkownika najlepsze podejście? Coś powyżej czy coś innego?


title: Rzutowanie typu Boolean-Integer w celu zastąpienia warunkowego

text: Przy wyborze wartości opartej na 2 wartościach logicznych w tym formacie var foo:int; jeśli (X){foo = 50; } else if (Y){ foo = -50; } inny { foo = 0; } Odkryłem, że mogę to skondensować, rzutując typ operacji logicznych na liczby całkowite i łącząc je trochę tak: var foo:int; foo = ( int (X) - int(!X && Y)) * 50; // int() rzutuje argument logiczny na int równy 1 jeśli prawda, 0 jeśli fałsz. Oto moje pytania: 1. Czy to podejście wymaga mniej zasobów? 2. Czy to podejście jest dla ciebie czytelne? 3. Czy przypisywanie wartości w ten sposób jest powszechne? 4. Jeśli 1 jest prawdziwe, to Twoim zdaniem, czy wzrost wydajności uzasadnia mniej czytelny charakter tego podejścia? Ta sytuacja pojawiła się w języku ActionScript 3.0, ale interesują mnie odpowiedzi ze wszystkich języków i z perspektywy najlepszych praktyk.


title: Diagram aktywności UML: Jak zakończyć aktywność po akcji sygnału zdarzenia?

text: O ile mi wiadomo, akcje związane z sygnałem zdarzenia nie mogą mieć przepływu sterowania wyjściami, więc jak mogę modelować zakończenie aktywności po akcji sygnału zdarzenia? Ten sam problem pojawia się w przypadku akceptowania akcji zdarzeń i węzłów rozpoczęcia aktywności.


title: Czy ta implementacja dekoratora narusza zasadę substytucji Liskov?

text: Proszę rozważyć następującą implementację wzorca projektowego Decorator: Obiekty `WordBank` przechowują łańcuchy i zwracają je klientowi za pomocą metody `getWords()`. Klasa dekoratora `WordSorter` jest podklasą `WordBank` (jak we wzorcu Decorator). Jednak implementacja `getWords()` sortuje niektóre łańcuchy i usuwa je przed zwróceniem tablicy do klienta. Na przykład `WordSorter` może usunąć wszystkie łańcuchy w banku zaczynające się na literę 'a' i dopiero po tym zwrócić tablicę klientowi. Czy to narusza zasadę substytucji Liskov? Ponieważ niektóre implementacje `WordBank` zwracają łańcuchy, podczas gdy inne najpierw sortują łańcuchy i zwracają tylko niektóre z nich, nie jestem pewien, czy można bezpiecznie powiedzieć, że `WordSorter` może być używany wszędzie tam, gdzie używany jest inny `WordBank`. Czy może źle rozumiem tę zasadę? ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/Zafoi.png)


title: W jaki sposób można wygenerować różne trudne łamigłówki, takie jak ta w grze AirLock na Androida?

text: oto link do aplikacji: https://play.google.com/store/apps/details?id=com.iatll.airlock Studiowałem sztuczną inteligencję w ostatnim roku programu b.tech cs i pamiętam kilka algorytm generowania i rozwiązywania 8 gier logicznych; musieliśmy to zaimplementować w Prologu (ciężkie czasy) Ale nie jestem pewien, czy wspomniana aplikacja używa tego samego algorytmu. Gdzie muszę szukać, aby stworzyć taką grę logiczną? Poważnie nie mogli zaprojektować każdego poziomu ręcznie, prawda? Musiał być generowany komputerowo. Jak mogę to zrobić? wybacz mi, że nie formatowałem, korzystam z urządzenia mobilnego.


title: ActionScript i Python

text: Obecnie do tworzenia aplikacji używam VB.net 2010 i WPF 4, ale im dalej się tego uczę, tym bardziej zdaję sobie sprawę, że oba języki programowania mogą nie spełniać moich potrzeb, zwłaszcza gdy muszę migrować wersję do sieci- oparta na platformie Silverlight. Mając to na uwadze, myślę o zrzuceniu wszystkich języków programowania Microsoftu, zanim zagłębię się w ten projekt i zbuduję to wszystko od nowa w wieloplatformowym języku. To prowadzi mnie do mojego pytania: potrzebuję możliwości graficznych WPF, o którym wiem, że jest na platformie Flash, ale potrzebuję również języka, do którego mogę migrować mój BARDZO złożony kod rdzenia VB.net; tak myślę, używając Pythona. Czy te dwa języki mogą działać obok siebie? Alternatywnie, czy mogę przekonwertować cały mój kod Vb.net na ActionScript, zamiast używać dwóch języków? Czy istnieje inna alternatywa do rozważenia? Open source jest najlepszy, chociaż wiem, że ActionScript nie jest, w żadnym wypadku open source. Jest to projekt stricte komercyjny. Dziękuję Ci!


title: Jak szybko iz jaką siłą należy włączyć alarm, gdy coś wygląda podejrzanie?

text: Obecnie mam za zadanie opiekować się krytycznym dla firmy systemem wsadowym ETL, codziennie rano przeszukiwać bazę danych tego systemu pod kątem niespójności i ponownie uruchamiać zadania, które się nie powiodły. Nie jestem oryginalnym projektantem systemu ani bazy danych, ale dokonałem kilku zmian w obu i jestem dość zadowolony z bazy kodu i modelu danych. System ma opinię niewiarygodnego. Wprowadzono ulepszenia, ale wciąż jesteśmy daleko od trafienia w cele, które musimy trafić. Doprowadziło to do problemów z zaufaniem zarówno dla systemu, jak i zaangażowanego zespołu. W związku z tym system ma teraz opiekunkę do dziecka, która dba o to, aby zachowywała się dobrze każdego ranka, podczas gdy my pracujemy nad hartowaniem. Mając to na uwadze, stanęłam przed dylematem, według którego mój zespół jest podzielony. Za każdym razem, gdy system pokazuje niespójności lub nieudane przebiegi, jak szybko i jak mocno powinniśmy uruchomić alarm? Oto czynniki, które do tej pory były przedmiotem dyskusji: * Jeśli nie wiemy, co jest przyczyną objawu, ale objaw wygląda na poważny, czy wstrzymujemy się z uruchomieniem alarmu, czy też uruchamiamy go z mniejszą intensywnością, dopóki nie poznać przyczynę i odkryć, że naprawdę jest tak poważna? * Załóżmy, że znamy przyczynę jakiegoś objawu, a objaw jest poważny. Mamy strategię łagodzenia tego objawu, ale rozwiązanie ma możliwość wystąpienia jednej lub więcej niepowodzeń przed sukcesem, a mimo to wdrożenie zajmie trochę czasu. Czy wstrzymujemy się z uruchomieniem poważnego alarmu, dopóki nie ukończymy kroków łagodzących, a nadal widzimy, jak dane chodzą na boki? * Załóżmy, że znamy przyczynę czegoś powodującego objaw, ale przyczyna jest poza naszą kontrolą i nie będziemy w stanie złagodzić objawu, dopóki przyczyna nie zostanie usunięta przez stronę trzecią. Czy zasługuje to na taką samą wagę alarmu, jak gdyby za utratę danych odpowiadał nasz kod. * Jeśli zbyt często wydajemy fałszywe alarmy, ryzykujemy utratę jeszcze większego zaufania, ponieważ teraz wydajemy się niekompetentni w zakresie trybów awarii naszego systemu. Czy warto opóźniać alarmy lub łagodzić ich powagę, aby nie stracić zaufania do naszej zdolności do poznania, kiedy i jak nasz system się psuje? Czy monitorowanie alarmów o wysokim stopniu istotności w celu zmniejszenia poziomu istotności jest wystarczającym złagodzeniem, czy też szkody zostały już wyrządzone, gdy alarm poważny zostanie wyłączony? Powodem, dla którego o to pytam, jest to, że dziś rano zabrzmiałem fałszywym alarmem, z powodu niektórych danych, które początkowo wydawały się być dalekie od tego, czego się spodziewałem. Dalsze badania wykazały, że było to po prostu spotkanie z nietypowymi danymi, więc niespójności, którą dostrzegłem, należało się spodziewać. Wraz z tym musiałem wrócić i ponownie uruchomić kilka rzeczy, które się nie powiodły, i musiałem poczekać, aż się zakończą, zanim moje kontrole spójności danych będą miały jakiekolwiek znaczenie. Inny członek mojego zespołu zadzwonił do mnie w tej sprawie i zwrócił uwagę, że nie powinienem był alarmować, a zamiast tego powinienem albo nic nie mówić, dopóki nie będę pewien, albo zgłosić mniej poważny stan, dopóki nie będę miał pewności, że dane są w stanie poważnie skompromitowanym i że to nasza odpowiedzialność za to, że tak jest. W ten sposób nie pomagam nam przywrócić zaufania. Mając to na uwadze, chciałbym zadać następujące pytania: **kiedy i z jaką wagą mają zostać uruchomione alarmy** , w przypadku problemów z zadaniami wsadowymi, takich jak ten, który opisałem powyżej, wiedząc, że mają one historię problemów? Ponadto **czy skupiamy się na niewłaściwych rzeczach w budowaniu zaufania zwrotnego, starając się zapewnić, że wysyłamy alarmy tak mało, jak to możliwe**?


title: Czy projektowanie oparte na domenach jest przydatne/produktywne w przypadku nie tak złożonych domen?

text: Oceniając potencjalny projekt w pracy, zasugerowałem, że korzystne może być zastosowanie podejścia do projektowania opartego na domenie w jego modelu obiektowym. Projekt nie ma zbyt skomplikowanej domeny, więc mój współpracownik rzucił mi to: > Mówiło się, że DDD jest korzystne w przypadkach, gdy istnieje > złożony model domeny („...Zastosuje się zawsze, gdy działamy w skomplikowana, > skomplikowana dziedzina” Eric Evans). To, na czym się gubię, to - jak definiujesz złożoność domeny? Czy można go zdefiniować na podstawie liczby zagregowanych korzeni w modelu domeny? Czy złożoność domeny w interakcji obiektów? Domena, którą oceniamy, jest związana z publikowaniem online i zarządzaniem treścią.


title: Od czego zacząć uczyć się programowania w C/C++ Embedded Linux?

text: Jestem doświadczonym inżynierem oprogramowania i zaawansowanym użytkownikiem Linuksa. Znam już C i C++. W przeszłości tworzyłem aplikacje C na Unix i C++ (głównie na Windows). Chciałbym zacząć uczyć się programowania na wbudowanych systemach Linux. Szczególnie interesuje mnie płyta ARM i Beagle Board. Chciałbym nauczyć się programowania niskopoziomowego w C/C++ (sterowniki urządzeń, łączenie z peryferiami BeagleBoard, kompilowanie dostosowanych jąder itd.). Czy możesz wskazać mi najlepsze (darmowe lub niezbyt drogie) zasoby w Internecie? Najlepsze książki dla początkujących do nauki programowania C/C++ na Linuksie dla ARM?


title: Jak wygląda programowanie w języku japońskim?

text: Czy kod jest napisany w języku japońskim? Czy nazwy plików są po angielsku? A co z preprocesorem C? Czy to nadal jest po angielsku? Czy komentarze są po japońsku? Przykłady też byłyby miłe.


title: Zapisywanie wielu rozmiarów obrazów

text: Na naszej stronie znajduje się wiele obrazów generowanych przez użytkowników. Gdy użytkownicy przesyłają swoje obrazy, przechowujemy tylko oryginał. Jednak w zależności od strony pokazujemy różne rozmiary tych obrazów (małe, średnie, duże, oryginalne). Czy konieczne jest przechowywanie wszystkich rozmiarów tych obrazów, czy jest lepszy sposób? Obecnie zmieniamy ich rozmiar za pomocą CSS, ale jest to naprawdę powolne.


title: Format komentarza nagłówka

text: Zdaję sobie sprawę, że format „komentarza nagłówka” różni się w zależności od programisty, ale jaki byłby przykład „dobrego” komentarza nagłówka?


title: Czy ktoś zebrał wyczerpującą listę wszystkich prac w stylu programowania prototypowego w javascript?

text: Szukam wyczerpującej (lub możliwie najbliższej) listy wszystkich wykonanych do tej pory prac w stylu programowania prototypów w javascript. Czy ktoś zna gdzieś taką listę lub ma wiedzę, aby gdzieś ją skompilować, a następnie odnieść do niej tutaj?


title: Czy możesz mi wyjaśnić, dlaczego wiele wątków wymaga blokady?

text: Załóżmy, że te wątki działają w jednordzeniowym procesorze. Jako procesor uruchamiaj tylko jedną instrukcję w jednym cyklu. To powiedziawszy, nawet jeśli dzielą zasoby procesora. ale komputer zapewnia, że raz jedna instrukcja. Czy więc blokada nie jest konieczna do wielowątkowości?


title: Szacowane błędy w porównaniu wdrożeń

text: Pracuję nad ulepszeniem istniejącej biblioteki, aby była łatwiejsza w utrzymaniu po próbie zaimplementowania funkcji, której chciałem, i okazało się, że trudno jest zmienić kod. Biblioteka jest wtyczką gruntu node.js o nazwie grunt-contrib-jshint, a moja implementacja znajduje się w repozytorium o nazwie grunt-jshint-bfs. Uruchomiłem narzędzie do analizy kodu o nazwie plato, które generuje raport analizy źródła, który zawiera sumę linii metryki/średnie linie kodu, łatwość konserwacji i szacowane błędy w celu porównania baz kodu dla celów jakości kodu. Kłopot, jaki mam, polega na porównaniu szacowanych błędów między dwoma projektami, ponieważ jeden ma 2 pliki, a drugi ma znacznie więcej plików, wydaje się, że zwiększy się narażenie na błędy, czy też źle to czytam? Oto link do raportu mojego repozytorium i raportu grunt-contrib-jshint dla porównania.


title: Jak zaimplementować algorytm out-of-core?

text: Chcę zaimplementować algorytm grupowania równoległego "poza rdzeniem" w CUDA. Mój procesor ma **12 GB** pamięci RAM, a GPU ma jej **4 GB**. Chcę, aby cały zestaw danych znajdował się na dysku i mogłem pobierać z niego bloki danych, umieszczać je w pamięci procesora, przekazywać je do GPU, przetwarzać tam i przechowywać wynik z powrotem na dysku. Złożoność kroku oryginalnego algorytmu (w pamięci) wynosi **O(logN)** , N->no. punktów danych. Dla algorytmu pamięci zewnętrznej załóżmy, że w pamięci może zmieścić się na raz M punktów, to według mnie przebieg powinien wynosić (N/M)*(logM) (N/M) -> równa się liczbie takich zbiorów punktów który będzie musiał być umieszczony w pamięci i podczas każdego przejścia logM czasu na jego przetworzenie. W jaki sposób ten czas wykonywania odnosi się do czasu we/wy między dyskiem a pamięcią, tj. Czy rozważyłem już czas we/wy przy użyciu (N/M), czy też coś pomijam? Czy ta analiza jest prawidłowa, czy też muszę wiedzieć więcej na temat wejścia/wyjścia, aby zaimplementować algorytm wykorzystujący pamięć zewnętrzną?


title: Jak radzić sobie z podpowiedziami/trybem samouczka?

text: Obecnie pracuję nad podstawową aplikacją, która posiada 'tryb samouczka'. Początkowo wskazówki (dymki z tekstem) będą wyświetlane nad różnymi elementami interfejsu użytkownika, wyjaśniając ich działanie. Obecnie mam widok główny, który zawiera obiekt podpowiedzi, który można aktualizować (pozycja, tekst itp.) i wysyłam zdarzenia aktualizacji z różnych widoków, które wymagają wyświetlenia podpowiedzi. W większości przypadków, gdy użytkownik kliknie wskazówkę, znika ona, ale jest kilka sytuacji, w których użytkownik musi wykonać inną akcję (np. przeciąganie-upuszczanie elementu, kliknięcie innego itp.), aby przejść dalej. Uff, to jest tło w pigułce. Moje główne pytanie brzmi: czy należy wywoływać zdarzenia z różnych widoków i obsługiwać podpowiedzi centralnie, czy podpowiedzi powinny być obsługiwane tylko lokalnie w każdym widoku ? Jakie jest zalecane podejście?


title: Chcę programować, ale nie mogę znaleźć czasu, żeby utrzymać swoje oceny

text: Jestem maturą i ubiegam się o różne uczelnie. Wśród nich Stony Brook, który, jak rozumiem, ma bardzo dobry program CS. Moje stopnie są dobre, więc nie martwię się o dostanie się na studia; jednak _chce_ dostać się do Computer Science Honors. Kursy Honors są mniejsze, a podstawowa sekwencja to dwa kursy, a nie trzy (chociaż ponieważ jestem w AP Computer Science, co uważam za żart, tak naprawdę nie czerpię korzyści ze skompresowanych lekcji). Chcą jednak 93 GPA (wśród kilku świetnych wyników SAT, które już mam), a ja jestem na 93,24. Chcę to utrzymać, abym mógł wejść do programu i cieszyć się mniejszymi rozmiarami klas. Świetnie, poza tym, że nauka, którą robię w liceum (trzy kursy AP, w tym CS) pochłania dużo czasu, który chciałbym poświęcić na programowanie. Gdybym nie miał żadnej pracy domowej po szkole, a nawet nie miałbym żadnej szkoły, natychmiast wskoczyłbym do komputera i kontynuował ten jeden program, nad którym pracuję, co jest jak na ironię czymś, co wyświetla kursy, które chcę wziąć na studiach w zgrabny i sformatowany plik HTML. Dlatego nie mogę się doczekać, aż dostanę się do college'u. Zrobiłem matematykę i przeciętnie byłem w klasie o wiele mniej w college'u niż w liceum, co pozwoliło mi na programowanie (co i tak robiłem dużo). Oczywiście wieczorami poświęcam czas na relaks, żebym mogła zachować zdrowy rozsądek i spać; ale do tego czasu zbliża się pora snu, a ja nie jestem tak „na balu”, jak bym chciała, zwłaszcza, że staram się iść spać przed 11 (może o północy). Weekendy wydają się teoretycznie dobrym czasem na programowanie, jeśli nie mam pracy domowej, ale po co ograniczać się do dwóch dni w tygodniu? Mogę też być dobry na poranki, ale jeśli siedzę na wykładzie z kryminalistyki, to skąd będę wiedzieć? Mam za sobą około sześciu miesięcy samodzielnej nauki C++, a także trochę Przetwarzania. Trochę więcej, plus dwa projekty, można zobaczyć na mojej stronie; oczywiście obchodzi mnie robienie fajnych rzeczy, nie o to chodzi. Tak, chcę tworzyć gry, dzięki za zgadywanie, ale to przyjdzie później, gdy zdobędę trochę doświadczenia za pasem. Mam też salę do nauki w szkole, ale to może nie być dla mnie najlepszy czas na programowanie; moja szkoła faktycznie daje swoim uczniom komputery, ale nie pozwala im przynosić własnych z domu. Moje środowisko programistyczne jest tam, ale nie tutaj, a przesuwanie kodu tam iz powrotem, moim zdaniem, naprawdę przerywa przepływ i utrudnia pracę. Wygląda na to, że Code::Blocks nie działa na moim szkolnym komputerze, co jest naprawdę niesamowite. (Spędziłem dzisiejszą salę do nauki, pisząc tę szlochającą historię.) Ostatecznie, pytam tutaj, jaką radę możecie zaoferować, aby zarezerwować czas na programowanie? Jestem perfekcjonistą, co mam nadzieję nie będzie moim upadkiem. Obecnie jestem w punkcie, w którym muszę iść na kompromis, aby ukończyć zajęcia; Mam na przykład zaległości w rachunku różniczkowym i nie uczyłem się zbyt wiele do dzisiejszego testu, ponieważ wczoraj wieczorem czytałem Manifest komunistyczny i rozdział o Rosji z mojego podręcznika AP Comparative Government. Aha, i posiadam Arduino, jeśli to inspiruje jakieś rozwiązania.


title: Jak prawidłowo zaprojektować zajęcia do dużego projektu?

text: Jeśli potrzebujemy reprezentować klasy na diagramie klas dla dużego projektu, który nie jest jeszcze w pełni zaprojektowany, a klasy muszą być rzeczywistymi tabelami w bazie danych, jak moglibyśmy przewidzieć i zaprojektować klasy? Powiedzmy, że mamy projekt, który będzie miał więcej niż 15 tabel, czy wszystkie te tabele muszą być klasami na diagramie klas? Jak projektowane byłyby zajęcia w takiej sytuacji? Używanym językiem jest Java, a diagram klas musi być przygotowany w UML. Wiem, jak je zaprojektować, tylko nie wiem, czy tabele mają w tym przypadku reprezentować klasy.


title: Algorytm do permutacji inżynierii odwrotnej

text: Mam sekwencję permutacji utworzonych przy użyciu tych ciągów: `"A"`, `"BC"` i `"D"`. Permutacje to: BCAD ABCD BCDA DABC ADBC DBCA Teraz muszę to odtworzyć; tj. mam plik tekstowy zawierający sekwencje, powinienem być w stanie określić ciągi, które są używane do konstruowania permutacji. Jakiego algorytmu mogę użyć?