title: Czego powinny używać wtyczki: hooków, zdarzeń czy czegoś innego?

text: Rozważ aplikację, która umożliwia wtyczkom reagowanie na przepływ programu. Znam 2 sposoby, aby to osiągnąć: **haczyki** i **zdarzenia** **1\. Hooki** Używa wywołań do opróżniania funkcji w głównym przepływie programu. Te funkcje mogą być nadpisane przez wtyczki. Na przykład Drupal CMS implementuje hooki, które są dostępne dla modułów i motywów. Oto przykład implementacji hooka w funkcji file_copy. function file_copy(stdClass $source, $destination = NULL, $replace = FILE_EXISTS_RENAME) { // ... [Procedura kopiowania plików] // Poinformuj moduły, że plik został skopiowany. module_invoke_all('kopia_pliku', $plik, $źródło); return $plik; // ... } Moduł może zaimplementować funkcję `nazwa_modułu_file_copy($plik, $źródło)`, która będzie wywoływana przez `module_invoke_all` w `file_copy`. Po zakończeniu tej funkcji, `kopia_pliku` wznowi wykonywanie. **2\. Zdarzenia** Niech aplikacja wysyła zdarzenia, które mogą być odsłuchiwane przez wtyczki. Po otrzymaniu zdarzenia, na które została zasubskrybowana, wtyczka przechwyci przepływ programu i wykona niezbędne operacje. Na przykład wtyczka galerii jQuery Fotorama implementuje kilka zdarzeń. Jako przykład, oto część metody `show`, która uruchamia zdarzenie `fotorama:show`. that.show = function (options) { // ... [pokaż nową ramkę] // [uruchom zdarzenie] options.reset || triggerEvent('show', { user: options.user, time: time }); // ... [zrób wiele innych rzeczy za pomocą pasków nawigacyjnych itp.] }; Skrypt może nasłuchiwać tego zdarzenia i coś zrobić po jego uruchomieniu: $('.fotorama').on( 'fotorama:show', function (e, fotorama, extra) { console.log(e.type + (extra. użytkownik ? ' po dotknięciu użytkownika' : '')); console.log('czas trwania przejścia: ' + dodatkowy.czas); } ); **PYTANIE** 1. Czy istnieją inne główne sposoby implementacji takiego zachowania wtyczek? 2. Jeśli nie, to kiedy należy używać haków, a kiedy zdarzeń? Biorąc pod uwagę, że ostatecznym celem jest uczynienie kodu **bardziej łatwym w utrzymaniu i czytelnym, zarówno z punktu widzenia aplikacji, jak i twórcy wtyczek?**


title: O czym należy pamiętać podczas przebudowy starszej aplikacji?

text: Niedługo rozpocznie się początkowe fazy projektu, aby przepisać starą aplikację od podstaw (istniejące reguły biznesowe ulegną nieco zmianie i zostaną rozszerzone, aby uwzględnić dużą liczbę nowych wymagań, których nie jest w stanie obsłużyć istniejąca infrastruktura). Szukam elementów, o których należy pamiętać podczas pracy nad przeprojektowaniem istniejącej aplikacji.


title: Od programisty do trenera programistów

text: Pochodzący z „samodzielnej” pracy programisty, jakich metod lub narzędzi używasz, gdy nadszedł czas, aby zespół programistów jako kierownik projektu (ale wciąż kodujący z załogą) wyjaśniał, przygotowywał i rozdzielał pracę do wykonania wykonane przez zespół ? Tak więc nadchodzi duży projekt, zostajesz wybrany jako Główny Programista. Jakiej metody i narzędzi używasz do wykonania pracy przez zespół?


title: Czy Agile zmusza programistów do poświęcania większej ilości czasu na pracę?

text: Patrząc na powszechne praktyki Agile, wydaje mi się, że (celowo czy nieumyślnie?) zmuszają programistów do spędzania większej ilości czasu na rzeczywistej pracy, w przeciwieństwie do czytania blogów/artykułów, czatowania, przerw na kawę i zwykłego odwlekania. W szczególności: 1) Programowanie w parach - największy robotnik, tylko dlatego, że niewygodne jest robienie tego całego odwlekania, gdy jest was dwoje siedzi razem. 2) Opowiadania - gdy masz OGROMNY kawał pracy, którą musisz wykonać np. miesiąc, dość często zdarza się, że przez pierwsze trzy tygodnie odpoczywamy i przełączamy się w tryb OMG DEADLINE na ostatni. A z małymi kawałkami (które muszą być zrobione w dzień lub mniej) jest dokładnie odwrotnie – czujesz, że czas jest napięty, nie ma miejsca na manewry i wkrótce zostaniesz pociągnięty do odpowiedzialności za zadanie, więc zaczynasz działa natychmiast. 3) Komunikacja w zespole i spójność - gdy osiągasz gorsze wyniki w wolnym, zdystansowanym i cichym otoczeniu, może to być w porządku, ale kiedy pod koniec dnia na spotkaniu Scrum wszyscy chwalą się tym, co osiągnęli, a Ty nie masz nic do powiedzenia, możesz naprawdę czuć zawstydzony. 4) Testowanie i informacja zwrotna - ponownie zapobiega to utrzymywaniu zadań „w 99% gotowych” (gdy faktycznie jest to około 20%) do momentu, gdy nagle nadejdzie ostateczny termin. Czy czujesz, że w Agile pracujesz więcej niż w "konwencjonalnych" metodykach? Czy ta presja jest kompensowana przez wygodniejsze środowisko i poczucie, że faktycznie robi się szybko właściwe rzeczy?


title: W jaki sposób BASIC lokalizuje instrukcję NEXT w kolejności poza kolejnością, gdy ciało pętli jest pomijane?

text: Ustaw maszynę WABAC, Sherman. To pytanie dotyczy ogólnie języka BASIC, aw szczególności BASIC-80 firmy Microsoft. Podstawy starej szkoły. Z numerami linii. Jak (a raczej robiły) oldschoolowe interpretery języka BASIC obsługują pętle FOR...NEXT, gdy treść pętli nie została wykonana, a instrukcja NEXT pojawiła się w niewłaściwym porządku? # Wypowiedź NEXT nie w kolejności z czasów sprzed czasu: Oto podprogram z gry Awari z „101 Basic Computer Games” Davida H. Ahla: 200 K=M:GOSUB 600 205 E=0:IF K>6 WTEDY K=K-7 210 C=C+1:JEŻELI C<9 WTEDY F(N)=F(N)*6+K 215 DLA I=0 DO 5:JEŻELI B(I)<>0 TO 230 220 NEXT I 225 RETURN 230 FOR I=7 TO 12:JEŻELI B(I)<>0 TO E=1:RETURN 235 GOTO 220 i tutaj jest ze wszystkim poza kontrolą przepływu zredagowaną: 200 GOSUB 600 215 FOR I=0 TO 5:JEŻELI... TO 230 220 NASTĘPNY I 225 POWRÓT 230 DLA I=7 DO 12:JEŻELI... TO POWRÓT 235 GOTO 220 Czy to przywraca niezbyt przyjemne wspomnienia? Czy słyszysz, jak Dijkstra przewraca się w grobie? Oto interesująca część tego, co dzieje się w tym fragmencie: * Druga pętla FOR, ponieważ używa tej samej zmiennej pętli, zastępuje pierwszą pętlę FOR * Dwie pętle FOR mają tę samą instrukcję NEXT * _Druga instrukcja NEXT pętli FOR występuje przed go, w kolejności źródłowej, ale po niej, w kolejności wykonywania. Można by więc przypuszczać, że interpreter, po uruchomieniu pętli FOR, po prostu uruchamia instrukcje, dopóki nie nastąpi to w pętli NEXT. W tym przypadku kolejność wypowiedzi w źródle nie ma znaczenia. Ale zobaczmy, co podręcznik basic80 ma do powiedzenia na temat pętli FOR: # Podręcznik basic-80 mówi "moo..." > Treść pętli jest pomijana, jeśli początkowa wartość pętli pomnożona przez > znak kroku przekracza wartość końcowa razy znak kroku. Tak więc treść pętli można całkowicie pominąć. Mamy dowody w postaci opublikowanych programów, że przynajmniej niektóre wersje BASICa dynamicznie lokalizowały swoje NEXT. Jest to dość łatwe, gdy wykonywana jest treść pętli. Jednak w przypadku, gdy treść instrukcji FOR powinna zostać pominięta, na co pozwala BASIC-80, w jaki sposób BASIC zlokalizował instrukcję NEXT, biorąc pod uwagę, że może to być _przed_ instrukcją FOR w kolejności źródłowej? * Czy wersja BASICa użyta w „101 podstawowych grach komputerowych” zawsze wykonywała treść pętli przynajmniej raz? * Czy BASIC-80 wymagał, aby instrukcja NEXT pętli FOR wystąpiła po instrukcji FOR, w kolejności źródłowej? PS: Tak, piszę interpreter BASIC dla starej szkoły BASIC. To choroba.


title: Które projekty programistyczne prowadzą do większej liczby problemów?

text: Jako świeżo upieczony programista, jedną z pierwszych rzeczy, których musiałem się nauczyć, była nauka języka i jego składni. Teraz moim kolejnym zagadnieniem szkoleniowym jest zaprojektowanie mojej hierarchii kodu w taki sposób, aby była łatwa do utrzymania w czasie. Jeden z przykładów, z którymi właśnie się spotkałem, znajduje się poniżej. Jest w VBA dla Excela, ale koncepcja obejmuje również inne języki. Jako ktoś z bardzo małym doświadczeniem wydaje mi się, że druga opcja jest znacznie jaśniejsza i powinienem użyć tego stylu. Czasami jednak wiem, że dla początkującego programisty to, co wydaje się stosunkowo łagodnym wyborem, może na dłuższą metę zaszkodzić jego rozwojowi. Czy któryś z tych dwóch stylów jest lepszy? Nie mówię o osobistych „stylistycznych” wyborach, mówię o tym, który z nich prowadzi do dalszych problemów, prawdopodobnie przez zbytnie komplikowanie rzeczy. For ws in Worksheets usuń duplikaty dołącz pozostałe dane do oddzielnego skoroszytu Next ws versus For Ws in Worksheets usuń duplikaty Next ws For ws in Worksheets dołącz pozostałe dane do oddzielnego skoroszytu Next ws Thankyou! EDYCJA: Nawiasem mówiąc, nie jest ważne, czy mniej czytelny styl projektowania jest szybszy. Niewielki wzrost wydajności nie jest obecnie wart utraty czytelności dla moich celów.


title: Wymagająca praca po studiach podyplomowych

text: Pracowałem z MNC tworząc aplikacje internetowe w technologiach związanych z Java/J2EE (w tym JSF, rozpórki, hibernacja itp.) Teraz rzuciłem pracę, aby kontynuować studia podyplomowe w USA. Więc jestem studentem w połowie moich studiów magisterskich. Miałem już dość tworzenia zwykłych aplikacji CRUD w J2EE, teraz chcę pracować w czymś ekscytującym. Problem w tym, że nie potrafię powiedzieć co dokładnie, ale mogę podać przykłady. Powiedzmy, że rozwijamy nowe biblioteki JDK lub piszemy jądro dla jakiegoś systemu operacyjnego. czy coś takiego. Więc mam tutaj pięć pytań. 1. Czy to prawda, że ludzie w R&D często używają C++ ze względu na wyższą wydajność, czy w takim przypadku powinienem rozważyć zmianę platformy na C/C++? 2. Jak wykorzystać swój czas, który mam rok do ukończenia studiów, aby przygotować się do rozmów kwalifikacyjnych na takie stanowiska? (np. Czytanie książek o algorytmach itp.) 3. Skąd mam wiedzieć o tych pracach i jak mogę się na nie aplikować? 4. Czy to właściwy czas, aby pomyśleć o pracy? 5. Czy jestem zbyt ambitny, ponieważ nie jestem w Ivy League, tylko w normalnej szkole? (Mój GPA nie jest niestety tak wysoki).


title: Jak obsługiwać logowanie do nieoficjalnego interfejsu API?

text: Tworzę narzędzie do uzyskiwania dostępu do niektórych danych na stronie (Fitocracy) i chciałbym je przekształcić w nieoficjalne częściowe API, ponieważ nie istnieje oficjalne API. Jeśli nie jesteś zalogowany, nie możesz uzyskać dostępu do żadnych danych, więc moje narzędzie używa mechanizmu Ruby do logowania (za pomocą mojego konta) i pobierania niektórych danych ze strony. Jak mam sobie z tym poradzić, gdy zmienię go w API? Obawiam się, że ludzie nie będą czuli się komfortowo wysyłając swoje dane logowania za pośrednictwem nieoficjalnego interfejsu API, a nie chcę po prostu ominąć logowania do witryny, dając wszystkim dostęp za pośrednictwem fikcyjnego konta.


title: Programowanie ekstremalne – dokumentacja wdrożenia?

text: W ekstremalnej metodologii programowania, jakie artefakty / można wykorzystać do udokumentowania implementacji? Użyłem diagramu aktywności, aby udokumentować etapy projektowania dla każdego działania. Czytałem, że dla XP rozdział dotyczący implementacji to sam kod. Zajmuję się tworzeniem aplikacji na Androida, która składa się z GUI i kodowania w javie.


title: Jakie metody pozyskiwania wymagań są odpowiednie, gdy nie mam bezpośredniego dostępu do bazy użytkowników?

text: Pracuję nad aplikacją do tworzenia faktur. Istnieje kilka funkcji, które są wymagane w zależności od typu aplikacji i są wspólne dla wszystkich aplikacji fakturowania. Jednak nadal musimy określić, jakie unikalne potrzeby może mieć baza użytkowników. Nie mamy bezpośredniego dostępu do użytkowników w celu uzyskania wymagań lub historyjek użytkowników. Jakie techniki są najbardziej odpowiednie do uzyskiwania od użytkowników wymagań wysokiej jakości, gdy nie jest możliwy bezpośredni lub częsty dostęp?


title: Jak zabrać się za odczytywanie pamięci z procesu? Czy system operacyjny różni się tym?

text: Jako doświadczony web-developer, ale początkujący programista „niskiego poziomu”, te rzeczy wciąż są dla mnie czymś w rodzaju voodoo. Jestem ciekaw, jak w ogóle można by zacząć szukać bloku pamięci, a następnie go czytać (na przykład odczytywanie licznika czasu w grze w kopalnie)? Czy różni się to w zależności od wersji systemu operacyjnego/OS? Spędziłem sporo czasu na Googlingu i niestety, poza kilkoma niejasnymi wzmiankami o czytnikach pamięci i `ReadProcessMemory` w Windows z C/C++, nie ma tam zbyt wiele. Byłbym bardzo szczęśliwy, gdyby ktoś mógł rzucić trochę światła na ten temat, abym mógł wyjść na właściwą nogę w odniesieniu do czytania pamięci.


