title: Poszukiwanie wzorca projektowego reprezentującego stan współdzielony w sekwencerze muzycznym

text: Lubię podawać dużo kontekstu, ale także postawić podstawowe pytanie na górze tak zwięźle, jak to tylko możliwe. Zapraszam do czytania trochę lub dużo. Pracuję nad sekwencerem muzycznym i do tej pory cieszę się, że korzystam z podejścia publikowania/subskrypcji, aby pomóc oddzielić główne komponenty aplikacji, co pomogło w testowaniu i refaktoryzacji. Zastanawiam się jednak, w jaki sposób komponenty mogą współdzielić świadomość pewnego stanu bez dodawania zależności od niektórych nowych zdarzeń nadużywających (opublikowanych) lub do każdego bufora ich własnych kopii tego stanu. Konkretnym przykładem jest „głowica odtwarzania”; ten i inny przykład wyjaśniono poniżej. Do tej pory głowica odtwarzania była przedstawiana w trywialny sposób jako instancja niezmiennej klasy kodu czasowego, która ma miarę, rytm i tik (zasadniczo podjednostkę rytmu). Komponenty mogą subskrybować zdarzenia „beat” i pobierać jego kod czasowy, aby zaktualizować swoją wewnętrzną właściwość „playhead”. Ale kiedy przechodzę do innych funkcji, takich jak edycja, widzę, że komponenty, które śledzą głowicę odtwarzania, będą również chciały śledzić zdarzenia SequenceEvents aktywne w czasie głowicy odtwarzania (np. notatki). Muszę również dodać funkcjonalność dla „regionu kroku”, który jest segmentem czasowym (powiedzmy, 1 takt), podobnym do głowicy, ale nie pojedynczym momentem w czasie, który komponenty będą podobnie musiały śledzić. Byłem zakłopotany, jak reprezentować takie obiekty w mojej aplikacji bez wprowadzania ściślejszego sprzężenia. Obecne podejście, w którym komponenty nasłuchują zdarzeń, nie wydaje się dobrze pasować. W tej chwili składnik Sequencer emituje zdarzenie „beat”, które subskrybenci mogą wykorzystać do aktualizacji swoich głowic odtwarzania. Rozszerzenie tego zdarzenia w celu uwzględnienia danych SequenceEvent dla notatek itp. brzydko pachnie, ponieważ zdarzenia zazwyczaj mają być przejściowe i zużywane w miarę ich występowania, a nie po to, aby odbiorcy zdarzeń mogli aktualizować stan prywatny. Zwłaszcza, gdy to prywatne państwo byłoby identyczne u każdego konsumenta. Również inne zdarzenia niż „beat” mogą sygnalizować zmianę głowicy, np. użytkownik klika inną część partytury. Jeśli nie zdarzenia, wydaje się, że każde inne podejście ma wiele komponentów zależnych od jakiegoś nowego komponentu „głowicy odtwarzania” z dwukierunkowym wiązaniem (to znaczy, że kilka komponentów może zarówno wykryć zmiany głowicy, jak i ustawić jej stan). Nawet użycie wstrzykiwania zależności w celu zmniejszenia zależności ze względu na testowanie, wydaje mi się niewłaściwe. Jeśli jeszcze więcej kontekstu pomoże zilustrować problem, czytaj dalej... Aplikacja ma obecnie kilka niezmiennych typów danych, od których mogą być zależne większe komponenty (lub mogą używać bez znajomości ich typu): Timecode, SequenceEvent, Meter, Tempo, Stret ( obiekt strunowy/progowy), Skok. Większe komponenty, które NIE mają zależności w czasie budowy, obejmują: * Sekwencja: Reprezentuje wynik, może być odpytywana w celu iteracji lub zdarzeń sekwencji o swobodnym dostępie. * Sekwencer: Obsługuje odtwarzanie i synchronizację, aktualnie emituje zdarzenia „beat” i „note”. * ScoreView: Renderuje sekwencję jako tabulaturę (zapis nutowy) i wizualnie pokazuje głowicę odtwarzania. * NeckView: pokazuje gryf gitary z aktywnie grającymi nutami. * GUI: Zawiera szereg prostszych elementów sterujących, w tym wyświetlanie zegara, które aktualizuje się wraz z głowicą odtwarzania. Ten składnik tworzy również wystąpienia składników ScoreView i NeckView, ale nie łączy ich ze sobą w żaden sposób. Całe "okablowanie" w czasie wykonywania jest wewnętrzne dla komponentów, poprzez PubSub.subscribe('eventName', handler). PubSub ma plusy i minusy, ale to działa dobrze do pewnego momentu. Jednak niektóre przypadki, w których to podejście się psuje, to: 1) Gryf gitary powinien pokazywać „statyczne” znaczniki dla aktualnie „wybranych” nut, oprócz grania aktywnych znaczników, które animują się podczas grania nut. Wymaga to śledzenia stanu, które nuty (strety) mają czasy rozpoczęcia w bieżącej głowicy odtwarzania. 2) Kliknięcie na gryfie gitary powinno przełączać (dodawać/usuwać) nuty z aktywnej sekwencji w bieżącej pozycji głowicy. Zostanie to również zaktualizowane w widoku partytury. 3) Nowa funkcja umożliwia „obszar kroku”, który umożliwia przechodzenie przez partyturę w krokach, jak całe takty. Tak więc bieżący krok może być większy niż pojedynczy punkt czasowy, a widoki gryfu i partytury powinny być w stanie wyświetlać statyczne znaczniki dla wszystkich nut w obszarze kroku. Wydaje się, że jest to duplikat tego samego problemu, który dotyczy głowicy. Jeszcze innym podejściem, które brzydko pachnie, jest zarządzanie tymi nowymi jednostkami/własnością przez komponent Sequencer i publikowanie zdarzeń, takich jak „playheadUpdated” i „stepRegionUpdated”, które zawierają wszystkie niezbędne dane. Znowu wydaje się to złe z powodu niewłaściwego wykorzystania zdarzeń do aktualizacji nadmiarowego stanu w kilku komponentach. Może to zostać złagodzone, jeśli zdarzenie odwołuje się do niezmiennego (lub przynajmniej niepodlegającego zmianom) obiektu (np. w przypadku „stanu głowicy odtwarzania”), być może byłoby to mniej złe. Ale to podejście nadal ma problem, ponieważ inne komponenty nie mogą zmienić głowicy odtwarzania lub regionu kroku bez opublikowania żądania, aby Sequencer obsłużył tę zmianę. Wydaje się bardzo źle. Może inni rozwiązali dokładnie ten rodzaj problemu bardziej elegancko niż mi się wydaje. Wszelkie wskazówki są mile widziane.


title: Dlaczego języki wyższego poziomu nie mają operatorów zwarcia xor ani nand?

text: Podczas gdy wiele języków wyższego poziomu ma bitowe (wyłączne lub) i bitowe (wyłączne i), na przykład C, C++, Java itp. Jestem ciekawy, dlaczego ( _znacznie bardziej przydatne_ ) operatory logicznego zwarcia nie mają tej funkcjonalności ? Czy to po prostu ze względu na zdolność łączenia logiki poprzez użycie „nie”? To pytanie dotyczy głównie rozważań dotyczących projektowania języka....


title: Czy przy implementacji zdarzeń kliknięcia przez jQuery powinienem pozostawić pole href puste?