title: Dlaczego wciąż używamy CSV?

text: Dlaczego wciąż używamy CSV? Niedawno przestawiłem się na pracę w dziedzinie zdrowia i pomimo wspaniałej pracy w zakresie standardów przesyłania danych, cały transfer danych odbywa się w **CSV** , zarówno w przypadku raportowania do organizacji zewnętrznych, jak i migracji danych podczas wdrażania nowych systemów. Niestety użycie CSV jest przyczyną niekończącego się powtarzania tych samych głupich błędów, z taką samą stratą czasu programisty. (złe uciekanie, brak obsługi pól null itp.) Wiem, że możemy zrobić to lepiej, a wszystko między JSON a XML (w zależności od instancji) byłoby w porządku. (W większości są to dane przechodzące z jednego serwera MS SQL 2005 do drugiego!) Czuję, że za każdym razem, gdy widzę, jak to się dzieje, dosłownie patrzę, jak jeden programista marnuje czas innym. Więc dlaczego ciągle się kręcimy? Kiedy przestaniemy?


title: Jak obsługiwać interfejsy dla różnych urządzeń w tym samym scenariuszu wejściowym?

text: Zadałem to pytanie na SO, ale ktoś zauważył, że lepiej bym tutaj. Najprawdopodobniej ma rację. Więc zaczynam! Więc chciałem tylko opinii. Mam 2 różne sposoby podejścia do problemu. Ok, więc mam system, który chcę zaprojektować z myślą o przyszłości. Mam kilka typów obiektów, które jako parametry przyjmują obiekt implementujący interfejs, który sam może zawierać inny obiekt Implementujący inny interfejs i tak dalej. W ten sposób mam A(InterfaceB B)->B(InterfaceC C)->C(InterfaceD D) ... Aż dojdę do punktu, w którym obiekt nie zawiera innego. Każdy interfejs implementuje wspólny interfejs. Więc mam Parent->InterfaceB --- Parent->InterfaceC --- Parent->InterfaceD Ale InterfaceD niekoniecznie implementuje InterfaceB. Ponieważ interfejs nie ma tylko jednej implementacji, mam wiele możliwych drzew. A(InterfejsB B)->B(Interfejs C C)->C(InterfejsD D)->... i A(InterfejsB B)->B(Interfejs C Y)->Y(InterfejsZ Z)->... Więc moje pytanie brzmi: jeśli chcę zarządzać możliwymi drzewami, czy lepiej jest używać odbicia do generowania możliwych drzew podczas uruchamiania? A może lepiej byłoby trzymać różne drzewa w pliku xml, który przeanalizowałbym podczas uruchamiania? Muszę pamiętać, że te typy interfejsów i ich implementacje będą się pojawiać. Więc za każdym razem, gdy dodaję nowy typ, trzeba nim zarządzać. Wiem, że oba rozwiązania będą działać. Moje pytanie jest bardziej takie: Jakie byłoby najlepsze podejście do ukierunkowania systemu na przyszłość. Aby dodać kontekst do sytuacji, oto przykład sprawy. Wszystkie te interfejsy udostępniają adapter. Każdy adapter może potrzebować innego, aby wykonać swoje zadanie. Na przykład mam adapter, który analizuje niektóre dane. Ale wtedy te dane muszą być przekazane do zdalnego celu. Aby to zrobić, może użyć ethernetu, portu szeregowego itp. Więc mógłbym mieć ogólny parser, który wymaga ogólnego komunikatora. To jedna z różnych możliwości. Jeśli potrzebujesz wyjaśnień, nie wahaj się!


title: Generuj złożone (nie wypukłe) wielościanowe mapowanie UV

text: Muszę znaleźć podejście do problemu generowania map tekstur dla niewypukłych wielościanów bez użycia narzędzia do projektowania, takiego jak Maya. W szczególności mapuję dane wyników symulacji na powierzchnię 3D i muszę napisać kod, który generuje mapy. Jedno z ogólnych podejść wykorzystuje pędzel gradientowy jako ogólną teksturę tylko do mapowania kolorów, ale jeśli ścianki wielościanu są bardzo wąskie lub współrzędne mapowane (u, v) są bardzo od siebie oddalone na tej samej ściance, obraz staje się zaszumiony. Inne podejście wykorzystuje cieniowanie Phong lub Gouraud, ale tych funkcji brakuje w niektórych bibliotekach 3D, które przedkładają teksturowanie nad określanie kolorów w każdym wierzchołku. Więc szukam sposobu na wygenerowanie dobrej mapy tekstur. Jeśli pomoże to w zidentyfikowaniu poprawnego algorytmu, wszystkie powierzchnie całkowicie otaczają przestrzeń trójwymiarową, nie ma danych normalnych fasetek i będę w stanie zidentyfikować „linię podziału”, która oddziela jedną część powierzchni od inne, jak można by stworzyć formę dla kształtu.


title: Wykryj zmiany kolejności na liście