text: Czy lepiej jest mieć `#` w atrybucie `href` linku, kiedy implementuję zdarzenie `click` za pomocą jQuery, czy można pozostawić `href` puste? np.  vs  Kiedy robię $("#myLink").on('click', function( ) { // wykonaj ajaxy }); Chociaż rozumiem, że zdarzenie kliknięcia może znajdować się na span lub innym podobnym elemencie, interesuje mnie ten przypadek ze względu na najlepsze praktyki podczas używania tagu `a`.


Jak nazywa się książka, która zawiera wskazówki, kiedy użyć każdego czasownika w wywołaniu metody? Na przykład mogę użyć GetApples() do zwrócenia listy instancji Apple; lub mogę użyć BindApples(IControl control), jeśli chcę powiązać te jabłka z listą rozwijaną. Jaka książka sugerowałaby, gdy używasz Get lub Bind jako części nazwy metody?


title: Trwałość danych, wzorce i podejścia

text: Trwałość danych stała się ostatnio dla mnie prawdziwym problemem, zwłaszcza jak długo utrzymywać łączność z bazą danych i ile połączeń jest możliwych dla danego żądania. Używam .NET; jest to jednak ogólne pytanie związane z dowolnym językiem. Z perspektywy .NET łączę się z bazą danych za pomocą EF4 i dla danej strony internetowej mogę utworzyć 6 połączeń na żądanie do renderowania strony. Strona może zawierać wiadomości, ceny akcji itp. i musi być stale aktualizowana. Ostatnio przyglądałem się podejściu jednostki pracy (tj. na żądanie). Tak więc w zasadzie, gdy rozpoczyna się żądanie, jeśli jest to wymagane, połączenie z bazą danych jest otwierane i niszczone po zakończeniu żądania. Nie jestem przekonany, że to najlepsze podejście. Szukam opinii i doświadczeń na ten temat.


title: Jak właściciel Mac lub Unix może naprawić/opracować strony internetowe dla IE6/IE7?

text: Pracuję na Debianie, a przed Debianem byłem na Ubuntu. W mojej poprzedniej pracy po prostu ignorowaliśmy IE6, ale w mojej obecnej pracy strona musi działać bezbłędnie dla IE6 i nowszych. Jedynym wyjściem jest dla mnie skonfigurowanie maszyny wirtualnej z systemem Windows, ale to nie pomaga za każdym razem. Zastanów się, gdybym był niezależnym konsultantem i nie chciałem lub nie miałem wystarczającej ilości pieniędzy, aby kupić licencje na każdą możliwą wersję systemu Windows, jak mógłbym dostarczyć stronę internetową, która działała dla IE6/IE7?


title: Czy dokonałbyś refaktoryzacji, a jeśli tak, czy obciążyłbyś klienta?

text: Pracuję jako freelancer w domu. Klient chce, abym napisał kilka nowych funkcji dla jego CMS, ale zajmuje mi dużo czasu, aby dowiedzieć się, co robi kod, ponieważ jest napisany w bardzo nieczytelnym stylu. Poniżej jest tylko przykład tego, co mam na myśli. Poprzedni programista intensywnie wykorzystywał funkcje anonimowe, eval(), używa głęboko zagnieżdżonych operatorów trójskładnikowych, nie wcinał kodu, nie używał komentarzy i używa zabawnych konstrukcji, takich jak niewłaściwe użycie operatorów logicznych || oraz && do tworzenia warunków if/else (drugi warunek && jest testowany tylko wtedy, gdy pierwszy jest prawdziwy, otwierając możliwość użycia && jako konstrukcji if/else). W sumie to szalony kod i dużo czasu kosztuje mnie, aby dowiedzieć się, jak działa obecny kod. return ($this->main->context != "ajax" || in_array($this->type, $this->definition->ajax)) ? eval('return method_exists($this,"Show'.ucfirst($this->type).'") ? $this->Show'.ucfirst($this->type).'('.(count($$ args) ? join(",",array_map(create_function('$a','return (is_numeric($a) || preg_match("/^array/",$a)) ? $a : "\"". $a."\"";'),$args)) : "").') : null;') : ''; Czy przerobiłbyś ten kod i jak poradziłbyś sobie z takimi sprawami ze swoim klientem, mam na myśli finansowo?


title: Jakie narzędzia do kompilacji nie zależą od javy (lub Rubiego)?

text: Zastanawiam się, jakie ogólne narzędzia do budowania zawierają swoje binarne czasy wykonywania i nie zależą od innego środowiska, które nie jest z nimi dostarczane. Na przykład ANT wymaga Javy, Rake wymaga Ruby itp. byłoby świetnie, gdybym mówił również o narzędziach niezależnych od platformy docelowej, w których po prostu dałbym dowolne polecenie do budowania, dowolne polecenie do testowania itp., a potem mogę zdefiniuj moje artefakty w CI lub tak. Zobaczyłbym coś takiego przydatnego do tworzenia projektów .NET (powiedzmy, zarówno w Windows .NET, jak i Mono), a zwłaszcza projektów Node JS. Nie chcę instalować Javy i / lub Rubiego, jeśli chcę kompilacji .NET lub kompilacji Node JS. To jest trochę ogólne pytanie o świadomość, a nie dokładny problem, z którym mam do czynienia, dlatego nie ma go tutaj, a nie na StackOverflow. **Aktualizacja:** Aby wyjaśnić nieco więcej, szukam skryptu kompilacji, który uruchomiłby MSBuild do kompilacji na przykład (w .NET, a następnie może kilka poleceń Node/NPM w Node itp.), a następnie wykonaj pozostałe kroki kompilacji/testowania, zamiast ustawiać je wszystkie w programie MSBuild (ponownie w przypadku platformy .NET również zastanawiasz się, czy w węźle istnieje równoważna historia). **Aktualizacja2:** Moim celem jest możliwość posiadania programisty na maszynie waniliowej, który po prostu sklonuje kod bez instalowania żadnych zależności z wyjątkiem platformy, na którą docelowy kod jest .NET/Mono lub Node (nawet Java, Ruby lub Python) i nadal być w stanie budować i uruchamiać testy.


title: Wydrukuj widok z dołu drzewa binarnego

text: Dla drzewa binarnego definiujemy odległość poziomą w następujący sposób: Odległość pozioma(hd) od korzenia = 0 Jeśli pójdziesz w lewo, to hd = hd(jego rodzica)-1, a jeśli pójdziesz w prawo, to hd = hd(jego rodzica) +1. Widok dolny drzewa składa się wtedy ze wszystkich węzłów drzewa, gdzie nie ma węzła o tym samym `hd` i wyższym poziomie. (Może istnieć wiele takich węzłów dla danej wartości `hd`. W tym przypadku wszystkie należą do widoku od dołu.) Szukam algorytmu, który wyprowadza widok od dołu drzewa. * * * Przykłady: Załóżmy, że drzewo binarne to: 1 / \ 2 3 / \ / \ 4 5 6 7 \ 8 Widok z dołu drzewa to: 4 2 5 6 8 7 Ok, więc dla pierwszego przykładu, pozioma odległość węzła o wartości 1: 0, poziom = 1 Odległość pozioma węzła o wartości 2: 0 - 1 = -1, poziom = 2 Odległość pozioma węzła o wartości 3: 0 + 1 = 1, poziom = 2 Odległość pozioma węzła o wartości 4: -1 - 1 = -2, poziom = 3 Odległość pozioma węzła o wartości 5: -1 + 1 = 0, poziom = 3 Odległość pozioma węzła o wartości 6: 1 - 1 = 0, poziom = 3 Odległość pozioma węzła o wartości 7: 1 + 1 = 2, level = 3 Pozioma odległość węzła o wartości 8: 0 + 1 = 1, level = 4 Więc dla każdej linii pionowej, która jest dla hd=0, wypisz te węzły, które pojawiają się w ostatni poziom tej linii. Więc dla hd = -2, wypisz 4 dla hd = -1, wypisz 2 dla hd = 0, wypisz 5 i 6, ponieważ oba pojawiają się na ostatnim poziomie tej pionowej linii dla hd = 1, wypisz 8 dla hd = 2, drukuj 7 Jeszcze jeden przykład w celach informacyjnych : 1 / \ 2 3 / \ / \ 4 5 6 7 / \ / \ / \ / \ 8 9 10 11 12 13 14 15 Więc wynik dla tego będzie : 8 4 9 10 12 5 6 11 13 14 7 15 Podobnie dla tego przykładu hd węzła o wartości 1: 0, , poziom = 1 hd węzła o wartości 2: -1, poziom = 2 hd węzła o wartości 3: 1, poziom = 2 hd węzła o wartości 4: -2, poziom = 3 hd węzła o wartości 5: 0, , poziom = 3 hd węzła o wartości 6: 0, poziom = 3 hd węzła o wartości 7: 2, poziom = 3 hd węzła o wartości 8: -3, poziom = 4 hd węzła o wartości 9: -1, poziom = 4 hd węzła o wartości 10: -1, poziom = 4 hd węzła o wartości 11:1, poziom = 4 h d węzła o wartości 12: -1, poziom = 4 hd węzła o wartości 13:1, poziom = 4 hd węzła o wartości 14:1, poziom = 4 hd węzła o wartości 15: 3, poziom = 4 Więc , wynik będzie następujący: hd = -3, drukuj 8 hd = -2, drukuj 4 hd = -1, drukuj 9 10 12 hd = 0, drukuj 5 6 hd = 1, drukuj 11 13 14 hd = 2, drukuj 7 hd = 3, print 15 Czyli wynik będzie następujący: 8 4 9 10 12 5 6 11 13 14 7 15 * * * Znam już sposób, w jaki mogę to zrobić, wykorzystując dużo dodatkowej przestrzeni (mapa i Tablica jednowymiarowa do przechowywania poziomu ostatniego elementu w tej pionowej linii) o złożoności czasowej $O(N \log N)$. A oto implementacja tej metody: #include <iostream> #include <cstdio> #include <mapa> #include <wektor> using namespace std; struct Node{ int dane; Węzeł struktury *w lewo, *w prawo; }; Węzeł* newNode(int dane) { Węzeł *temp = nowy Węzeł; temp->dane = dane; temp->lewo = temp->prawo = NULL; temp. powrotu; } int height(Node *node) { if(węzeł == NULL) return 0; else{ int lh = wysokość(węzeł->lewo); int rh = wysokość(węzeł->prawo); if(lh > rh) zwróć (lh+1); w przeciwnym razie powrót (rh+1); } } void printBottom(Węzeł *węzeł, int poziom, int hd, int min, map< int, wektor<int> >& odwiedzony, int lev[], int l) { if(węzeł == NULL) return; if(poziom == 1){ if(wz[hd-min] == 0 || wz[hd-min] == l){ wz[hd-min] = l; odwiedzone[hd-min].push_back(węzeł->dane); } } else if(level > 1) { printBottom(węzeł->lewy, poziom-1, hd-1, min, odwiedzony, lev, l); printBottom(węzeł->prawo, poziom-1, hd+1, min, odwiedzone, lev, l); } } void findMinMax(Node *node, int *min, int *max, int hd) { if(node == NULL) return; if(hd < *min) *min = hd; w przeciwnym razie if(hd > *max) *max = hd; findMinMax(węzeł->lewy, min, max, hd-1); findMinMax(węzeł->prawo, min, max, hd+1); } int main() { Węzeł *root = newNode(1); root->lewy = nowyWęzeł(2); root->prawo = nowyWęzeł(3); root->left->left = newNode(4); root->lewo->prawo = newNode(5); root->prawo->lewo = newNode(6); root->right->right = newNode(7); root->left->left->left = newNode(8); root->left->left->right = newNode(9); root->left->right->left = newNode(10); root->lewo->prawo->prawo = newNode(11); root->right->left->left = newNode(12); root->prawo->lewo->prawo = newNode(13); root->prawo->prawo->lewo = newNode(14); root->right->right->right = newNode(15); int min = 0, max = 0; findMinMax(root, &min, &max, 0); int lev[max-min+1]; mapa < int, wektor<int> > odwiedzono; mapa<int,wektor<int> > :: iterator to; for(int i = 0; i < max-min+1; i++) lew[i] = 0; int h = wysokość (korzeń); for (int i=h; i>0; i--){ printBottom(root, i, 0, min, odwiedzone, lev, i); } for(it = odwiedził.begin() ; it != odwiedził.end() ; it++) { for(int i=0 ; i < it->drugi.size() ; i++) { cout << it-> drugie[i] << " "; } } return 0; } Szukam pomocy, aby zrobić to w bardziej zoptymalizowany sposób, który zajmował mniej miejsca lub czasu. Czy jest jakaś inna skuteczna metoda rozwiązania tego problemu?


title: Zwrócone nieprawidłowe dane, który kod HttpCode zwrócić?

text: Moja aplikacja internetowa wywołuje interfejs API innej firmy. Jeśli pomyślnie wywołam interfejs API, ale zostaną zwrócone nieprawidłowe dane, które nie mogą być przetworzone przez mój system, jaki kod HttpCode jest najbardziej odpowiedni do zwrócenia użytkownikowi, który mnie wzywa? * 500, nie jestem przekonany. Chociaż był to błąd wewnętrzny, jest to spowodowane czynnikami zewnętrznymi * 503, Być może, chociaż bardzo niejasne * 400, błędy 4XX są zwykle związane z kontaktem klienta z naszym serwerem i dlatego mogą być mylące. Jaka jest najwłaściwsza odpowiedź na powrót do mojego klienta?


title: Czy jest to uważane za „przekazywanie”, jeśli udostępniam zmodyfikowany kod LGPL v3 w serwisie GitHub?

text: Niezwykle ważne jest, aby wiedzieć, co stanowi „przenoszenie” w ramach LGPL v3. Rozważam stworzenie jakiegoś oprogramowania w oparciu o LGPL v3. Oprogramowanie posłuży do uruchomienia aplikacji internetowej. Teraz zastanawiam się, czy klauzule „transportujące” zostałyby aktywowane, gdybym publicznie opublikował zmodyfikowany kod na GitHub. Rozumiem, że żaden z was nie jest prawnikiem, więc sugeruje się, że IANAL. Rozumiem również, że mogę skontaktować się z twórcami oprogramowania LGPL i poprosić o inną licencję.


title: Jak określić, ile liczb jest w systemie liczb zmiennoprzecinkowych?

text: Staram się, aby systemy liczb zmiennoprzecinkowych były dla mnie bardziej intuicyjne. Jest kilka rzeczy, co do których jestem zdezorientowany i myślę, że najlepszym sposobem wyjaśnienia moich nieporozumień byłoby, gdyby ktoś poprowadził mnie przez jedno pytanie: Ile liczb jest w systemie liczb zmiennoprzecinkowych (biorąc pod uwagę podstawę, precyzję, wykładnik maksymalny i wykładnik minimalny)? Oto, o czym myślę: doszedłem do wniosku, że maksymalna możliwa liczba (realmax) podzielona przez najmniejszą możliwą liczbę (realmin) dałaby wszystkie możliwe liczby dodatnie. Część mnie uważa też, że mógłbym podzielić realmax przez najmniejszy przyrost, epsilon maszyny (eps), aby obliczyć, ile jest liczb. Jednak samo spojrzenie na różnice w wielkości między eps (10^-16 dla podwójnej precyzji IEEE) a realmin (10^-308) mówi mi, że to wcale nie jest prawda. Nie mogę wymyślić intuicji, dlaczego! Problemem, z którym się zmagam, jest określenie poprawnej formuły dla realmax i realmin. Odpowiedź, którą otrzymuję za pomocą formuł z mojego podręcznika, różni się radykalnie od tej, którą otrzymałem za pomocą formuły wikipedii. Pomoc!


title: IPv4 do IPv6. gdzie jest IPv5?

text: Jak wszyscy wiemy, po IPv4 pojawił się IPv6. Jak doszło do tego przejścia? Chcę tylko wiedzieć, czy był też jakiś IPv5? czy jest jakaś inna logika w nazywaniu tej wersji IP jako IPv6?


title: Czy do komunikacji między 2 wątkami powinienem używać prostego programowania gniazd?

text: Czy dobrym pomysłem jest komunikowanie się między 2 wątkami za pomocą gniazd w Javie? To, co staram się osiągnąć, to komunikacja międzyprocesowa przy użyciu mechanizmu programowania gniazd/RPC.


title: Jak zarządzać wirtualną grupą w firmie?

text: Pracuję jako inżynier oprogramowania od ponad 6 lat. Ostatnio mój szef poprosił mnie o zbudowanie i zarządzanie wirtualnym zespołem. Chociaż cieszę się, że mogę popracować nad zarządzaniem, nie sądzę, aby zarządzanie było łatwe. Członkowie mojego zespołu pracują przy tym projekcie tylko w niepełnym wymiarze godzin, pochodzą z kilku zespołów, a ich bezpośrednim przełożonym nie jestem ja. Chcą dostać pracę techniczną, ale mój szef chce, żebyśmy zorganizowali jakieś zajęcia. Próbuję wymyślić, jak zrównoważyć te dwa sprzeczne wymagania. Ogólnie rzecz biorąc, mój zespół zarządza kilkoma częściami wewnętrznego BBS, który zawiera tematy dotyczące innowacji. Niestety BBS nie jest zbyt popularny i niewielu kolegów chce na nim spędzić więcej niż sekundę. Mówią, że są zbyt zajęci, ale prawdopodobnie jest to wymówka, prawdopodobnie dlatego, że BBS nie jest przyjazny dla użytkownika. Nie wiem, dlaczego BBS jest tak ważny. Jednak mój szef lubi BBS i chce, aby mój zespół go ulepszył. Osobiście nie wiem, dlaczego ten BBS jest tak ważny. Ogólnie potrzebuję wskazówek, jak do tego podejść.


title: Jak uniknąć narzutu, wciąż implementując pusty wzorzec obiektu?

text: Wdrażam drzewo wyszukiwania binarnego w javie. Wewnątrz klasy BST mam chroniony węzeł klasy (na wypadek, gdybym chciał rozszerzyć na drzewo AVL). Kod znajduje się poniżej. Miałem problem, zarówno koncepcyjny, jak i estetyczny, z zaimplementowaniem pustych węzłów jako wskaźników zerowych. Więc zamiast tego wybrałem wzorzec obiektu null i stworzyłem obiekt EmptyNode, którego kod jest również poniżej. Jednak pomimo tego, że daje mi to ładniejszy kod i coś bardziej koncepcyjnego (dla mnie), mam teraz problem, że kiedy pracuję z drzewem o wysokości n, mogę mieć aż 2^{n+1} - 2^{n} pływające instancje tej klasy EmptyNode, która zajmuje miejsce bez powodu. Jak mam naprawić ten kod, aby uniknąć tego obciążenia, jednocześnie implementując wzorzec obiektu null? Uważam, że EmptyNode powinien być czymś koncepcyjnie podobnym do stałego pola węzła, ale nie mogę tego zaimplementować. Wydaje mi się również, że w dowolnym miejscu powinna znajdować się tylko jedna kopia EmptyNode, ale nie wiem, jak to zaimplementować. Wszelka pomoc lub zalecenia są mile widziane. protected class Node<Key,E>{ protected Key; chroniona wartość E; Węzeł chroniony<Klucz,E> lewy; chroniony węzeł<Key,E> prawo; chroniona int wysokość; chroniony int balanceFactor; Węzeł publiczny(){} Węzeł publiczny(Klucz k, E v){ klucz = k; wartość = v; left = new EmptyNode<Key,E>(); prawo = nowy EmptyNode<Key,E>(); wysokość = 0; Współczynnik bilansu = 0; } Węzeł publiczny(Klucz k, E v, Węzeł<Klucz,E> l, Węzeł<Klucz,E> r){ klucz = k; wartość = v; lewy = l; prawo = r; wysokość = Math.max(l.wysokość(), r.wysokość())+1; BalanceFactor = l.wysokość() - r.wysokość(); } klucz publiczny getKey(){klucz powrotu;} public E getValue(){zwraca wartość;} public Node<Key,E> getLeft(){return left;} public Node<Key,E> getRight(){return right; } public int height(){return height;} public int balanceFactor(){return balanceFactor;} public void setKey(Key k){key = k;} public void setValue(E v){value = v;} public void setLeft (Węzeł<Klucz,E> l){ lewo = l; wysokość = Math.max(l.height(), this.right.height())+1; balanceFactor = left.height() - this.right.height(); } public void setRight(Node<Key,E>r){ right = r; wysokość = Math.max(this.left.height(), r.height())+1; balanceFactor = this.left.height() - right.height(); } public boolean isEmpty(){return false;} public boolean isLeaf(){ return (left.isEmpty()) && (right.isEmpty()); } public boolean hasLeft(){ return !left.isEmpty(); } public boolean hasRight(){ return !right.isEmpty(); } } protected final class EmptyNode<Key,E> extends Node<Key,E>{ public EmptyNode(){ key = null; wartość = null; lewo = prawo = null; wysokość = -1; Współczynnik bilansu = 0; } @Override public void setKey(Key k){} @Override public void setValue(E v){} @Override public void setLeft(Node<Key,E> l){} @Override public void setRight(Node<Key,E > r){} @Override public boolean isEmpty(){return true;} @Override public boolean isLeaf(){return false;} @Override public boolean hasLeft(){return false;} @Override public boolean hasRight(){return fałszywy;}     }


title: Dlaczego zaznaczenie HTML nie jest domyślnie dostępne do przeszukiwania?

text: Zastanawiałem się, dlaczego domyślny tag select w HTML, na przykład: <select name="nazwa_firmy"> <option value=""></option> <option value="1">Firma 1</option> <option value ="2">Firma 2</option> <option value="3">Firma 3</option> <option value="4">Firma 4</option> <option value="5">Firma 5< /option> <option value="6">Firma 6</option> </select> domyślnie nie można przeszukiwać. Oczywiście jest to funkcja przeglądarki, ale to naprawdę dziwne, że żadna przeglądarka (o ile wiem) jej nie ma. Czy coś mi umyka? Czy jest jakaś przeglądarka, która ma domyślnie przeszukiwalny tag wyboru? Czy osiągnięcie tego jest tak skomplikowane, czy po prostu ludzie tego nie chcą? Czy to problem z systemem operacyjnym? Wiem, że mogę to łatwo osiągnąć za pomocą JavaScript (np. Wtyczka Jquery Chosen... itp.), ale zastanawiałem się, czy jest jakiś plan, aby popularne przeglądarki, takie jak Firefox i Chrome, miały go domyślnie. Wynik, którego oczekuję, jest podobny do poniższego obrazu w systemie Windows: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/wyzpv.png)


title: Co uważasz za pierwszą zasadę (zasady) programowania?

text: Zawsze lubiłem zadawać sobie pytanie „jaka jest pierwsza zasada tego?” po tym, jak nauczyłem się podstaw czegoś (np. programowania). To inspirujące pytanie, IMO, które może zmusić cię do zastanowienia się nad najważniejszą zasadą (zasadami) stojącą za czymś, zwłaszcza umiejętnością taką jak programowanie. Jak myślisz, jaka jest pierwsza zasada (zasady) programowania? Nieco później udzielę odpowiedzi poniżej.


title: Sfrustrowany, gdzie jestem, ale nie wiem, dokąd pójść w mojej karierze

text: Pracuję (już od 3 lat) jako główny programista w zespole tworzącym narzędzia wewnętrzne i strony internetowe dla konta klienta w dużej firmie outsourcingowej. Jestem programistą samoukiem, a moje poprzednie wcielenie było wsparciem z trzeciej linii, więc mam solidną wiedzę o infrastrukturze. Używamy VB.Net/MSSQL/SSIS/SSRS ASP.NET (nTier) w domu i mam około 8 lat doświadczenia w kodowaniu. Nie wchodząc w szczegóły, mój szef jest bardzo ambitny i wykorzystuje nasz zespół jako podstawę, by wspinać się po szczeblach kariery. Byłem w zespole od samego początku i jedynymi nowymi programistami, których sprowadziliśmy, byli ludzie z odrobiną doświadczenia w VBA/VBScript, ku mojemu rozczarowaniu, aby wzmocnić jego imperium. Doprowadzenie ich do standardu było bardzo ciężkiej pracy, ale wciąż muszą się wiele nauczyć. To sprawia, że moje życie jest stresujące, ponieważ zawsze dostaję głośną/złożoną pracę projektową, której inni po prostu nie mogą tego zrobić, albo zajęłoby im to dwa lub trzy razy dłużej. Mój szef zawsze szuka dla nas rzeczy do zbudowania dla ludzi, którzy o to nie prosili, co zwykle jest mi rzucane, ponieważ mam największe doświadczenie i mogę szybciej wybrać nowe API (itp.). Nie stawia nam odpowiednich wymagań, nie mamy czasu na właściwe zaprojektowanie, zanim zaczniemy kodować, chce, żebyśmy coś wrzucili (szybko i brudno, jak to nazywa), abyśmy mogli to zrobić JAK NAJSZYBCIEJ. Jestem dumny ze swojej pracy, więc lubię robić to właściwie, dbać o czystość kodu, utrzymywać go w dobrym stanie itd., a także szkolę innych członków zespołu, aby robili to samo. Ale zawsze upadamy na twarz. Klient, na który upuszczamy aplikacje, mówi, że nie robi tego, czego potrzebuje (z powodu kilku wymagań), lub mój szef nie lubi tego/zmienia specyfikację, więc musimy to przerobić, to się przeciąga i to sprawia, że my i ja wyglądamy i czujemy się jak głupcy. Wtedy szef oskarża nas, że nie reagujemy wystarczająco, by się zmienić. Miałem dość. Aby wypełnić swoje umiejętności i lukę w wiedzy, czytałem książki Code Complete 2nd Ed (McConnell) i Head First Design Patterns. Zmuszam się do przejścia do C# z VB w domu, aby poszerzyć swoje horyzonty. Nie wiem, dokąd mam się udać. Nie chcę kodować przez całe życie, ponieważ chciałbym w pewnym momencie przejść do roli projektanta/architekta wyższego poziomu (mam 35 lat). Gdzie mogę/mogę się stąd udać?


title: Jak skonstruować sześcianową reprezentację sześcianu rubika na podstawie tablicy

text: Żeby to usunąć z drogi, widziałem to i nie tego szukam. Powiedzmy, że programujesz kostkę Rubika. (Wiem, bardzo nieoryginalne, ale znudzeni programiści muszą coś zrobić..) Ta kostka Rubika jest zdefiniowana przez tablicę sześciu tablic 2-D (po jednej na każdą twarz), a rozmiary tych tablic 2-D różnią się w zależności od wielkość kostki. Na przykład, gdybym miał kostkę 3x3x3, tablica miałaby rozmiar 6x3x3. Oznacza to, że miałby 6 tablic 3x3. Teraz powiedzmy, że chciałem uzyskać tablicę kostek, które tworzą ten sześcian. Każda kostka jest zdefiniowana przez dwie rzeczy (chyba...): kolory i położenie na kostce. Na przykład, gdybyś miał ułożoną kostkę, jeden z kostek byłby czerwonym, zielonym i żółtym sześcianem, i zakładając, że twoja siedzi w tej samej orientacji co moja, ta kostka będzie przednim, prawym, górnym sześcianem. Jednak nic z tego nie odpowiada na moje pytanie: jak mam zabrać się za zdefiniowanie zestawu tych kostek, biorąc pod uwagę tablicę różnych rozmiarów. Wiem na przykład, że wspomniana wcześniej kostka może być zdefiniowana jako kostka[0][0][wymiar-1], kostka[2][0][0], kostka[4][wymiar-1][wymiar -1. (Dla trochę odniesienia, kolejność, w której definiuję moje twarze, to przód, tył, prawo, lewo, góra, dół. Stąd 0, 2 i 4, tworząc przód, prawo i górę). Powiedziałem, że wolę nie kodować tego wszystkiego na sztywno i zastanawiałem się, czy istnieje prostszy sposób. Więc jaki jest najlepszy sposób na zrobienie czegoś takiego jak to, co właśnie opisałem? **Edytuj:** Dla wyjaśnienia staram się uzyskać oddzielne, pojedyncze, mniejsze kostki, które tworzą kostkę Rubika jako całość. Na przykład kawałek z czerwonymi, zielonymi i białymi naklejkami.


title: Klasy stylu Java w c++

text: Natknąłem się na ten artykuł proponujący styl kodowania w c++, który na początku wygląda trochę dziwnie. Ale po przeczytaniu tego i zastanowieniu przez chwilę naprawdę rozważam wypróbowanie tego. Najbardziej atrakcyjną korzyścią jest łatwość metod refaktoryzacji. Ciągle zmieniam nazwy metod, parametry i tak dalej podczas pisania nowej klasy, aw c++ dość denerwująca jest konieczność zmiany nazwy metody w dwóch plikach (.h, .cpp). Próbowałem znaleźć coś złego w tym stylu, ale poza tym, że kod będzie wyglądał i będzie wyglądał **naprawdę** dziwnie dla wytrawnych programistów C++, nie widzę żadnej większej wady. Ale ponieważ jestem dość niedoświadczonym programistą c++, mam nadzieję, że ktoś tutaj może mnie ostrzec o potencjalnych zagrożeniach. Więc moje pytanie brzmi: **Czy są jakieś poważne wady używania tego stylu kodowania?**


title: Hermetyzuj bitmapę (*.bmp) jako klasę C++

text: Jak zaimplementowałbyś/zaprojektowałbyś klasę, która ma reprezentować bitmapę? Utknąłem w obsłudze różnych możliwych trybów kolorów i ciągle myślę, że powinno to być jakoś możliwe do zaimplementowania za pomocą szablonów / wzorców projektowych w elegancki I wydajny sposób: Załóżmy, że masz plik.bmp. Następnie chcesz otworzyć ten plik, aby użyć go w swojej aplikacji: Bitmap myBitmap(); myBitmap.open("plik.bmp"); Otwarta mapa bitowa może mieć kolory RGB, może to być obraz w skali szarości, a nawet obraz 1 bit na piksel (tj. Czarno-biały). W mojej aplikacji chcę operować na danych obrazu (pikseli). Na przykład potrzebuję jakiegoś filtra jasności, w którym zaciemniam piksele, których (czerwony + niebieski + zielony) / 3 jest poniżej pewnej wartości filtra (tj. 100). Potrzebuję więc dostępu do pikseli: Pixel somePixel = myBitmap.pixelAt(10,30); Ale teraz mam problem, że NIE wiem, jaki to typ piksela. Oczywiście, mógłbym dostarczyć podklasy `Pixel` (która jest wtedy abstrakcyjną klasą bazową), które WSZYSTKIE implementują metody takie jak `getRGB()`, `getGrayScale()`, ... gdzie każda podklasa daje sposób na konwersję między tymi tryby kolorów (tj. RGB do skali szarości) Ale to wydaje się… hm, „niewłaściwe”. Czy znasz jakiś dobry sposób na wdrożenie tego? Fajna funkcja, o której myślałem, to coś takiego: myBitmap.getMode(); // Obiekt RGBMode, gdzie RGBMode jest podklasą Mode myBitmap.setMode(new BlackWhiteMode()); // Konwertuje bitmapę na obraz 1bpp Jakieś pomysły, zalecenia, ulepszenia? * * * Tak więc naprawdę trudne jest przedstawienie różnych trybów kolorów, takich jak RGB (8bit i 4bit), HSV, Skala szarości, BlackWhite, ... bez zakłócania kodu aplikacji.


title: Emacs vs. vim — jaka jest różnica?

text: Od lat zajmuję się programowaniem, głównie w VBA (the _horror_ ), Python, Javascript (głównie Node.js), HTML i SQL. Większość z tych języków miała środowiska, które miały sens: do VBA używałem wbudowanego edytora dla Microsoft Office, HTML mogłem używać wszystkiego i debugować za pomocą Chrome Dev Tools, a SQL nie wymaga niczego wymyślnego. Jednak w przypadku Pythona i JavaScriptu zmieniłem kilka edytorów. Historia mojego użycia: Python - IDLE, nano, Notepad++, Sublime Text 2, JetBrains PyCharm Javascript - Notepad++, Sublime Text 2, Node interpreter, JetBrains WebStorm Języki, których planuję się nauczyć (docelowo): [Clojure | Wspólne seplenienie | Schemat], [C | C++ | Cel C], Ruby, Haskell, Assembly W miarę jak zaczynam poważniej zajmować się programowaniem, zaczynam przyglądać się najsłynniejszym edytorom — emacs i vim. Mam pewne pojęcie o tym, co robią i nie mają ponad IDE. Jestem naprawdę szybkim pisaniem, więc podoba mi się pomysł, aby nie używać myszy. Uwielbiam również funkcje Sublime Text 2 do szybkiego przełączania funkcji i między otwartymi plikami, a także wybór wielowierszowy. Jednak pomimo wielu badań mam problem z ustaleniem różnicy między emacsem a vimem i chciałbym dobrze je zrozumieć, zanim zdecyduję, któremu poświęcić dużo czasu. ## TL;DR **Pytanie:** Jakie są kluczowe różnice między emacsem a vimem? Jakie są zalety i wady każdego z nich dla dewelopera? **Uwaga: _nie_ pytam, co jest lepsze, co jest lepszej jakości, co jest bardziej przydatne — nie próbuję rozpoczynać słynnej debaty. Chcę tylko wiedzieć, co wyróżnia każdy z nich pod względem funkcjonalności i interfejsu użytkownika, aby móc decydować na podstawie własnych potrzeb.**


title: Jakie czynniki należy wziąć pod uwagę podczas rejestrowania aplikacji internetowej (JSF)?

text: Niedawno przeczytałem artykuł Problem z logowaniem i zastanawiałem się nad moją obecną strategią logowania. Zwykle używam Log4J w swoich projektach i po prostu muszę zdecydować, _który wiersz/atrybuty_ chcę logować. Ta strategia sprawdzała się w przeszłości we wszystkich moich projektach bez interakcji z użytkownikiem. Teraz chcę skonfigurować logowanie dla aplikacji internetowej z interakcją z użytkownikiem, taką jak logowanie, zarządzanie sesją, spersonalizowane strony użytkowników itp. i zastanawiałem się, co byłoby najlepszym rozwiązaniem. Doprecyzowuję: nie proszę o pomoc w podjęciu decyzji **jakie** informacje muszę logować, bo wiem o tym sam (lub znaleźć informacje w artykułach na tej stronie lub w google). Pytam o rzeczy związane z tym tematem: * czy powinienem powiązać każdy komunikat dziennika z odpowiednim użytkownikiem w celu śledzenia * czy powinienem otwierać nowy plik dziennika dla każdej sesji * czy są inne dobre biblioteki szczególnie do rejestrowania aplikacji internetowych * czy powinienem rejestruj tylko błędy krytyczne w pliku i obsługuj drobne błędy w widoku (np. pokaż użytkownika) * i jak powinienem być rozmowny w tych wiadomościach wyświetlanych użytkownikowi Wiem również, że jest to szeroki temat i że na to pytanie można łatwo odpowiedzieć przez „to osobisty smak” lub „to zależy”, ale byłbym bardzo wdzięczny każdemu, kto zechce udzielić mi przydatnych wskazówek. Z góry dziękuję


title: Czy mogę licencjonować program na licencji Apache License 2.0, jeśli używa/zawiera Eclipse Link (EPL lub EDL)?

text: Czy mogę licencjonować program na licencji Apache License 2.0, jeśli używa/zawiera EclipseLink? (EclipseLink na licencji Eclipse Public License lub Eclipse Distribution License) Nie zmieniałem niczego w EclipseLink. Bardzo chciałbym rozprowadzić wersję, która zawiera potrzebne słoiki EclipseLink, aby działała "po wyjęciu z pudełka".


title: Sprawdzenie magicznego kwadratu dla macierzy N×N o minimalnej złożoności

text: Czy istnieje jakiś algorytm, który działa lepiej niż „O(n²)” w celu sprawdzenia, czy macierz kwadratowa jest magiczna (np. suma wszystkich wierszy, kolumn i przekątnych są sobie równe)? Widziałem, jak ktoś wspomniał o czasie „O(n)” na stronie kilka dni temu, ale nie mogłem dowiedzieć się, jak to zrobić.


title: Selektywne wzajemne wykluczenie w problemie jadalnianym filozofów oraz czytelników i pisarzy

text: Czytałem o selektywnym wzajemnym wykluczaniu (SME). Pomysł, który mam, jest taki, że jeśli proces konkuruje o swoje zasoby z podzbiorem wszystkich innych procesów, zamiast konkurować ze wszystkimi innymi procesami, to mam do czynienia z problemem MŚP. 1) Czy możesz potwierdzić, że moja definicja jest prawidłowa? Klasycznym tego przykładem jest problem jadalnia-filozofów (SME według bliskości) 2) W rozwiązaniu rozproszonym (w którym każdy filozof konkuruje o oba widelce z dwoma innymi filozofami), jeśli zamiast 5 filozofów było ich trzech, czy nadal byłby to problem MŚP? (Myślę, że nie, ponieważ każdy filozof będzie konkurował ze wszystkimi innymi) 3) A czy w scentralizowanym rozwiązaniu „dyrygent” z 5 filozofami nadal byłby to problem MŚP? (Myślę, że tak, ponieważ chociaż wszystkie procesy konkurują, aby dostać się do kelnera, każdy filozof konkuruje tylko z dwoma innymi, aby uzyskać oba określone widelce) Wreszcie, w problemie czytelników i pisarzy (MŚP według typu procesu) 4) Gdyby zezwolono tylko na 1 czytelnika i 1 pisarza, czy nadal byłby to problem MŚP? (Myślę, że nie, bo właściwie każdy proces będzie konkurował ze wszystkimi innymi)