text: Załóżmy, że masz listę wartości, które są 1. a 2. b 3. c 4. d 5. e Kolejność na liście może ulec zmianie. 1. a 2. c 3. d 4. **b** 5. e Jak rozpoznałbyś tę zmianę? Potrzebowaliśmy czegoś takiego, kiedy tworzyliśmy stronę historii zmian dla naszego narzędzia do tworzenia formularzy online. Znaleźliśmy szybkie i brudne rozwiązanie, ale szukam bardziej eleganckiego rozwiązania. Oto jak wyglądają opisy wersji: ![Strona wersji jotform](http://i.stack.imgur.com/QKuTx.png) Oto trudna część: **Elementy można usuwać/dodawać z/do dowolnego miejsca na liście.** Zatem algorytm powinien być w stanie zignorować te zmiany.


title: Wdrażanie aplikacji opartej na Qt w systemie Mac OS X

text: Napisałem aplikację wieloplatformową i z powodzeniem dystrybuowałem ją dla systemów Windows i Linux (i przetestowałem je na „czystych” systemach wirtualnych, bez zainstalowanego dodatkowego oprogramowania i/lub bibliotek). Skompilowałem już swoją aplikację na komputerze Mac, ale nie wiem, czy moja aplikacja będzie działać na innych komputerach Mac. Nie mam dwóch komputerów Mac, ponadto (o ile mi wiadomo) trudno jest zainstalować Mac OS X na maszynie wirtualnej z „legalnymi” dyskami lub bez konieczności wykonywania procesu podobnego do budowania Hackintosha, oznacza to, że nie mogę przetestować mojej aplikacji na maszynie wirtualnej (w VirtualBox). Może więc brzmieć pytanie: Czy jest jakiś sposób na upewnienie się, że moja aplikacja będzie faktycznie działać na innych systemach Mac (bez potrzeby korzystania z innego komputera)? Jako dodatkową uwagę napisałem swoją aplikację przy użyciu frameworka Qt.


title: Jak czysto napisać wieloetapowy proces z opiniami użytkowników i wielokrotnymi oddzwonieniami?

text: Kiedy masz jakiś proces, który ma kilka kroków i masz wiele punktów wejścia, kod dość szybko staje się brzydki. Zetknąłem się z integracją Facebooka w mojej aplikacji mobilnej: Użytkownik chce coś udostępnić. Zanim to się stanie, potrzebuję kilku rzeczy: 1. sesja (jeśli nie ma sesji FB, uruchom ją, zdobądź access_token ...)¨ 2. uprawnienia do ładowania, które posiadam (lub pobierz z pamięci podręcznej) 3. sprawdź, czy mam publikację uprawnienia dla tego użytkownika (jeśli nie, poproś o nie) Mając wszystko gotowe, mogę w końcu zadzwonić do Facebooka. Sposób, w jaki chcę, aby ta funkcja działała idealnie, to po prostu wywołanie czegoś w stylu `Facebook.post(... , successCallback, failureCallback)` Ale z tymi czterema operacjami asynchronicznymi wygląda to po prostu bałagan. Czy masz jakieś dobre wzorce, które mogą się przydać w tej sytuacji?


title: Mieszanie kodu deklaratywnego i imperatywnego (niejawne „testy jednostkowe” ?)

text: Cóż, nie jestem ekspertem, ale jako student ciekawią mnie języki i ich wzorce/cele projektowania. **Chciałbym wiedzieć, czy w poniższych przykładach brakuje jakichś punktów i dlaczego takie techniki nie są powszechnie stosowane w popularnych językach. Dlaczego lepszym pomysłem w prawdziwym programie jest jawne zdefiniowanie wszystkich testów jednostkowych, zamiast używania jakiegoś deklaratywnego kodu. dlaczego języki nie używają niektórych deklaracji jako testów i ogólnie implementacji? Po co dzielić to na dwie części?** Załóżmy, że masz następujące testy jednostkowe: attachRaises(avg([]), ValueError) attachEquals(avg([1], 1) attachEquals(avg([1, -2]), -.5) attachEquals(avg([1, 2]), .5) Jeśli weźmiesz ten pseudokod, def avg(items): if len(items) == 0: podnieś ValueError else if len(items) == 1 : return items[0] else: return sum(items)/len(items) większość części `avg` wydaje się nic nie robić lub niewiele więcej niż tylko zadeklarować sposób przejścia niektórych testów jednostkowych.Innymi słowy, dla mnie wydaje się to trochę jak powielanie kodu.Zwłaszcza pierwszy test wydaje się w tym przykładzie zbędny.Zastanawiam się, czy dobrym projektem byłoby pozbycie się niektórych testów jednostkowych w ten sposób: def avg(items) { len(items) = = 0 => podnosi ValueError len(items) == 1 => items[0] len(items) > 1 => sum(items)/len(items) (test) items == [1, -2] => $średnia == -.5 (test) pozycje == [1, 2] => $śr == .5 (test) śr(pozycje) <= sum(items) } W tym przykładzie (test) wskazuje, kiedy konkretny przypadek testowy nie jest użyteczny definicja (chociaż może nawet w rzadkich przypadkach mogą być użyte do optymalizacji). Oczywiście ten pseudokod nie jest dobrze zaprojektowany, ponieważ jest mniej czytelny niż pierwsza implementacja, ale myślę, że jest to wygodniejszy sposób deklarowania testów jednostkowych. Właściwie testy jednostkowe wydają się tutaj błędne, ponieważ nie robią nic poza testowaniem definicji. A ostatni test nie jest trywialny do wykonania. Ale można to wykonać na przykład, gdy uruchamiany jest inny test, który testuje kod, który ma w sobie `avg`, więc są szanse, że daje użyteczny zestaw parametrów testowych. Również na przykład ostatni test jednostkowy ma również drugorzędną rolę! Jeśli mam taki kod: if avg(a) <= sum(a) W ogóle nie jest konieczne ocenianie złożonej definicji, ponieważ w czasie wykonywania jeden z przypadków testowych implikuje to bezpośrednio. OK, w tym przypadku nie jest to prawdziwa optymalizacja (chociaż IDE może powiadomić użytkownika, że wyrażenie zawsze będzie prawdziwe, co jest przydatne). Wyobrażam sobie jednak, że istnieje wiele skomplikowanych przykładów, które można zoptymalizować w ten sposób, bez zmuszania dewelopera do testowania szczególnych przypadków w każdym miejscu, w którym są one istotne. Może lepszy przykład dla tej optymalizacji def power(a, n) { n == 0 => 1 n == 1 => a n > 1 => a * power(a, n - 1) (test) dla dowolnego (x ) power(a, n) % x == power(a % x, n) % x } Nie jest tajemnicą, że sprytny kompilator mógłby go użyć w wielu przypadkach, a sprytny interpreter/kompilator just-in-time może ich używać w znacznie większej liczbie przypadków. Aby lepiej zrozumieć testy i języki, jestem ciekaw, czy moje myśli są przydatne, a jeśli nie, to czego mi brakuje, a jeśli tak, to dlaczego popularne języki nie implementują takich wzorców.


title: Czy jest jakaś różnica w nauce OOP w różnych językach programowania?

text: Chcę się uczyć OOP. Znam Pythona i niewiele wiem o OOP. Ale kiedy szukam na forach hasła „naucz OOP”, zobaczyłem gościa, który powiedział, że „Python jest tak nowy, że nie możesz nauczyć się OOP na Pythonie. Powinieneś nauczyć się Java, a następnie zrozumieć OOP na Javie”. Czy to prawda? Czy jest jakaś różnica w rozumieniu OOP w różnych językach programowania? lubisz uczyć się w Javie, C#, C++, Perlu lub Pythonie?


title: Znajdź liczbę wystąpień słowa w macierzy 2D znaków

text: Mając dwuwymiarową macierz alfabetów, wyszukaj dane słowo we wszystkich kierunkach. Poniżej znajduje się przykład wyszukiwania słowa „ZESPÓŁ”: Liczba wystąpień wynosi 4 w macierzy poniżej. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/vj6us.png) Jakie jest najlepsze podejście do rozwiązania tego problemu? To nie jest słowo ze słownika. Po prostu sekwencyjne wyszukiwanie we wszystkich kierunkach.


title: Stały czas trwania Zadania muszą być zaplanowane w określonej liczbie kolejek

text: * Załóżmy, że mam 9 zadań z szacowanym czasem ich ukończenia oraz 3 kolejki, które przetwarzają te zadania – stanowi to jedną partię. Należy zauważyć, że wszystkie zadania są przydzielane do kolejki wcześniej, a nie w czasie wykonywania. Tak więc przy złym harmonogramie niektóre kolejki mogą pozostać bezczynne, podczas gdy inne nadal przetwarzają zadanie. * Wszystkie te zadania powinny być rozłożone w kolejkach w taki sposób, aby łączny czas wykonania wszystkich kolejek był prawie równy. Rozważ: 1. Poniżej Q2, Q3 ukończ w 15 minut i pozostań bezczynny, podczas gdy Q1 zajmie kolejne 10 minut. Partia 1: +------+----+----+----+ | # | Q1 | Q2 | Q3 | +------+----+----+----+ | 1 | 5 | 5 | 5 | | 2 | 15 | 5 | 5 | | 3 | 5 | 5 | 5 | +------+----+----+----+ | Czas | 25 | 15 | 15 | +------+----+----+----+ | Razem| 25 | +------+----+----+----+ 2.Teraz najlepiej byłoby rozdzielić zadania jako... +------+----+- ---+----+ | # | Q1 | Q2 | Q3 | +------+----+----+----+ | 1 | 15 | 5 | 5 | | 2 | - | 5 | 5 | | 3 | - | 5 | 5 | | 4 | - | 5 | 5 | +------+----+----+----+ | Czas | 15 | 20 | 20 | +------+----+----+----+ | Razem| 20 | +------+----+----+----+ * * * Wydaje się to być prostym problemem planowania, ale mam do czynienia z setkami takich zadań, podzielonych na wiele partii. Gdzie każda partia rozpocznie się dopiero po zakończeniu pierwszej. Więc potrzebowałbym jakiegoś algorytmu, aby zdecydować o harmonogramie. Jakieś pomysły..? Dzięki * * * **Aktualizacja:** _Dodawanie dodatkowych informacji na podstawie opinii..._ * Zadania w partii są stałe. * Nie ma zależności między zadaniami w partiach, ale istnieją zależności między partiami. _Więc możemy przyjrzeć się rozwiązaniu problemu dla jednej partii, a rozwiązanie będzie miało zastosowanie we wszystkich partiach._ * Problem w świecie rzeczywistym: modeluję problem z ładowaniem danych (ETL), a cały proces ładowania trwa 5-6 godzin, co ma kilka partii. Szukam sposobów na skrócenie ogólnego czasu.


title: Możliwości pracy w rozwoju OpenOffice.org

text: Jak wygląda rynek niestandardowych aplikacji lub skryptów korzystających z API OpenOffice.org? Jakiś czas temu zacząłem się w to zagłębiać. Praca w tym środowisku była dla mnie dość bolesna. Czy istnieje zapotrzebowanie na ten zestaw umiejętności? Mógłbym się tego trzymać, gdyby wydawało się, że można zarobić pieniądze.


title: Wyjątki łapią bałagan kodu i utrudniają jego odczytanie

text: Kiedy czytam dobrze napisany kod, który sprawdza, czy wszystkie dane wejściowe mają prawidłowy format i typ, a także wychwytują wszystkie rzeczy, które mogą pójść nie tak, trudno mi zrozumieć sedno tego, co robi program. Wydaje się, że ochrona przed nienormalnym przypadkiem przesłania normalny przypadek. Obejmuje to początek i koniec specjalnych przypadków tablicy, try-catch, using, obsługę null, 0, "" i wszystkie inne dziwne rzeczy. Jak mogę napisać kod, który jest przejrzysty, ale nie jest zaśmiecony nietypowymi zdarzeniami? Aby uczynić to trochę bardziej konkretnym, jak mogę to zrobić w C#?


title: Alternatywa dla Singletona, gdy D.I. nie jest opcją

text: Badałem to intensywnie i utknąłem. Piszę moduł Drupal, który korzysta z utworzonej przeze mnie klasy. Ta klasa jest klasycznym Singletonem - wystarczy tylko raz utworzyć instancję, ponieważ gromadzi garść danych z bazy danych. Zauważ, że mój potencjalny Singleton nie zaktualizuje żadnych danych w bazie - po prostu odczyta z istniejących danych. Pamiętaj też, że procesy poza kontekstem mojego programu mogą aktualizować dane. Wiem, że odpowiedź do domu brzmi: „użyj wstrzykiwania zależności”. Nie mogę jednak korzystać z Dependency Injection - Drupal używa hooków, a te hooki akceptują określone parametry. Tzn. nie mogę (według mojej wiedzy) w ten sposób wstawić obiektu. Powinienem zaznaczyć, że testowanie jest również moją troską (chociaż testowanie mojego modułu w Drupalu miało swoje własne wyzwania). Jestem jednak gotów zaakceptować, że Singleton może być tutaj mniejszym złem. Oto przykład: function mymod_block_view($zmienna) { //$zmienna jest wymagana przez drupal $obj = new Object() .... } function mymod_block_info() { ... $obj = new Object() } Moje opcje teraz mam użyć zmiennej globalnej (nie idealnej) lub Singletona (zgodnie z moimi badaniami również nie jest idealna, ale może być moją jedyną opcją). Czy mam jakieś inne opcje poza zadeklarowaniem nowego obiektu zmiennej wewnątrz każdej funkcji?


title: Jak pomóc śledzić identyfikatory używane zarówno w aplikacji, jak i w bazie danych?

text: Na przykład: 1. Mam ACL (listę kontroli dostępu) z kluczami w bazie danych, takimi jak `create_user` i `allow_booking_for_past_dates`. Każdy wpis ACL ma odpowiadającą mu nazwę metody lub funkcji w aplikacji. 2. Mam kilka klas „kontrolerów” dla aplikacji internetowej, z których każda może mieć jedno lub więcej odniesień w tabeli „strony” w bazie danych. W obu przypadkach za każdym razem, gdy wprowadzana jest zmiana w aplikacji, ktoś musi pamiętać o aktualizacji bazy danych i odwrotnie. Aktualizowanie aplikacji po modyfikacji bazy danych może być stosunkowo bezbolesne dzięki nazywaniu klawiszy tak, aby można je było łatwo znaleźć za pomocą funkcji wyszukiwania. Podobnie bezbolesne może być znajdowanie instancji identyfikatora w bazie danych. Cała reszta zwykle jest albo całkowicie zawarta w aplikacji (podklasy, pliki konfiguracyjne itp.) albo całkowicie w bazie danych (klucze podstawowe, klucze obce, indeksy itp.). Jak śledzić te identyfikatory, które łączą dwie domeny? Obecnie mamy dokument Word (wszystkich rzeczy) z tabelą zgrabnie opisującą nazwę klucza, gdzie go znaleźć i opis tego, co to jest. Wydaje się, że działa to lepiej niż podejście „zatwierdź to aplikacji, utwórz wpis w bazie i trzymaj kciuki za przyszłość”.


title: Logowanie w systemie rozproszonym

text: Mamy kilka serwerów aplikacji (i różnych aplikacji) działających na Amazon AWS, a naszą główną metodą rejestrowania jest połączenie statystyk, węgla/grafitu i systemu alertów opartego na metrykach wchodzących w skład węgla. Działa to świetnie w wielu różnych sytuacjach, ale czuję, że potrzebujemy czegoś innego, aby uzupełnić ten rodzaj rejestrowania. Coś, co nie służy tak bardzo do przesyłania strumieniowego lub wizualizacji, jak grafit, ale umożliwia łatwe wyszukiwanie według czasu/daty, typu błędu itp. Jakie są techniki, które sprawiają, że przeglądanie dzienników jest szybkie i skuteczne? Moją pierwszą myślą jest UDP wszystkie wiadomości rejestrujące na centralnym serwerze i umieszczanie ich w bazie danych (prawdopodobnie MongoDB). Czy to rozsądne podejście?


title: Test jednostkowy Wrapper (fasada?) Metoda

text: Muszę napisać testy jednostkowe dla niektórych zajęć, które rozwija moja grupa. Klasy są dość proste i nie jestem pewien, jak najlepiej je przetestować. public class MyObjectRegistry { private myDataSetMapper = new MyDataSetMapper(); public boolean StoreObjects(list<MyObject> myObjectList) { myDataSetMapper.StoreObjects(myObjectList); } } public class MyDataSetMapper { public boolean StoreObjects(list<MyObject> myObjectList) { for(MyObject myObj: myObjectList) { boolean result = StoreObject(myObj); } } private boolean StoreObject(MyObject myObject) { //Przechowywanie obiektu w bazie danych } } Moje pytanie brzmi więc, jak przetestować metody `MyObjectRegistry.StoreObjects` i `MyDataSetWrapper.StoreObjects`, ponieważ nie ma żadnej innej logiki poza `foreach ` pętla i wywołanie innej metody. Rozejrzałem się po Internecie i stwierdziłem, że myślę, że patrzę na klasę/metodę „fasady”, ale nadal nie wiem, co powinienem przetestować/potwierdzić w metodzie testowej.


title: Jak ważna jest nauka UML dla programisty OO?

text: Studiując samodzielnie OOP często spotykam się z diagramami klas UML. Rozumiem je, ale nie do końca wiem, jak je napisać. To znaczy, nie do końca wiem, co oznacza każdy rodzaj strzały i tym podobne. 1- Jak ważne jest poznanie „języka” diagramów klas UML? Jeśli jest to coś wartego czasu, czy mógłbyś skierować mnie do dobrego, spójnego, ale wystarczającego źródła? 2- Jeśli/kiedy nauczę się rysować diagramy klas UML: Czy wszystkie drobne niuanse są ważne, czy też każdy programista rysuje diagramy UML trochę inaczej?


title: Co jest lepsze, MBA czy MIS, zaraz po studiach lub przerwie?

text: Ogólnie rzecz biorąc, jeśli świeżo upieczony absolwent informatyki/inżynierii oprogramowania (licencjat) chce zostać kierownikiem projektu za 5 lat, na co powinien się zdecydować? A. MBA w niepełnym wymiarze godzin bezpośrednio po ukończeniu studiów (w tym samym czasie, pracując jako programista) B. Poczekaj trzy lata i idź na studia magisterskie z komputerowych systemów informatycznych (co wymaga 3-letniej przerwy) Dziękuję za radę . Chciałem, aby to dotyczyło jak największej liczby studentów, którzy wkrótce ukończą studia w naszej dziedzinie.


title: Algorytm wstawiania do posortowanego podzbioru

text: „A” to posortowana lista. „B” to posortowana lista i podzbiór „A”. Jeśli element jest wstawiany do „A” o indeksie „i”, jaki jest najefektywniejszy sposób określenia prawidłowego indeksu „i” dla jego pozycji w „B”? Biorąc pod uwagę fakt, że obie listy są posortowane i wiemy, że „B” jest podzbiorem „A”, myślę, że powinniśmy być w stanie opracować całkiem wydajny algorytm, ale nie jestem zadowolony z tego, co wymyśliłem dotychczas. Dziękuję!


title: Czy Go może współpracować z innymi interfejsami użytkownika niż Web?

text: Go wydaje się być stworzony do robienia rzeczy po stronie serwera dla sieci. Co mógłbym zrobić, gdyby mój szef nagle podyktował, że chce mieć graficzny interfejs użytkownika Windows dla aplikacji Go?


title: Ogólnie rzecz biorąc, czy aplikację opartą na Javascript (iUI) można wdrożyć bez serwera WWW?

text: Załóżmy, że mam aplikację opartą na JavaScript napisaną w iUI lub Kendo UI. Czy można go spakować w taki sposób, aby działały lokalnie bez serwera WWW? Mam kilka aplikacji webowych, które po przeróbce i HTML5 LocalStorage mogą ewentualnie pracować offline (w samolocie lub metrze). Moje doświadczenie w programowaniu urządzeń mobilnych ogranicza się do Blackberry Playbook, co zrobiłem tylko po to, by kilka lat temu otrzymać darmowy. Platforma ta obsługuje "aplikacje mobilne" oparte na HTML oraz dodatkowy zestaw zadań do pakowania poza pasmem. **Pytanie** * Czy inne platformy (iPhone, Android itp.) są podobne pod tym względem, że mogę po prostu spakować aplikację opartą na iUI, aby mogła działać w trybie offline lub na serwerze internetowym?


title: Jakie są konwencje grupowania/nazewnictwa dla pakietów opartych na źródłach?

text: Czy istnieją jakieś konwencje, których można użyć, gdybym miał rozpowszechniać źródło dla zbudowanej przeze mnie biblioteki C++? Plan polega na użyciu CMake jako systemu kompilacji, ale przez resztę zastanawiałem się, jakie są standardy w zakresie nazewnictwa plików/folderów/podfolderów, ścieżek dołączania itp. To, co udało mi się do tej pory: * Umieścić wszystko w `$prefiksie ` folder pod `$prefix/bin`, `$prefix/include/libname` i `$prefix/lib`. * Nie używaj wielkich liter w nazwie libname. Czy wszystkie wewnętrzne dołączenia powinny zawierać folder `libname`? Np. powiedzmy, że w projekcie są dwa pliki: `principal.h` i `secondary.h`. Czy w pliku `principal.h` deklaracja włączenia dla `secondary` powinna brzmieć: `#include "secondary.h"` czy `#include "libname/secondary.h"`? Czy istnieją inne standardy, których należy przestrzegać? Czemu?


title: Jak mam zabrać się za debugowanie błędu PHP?

text: Idę z .NET do PHP. Bawię się długim plikiem napisanym przez kogoś innego (o nazwie „cryptographp.inc.php”). Tworzy i zwraca obraz do przeglądarki. Chcę pokazać obraz, który zwraca plik na mojej stronie Cryptocode/index.php -- w ten sposób: <?php include './cryptographp.inc.php'; ? Jestem przyzwyczajony do przechodzenia przez kod w Visual Studio. Jakich technik używaliby ludzie w świecie PHP?


title: Jakie są przykłady komentarzy, które mówią dlaczego, a nie jak lub co?

text: Przede wszystkim w tym pytaniu chciałbym trzymać się z dala od polemiki na temat tego, czy komentowanie kodu źródłowego jest dobre czy złe. Po prostu próbuję lepiej zrozumieć, co ludzie mają na myśli, mówiąc o komentarzach, które mówią DLACZEGO, CO lub JAK. Często spotykamy się z wytycznymi, takimi jak „Komentarze powinny informować DLACZEGO; sam kod powinien informować JAK”. Łatwo zgodzić się ze stwierdzeniem na abstrakcyjnym poziomie. Jednak ludzie zwykle odrzucają to jak dogmat i opuszczają pokój bez dalszych wyjaśnień. Widziałem to używane w tak wielu różnych miejscach i kontekstach, że wygląda na to, że ludzie mogą się zgodzić z hasłem, ale wydaje się, że mówią zupełnie o różnych rzeczach. Wracając więc do pytania: jeśli komentarze powinny mówić DLACZEGO, o czym to DLACZEGO mówimy? Czy to jest powód, dla którego ten fragment kodu istnieje? Czy to właśnie powinien robić ten fragment kodu? Byłbym naprawdę wdzięczny, gdyby ktoś mógł podać jasne wyjaśnienie, a następnie dodać kilka dobrych przykładów (złe przykłady nie są naprawdę potrzebne, ale można je dodać dla kontrastu). Istnieje wiele pytań dotyczących tego, czy komentarze są dobre, czy złe, ale żadne nie odnosi się do konkretnego pytania, jakie są dobre przykłady komentarzy, które mówią DLACZEGO.


title: zmiana wartości prywatnego członka klasy w c++ bez użycia funkcji member lub friend

text: Za pomocą wskaźnika mogę zmodyfikować prywatną wartość klasy w poniższym kodzie. Czy narusza to koncepcję C++, że prywatny element członkowski może być modyfikowany tylko przez funkcje członka lub zaprzyjaźnione? #include<iostream> przy użyciu przestrzeni nazw std; demo klasy { prywatne: int info; publiczne: demo() { info=10; } void print_info() { cout<<info; } }; int main() { demo ob; int* ptr=(int*)&ob; *ptr=20; ob.print_info(); zwróć 0; }


title: Czy czerpiesz korzyści z B-Tree w zarządzanym języku?

text: Rozumiem, że jedną z kluczowych cech B-Tree (i B + Tree) jest to, że jest on zaprojektowany tak, że rozmiar jego węzłów jest pewną wielokrotnością rozmiaru bloku dowolnego nośnika, na którym przechowywane są dane. Biorąc pod uwagę, że w języku zarządzanym przez pamięć, takim jak java/c#, tak naprawdę nie mamy dostępu do _jak_ , _kiedy_ i _w jakiej kolejności_ , dane są dostępne z dysku... czy nadal możemy przewidywalnie skorzystać z głównej zalety tej struktury danych ?


title: Liczba klas w przestrzeni nazw — zapach kodu?

text: Mam bibliotekę C#, która jest używana przez kilka plików wykonywalnych. W bibliotece jest tylko kilka przestrzeni nazw i właśnie zauważyłem, że jedna z przestrzeni nazw zawiera sporo klas. Zawsze unikałem posiadania zbyt wielu klas w jednej przestrzeni nazw z powodu kategoryzacji i ponieważ podświadomie uważam, że głębsza hierarchia przestrzeni nazw wygląda „ładniej”. Moje pytanie brzmi: czy ktoś inny uważa to za „zapach kodu”, gdy przestrzeń nazw ma wiele klas — nawet jeśli klasy są ze sobą powiązane? Czy włożyłbyś dużo wysiłku, aby znaleźć niuanse w klasach, które pozwalają na podkategorię?


title: Organizacja zespołu dla małego zespołu

text: Niewielu przyjaciół (3) i ja założyliśmy małą firmę. Ale nie byliśmy pewni, jak się zorganizować, bo każdy będzie pracował w domu io różnych porach dnia. Jak powinniśmy się zorganizować pod względem pracy do wykonania, błędów itp.? Czy powinniśmy stosować metodykę zwinną, taką jak „dostosowana” dla naszego małego zespołu?


title: Czy IDE powinno zawierać element gry?

text: Od niedawna bardzo zainteresowałem się poważnymi grami. Dzisiaj natknąłem się na ten mały klejnot: osiągnięcia studia wizualnego i dało mi to do myślenia. Właściwie myślę, że dodanie takiego komponentu do gier do IDE może być bardzo pomocne i stymulujące, aby poprawić jakość kodu i zasadniczo uczynić bardziej interesującym pisanie lepszego kodu i dobre wykorzystanie IDE. Myślisz o tym? **Edytuj:** dla jasności: link zawiera zabawne podejście do tematu. Interesuje mnie cała idea dodania do pomysłu elementu gamingowego, np. osiągnięć stymulujących stosowanie najlepszych praktyk programistycznych. Nie różni się tak bardzo od tego, co robi StackOverflow.


title: Jak używać PostgreSQL na AWS - Ubuntu 11.10

text: Jestem bardzo nowy w przetwarzaniu w chmurze, Linuksie i PostgreSQL, więc jeśli to głupie pytanie, przepraszam. Udało mi się stworzyć instancję m1.large z systemem Ubuntu 11.10, połączyć się przez Putty SSH i zainstalować PostgreSQL (`sudo apt-get install postgresql`), ale na tym się nie udało. Moim celem jest uruchomienie kilku skryptów python web-scraping, które napisałem na tej instancji (aby nie zużywać całej naszej przepustowości (obecnie mniejsza firma)) i wstawić zeskrobane dane do tabeli PostgreSQL na instancji a później pobrać te dane do przechowywania na naszym lokalnym serwerze (jak słyszałem, AWS EBS jest zawodny i nie chcę ryzykować). Jak mogę skonfigurować PostgreSQL na mojej instancji AWS? Jak mogę uzyskać dostęp do danych z mojego komputera? Obecnie używam PgAdmin3 do zarządzania PosgreSQL na naszym lokalnym serwerze. Czy mogę używać tego samego interfejsu do zarządzania PostgreSQL na mojej instancji AWS? Wszelkie sugestie, rozwiązania, linki itp. są mile widziane. I znowu, jeśli to głupie pytanie, przepraszam. Dziękuję!


title: Radzenie sobie z zupą z kręconymi klamrami

text: Od lat programowałem w C# i VB.NET, ale przede wszystkim w VB. Zmieniam karierę w kierunku C# i ogólnie bardziej lubię C#. Jednym z problemów, który mam, jest zupa z kręconymi nawiasami. W VB każde słowo kluczowe struktury ma pasujące słowo kluczowe close, na przykład: Namespace ... Class ... Function ... For ... Using ... If ... ... End If If ... .. End If End using Next End Function End Class End Namespace Ten sam kod napisany w C# jest bardzo trudny do odczytania: namespace ... { class ... { function ... { for ... { using ... { if ... { ... } if ... { ... } } } // czekaj... jaki to poziom? } } } Będąc tak przyzwyczajonym do VB, zastanawiam się, czy istnieje technika stosowana przez programistów w stylu c, aby poprawić czytelność i zapewnić, że Twój kod znajdzie się we właściwym „bloku”. Powyższy przykład jest stosunkowo łatwy do odczytania, ale czasami na końcu fragmentu kodu mam 8 lub więcej poziomów nawiasów klamrowych, co wymaga przewinięcia kilku stron w górę, aby dowiedzieć się, który nawias kończy interesujący mnie blok w.


title: Dlaczego potrzebuję SCRUM zamiast mniej formalnego, lżejszego procesu dla mojego zespołu?

text: Chciałbym rozpocząć moje pytanie od stwierdzenia, że rozumiem, że SCRUM lub jego pochodna jest prawdopodobnie dobrym sposobem na zarządzanie rozwojem oprogramowania. Wygląda na to, że wszystkie duże firmy i moi menedżerowie używają go lub korzystali z niego, a ja nie mogę się spierać z całym tym doświadczeniem. Jednak staram się zrozumieć „dlaczego” i całe czytanie, a nawet moje oficjalne szkolenie SCRUM w pracy nie wykonuje za mnie pracy. To tylko retoryka. Więc przychodzę tutaj szukając odpowiedzi. Do tej pory rozwijałem się w zespołach 4-5 osobowych bardzo skutecznie, całkowicie samodzielnie zorganizowany i bez potrzeby szkolenia, metodologii czy specjalnego oprogramowania. Tylko dyskusje w kostkach, spotkania ad hoc i indywidualne przeglądy kodu. Jestem teraz w pracy, gdzie mówi się nam, że SCRUM jest drogą do zrobienia i wszystko, co się z tym wiąże. Kiedy opisują mi SCRUM, czytam takie rzeczy: * Osoby i interakcje nad procesami i narzędziami * Działające oprogramowanie nad obszerną dokumentacją * Współpraca z klientem nad negocjacjami umowy * Reagowanie na zmianę zamiast podążania za planem To świetnie, ale wszystko to wydaje się być zdrowy rozsądek dla mnie. Dlaczego to wymagało skodyfikowania? Następnie dowiaduję się, że metodologia pomaga nam reagować na zmiany. Jakie **konkretne** aspekty SCRUM pozwalają mi być tak elastycznym, że wcześniej nie osiągałem tego dzięki spotkaniom ad hoc, dyskusjom na temat modułów i spotkaniom dotyczącym planowania deweloperów? Wyjaśniają potrzebę posiadania działającego produktu co dwa tygodnie lub sprintu. W moim konkretnym projekcie nie ma „klienta”, oprogramowanie nie zostanie ukończone przez rok lub dłużej, aw międzyczasie prawdopodobnie będę przechodził do wyższej kadry zarządzającej co miesiąc lub mniej. Skąd więc wyraźna potrzeba dostarczania co drugi tydzień? Podkreślają znaczenie spotkania planowania sprintu, podczas którego cały zespół układa historie i zadania na kolejny sprint. Nie różni się to od zaimprowizowanych spotkań planistycznych, które miałem w przeszłości. Dlaczego musi się to odbywać co drugi poniedziałek i dlaczego cały zespół musi być w to zaangażowany? Rozumiem koncepcję każdego członka „posiadającego” produkt, ale faktem jest, że tylko kilka osób może naprawdę przyczynić się do rozbicia każdej historii na zadania, podczas gdy reszta po prostu patrzy bezczynnie. Ponownie rozumiem, że za tym procesem stoi większość ludzi, więc to musi działać, a ja muszę się zaangażować. Chciałbym tylko zrozumieć dlaczego. Czy moim problemem jest to, że już praktykuję te rzeczy i po prostu nie lubię ich niepotrzebnie kodyfikować? A może jeszcze nie dostrzegłem zalet tych technik, ponieważ są one wykonywane niewłaściwie? Wszelkie **prawdziwe** dane osobowe lub porady na ten temat, w przeciwieństwie do gadek, do których jestem przyzwyczajony, byłyby niezwykle mile widziane.


title: Czy możesz nauczyć się programowania OO bez procedur?

text: Widziałem wiele pytań dotyczących tego, czy ktoś powinien najpierw nauczyć się proceduralnego, czy OO. Ale czy to w ogóle możliwe? Czy możesz nauczyć się programowania obiektowego bez wcześniejszego zrozumienia programowania proceduralnego? Oczywiście mogą najpierw nauczyć się programować w języku OO, takim jak Java lub Python. Ale możesz pisać Fortran w dowolnym języku. Mam wrażenie, że tacy początkujący programiści przynajmniej na początku piszą kod proceduralny w języku OO. Ale co myślisz?


title: Czy Powershell może zrobić coś, czego nie potrafi Iron Ruby?

text: Jestem rozdarty między nauczeniem się trochę Powershella, a po prostu wykorzystaniem mojej istniejącej wiedzy o Ruby do różnych rzeczy związanych ze skryptami Windows, które robię od czasu do czasu. Powershell wygląda niesamowicie potężnie, ale na pierwszy rzut oka składnia jest dość brzydka. Czy jest coś, co Powershell może zrobić, czego nie mogłem po prostu zrobić z Iron Ruby?


title: Plusy i minusy pracy naprawdę zdalnej

text: Czy zaszkodzi mojej karierze programisty/przedsiębiorcy, jeśli przeprowadzę się do odległej lokalizacji? Czy mam lepsze perspektywy zawodowe, jeśli mieszkam w rozwiniętym kraju lub jeśli mieszkam na odległym końcu świata, mając tylko połączenie internetowe i laptop?


title: Dlaczego niektóre typy danych są przestarzałe, a inne przestarzałe?

text: Dlaczego niektóre typy danych lub funkcje są przestarzałe w nowszej wersji interfejsu API, a inne są oznaczone jako przestarzałe? Dlaczego nie uczynić ich wszystkich przestarzałymi lub przestarzałymi?


title: Czy jako programista zależy Ci, jaką metodę stosuje proces rozwoju?

text: Jestem na rynku pracy i mam zestaw priorytetów do mojej następnej pracy, w tym wynagrodzenie, branżę itp. Jedyną rzeczą, której nigdzie nie ma na mojej liście wymagań, jest metodologia procesu rozwoju. Czuję, że moją pracą jest tworzenie oprogramowania i postrzegam strukturę procesu jako coś, do czego mogę się dostosować, niezależnie od tego, czy jest to scrum, wodospad, czy cokolwiek innego. Czy metodyka procesu rozwoju jest dla Ciebie priorytetem?


title: Czy eliminacja błędów „@” jest prawidłową techniką testowania opcjonalnego klucza tablicy?

text: _Rarst_ i ja debatowaliśmy w trybie offline na temat użycia operatora tłumienia błędów '`@`' w PHP, specjalnie do użycia w celu sprawdzenia istnienia _"opcjonalnych"_ kluczy tablicy, tj. kluczy tablicy, które są tutaj używane jako przełącznik ich brak w tablicy jest funkcjonalnie równoważny tablicy mającej klucz o wartości równej `false`. Oto pseudokod dla tego scenariusza: function do_something( $args = array() ) { if ( @$args['switch'] ) { // Zrób coś z tym przełącznikiem } // kontynuuj... } vs. to podejście: function do_something( $args = array() ) { if ( ! empty( $args['switch'] ) && $args['switch'] ) { // Zrób coś z tym przełącznikiem } // kontynuuj. .. } Oczywiście w większości przypadków użycia pomijanie błędów nie byłoby _Dobrą rzeczą(tm)_. Jednak w _tym_ przypadku użycia, w którym tablica jest przekazywana z elementem opcjonalnym, wydaje mi się, że jest to w rzeczywistości bardzo dobra technika, ale mogę się mylić i chciałbym poznać opinie innych na ten temat, zanim podejmę decyzję. Wiem, że istnieją rzekome spadki wydajności związane z użyciem pierwszego podejścia, ale chciałbym wiedzieć, jak wypada w porównaniu z alternatywą i czy te spadki wydajności naprawdę mają znaczenie w rzeczywistych scenariuszach? PS Postanowiłem to opublikować, ponieważ po przedyskutowaniu tego offline z Rarstem zadał on tutaj bardziej ogólne pytanie na temat programistów, ale tak naprawdę nie podał szczegółowego przykładu konkretnego przypadku użycia, o którym dyskutowaliśmy. A ponieważ jestem prawie pewien, że będzie chciał użyć odpowiedzi bez kontekstu na to inne pytanie jako uzasadnienia, dlaczego powyższe jest _"złe"_, zdecydowałem, że muszę uzyskać opinie na temat _tego konkretnego przypadku użycia_.


title: Sugestie dotyczące biblioteki GUI w Haskell

text: Jak podaje sama Haskell Wiki: > Istnieje duża liczba bibliotek GUI dla Haskella. Niestety nie ma standardowego > i wszystkie są mniej lub bardziej niekompletne. Ogólnie rzecz biorąc, licówki niskopoziomowe > idą dobrze, ale są na niskim poziomie. Abstrakcje wysokiego poziomu są > dość eksperymentalne. Potrzebna jest wspierana biblioteka GUI > średniego poziomu. Profesor z mojej uczelni poprosił mnie i trzy inne kierunki informatyki o rozważenie pracy nad biblioteką GUI dla Haskella. Jego początkowym pomysłem na projekt było napisanie warstwy na wierzchu OpenGL, która naśladowałaby bibliotekę morficzną znalezioną w Smalltalk; jest to jednak tylko sugestia i zdecydowanie warto rozważyć inny system. To prowadzi nas do rzeczywistego, wieloczęściowego pytania. 1. Do jakiego poziomu abstrakcji powinna dążyć nasza biblioteka? Haskell Wiki wydaje się mocno wskazywać, że preferowana byłaby biblioteka GUI średniego poziomu; jednak biblioteka wysokiego szczebla byłaby nadal mile widziana. 2. Na czym powinna być zbudowana nasza biblioteka? (np. OpenGL) 3. Jaką istniejącą bibliotekę GUI chciałbyś zobaczyć w naszej bibliotece naśladującej (jeśli w ogóle) i dlaczego? (np. PyGame, Morphic, Swing, itp.) 4. Jakich funkcji chciałbyś, aby nasza biblioteka zaimplementowała lub których chciała uniknąć? Na przykład dobrzy ludzie w Gnome mogą argumentować, że przycisk minimalizacji jest niepotrzebny. 5. Czy masz jakieś ogólne sugestie? 6. Jaką mądrą nazwę nadałbyś tej wyimaginowanej bibliotece? (np. HOT – Haskell Opengl Toolkit; HAWT – Haskell Advanced Windowing Toolkit)


title: Przeprowadzka z małej do dużej firmy

text: Czy ktoś ma jakieś wskazówki, przemyślenia, ostrzeżenia lub ogólną mądrość dla programisty aplikacji/bazy danych, który przechodzi z firmy wielkości start-upu do dużej organizacji? Przykłady myśli obejmowałyby takie rzeczy, jak: * Jak mogę inaczej współdziałać z łańcuchem zarządzania? * Czy widzisz trendy w jakości lub szybkości rozwoju, które różnią się między dużymi i małymi? * Myśli na temat rozwoju zespołu. * Aspekty społeczne. * Coś jeszcze. **Dodatek:** Czy ktoś ma jakieś osobiste historie i doświadczenia, którymi mógłby się podzielić z podobnym ruchem? Daj mi znać, czy mogę wyjaśnić w jakikolwiek sposób. Doceniam wszelkie myśli!


title: Modele wątków podczas rozmowy z urządzeniami sprzętowymi

text: Podczas pisania interfejsu do sprzętu przez magistralę komunikacyjną, synchronizacja komunikacji może czasami mieć krytyczne znaczenie dla działania urządzenia. W związku z tym programiści często uruchamiają nowe wątki w celu obsługi komunikacji. Może to być również okropnym pomysłem, aby mieć całą masę wątków w systemie, aw przypadku, gdy masz wiele urządzeń sprzętowych, możesz mieć wiele wątków, które są poza kontrolą głównej aplikacji. Z pewnością często zdarzają się dwa wątki na urządzenie, jeden do czytania i jeden do pisania. Próbuję określić zalety i wady dwóch różnych modeli, o których myślę, i bardzo chciałbym uzyskać pomoc społeczności programistów. 1. Każda instancja urządzenia otrzymuje uchwyty swoich własnych wątków (lub współdzieli wątek dla urządzenia komunikacyjnego). Wątek może istnieć do pisania i jeden do czytania. Żądane zapisy do urządzenia z interfejsu API są buforowane i przetwarzane przez wątek zapisujący. Wątek odczytu istnieje w przypadku blokowania komunikacji i używa wywołań zwrotnych w celu przekazania odczytanych danych do aplikacji. Czas komunikacji może być obsługiwany przez wątek komunikacyjny. 2. Urządzenia nie mają własnych wątków. Zamiast tego żądania odczytu i zapisu są kolejkowane/buforowane. Aplikacja następnie wywołuje funkcję „DoWork” w interfejsie i umożliwia wszystkim odczyt i zapis oraz uruchamia ich wywołania zwrotne. Czas jest obsługiwany przez aplikację, a kierowca może zażądać wywołania z określoną częstotliwością. Zalety pozycji 1 obejmują dokładniejszą kontrolę czasu na poziomie komunikacji kosztem kontroli nad tym, co dzieje się na wyższym poziomie aplikacji (co w przypadku systemu czasu rzeczywistego może być straszne). Zalety pozycji 2 obejmują lepszą kontrolę nad harmonogramem całego systemu dla aplikacji, kosztem umożliwienia każdemu kierowcy prowadzenia własnej działalności. Jeśli ktoś ma doświadczenie z tymi scenariuszami, chciałbym usłyszeć kilka pomysłów na zastosowane podejścia.


title: Jak uczyć niezależności

text: Na moich zajęciach z informatyki IB jestem rutynowo pytany przez... prawie każdy, jak zrobić X lub zaimplementować Y. Jestem jedyną osobą z dużym doświadczeniem programistycznym na zajęciach i nie muszę mieć nic przeciwko uczeniu ludzi o programowaniu, ale tak wiele pytań można po prostu rozwiązać, przeprowadzając małe śledztwo. W jaki sposób mógłbym spróbować nauczyć moich kolegów, jak być samodzielnymi programistami? Wszystko, o czym naprawdę myślę, to bycie ninja Google i nauka obsługi API.


title: Najlepszy język lub narzędzie do automatyzacji żmudnych zadań ręcznych

text: Wszyscy mamy zadania, które pojawiają się od czasu do czasu, a naszym zdaniem lepiej byłoby napisać skrypt lub zautomatyzować niż robić ręcznie. Oczywiście niektóre narzędzia lub języki są do tego lepsze niż inne - nikt (przy zdrowych zmysłach) nie wykonuje jednorazowej pracy polegającej na odwoływaniu się do kilku list tekstowych, które ich kierownik projektu właśnie im dał w asemblerze, na przykład. Jakie narzędzie lub język poleciłbyś do tego rodzaju ogólnych, szybkich i brudnych prac, o których wykonanie jesteś proszony, gdy czas (zamiast elegancji) jest najważniejszy? Tło: Jestem byłym programistą, obecnie kierownikiem ds. rozwoju PM, chcącym nauczyć się nowego języka dla zabawy. Jeśli mam się czegoś nauczyć, to chciałbym, żeby było to przydatne, a taki przypadek użycia jest najbardziej prawdopodobny.


title: Czy tworzenie klasy, która będzie miała tylko jedną instancję, to zły pomysł?

text: Czy tworzenie klasy, która będzie tworzona tylko raz, jest złą praktyką/projektem kodowania? Mam kilka zmiennych i funkcji, które można zgrupować w ramach klasy, aby „dobrze wyglądały” (z braku lepszego opisu), ponieważ są one nieco powiązane, ale mogą to być po prostu zmienne globalne i funkcje globalne. (Btw, używam JavaScript, AngularJS, Express, MongoDB.)


title: Oznaczanie konkretnych fragmentów drastycznie zmienionego kodu open source

text: Wziąłem mały kawałek kodu open-source, około stu linijek, i stwierdziłem, że z jakiegoś powodu zmodyfikowałem go tak drastycznie, że mój wynik końcowy zasadniczo nie przypomina oryginału. Może jedna lub dwie linie i kilka nazw zmiennych są przenoszone, ale różnica to tylko jeden lub więcej dużych kawałków `-`, po których następują duże kawałki `+`. Jeśli teraz rozprowadzam swój kod, wydaje mi się jasne, że powinienem ogólnie przyznać oryginalnemu autorowi za zapewnienie podstaw i dołączyć licencję, na podstawie której nabyłem kod. Zastanawiam się jednak, jakie są moje obowiązki w wymiarze społecznym czy technicznym oznaczania konkretnych zmian. Czy niegrzecznie przeinaczam pracę oryginalnego autora, mówiąc, że moja wywodzi się z niej bez wskazywania konkretnych linii, które zostały przeniesione? Czy będzie pomocne dla innego programisty przeglądającego moją wersję, jeśli dołączę komentarze z adnotacjami, co zachowałem i dlaczego? Użyłem cudzego kodu jako punktu wyjścia, biorąc przede wszystkim idee, a nie treść. Ignorując wszelkie aspekty prawne*, jaką precyzyjną, ukierunkowaną dokumentację zmian najlepiej byłoby dostarczyć? * * * Jaka jest właściwa etykieta wydawania kompletnej przeróbki istniejącego projektu? jest ściśle powiązany, ale wybrałem już opcję 1. Etyka i najlepsze praktyki przy forkowaniu bazy kodu są również powiązane, ale nie odnoszą się do specyfiki atrybucji. * * * *Różne aspekty zostały już omówione tutaj.


title: Projekty do wyprowadzania do arkusza kalkulacyjnego

text: Pracuję nad projektem, w którym mamy za zadanie zebrać i wyprowadzić różne dane do arkusza kalkulacyjnego. Mamy mnóstwo problemów z plikiem zawierającym kod do napisania arkusza kalkulacyjnego. Komórka, do której należą dane, jest zakodowana na sztywno, więc za każdym razem, gdy musisz coś dodać na środku arkusza kalkulacyjnego, musisz zwiększyć lokalizację wszystkich pól znajdujących się po tym w kodzie. Istnieją losowe puste wiersze, aby dodać dopełnienie między sekcjami i podsekcje w sekcjach, więc nie ma prawdziwego wzorca, który moglibyśmy powtórzyć. Zasadniczo za każdym razem, gdy musimy coś dodać lub zmienić w arkuszu kalkulacyjnym, wymaga to wielu długich i żmudnych godzin. Cały kod znajduje się w tym jednym dużym pliku, zhakowanym razem w Perlu. Wymyśliłem kilka rozwiązań OO, ale nie jestem za bardzo obeznany z programowaniem OO w Perlu i wszystkie moje próby nie były świetne, więc jak dotąd unikałem tego. Zasugerowałem, aby obsłużyć tę sekcję programu w bardziej przyjaznym dla OO języku, ale najwyraźniej nie możemy. Zasugerowałem też, żebyśmy zrezygnowali z całego pomysłu na arkusz kalkulacyjny i po prostu przenieśli się na stronę internetową, ale tego też nie możemy zrobić. Pracujemy nad tym projektem od kilku miesięcy i za każdym razem, gdy musimy zmienić ten plik, wszyscy się go boimy. Myślę, że czas zacząć refaktoryzację. Jednak nawet nie wiem, co mogłoby ułatwić pracę z tym plikiem. Sposób formatowania danych wyjściowych sprawia, że muszą one być nieco zakodowane na sztywno. Zastanawiam się, czy ktoś ma wgląd w jakieś wzorce projektowe lub techniki, których użył do rozwiązania podobnego problemu. Jestem otwarta na wszelkie pomysły. Mile widziane są konkretne odpowiedzi dotyczące Perla, ale interesują mnie również rozwiązania językowe.


title: Jak zrefaktoryzować program OO w funkcjonalny?

text: Mam trudności ze znalezieniem zasobów dotyczących pisania programów w stylu funkcjonalnym. Najbardziej zaawansowanym tematem, jaki udało mi się znaleźć w sieci, było użycie typowania strukturalnego w celu ograniczenia hierarchii klas; większość zajmuje się tylko tym, jak używać map/fold/reduce/etc do zastąpienia pętli imperatywnych. To, co naprawdę chciałbym znaleźć, to dogłębne omówienie implementacji OOP nietrywialnego programu, jego ograniczeń i sposobu refaktoryzacji w stylu funkcjonalnym. Nie tylko algorytm lub struktura danych, ale coś, co ma kilka różnych ról i aspektów – być może gra wideo. Nawiasem mówiąc, przeczytałem Programowanie funkcjonalne w świecie rzeczywistym autorstwa Tomasa Petricka, ale chcę więcej.


title: Zintegrować projekt w języku Python z aplikacją konsolową Visual Studio C++?

text: Mam teraz **projekt w Pythonie**, który jest odpowiedzialny za generowanie danych symulacyjnych oraz wizualizację symulacji i przetworzonych danych. **Aplikacja konsolowa C++** jest już dostępna w moim programie Visual Studio. **Sekwencja przetwarzania** wygląda następująco: 1. Projekt Pythona generuje surowe dane do pliku `data.txt`. 2. Aplikacja konsolowa Visual Studio C++ pobiera plik `data.txt` i przetwarza dane, a na końcu wyprowadza `results.txt`. 3. Projekt Pythona pobiera plik `results.txt` i wizualizuje go za pomocą `matplotlib`. Teraz robię to ręcznie i działa idealnie ok na jeden bieg. Jednak staje się to niezwykle kłopotliwe, gdy chcę mieć kilka biegów. **Pytania:** 1. Jak mogę je ze sobą zintegrować? Zintegrować projekt Pythona z Visual Studio lub zintegrować aplikację konsolową C++ ze Spyderem (moje IDE Pythona)? 2. Obecnie ręcznie wprowadzam parametry debugowania we właściwości debugowania aplikacji konsoli C++. Jak mogę to zrobić automatycznie? tj. Po tym, jak projekt Pythona wygeneruje `data.txt`, `data.txt` jest automatycznie pobierany jako parametry przez aplikację konsolową C++?


title: Czy są jakieś powody, aby nie buforować całej witryny na stałe?

text: Piszę prostą platformę blogową. Aplikacja odczytuje zestaw statycznych plików, które są artykułami na blogu, i udostępnia je. **Jedyny** czas, w którym jakakolwiek treść w witrynie ulegnie zmianie, to dodanie nowego artykułu lub zmiana istniejącego artykułu. Zamierzam załadować 100% zawartości do pamięci aplikacji i aktualizować ją tylko wtedy, gdy zmienią się pliki statyczne. Tj. stała pamięć podręczna. W przypadku prostego bloga statyczne pliki nigdy nie będą miały więcej niż kilka MB, więc pamięć aplikacji nie będzie problemem. Czy są jakieś powody, aby tego nie robić? I dlaczego platformy blogowe (/inne) z treścią, która zmienia się tylko w określonych odstępach czasu, nie używają tej metody?


title: Zalecane rozwiązania do integracji iOS z .NET w warstwie usług

text: Tworzę aplikację w systemie iOS, która jest wymagana do połączenia się z moim serwerem Windows w celu odpytywania o nowe dane, aktualizacje itp. Jako doświadczony programista C#, moim pierwszym odruchem jest rozpoczęcie nowego projektu w Visual Studio i wybranie _Web Service_ , pozwalając mojemu uprzedzeniu (i poziomowi komfortu) dyktować warstwę usług mojej aplikacji. Jednak nie chcę być stronniczy i nie opieram swojej decyzji na usłudze, którą _bardzo_ znam, kosztem wydajności. * Chciałbym wiedzieć, z jakich innych programistów odnieśli sukces i czy istnieje domyślny standard tworzenia warstwy usług iOS? * Czy istnieją protokoły, które są łatwiejsze w użyciu niż inne w iOS? * Lepsze pod względem rozmiaru i/lub kompresji danych? * Czy jest coś złego w korzystaniu z SOAP? Wiem, że jest „duży” w porównaniu do protokołów takich jak JSON.


title: Jak wybrać odpowiednią licencję do projektu?

text: Aplikacje, które rozwijam w wolnym czasie stają się coraz większe i planuję uruchomić kilka innych projektów, które aktualnie rozwijam, więc chcę wiedzieć, jak wybrać odpowiednią licencję dla projektów freeware i open source do tego i niektórych moich przyszłych projektów.


title: Jak uzyskać opinie społeczności na temat dużych fragmentów kodu?

text: Code Review.SE jest świetny, gdy potrzebujesz opinii na temat precyzyjnego, krótkiego fragmentu kodu. Ale skąd uzyskać podobne opinie na temat samego kodu, gdy: * masz tysiące LOC, * nie masz w miejscu pracy kolegów gotowych lub chętnych do sprawdzenia kodu¹, * nie masz tysięcy dolarów do wydania na profesjonalną recenzję przez zewnętrznego programistę?² Miejsca takie jak CodePlex to dobry pomysł, aby ogłosić swój projekt³, ale z tego, co zauważyłem, opinie, które otrzymujesz na temat znanych projektów, są opiniami konsumentów, tj. dotyczą błędów i próśb o nowe funkcje, a nie jakości samego kodu źródłowego. W jaki sposób można zaangażować społeczność w przegląd kodu bazy kodu o określonej wielkości dla projektu open source, który nie ma skali Firefoksa lub podobnych produktów? * * * ¹ Tak jest w przypadku większości projektów osobistych i open source lub projektów realizowanych w firmach, w których praktyka regularnego i pełnego przeglądu kodu nie istnieje. ² I znowu tak jest w przypadku większości projektów osobistych i open source. ³ Nawet jeśli zbyt wiele projektów opublikowanych na CodePlex nigdy nie zostanie poznanych, albo dlatego, że nikogo to nie obchodzi, albo dlatego, że są prezentowane niezbyt dobrze.


title: Rozróżnianie powtarzającego się kodu z tą samą implementacją

text: Biorąc pod uwagę ten przykładowy kod, import java.util.ArrayList; importuj blackjack.model.items.Card; public class BlackJackPlayer rozszerza gracza { private double bet; prywatna ręka hand01 = nowa ręka(); Private Hand hand02 = new Hand(); public void addCardToHand01(Card c) { hand01.addCard(c); } public void addCardToHand02(Card c) { hand02.addCard(c); } public void bustHand01() { hand01.setBust(true); } public void bustHand02() { hand02.setBust(true); } public void standHand01() { hand01.setStand(true); } public void standHand02() { hand02.setStand(true); } public boolean isHand01Bust() { return hand01.isBust(); } public boolean isHand02Bust() { return hand02.isBust(); } public boolean isHand01Standing() { return hand01.isStanding(); } public boolean isHand02Standing() { return hand02.isStanding(); } public int getHand01Score(){ return hand01.getCardScore(); } public int getHand02Score(){ return hand02.getCardScore(); } } Czy jest to uważane za powtarzalny kod? pod warunkiem, że każda metoda działa na oddzielnym polu, ale wykonuje tę samą implementację? Zauważ, że hand01 i hand02 powinny być różne. jeśli jest to uważane za powtarzający się kod, jak mam się z tym uporać? pod warunkiem, że każda ręka jest oddzielnym bytem


title: Ciekawe pytanie do rozmowy kwalifikacyjnej

text: Dzisiaj zadano mi to pytanie. Mamy 2 przypadki z blokami kodu A, B i C. Te bloki kodu nie współdzielą żadnych zasobów poza iteratorem (`int i`). Proszę podać 3 możliwe powody, dla których przypadek 1 może być szybszy niż przypadek 2 i 3 możliwe powody, dla których przypadek 2 może być szybszy niż przypadek 1: **przypadek 1** dla (i=0; i<N; ++i){ A; B; C; } **przypadek 2** dla (i=0; i<N; ++i){ A; } dla (i=0; i<N; ++i){ B; } dla (i=0; i<N; ++i){ C; }


title: Jakie projekty programistyczne korzystają z ORM?

text: Zacznę od stwierdzenia, że 95% mojej pracy z bazą danych wykonałem przy użyciu SQL. Ostatnio przeprowadziłem pewne badania różnych ORM, takich jak NHibernate i Doctrine. Widzę zalety braku znajomości języka SQL i przenośności bazy danych, którą zapewnia ORM. Ale widzę też, że znajomość SQL sprawi, że praca z ORM-em będzie bardziej efektywna, i tylko raz w mojej karierze mogę pomyśleć, że największą zmianą w aplikacji byłby dostawca bazy danych. Ponieważ czuję się bardzo komfortowo pisząc SQL i najwyraźniej nie zdaję sobie sprawy z często nauczanych korzyści wynikających z używania ORM, moje pytanie do ciężkich użytkowników ORM brzmi: **Jakie projekty programistyczne najbardziej czerpią korzyści z używania ORM?**


title: Najlepszy sposób na aktualizację interfejsu użytkownika podczas synchronizacji danych

text: Pracuję nad błędem w pracy. Aplikacja została napisana w Objective-C na urządzenia z systemem iOS, na iPada. Jestem tam nowym facetem i dostałem trudne zadanie. Czasami właściwość tekstowa UIButton nie pokazuje prawidłowego stanu podczas synchronizacji. Zasadniczo, gdy aplikacja jest synchronizowana, moja kontrolka interfejsu użytkownika powie „Synchronizacja”, a gdy nie jest synchronizowana, wyświetli „Zaktualizowano @ [określona data]”. Obecnie w delegatze aplikacji znajduje się właściwość o nazwie „SyncInProgress”. Podczas odpytywania / synchronizacji, występującego w wątku w tle, aktualizuje licznik. Właściwość zwróci wyrażenie sprawdzające wartość logiczną „licznik > 0”. Są trzy stany, z którymi muszę się uporać. Synchronizacja została rozpoczęta. Synchronizacja aktualizuje tabele. Synchronizacja zakończona. Te elementy muszą występować w kolejności. Mój współpracownik zasugerował przyjęcie podejścia opartego na stanie zamiast tylko reagowania na wydarzenia. Nie wiem, jak się do tego zabrać. Czy najlepiej byłoby, aby interfejs użytkownika otrzymywał powiadomienie, aby określić, w jakim jest stanie, lub co jakiś czas pobierać, jeśli stan się zmieni? Oto dwa posty, które w ciągu ostatnich kilku dni umieściłem na stackoverflow, które dotyczą tego. http://stackoverflow.com/questions/11025469/ios-syncing-using-a-state- approach-instead-of-just-reacting-to-events http://stackoverflow.com/questions/11037930/viewcontroller-when - zobaczpojawi się-nazwane-nie-zawsze-poprawnie-odzwierciedla-statystyki Wszelkie pomysły, które każdy może mieć, bardzo doceniają. Dzięki, deweloperDoug


title: Cel-C i C++

text: Jakiś czas temu wysłałem pytanie o dziecko, które znam i jego dylemat dotyczący zdobycia dyplomu college'u. Zdecydował się na to i najwyraźniej ma już jakieś kredyty z informatyki i matematyki (AP czy coś?), więc może przejść do bardziej interesujących rzeczy. Jednym z jego wyborów jako klasy programowania do wyboru jest wybór programowania Objective-C dla komputerów Mac lub C++. Zgaduję, że te zajęcia nie nauczą koncepcji programowania, takich jak kurs CS 101 lub coś takiego, ale prawdopodobnie bardziej jak budować programy za pomocą określonego zestawu narzędzi. Zapytał mnie, po co powinien iść; chce zrobić Objective-C, ponieważ ma Maca i iPhone'a i byłby to dobry sposób na zmoczenie nóg. Myślę, że powinien zrobić C++, ponieważ jest bardziej ustandaryzowany i szeroko stosowany w przemyśle. Z drugiej strony, może to tak naprawdę nie ma znaczenia, ponieważ i tak to wszystko jest tylko doświadczeniem, a to nigdy nie boli. Masz jakieś przemyślenia na ten temat? Zawsze nienawidzę udzielać porad początkującym programistom, ponieważ zawsze boję się, że po prostu przekazuję moje ideały i to, co uważam za ważne, a może nie. Minęło sporo czasu, odkąd prowadziłem zajęcia z CS i nie jestem pewien, jaki jest program nauczania w dzisiejszych czasach. Kiedy poszedłem do szkoły, było to C, a później Java dla OO; Nigdy nie miałam wyboru, naprawdę tak było.


title: Tworzenie instancji obiektów w Javie

text: Uczę się teraz Javy od podstaw i kiedy zacząłem uczyć się o instancjach obiektów, nie rozumiem - w jakich przypadkach muszę tworzyć instancje obiektów? Na przykład uczę się z kursu TutsPlus o tym i jest przykład o klasie "Prostokąt". Instruktor mówi, że należy go utworzyć. Zacząłem więc wątpić - kiedy muszę tworzyć instancje tych obiektów podczas pisania kodu Java?


title: Jakie mogą być pułapki we wprowadzaniu przewodnika stylu i oprogramowania do generowania dokumentacji w zespole programistycznym?

text: Rozważam użycie appledoc, smaku Doxygen do wykorzystania w generowaniu dokumentacji kodu Objective-C, w celu stworzenia dokumentacji dla aplikacji mojej firmy na iOS. Pomysł polega na tym, że serwer wygeneruje dokumenty w haku po zatwierdzeniu, a następnie opublikuje dokumentację w sieci wewnętrznej. W tej chwili mamy bardzo mało dokumentacji jakiegokolwiek rodzaju, nawet komentarzy w samym kodzie, więc spodziewam się, że będę musiał poprosić ludzi, aby zaczęli pisać więcej dokumentacji podczas kodowania. W tym duchu będę również współpracować z moim zespołem w celu stworzenia „przewodnika stylu” dla kodu Objective-C (takiego jak Google), który określi podstawowe zasady pisania i dokumentowania kodu. Jakie są potencjalne pułapki w powyższym planie? Czy poradniki stylistyczne są skuteczne? Widzę korzyści z przyjęcia standardu kodowania, ale czy programiści uznają go za restrykcyjny? A czy projekty dokumentacyjne takie jak ten działają? A jeśli nie, to dlaczego zawodzą? _(Pulsowałem kilka razy na Stack Overflow z umiarkowanym sukcesem, ale to jest mój pierwszy post tutaj. Daj mi znać, jeśli mógłbym poprawić moje pytanie w jakikolwiek sposób. Dzięki!)_


title: Czy będzie można używać Amazon Glacier do codziennego pobierania danych?

text: Planuję używać pamięci w chmurze dla mojej aplikacji. Moja aplikacja będzie pobierać dane użytkowników i uwierzytelniać użytkowników, a także mieć możliwość ciągłej synchronizacji danych. Czy to dobry pomysł, aby skorzystać z Amazon Glacier? Czy istnieje ograniczenie przepustowości lub żądanie lub jakakolwiek wada korzystania z niego?


title: Dlaczego w SVN żółwia rozróżniana jest wielkość liter?

text: Ostatnio spotkałem się z tym przy użyciu TortoiseSVN, ale zakładam, że będzie tak samo dla programów opartych na CVS (prawda?). Z czystej ciekawości, czy jest jakiś powód, dla którego w systemie plików CVS rozróżniana jest wielkość liter? Tj. następujące adresy URL są różne: svn://repo/branches/PROJECT svn://repo/branches/project Czy istnieje jakiś starszy powód tego? Na podstawie plików robi się bardziej intrygujące. Jeśli w katalogu istnieją 2 pliki, powiedzmy `ProjectOne.vbp` i `projectone.vbp`, jeden nadpisze drugi w normalnym systemie plików Windows (lub, jak już się zetknąłem, wygeneruje tajemniczy błąd bazy danych TortoiseSVN), ale może współistnieją pokojowo w repozytorium. Teraz oczywiście to od użytkownika zależy, czy nie będzie używał absurdalnych nazw, takich jak powyższe, ale czy są jakieś zalety, których brakuje mi rozróżniania wielkości liter?


title: Intensywny graficznie design silverlight

text: Projektuję aplikację silverlight do wyświetlania nut z pliku midi. Chcę stworzyć przewijającą się w poziomie pięciolinię muzyczną. W mojej pracy opiekuję się aplikacją WinForm, która jest przewijanym wykresem Gantta harmonogramów samolotów i zasadniczo ma kolekcję wierszy i mapuje lewy i prawy piksel kontrolki na daty i godziny. Następnie metoda malowania przechodzi przez to, co określa jako widoczne wiersze, i rysuje ekran, który pokazuje informacje o harmonogramie między dwiema datami. Czy miałbym rację zakładając, że potrzebowałbym czegoś podobnego w silverlight do mojej muzyki z nut, czy też lepiej byłoby po prostu stworzyć poziomy scrollviewer zawierający płótno, na którym programowo narysowałem. Czy zmierzam we właściwym kierunku? Nie widziałem żadnych artykułów na temat projektowania takiej niestandardowej kontrolki: czy możesz mi na którąkolwiek wskazać?


title: Tworzenie aplikacji w Winrt wymagającej Internetu

text: Tworzę płatną aplikację na Windows 8, c#. Zastanawiam się, co jest lepsze? 1. Jeśli moja aplikacja nie wymaga normalnego połączenia z Internetem, ale wymaga połączenia z Internetem po raz pierwszy w celu pobrania danych o zawartości. --Ułatwia mi życie 2. Załaduj domyślne dane podczas instalacji. Następnie zapytaj użytkownika, czy chce zaktualizować aplikację. -- Dodanie domyślnych danych będzie uciążliwe. Teraz moje wielkie pytanie brzmi, czy można bezpiecznie założyć, że użytkownik ma dostęp do Internetu w dzisiejszych czasach, gdy korzysta z aplikacji, która nie powinna wymagać Internetu?


title: Jak uzyskać symbol lookahead podczas konstruowania LR(1) NFA dla parsera?

text: Czytam wyjaśnienie (niesamowite "Techniki parsowania" autorstwa D.Grune i C.J.H.Jacobsa; s.292 w wydaniu 2) o tym, jak skonstruować parser LR(1) i jestem na etapie budowania początkowego NFA. To, czego nie rozumiem, to jak uzyskać / obliczyć symbol z wyprzedzeniem. Oto przykład z książki, gramatyka: S -> E E -> E - T E -> T T -> ( E ) T -> n `n` jest terminalem. „Dziwne” przejścia to dla mnie sekwencja: 1) S -> . E ez 2) E -> . E - T eof 3) E -> . E - T - 4) E -> E . - T - 5) E -> E - . T - (Uwaga: w powyższej tabeli numery stanów są z przodu, a symbol patrzenia w przód na końcu.) Co mnie zastanawia, że przejście od (4) do (5) oznacza czytanie żetonu `-`, prawda? Więc jak to się dzieje, że `-` jest nadal symbolem patrzenia w przyszłość, a co ważniejsze, dlaczego `eof` nie jest już symbolem patrzenia w przyszłość? W końcu we wpisie takim jak `n - neof` jest tylko jeden symbol `-`. Moje naiwne myślenie podpowiada mi, że (5) powinno być zapisane jako: 5) E -> E - . T - eof I jeszcze jedna rzecz -- `n` jest terminalem. Dlaczego w ogóle nie jest używany jako symbol wyprzedzający? To znaczy -- spodziewamy się zobaczyć `-` lub `(`, jest ok, ale brak `n` oznacza, że jesteśmy pewni, że nie pojawi się na wejściu? **Aktualizacja**: po przeczytaniu jestem tylko bardziej zdezorientowany ;-) Czyli czym tak naprawdę jest lookahead? Bo widzę taki stan jak (s.292, 2 kolumna, 2 wiersz): E -> E . - Teof Lookahead mówi „eof”, ale wejście przychodzące mówi „-”. Czy to nie sprzeczność? I to nie tylko w tej książce.


title: Uruchamianie oprogramowania jako usługi przy użyciu niezmodyfikowanego programu GPL(v2+) jako podstawowej zależności: czy kod źródłowy SaaS musi zostać wydany?

text: Projektuję projekt oprogramowania jako usługi, do którego dostęp będzie możliwy tylko online. Mogę być mocno uzależniony od pliku wykonywalnego objętego GNU GPL (v2 lub nowsza). Rozumiem, że mój kod, jeśli kiedykolwiek miałbym go rozpowszechniać, musi być również rozpowszechniany na warunkach GPL. Jestem prawie pewien, że uruchomienie usługi przez sieć nie jest przekazywaniem/dystrybucją kodu. Czy zatem mam rację myśląc, że mogę korzystać z zależności GPL bez konieczności ujawniania całego mojego kodu? * * * Żebym mógł podać konkretny przykład: Załóżmy, że projektuję w systemie przetwarzania dokumentów online, podobnym do Google Docs. Chcę być w stanie przesłać do systemu praktycznie dowolny typ pliku i przekonwertować go na dowolny format wewnętrzny. Zamiast próbować wykreślać konwerter, wolę użyć istniejącego programu, o którym wiem, że pozwala na konwersję. Ten program jest wykonywalny na licencji GNU GPL v2 (lub nowszej). Czy mogę legalnie korzystać z oprogramowania jako usługi bez podawania kodu źródłowego?