title: Jak zamodelować dwa podobne zadania za pomocą diagramu przypadków użycia

text: Próbuję narysować diagram przypadków użycia dla projektu oprogramowania. Dwa wymagania dotyczące oprogramowania, które próbuję zamodelować na diagramie przypadków użycia, to: 1. Klient (tj. „Klient”) powinien mieć możliwość anulowania swojego poprzedniego żądania. W takim przypadku klient musi wybrać odpowiedni wniosek ze swojej listy wniosków. 2. „Biuro podróży” powinno mieć możliwość anulowania wniosku. w tym przypadku agent musi klient z listy klientów i żądanie z listy żądań wystawionej przez tego klienta. Jak powinienem modelować te dwa wymagania na diagramie przypadków użytkownika UML? Doszedłem do czegoś takiego: ![Mój diagram przypadków użycia](http://i.stack.imgur.com/VjW4B.png)


title: Rozgałęź się dwa razy, aby uzyskać wyjątkowy stan

text: Rozważmy aplikację, która wyświetla tylko Foobar należące do niego zwykłym użytkownikom i wszystkie Foobary dla administratorów: -- Normalni użytkownicy: SELECT * FROM Foobar WHERE user_id=:user_id; -- Administratorzy: SELECT * FROM Foobar; Obecnie zapytania są reprezentowane w bazie kodu: $sql = "SELECT * FROM Foobar"; if ( $user['type']!='admin' ) { $sql.= 'GDZIE user_id=:user_id'; } $stmt = $pdo->przygotuj($sql); if ( $user['type']!='admin' ) { $stmt->bindValue(':user_id', $user['id']); } Nie podoba mi się to podejście z podwójnym rozgałęzieniem z punktu widzenia łatwości konserwacji. Na przykład, błąd typu `$user['type']=='admin'` zamiast `$user['type']!='admin'` musiałby zostać znaleziony i naprawiony w dwóch miejscach zamiast w jednym . Jednak nie podoba mi się też pomysł oddzielnych funkcji dla każdego przypadku: administratorów i zwykłych użytkowników. Trzecie podejście to jednokrotne rozgałęzienie i utworzenie kodu SQL do dodania i wartości do powiązania: $sql_to_add = ''; $array_to_bind = tablica(); if ( $user['type']!='admin' ) { $sql_to_add = 'GDZIE user_id=:user_id'; $array_to_bind = array( ':user_id'=>$user['id'] ); } $sql = "WYBIERZ * Z Foobara {$sql_to_add}"; $stmt = $pdo->przygotuj($sql); foreach ( $array_to_bind as $k=>$v ) { $stmt->bindValue($k, $v); } Jednak uważam to podejście za niewygodne. **Czy istnieje wzorzec projektowy dla tej sytuacji?** Jaki jest kanoniczny sposób obsługi sytuacji, w których kod musi rozgałęziać się w dwóch oddzielnych lokalizacjach w tym samym warunku „if”?


title: Dalsze artykuły Roba Pike'a na temat złożoności oprogramowania i projektowania

text: w "Uwagach o programowaniu w C", w rozdziale "Złożoność", Rob Pike pisze: > Większość programów jest zbyt skomplikowana - to znaczy bardziej złożona niż jest > być, aby skutecznie rozwiązywać swoje problemy. Czemu? Głównie jest to spowodowane złym projektem >, ale pominę ten problem, ponieważ jest duży. .../... Czy ktoś wie, czy Rob Pike napisał więcej o projektowaniu oprogramowania i jak uniknąć złożoności i gdzie można to znaleźć?


title: Połączony kod analizy i oceny zestawu reguł: zalecenia?

text: Muszę więc napisać system filtrowania, który może zastosować wstępnie przetworzony zestaw reguł do danych - i wyzwolić niektóre akcje zdefiniowane w zestawie reguł, kontynuując jego ocenę. <ruleset name="1"> <rule> <conditions> <and> <or> <match image="aceofspades" level="70" /> <match image="aceofdiamonds" level="66" /> </ lub> <not> <match image="aceofclubs" level="60" /> </not> </and> <action name="apply_ruleset" ruleset="2"> </rule> <rule> ... </rule> </ruleset> <ruleset name="2"> </ruleset> (Dobry przykład tego, jak to jest być podobnym: konfiguracje sendmaila; niektóre konfiguracje Apache; zestaw reguł IPTables, z wieloma tabelami, JOIN/ACCEPT/DROP itp.). Co przeszkadza mi w każdym obecnym projekcie, o którym myślę: * utrzymywanie stanu węzłów i-lub * możliwość łatwego przeskakiwania między głównymi i podrzędnymi zbiorami reguł * śledzenie cyklicznych odwołań * utrzymywanie szerokiego zestawu możliwych warunków * szybkość działania: parsowanie/ haszowanie może zająć trochę czasu, ale każdy pakiet danych musi zostać przepuszczony przez zestaw danych tak szybko, jak to możliwe. O czym powinienem czytać/myśleć, aby mieć pewność, że mój parser będzie na tyle miły, aby pracować z dużymi zestawami i nie psuć zbytnio szybkości/elastyczności? _(Nie wspominając o kodzie iptables)_. * * * Językiem docelowym jest C++ (chociaż chciałby zaimplementować podobny system w Perlu później..), czytałem przez ten \- ale wciąż nie widzę dobrego rozwiązania do przełączania zestawów reguł / trzymania się logiki boolowskiej w regułach.


title: Dlaczego CSS natywnie nie obsługuje zmiennych i hierarchii?

text: Jestem nowy w tworzeniu interfejsu użytkownika, ale czuję się bardzo nieswojo z tym, jak działa CSS. Mój przypadek użycia polega na tym, że chciałem zastosować określone style wewnątrz konkretnego `div` na stronie. **Próba CSS:** div.class1 { czcionka: normalna 12px arial, helvetica, sans-serif; kolor czcionki: #f30; } div.class1 div.class2 { border: 1px solid #f30; } **Mniejsza próba:** @red: #f30; @font-family: arial, helvetica, bezszeryfowa; div.class1 { czcionka: normalna 12px @font-family; kolor czcionki: @czerwony; div.class2 { obramowanie: 1px stałe @red; } Wersja CSS może powodować błędy, ponieważ zmusza do powtarzania `#f30` i `div.class2` za każdym razem, gdy próbujesz osiągnąć hierarchię i ponowne użycie zmiennych. **Moje pytania:** * Dlaczego CSS utrudnia sprawę? * LESS nie robi nic specjalnego - po prostu wprowadza oczywiste ulepszenia i przekłada się na CSS? * Co CSS chce motywować użytkowników, przez co promuje taki nadmiarowy styl kodowania? Mocno wierzę, że CSS powinien być tym, czym jest LESS. Zdecydowanie pomijam pewną oczywistą zaletę tego, dlaczego w CSS robi się to w ten sposób. Myślałem, że to starszy problem, ale byłem zaskoczony, gdy nie widziałem żadnych prób rozwiązania tego za pomocą CSS3. Pomóż mi zrozumieć, jak mam podejść do CSS?


title: Jak działa przechowywanie stałe? (Pozycja 2, Scott Myers Efektywny C++)

text: W Item2 na stronie 16, (Preferuj consts, enums i inline niż #defines), Scott mówi: > Ponadto, chociaż dobre kompilatory nie odkładają pamięci na obiekty stałe > typów całkowitych... Nie rozumiem tego . Jeśli zdefiniuję obiekt const, np. const int myval = 5; to z pewnością kompilator musi odłożyć trochę pamięci (o rozmiarze int) na przechowywanie wartości 5? A może dane const są przechowywane w jakiś specjalny sposób? Przypuszczam, że jest to raczej kwestia przechowywania komputera. Zasadniczo, w jaki sposób komputer przechowuje obiekty const, aby nie odkładać pamięci?


title: Co sprawia, że zespół architektoniczny odnosi sukcesy?

text: Niedawno zostałem mianowany liderem nowo utworzonego zespołu ds. architektury (najbardziej podobnej do architektury systemów lub architektury korporacyjnej, nie jawnie architektury oprogramowania). Moja firma jest średniej wielkości i istnieje ~8 różnych grup inżynierskich, każda z własnymi stosami i własną kulturą. W ramach tej reorganizacji wiele z tych grup zostanie skonsolidowanych, a częścią pracy mojego zespołu jest ustalenie, jak dopasować ich stosy. Myśląc o statucie nowego zespołu, zmagaliśmy się z: 1. W jaki sposób zespół zajmujący się architekturą powinien angażować się i współdziałać z zespołami inżynierskimi bez stania na palcach, zachowując przy tym skuteczność? Kiedy architektura powinna się cofnąć i pozwolić inżynierii robić swoje? 2. (związane z powyższym) Kiedy zespół zajmujący się architekturą powinien coś zbudować, a kiedy powinien udzielić wskazówek i pozwolić zespołowi inżynierskiemu na samodzielne zbudowanie? 3. Jak organizacja może mierzyć sukces grupy architektonicznej? Żaden z celów architektury nie wydaje się łatwy do zmierzenia. **Jako przykład:** Czy zespół ds. architektury powinien być zaangażowany w ustalanie standardów kodowania? Teoretycznie jest to coś, z czego inżynierowie korzystają na co dzień i może być ustalane przez kierownictwo inżynieryjne, ale może być również powiązane z potrzebami architektonicznymi. Na przykład, jeśli architektura definiuje strukturę katalogów standardowego projektu i sposób, w jaki kompilacja powinna być skonfigurowana, aby pasowała do wymaganego przez nią CI, czy nie powinni mieć również wpływu na dokumentację i standardy kodowania, aby być spójne z ich strukturą katalogów. Może to nieelegancki przykład, ale myślę, że ilustruje nasz sposób myślenia. **Inny przykład:** Ustalono, że potrzebujemy nowego magazynu kluczy/wartości do obsługi potrzeb konkretnego projektu, ale nie jest jasne, czy wymagania tego projektu będą kiedykolwiek odczuwalne w przyszłych projektach – wszyscy inni ma sklep k/v, który działa dobrze. Oczywiście architektura będzie brała udział w podejmowaniu decyzji, której technologii użyć (i sprawdzaniu, czy nowa technologia jest rzeczywiście _naprawdę_ potrzebna), ale czy zespół zajmujący się architekturą powinien być odpowiedzialny za zbudowanie infrastruktury dla nowej technologii? Jeśli nie jest prawdopodobne (wszyscy wiemy, że oznacza to BARDZO PRAWDOPODOBNIE), że zostanie on ponownie wykorzystany w różnych projektach, wydaje się, że odpowiedź powinna brzmieć „nie”, ale biorąc pod uwagę powyższe nawiasy, skłaniam się ku „tak” . Czy architektura powinna być zaangażowana w decyzje techniczne na poziomie projektu i na jakim poziomie? **Moje wstępne przemyślenia:** * Zespół ds. architektury tworzy prototypy nowych technologii/systemów, które popiera, a następnie przekazuje do odpowiednich zespołów. * Ogólnie rzecz biorąc, architektura stara się unikać angażowania się w problemy na poziomie projektu (nie chodzi o to, że „powinieneś użyć tego nowego pakietu do tworzenia wykresów, który naszym zdaniem jest fajny”, ale o „próbujemy wprowadzić wszystkich na ten jednolity front- koniec ramy, musisz go użyć "). * Utwórz komitet ds. architektury, w skład którego wchodzą inżynierowie i liderzy biznesu, aby upewnić się, że inżynierowie są częścią procesu podejmowania decyzji. * Architektura musi pozostawać ściśle powiązana z potrzebami i celami biznesowymi bez deptania Produktu. Podstawowym obowiązkiem architektury jest informowanie biznesu o niewykorzystanych technologiach, które oferują potencjalne korzyści. * Architektura powinna ostatecznie poprawić życie inżynierów. Naszym głównym celem powinno być rozwiązywanie problemów raz, aby nie były rozwiązywane wiele razy, co oznacza, że inżynierowie będą mieli więcej czasu na pracę nad „zabawnymi rzeczami”. Przepraszam, że tak długo się zdyszałem. Chętnie poznam wszelkie opinie, szczególnie od tych, którzy pracowali w organizacjach z wpływowymi i efektywnymi zespołami zajmującymi się architekturą.


title: Zadania niepoprawnie skategoryzowane za pomocą klasyfikatorów tekstu online

text: **Kontekst: Znalezienie firmy do wykonania pracy** Przykładem użycia aplikacji, którą chcę napisać jest to, że użytkownik opisuje zadanie, które ma wykonać jakaś firma, np. > Chcę przenieść 10 pudełek (30x40x50cm) książki i ubrania z Londynu do > Bristolu w przyszłym tygodniu. Ile by to kosztowało? a aplikacja znajdzie firmy, które mogą wykonać to zadanie. W takim przypadku należałoby zaklasyfikować zadanie jak dla firm _przeprowadzkowych/transportowych_. **Problem: nieprawidłowa kategoryzacja** Wypróbowałem kilka usług online do kategoryzacji tekstu, ale wyniki są zniechęcające. uSklasyfikuj mój tekst jako „Dom”, „Gry” i „Sztuka”; Textimate.me \--- jako "Nauka i środowisko"; Textwise zwróciło „Business/Consumer_Goods”, „Usługi/Odzież” i „Sztuka/Projektowanie/Moda”. Możliwe przyczyny nieprawidłowej kategoryzacji: * opis zadania jest bardzo krótki i nie ma w tekście wyraźnych cech odróżniających to, co jest ważniejsze dla użytkownika: pudełka, ubrania, a może ich przenoszenie, * klasyfikatory przeszkolone z innych rodzajów tekstów, * klasyfikatorów przeszkolonych w zakresie innej taksonomii. Jak poradziłbyś sobie z takim problemem? **Potencjalne rozwiązanie: zbieranie korpusu specyficznego dla domeny** Ponieważ problem jest dość specyficzny dla mojej domeny, zastanawiam się nad użyciem nadzorowanego algorytmu uczenia maszynowego, który uczyłby się w odniesieniu do już skategoryzowanego korpusu takich zadań. Korpus można pobrać z witryn z zadaniami już skategoryzowanymi przez klientów (odmiana e-bay). Mógłbym również wstępnie przetworzyć tekst przed uczeniem maszynowym: wyodrębnić tylko czasowniki ("move") i rzeczowniki pochodzące od czasowników ("translation"), ponieważ oznaczają, co należy zrobić. Wymaga to sporo pracy, więc jestem ciekawa, czy to właściwy kierunek.


title: Algorytm dla idealnego niebinarnego układu wykresu

text: Mam złożony niebinarny model wykresu. Każdy węzeł drzewa może mieć wielu dzieci i rodziców (węzeł może mieć również połączenie ze swoim "bratem"). Węzeł jest reprezentowany na ekranie jako kwadrat z liniami do połączonych węzłów. Do tego chcę użyć bibliotek Draw2D i GEF. Problem, z którym się borykam, to układ wykresu. Potrzebuję fajnego algorytmu, który może zmienić położenie węzłów kwadratowych i połączeń z minimalnymi przecięciami, a także sprawić, by były symetryczne.


title: PHP i wydajność

text: Zawsze słyszę, że PHP jest dla średnich i małych stron internetowych, a .NET i Java dla aplikacji korporacyjnych. Moje pytanie dotyczy PHP. Dlaczego PHP nie jest dobrym rozwiązaniem dla korporacyjnych aplikacji internetowych? Czy to dlatego, że jeśli aplikacja internetowa staje się większa, PHP będzie wolniejsze, ponieważ jest językiem interpretowanym? Wiem, że świat korporacyjny wybierze .NET lub J2EE ze względu na integrację z ich produktami oraz ze względu na usługi back-end itp. Jeśli jednak mamy tylko PHP do tworzenia stron i aplikacji internetowych, to jak możemy go wykorzystać, aby dobrze działać z duże witryny? Krótko mówiąc, czy istnieje związek między wydajnością PHP a rozmiarem witryny? Jakie są czynniki, które sprawiają, że PHP nie jest odpowiednią opcją dla dużych witryn?


title: Czy leniwe ocenianie/wykonywanie nie powinno być składniowo odróżnione od chętnego oceniania/wykonywania w języku C#?

text: Wiemy o odroczonym wykonaniu lub leniwych funkcjach oceny wprowadzonych w C#. Ale czasami ludzie się z nimi mylą. Ponieważ nie ma znaczącej różnicy. Możesz wiedzieć tylko wtedy, gdy znasz wnętrze. Czy nie powinno być między nimi różnicy syntaktycznej, aby usunąć zamieszanie? Myślę, że słowo kluczowe `let` F# można zaimportować do C#, aby określić leniwe oceny. Like-let selectedItems = Items.Where(i => i.Count < 5); Co myślicie? Aktualizacja: Odpowiadając na pierwszą odpowiedź, nie proponuję, aby słowo kluczowe `let` było używane w miejscach, gdzie leniwa ocena już się odbywa zgodnie z obecnym modelem kompilacji. Wtedy to właściwie nie będzie przydatne. Proponuję, aby słowo kluczowe `let` określało rodzaj wykonania. Do wyczyszczenia var selectedItems = Items.Where(i => i.Count < 5).ToList(); będzie chętnie wykonywany przez obecny model. Ale moja propozycja jest taka, jeśli użyjemy let selectedItems = Items.Where(i => i.Count < 5).ToList(); zostanie wykonany później, tylko wtedy, gdy będzie to wymagane. Chociaż nie jest to pożądane, ponieważ za każdym razem zwróci różne listy tych samych elementów. „Rzecz” zdefiniowana za pomocą słowa kluczowego „let” może być traktowana jako stałe „wyrażenie”, takie jak F#. Aktualizacja 2: Łączenie tej odpowiedzi na SO jako dowód irytacji ludzi z odroczonym wykonaniem - http://stackoverflow.com/questions/215548/whats-the-hardest-or-most-misunderstood-aspect-of-linq/215562#215562


title: Jak wykonać leniwe ładowanie w sposób SOA?

text: Na przykład, mam obiekt główny wyeksponowany w usłudze SOA, powiedz "Faktura" ("Faktura" zawiera elementy wiersza jako elementy podrzędne). Czasami muszę pobrać jego szczegółowe elementy zamówienia. Zastanawiam się nad tym, aby ładowanie było leniwe, ponieważ przesyłanie elementów zamówienia za każdym razem, gdy wymagana jest „Faktura”, jest obciążeniem ruchu. Ale w stylu SOA wydaje się to mało prawdopodobne. Ponieważ wszystko, co może ujawnić, to POCO „Faktura”, które nie zawierają żadnej logiki. W związku z tym nie mogę dołączyć mojej logiki leniwego ładowania do „Faktury”, aby poinstruować ją, aby w razie potrzeby ładowała elementy wierszy.


title: Czy konkuruję z klientem? Czy to jest sprawiedliwe?

text: Od roku pracuję w ramach mojej firmy usługowej dla klienta (ClientA) nad budową platformy. Kilka tygodni temu inny klient (klientB) poprosił mnie o wycenę budowy podobnego produktu. Powiedziałem klientowi B, że pracujemy nad podobnym produktem dla klienta i że mamy dojrzałą platformę, z której mogą korzystać bez kłopotów związanych z robieniem tego od zera. Zasugerowałem więc, aby współpracowali z moim drugim klientem, aby zamiast tego korzystali z jego platformy. Niestety negocjacje nie poszły dobrze z wielu czynników: 1. Klient A nie chce mieć partnerstwa z Klientem B, ale zamiast tego chce pozostać właścicielem platformy i świadczyć ją Klientowi B jako usługę SAAS: co rozumiem, ponieważ zrealizowanej już inwestycji. 2. Platforma nie ma wszystkich funkcji, których chce ClientB, więc musi zainwestować pieniądze w ich rozwój. Jednak niechętnie inwestują takie pieniądze w platformę, której nie są właścicielami. Planują sprzedać go tysiącom własnych klientów, więc opieranie całego biznesu na produkcie, nad którym nie mają kontroli, nie jest dla nich dobrym posunięciem. Zrobiłem co w mojej mocy, aby się zgodzili, ale wygląda na to, że nie mogą, ponieważ każdy chce mieć kontrolę na platformie. Teraz klient B chce, tak jak początkowo chciał, aby moja firma zbudowała podobną platformę i chce, aby moja firma była w tym partnerem. Podzielimy się z nimi dowolnym ROI. To dla mnie trudna decyzja, ponieważ rozumiem, że jako firma nie możemy pracować na tych dwóch platformach jednocześnie. Pierwsza wersja platformy została pozyskana ze strony freelancera pod klauzulą „praca na zlecenie”, więc kod należy do clientA. Nie możemy więc ponownie wykorzystać żadnej części tej pracy. Jako kierownik firmy mam dylemat, ponieważ podejrzewam, że klient A uzna ten ruch za niesprawiedliwy. Jakie są twoje przemyślenia na ten temat? Edycja: Nie ma podpisanej umowy NDA, a poza tym nie podpisałaby umowy NDA z klauzulą niekonkurującą.


title: Jaki jest najbardziej praktyczny sposób dodania funkcjonalności do tego fragmentu kodu?

text: Piszę bibliotekę open source, która obsługuje siatki heksagonalne. Obraca się głównie wokół klasy `HexagonalGrid` i `Hexagon`. Istnieje klasa `HexagonalGridBuilder`, która buduje siatkę zawierającą obiekty `Hexagon`. To, co staram się osiągnąć, to umożliwienie użytkownikowi dodawania dowolnych danych do każdego Sześciokąta. Interfejs wygląda tak: public interface Hexagon extends Serializable { // ... inne metody nieistotne w tym kontekście <T> void setSatelliteData(T data); <T> T getSatelliteData(); }       Na razie w porządku. Piszę jednak inną klasę o nazwie `HexagonalGridCalculator`, która dodaje do biblioteki kilka fantazyjnych elementów obliczeniowych, takich jak obliczanie najkrótszej ścieżki między dwoma `Hexagon`s lub obliczanie linii wzroku wokół `Hexagon`. Mój problem polega na tym, że potrzebuję od użytkownika podania pewnych danych dla obiektów `Hexagon`, takich jak **koszt** przejścia przez `Hexagon` lub flaga `boolean` wskazująca, czy obiekt jest **przezroczysty/ zadowalający** czy nie. Moje pytanie brzmi, jak mam to zaimplementować? Moim pierwszym pomysłem było napisanie takiego interfejsu: public interface HexagonData { void setTransparent(boolean isTransparent); void setPassable(wartość logiczna isPassable); void setPassageCost(koszt int); } i zmusić użytkownika do zaimplementowania go, ale potem przyszło mi do głowy, że jeśli dodam później jakąś inną funkcjonalność, cały kod się zepsuje dla tych, którzy używają starego interfejsu. Więc moim następnym pomysłem jest dodanie adnotacji takich jak `@PassageCost`, `@IsTransparent` i `@IsPassable`, które można dodać do pól, a kiedy wykonuję obliczenia, mogę szukać adnotacji w `satelliteData` dostarczonych przez użytkownik. Wygląda to wystarczająco elastycznie, jeśli uwzględnię możliwość późniejszych zmian, ale wykorzystuje refleksję. Nie mam porównania kosztów korzystania z adnotacji, więc jestem tutaj trochę po omacku. Myślę, że w 90-95% przypadków wydajność nie jest ważna, ponieważ większość użytkowników nie użyje siatki, gdy jest to istotne, ale mogę sobie wyobrazić, że ktoś próbuje stworzyć siatkę o rozmiarze `5.000.000.000 X 5.000. 000.000`. Więc którą ścieżką powinienem zacząć iść? Czy są jakieś lepsze alternatywy? _Uwaga: te pomysły nie zostały jeszcze wdrożone, więc nie zwracałem zbytniej uwagi na dobre imiona._


title: Jak zaprojektować stronę internetową z możliwością wyszukiwania?

text: Załóżmy, że chcesz utworzyć stronę internetową z pewnymi możliwościami wyszukiwania w bazie danych. Wyszukiwanie musi być ograniczone zarówno do niektórych kategoryzacji danych, jak i otwartego tekstu podanego przez użytkowników. Wymagania funkcjonalne i niefunkcjonalne stawiają następujące ograniczenia: * Wyszukiwanie musi być szybkie * Paradygmat reprezentacji danych (tj. relacyjny, obiektowo-relacyjny, częściowo ustrukturyzowany...) powinien wspierać duże modyfikacje na każdym etapie życia oprogramowania. * Paradygmat bazy danych powinien umożliwiać łatwą refaktoryzację istniejącego kodu klienta Mając to na uwadze 1. Czy poleciłbyś relacyjną bazę danych? Jak poradziłbyś sobie z ograniczeniami w tym scenariuszu? 2. Czy poleciłbyś bazę danych XML? Jak poradziłbyś sobie z ograniczeniami w tym scenariuszu? 3. Jeśli uważasz, że powyższe rozwiązania są nieprzydatne w świetle tego problemu... jakie może być przydatne podejście? Proszę podać bibliografię (lub kilka stron internetowych) na poparcie swoich odpowiedzi. Dziękuję!


title: Czy PhoneGap jest skalowalny?

text: Jestem front-end developerem, który zajmuje się tworzeniem aplikacji mobilnych. Kiedy szukam sposobów na zajęcie się tworzeniem aplikacji, PhoneGap jest pierwszą i najbardziej znaną metodą tworzenia stosów językowych. To naprawdę miłe, że mogę tworzyć aplikację w HTML/CSS/JavaScript przy użyciu API PhoneGap. Ale czy PhoneGap jest wystarczająco skalowalny? Jak daleko mogę się z tym posunąć w tworzeniu złożonych aplikacji i aplikacji na dużą skalę? Dlaczego i dlaczego nie powinienem zacząć uczyć się Objective-C, aby przejść do tworzenia aplikacji?


title: Jak mogę poinformować potencjalnych pracodawców, że jestem świetnym programistą?

text: Niedawno przeczytałem przewodnik Joela dotyczący znajdowania świetnych programistów i czuję się naprawdę mocno, że jestem _mądry_ i _załatwiam sprawy_. Problem polega na tym, że nie nauczyłem się, jak _załatwiać sprawy_ do mniej więcej połowy studiów, więc mój GPA jest mniej niż gwiezdny. Dodatkowo mam kilka innych rzeczy przeciwko mnie: późne wejście na rynek pracy (około 30 lat), brak stażu, państwowa szkoła wyższa zamiast uniwersytetu, a kiedy skończyłem, musiałem podjąć pierwszą pracę, która się oferowała. Biorąc pod uwagę wszystkie te rzeczy, moje CV (pierwszy krok do zdobycia pracy) nie jest szczególnie imponujące. Co mogę zrobić, aby ludzie wiedzieli, że jestem świetnym programistą i będę uzupełniał najlepsze firmy na świecie?


title: Idea funkcji w Scali / Functional Java

text: Od rozwoju sterowanego mózgiem > Okazuje się, że każda funkcja, jaką kiedykolwiek zdefiniujesz w Scali, stanie się > instancją Implementacji, która będzie miała określoną funkcję > Cechę. >> Istnieje cała masa takich cech funkcyjnych, od Function1 do > Function22. > > **Ponieważ funkcje są obiektami w Scali, a Scala jest językiem statycznie typizowanym, musi zapewnić odpowiedni typ dla każdej funkcji, która ma > inną liczbę argumentów.** Jeśli zdefiniujesz funkcję z > dwoma argumentami , kompilator wybiera Function2 jako typ bazowy. Również z bloga Michaela Froha > **Musisz tworzyć klasy FunctionN dla każdej liczby parametrów, które > chcesz?** Tak, ale definiujesz klasy raz, a potem używasz ich na zawsze, > a najlepiej, że są już zdefiniowane w bibliotece (np. Functional Java > definiuje klasy F, F2, ..., F8, a standardowa biblioteka Scala definiuje > klasy Function1, ..., Function22) Mamy więc listę cech funkcji (Scala) i lista interfejsów (Functional-java), aby umożliwić nam korzystanie z funkcji pierwszej klasy. Próbuję dokładnie zrozumieć, dlaczego tak jest. Wiem, na przykład w Javie, kiedy piszę metodę, powiedz public int add(int a, int b){ return a + b; } Że nie mogę iść dalej i napisać add(3,4,5); (błąd byłby taki: metoda add nie może być zastosowana do podania typów) Po prostu musimy zdefiniować interfejs/cechę dla funkcji o różnych parametrach, z powodu statycznego typowania?


title: Rodzaje kontenerów w Golang

text: W przypadku języka innego niż OOP, takiego jak Google Go, czy idiomatycznym jest wdrażanie nowych typów kontenerów przy użyciu typów danych, takich jak tablice lub listy, aby zaimplementować wygodną funkcjonalność, taką jak metoda `contains`, której nie ma we wszystkich wbudowanych typach kontenerów?


title: Java framework dla kreatora stron internetowych

text: Chciałbym utworzyć kreatora internetowego lub kreatora na/w witrynie internetowej. Wiem, że istnieje kilka frameworków Java dla kreatorów, ale nie ma żadnego w szczególności dla sieci. Jeśli szukam frameworka, zawsze otrzymuję kreatory do stworzenia strony internetowej, apletu, serwletu i czego nie. Ale nigdy, jak stworzyć samego takiego czarodzieja. Więc pytanie (pytania) brzmi: Jakiego frameworka powinienem użyć do stworzenia kreatora internetowego? A jakie są frameworki? Kreator będzie wizualizacją wdrożenia procesu BPEL na apache ode. Pomyślałem, że aplikacja internetowa będzie łatwa, ponieważ Apache i tak działa. Nie jestem z tym związany, może ktoś ma lepszy pomysł.


title: Czy istnieje formalna definicja jakości oprogramowania?

text: Poszukuję formalnej definicji jakości oprogramowania. Rozumiem, że ISO 25000 ma zapewniać lub mierzyć jakość oprogramowania, ale nie wydaje się jeszcze gotowe i nie mogę powiedzieć, czy zawiera konkretnie taką definicję. Obecnie ISO 9126 zawierało jedną taką definicję, ale rozumiem, że jest ona zastępowana przez ISO 25000. Pytam więc, czy istnieje formalna definicja jakości oprogramowania?


title: „Używane za pozwoleniem” wielokrotnego użytku w pracy pochodnej na GPLv2?

text: Plik LICENSE aplikacji GPLv2, którą modyfikuję, zawiera stwierdzenie, że niektóre zasoby używane w aplikacji zostały „wykorzystane za zgodą” osób trzecich – na przykład materiały tekstowe z opublikowanej książki i niektóre grafiki. Pytanie: czy w mojej pracy pochodnej opartej na tej aplikacji muszę uzyskać zgodę tych osób trzecich na korzystanie z tych samych zasobów? A może GPLv2 obejmuje fakt, że korzystanie z tych zasobów było już dozwolone w oryginalnej pracy, a zatem pozwolenie strony trzeciej „przepływa” do mojej pracy pochodnej?


title: Przestrzenie nazw, dlaczego są niezbędne dla prefiksów?

text: Czytałem więc o przestrzeni nazw w w3schools i rozumiem, że mają one jednoznacznie identyfikować element. Ale jaki jest sens posiadania przestrzeni nazw, jeśli musisz mieć obok nich prefiksy. Czy zawsze wymagane są prefiksy z przestrzeniami nazw? Jeśli nie, czy zawsze musisz mieć przestrzenie nazw z prefiksami? Jeśli tak, dlaczego? Na przykład: <root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/meble"> <h:table> <h :tr> <h:td>Jabłka</h:td> <h:td>Banany</h:td> </h:tr> <f:name>Afrykański stolik kawowy</f:name> <f: width>80</f:width> <f:length>120</f:length> </f:table> </root> Czy f i h nie identyfikują jednoznacznie różnych typów elementów? Dzięki za pomoc. Naprawdę nie mogę zrozumieć, dlaczego istnieją przestrzenie nazw.


title: Wzorzec stanu - czy stan powinien wiedzieć o swoim kontekście?

text: Odnoszę się do wzorca stanu opisanego w tym łączu. Na przykładowym diagramie klas kontekst ma wiele stanów. Nie pokazuje jednak, w jaki sposób stan komunikuje się z kontekstem (być może wejście w stanie ma wpływ na ustawienie w kontekście). Dwa przykłady na stronie pokazują albo przekazywanie kontekstu do stanu za pomocą funkcji, albo przechowywanie odwołania do kontekstu. Czy to jest wskazane? Czy istnieją inne sposoby na komunikowanie się państwa z kontekstem? * * * Aktualizacja do edycji: Na przykład robię pilota, który może mieć kilka stanów. Powiedzmy, że kontekst ma ustawienie głośności, a ja jestem w jednym ze stanów, które pozwalają mi dostosować głośność. W jaki sposób stan powinien komunikować się z kontekstem, w którym zmienia się głośność?


title: Przejście z historii użytkownika do kodu przy użyciu TDD (scrum)

text: Wkraczam w scrum i TDD i myślę, że mam trochę zamieszania, o którym chciałbym uzyskać twoją opinię. Załóżmy, że mam w backlogu user-story, żebym mógł zacząć go rozwijać w ramach TDD muszę mieć wymagania, prawda? Czy to prawda, że menedżer produktu i dział kontroli jakości powinni być odpowiedzialni za przygotowanie historii użytkownika i rozłożenie jej na testy akceptacyjne? Myślę, że powyższe jest prawdą, ponieważ testy akceptacyjne muszą być formalne, aby mogły być używane jako testy, ale także czytelne dla człowieka, aby produkt mógł zatwierdzić, że są to wymagania, prawda? Czy to prawda, że później biorę te testy akceptacyjne i używam ich jako moich wymagań, czyli są zbiorem przypadków użycia, które implementuję (poprzez TDD)? Mam nadzieję, że nie robię zbyt wielkiego bałaganu, ale to jest obecny przepływ, o którym teraz myślę. **Aktualizacja** Myślę, że moje początkowe intencje były niejasne, więc spróbuję to przeformułować. Chcę poznać więcej szczegółów na temat przepływu scrumowego przekształcania historii użytkownika w kod podczas korzystania z TDD. Punkt wyjścia jest oczywisty, użytkownik zgłasza potrzebę (lub jego przedstawiciel jako produkt), którą jest krótki 1-2-wierszowy opis w znanym formacie, który jest dodawany do rejestru produktu. Podczas wiosennego spotkania planistycznego historie użytkowników są pobierane z backlogu i przydzielane deweloperom. Aby deweloper mógł pisać kod, potrzebuje wymagań (zwłaszcza w TDD, ponieważ wymagania są tym, z czego wywodzą się testy). Kiedy, przez kogo iw jakim formacie kompilowane są wymagania? Miałem na myśli to, że produkt i QA definiują wymagania za pomocą testów akceptacyjnych (myślę o automatycznym użyciu FitNesse lub tego typu, ale myślę, że to nie jest rdzeń), które pomagają jednocześnie służyć dwóm celom: 1. Prawidłowo definiują „Gotowe”. 2. Dają programiście coś, z czego może czerpać testy. Nie byłem pewien, kiedy zostały napisane (przed sprintem, które zostały wybrane, może to być strata, ponieważ nadejdą dodatkowe informacje lub historia nie zostanie wybrana, podczas iteracji programista może utknąć w oczekiwaniu na nich. ...)


title: Jaka konwencja nazewnictwa dla pliku C# zawierającego wiele klas?

text: W projektach C# często grupujemy małe i ściśle powiązane klasy w ten sam plik `.cs`. Ta praktyka zmniejsza trudności związane z radzeniem z niezliczoną ilością plików, które prawie nie zawierają rzeczywistego kodu. Czy jednak istnieje ustalona praktyka nazywania _pliku_, który zawiera wiele klas?


title: Autorytatywne źródła najlepszych praktyk w zakresie obsługi wyjątków

text: Moje miejsce pracy cierpi na zły przypadek anty-wzorca obsługi wyjątków Pokemonów z konstrukcjami podobnymi do tego, które zostały rozrzucone po bazie kodu: try { ... } catch (Exception ex) { // Zaloguj się i udawaj, że nic się nie stało. Log.LogException(ex); } Znalazłem wiele odpowiedzi na stronach Stack Exchange, które wyjaśniają, dlaczego powyższe jest złe. Ale nie znalazłem żadnych _autorytatywnych_ źródeł, takich jak książki, artykuły w czasopismach dla programistów lub strony msdn wyjaśniające, dlaczego nie powinieneś pisać kodu takiego jak powyżej. Czy są takie źródła, jeśli tak, to gdzie? **Edytuj** : powiedziałbym, że „sławni” blogerzy również liczą się jako wiarygodne źródła. Moja zasada dotycząca tego, co liczy się jako autorytatywne, a co nie, nie jest dokładnie ustalona.


title: Dlaczego wszystkie funkcje <algorytm> przyjmują tylko zakresy, a nie kontenery?

text: W `<algorithm>` jest wiele przydatnych funkcji, ale wszystkie działają na "sekwencjach" - parach iteratorów. Np. jeśli mam kontener i lubię na nim uruchomić `std::accumulate`, muszę napisać: std::vector<int> myContainer = ...; int sum = std::accumulate(mójKontener.begin(), mójKontener.end(), 0); Kiedy wszystko, co zamierzam zrobić, to: int sum = std::accumulate(myContainer, 0); Co w moich oczach jest nieco bardziej czytelne i wyraźniejsze. Teraz widzę, że mogą wystąpić przypadki, w których chcesz operować tylko na częściach kontenera, więc zdecydowanie przydatna jest _opcja_ przekazywania zakresów. Ale przynajmniej z mojego doświadczenia wynika, że to rzadki szczególny przypadek. Zwykle będę chciał operować na całych kontenerach. Łatwo jest napisać funkcję opakowującą, która pobiera kontener i wywołuje na nim `begin()` i `end()`, ale takie wygodne funkcje nie są zawarte w standardowej bibliotece. Chciałbym poznać uzasadnienie tego wyboru projektu STL.


title: W jaki sposób inny popularny język mógłby uniknąć konieczności używania wzorca fabryki przy zarządzaniu podobną złożonością jak w Java/Java EE?

text: Wzorzec Factory (a przynajmniej użycie `Factory..`) jest przedmiotem wielu żartów, jak tutaj. Oprócz posiadania pełnych i „kreatywnych” nazw, takich jak RequestProcessorFactoryFactory.RequestProcessorFactory, czy jest coś fundamentalnie złego we wzorcu fabryki, jeśli musisz programować w Javie/C++ i istnieje przypadek użycia dla wzorca Abstract_factory_pattern? W jaki sposób inny popularny język (na przykład Ruby lub Scala) uniknąłby konieczności używania go podczas zarządzania podobną złożonością? Powodem, dla którego pytam jest to, że widzę głównie krytykę fabryk wymienionych w kontekście ekosystemu Java/Java EE, ale nigdy nie wyjaśniają, jak inne języki/frameworki je rozwiązują.


title: Rozpowszechnianie przychodzących danych wsadowych w strumień w czasie rzeczywistym

text: Chciałbym wyświetlać niektóre wydarzenia w czasie rzeczywistym. Muszę jednak pobrać dane z innego źródła. Mogę poprosić o ostatnie X minut, chociaż źródło jest aktualizowane co około 5 minut. Oznacza to, że wystąpi opóźnienie między najnowszymi pobranymi danymi a momentem, w którym wyślę żądanie. Po drugie, ponieważ będę otrzymywać partię danych, nie chcę po prostu uruchamiać wszystkich zdarzeń w gnieździe po ich pobraniu przez program pobierający: chciałbym rozłożyć zdarzenia tak, aby oba były dokładnie rozłożone między wzajemnie i zsynchronizowane z oryginalnymi wystąpieniami (np. zdarzenie jest zawsze wyświetlane 6 minut po tym, jak faktycznie miało miejsce). Myślę, że co 5 minut pobieram dane ze źródła, wiedząc, że nie dostanę najnowszych danych. Oryginalne dane byłyby następnie umieszczane w kolejce do wysłania do gniazda 7,5 minuty od oryginalnego znacznika czasu – czyli co najmniej ~2,5 minuty od momentu pobrania partii i co najwyżej 7,5 minuty od tego czasu. Moje pytanie brzmi: czy to najlepszy sposób na podejście do problemu? Czy ten problem ma jakieś standardowe podejścia lub powiązaną literaturę związaną z najlepszymi praktykami wdrożeniowymi i skrajnymi przypadkami? Martwię się, że częstotliwość moich pobrań i częstotliwość aktualizacji źródła nie będą zsynchronizowane, co doprowadzi do punktów, w których żadne dane nie będą pobierane ze źródła. Jednak ponieważ moje opóźnienie gniazda jest większe niż częstotliwość pobierania, kolejne pobieranie powinno pobierać nowsze dane, zanim kolejka gniazda będzie pusta. Czy to jest poprawne? Czy czegoś mi brakuje? Dziękuję!


title: Długości pól ciągów SQL w bazie danych z około 6 różnymi typami adresów, z około 20 rynkami i środowiskami

text: Ostatnio opowiadam się za tym, aby wszystkie pola tekstowe miały postać ntext / nvarchar(max) - używamy MS SQL Server. Zastrzeżenia wydają się być albo „to nie jest dobry pomysł” (bez powodu) albo „co pozwoliłoby klientowi wysłać dużo bzdur”. Skoro wierzę w filtrowanie bzdur, zanim trafią do bazy danych, czy istnieje _dobry_ powód, dla którego mój pomysł jest zły? Moim głównym argumentem za nieograniczaniem pól ciągów jest to, że odkryłem, iż mamy około sześciu różnych typów adresów (klient, sprzedawca itd.), z około 20 rynkami (każdy ma własną bazę danych) i środowiskami. Zauważyłem co najmniej dziesięć różnych długości dla powiedzmy Address1 i to samo dzieje się w innych polach. Zamiast „ustandaryzować” je, a następnie odkryć, że coś przeoczyliśmy, zasugerowałem, abyśmy ograniczyli dane wejściowe i pozwolili bazie danych obsłużyć wszystko. Czy ktoś ma problem, którego nie widzę? (Widziałem praktyczną regułę dla rozmiarów pól, ale skupiam się na tym, że „wszystko jest źle ustawione w maksymalnym rozmiarze?”)


title: Rozpoznawanie słów w ciągu bez spacji i znaków interpunkcyjnych

text: Mam mały projekt C#, który odczytuje plik i daje mi dane wyjściowe: ciąg, który nie zawiera spacji ani żadnych typów znaków interpunkcyjnych. Może również zawierać kilka błędów ortograficznych. Były. Wyjście: THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG **Zastanawiam się, czy istnieje sposób na przeanalizowanie tego ciągu za pomocą eksploracji tekstu/eksploracji danych i/lub wyrażeń regularnych do identyfikacji słów (najlepiej rzeczowników, czasowników itp.) w ciągu?** Chcę odczytać kilka plików dających mi różne wyniki i ułożyć je w statystycznej kolejności od tego z najczęściej znajdowanymi słowami do tego, który zawiera tylko ciąg mumbo jumbo. Ponadto, jeśli ciąg zawiera błędy ortograficzne, takie jak: THEQUICGBROWNFOSJUMPSOVERTHHLAZYDOG Wiem, że wyrażenie regularne może obliczyć „odległości” od błędnie napisanego słowa i znaleźć najbardziej pasujące (przy użyciu korpusu i prawdopodobieństwa), ale może to okazać się większym wyzwaniem, ponieważ ciąg nie zawierają spacji ani znaków interpunkcyjnych. Jakieś pomysły, jak mogę to rozwiązać?


title: Jak wyjaśnić A a = new B();?

text: Załóżmy, że mamy pewną strukturę klas: interfejs publiczny IA { public void doA(); } public class A implementuje IA { public void doA(){ System.out.println("A klasa doA");} public class B extends A { public void doA(){ System.out.println("B klasa doA" ); } A teraz w głównym oświadczam tak: //w głównym IA ia = new B(); ia.doA(); Czy mam rację stwierdzając, że obiekt wykonawczy `ia` jest klasą B i odziedziczył wszystkie metody i atrybuty superklas? Wydruk z wyimaginowanej głównej to `doA klasy B`, ponieważ metoda `doA` w B ukryje te same metody w swoich superklasach?


title: Jaka jest różnica między wyliczeniem a iteratorem?

text: Jakie są różnice między Enumeration a Iteratorem To pytanie pochodzi od wczesnych lat wywiadu, nie widziałem tego pytania w ostatnich wywiadach, ale było to w 2012 roku, teraz pojawiły się pytania takie jak implementacja HashMap, ConcurrentHashMap itp., niemniej jest to bardzo przydatne poznać podstawową różnicę między iteratorem a enumeracją. Czasami jest również pytany jako Iterator vs Enumeration lub Enumeration vs Iterator, który jest taki sam. należy zauważyć, że zarówno Iterator, jak i Enumeration umożliwiają przechodzenie lub poruszanie się po całej kolekcji w java


title: Czy powinienem podać synonimy w interfejsie API?

text: Projektuję małą bibliotekę i istnieje silna pokusa, aby podać synonimy do niektórych eksportowanych funkcji. var foldl = function(){ ... }; var zmniejsz = złóż; //reduce jest synonimem foldl Wyobrażam sobie, że wiele nazw może pomóc w początkowej nauce API (ponieważ użytkownik jest bardziej skłonny natknąć się na funkcję, którą chce), ale jednocześnie martwię się, że powielanie przyniesie niepotrzebną złożoność . **O jakich zasadach powinienem pamiętać, myśląc o dodaniu synonimu do funkcji w moim API?** Kiedy mam wybrać api „istnieje więcej niż jeden sposób na zrobienie tego” i kiedy powinienem zachęcać, jest jeden sposób to zrobić” zamiast tego?


title: Jak zmierzyć czas stracony z powodu problemów środowiskowych?

text: Staram się ustalić, jak możemy zmierzyć, ile czasu programiści tracą na źle zarządzane środowisko i nieefektywne sposoby pracy. **Cele to:** 1. Pokaż kierownictwu, jak duży jest problem, w zakresie, do którego mogą się odnosić. To znaczy $$$ 2. Uzyskaj dobrą linię bazową, abyśmy mogli mierzyć postępy. **Krótkie tło:** zarządzamy środowiskiem programistycznym dla 500 programistów. Obejmuje to IDE (głównie Eclipse i Visual Studio), systemy kontroli wersji (ClearCase), jakie programy mają do dyspozycji. Zasadniczo wszystko, co dotyczy komputera, co wiąże się z programowaniem. Przykłady: brak możliwości pracy z narzędziami, do których są przyzwyczajeni ze względu na surowe wymagania bezpieczeństwa. Używanie systemu kontroli wersji w zły sposób powoduje problemy podczas pracy równoległej. Konfiguracja środowiska projektowego odbywa się ręcznie i za każdym razem jest inna. Korzystanie z gotowych frameworków, a nie standardów branżowych. Budowanie trwa dłużej niż to konieczne ze względu na domowe praktyki. Wdrożenie trwa dłużej niż to konieczne ze względu na domowe praktyki. **Nie** obejmuje to rzeczywistych praktyk kodowania, zarządzania projektami ani spotkań. Jasne, my też możemy wpłynąć na te rzeczy, ale w przypadku tych pytań te rzeczy są poza zakresem. **Pytanie:** Więc jak możemy określić, ile czasu tracimy z powodu środowiska projektowego? Jedyne, co przychodzi mi do głowy, aby uzyskać dobre dane, to ankiety i kwestionariusze. Czy ktoś zrobił coś takiego? Jakie były doświadczenia i wyniki? Czy istnieje inna literatura lub badania, z których mogę czerpać pomysły lub porównywać wyniki? _Istnieją inne pytania dotyczące nieefektywności programistów (takich jak to), ale te odnoszą się do praktyk kodowania i błędów._


title: Gdzie powinienem przechowywać moje pliki graficzne dla aplikacji

text: Więc w mojej aplikacji mam kilka obrazów. Aby zmniejszyć rozmiar aplikacji, mogłem przechowywać te obrazy na swoim serwerze i po prostu je pobierać i buforować w razie potrzeby. Ale moje pytanie brzmi, czy to zaszkodzi wrażeniom użytkownika? Czy jest prawdopodobne, że użytkownik iOS nie będzie miał dostępu do Internetu podczas korzystania z mojej aplikacji?


title: Struktura repozytorium Mercurial z rozbudowaną komunikacją korporacyjną, zarządzaniem konfiguracją i wymaganiami testowymi

text: Jestem kolejnym użytkownikiem Subversion, który zmaga się z reedukacją w Tao rozproszonej kontroli wersji. Kiedy korzystałem z Subversion, byłem wielkim fanem podejścia projekt-minor i, wraz z większością moich byłych pracodawców, ustrukturyzowaliśmy nasze gałęzie repozytorium; tagi i pień w następujący sposób: gałęzie-+ +-osobiste-+ | +-alicja-+ | | +-shinyNowa funkcja | | +-ZAUTOMATYZOWANE-+ | | +-shinyNowa funkcja | +-bob-+ | +-ZAUTOMATYZOWANE-+ | +-bespokeCustomerProject +-project-+ +-shinyNewFeature +-fixStinkyBug tags-+ +-m20110401_releaseCandidate_0_1 +-m20110505_release_0_1 +-m20110602_milestone trunk W samym drzewie źródłowym użylibyśmy (coś w rodzaju) następującej struktury: (src)-+ +-developmentAutomatyka-+ | +-testAutomatyzacja | +-deploymentAutomatyzacja | +-docGeneration | +-staticAnaliza | +-systemTest | +-wydajnośćPomiar | +-configurationManagement | +-narzędzia +-biblioteki-+ | +-log-+ | | +-buduj | | +-doc | | +-test | +-statystyki-+ | | +-buduj | | +-doc | | +-test | +-wykresy-+ | | +-buduj | | +-doc | | +-test | +-distributedComputing-+ | | +-buduj | | +-doc | | +-test | +-widżety-+ | +-buduj | +-doc | +-test +-productLines-+ | +-flagshipProdukt-+ | | +-coolFunkcja | | +-innyCoolFeature | | +-buduj | | +-doc | | +-test | +-coolNewProduct +-project-+ +-bigImportantCustomer-+ | +-bespokeProjectOne | +-bespokeProjectTwo +-anotherImportantCustomer-+ +-anotherBespokeProject Ideą było (i nadal jest) wykorzystanie struktury repozytorium do wsparcia struktury komunikacji między zespołem inżynierskim; część biznesu skierowaną na klienta oraz różnych innych interesariuszy i ekspertów dziedzinowych. To znaczy: Dokumenty źródłowe, które znajdują się w jednym z katalogów "projektu", są używane (i zarabiają) tylko raz. Dokumenty znajdujące się w jednym z katalogów „productLines” zarabiają tyle razy, ile produkt z tej konkretnej linii zostanie sprzedany. Dokumenty, które znajdują się w jednym z katalogów „bibliotek”, zarabiają tyle razy, ile sprzedają się produkty, które ich używają. Uwydatnia pojęcie amortyzacji kosztów i pomaga budować wsparcie dla ponownego wykorzystania dokumentów źródłowych w całej firmie. Oznacza to również, że istnieje wspólna struktura, na której mogą działać nasze narzędzia do automatyzacji kompilacji. (Nasze skrypty budowania chodzą po drzewie źródłowym w poszukiwaniu folderów „kompilacji”, w których znajdują pliki konfiguracyjne określające sposób budowania każdego komponentu; podobny proces ma miejsce w przypadku generowania i testowania dokumentacji). Co ważne, produkty, nad którymi pracuję, zwykle potrzebują DŁUGO czasu, aby przeprowadzić testy pomiaru wydajności i charakterystyki; od 20 do 200 godzin; generowanie od kilku GB do kilku TB przetworzonych wyników testów/danych pośrednich (które muszą być przechowywane i powiązane z konkretną konfiguracją systemu, aby można było zmierzyć poprawę wydajności w czasie). Ta kwestia sprawia, że zarządzanie konfiguracją jest ważnym czynnikiem, a także nakłada pewne wymagania na centralizację, ponieważ zazwyczaj zasoby obliczeniowe potrzebne do przeprowadzenia testów pomiaru wydajności i charakterystyki są ograniczone; (mały klaster 64-128 rdzeni). Jako ostatnia uwaga; system ciągłej integracji wie, że musi uruchomić kompilację; analiza statyczna; test dymu i test jednostkowy uruchamiany za każdym razem, gdy jest modyfikowane łącze, za każdym razem, gdy modyfikowane jest dowolne odgałęzienie „tag” i za każdym razem, gdy modyfikowane jest dowolne odgałęzienie „AUTOMATYCZNE”. W ten sposób poszczególni programiści mogą korzystać z systemu CI ze swoimi osobistymi oddziałami, co jest ważną funkcją, IMHO. Teraz, oto moje pytanie: Jak mogę powtórzyć wszystkie powyższe (i ulepszyć je, jeśli to możliwe) za pomocą Mercurial. \--edit: Mój obecny tok myślenia polega na użyciu centralnego repozytorium Subversion, aby zdefiniować ogólną strukturę, ale aby umożliwić użycie hg jako klienta, aby deweloperzy mogli mieć dostępne lokalnie repozytoria.


title: Poinformuj użytkownika, czy wyświetlił już element na liście. Jak?

text: Często zdarza się, że aplikacja internetowa wyświetla listę elementów, a każdy element na liście wskazuje bieżącemu użytkownikowi, czy już przeglądał powiązany element. Podejście, które zastosowałem w przeszłości, polega na przechowywaniu obiektów HasViewed, które zawierają identyfikator oglądanego przedmiotu/obiektu oraz identyfikator użytkownika, który oglądał ten przedmiot/obiekt. Gdy przychodzi czas na wyświetlenie listy elementów, wymaga to odpytywania bazy danych o elementy i oddzielnego odpytywania bazy danych o obiekty HasViewed, a następnie połączenia wyników tych zapytań w zestaw obiektów skonstruowanych wyłącznie w celu ich wyświetlenia w widoku. Każdy np. li używa następnie np. has_viewed własności obiektów skonstruowanych powyżej. Myślę, że nadszedł czas, aby znaleźć lepsze podejście i chciałbym wiedzieć, jakie podejścia polecilibyście.


title: Radzenie sobie z wymaganiami kolejności budowania w zautomatyzowanych kompilacjach

text: Mam trzy pakiety Scala budowane jako oddzielne projekty sbt w osobnych repozytoriach z takim wykresem zależności: M---->D ^ ^ | | +--+--+ ^ | S S to usługa. M to zestaw klas wiadomości współdzielonych między S a inną usługą. D to DAL używany przez S i inną usługę, a niektóre z jego modelu pojawiają się we wspólnych wiadomościach. Jeśli dokonam przełomowej zmiany we wszystkich trzech i przeniosę je do mojego repozytorium Git, kompilacja S zostanie uruchomiona w Jenkins. Kompilacja zakończy się sukcesem tylko wtedy, gdy po naciśnięciu S, M i D zostały już wciśnięte. W przeciwnym razie Jenkins stwierdzi, że nie ma dostępnych odpowiednich zależnych wersji pakietów. Nawet jednoczesne ich wypchnięcie nie wystarczyłoby — zależności musiałyby zostać zbudowane i opublikowane przed rozpoczęciem pracy zależnej. Uzależnianie zadań w Jenkinsie nie wystarczy, ponieważ spowodowałoby to po prostu zbudowanie poprzedniej wersji, co spowodowałoby artefakt, który nie ma potrzebnej wersji. Czy istnieje sposób na ustawienie rzeczy tak, abym nie musiała pamiętać, aby popychać rzeczy we właściwej kolejności? Jedynym sposobem, w jaki mogę to zobaczyć, jest to, że istnieje sposób, w jaki kompilacja może przejść w stan oczekiwania, jeśli jej zależności nie były jeszcze dostępne. Czuję, że brakuje mi prostego rozwiązania. Z pewnością ludzie często się tym zajmują?


title: Korzyści z używania fragmentów w projektach Android

text: Uczę się programowania na Androida i właśnie teraz czytam o fragmentach. Rozumiem, czym są fragmenty, ale albo w samouczku brakuje niektórych kroków, albo czegoś brakuje. Więc moje pytanie brzmi podczas opracowywania interfejsu użytkownika systemu Android, jakie są korzyści, jeśli w ogóle, z używania fragmentów w porównaniu z układami pojedynczej strony? Czy fragmenty są bardziej powszechne niż układy pojedynczych stron, czy też są bardziej zależne od sytuacji. Ponadto, jeśli fragmenty są bardziej powszechne, czy starasz się tak ustrukturyzować większość sytuacji, aby fragmenty działały?


title: Jak nazywacie operatory nawiasów?

text: W dokumentacji większości języków programowania, w której mowa o operatorach `+-*/=<>`, jako operatory znajdują się również `()[]`. Istnieją operatory _jednoargumentowe_, operatory _multiplikatywne_, operatory _dodatkowe_, operatory _przesunięcia bitowego_ itp. itd. Nie mogę znaleźć żadnej terminologii, która oddzielałaby operatory _nawiasów_ od pozostałych. Nazywanie ich po prostu operatorami _nawiasami_ nie wydaje się właściwe, ponieważ mogą być używane w bardzo różnych kontekstach. Określ rzutowania lub konwersje typów. a = (int)x; Wywołaj metody. fooMetoda(); Zdefiniuj kolejność lub operacje. x = (2+4)*8; W powyższych przykładach. Jaka jest poprawna terminologia dla każdego typu nawiasów. Potrzebuję tego do celów dokumentacyjnych.


title: Jak udokumentować projekt, który jest już opracowany?

text: Chciałbym wiedzieć, jakie są dostępne opcje dokumentowania projektu, który już został opracowany, ponieważ deweloperzy, którzy pracowali, nie napisali nawet jednej strony dokumentacji. Projekt nie ma innych szczegółów poza wieloma stronami skryptów z funkcjami napisanymi i zmodyfikowanymi przez programistów, którzy pracowali nad tym projektem przez ostatnie 2 lata. Wszystko, co mam, to schemat bazy danych i pliki projektu. Chciałbym wiedzieć, czy jest jakiś sposób na zorganizowanie tego projektu i udokumentowanie go, aby było pomocne dla programistów, którzy będą pracować nad tym projektem w przyszłości. Projekt został opracowany w PHP i MySQL. Funkcje są słabo komentowane, więc nie mogę uzyskać dobrych wyników, gdy uruchamiam je z doxygenem.


title: czy istnieje kolejność ładowania / wyszukiwania pakietu zasobów w java?

text: tylko na próbę, generuję dwa ResourceBundle, jeden to plik właściwości MyResourceBundle.properties, a drugi to MyResourceBundle.java w tym samym katalogu. Kiedy próbowałem uzyskać klucz z tym kodem, ResourceBundle bundle = ResourceBundle.getBundle(" ResourceBundle",currLocale); System.out.println(bundle.getObject("nazwa")); Wartość jest pobierana z pliku MyResourceBundle.java. Jak java decyduje się na pobranie wartości w takiej sytuacji, gdy wszystkie warunki są takie same?


title: Jak konieczne jest przestrzeganie defensywnych praktyk programistycznych dla kodu, który nigdy nie zostanie publicznie udostępniony?

text: Piszę implementację gry karcianej w Javie, więc stworzyłem specjalny rodzaj Kolekcji, którą nazywam Strefą. Wszystkie metody modyfikacji kolekcji Java są nieobsługiwane, ale w API strefy istnieje metoda `move(Zone, Card)`, która przenosi Kartę z danej Strefy do niej samej (uczynione za pomocą technik pakietowych). W ten sposób mogę zapewnić, że żadne karty nie zostaną zabrane ze strefy i po prostu znikną; można je przenieść tylko do innej strefy. Moje pytanie brzmi, jak potrzebny jest ten rodzaj kodowania obronnego? To „poprawne” i wydaje się, że jest to właściwa praktyka, ale nie jest tak, że Zone API kiedykolwiek będzie częścią jakiejś biblioteki publicznej. To jest tylko dla mnie, więc to trochę tak, jakbym chronił swój kod przed sobą, podczas gdy prawdopodobnie mógłbym być bardziej wydajny, używając tylko standardowych kolekcji. Jak daleko powinienem posunąć się z tą ideą Strefy? Czy ktoś może mi udzielić porady, ile powinienem pomyśleć o zachowaniu kontraktów na zajęciach, które piszę, zwłaszcza tych, które tak naprawdę nie będą publicznie dostępne?


title: Języki programowania i różnorodność

text: Tak więc problem, który mam jako student inżynierii oprogramowania, to temat, w którym języki muszą być noszone za pasem dla przyszłych rynków. Prowadziłem tę debatę zarówno z nauczycielami, jak i uczniami, na temat tego, który język zajmuje stanowisko. Inna debata, którą toczyłem, to: co to znaczy być „znajdującym się” lub „biegłym”, jeśli chodzi o konkretny język? Bardziej konkretnie: 1. Czy to, jak dobrze potrafisz organizować, strukturyzować i konstruować swój kod w oparciu o składnię języka, strukturę itp., ale czy masz małą wiedzę na temat tego, co jest pod maską, np. bibliotek? 2. Czy masz doświadczenie w pracy z językiem: grafiką, animacją, skomplikowanymi projektami, rozległą znajomością bibliotek itp. Chociaż może się to wydawać trywialne, jeśli dana osoba nigdy nie kodowała w określonej dziedzinie, takiej jak grafika, robi które czynią go mniej godnym kandydata do pracy? Czy to sprawia, że osoba jest mniej „poinformowana”, jeśli wolisz, w tym języku? Innymi słowy, jeśli pracowałeś w C# przez większość swojej kariery i nagle masz do czynienia z projektem opartym na Javie, biorąc pod uwagę, że należysz do kategorii 1 (powyżej), czy byłbyś godny być częścią tego projektu ? Powodem, dla którego o to pytam, jest to, że próbuję wymyślić, czego się nauczyć iw jakim stopniu. Nauka tworzenia animacji na nic ci się nie przyda, jeśli w przyszłej karierze będziesz robić wszystko, ale to. A może rzeczy w prawdziwym świecie nie są mierzone w ten sposób? Jeśli nie mam sensu, przepraszam, ponieważ sam próbuję to zrozumieć!


title: Jaka jest różnica między nagłówkiem metody a podpisem metody?

text: Chcę wiedzieć, co to jest dokładnie nagłówek metody i co to jest podpis metody i czy jest to takie samo wśród języków programowania, czy tylko w C#? Tak więc, czy poprawne jest stwierdzenie, że następujący jest nagłówek metody: public void SumNumbers(int firstNumber, int secondNumber) i następujący podpis metody: public void SumNumbers(int, int) ?


title: Czy pliki cookie powinny być używane w RESTful API?

text: Szczególnie interesuje mnie, w jaki sposób użytkownicy wykonują autoryzowane/uwierzytelniane operacje na internetowym interfejsie API. **Czy uwierzytelniające pliki cookie są zgodne z filozofią REST i dlaczego?**


title: Jak szybciej dedykowany chip może wykonać sekwencyjne operacje modulo do kwadratu, aby rozbić kapsułę krypto czasu?

text: Stoję przed bardzo realnym problemem i niestety nie mogę sam znaleźć odpowiedzi: jako programista osiągam swoje granice, ponieważ moja wiedza sprzętowa nie jest w ogóle wystarczająco zaawansowana. Jest to problem, który napotykam podczas tworzenia systemu (muszę znaleźć bezpieczną wartość parametrów, która zależy od odpowiedzi na pytanie, które tutaj zadaję) (może _crypto.SE_ byłoby lepsze, ale _crypto.SE_ wydaje się więcej pytania teoretyczne dotyczące matematyki/kryptografii). Do projektu, nad którym pracuję, muszę użyć „kryptosystemu kapsuły czasu”. Dokładniej, następująca, wymyślona przez Rivesta ("R" w "RSA"): Kryptowa układanka kapsuły czasu Rivesta Jest to operacja z natury sekwencyjna: tutaj zrównoleglanie jest bezużyteczne. Atakujący mógłby użyć botnetu składającego się z miliona komputerów: to by nie pomogło. Milion chipów ASIC też by nie pomógł. Rozwiązanie można znaleźć tylko sekwencyjnie, _według projektu_. Teraz muszę przybliżyć (jeden lub dwa rzędy wielkości są w porządku: przybliżenie 10x szybsze/wolniejsze lub nawet 100x szybsze/wolniejsze nie jest tak naprawdę problemem), o ile szybciej dedykowany układ może rozwiązać tę zagadkę w porównaniu z szybkim procesorem (naprawdę szybki _core_ ). Zasadniczo rozwiązanie tej zagadki polega na wykonaniu _mnóstwa_ kwadratów modulo _n_. Zastanówmy się, że nie ma „ataku” na tę zagadkę: wybrałem wystarczająco dużo liczb całkowitych RSA itp. Czy GPU pomoże tutaj w porównaniu z procesorem? FPGA? Czy dedykowany układ, taki jak układ ASIC, pomógłby? Jeśli którekolwiek z nich pomogłoby, jak mogę określić, o ile może być szybszy niż szybki procesor? Potrzebowałbym kilku obliczeń z tyłu koperty i, jak wspomniałem wcześniej, przybliżenie około 10x lub 100x rzeczywista odpowiedź nie jest dużym problemem. Myślę, że moje pytanie sprowadza się do czegoś takiego (ale możesz przepisać, jeśli się mylę): wiedząc, że problem jest z natury sekwencyjny i polega na powtarzającej się operacji modulo `n` do kwadratu, czy możesz zbudować/zaprogramować jakiś sprzęt tylko do wykonania sekwencyjne operacje modulo do kwadratu i o ile byłby szybszy niż rzeczywisty procesor?


title: Najlepsze praktyki dotyczące kodowania witryn wrażliwych na daty

text: Tworzę stronę internetową nadchodzącego wydarzenia. Ma pewne funkcje związane z wydarzeniem (np. „wyślij mi przypomnienie”), inne rzeczy, które mają miejsce podczas wydarzenia, i wreszcie niektóre rzeczy, które pojawiają się po wydarzeniu. Muszę rozpocząć pracę nad kodem, który odbywa się podczas wydarzenia i po wydarzeniu, plus kilka poprawek dla bieżącej strony (która jest już aktywna). Jak najlepiej podejść do tego problemu? Niektóre rozwiązania, które przychodzą mi do głowy, to tworzenie gałęzi dla każdego stanu i łączenie elementów według potrzeb. Drugi to ukrywanie i pokazywanie funkcjonalności na podstawie daty, czyli if (currentDate < eventDay) { przypomnienie.show(); } Pomysły?


title: Ponowne teksturowanie modelu za pomocą interfejsu API w Internecie

text: Zastanawiam się nad stworzeniem witryny, w której użytkownik mógłby zobaczyć nasz produkt i skonfigurować opcje lub wygląd i zobaczyć obraz, który to reprezentuje. Sposób, w jaki to teraz robię, jest taki, że jeśli zaznaczyłeś Kawałek A, a następnie wybierzesz Teksturę X, mam obraz w systemie plików, który jest A z zastosowanymi do niego X. Po prostu zamieniam mój domyślny obraz na ten konkretny. Jeden produkt ma 8 obszarów, po 10–70 sztuk na obszar i około 200 tekstur na każdy element. Programowanie strony było dość proste, ale ugrzęzliśmy w renderowaniu wszystkich tych elementów/tekstur i wprowadzaniu ich do systemu. To, co chciałbym zrobić, to zbudować model i mieć jakiś sposób na nałożenie tekstur przez API i renderowanie ich w przeglądarce. Zadowoliłbym się nawet wyeksportowaniem płaskiego obrazu i wciągnięciem go do przeglądarki. Czy jest to możliwe z czymś takim jak SolidWorks, 3DSMax lub coś innego? Jeśli renderowanie jest zbyt czasochłonne, nadal pomogłoby wsadowe tworzenie wszystkich moich obrazów i używanie ich w taki sposób, w jaki jestem obecnie.


title: Czy korzystasz z firm zewnętrznych w celu sprawdzenia kodu Twojej firmy?

text: Chcę uzyskać następujące - Podstawowy przegląd kodu, aby upewnić się, że przestrzegają nałożonych wytycznych. Analiza kodu bezpieczeństwa, aby upewnić się, że nie ma luk. Brak wąskich gardeł wydajności poprzez wykonanie testu obciążenia itp. Mamy dużo kodu pochodzącego od stron trzecich i staje się pracochłonne w zarządzaniu przeglądami kodu, a zatem szukamy, czy inni stosują takie praktyki. Rozumiem, że dla niektórych może to być zaniepokojenie i nasuwałoby się pytanie „No cóż, kto upewni się, że agencja dobrze wykonuje swoją pracę?”. Ale zasadniczo szukam osoby trzeciej, która może utrzymać cały kod dostawcy według tych samych standardów.


title: Czy JQuery lub Javascript są w stanie przetwarzać obrazy?

text: W przyszłości planuję stworzyć aplikację internetową. Myślę, że mogę go nazwać „Systemem rezerwacji stoisk” dla firm Eventowych w naszym kraju. Jedną z głównych funkcjonalności systemu i najtrudniejszą częścią/trudną częścią jest to, że użytkownik może przesłać „plan piętra” (projekt obszaru, w którym znajduje się stoisko w dowolnym formacie obrazu), a następnie wybrać konkretną lokalizację na plan piętra do zarezerwowania na stoisku. Ponadto użytkownik może stworzyć plan piętra w systemie. Co myślisz? Jakiego języka programowania mogę używać?


title: Co mogę zrobić z Rubym poza RoR?

text: Poza RoR, do czego ludzie używają Rubiego? Czy Ruby ma jakieś zastosowanie na platformie Windows? Jeśli używasz ruby do pisania skryptów, dlaczego nie użyć Bash lub Powershell?


title: Certyfikacja Asp.net

text: Chcę uzyskać certyfikat w .NET, który certyfikat jest dla mnie najlepszy? Od 8 miesięcy pracuję we frameworkach .NET 3.5 i 4.0. Jak mogę się rozwijać, pojawiając się na tych egzaminach? Wiem, że "certyfikaty != doświadczenie", ale nadal chcę uzyskać certyfikat. Obecnie pracuję w PHP 5.3 i PostgreSQL, ale chcę zmienić kierunek, ponieważ .NET płaci dobre wynagrodzenie w porównaniu do PHP.


title: Jaką książkę szkoleniową powinienem wybrać po kursie Microsoft Application Development Foundation (70-536)?

text: Właśnie skończyłem 70-536 ("Microsoft .NET Framework - Application Development Foundation") podręcznik szkoleniowy Microsoft z Microsoft Press. Uważam, że to całkiem nieźle. Zrobiłem również książkę 70-528 ("Microsoft .NET Framework 2.0 - Web-based Client Development"). Jaką książkę powinienem przeczytać w następnej kolejności? Poszukuję pracy, więc chcę być dostępny na rynku jako programista. Co sprawi, że wyróżnię się z tłumu i dostanę pracę?