title: Praca w firmie zajmującej się rozwiązaniami testowymi

text: Mam możliwość dołączenia do firmy, która będzie opracowywać rozwiązania do przeprowadzania testów obciążeniowych/obciążeniowych. Jego startup i produkt jest wciąż w fazie rozwoju. Jak myślisz, rynek produktów opartych na testach obciążeniowych/obciążeniowych to już dni .


title: Jaka jest różnica między tworzeniem instancji a ładowaniem klasy w Javie?

text: W świecie Javy zdarzają się scenariusze, w których programiści ładują klasę zamiast tworzenia instancji. Jaka jest różnica między tworzeniem instancji a ładowaniem klasy?


title: Jak uniemożliwić ludziom zabawę z Twoją witryną?

text: Niedawno zaprojektowałem swoją pierwszą stronę internetową. Stworzyłem własny blog podobny do rzeczy w PHP. Piszę artykuły, a pod artykułami jest miejsce na dodawanie komentarzy. Czasami otrzymuję przypadkowe komentarze typu „sd$^&(87&(*2d10hsdasko” bez znaczenia. Są ich setki. Myślę, że jakaś głupia osoba z dużą ilością czasu musi bawić się moją stroną dla zabawy. Myślę o znalezienie jego adresu IP i zablokowanie go.Czy ktoś napotkał taki problem?Jak uniemożliwić ludziom zabawę z twoją stroną?


title: Co to jest protokół XML?

text: Zostałem poproszony o dostarczenie czegoś dla klienta i nie jestem do końca pewien, czego chce. Zastanawiałem się, czy ktoś słyszał wcześniej używany termin. Sytuacja jest taka, że mamy program, który odbiera pliki .xml z systemu hosta (pliki są umieszczane w katalogu, a nasz program pobiera je co x min). Pliki zawierają różne informacje. Kierownik działu IT firmy, która posiada system hosta, poprosił o pewne szczegóły dotyczące używanego protokołu XML. Założyłem, że chciał schemat XML i kilka przykładowych plików xml, które mu wysłałem. Powiedział jednak, że tego nie chce i powtórzył, że chce wiedzieć, jakiego protokołu XML używa. Czy ktoś mógłby mi powiedzieć, czym jest protokół XML? Myślę, że prawdopodobnie jestem naprawdę głupi w tym wszystkim, ale nie wiem, co ma na myśli. Dziękuję wszystkim


title: Jakich narzędzi można użyć, aby uzyskać odwołanie, takie jak document.frames.item(0).document.innerhtml?

text: Chcę zeskrobać rzeczy ze strony internetowej. Sposób, w jaki chcę to zrobić, to wyodrębnienie tekstu elementu DOM (uważam, że jest to poprawny opis). Oznacza to, że będę chciał pobrać tekst elementu takiego jak document.frames.item(0).document.innerhtml. Teraz szukam narzędzia, które zrobi to szybko, klikając element na stronie internetowej. IE DOM Inspector może to zrobić, ale nie jest darmowy i wymaga uprawnień administratora na komputerze. Nie udało mi się uzyskać odniesienia do elementu DOM za pomocą wtyczki DOM Inspector dla przeglądarki Firefox. Czy są jakieś inne alternatywne narzędzia?


title: Opracowujesz wieloplatformowy interfejs do pisania na sprzęcie, takim jak PicKit LUB USB przez Internet?

text: Długo zastanawiałem się nad pogodą, aby zadać to pytanie programistom lub przepełnieniu stosu. Daj mi znać, jeśli to nie jest właściwe miejsce, a wyślę to na SO. Mój przyjaciel i ja opracowujemy tablicę wyświetlającą, która od czasu do czasu wymagałaby jakiejś konfiguracji. np. ustawienie kontrastu / podświetlenia itp. Teraz to ustawienie musi być kontrolowane przez użytkownika i mamy wcześniejsze doświadczenie w korzystaniu z PicKit2 w przeszłości. Sposób, w jaki go zaprogramowaliśmy, odbywał się za pomocą wiersza poleceń / plików binarnych dostępnych zarówno dla linuxa, jak i windowsa. Interfejs użytkownika pobierałby dane wejściowe użytkownika, a następnie zapisywał do pickit2 za pomocą tych interfejsów wiersza poleceń. Naszym celem jest próba osiągnięcia tego poprzez interfejs sieciowy. Teraz chcemy przedyskutować ze społecznością, czy istnieje realna możliwość stworzenia takiego wieloplatformowego interfejsu? Jako opcję zapasową myślimy o stworzeniu natywnej aplikacji dla wszystkich potrzebnych platform i użyciu pickit2 z wierszem poleceń. Idealnym sposobem byłoby posiadanie do tego celu USB HID. Zajrzałem do bibliotek USB Java i ActiveX, ale nic obiecującego. Podobne dyskusje na ten temat są dość stare na StackOverflow, więc pomyślałem, że poproszę tę społeczność, aby rzuciła trochę światła na możliwości i ograniczenia. http://stackoverflow.com/questions/3503244/controlling-a-usb-device-from-a-web-application http://stackoverflow.com/questions/2219378/control-a-users-usb-device-via -a-strona-możliwa Czy jest jakaś opcja, o której nie myślimy? Czy powinniśmy być zadowoleni, że pickit2 jest rozwiązaniem do tworzenia kopii zapasowych i zacząć tworzyć różne aplikacje natywne.


title: Czy mogę licencjonować części mojego kodu na różnych licencjach?

text: Czy mogę licencjonować różne części mojego kodu (różne klasy) w ramach różnych licencji? Np. Pobrałem i zmodyfikowałem klasę na licencji BSD 3 pkt. Czy mogę powiedzieć, że plik AObject.class to BSD, a BObject.class to LGPL (lub MIT, lub MPL, lub PD, itd.)


title: Najlepsze podejście do tworzenia niestandardowych pól - formularze dynamiczne

text: Zastanawiam się, jak mogę stworzyć funkcjonalność pól niestandardowych. Poniżej opisałem, czego chcę i rozwiązanie, które rozważam. Studium przypadku: Załóżmy, że mamy 2 role: Administrator i Użytkownik. Administrator ma możliwość "dodawania własnych pól do formularzy". Użytkownik może otworzyć ten formularz w trybie dodawania/edycji/tylko do odczytu. Dodatkowo Użytkownik może zobaczyć siatkę z kolumnami z tych niestandardowych pól. Teraz chcę wykonać następujące czynności jako administrator: dodaję nowe pole tekstowe i ta kontrolka powinna być dostępna w widoku dodawania/edycji/tylko do odczytu, a wartość powinna być dostępna w siatce (wymagana jest funkcja sortowania). Poniżej zamieszczam problemy, które widzę do tej funkcji: 1. Gdzie przechowuj konfigurację formularza – xml lub niestandardowe tabele do przechowywania widoku formularza 2. Gdzie przechowuj wyniki – XML lub niestandardowe tabele do przechowywania wyników 3. Jak zrobić siatkę ze stronicowaniem i sortowaniem – Jeśli mam zamiar używać SQL Server, prawdopodobnie zbuduję kilka widoków. 4. Jak zbudować UI – użyję MVC i myślę, że to najłatwiejszy krok. Czy kiedykolwiek zrobiłeś coś takiego? Czy możesz podzielić się ze mną jakimś rozwiązaniem? Z góry dziękuję.


title: Wykrywanie obszarów dyfuzji izotropowej i anizotropowej w operacji wypełniania zalewowego (lub podobnej)

text: Witajcie koledzy programiści! Mam wykres 2D, który najlepiej można opisać jako siatkę kartezjańską z przejezdnymi i nieprzejezdnymi komórkami. Chciałbym móc wykryć podzbiory tego wykresu, w których dyfuzja zachowuje się anizotropowo, tj. jest ograniczona korytarzami. Początkowo zająłem się obrazowaniem tensora dyfuzji w neuronauce, ale mam duże problemy z trawieniem materiału. Zastanawiam się, czy cokolwiek z tego zostało już wydestylowane do użytecznego algorytmu, czy też istnieją inne podejścia, które mogą być owocne. W szczególności chciałbym móc określić następujące elementy: 1. Obszary, w których dyfuzja jest _anizotropowa_ : silnie ograniczona do dwóch kierunków (pomyśl o wodzie przepływającej przez dwuwymiarowy plaster słomki). 2. Obszary, w których dyfuzja jest _izotropowa_ : w dużej mierze nieograniczona (tj. woda dyfunduje przez dużą, **choć nieregularnie ukształtowaną** przestrzeń. Ponieważ wykres zawiera tylko bardzo wąskie lub otwarte obszary, wystarczyłoby określić ** albo** anizotropowa **albo** izotropowa dyfuzja i wywnioskuj drugi za pomocą prostego kontrastu.**TL;DR** : Jak mogę znaleźć „średni” _kierunek_ dyfuzji w operacji wypełniania powodziowego lub podobnej? **EDYTUJ:** Oto przykład mojego wykresu jako obrazu: ![tu wpisz opis obrazu](http://i.stack.imgur.com/LICSO.png)


title: Czy uzyskanie dyplomu z matematyki pomoże w tworzeniu gier?

text: Zostały mi dwa miesiące od uzyskania dyplomu z inżynierii systemów, co oznacza, że nauczyłem się dobrze kodować i kodować przy użyciu języków zarządzanych. Jedynym powodem, dla którego dostałem się do tej kariery, było to, że chciałem tworzyć gry wideo. Teraz wiem, że z moim obecnym zestawem umiejętności nie będę w stanie stworzyć niektórych rzeczy, które mam w głowie. Czy zdobycie drugiego stopnia z czystej matematyki pomogłoby mi w osiągnięciu tego celu?


title: Czas reakcji dużych firm na zgłoszenia błędów

text: Ponad miesiąc temu wysłałem raport o błędzie do jednej z największych firm programistycznych dotyczących jednego z ich flagowych produktów rozwojowych (celowo nie zamieszczam żadnych więcej szczegółów na temat tego raportu o błędzie, aby pytanie nie zamieniło się w tyradę). Otrzymałem tylko szablonowe zapewnienie, że „pracujemy nad tym”. * Czy to normalne, że duże firmy reagują na zgłoszenia błędów w takim tempie? * Czy można zdefiniować „typowy” czas reakcji? * Czy zazwyczaj jest on dłuższy niż czas reakcji dużych i aktywnie utrzymywanych projektów Open Source, czy nie? * Czy istnieje różnica kulturowa w sposobie, w jaki reagują? * Na przykład, może firmy komercyjne starają się unikać wdawania się w dyskusje o błędach w obawie przed złym PR?


title: Architektura do utrzymywania/wykonywania wielu wersji tej samej strategii/funkcjonalności w działającej aplikacji

text: Więc pracuję z klientem, który ma starszą aplikację, która ma sporo ciekawych dziwactw. Posiada między innymi własny system wersji kodu dla funkcji biznesowych, przechowując całą wersję algorytmu w bazie danych. Dane są następnie pobierane i kompilowane na żądanie (jest to aplikacja internetowa i tak, kompiluje mnóstwo kodu za każdym razem, gdy próbujesz coś kupić). Z oczywistych powodów nie jest to zbyt szybkie. Zastanawiam się nad migracją kodu do normalnych projektów kodu, ale jak możesz sobie wyobrazić, stwarza to interesujące wyzwanie w odniesieniu do wersji algorytmów. Wymaganiem biznesowym jest, aby stare wyceny/transakcje, które mają zostać poddane przeglądowi, korzystały z tego samego algorytmu, który był używany podczas ich tworzenia. Wspomniany cytat powinien być wtedy w stanie ponownie obliczyć, ze zmienionymi danymi wejściowymi itp. (więc nie możemy po prostu przechowywać wyników). Jak podszedłbyś do tego problemu? Mają teraz tak ogromne problemy w produkcji, że po prostu zdecydowałem, że stworzymy poprawkę, przenosząc cały kod do rzeczywistych bibliotek i wywołując funkcje z wersjonowaniem nazw (niektóre Algortihm6Jun2014 lub cokolwiek), co rozwiąże problem ogromnego wykorzystania przepustowości i zmarnowany czas kompilacji, ale daleko mu do elegancji. Chociaż będę chciał w przyszłości zaimplementować znacznie większe zmiany architektoniczne, na razie szukam po prostu dobrego sposobu na utrzymanie wielu wersji tego samego algorytmu w kodzie statycznym, bez uciekania się do tej konwencji nazewnictwa. Myśli?


title: Ustalanie priorytetów kodowania

text: W sklepach deweloperskich, w których pracowałem, nikt nigdy nie wspomniał o „priorytetach kodowania”. Przeczytałem to gdzieś w książce lub witrynie i ustalam oczekiwanie, jaki priorytet powinien być pierwszy w kodzie. W miejscach, w których nie jest to określone, jaki powinien być priorytet? Powiedzenie „ **zrób to, czego wymaga firma**”, może brzmieć prosto, ale może to mieć miejsce kosztem wydajności/utrzymania. Wiele osób mówi, że na pierwszym miejscu jest konserwacja, a niektórzy twierdzą, że niezależnie od potrzeb. Jestem młodym programistą, więc chyba gdzieś brakuje mi sedna. Oczywiście programowanie jest inżynierskie i trudne, ponieważ nigdy nie można mieć idealnego rozwiązania. Dziękuję


title: Czy to zły pomysł, aby używać zmiennej flag do wyszukiwania elementu MAX w tablicy?

text: W trakcie mojej kariery programistycznej wyrobiłem sobie nawyk wprowadzania zmiennej flagi, która wskazuje, że nastąpiło pierwsze porównanie, tak jak robi to Msft w implementacji metody rozszerzenia linq Max() public static int Max(this IEnumerable<int> source) { if ( source == null) { throw Error.ArgumentNull("źródło"); } int liczba = 0; flaga logiczna = fałsz; foreach (int num2 w źródle) { if (flaga) { if (num2 > num) { num = num2; } } else { liczba = liczba2; flaga = prawda; } } if (! flaga) { throw Error.NoElements(); } zwróć liczba; } Jednak ostatnio spotkałem heretyków, którzy implementują to, zaczynając od pierwszego elementu i przypisując go do wyniku, a o nie - okazało się, że autorzy STL i Javy woleli tę drugą metodę. Java: public static <T rozszerza Object & Comparable<? super T>> T max(Kolekcja<? extends T> coll) { Iterator<? rozszerza T> i = coll.iterator(); kandydat T = i.następny(); while (i.hasNext()) { T next = i.next(); if (next.compareTo(kandydat) > 0) kandydat = następny; } powrót kandydata; } STL: template<class _FwdIt> inline _FwdIt _Max_element(_FwdIt _First, _FwdIt _Last) { // znajdź największy element, używając operatora< _FwdIt _Found = _First; if (_First != _Last) for (; ++_First != _Last; ) if (_DEBUG_LT(*_Found, *_First)) _Found = _First; powrót (_Znalezione); } Czy są jakieś preferencje między jedną a drugą metodą? Czy są ku temu jakieś historyczne powody? Czy jedna metoda jest bardziej niebezpieczna od drugiej? **UPDATE** : Proszę zauważyć, że wersja java jest w stanie zgłaszać wyjątki za pomocą wiersza `T kandydat = i.next();`i możliwe jest uzyskanie takiego samego zachowania w C# z klauzulą guard, jak pokazano w druga część odpowiedzi @ratchet freak.


title: Jak rozwiązać $ref w obiekcie JSON?

text: Napisałem aplikację jednostronicową, która używa usług odpoczynku do pobierania obiektów JSON. Zwracane obiekty JSON są obiektami C# serializowanymi przy użyciu biblioteki Newtonsoft.JSON. Zwrócony obiekt JSON zawiera wskaźniki $ref do określonych obiektów $id w tym samym obiekcie JSON (w tym pytaniu pokazano przykład). Muszę uzyskać dostęp do rzeczywistych danych, na które wskazuje $ref, ale nie wiem, jak uzyskać do nich dostęp bez zlokalizowania oryginalnego źródła. Znalazłem rozwiązania, takie jak napisanie nowego serializatora kontraktów i napisanie własnej implementacji rozwiązywania odwołań. Uważam, że powinno być łatwiejsze rozwiązanie niż te dwa. Zbadałem również ustawienia serializacji Newtonsoft JSON; Próbowałem ustawić PreserveReferenceHandling na None, ale nie odniosłem tam żadnego sukcesu. Szukam innych rozwiązań niż te, które wymieniłem. Mam nadzieję, że istnieje proste rozwiązanie, które wymaga bardzo mało kodu do zaimplementowania i żadnych dodatkowych frameworków. AKTUALIZACJA Czytałem więcej na ten temat i odkryłem, że $ref jest fragmentem wskaźnika JSON. Numer referencyjny to identyfikator, który odwołuje się do elementu z innego schematu. Wydaje się, że jest to rozwiązanie, ale aby to zadziałało, należy zdefiniować schemat. RFC dla fragmentów wskaźnika JSON Informacje o fragmentach wskaźnika JSON Referencje: Rozwiąż cykliczne odwołania JSON Ustawienia serializacji


title: Problemy dotyczące nowych instancji kontrolerów na stronach podglądu

text: Czy jest jakiś problem z tworzeniem nowego kontrolera na stronach widoku ascx. Nie chcę tworzyć modelu, czy są jakieś problemy z robieniem tego w ten sposób. Zwykle kontrolery kontrolują zmienne w modelu, a model jest punktem środkowym między nimi, ale tworzę nową instancję klasy kontrolera w samej stronie ascx. Czy to jest ok? **EDYTUJ Chcę poznać konsekwencje umieszczenia instancji klasy kontrolera bezpośrednio w kodzie ascx asp.net na stronie widoku Dzięki


title: Czy plan testów powinien uwzględniać wartości konfiguracyjne?

text: Czy plan testów oprogramowania wewnętrznego powinien uwzględniać stany błędów wszystkich możliwych konfiguracji? Np.: Mam plik app.config z niektórymi ścieżkami do plików. Czy plan testów powinien zawierać kroki do testowania tego, co się dzieje, gdy te wartości są nieprawidłowe?


title: dystrybucja, wydanie i wersja

text: 1. Linux jest spakowany w formacie znanym jako dystrybucja Linuksa do użytku na komputerach stacjonarnych i serwerach. Dystrybucje Linuksa zawierają jądro Linuksa, pomocnicze narzędzia i biblioteki oraz zwykle dużą ilość aplikacji spełniających zamierzone zastosowanie dystrybucji. Zastanawiam się, czy istnieje również podobna koncepcja aplikacji? „Dystrybucja” aplikacji? Jak to się definiuje? 2. Dystrybucja Linuksa może mieć wiele wydań i wersji. Zastanawiam się, jaka jest różnica i relacja między wydaniem a wersją, w przypadku dystrybucji systemu operacyjnego lub aplikacji? Dziękuję!


title: Oddzielne moduły śledzące funkcje i wady?

text: W mojej firmie używamy JIRA do zgłaszania nowych funkcji, a następnie dział QA rejestruje wszelkie błędy/defekty w Quality Center. Uważam, że Centrum Jakości jest bardzo nieprzyjazne dla użytkownika, ponieważ wymaga IE, ponieważ używa ActiveX. Czy powszechną praktyką jest używanie oddzielnych modułów śledzących do żądań funkcji i defektów? Czy jest jakaś korzyść z posiadania oddzielnych trackerów?


title: Jak uniknąć przełączania kontekstu podczas tworzenia aplikacji internetowych z pełnym stosem?

text: Aby dać trochę kontekstu, od kilku lat jestem programistą Ruby & Rails, a ostatnio zacząłem robić sporo JavaScriptu, aby zwiększyć responsywność aplikacji. Kiedy programujesz backend, jest całkiem łatwo (przynajmniej dla mnie), zrobić większość rzeczy opartych na testach i po prostu wykuwać trochę kodu, który działa, jednocześnie będąc w stanie się skoncentrować. Ale odkryłem, że w miarę jak zbliżam się do frontendu, ciągle zmieniam kontekst. Niektóre JavaScript są łatwe do przetestowania (modele), ale części, które są bezpośrednio połączone z GUI, wydają się po prostu niemożliwe do rozsądnego przetestowania automatycznie. To nie jest aż tak wielka sprawa, kiedy po raz pierwszy zaczynam od części GUI z fikcyjnymi danymi, ale kiedy wszystko się połączy, i GUI zostanie utworzony na podstawie danych z zewnętrznego API, a moja maszyna ma uruchomione dwie aplikacje na w tym samym czasie i zasadniczo debuguję oba, wydaje mi się, że ciągle przełączam kontekst, nie będąc w stanie skupić się na jednej rzeczy. Przykładem może być serwer czatu Node.js, który łączy się z inną aplikacją Railsową za pośrednictwem jakiegoś API. Teraz, jeśli API zostało już zrobione i ustawione w kamieniu, mógłbym z łatwością skupić się na części Node.js ... ale próbując zrobić wszystko w zwinny sposób, po prostu zbudowałem API podczas budowania Node.js aplikacja, która ma efekt uboczny w pracy zarówno na Railsach, jak i Node (obie wspierane przez różne bazy danych itp.). Jeśli porównuję to do pracy nad jedną małą biblioteką lub po prostu kilkoma głębokimi rzeczami zaplecza, stwierdzam, że moja produktywność w zasadzie nie istnieje, ponieważ ciągle się zmieniam i znajduję błędy w 50 różnych miejscach, zamiast skupiać się tylko na jednym. **Czy jest coś, co zasadniczo robię źle?**


title: Interpretacja zasady DRY

text: W tej chwili zmagam się z koncepcją DRY (Don't Repeat Yourself) w moim kodowaniu. Tworzę tę funkcję, w której obawiam się, że stanie się zbyt skomplikowana, ale staram się przestrzegać zasady DRY. createTrajectoryFromPoint(A a,B b,C c,boolean robiCoś,boolean robiCoś2) Ta funkcja, o której powiedziałem, pobiera 3 parametry wejściowe, a następnie funkcja zrobi coś nieco innego, biorąc pod uwagę kombinacje logiczne `robi Coś` i `Robi Coś2`. Jednak problem, jaki mam, polega na tym, że ta funkcja znacznie się zwiększa złożoność z każdym dodanym nowym parametrem boolowskim. Więc moje pytanie brzmi, czy lepiej jest mieć kilka różnych funkcji, które mają tę samą logikę (a zatem naruszając zasadę DRY), czy jedną funkcję, która zachowuje się nieco inaczej, biorąc pod uwagę wiele parametrów, ale czyniąc ją znacznie bardziej złożoną (ale zachowując SUCHE)?


title: „kontynuuj” i „przerwa” dla analizy statycznej

text: Wiem, że toczyło się wiele dyskusji na temat tego, czy przerwanie i kontynuowanie powinno być ogólnie uważane za szkodliwe (w sumie – mniej więcej – że to zależy; w niektórych przypadkach poprawiają one przejrzystość i czytelność, ale w innych nie ). Załóżmy, że nowy projekt zaczyna się rozwijać, z planami kompilacji nocnych, w tym analizą statyczną. Czy częścią wytycznych dotyczących kodowania dla projektu powinno być unikanie (lub zdecydowanie odradzanie) używania „kontynuuj” i „przerwij”, nawet jeśli może to poświęcić trochę czytelności i wymagać nadmiernego wcięcia? Najbardziej interesuje mnie, jak to się odnosi do kodu C. Zasadniczo, czy użycie tych operatorów kontrolnych może znacząco skomplikować statyczną analizę kodu, co może prowadzić do dodatkowych wyników fałszywie ujemnych, które w przeciwnym razie zarejestrowałyby potencjalny błąd, gdyby nie użyto przerwania lub kontynuacji? (Oczywiście pełna analiza statyczna dowodząca poprawności programu arbitralnego jest nierozstrzygalną propozycją, więc prosimy o zachowanie odpowiedzi na temat wszelkich praktycznych doświadczeń, jakie masz z tym, a nie teoretycznych niemożliwości) Z góry dziękuję!


title: Jaka jest najlepsza procedura konfiguracji przesyłania danych w czasie rzeczywistym za pomocą Redis?

text: Skonfigurowałem API RESTful używając Ruby on Rails dla aplikacji na iPhone'a. Są jednak przypadki, w których chciałbym użyć transferu danych Pub/Sub w czasie rzeczywistym, narysowałem 2 potencjały: * Połącz Rails API do aplikacji RealTime Node/Socket.io przy użyciu Redis. Gdzie klienci iOS subskrybują aplikację węzła za pośrednictwem połączenia z gniazdem. * Bezpośredni interfejs Redis-rb (Ruby) i ObjCHiredis (iOS) - omijanie aplikacji Node. (Czy to w ogóle możliwe?) Czy którekolwiek z tych rozwiązań byłoby wykonalne/zalecane? Zastrzeżenie: nigdy wcześniej nie korzystałem z Redis.


title: Czy rozwój oprogramowania open source jest uważany za „komercyjne wykorzystanie” oprogramowania?

text: ## Konfiguracja oprogramowania: Obecnie planuję stworzenie nowego oprogramowania. Nigdy nie uruchomiłem komercyjnie aplikacji ani nie robię tego dla firmy. To bardziej dla zabawy niż cokolwiek innego, ale może też przynieść trochę gotówki. :P W każdym razie będą dwie "podstawowe części" oprogramowania: * **Część numer jeden:** Tę zamierzam wydać open source. Jest to w zasadzie instalator/launcher/patcher, który automatycznie sprawdza dostępność aktualizacji, obsługuje raportowanie błędów itp. Blah, blah, blah. * **Część numer dwa:** To będzie rzeczywiste oprogramowanie. Zamknięte źródło, ale darmowe. Jest powiązany z kontem, które może być bezpłatne lub płatne. * * * ## Problem: Więc wszystko jest w porządku powyżej... dopóki nie zdaję sobie sprawy, że mój komputer programistyczny ma dużo oprogramowania „darmowego dla firm i dla firm płatnych”. (Biuro, antywirus i kto wie co jeszcze?) Wiem, że _zdecydowanie_ będę musiał coś zrobić z oprogramowaniem w części nastawionej na zysk, ale **co z częścią open source?** Jest bezpłatny, ale całość Zamiarem jego opracowania jest dodanie go do większego, płatnego oprogramowania.