title: Wielowymiarowy problem wielokrotnego wyboru z plecakiem: znajdź wykonalne rozwiązanie

text: Moim zadaniem jest użycie lokalnej heurystyki wyszukiwania do rozwiązania problemu plecakowego wielowymiarowego wielokrotnego wyboru, ale aby to zrobić, najpierw muszę znaleźć możliwe do zrealizowania rozwiązanie. Oto przykładowy problem z tym, czego próbowałem do tej pory. ## Problem L1 L2 L3 ZASOBY: 8 8 8 GRUPY: G1: 11,0 3 2 2 12,0 1 1 3 G2: 20,0 1 1 3 5,0 2 3 2 G3: 10,0 2 2 3 30,0 1 1 3 * * * ## Strategie sortowania Aby znaleźć początkowe możliwe rozwiązanie dla moich lokalnych poszukiwań, postanowiłem zignorować maksymalizację zysków i po prostu spróbować dopasować wymagania dotyczące zasobów. Postanowiłem posortować wybory (strategie) w każdej grupie, porównując ich „odległość” od początku przestrzeni wielowymiarowej, obliczając w ten sposób `SQRT(R1^2 + R2^2 + ... + RN^2)`. Czułem, że to dobre rozwiązanie, ponieważ w jakiś sposób uprzywilejowało te wybory, w których wykorzystanie zasobów było bliższe sobie (np. R1:2 R2:2 R3:2 < R1:1 R2:2 R3:3), nawet jeśli łączna suma jest równa to samo. Zrobienie tego i wybranie najlepszego wyboru z każdej grupy okazało się wystarczające, aby znaleźć wykonalne rozwiązanie dla wielu[30] różnych problemów porównawczych, ale oczywiście wiedziałem, że to tylko szczęście. Wymyśliłem więc powyższy problem, który wygląda następująco: L1 L2 L3 ZASOBY : 8 8 8 GRUPY: G1: 12,0 1 1 3 < wybierz 11,0 3 2 2 G2: 20,0 1 1 3 < wybierz 5,0 2 3 2 G3: 30,0 1 1 3 < wybierz to 10,0 2 2 3 A jest to niewykonalne, ponieważ zużycie zasobów to R1:3, R2:3, **R3:9**. Prostym rozwiązaniem jest wybranie jednego z drugich najlepszych wyborów w grupie 1 lub 2, więc będę potrzebować pewnej iteracji (wyszukiwanie lokalne[?]), aby znaleźć początkowe możliwe rozwiązanie dla mojego lokalnego rozwiązania wyszukiwania. Oto opcje, które wymyśliłem **Opcja 1: iteracja wyborów** Próbowałem znaleźć sposób na powtórzenie wszystkich wyborów w określonej kolejności, coś w rodzaju G1 G2 G3 1 1 1 2 1 1 1 2 1 1 1 2 2 2 1 ... wierząc, że możliwe rozwiązania nie będą aż tak odległe od niewykonalnego, od którego zaczynam, dzięki czemu liczba iteracji będzie dość niska. Czy to ma sens? Jeśli tak, w jaki sposób mogę iterować wybory (zgrupowane kombinacje) każdej grupy, zachowując „tak blisko, jak to możliwe” w stosunku do poprzedniej iteracji? **Opcja 2: Zmień termin porównawczy** Zastanawiałem się, jak znaleźć lepszą zmienną do sortowania wyborów. Pomyślałem o tym, jak „cenny” zasób opiera się na podaży i popycie, więc większe zapotrzebowanie na cenniejszy zasób zepchnie cię w dół listy, ale to w niczym nie pomogło. Pomyślałem też, że prawdopodobnie nie będzie takiej zmiennej porównawczej, która zapewniałaby wykonalne rozwiązanie przy pierwszym uderzeniu. czy jest taka zmienna? Jeśli nie, czy istnieją lepsze kryteria sortowania? **Opcja 3: zaimplementuj dowolny znany nieoptymalny algorytm szybkiego rozwiązywania problemów** Niestety nie mogłem znaleźć żadnego z takich algorytmów online. Jakieś sugestie? * * * ## EDIT **UWAGA: Zaktualizowałem poprzedni opis używając etykiet L1 L2 L3 dla limitów zasobów problemowych w miejsce R1 R2 R3, które teraz wskazują wymagania zasobów dla każdej strategii (wyboru)** Uwzględniając dane wejściowe przez @ J Trana, zdecydowałem się wypróbować algorytm genetyczny do konfiguracji problemu. Wydawało się to całkiem pasować do struktury problemu, ponieważ każda Grupa jest Genem, każde Rozwiązanie jest Chromosomem, a każda Strategia jest Allelem. Zmodyfikowałem również wyrażenie odległości, aby lepiej pasowało do heterogenicznych limitów zasobów, więc teraz odległość wynosi: `SUM(Rn/Ln)`, co powinno dawać mniejszą odległość (tj. wyższy priorytet) tym strategiom o niższych częściach zapotrzebowania na zasoby. Ponieważ ta część jest przeznaczona tylko do rozwiązywania inicjalizacji, wybrałem następujące funkcje genetyczne: ## Sprawność // jeśli rozwiązanie jest wykonalne, to wystarczy, ma największe możliwe dopasowanie if(solution.isFeasibleInProblem()) return Integer.MAX_VALUE; Zużycie ArrayList<Integer> = new ArrayList<Integer>(); for(Limit liczby całkowitej: problem.resourceLimits){ konsumpcyjne.add(0); } // dodaj zużycie zasobów z każdej grupy for(Group g : gens){ for(int i = 0; i < g.currentSelectedSolution.resourceRequirements.size(); i++){ konsumpcyjne.set(i, konsumpcyjne.get( i) + g.currentSelectedSolution.resourceRequirements.get(i)); } } ArrayList<Double> subFitnesses = new ArrayList<Double>(); // każdy podFitness to stosunek między całkowitym limitem a rzeczywistym zużyciem // w ten sposób, jeśli zużycie jest < limit podFitness jest większe niż 1 (podnosi sprawność), w przeciwnym razie jest mniejsze niż 1 i obniża sprawność for(int j = 0; j < konsumpcyjne.rozmiar(); j++){ double subFitness = problem.limits.get(j) / konsumpcyjne.get(j); subFitnesses.add(subFitness); } podwójna sprawność = 1; for(Double sF : subFitnesses){ fitness *= sF; } sprawność zwrotna; Tak więc wymagania na zasoby mniejsze niż limit zwiększają dopasowanie, podczas gdy wymagania większe niż limit obniżają dopasowanie. ## Mutacja W przypadku funkcji mutacji odkryłem, że możliwe rozwiązania zawierają strategie z mniejszą odległością, a rozważanie rozwiązań znajdujących się daleko na liście uporządkowanych odległości spowalnia ewolucję, ponieważ przez większość czasu te mutacje mają negatywne skutki. public void mutate(int strategyIndex, double MutationIntensity){ // jeśli nie ma wyboru, nie mutuj if(this.strategies.size() <= 1) return; ... tutaj potrzebowałbym czegoś, co trzyma się na pierwszych pozycjach listy, ale ostatecznie, przy wyższych intensywnościach mutacji, przechodzi do wyższych indeksów... selectStrategy(newStrategyIndex); } * * * Powyższe rozwiązanie działa bardzo dobrze dla większości benchmarków, ale są 2 z nich, z wieloma możliwościami na grupę i dużą ilością zasobów na wybór, które po prostu nie znajdą możliwego do zrealizowania rozwiązania. Jak mogę zaimplementować algorytm mutacji, aby te 2 testy porównawcze przekształciły się w wykonalne rozwiązanie? Czy jest jakaś poprawa, którą mogę wprowadzić w mojej funkcji fitness lub w strategii nakazującej przyspieszenie ścieżki rozwiązywania?


title: Jaka jest korzyść z modelu „wolnego od zaciemnienia” nad open source?

text: Niektóre aplikacje (na przykład Minecraft) mają model „wolnego od zaciemnienia”. Oznacza to, że możesz swobodnie wprowadzać i rozpowszechniać zmiany w kodzie aplikacji, ale najpierw musisz zdekompilować i rozszyfrować aplikację. To ma dla mnie mniej niż zero sensu. Czy cały sens zaciemniania nie polega na zapobieganiu ludziom majstrującym przy twoim kodzie? Dlaczego po prostu nie skorzystać z modelu open source?


title: Pracowałeś z dobrze zaprojektowaną aplikacją?

text: Zainspirowany tym pytaniem zacząłem się zastanawiać - czy istnieje lub kiedykolwiek istniało coś takiego jak „dobrze zaprojektowana aplikacja”? Taki, w którym architektura byłaby doskonała i nigdy nie byłaby potrzebna refaktoryzacja; kod byłby łatwy do odczytania i zrozumienia nawet dla kogoś nowego w projekcie; zmiany można wprowadzać ze stuprocentową pewnością, że niczego nie zepsują; itp? Muszę przyznać, że niezależnie od tego, z jakimi bazami kodu pracowałem, wszystkie były mniej więcej bałaganem. Nawet kod, który sam uruchamiam, pozostaje uporządkowany tylko na początku, a następnie powoli się psuje wraz z upływem czasu. Zaczynam nawet akceptować to jako część życia i nie wiem, czy powinnam się tym martwić, czy nie. Więc... czy istnieje coś takiego jak "dobrze zaprojektowana aplikacja"? A może cały nasz kod jest tak gówniany, że nie ma nawet sensu próbować go ulepszać, bo i tak nigdy nie będzie dobry?


title: GPL w miejscu pracy?

text: Kiedyś przeprowadziłem wywiad w firmie konsultingowej, w której w rozmowie okazało się, że używają produktów open source (co jest świetne, intensywnie korzystałem z Hibernate, JBoss itp.) Jedna rzecz, która mnie zaskoczyła, to to, że kiedy zapytałem, czy używali OSS na licencji GPL podczas pisania aplikacji dla klientów. Teraz nie jestem prawnikiem ani wielkim fanem licencji, ale miałem wrażenie, że używając kodu GPL (powiedzmy jakiejś biblioteki, którą dołączasz), musisz wydać całą aplikację na tej samej licencji. Kiedy zwróciłem na to uwagę, otrzymałem szybką odpowiedź: „Cóż, kiedy skończymy, dajemy klientom cały kod źródłowy, więc to naprawdę nie jest problem”. Nie chcąc dalej drążyć tematu (wywiady nie są miejscem na takie argumenty), odpuszczam. Jednak nadal niepokoi mnie ta konkretna praktyka w biznesie. Jakie jest oficjalne słowo na temat kodu na licencji GPL i jak „otwarty” musi być? Czy musisz to opublikować i powiedzieć „Moja firma korzystała z tej biblioteki, więc tutaj jest strona, z której możesz pobrać naszą aplikację systemu zakupów i realizacji zamówień, na której budowę wydajemy miliony dolarów.”? Czy w tej sytuacji firma ma rację, aby używać kodu GPL bez wiedzy klienta? Czy wystarczy po prostu „podać im źródło”?


title: niewidoczna/nieznana definicja funkcji w źródle linux

text: Czy ktoś może wyjaśnić ten fragment kodu, który znalazłem w źródłach jądra linux. Widzę dużo takiego kodu w jądrze linux i minix, ale wydaje się, że nie znajduję tego, co robi (nawet jeśli kompilatory C obsługują tego rodzaju definicje funkcji) /* IRQ są wyłączone, a uidhash_lock jest wstrzymywany po wejściu do funkcji. * Stan IRQ (przechowywany w flags) jest przywracany, a uidhash_lock zwalniany * po wyjściu z funkcji. */ static void free_user(struct user_struct *up, unsigned long flags) __releases(&uidhash_lock) { uid_hash_remove(up); spin_unlock_irqrestore(&uidhash_lock, flagi); key_put(up->uid_keyring); key_put(up->session_keyring); kmem_cache_free(uid_cachep, w górę); } Nie mogę się dowiedzieć, czy odwołanie `__releases(&uidhash_lock)` przed rozpoczęciem nawiasu jest dozwolone LUB obsługiwane. (To na pewno jest obsługiwane, tak jak w jądrze linuksa)


title: referencyjny typ danych javascript

text: W javascript, jaka jest różnica w stosowaniu metody toString() do pierwotnego typu danych number, takiego jak ta var myString = myNumber.toString(); i zastosowanie tej samej metody toString(), tworząc odpowiednik typu danych referencyjnych, klasę Number taką jak ta var numberObject = new Number(myNumber); var mójCiąg = liczbaObiektu.toString();


title: ISO 12207: Weryfikacja integracji i walidacja testów jednostkowych

text: Otrzymałem uwagi od promotora recenzującego moją pracę magisterską. Zadał dwa pytania, na które nie mogę teraz odpowiedzieć: 1. Jeśli ISO 12207 mówi w sekcji „Weryfikacja integracji”, że „sprawdza, czy komponenty są poprawnie i całkowicie zintegrowane z systemem”, w jaki sposób można to zweryfikować bez testowania, czy wszystkie testy są walidacją ? Jak bez testowania mogę wiedzieć, że system jest poprawnie i w pełni zintegrowany? 2. Jeśli testowanie jednostkowe jest walidacją, to w jaki sposób odpowiada definicji ISO walidacji „spełnione zostały wymagania dotyczące zamierzonego zastosowania”, jeśli jest ona tak niska?


title: geometria rzutowa: jak zamienić rzut prostokąta w 3D na widok 2D?

text: Problem polega na tym, że mam rzut 3D prostokąta, który chcę zamienić na 2D. To znaczy, że mam zdjęcie kartki papieru leżącej na stole, którą chcę przekształcić w widok 2D tego arkusza. Dlatego potrzebuję uzyskać niezniekształcony obraz 2D poprzez odwrócenie wszystkich przekształceń 3D/rzutowania i uzyskanie zwykłego widoku arkusza od góry. Zdarzyło mi się znaleźć jakieś wskazówki na ten temat, ale nie sugerują one natychmiastowej instrukcji, jak to osiągnąć. Naprawdę pomocne byłoby uzyskanie instrukcji krok po kroku, co należy zrobić. Lub, alternatywnie, link do zasobu, który rozkłada go na drobne szczegóły.


title: Czy istnieją jakieś koncepcyjne wady tworzenia aplikacji internetowej za pomocą C++ i MySQL?

text: Odziedziczyłem całkiem interesujący projekt, w którym istnieje dobra okazja, aby wykorzystać istniejący program i przekształcić go w aplikację internetową SaaS. Ponieważ projekt jest dziedziczony, podstawa kodu/frameworka jest już zdefiniowana jako C++ i MySQL. Sama aplikacja jest kompilowana i uruchamiana jako plik EXE w systemie Windows Server. Interfejs użytkownika jest oparty na sieci Web, a aplikacja działa jako rodzaj serwera. Z tego, co wiem o nowoczesnych aplikacjach internetowych, jest to chyba niecodzienny wybór. Obecnie większość ludzi wybiera framework PHP lub Ruby on Rails. Z pewnością takie wrażenie odnoszę czytając blogi na ten temat. Tak więc jestem bardzo zainteresowany, czy C++ EXE wspierany przez MySQL jest solidnym fundamentem dla aplikacji internetowej, czy też powinniśmy szukać innych sposobów?


title: CppUnit do testów jednostkowych plików wykonywalnych?

text: Nie jestem pewien, czy ktoś to zrobił. Próbuję zrobić coś, co jest ogólnie nietypowe, np. plik wykonywalny do testów jednostkowych (Windows) lub ELF (Linux). Wiem, że CppUnit zapewnia dobre narzędzie do testowania jednostkowego, ale nigdy nie używałem go do testów jednostkowych (używałem UnitTest++). Słyszę plotki, że możesz też testować pliki wykonywalne. Czy ktoś ma w tym doświadczenie? _Istotny post dotyczący filozofii tego myjka_


title: Programowanie C++ przy użyciu Qt4

text: Hej chłopaki, jestem naprawdę nowy w programowaniu w C++. Mam trochę wiedzy w C, a trochę więcej w C++, ale nie znam ich na tyle, by nazywać się programistą. Pracuję jako PHP Web Developer. Lubię być rzemieślnikiem i tworzyć rzeczy, dlatego łączenie programowania z web developmentem. Myślę, że mógłbym naprawdę skorzystać z obu z nich i tak... Moje pytanie brzmi: * Czy dobrym pomysłem jest nauka C++ z Qt, czy nie? * Czy możesz podać mi zalety i wady obu? **Uwaga** : _Nie chcę zostać programistą i rezygnować z tworzenia stron internetowych. Chcę połączyć je obie._


title: Jak mam śledzić przepływ pracy zatwierdzania, gdy użytkownicy na każdym poziomie bezpieczeństwa mogą tworzyć żądania?

text: Piszę nową aplikację, która umożliwia użytkownikom wprowadzanie żądań. Po wprowadzeniu żądania musi ono być zgodne z przepływem pracy zatwierdzania, aby zostało ostatecznie zatwierdzone przez użytkownika o najwyższym poziomie bezpieczeństwa. Załóżmy więc, że użytkownik na poziomie bezpieczeństwa 1 wprowadza żądanie. Żądanie to musi zostać zatwierdzone przez jego przełożonego – użytkownika o poziomie bezpieczeństwa 2. Po zatwierdzeniu przez użytkownika o poziomie bezpieczeństwa 2 musi zostać zatwierdzone przez użytkownika o poziomie bezpieczeństwa 3. Po zatwierdzeniu przez użytkownika o poziomie bezpieczeństwa 3 jest ono uważane za w pełni zatwierdzony. Jednak użytkownicy na dowolnym z trzech poziomów bezpieczeństwa mogą wprowadzać żądania. Tak więc, jeśli użytkownik o poziomie bezpieczeństwa 3 wprowadzi żądanie, zostanie ono automatycznie uznane za „w pełni zatwierdzone”. A jeśli użytkownik o poziomie bezpieczeństwa 2 wprowadzi żądanie, musi ono zostać zatwierdzone tylko przez użytkownika o poziomie bezpieczeństwa 3. Obecnie przechowuję każdy stan zatwierdzenia w tabeli dzienników bazy danych, na przykład: STATUS_ID (PK) REQUEST_ID STATUS STATUS_DATE ------------------ ------------ - ---------------- ----------------------- 1 1 USER_SUBMIT 2012-09-01 00: 00:00.000 2 1 APPROVED_LEVEL2 2012-09-01 01:00:00.000 3 1 APPROVED_LEVEL3 2012-09-01 02:00:00.000 4 2 USER_SUBMIT 2012-09-01 02:30:00.000 5 2 APPROVED_LEVEL2 2012-09-01 02:45:00.000 Moje pytanie brzmi, który projekt jest lepszy: 1. Zapisz wszystkie trzy statusy dla każdego wniosku ...lub... 2. Zapisz tylko statusy wymagane zgodnie z Poziomem bezpieczeństwa użytkownika składającego wniosek W Przypadek 2, dane mogą wyglądać tak dla dwóch żądań - jednego przesłanego przez użytkownika poziomu bezpieczeństwa 2, a drugiego przesłanego przez użytkownika poziomu bezpieczeństwa 3: STATUS_ID (PK) REQUEST_ID STATUS STATUS_DATE -------------- ------------- ----- ------ ----------------- 1 3 APPROVED_LEVEL2 2012-09-01 01:00:00.000 2 3 APPROVED_LEVEL3 2012-09-01 02:00:00.000 3 4 APPROVED_LEVEL3 2012-09- 01 02:00:00.000


title: Kontrola wersji z SQL Server

text: Zaczynam nowy projekt i używam SVN (z Tortoise) jako mojego Systemu Kontroli Wersji. Zastanawiałem się, czy możliwe jest również utrzymanie bazy danych SQL Server przy użyciu tego samego systemu. Chciałbym zmienić wersje moich tabel/funkcji/widoków/procedury/wyzwalaczy/itd. ale nie moje dane, ponieważ i tak będą to dane testowe. Nie jestem do końca pewien, jak to ustawić. Natknąłem się na kilka opcji, ale chciałbym się dowiedzieć, czy czegoś mi brakowało i czy może jest jakiś przewodnik lub coś, co pomoże mi z tym pobiegać. Widziałem i słyszałem o Red Gate, ale szukam czegoś darmowego (lub przynajmniej bardzo taniego). Wiem, że zawsze mógłbym coś napisać sam, ale tak naprawdę nie staram się spędzać na tym czasu. Jedną z rzeczy, na które natknąłem się, był pakiet open source o nazwie ScriptDB4Svn. Czy ktoś już tego używał? Czy to jest dobre? Czy może robić rzeczy, których potrzebuję i czy konfiguracja jest dość prosta?


title: Migracja aplikacji internetowej z php do Java

text: Cześć Miałem dzisiaj pierwszą rozmowę kwalifikacyjną na stanowisko programisty Androida. W swoim portfolio miałem aplikację e-commerce php, która posiada katalog, koszyk na zakupy zasilany ajaxem i funkcjonalność administratora. Ponieważ moja wiedza na temat Androida jest dość ograniczona , zacząłem uczyć się dopiero około 3 tygodnie temu , zostałem poproszony o migrację mojej obecnej aplikacji webowej PHP do Java Web do 19 kwietnia , kiedy to odbędzie się drugi etap rozmowy kwalifikacyjnej , aby mogli ocenić jak szybko Mogę nauczyć się nowej technologii. Nie mam doświadczenia z Javą pracującą w sieci, więc nie wiem od czego zacząć. Po krótkich poszukiwaniach odkryłem, że do tworzenia stron internetowych w Javie zwykle używa się JSP, Spring lub Struts. Chciałbym otrzymać rekomendację, której należy się nauczyć, aby szybko rozpocząć migrację aplikacji webowej do Javy i niektórych zasobów, które nie wnikają w szczegóły, tylko na początek.


title: Jak nazywasz parę funkcji, które się uzupełniają?

text: Szukam odpowiedniego słowa do opisania funkcji i jej dopełnienia. Tutaj szukam odpowiedniego słowa, aby opisać kilka funkcji, gdy zastosowane w sekwencji system powraca do swojego pierwotnego stanu. * Marshalling i Unmarshalling byłyby podzbiorem tego * Add and Remove Idempotence przychodzi mi na myśl, chociaż nie jestem pewien, czy może dotyczyć więcej niż jednej operacji. Odwracalne też mogłoby się przydać, ale wydaje się to trochę zbyt ogólne. Czy jest właściwe słowo, które opisałoby tę „systemową idempotentność”.


title: Przyczyna zaciemniania kodu?

text: Jakie są główne powody, dla których warto pisać zaciemniony kod, jeśli chodzi o rzeczywistą korzyść dla osób opracowujących kod i firmy, która go uruchamia (jeśli dany kod jest w rzeczywistości kodem komercyjnym)? ** Czy istnieją udokumentowane przypadki (dostępne online w niektórych lokalizacjach), które opisują, kiedy zaciemnianie przyniosło więcej korzyści niż zła? Czy istnieją dobrze znane przykłady, w których udowodniono, że zaciemnianie znacząco opóźnia dostęp złośliwej osoby trzeciej do uzyskania kodu?** Wygląda na to, że podobnie jak zakręcanie szyb w samochodzie nie powstrzyma ludzi przed ich łamaniem i kradzieżą Twój zestaw stereo, zaciemnianie kodu sprawia, że uczciwi ludzie są uczciwi. ========= Tło: Jest to próba celowego podważenia moich założeń na ten temat. Generalnie jestem bardzo przeciwny używaniu zaciemniania kodu, ale jestem ciekawy, czy czegoś mi brakuje. Rozumiem, dlaczego, w przypadkach takich jak JavaScript, minifikacja pomaga ładować rzeczy szybciej i w ogóle (jest to realna, funkcjonalna korzyść), ale nie mogę wymyślić jednego powodu, dla którego zaciemnianie kodu, **w celu bycia przeszkoda w odkryciu, co robi sekcja kodu/algorytmu** , jest faktycznie skuteczna w dowolnym celu. Ponieważ open source jest szalenie popularne, pytanie wydaje się brzmieć: „udostępniaj kod, czy zachowaj go jako zastrzeżony?” Jeśli chodzi o kodeks handlowy, rozumiem, dlaczego nie możesz dzielić się wszystkim, a masz prawo do walki z kradzieżą. BTW, jeśli powodem, dla którego ktoś pisze zaciemniony kod, jest „bezpieczeństwo pracy”, to zwolniłbym każdego programistę, który by konsekwentnie i celowo używał zaciemniania ** tylko w celu pomocy w utrzymaniu pracy**, chyba że mogliby to rozsądnie wykazać że przyniosła pewne korzyści biznesowe. To jest tak całkowicie przeciwne zespołowi, że jest śmieszne i wskazuje na kogoś, kto bardziej interesuje się utrzymaniem swojej pracy poprzez błędne praktyki, niż utrzymaniem jej, ponieważ piszą świetne oprogramowanie. Wspominam o tym konkretnym przypadku tylko dlatego, że chociaż zdaję sobie sprawę, że ludzie zwykle żartują, chciałbym powstrzymać wszelkie odpowiedzi, których zasadniczym przesłaniem jest to, że zaciemnianie dla samego bezpieczeństwa pracy jest dobrym pomysłem.


title: Walidacja setera może wpłynąć na wydajność?

text: W scenariuszu, w którym używasz ORM do mapowania swoich jednostek do bazy danych i masz walidacje setterów (nullable, data niższa niż walidacja dzisiejsza itp.), za każdym razem, gdy ORM otrzyma wynik, przejdzie do settera w celu wystąpienia obiektu . Jeśli mam siatkę, która zwykle zwraca 500 rekordów, zakładam, że dla każdego rekordu przechodzi wszystkie walidacje. Jeśli moja jednostka ma 5 walidacji ustawiających, to zdałem w 2.500 walidacjach. * Czy te 2.500 walidacji wpłynie na wydajność? * Gdyby była walidacja 15.000, to będzie inaczej? Moim zdaniem i zgodnie z tą odpowiedzią, walidacja settera jest przydatna niż walidacja konstruktorów. * Czy istnieje sposób na uniknięcie niepotrzebnej walidacji, skoro mogę śmiało powiedzieć, że wartości, które wysyłam do bazy danych podczas zapisywania encji, nie zmienią się, dopóki nie zmodyfikuję ich w moim systemie?


title: Jak debugować słabe referencje?

text: Jak mogę przetestować (z jakich narzędzi używam), czy mój wykres odniesienia jest poprawny i czy obiekty są zwalniane w odpowiednim czasie (i nie ma wycieków pamięci)? W moim przypadku używam Javy, ale odpowiedzi związane z innymi językami też są mile widziane...


title: Pomaganie komuś, kto nie jest i nigdy nie będzie profesjonalnym programistą w pisaniu kodu, który jest bardziej czytelny i użyteczny w użyciu i interpretacji

text: Jestem Elvis, bardzo staram się nauczyć być Einsteinem. Pracuję dla Morta. O czym do diabła mówi ten szalony idiota!?!? (Musisz tylko przeczytać kilka pierwszych akapitów) Jeśli nie masz ochoty czytać tego linku, w zasadzie jestem zawodowym programistą, a mój szef jest (to przerażająco trafne): > profesjonalnym programistą branżowym który nie ma dyplomu > z informatyki, ale ma dużą znajomość pakietu Office i VBA i który > zwykle pisze aplikacje zwiększające produktywność współdzielone przez jego współpracowników. produkcja gotowa. Jednak bardzo kiepski styl i kultyzm cargo utrudniają to zadanie. Do tego dochodzi fakt, że nie chce czytać książek o programowaniu ani nie pozwala mi pomóc mu w refaktoryzacji kodu. Czy są jakieś inne strategie pomagania komuś, kto nie jest profesjonalnym programistą, który nigdy nie będzie profesjonalnym programistą pisać kodu, który byłby bardziej czytelny i użyteczny do użycia i interpretacji?


title: Czy $.proxy to zapach kodu?

text: Większość moich aplikacji javascriptowych pisałem w stylu OO zbliżonym do tego, którego używałbym w większości innych języków. Oznacza to jednak, że większość wywołań zwrotnych musi mieć referencję do obiektu, a ja generalnie radzę sobie z tym za pomocą $.proxy (lub dojo.hitch lub innego narzędzia frameworka do tego celu), aby mieć pewność, że wywołania zwrotne działają w kontekst mojego obiektu, a nie tag, do którego zostały dołączone. Bardzo szybko wydaje się to prowadzić do używania wywołań proxy dla prawie wszystkiego i może wyglądać na to, że walczę z narzędziem, szczególnie jeśli jest to narzędzie jQuery. Czy masz politykę dotyczącą wiązania funkcji javascript w swojej pracy? Czy starasz się dopasować swój projekt do tego, jak narzędzie łączy jego funkcje, czy też zmuszasz wiązania do pracy zgodnie z twoim projektem?


title: Obsługa fałszywych alarmów i ostrzeżeń o starszym kodzie w statycznej analizie kodu C++?

text: Dysponujemy dużą bazą kodu „starszego” C++, na której obecnie przeprowadzana jest analiza statyczna _no_. Od czasu do czasu myślimy przynajmniej o użyciu cppcheck, może przez Visual Lint. (Sprawdziłem też pokrótce strony Coverity, Klocwork lub RedLizards/Goanna.) Jednak spodziewam się _ogromnej_ liczby znalezionych ostrzeżeń i prawdopodobnie również fałszywych alarmów (w tym, że błąd nie powoduje obserwowalnego błędu w aplikacji ). Po prostu nie mamy dostępnych zasobów, aby rozwiązać te wszystkie problemy podczas wdrażania jakiegokolwiek narzędzia analitycznego, zwłaszcza że _bardzo_ chcielibyśmy dotknąć „kodu, który działa (dostatecznie dobrze)”, jeśli naprawdę musimy. Więc to, czego szukam, to doświadczenia i _historie użytkowników_ dotyczące dodawania statycznej analizy C++ do starszych baz kodu: > Mieliśmy ten produkt, składający się z xxx linii kodu nad projektami zzz C++ > i zaczęliśmy używać narzędzia do analizy statycznej yyy w fazie rozwoju. Wykorzenienie > ostrzeżeń o starszym kodzie wymagało wysiłku, (tymczasowe) zignorowanie ich było > trudne/łatwe/niemożliwe. Ignorowanie ostrzeżeń selektywnie dla bazy kodu naprawdę > działało dobrze / nie działało w ogóle. Itd. Coś takiego. Dziękuję!


title: Premium i opensource

text: Zastanawiam się nad wydaniem mojego projektu premium (komercyjnego) jako projektu opensource, ale nie jestem pewien, jakie korzyści odniesie użytkownik, jakie korzyści odniosę i jakiej licencji użyję. Naprawdę muszę wiedzieć wszystko o tym kroku...


title: Podstawowa architektura WWW : Perl -> PHP

text: To jest pytanie o architekturę. Jeśli istnieje lepsze forum, proszę o przekierowanie. Z góry przepraszam. Zasadniczo każda strona internetowa jest zbudowana wokół relacyjnej bazy danych, prawda? Gdy użytkownik przesyła dane formularza, dane te są przechowywane w tabeli. Problem polega na tym, że struktury tabel muszą być modyfikowane za każdym razem, gdy modyfikowany jest formularz witryny. Chociaż rozumiem, że nowoczesne frameworki internetowe obchodzą ten problem, automatycznie budując formularze w oparciu o strukturę tabeli. Od 20 lat buduję strony internetowe w Perlu. Kiedy po raz pierwszy napotkałem ten problem, najłatwiejszym rozwiązaniem było zapisanie serializowanych obiektów Perla jako obiektów BLOBS danych. Po wprowadzeniu XML rozwiązanie to działało jeszcze lepiej, ponieważ XML jest tak skuteczny w reprezentowaniu dowolnych danych. To podejście jest zgodne z oryginalnymi zasadami Perla, takimi jak Hubris, Laziness i Impatience i jestem w tym bardzo oddany. Oczywiście największą wadą jest to, że to rozwiązanie blokuje mnie w interpreterze Perla. Więc zamiast tego właśnie ukończyłem prototyp uniwersalnej tabeli RDB. Prototyp jest napisany w Perlu, ale przeniesienie go do PHP będzie dobrą okazją do rozwinięcia tych umiejętności. Zasada opiera się na module XML::Dumper, który konwertuje dowolne struktury danych Perla na jednolity XML. W moim podejściu każdy węzeł XML jest przechowywany jako rekord tabeli. Nie doceniłem tego przedsięwzięcia i sam coś zwinąłem. Ale wysiłek pozwala mi omówić podstawowy projekt zamiast szczegółów implementacji. 1. Jak wspomniałem, jestem bardzo zaangażowany w takie podejście do korzystania z elastycznych struktur danych. Został z powodzeniem wdrożony w wielu witrynach internetowych, dużych i złożonych. Ale czy są jakieś wady, które przeoczyłem? 2. Rzuciłem własne. Czy inne osoby mają podobne podejście do swoich danych? Jakie rozwiązania są dostępne? 3. Nie porzuciłem mojego marzenia o wniesieniu czegoś pożytecznego dla społeczności na całym świecie. Aby kontynuować, następnym krokiem będzie ocena wzajemna. Jak można realizować ten wysiłek?


title: Kiedy osiągnięto zbyt dużo hermetyzacji

text: Ostatnio przeczytałem wiele dobrych artykułów o tym, jak zrobić dobrą enkapsulację. A kiedy mówię „dobra enkapsulacja”, nie mówię o ukrywaniu prywatnych pól z własnością publiczną; Mówię o powstrzymywaniu użytkowników Twojego API przed robieniem złych rzeczy. Oto dwa dobre artykuły na ten temat: http://blog.ploeh.dk/2011/05/24/PokayokeDesignFromSmellToFragrance.aspx http://lostechies.com/derickbailey/2011/03/28/encapsulation-youre-doing- to-nieprawda/ W mojej pracy większość naszych aplikacji nie jest przeznaczona dla innych programistów, ale raczej dla klientów. Około 80% kodu aplikacji znajduje się na górze struktury (nieużywane przez inny kod). Z tego powodu prawdopodobnie nie ma szans, że ten kod zostanie wykorzystany przez inną aplikację. Przykładem enkapsulacji, która uniemożliwia użytkownikom wykonywanie niewłaściwych czynności z interfejsem API, jest zwracanie IEnumerable zamiast IList, gdy nie chcesz umożliwiać użytkownikowi dodawania lub usuwania elementów z listy. Moje pytanie brzmi: kiedy enkapsulację można uznać za zwykły puryzm OOP, pamiętając, że każda godzina programowania obciąża klienta? Chcę stworzyć kod, który jest łatwy w utrzymaniu i łatwy do odczytania i użycia, ale kiedy nie buduję publicznego API (do wykorzystania przez innych programistów), gdzie możemy narysować granicę między doskonałym kodem a niezbyt doskonałym kodem?


title: Zlecanie opracowania oprogramowania; dostarczać historyjki użytkowników lub wymagania biznesowe?

text: Jesteśmy małą firmą, w której kieruję programistą, i organizujemy spotkania z potencjalnymi interesariuszami, aby mieć dobrą okazję. Ten interesariusz pomaga nam bezpośrednio w przygotowaniu propozycji dla grupy innych interesariuszy w zakresie oprogramowania, którego potrzebują. Miejmy nadzieję, że jeśli sprzedamy je zgodnie z naszą propozycją (składającą się z bardzo wysokiego poziomu funkcji i ogólnych wyników), wtedy będą sponsorować projekt i będzie on rósł organicznie stamtąd dla użytkowników w całym kraju, którzy zobaczą, jak jest użyteczny. Problem polega na tym, że my, jako deweloperzy, jesteśmy strasznie ugrzęźli, tak jak w przypadku poprzednich projektów, utrzymania istniejących systemów produkcyjnych i bardzo potrzebnych funkcji w zaległościach. W obecnej sytuacji, ponieważ ten projekt może być bardzo dochodowy i nie ma poważnych konkurentów, kierownictwo chce działać SZYBKO i jak najszybciej uzyskać najbardziej podstawową funkcjonalność, **niezależnie od kosztów**. Nie jest to dla nas realistyczne bez powiększania naszego zespołu, ale to zajmuje zbyt dużo czasu. Myślą o zleceniu prac rozwojowych, ale chcą, żebym był analitykiem biznesowym i miał też architektoniczny głos w projekcie. Kiedy kończą opracowywanie głównych funkcji, spodziewają się, że mój zespół przejmie odpowiedzialność za utrzymanie, więc kontrola architektoniczna jest ważna, ponieważ chcemy, aby produkty były możliwe do utrzymania. Nie mam nic przeciwko tej roli, ale nie jestem do niej przyzwyczajony. Wewnętrznie zazwyczaj nie używamy sformalizowanych dokumentów wymagań, a zamiast tego zbieramy wymagania z historyjek użytkowników, przypadków użycia, przepływów pracy i umów z klientami. Jesteśmy przyzwyczajeni do formułowania historyjek użytkownika, ale obawiam się, że dostarczanie historyjek użytkownika do zewnętrznej firmy kontraktowej nie ma sensu, ponieważ prawdopodobnie będą mieli własne kierownictwo projektu, które może chcieć robić rzeczy po swojemu. Nie chciałbym narzucać im naszego nieznanego procesu zarządzania projektami, jeśli uznają go za obcy i to ich spowalnia. Myślę, że bardzo szczegółowe sformalizowane wymagania biznesowe są w porządku, ponieważ chcemy mieć pewność, że mają one niezbędne wytyczne do tworzenia oprogramowania wysokiej jakości, ale nie mam pojęcia, jaki wysiłek będzie to wymagało ode mnie samego. Nie jestem też pewien, kiedy zacząć. Nic nie jest jeszcze oficjalne, ale mam 90% informacji, których potrzebuję od interesariuszy. Po prostu nie chcę, aby kierownictwo poinformowało mnie, że umowa została podpisana, musimy dostarczyć w ciągu 6 miesięcy i dostarczyć mu wszystkie dokumenty wymagań do końca tygodnia. Czując się trochę nad głową, czy formułuję historyjki użytkowników lub wymagania biznesowe? Jakieś inne pomocne sugestie?


title: Czy istnieje precedens dotyczący licencji na kompilator ograniczający rodzaj rozwoju, do którego można go używać?

text: Niedawno poinformowano, że nowa umowa EULA dla Delphi XE3 zabroni rozwoju Client Server w wersji Professional bez dodatkowego zakupu pakietu licencji Client Server. Nie oznacza to, że wersja Professional będzie pozbawiona funkcji, ale licencja wyraźnie zabroni programiście używania kompilatora do określonej klasy programowania, nawet w przypadku rozwiązań firm trzecich lub domowych. **Więc moje pytanie brzmi, czy istnieje precedens kompilatora lub podobnego narzędzia kreatywnego, które zabrania klasy pracy, do której można go używać. W szczególności „profesjonalne” narzędzie na licencji komercyjnej, takie jak Delphi XE3. Poza tym, czy takie ograniczenie byłoby prawnie egzekwowalne?** Wiem, że w przeszłości istniały narzędzia edycji edukacyjnej lub startowej, które ograniczały ich użycie do celów komercyjnych, ale nie były one sprzedawane jako narzędzia „profesjonalne”. Wiem też, że wiele oprogramowania i sprzętu komputerowego będzie miało zastrzeżenie, że nie jest ono przeznaczone do „sprzętu podtrzymującego życie” lub „energii jądrowej”, ale jest to bardziej unikanie odpowiedzialności niż zakazanie działalności. Wygląda na to, że przypominam sobie, że Microsoft wprowadził ograniczenie w programie FrontPage, że nie można go użyć do stworzenia strony internetowej, która słabo odzwierciedla Microsoft, ale wycofali to ograniczenie, zanim można je było legalnie przetestować. **Aktualizacja:** Umowa EULA została wycofana przed wysłaniem produktu z powodu publicznego oporu.


title: Web Developer: Poproś o odgrywanie większej roli Project Managera

text: Jestem Web Developerem (pracuję z PHP/WordPress/Symfony2) w małej firmie (wciąż zatrudniam, ale w tej chwili 5 pracowników), mam ~8 miesięcy doświadczenia (obecnie student informatyki) i zostałem poproszony o pełnienie większej roli Project Managera rola. Nie jestem nawet dobry w zarządzaniu czasem osobistym, ani nie powiedziałbym, że moje programowanie jest jeszcze tak wybitne (wciąż się uczę, często utknąłem na błędach, czasami awaria serwera, np. konfiguracja serwera deweloperskiego i SVN). W rzeczywistości wygląda to w porównaniu z moimi rówieśnikami, jest to naprawdę dobre, ale myśląc o Google, Microsoft, a nawet błąd… Może Oracle, moich umiejętności prawdopodobnie wciąż brakuje, pomyślałem tak czy inaczej, to dobra okazja do nauki. Jak zacząć? Myślę, że potrzebuję odpowiedniego sposobu współpracy lub wzajemnego komunikowania postępów i dokumentacji. Istnieje SVN, ale będąc stosunkowo nowym, czasami spowalnia. Jak przydzielić pracę tak, aby ludzie nie zepsuli cudzego kodu? Właściwie przysporzyłem koledze sporego bólu głowy, gdy edytowałem jakąś konfigurację, przeznaczoną do użytku osobistego. Czekałem na pracę innych kolegów (zarządzanie użytkownikami/logowanie/rejestracja), aby móc ukończyć moją (część ACL dla mojego "modułu", podobna do postów na blogu). Właściwie chciałem „sfałszować” zalogowanego użytkownika, ale to nie zadziałało (całkowicie)


title: Czy można studiować C++ z książki, która obsługuje tylko wersję standardu z 1998 roku?

text: Mam tę dużą książkę, która zasadniczo obejmuje wszystkie główne aspekty C++, problem polega na tym, że według dzisiejszych standardów C++ jest dość stara, czy można z niej korzystać?


title: Czy Silverlight ma przyszłość?

text: Ostatnio przeczytałem kilka artykułów/blogów/komentarze na temat rozwoju i historii WPF i Silverlight. Na niektórych forach wielu deweloperów i użytkowników krytykuje wydajność aplikacji WPF (na przykład Visual Studio 2010). W rzeczywistości udział rynkowy Silverlighta w porównaniu do Flasha nie jest zbyt wysoki. Na PDC 2010 Bob Muglia powiedział coś w stylu „nasza strategia Silverlight i koncentracja na przyszłości uległy zmianie…”, a Microsoft chce promować HTML5 w przyszłości. Ponadto Microsoft ogłosił, że HTML5 jest podstawową częścią platform Windows 8 i Windows Phone 8 („Mango”). Niedawno zacząłem uczyć się Silverlight i teraz muszę zadać sobie pytanie, czy powinienem nadal inwestować czas w naukę tych (moim zdaniem) bardzo fajnych i potężnych technologii!? Czy mają przyszłość? Czy aplikacje desktopowe (klienckie) (Windows) mają przyszłość? Czy tak zwane „Rich Internet Applications” mają przyszłość? A może HTML5 stanie się „absolutną prawdą” w tworzeniu oprogramowania? Jaka jest twoja opinia i co myślisz?


title: Czym są witryny śledzące błędy/wady oprogramowania?

text: Szukam stron internetowych, które mają listę błędów oprogramowania "prawdziwego życia" z oprogramowania (oprogramowanie OS, oprogramowanie aplikacji, ... może to być dowolna warstwa). Może być open-source lub może być kodem w dowolnym innym modelu rozwoju. Zasadniczo jestem zainteresowany znalezieniem stron, które pozwalają mi czytać fragmenty kodu, które zawierają błędy. Interesujące języki programowania to C,C++,PERL. Ale jeśli defekty s/w są agnostyczne językowo i mają więcej wspólnego z ogólnymi pojęciami (lub raczej ich niewłaściwym użyciem), to nadal byłoby to pomocne. PS Aby sprawdzić „bugzilla” lub linki do śledzenia błędów dla każdego projektu open-source, jest to jeden ze sposobów. (Przy okazji, jaki jest adres URL do śledzenia błędów w rozwoju Linuksa (błędy związane z jądrem, związane ze sterownikiem urządzenia, związane z warstwą sieciową,...) Wszelkie wskazówki byłyby przydatne. Dziękuję, -AD.


title: Zasoby dotyczące Java EE i Scala

text: Czy są jakieś dobre strony/blogi/książki/artykuły na temat używania Java EE razem ze Scala? Albo rzeczywiście artykuły mówiące, że nie powinno się tego robić. Wiele zasobów Scali mówi o używaniu Akka i Lift. Akka rozwiązuje inny problem domenowy niż Java EE. Nie znam Lift, ale zakładam, że jest nastawiony na stronę internetową Java EE i nie zastępuje kontenerów serwerów aplikacji, które zapewniają transakcje, bezpieczeństwo, skalowalność, zarządzanie zasobami, niezawodność itp. (wszystkie te rzeczy, które sprzedaje Java EE jako dobry w).


title: Jak uzyskać obraz lub prostokąt, aby wykryć kolizję z innym obrazem?

text: Czy ktoś może mi wyjaśnić, jak wykryć kolizję z innym obrazem? W samouczku, który oglądałem, wyjaśniono, jak wykryć kolizję między dwoma prostokątami, ale zamiast tego chciałbym użyć dwóch obrazów. Zobacz poniższy kod. public void paintComponent(Graphics g){ //g.drawImage(yellowBall, xCoor, yCoor, this); Rectangle r1 = new Rectangle((boardXSize/2), (boardYSize/2),50, 50); Prostokąt r2 = nowy Prostokąt(200, (250),50, 50); g.setColor(Kolor.czerwony); g.fillRect(r1.x, r1.y, r1.width, r1.height); g.setColor(Kolor.niebieski); g.fillRect(r2.x, r2.y, r2.width, r2.height); if(r1.intersects(r2)){ System.out.println("Wykryto kolizję"); } odmaluj(); } Jak mogę wykryć, czy r1 przecina yellowBall zamiast r2? Proszę zachować odpowiedzi na poziomie początkującym, ale oczywiście każda pomoc jest bardzo mile widziana. Dziękuję!!


title: Ponowne wykorzystanie Hadoop i obiektów, dlaczego?

text: W Hadoop obiekty przekazane do reduktorów są ponownie wykorzystywane. Jest to niezwykle zaskakujące i trudne do wyśledzenia, jeśli się tego nie spodziewasz. Co więcej, oryginalny tracker dla tej „funkcji” nie oferuje żadnych dowodów na to, że ta zmiana faktycznie poprawiła wydajność (chyba że ją przegapiłem). > Znacznie przyspieszyłoby to działanie systemu, gdybyśmy ponownie wykorzystali klucze i wartości > [...] ale myślę, że warto to zrobić. Wydaje się to całkowicie sprzeczne z tą bardzo popularną odpowiedzią. Czy jest jakieś potwierdzenie twierdzenia dewelopera Hadoop? Czy jest coś „wyjątkowego” w Hadoop, co unieważniłoby ideę taniego tworzenia obiektów?


title: Miejsce docelowe wiadomości cout w programie GUI

text: Budowałem kilka klas i funkcji w statycznej bibliotece, która ma znajome drukowanie wiadomości tekstowych na `stdout`: cout << "Hello World!" << endl; Rozwijałem tę bibliotekę do użytku w aplikacji konsolowej, ale rozważam również wykonanie wersji GUI, ponieważ będzie ona zarówno użyteczna, jak i wysoce edukacyjna (dla mnie). Zastanawiam się, jak to możliwe, aby dane wyjściowe w bibliotece były wysyłane zarówno do kontrolek `stdout`, jak i GUI (takich jak pasek stanu lub wyskakujące okienko). Skoro takie wiadomości są wysyłane (w każdym razie w moim przypadku) do jednego miejsca docelowego (cout), czy możliwe jest jakieś przekierowanie? Zawsze zakładałem, że coś takiego może być możliwe, ponieważ ludzie często wypuszczają wersje swoich programów z linii poleceń i GUI.


title: Narzędzie Scrum do zarządzania Backlogiem Produktu

text: Mój zespół i ja bardzo chętnie robimy Scrum w stylu „ręcznym” (z papierem i nożyczkami). Jednak staramy się znaleźć narzędzie do zarządzania naszymi zaległościami. Główne wymagania to: * Możliwość drukowania zaległości na kartach, aby przykleić je do tablicy * Możliwość ręcznego przypisywania elementów zaległości do wydań Jak dotąd nie znaleźliśmy niczego, co odpowiadałoby tym kryteriom. Propozycje?


title: Jak zazwyczaj traktuje się daty w testowaniu?

text: Piszę w tej chwili aplikację, która ma dość rozbudowaną logikę biznesową opartą na datach. Mam kilkaset tysięcy rekordów do przetestowania i testerów, którzy chcą zobaczyć, jak te rekordy są obsługiwane, co do tej pory działało dobrze, jednak niektóre skrajne przypadki są trudne do zreplikowania. Powodem jest to, że większość logiki jest związana z dzisiejszą datą, w taki czy inny sposób. Jaki jest najlepszy sposób na poradzenie sobie z tym zarówno w przypadku testów jednostkowych, jak i tradycyjnych testów? Jedyny sposób, jaki naprawdę przychodzi mi do głowy, to pozwolenie na sfałszowanie i naprawienie dzisiejszej daty.


title: Czy używanie odbicia do wykonywania wstawek DB z danymi z usługi zewnętrznej jest złą praktyką?

text: Usługa sieciowa naszego dostawcy zwraca obiekty adresowe (~30 pól), a ja używam LINQ i refleksji do przechowywania zwróconych danych bezpośrednio w bazie danych. Zapętlam atrybuty i ustawiam wartość z obiektu na klasę LINQ. Jestem całkiem nowy w refleksji i obawiam się, że to może być zła praktyka; oszczędza ~30 linii kodu w 3 lub 4 metodach, ale obawiam się, że może wprowadzić trudne do naprawienia błędy. **EDYTUJ** Oto kod. Obiekt docelowy jest zwykle jednostką LINQ to SQL, a dane wejściowe będą obiektem usługi sieci Web. public static void SetValues(object target, obiekt input) { Type targetType = target.GetType(); Wpisz inputType = input.GetType(); PropertyDescriptorCollection inputProperties = TypeDescriptor.GetProperties(inputType); PropertyDescriptorCollection targetProperties = TypeDescriptor.GetProperties(targetType); foreach (PropertyDescriptor p in inputProperties) { wartość obiektu = p.GetValue(input); var t = targetProperties.Find(p.Name, false); if (t != null && wartość != null) { if (value.GetType() == typeof(string) || value.GetType() == typeof(Int64) || value.GetType() == typeof( int) ||wartość.GetType() == typeof(Boolean)) { t.SetValue(cel, wartość); } else if (value.GetType() == typeof(DateTime) || value.GetType() == typeof(DateTime?)) { if ((DateTime)value > DateTime.MinValue) { t.SetValue(target, value ); } } else { t.SetValue(target, value.ToString()); } } }


title: Tworzenie diagramu klas dla projektu wzorca MVC

text: Mam pytanie dotyczące tworzenia diagramu klas dla projektu starszego college'u opartego na MVC. Jeśli mamy 2 aktorów użytkowników w moim systemie, powiedzmy, że studenci `Undergrad` i `Graduate` są dziećmi klasy abstrakcyjnej o nazwie `User`. (Uogólnienie) Każdy aktor ma swoje własne cechy. Moje pytanie, czy w takim przypadku musimy mieć tych dwóch aktorów w osobnych klasach, które dziedziczą po klasie abstrakcyjnej `User`? chociaż zamierzam zaimplementować je jako role przy użyciu jednego modelu o nazwie `Model użytkownika` ? Myślę, że tutaj widać moje zakłopotanie. Koduję przy użyciu wzorca MVC, ale nigdy nie tworzyłem diagramu klas dla tego wzorca. Z góry dziękuję!


title: Czy publikowanie logów serwera z zawartymi w nich adresami IP jest zdradą prywatności użytkownika?

text: Posiadam aplikację webową z logami serwera, które są atrakcyjne dla badaczy. Czy publiczne udostępnianie dzienników jest etyczne, czy nie? Zawierają adresy IP odwiedzających i klienta użytkownika, ale nie więcej informacji związanych z tożsamością.


title: Rozszerz funkcjonalność klasy: dziedziczenie lub dynamiczne proxy java

text: Obecnie mam trzy klasy i odpowiednie interfejsy oraz odpowiednie kreatory: * **Tree** : struktura danych (zaimplementowana w `SimpleTree`) * **ProbabilityTree** : to `drzewo` z dodaną funkcjonalnością losowego wybierania węzłów podrzędnych i aby dostosować prawdopodobieństwo wybrania węzła (zaimplementowane w `ProbabilityTreeImpl`). * **DynamicTree** : to `ProbabilityTree`, które dynamicznie konstruuje węzły, gdy żądany węzeł jeszcze nie istnieje. Kod klienta potrzebuje Drzew, które obsługują zarówno losowy wybór węzłów, jak zapewnia `ProbabilityTree`, jak i dynamicznie rosnące drzewo, gdy żądane są jeszcze nieistniejące węzły, jak zapewnia `DynamicTree`. _UWAGA: Obecnie wszystkie trzy drzewa są niezmienne po zbudowaniu; dla `DynamicTree` oznacza to, że klienci nie mogą dodawać ani usuwać węzłów, ale samo drzewo może się automatycznie zmieniać._ _UWAGA: Github SeeGithub z pięcioma klasami Java dla kodu._ Istnieją co najmniej dwa problemy z tym projektem: 1. `DynamicTree ` wywodzi się z drzewa prawdopodobieństwa, podczas gdy koncepcyjnie te dwie zdolności są niepowiązane (tj. ortogonalne). 2. Używanie dziedziczenia w celu funkcjonalnego dodawania jest często uważane za „zły projekt” (popraw mnie, jeśli się mylę tutaj). * * * Alternatywnym projektem byłoby oddzielenie `ProbabilityTree` i `DynamicTree` przy użyciu czegoś podobnego do wzorca dekoratora i/lub adaptera. Korzystanie z dynamicznego serwera proxy Javy może umożliwić „dekoratory”, które rozszerzają interfejs i mogą ozdobić inne „drzewa” rozszerzonymi interfejsami; tj. TreeDecorator implementuje InvocationHandler, ... { Drzewo dostosowane; ... Object invoke(Method method, Object[] args) { if( «ta klasa może/powinna obsługiwać metodę» ) { return method.invoke(this, args); } else if ( «to.dostosowana może/powinna obsługiwać metodę» ){ return method.invoke(dostosowana, args); } }; } Znowu są pewne problemy: 1. Użycie `Proxy` sprawia, że kod jest trudniejszy do zrozumienia. Co powinienem zrobić? Użyj dziedziczenia, aby rozszerzyć funkcjonalność, użyj dynamicznego proxy, czy czegoś innego?


title: Czy problemy z wyświetlaniem mogą wpływać na SEO?

text: Czy problemy z wyświetlaniem witryny na niektórych platformach mogą wpływać na rankingi wyszukiwania witryny i potencjalnie utrudniać działania SEO?


title: Zasada odwrócenia zależności: Jak zdefiniować „politykę wysokiego poziomu” i „szczegóły niskiego poziomu” dla innych osób?

text: Próbuję wyjaśnić zasadę inwersji zależności moim (głównie młodszym) kolegom. Jak możemy zdefiniować, która z nich jest „zasadą wysokiego poziomu”, a która „szczegółem niskiego poziomu” w oprogramowaniu? Na przykład, jeśli nasze oprogramowanie automatyzuje przepływ pracy kilku aplikacji biznesowych, dlaczego mówimy, że automatyzacja przepływu pracy jest polityką wysokiego poziomu, a aplikacje biznesowe są szczegółami?


title: QFS (Quantcast File System): Skalowalny dla średnich problemów z „dużymi danymi” lub tylko dla bardzo dużych

text: Prowadzę pewne badania i badania nad programowaniem "big data", a szczególnie interesuje mnie QuantCast (QFS), ponieważ jest napisany w moim ulubionym języku programowania, C++. Patrząc na to, jak może to odgrywać rolę w rozwiązaniu niektórych problemów z „dużymi danymi”, wiem, że może to zarządzać implementacją systemów plików petabajtowych. Chciałbym jednak wiedzieć, jak skalowalność jest w przypadku systemów big data, które nie są aż tak duże. Widziałem wiele porównań między QFS a Hadoopem i jak QFS może przewyższać Hadoop, więc każdy, kto używa Hadoopa, może rozważyć użycie Quantcast (jeśli chce tylko mega wydajności). Zasadniczo czy jest skalowalny dla średnich i dużych projektów? (Ktoś zapytał to samo o BDD, ale nie Quantcast) (Widziałem też Hadoop, a zatem Quantcast jest nazywany „bazą danych”. Nazwałbym to systemem plików, na którym można zbudować bazę danych, ale nie nazwałbym jej samą bazę danych).


title: Jak może działać proste IDE? Algorytmy/pseudokod/itp.

text: **Tło** W ostatnim szkolnym module inżynierii oprogramowania musiałem opracować statyczny analizator programu. Mając fikcyjny kod źródłowy języka programowania muszę go przeanalizować, następnie użytkownik może zapytać o program np. jakie instrukcje używają tej zmiennej, która modyfikuje, instrukcje mają wpływ na inne itp. **Możliwy związek z IDE** Na początku brzmiało to bardzo bezużytecznie... to był moduł inżynierii oprogramowania, ale w rzeczywistości bardziej przypominał jakiś teoretyczny moduł języka programowania . Jednak niektóre z tych funkcji mogą być tym, co trafia do używanego przez nas IDE. Zastanawiałem się więc, jak można zaimplementować niektóre typowe funkcje IDE. _**Statyczny_ Program Analyzer (jak to zrobić _dynamic/realtime_ )** W projekcie zaprojektowaliśmy analizator dla programu _statycznego_... ale kto tego potrzebuje? W używanych przez nas IDE wszystko odbywa się w czasie zbliżonym do rzeczywistego, gdy piszemy, podświetlanie składni jest wykonywane, IDE analizuje kod pod kątem błędów, nieużywanych zmiennych itp. Jak to się robi tak wydajnie? W analizatorze statycznym znajduje się parser, który analizuje źródło, buduje AST i CFG. Można to następnie wykorzystać do sprawdzenia, czy zmienna jest używana przez jakąś instrukcję itp. W rzeczywistości to, co może być buforowane, jest buforowane. Istnieje wiele obszarów, które można zoptymalizować, ale nie jestem pewien, czy jakikolwiek (przychodzi mi do głowy) może to zrobić w czasie rzeczywistym. Niektóre problemy, które widzę, to: * Podczas pisania rzeczy są niekompletne, co prowadzi do błędu parsowania, ale prawdziwe IDE w jakiś sposób jest wystarczająco inteligentne, aby wiedzieć, gdzie kontynuować analizowanie. * Podczas pisania rzeczy zmieniają się bardzo szybko, nie możemy przeanalizować całego programu. Nawet jeśli uczynię parser wystarczająco inteligentnym i przeanalizuję tylko zmienioną linię, muszę zaktualizować moją odpowiednią pamięć podręczną AST/CFG/wygasa itp. **W prawdziwym IDE nie widzę, aby użycie procesora gwałtownie wzrastało podczas pisania itp. Jak to się robi?** Niektórzy mogą sugerować przyjrzenie się źródłom jakiegoś open source'owego IDE np. Zaćmienie lub Netbeans. Ale spodziewam się, że naprawdę trudno będzie zrozumieć tak dużą aplikację po prostu czytając kod. Mam nadzieję, że uzyskam wysoki poziom _pomysłu_, w jaki sposób można zaimplementować proste IDE (i niektóre z powszechnie używanych funkcji), prosty akapit lub jakiś pseudokod itp. Niektóre typowe funkcje, o których mogę teraz pomyśleć, to * Refaktoryzacja (coś w rodzaju kontekstowe znajdź i zamień) * Znajdź zastosowania * Przejdź do definicji * Autouzupełnianie (znajdź wszystkie możliwe klasy, zmienne, metody w kontekście) * Podświetlanie składni Dla kodu statycznego, niektóre mogą być trywialne do zaimplementowania, ale IDE jest _(blisko) czas rzeczywisty_


title: Audiobooki dla programistów?

text: Jestem programistą z dwugodzinną podróżą w obie strony do pracy każdego dnia. Część tego czasu chciałbym wypełnić audiobookami o rozwoju oprogramowania. Wszelkie audiobooki, które pomogłyby mi zostać lepszym programistą, byłyby mile widziane. Myślę, że książki o wzorcach projektowych i non-fiction o historii komputerów mogą być tutaj dobre, ale jestem otwarty na wszystko. Pamiętając, że będę tego słuchał w samochodzie, jakie są najlepsze audiobooki, których mogę słuchać? EDYCJA: Wiele osób zasugerowało również podcasty. Jest to mile widziane, ale ponieważ podcasty docierają do stale napływającego strumienia danych, a nie jako skończona ilość danych, mile widziane byłyby również sposoby żonglowania wszystkimi tymi różnymi strumieniami treści. Aby być bardziej konkretnym w mojej sytuacji, mój pojazd dojeżdżający do pracy ma odtwarzacz MP3 CD, wejście USB dla plików MP3 i wejście AUX. Posiadam urządzenia z systemem Android i webOS, które można podłączyć do wejścia AUX.


title: Czy nieużywane reguły CSS są tak kosztowne, że trzeba je usunąć?

text: Czytałem różne artykuły dotyczące optymalizacji aplikacji internetowych i wiele z nich sugeruje usunięcie nieużywanych reguł CSS. Obecnie mam stronę, która ma css jQueryUI, Bootstrap CSS, Datatables CSS i kilka innych. Wszystkie razem przekładają się na około kilka tysięcy reguł (moja ocena) i jestem pewien, że używam tylko 20-30%. Poprosiłem mojego przyjaciela z Wielkiej Brytanii, który ma bardzo szybkie łącze szerokopasmowe, aby sprawdził czas ładowania strony i powiedział: jak w przypadku każdej innej strony w jego połączeniu, ta jest zbyt ładowana w sekundę, co sugeruje, że czas renderowania wydaje się nie mieć znaczenia dla czasu ładowania strony. Jaka poprawa jest oczekiwana w usuwaniu nieużywanych reguł CSS? Czy naprawdę warto?


title: Czy kupiłbyś sprzęt za własne pieniądze do wykorzystania w pracy, aby lepiej wykonywać swoją pracę?

text: W pracy dostałem rozsądną maszynę (podwójny quad 2GHz, 4GB RAM, 160GB napęd 7200RPM, Win7), ale w kilku miejscach brakowało jej (HDD/RAM). Personel IT był w porządku, że wymieniłem sprzęt na własny, więc teraz mam dysk SSD i dodatkowe 8 GB pamięci RAM (dzięki czemu mogę uruchomić wiele programów Visual Studio i maszyn wirtualnych). Zdaję sobie sprawę, że wybór maszyn, które zrobiła, był decyzją biznesową firmy, ale jednocześnie szybszy sprzęt sprawił, że byłem szczęśliwszy i bardziej produktywny w pracy. Wydaje mi się, że moje pytanie brzmi, czy jestem jedynym (samozatrudnionym, mimo że :), który jest gotów wydać osobiste pieniądze na swój sprzęt do pracy, aby uzyskać lepszą jakość życia, i czy powinienem podejść do tego w inny sposób? Czy można powiedzieć z mocą wsteczną: „Myślę, że powinieneś zwrócić mi te 500 USD w sprzęcie, ponieważ [bla]”?


title: Jak się upewnić, że nie skończę z winą

text: Obecnie pracuję nad kontraktem, w którym zasadniczo pracuję jako podwykonawca dla dość dużej agencji cyfrowej. Prawdziwym klientem końcowym jest duży koncern. Do tej pory oczywiście wykonałem **_niesamowitą_** pracę :) * Agencja miała "specyfikacje" z góry - w zasadzie "mapę witryny" dla aplikacji. To był mój „plan”. * W ciągu pierwszego tygodnia zbudowałem działającą prototypową aplikację wraz z nową usługą danych, która idealnie pasowała do mapy witryny. Milestone formalnie zaakceptowany - wiele +ive feedback od agencji. * W drugim tygodniu zbudowałem i dostarczyłem piękny w pełni działający CMS dla danych (naprawdę jest piękny - jestem oszołomiony). Milestone formalnie zaakceptowany - znowu dużo +ive feedbacku od agencji. Potem zaczęły się problemy... w zasadzie potrzebowałem zasobów i pakietu projektowego, aby ukończyć aplikację i projekt, a to, co dostarczyła agencja, było śmieciami - niedokończone pliki Photoshopa całkowicie pomijają połowę aplikacji, a każda strona ma niezdecydowane opcje A/B . W tym pakiecie projektowym nie ma nic zdecydowanego, więc nie możemy nawet rozpocząć następnej fazy projektu. Zgłosiłem to z nimi kilka razy ... ignorowali mnie przez tydzień, a potem wrócili z "o czym ty mówisz? Skończyliśmy pakiet projektowy kilka tygodni temu" ... Następnie zapytałem ich, czy spojrzeli na co wyprodukowali... potem przyjrzeli się temu i przyznali, że wymaga "trochę pracy". Od tego czasu było więcej opóźnień i nic nie zostało dostarczone. Sytuacja jest teraz taka, że: * ten projekt jest teraz opóźniony i opóźniony i opóźniony, co powoduje problemy w całym miejscu (z klientem, w agencji, w moim harmonogramie) * mam wrażenie, że problemy/opóźnienia są rzeczywiście obwinianie "tego podwykonawcy" * moim jedynym kontaktem w projekcie jest jedna osoba w agencji - więc nikt nie ma żadnego wglądu w to, jaka jest prawdziwa sytuacja. Poradzę sobie z opóźnieniami i problemami i jestem prawie pewien, że nie chcę już nigdy więcej pracować z obecnym kontaktem. Jednak bardzo chciałbym w przyszłości pracować dla innych osób w tej samej agencji - i (w moich snach) również nie miałbym nic przeciwko nawiązaniu kontaktu z klientem końcowym. Jak mogę uniknąć „bum rapu” w tym projekcie? Jakieś pomysły?


title: Jaki jest najlepszy sposób na wykonanie wersji wielokomponentowego projektu

text: Mam program, który składa się z 5 głównych komponentów. Uważam, że standardowa numeracja wersji jest zbyt ograniczająca, ponieważ chciałbym zobaczyć, w jakiej wersji jest każdy fragment. Czy ktoś znalazł na to łatwy sposób, inny niż wymienienie każdego z osobna?


title: Używanie gerrita (lub podobnego narzędzia) w zespole, w którym wielu deweloperów pracuje nad jedną funkcją

text: Mamy zespół około 8 programistów, którzy regularnie pracują nad tą samą funkcją w ciągu 3 tygodniowego sprintu. Nie jest to do końca programowanie w parach, ale w naszych obecnych programistach przepływu pracy regularnie wypychają niekompletny kod do ukończenia przez współpracownika. Działało to dobrze, zanim wprowadziliśmy Gerrita, ale teraz nasze zatwierdzenia muszą reprezentować fragmenty zdawania testów, kompletną, logiczną funkcjonalność, a więc model się psuje. Moim jedynym pomysłem jest to, aby wszyscy wypychali się do oddzielnej, nieśledzonej gałęzi, aż do momentu, gdy funkcjonalność będzie gotowa do przeglądu, a następnie zgnieć wszystko w sensowne zmiany i wypchnij je. Czy istnieje inny przepływ pracy oparty na Gerrit, który mógłby działać? Wiem, że jest to szeroko dyskutowany temat w Grupach dyskusyjnych Google i że ostatnio była dyskusja na temat recenzji tematów Gerrita, ale chciałem sprawdzić, czy jest ktoś, kto używa Gerrita w ten sposób i jaki byłby sugerowany przepływ pracy.


title: ELMAH - Gdzie to dobrze pasuje...?

text: Tytuł pytania może być niepoprawny. Pracowałem w bardzo dużej aplikacji webowej ASP.NET (bez użycia MVC), tam zastosowałem prostą strategię obsługi błędów: do góry 3. Jeśli wystąpi jakikolwiek wyjątek, pokaż opis błędu na etykiecie błędu. Teraz przechodzę do nowego projektu, w którym ma być wykorzystany framework MVC 3, więc natknąłem się na ELMAH. To naprawdę fajne narzędzie do obsługi błędów i logowania. Ale jak czytam z wielu stron, w zasadzie rejestruje nieobsłużone wyjątki. Jeśli używam tej samej strategii, co każda instrukcja w bloku try..catch, a następnie wyświetlam komunikat o błędzie na stronie u góry, to gdzie znajduje się ELMAH, w jaki sposób zarejestruje wyjątek? Który wyjątek zarejestruje, jeśli nie umieszczam ani jednej instrukcji poza blokiem try..catch. Nie ma więc miejsca na nieobsługiwany wyjątek.


title: Utrzymanie projektu przy życiu z „załogą szkieletów”? Zły/dobry pomysł?

text: Z powodów politycznych wydaje się, że kierownictwo ma zamiar utrzymać postęp projektu, ale pozbawia starszych programistów do wykonywania innych zadań o wyższym priorytecie. Zamiast tego nad projektem będzie pracował jeszcze jeden młodszy programista, który będzie okresowo konsultował się ze starszymi programistami. Pozornie projekt będzie się rozwijał, ale w znacznie wolniejszym tempie z tyłu. To pozornie zadowala zarówno tych, którzy potrzebują starszych deweloperów do walki z pożarami, jak i tych, którzy chcą, aby projekt był kontynuowany. Teoretycznie starsi programiści wrócą na pełny etat za 6 miesięcy, aby dokończyć projekt. Czy to dobry pomysł? Jakie problemy może to spowodować? Czy lepiej byłoby całkowicie obsadzić personel, czy całkowicie zatrzymać projekt i dokończyć inne rzeczy?


title: Czy db należy mapować bezpośrednio do interfejsu użytkownika, czy też powinno istnieć wiele warstw encji/modeli z mapowaniami do/z każdego?

text: Chciałbym poznać argumenty za/przeciw tej koncepcji. Technologie używane od dołu do góry: * MSSQL 2012 DB (dostępne wyłącznie przez spocs) * Entity Framework * WCF Web Service * ASP.NET Webforms Ktoś z mojego zespołu chciałby użyć Entity Framework do mapowania spocs na ComplexTypes, a następnie użyć te ComplexTypes jako DTO, ostatecznie używając ich jako modelu widoku do wyświetlenia na stronie. Jego argumentem jest, że jest to najszybszy/najłatwiejszy sposób i szybciej uzyskamy zauważalne/ocenione zmiany. Nie podoba mu się też pomysł z licznymi mapowaniami, które byłyby konieczne, aby przejść z DB -> Entity -> DTO -> ViewModel. Inną kwestią jest to, że większość rzeczy z bazy danych idzie w jednym kierunku (db -> sieć), a tylko kilka rzeczy faktycznie wymaga zmiany w interfejsie użytkownika i zapisania/zapisania w bazie danych. Aby określić zakres tego pytania, istnieją tysiące wcześniej istniejących sproców napisanych w oparciu o źle zaprojektowaną strukturę bazy danych (pomyśl, że tabele o szerokości 276 kolumn i pojedynczych wierszach w rzeczywistości zawierają wiele jednostek). Słaba struktura nie zmieni się wkrótce, ponieważ na niej napisano ponad 200 starszych aplikacji.


title: Animowane przepływy analizy wymagań za pomocą PPT lub innego oprogramowania?

text: Widziałem ludzi, którzy robią zgrabne, małe pokazy PowerPoint, które pokazują dane napływające i wychodzące z systemu, którego używają, aby zachwycić klienta. Czy to coś, co robiłeś wcześniej? jak pokazać dane ze źródła 1 i ze źródła 2? Używałem makiet i DFD, ale nigdy nie prezentowałem niczego w ruchu i zastanawiam się, czy to dodaje wartości, czy etosu.


title: Jak radzić sobie z nastawieniem ad hoc?

text: Dołączyłem do sześcioosobowego zespołu programistów dwa miesiące temu. Ludzie są mili, wszystko jest w porządku. Ale coraz częściej obserwuję nastawienie ad hoc. Rzeczy są szybko naprawiane, kosztem przyszłej użyteczności, niewiele jest testów i dwie osoby z radością przyznały, że lubią nosić wiedzę w głowie, zamiast ją zapisywać. Jak sobie z tym poradzić? Chciałbym dawać przykład, ale czas jest ograniczony – lubię architekturę _i_ faktyczne wdrażanie rzeczy. Ale obawiam się, że infekuje mnie nastawienie ad hoc i zamiast dążyć do przejrzystości i prostoty w projektowaniu i kodzie – co nie jest łatwe do ustalenia – zostaję wciągnięty w drenaż niekończącej się spirali hacków – których nie ma osoba z zewnątrz może się rozłączyć - tylko ze względu na harmonogram i kierownictwo.


title: Kontrola źródła bazy danych

text: Czy pliki bazy danych (skrypty itp.) powinny znajdować się pod kontrolą źródła? Jeśli tak, jaka jest najlepsza metoda, aby je zachować i tam aktualizować? Czy istnieje nawet potrzeba, aby pliki bazy danych znajdowały się pod kontrolą źródła, ponieważ możemy umieścić je na serwerze deweloperskim, gdzie każdy może z nich korzystać i w razie potrzeby wprowadzać w nim zmiany. Ale wtedy nie możemy go odzyskać, jeśli ktoś to zepsuje. Jakie podejście najlepiej zastosować w przypadku baz danych dotyczących kontroli źródła?


title: Jaki jest najlepszy sposób używania kinecta z wieloma programowymi syntezatorami muzycznymi?

text: Przez ostatnie kilka miesięcy szukałem interfejsu wielodotykowego opartego na technologii Kinect dla różnych programowych syntezatorów muzycznych. Ogólna strategia, którą wymyśliłem, polega na tworzeniu obiektów, programowo lub (jeśli to możliwe) algorytmicznie, aby reprezentować różne elementy sterujące syntezatora programowego. Te powinny mieć; * Pozycja X * Pozycja Y * Wysokość * Szerokość * Kanał wyjściowy MIDI * Skaler danych MIDI (konwersja współrzędnych x-y na wartości midi) Dwie strategie, które brałem pod uwagę przy tworzeniu agorytmów, to opis XML i jakoś wyciąganie rzeczy prosto z ekranu (tj. uruchomiony program, znajdź xycoords wszystkich elementów sterujących). Nie mam pojęcia, jak się do tego zabrać, dlatego wyrażam to w tak specyficznym technicznym języku ;). Mógłbym zrobić jakieś rozwiązanie pośrednie, na przykład za pomocą kliknięć myszką w rogach kontrolek, aby wygenerować plik xml. Inną rzeczą, którą mogę zrobić, a którą często widziałem w aplikacjach flash, jest umieszczenie rozmiaru ekranu w zmiennej i użycie matematyki do zbudowania wszystkich obiektów interfejsu pod względem rozmiaru ekranu. Zauważ, że nie jest absolutnie konieczne, aby obiekty miały taki sam rozmiar jak kontrolki ekranowe, ani reprezentowały wszystkie obiekty na ekranie (niektóre są tylko wskaźnikami, a nie interaktywnymi kontrolkami). Inne uwagi; Biorąc pod uwagę (na razie) dwa zestawy współrzędnych X/Y jako dane wejściowe (lewa i prawa ręka), jaka jest moja najlepsza opcja ich użycia? Moim pierwszym instynktem było/było stworzenie pewnego rodzaju testu skupienia, w którym jeśli współrzędne x/y mieszczą się w granicach obiektu interfejsu, obiekt staje się aktywny, a następnie staje się nieaktywny, jeśli przez pewien czas wykraczają poza inne mniejsze granice. Tanie rozwiązanie, które znalazłem, polegało na użyciu lewej ręki jako wskaźnika/selektora, a prawej jako kontrolera, ale wygląda na to, że mogę zrobić więcej. Mam kilka rozwiązań gestów (ukryte łańcuchy markowa), z którymi mógłbym się pokombinować. Nie żeby było im łatwo dostać się do pracy, ale jest to coś, co mógłbym sobie wyobrazić, gdybym miał wystarczającą motywację. Podsumowując, problem polega na tym, że * reprezentuje interfejs (konieczne, ponieważ domyślny interfejs zawsze oczekuje danych wejściowych z myszy) * wybiera kontrolkę * manipuluje nią za pomocą dwóch zestawów współrzędnych x/y (kontroler obrotowy/ciągły) lub, w przypadku przełączniki, najlepiej użyć gestu, aby przełączyć go bez dawania/zabierania ostrości. Wszelkie uwagi, zwłaszcza od osób, które pracowały/pracują w multitouch io/NUI, są mile widziane. Bardzo pomocne byłyby linki do istniejących projektów i/lub dobre materiały do czytania (książki, strony internetowe itp.).


title: Jaki jest najlepszy sposób na udowodnienie, że dokumentacja w kodzie jest większa niż obszerna dokumentacja zewnętrzna?

text: Jak najlepiej udowodnić mojemu szefowi, że w kodzie dokumentacja jest większa niż rozbudowane dokumenty zewnętrzne zawierające dokumentację i zrzuty ekranu kodu/ui? Mamy grupę w firmie, która obsługuje kod SAP. Ich proces dokumentacji to godziny żmudnej dokumentacji i zrzutów ekranu kodu i interfejsu (przed i po). Chcą, abyśmy (programiści C#) postępowali zgodnie z tą samą rubryką, co oni. Chcę argumentować, że używanie komentarzy w kodzie i świetnego, samodokumentującego się języka, takiego jak C#, spełnia potrzebę dokumentacji tak samo lub bardziej niż metoda dokumentu innego zespołu. Czy są jakieś opublikowane badania dużych firm, które twierdzą, że zewnętrzna dokumentacja jest nieaktualna, a komentarze w kodzie są bardziej wydajne? (lub coś podobnego do tego punktu) Edytuj - To nie ma nic wspólnego z użytkownikami. to NIE jest dokumentacja dotycząca szkolenia użytkowników. Tylko do użytku wewnętrznego Edycja Edycja — nie ma to nic wspólnego z dokumentami projektowymi ani dokumentami architektonicznymi. Porównuje zrzuty ekranu kodu przed i po zmianie oraz zrzuty ekranu formularzy przed i po zmianie i umieszcza je w dokumencie z obszerną dokumentacją, w przeciwieństwie do posiadania świetnej dokumentacji w kodzie. Czy naprawdę chciałbyś zrobić zrzut ekranu swojego kodu przed i po każdej zmianie dziecka, a następnie napisać dokument szczegółowo wyjaśniający tę zmianę? kiedy nikt nigdy nie będzie używał tych dokumentów jako materiałów referencyjnych w przyszłości?


title: Jak naprawić i zapobiec uszkodzeniom tabel MySQL?

text: Opracowaliśmy oprogramowanie wykorzystujące MySQL. Po kilku miesiącach użytkowania niektóre tabele bazy danych zostały uszkodzone i wymagają naprawy. Z powodu uszkodzenia nie jesteśmy w stanie utworzyć kopii zapasowej za pomocą Navicat, a także nie możemy wygenerować zrzutu. Plik dziennika wskazuje następujący błąd przez ponad 2 dni: RRMMDD GG:MM:SS [BŁĄD] /usr/sbin/mysqld: Nie można otworzyć pliku: 'ini.MYI' (errno:145) Co to jest przyczyną tego zepsucia? Jak możemy je naprawić? Jak możemy zapobiec uszkodzeniu tabel bazy danych w przyszłości?


title: Czy powinienem ograniczyć słownictwo sufiksów nazwy typu podczas korzystania z OOP?

text: Moi współpracownicy mają tendencję do myślenia, że lepiej jest ograniczyć sufiksy typu niebędącego domeną do małego, ustalonego zestawu słów inspirowanych wzorcami OOP, np.: * *Usługa * *Repozytorium * *Fabryka * *Kierownik * *Dostawca, o którym sądzę nie ma powodu, aby nie rozszerzać tego zestawu o kolejne nazwy, np. (niektóre "tłumaczenia" do poprzedniego słownictwa podano w nawiasach): * *Distributor (=> *DistributionManager lub *SendingService) * *Generator * *Browser (=> *ReadonlyRepositoryService) * *Processor * *Manipulator (=> *StateMachineManager ) * *Enricher (=> *EnrichmentService) (*) oznacza pewne słowo domeny, np. „Zamówienie”, „Student”, „Przedmiot” itp. Domena prawdopodobnie nie jest wystarczająco złożona, aby używać specjalistycznych metod, takich jak DDD, które mogłyby sterować nazewnictwem.


title: Funkcje pomocnicze - dobrze zdefiniowane wejścia czy dobrze zdefiniowane wyjścia?

text: ### Problem W Codeigniter (framework PHP) próbuję utworzyć funkcję pomocniczą, która wstrzyknie polecenie ActiveRecord (dla MySQL) do łańcucha istniejących wywołań ActiveRecord. Powodem tego jest to, że obecnie dostępne polecenia ActiveRecord nie są wystarczająco niezawodne i dają różne wyniki w zależności od przekazywanych parametrów. Na przykład: $param = ""; $this->db->where('pole', ""); produkuje WHERE `field` = "" Dałoby to zestaw wyników, w którym **zwrócone zostały tylko puste pola**. Nie zawsze jest to zamierzone zachowanie, ponieważ dane wejściowe pochodzą z formularza internetowego i mogą być wynikiem braku przesłanego zapytania — w związku z tym **należy zamiast tego zwrócić wszystkie wyniki**. ### Próba rozwiązania To, co zdecydowałem się wymyślić, to metoda pomocnicza, która pobierała zestaw nieznanych danych wejściowych i zwracała zestaw wyników, który pasowałby do mojego pożądanego zachowania (np. zwracał wszystkie wyniki lub nie zwracał żadnego). Używając przypadków testowych i metody testowej do wyabstrahowania pożądanego zestawu danych wejściowych i wyjściowych, miałem nadzieję, że uda mi się stworzyć łatwą do wywołania metodę zmuszania wyników bazy danych do pożądanego zachowania. Byłoby to łatwiejsze niż powiedzenie **zmieniając dane wejściowe na oczekiwany typ** , a następnie używając niewiarygodnego zachowania poleceń ActiveRecord w Codeigniter. Moim głównym zmartwieniem jest jednak to, że moja funkcja pomocnicza może próbować zrobić zbyt wiele - mój kolega opisał to jako magiczną metodę, która bierze wszystko i może mieć tajemnicze szczegóły implementacji. Byłby więc mniej czytelny niż konwencja ActiveRecord (która jest bardziej znana) i trudniejszy do utrzymania. Czy moja funkcja jest najlepszym sposobem na to, czy istnieją lepsze alternatywy?


title: Rails: Przydatny przykład delegata i prawa Demeter

text: Obecnie uczę się o „delegacie” i prawie Demeter. Rozumiem Prawo Demeter, ale nie mogę znaleźć dobrego przykładu, w którym użycie słowa „delegat” w celu uniknięcia łamania prawa byłoby nawet użyteczne. Chcę znaleźć przykład związany z moim projektem, ponieważ muszę wygłosić prezentację. Jedyny wiersz kodu, który znalazłem, który może łamać Prawo Demeter, to: `@game.promotions.find_by_promo_type("cross")` Model `Game` `has_many` `Promotions` i sięga inny model do wykonania wywołania `find` na podstawie atrybutu promocji `promo_type`. W moim rozumieniu jest to pogwałcenie prawa Demeter i powinienem wdrożyć następujące rozwiązanie. class Game < ActiveRecord::Base has_many :promotions delegate :find_by_promo_type, :to => :promotion end Czy możesz dać mi przykład, w którym może to być przydatne, poza „prawem Demeter tak mówi”. Jedyne, co przychodzi mi do głowy, to z jakiegoś powodu chciałem zmienić nazwę `promotions` na `promos`, wtedy rozwiązanie byłoby przydatne, ponieważ musiałbym tylko dokonać następującej zmiany, a `:find_by_promo_type` nadal będzie praca dla klasy `Game` Gra < ActiveRecord::Base has_many :promos delegate :find_by_promo_type, :to => :promos end Jedyną rzeczą jest to, że uważam, że ten argument jest błędny. Jeśli miałbym zmienić nazwę modelu, musiałbym również dokonać refaktoryzacji kodu w wielu innych miejscach, które nawet nie łamią prawa Demeter. Trudno uwierzyć, że to wszystko, co Prawo Demeter może osiągnąć w odniesieniu do tego przykładu. Czy ktoś może mi pomóc to zrozumieć.


title: Zasoby SQLite lub jakakolwiek inna koncepcja przechowywania dla aplikacji mobilnych?

text: Chciałbym wiedzieć, jakie koncepcje przechowywania są używane dla urządzeń mobilnych lub podręcznych, na których działa aplikacja?. Jednym z nich jest AFAIK SQlite. Czy ktoś może rzucić światło na tę koncepcję? być może linki i zasoby będą bardzo przydatne dla wielu nowych programistów. Wielkie dzięki :) EDIT: Moim celem byłby Android i ios OS.


title: Co się stało z systemem ponownego wykorzystania oprogramowania obronnego (DSRS)?

text: Czytałem kilka artykułów z początku lat 90. o inicjatywie ponownego wykorzystania oprogramowania Departamentu Obrony USA, zwanej Defense Software Reuse System (DSRS). Najnowsza wzmianka o nim, jaką udało mi się znaleźć, znajduje się w artykule z 2000 r. – Ankieta dotycząca repozytoriów oprogramowania do ponownego wykorzystania > ### Defense Software Repository System (DSRS) > > DSRS to automatyczne repozytorium do przechowywania i pobierania zasobów oprogramowania wielokrotnego użytku ( RSA) [14]. Oprogramowanie DSRS zarządza teraz inwentarzami > zasobów wielokrotnego użytku w siedmiu centrach wsparcia ponownego wykorzystania oprogramowania (SRSC). DSRS > służy jako centralny punkt zbiórki RSA wysokiej jakości i ułatwia > ponowne wykorzystanie oprogramowania, oferując programistom możliwość dopasowania ich > wymagań do istniejących produktów oprogramowania. Konta DSRS są dostępne > dla pracowników rządowych i personelu wykonawców obecnie wspierających > projekty rządowe... > > ...Społeczność oprogramowania DoD próbuje zmienić swój model inżynierii oprogramowania > z obecnego cyklu oprogramowania na oparty na procesach, domenowy specyficzny, > oparty na architekturze, wspomagany repozytorium sposób konstruowania oprogramowania [15]. > W tym zmieniającym się środowisku DSRS ma największy potencjał, aby stać się > standardowym repozytorium ponownego wykorzystania DoD, ponieważ jest to jedyne istniejące wdrożone, > operacyjne repozytorium z wieloma interoperacyjnymi lokalizacjami w DoD. > Siedem lokalizacji DSRS obsługuje prawie 1000 użytkowników i zawiera listę prawie > 9000 zasobów wielokrotnego użytku. Sam DISA DSRS zawiera listę 3880 zasobów wielokrotnego użytku i ma > 400 > kont użytkowników... > > Długoterminową strategią DSRS jest wspieranie wirtualnego repozytorium. Te połączone > repozytoria zapewnią możliwość lokalizowania i udostępniania > komponentów wielokrotnego użytku w różnych domenach i między usługami. Skuteczny i > ewoluujący DSRS jest głównym warunkiem powodzenia inicjatywy DoD > ponownego wykorzystania oprogramowania. Ewoluujące wymagania dotyczące repozytorium DoD wymagają, aby DISA > nadal posiadało działającą witrynę DSRS, aby wspierać testowanie w rzeczywistej > operacji repozytorium i wspierać użytkowników DoD. Proces klasyfikacji > dla DSRS jest podstawową technologią obsługi klienta [16]. Ten > proces jest pierwszym krokiem do udostępnienia zasobów wielokrotnego użytku do > wdrożenia strategii migracji funkcjonalnej i technicznej. > > ... > [14] DSRS - Technologia obronna dla elastycznych, niezawodnych systemów > URL: http://ssed1.ims.disa.mil/srp/dsrspage.html > [15] STARS - Technologia oprogramowania dla elastycznych, niezawodnych Systems > URL: http://www.stars.ballston.paramax.com/index.html > [16] D.E. Perry i S.S. Popovitch, „Inquire: Predicate based use and > reuse”, > w Proceedings of the 8th Konferencja Inżynierii Oprogramowania Opartego na Wiedzy, > s. 144-151, wrzesień 1993. > ... Czy DSRS nie żyje i czy były jakieś raporty z sekcji zwłok? Czy istnieją inne, nowsze inicjatywy lub raporty rządu USA dotyczące ponownego wykorzystania oprogramowania?


title: Proponowanie albumów na podstawie list dziesięciu najlepszych znajomych

text: Zastanawiam się tylko, czy ktoś mógłby zaproponować dobry algorytm we wspólnym filtrowaniu, który mógłbym wykorzystać do sugerowania wyborów muzycznych na podstawie dziesięciu najlepszych list. To jest osobisty projekt, jestem członkiem prywatnego bloga muzycznego, na którym większość użytkowników ostatnio przesłała listy „najlepszych z 2011 roku”. Listy różnią się wielkością (powiedzmy 10-50 albumów) i nie są klasyfikowane. Mieć około 100 list. Zasadniczo ma nadzieję, że każdemu użytkownikowi udzieli rekomendacji na podstawie korelacji jego listy z listą wszystkich innych.


title: Pomysły na najlepszy sposób ustrukturyzowania mojej aplikacji w Xcode

text: Chcę, aby moja aplikacja wyświetlała lokalizacje pobliskich restauracji w różnych kategoriach. Miałby ekran z przyciskiem do wyboru, które kategorie mają być wyświetlane. W zależności od tego, który przycisk zostanie naciśnięty, w pobliskich lokalizacjach pojawią się pinezki, które można nacisnąć, aby uzyskać więcej informacji. Czy do przechowywania wszystkich danych restauracji powinienem utworzyć listę za pomocą „enum”, podobnie jak w przykładowym kodzie Apple „MapCallouts”?


title: Pomysły na zeskrobanie domowego systemu błędów zasilanego przez PHP

text: Pracuję w dużej firmie i utknąłem z kiepskim domowym narzędziem do śledzenia błędów, które robi zbyt wiele rzeczy na wpół przyzwoicie, ale jego funkcja wyszukiwania jest prawie niemożliwa do użycia (ma około 80 pól, które ma do / można wypełnić), a wyszukiwanie musi być precyzyjne. Mamy wiele duplikatów zgłoszonych błędów, które nigdy nie są konsolidowane, a wyciągnięcie wszystkich błędów zgłoszonych w niektórych produktach w niektórych wersjach po prostu nie będzie wcale łatwe. Pozbycie się obecnego systemu jest polityczną i strategiczną niemożliwością. Setki ludzi są w to przywiązane. Mam nadzieję, że zrobię iterację przez błędy od 1 do dowolnej liczby (jest sposób, jak sądzę), a następnie zapisz wynikowe strony HTML o nazwach „bug000001.html”, „bug000002.html” itd. Potem chciałbym coś w rodzaju pełnego indeksowania tekstu w stylu Google. To, co mamy, jest tak złe, że warto byłoby to zrobić. Błędy nie zmieniają się tak bardzo z biegiem czasu, więc nie martwię się o brak synchronizacji z oryginałem - nie będzie wspaniale. Tak więc moje pytanie brzmi: załóżmy, że pobrałem pliki html w tym samym folderze. Jakiego darmowego i otwartego narzędzia mogę wtedy użyć, aby umożliwić rozmyte wyszukiwanie treści? Zdaję sobie sprawę, że za każdym razem, gdy szukam, mogę wymyślić określone wyrażenie regularne, które prawdopodobnie spełniłoby zadanie, ale chciałbym to jeszcze ułatwić, aby błędy w pisowni nie zaszkodziły. Zdaję sobie sprawę, że pełna moc spersonalizowanego, opartego na historii wyszukiwania Google prawdopodobnie nie będzie dla mnie dostępna, ale z chęcią zadowolę się czymś bliskim, czyli darmowym i łatwym w użyciu. Jeśli masz sugestie dotyczące dobrego bezpłatnego i otwartego narzędzia/biblioteki Pythona, której mógłbym użyć do zautomatyzowania prostych czynności przeglądarki, takich jak wpisywanie tekstu do pola tekstowego, klikanie przycisku, a następnie zapisywanie treści w pliku HTML, proszę je wymienić również, chociaż to prawdopodobnie powinno być osobnym pytaniem. **EDYTUJ** Nie mam dostępu do kodu źródłowego dla frontendu lub backendu PHP; to wszystko jest zamknięte przez socjalistów na innym kontynencie.


title: Podawanie doświadczenia zawodowego w moim CV

text: Mam pytanie w swoim CV. Poszukuję kariery w Javie/J2EE itp., pracowałem jako asystent dydaktyczny dla Struktur Danych w Javie. To było od sierpnia 2009 do maja 2010. Odbyłem staż w PHP w maju 2010 i jako programista PHP na moim univ jako RA w okresie od stycznia 2011 do maja 2011. Ponieważ szukam długoterminowej kariery w javie, powinienem wspomnieć o asystencie nauczania pozycja tj. sierpień 2009-maj 2010 na górze lub najnowsze doświadczenie na górze mojej listy doświadczeń.


title: Czy „kod, który generuje kod” jest naprawdę świetny?

text: Przeglądałem „popularne pióra” CodePen i zauważyłem tę fajną, spiralną animację, którą ktoś wykonał pozornie śmiesznie małą ilością kodu. To robi wrażenie, dopóki nie klikniesz nagłówków HTML i CSS, aby wyświetlić „skompilowane” wersje tego samego kodu. Nagle 3 linie HAML i ~40 linii SCSS zamieniają się w gigantycznego potwora powtórzeń. W tym miejscu pojawia się moje pytanie: czy można zrobić coś takiego w praktyce? Nie zrozum mnie źle — uwielbiam używać preprocesorów, które pomagają mi szybciej pisać kod, ale w niektórych przypadkach wygląda na to, że jest to automatyczna maszyna do kopiowania i wklejania.


title: Czy istnieje nazwa błędu „Więcej wydarzeń niż oczekiwano”?

text: Czy istnieje **nazwa rodziny błędów** , które są spowodowane założeniem, że użytkownik wygeneruje tylko 1 zdarzenie podczas wykonywania procedury obsługi ? Najprostszy przykład to: animacja uruchamiana kliknięciem, która może uruchomić kilka kopii samej siebie, jeśli użytkownik szybko kliknie kilka razy.


title: Pomoc w (prze)projektowaniu mojej aplikacji Swing

text: Opracowałem aplikację Swing, która steruje wykonywaniem kilku skryptów, takich jak zadania. Muszę jednocześnie wyświetlić tymczasowe dane wyjściowe zadań. Śledziłem MVC podczas pisania aplikacji. Aplikacja działa zgodnie z oczekiwaniami. Ale późno mam następujące wymagania: 1. Niektóre zadania skryptowe wymagają do wykonania specjalnych uprawnień użytkownika, aby uzyskać dostęp do wyspecjalizowanych zasobów. Wydaje się, że w Javie nie ma możliwości podszycia się pod innego użytkownika podczas uruchamiania aplikacji. Również próba uruchomienia aplikacji Swing jako zaplanowanego zadania w systemie Windows nie pomaga. 2. Po uruchomieniu zadania powinny być uruchomione, nawet jeśli użytkownik wyloguje się po uruchomieniu zadań. Zastanawiam się nad oddzieleniem logiki wykonania od interfejsu użytkownika i uruchomieniem tego jako usługi; i wprowadzić JMS pomiędzy dwie warstwy, aby przechowywać/odzyskać tymczasowe dane wyjściowe. Uwaga: muszę uruchomić tę aplikację w systemie Windows. Wszelkie pomysły dotyczące spełnienia moich wymagań będą mile widziane.


title: Jakie są zasady projektowania, które promują testowalny kod? (projektowanie testowalnego kodu vs prowadzenie projektu przez testy)

text: Większość projektów, nad którymi pracuję, traktuje programowanie i testowanie jednostkowe w izolacji, co sprawia, że pisanie testów jednostkowych w późniejszej instancji jest koszmarem. Moim celem jest pamiętanie o testowaniu w fazie projektowania wysokiego i niskiego poziomu. Chcę wiedzieć, czy istnieją jakieś dobrze zdefiniowane zasady projektowania, które promują testowalny kod. Jedną z takich zasad, którą ostatnio zrozumiałem, jest odwrócenie zależności poprzez wstrzykiwanie zależności i odwrócenie kontroli. Czytałem, że istnieje coś takiego jak SOLID. Chcę zrozumieć, czy przestrzeganie zasad SOLID pośrednio skutkuje kodem, który można łatwo przetestować? Jeśli nie, to czy istnieją jakieś dobrze zdefiniowane zasady projektowania, które promują testowalny kod? Zdaję sobie sprawę, że istnieje coś, co nazywa się Test Driven Development. Chociaż bardziej interesuje mnie projektowanie kodu z myślą o testowaniu na etapie samego projektowania, niż prowadzenie projektu przez testy. Mam nadzieję, że to ma sens. Jeszcze jedno pytanie związane z tym tematem dotyczy tego, czy w porządku jest refaktoryzacja istniejącego produktu/projektu i wprowadzanie zmian w kodzie i projekcie w celu umożliwienia napisania przypadku testów jednostkowych dla każdego modułu?


title: używasz kontroli źródła do tworzenia informacji o wersji?

text: Powiedzmy, że mam gotowy wózek ekcomerce z półki. Cały kod umieściłem w subversion. Zaczynam wprowadzać zmiany i z powrotem sprawdzać zmiany w kodzie. Czy jest możliwe wyświetlenie każdego „zaewidencjonowania” z komunikatami programisty, abym mógł sporządzić uwagi do wydania? Chciałbym użyć tego dla rzeczywistego podanego czasu.


title: ISerializable vs atrybuty WCF

text: W C# .NET istnieją dwie główne możliwości serializacji i obiektu. 1. Implementacja interfejsu **ISerializable**? 2. Używając serializacji [DataContract/DataMember] **atrybut** WCF? Czym różnią się te dwie możliwości i co jest lepsze pod względem czasu realizacji.


title: Jak utrzymać zsynchronizowany stan między wątkami - czy jest to dobre zastosowanie dla Singletona?

text: Dużo słyszę o tym, że „Singletony są zawsze złe”. Nie nienawidzę ich do tego stopnia, ale staram się ich nie używać, jeśli mam lepszą alternatywę. W tym przypadku mam system, który obsługuje wiele żądań, z których każde przychodzi w osobnym wątku. Każde przychodzące żądanie musi mieć przydzielony własny unikalny identyfikator sekwencyjny. Obecnie mam klasę Singleton, której rolą jest inicjowanie tego identyfikatora podczas uruchamiania, a następnie utrzymywanie go podczas działania systemu. Singleton jest tworzony/pobierany, a wartość Id zwiększana w sposób bezpieczny dla wątków, jak można by się spodziewać. W rzeczywistości jest on rozdawany wątkom przy tworzeniu przez Dependency Injection, ale rdzeń klasy to klasyczny Singleton zbudowany wokół statycznej reprezentacji bieżącej wartości Id. Biorąc pod uwagę, że prawdopodobnie wykonamy więcej pracy, która wymaga podejścia wielowątkowego, chciałbym się dowiedzieć, czy istnieje sposób na zaimplementowanie tego typu funkcjonalności w sposób, który pozwala na synchroniczne utrzymywanie danych w wątkach, które są w przeciwnym razie nieświadomi siebie nawzajem, bez użycia budzącego strach wzorca Singletona?


title: Jak uniknąć wymyślania koła na nowo przy stosowaniu skomplikowanych ram?

text: Dla backstory opracowuję aplikację GUI w C#/WPF. Miałem już w swoim kodzie sporo wystąpień <ComboBox ItemsSource="{Binding Items}"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding ItemName}"/> </DataTemplate> </ComboBox.ItemTemplate /> </ComboBox> kiedy przypadkowo natknąłem się na `DisplayMemberPath` podczas marginalnie powiązanego wyszukiwania StackOverflow, co powoduje, że powyższe <ComboBox ItemsSource="{Binding Items}" DisplayMemberPath="ItemName"/> Teraz `ComboBox` ma 158 właściwości publicznych , i naprawdę wątpię, czy powinienem przeczytać wszystkie ich opisy, zanim jeszcze zacznę używać ComboBox. Z drugiej strony naprawdę obawiam się napotkania tego problemu na większą skalę, ponieważ jest to moja pierwsza aplikacja WPF i czasami mam wrażenie, że robię to źle. Zauważ, że samouczki online poza oficjalną dokumentacją są bardzo niewiarygodne, często błędne i/lub źle napisane; przynajmniej trudno mi było znaleźć dobry. Z drugiej strony, wszystkie książki o programowaniu, z którymi się zetknąłem, wchodziły w zbyt wiele szczegółów, biorąc całe rozdziały wyjaśniające rzeczy, które były dla mnie oczywiste po pierwszym akapicie, więc pominąłem wiele części. _Jak mogę uniknąć przypadkowego pominięcia odpowiedniej części nieprzeniknionej, ogromnej dokumentacji, gdy korzystam ze złożonego frameworka lub biblioteki, tworząc w ten sposób niepotrzebną pracę dla siebie?_ Nie sądzę, że jest to duplikat Jakiego procesu powinienem użyć do nauki duży system? lub Jak zanurzyć się w dużych bazach kodu?, ponieważ dotyczą one uczenia się bazy kodu, którą musisz zrozumieć/pracować/modyfikować/ulepszać, zakładając również, że masz dostęp do samego kodu. Moje pytanie dotyczy bycia użytkownikiem frameworka, a zadaniem jest „biorąc pod uwagę ogromną oficjalną dokumentację i Google, sprawnie znajdź te części frameworka, których mogę użyć, aby ułatwić sobie pracę”.


title: Testy jednostkowe – czy testy metody powinny walidować wyniki innych metod?

text: Jedna rzecz nie daje mi spokoju podczas pisania testów jednostkowych mojego kodu. czy testy metody powinny obejmować walidację wyników innych metod? Oczywiście metody publiczne. Przejdźmy do - dość banalnego - przykładu: public int Solve(string forumla) { if (forumla.Contains("+")) { return SolveAddiction(formula); } if (forumla.Contains("-")) { return SolveSubtraction(formula); } wyrzuć nowy ArgumentException(); } public int SolveAddiction(string formula) { var strings = formula.Split('+'); if (strings.Length != 2) { throw new ArgumentException(); } int firstFactor = int.Parse(strings[0]); int secondFactor = int.Parse(strings[0]); zwróć pierwszyWspółczynnik + drugiWspółczynnik; } Czy w takim przypadku testy metod `Solve` powinny testować tylko przepływ sterowania, czy każdy możliwy scenariusz dla `SolveAddiction`? Załóżmy, że `SolveAddiction` i `SolveSubtraction` mają własne testy. Innymi słowy, czy scenariusze testowe dla `Rozwiąż` powinny zawierać tylko: * 2+2 * 2-2 * 2:2 Lub też zawierać: * 2+2+2+2 * 2-2-2-2 * ziemniak - chomik Z pozdrowieniami


title: A jeśli zapytam rekrutera o powody, aby dołączyć do firmy?

text: Na rozmowach kwalifikacyjnych często jestem pytany, czy znam firmę, wyjaśniam, dlaczego uważam, że byłbym najlepszym wyborem dla tej firmy itp. Nigdy nie lubiłem tego typu pytań. Korzystając z twoich doświadczeń w rozmowach kwalifikacyjnych, jak myślisz, co by się stało, gdybym poprosił rozmówcę o wyjaśnienie, dlaczego uważa, że firma jest dla mnie najlepszą firmą i dlaczego powinienem zaakceptować jego odpowiedź? Czy uważasz, że byłoby to dobre, czy złe rozwiązanie? Edycja: ideą pytania nie byłoby „zakwestionowanie” ankietera. Ideą pytania byłoby zobaczyć, co myśli o firmie, jakie wartości uważa, że są ważne wewnątrz firmy i jakie są mocne strony firmy.


title: Sugerowana platforma aplikacji internetowych i baza danych dla przedsiębiorstw, aplikacja „Big-Data”?

text: Mam aplikację internetową, którą rozwijałem dla małej grupy w mojej firmie w ciągu ostatnich kilku lat, używając Pipeline Pilot (plus skrypty jQuery i Python) do tworzenia stron internetowych i obliczeń zaplecza oraz Oracle 10g dla mojego RDBMS. Użytkownicy przesyłają eksperymentalne dane genomowe, które są analizowane w bazie danych i udostępniane do zapytań, transformacji i raportowania. Eksperymentalne zbiory danych są duże i zawierają wiele warstw metadanych. Dany rekord danych eksperymentalnych może mieć związek klucza obcego z tabelą opisującą test tego punktu danych. Testy mogą obejmować wiele genów, które mogą mieć wiele transkryptów, które mogą mieć wiele mutacji, które mogą wpływać na wiele ścieżek sygnałowych itp. Użytkownicy muszą podchodzić do tych danych z dowolnego punktu w tych warstwach metadanych. Ponieważ wszystkie zestawy danych dla danego typu danych mogą obejmować miliard wierszy, powoduje to powstawanie dużych, dynamicznych zapytań, które są trudne do przewidzenia. Nowe zestawy danych są dodawane co tydzień (~1 GB na zestaw). Dane eksperymentalne nigdy nie są aktualizowane, ale powiązane metadane można aktualizować co tydzień w przypadku kilku rekordów, a co roku w przypadku większości pozostałych. Dla każdego wprowadzonego zestawu danych, który widzi system, będzie wykonywanych od 10 do 100 wyborów i powiązanych danych. Wolne działanie aktualizacji i wstawek jest w porządku, o ile zapytania działają szybko i są jak najbardziej aktualne. Aplikacja nadal rośnie pod względem rozmiaru i zakresu, a już zaczyna działać wolniej, niż mi się podoba. Martwię się, że mamy już przerośnięty Pipeline Pilot i być może Oracle (jako jedyną bazę danych). Czy odpowiednia byłaby tutaj baza danych NoSQL czy system OLAP? Jakie frameworki aplikacji internetowych działają dobrze z takimi systemami? Chciałbym, aby rozwiązanie było czymś skalowalnym, przenośnym i wspieranym przez X lat. Oto aktualny stan aplikacji: * Serwer WWW/przetwarzanie danych: Pipeline Pilot na Windows Server + IIS * Baza danych: Oracle 10g, ~1TB danych, ~180 tabel z kilkoma miliardami wierszy * Pamięć sieciowa: Isilon, ~50 TB surowych danych o niskim priorytecie


title: Oprogramowanie na licencji GPL zainstalowane na komercyjnym sprzęcie

text: Czy na żądanie klienta dostawcy muszą udostępniać źródła oprogramowania na licencji GPL zainstalowanego na sprzedawanym przez nich sprzęcie? Na przykład, sprzedawca sprzedaje dekoder IPTV i wstępnie instaluje jakieś zastrzeżone oprogramowanie, które jest połączone z pewną biblioteką na licencji GPL. W konsekwencji oprogramowanie samo staje się GPL. Czy dostawca musi dostarczyć dla niego kod źródłowy? Sprzedawca nie sprzedaje tego oprogramowania, on sprzedaje sprzęt.


title: git tagowanie komentarzy - najlepsze praktyki

text: Zaadoptowałem system tagowania x.x.x.x i działa to dobrze. Jednak musisz również zostawić komentarz za pomocą swojego tagu git. Używam opisów takich jak „naprawia błąd Y” lub „funkcja X”, ale czy jest to najlepszy komentarz do pozostawienia? W szczególności, jeśli tag zawiera kilka poprawek, wydaje się, że nie ma sensu umieszczanie bardzo długiego komentarza do tagu. Czy to oznacza, że powinienem tworzyć tag dla każdej poprawki lub funkcji, czy też komentarze tagów powinny odzwierciedlać coś innego? Mam kilka pomysłów, które mogą być dobre, ale chciałbym porady od doświadczonych weteranów tagowania git :) Dla tych, którzy wolą konkretne przykłady: 1.0.0.0 - początkowa wersja 1.0.0.1 - naprawa błędu dla problemu X 1.0.0.2 - (co jeśli jest to poprawka dla wielu problemów, komentarz byłby zbyt długi, nie?) Inny przykład, w tym przykładzie komentarze są mniej więcej takie same jak tagi, wydaje się to zbędne. Czy jest coś jeszcze, co moglibyśmy opisać? https://github.com/osCommerce/oscommerce2/tags


title: Co to jest programowanie tabelaryczne?

text: Język programowania Falcon reklamuje się jako wspierający programowanie tabelaryczne: > Falcon zapewnia sześć zintegrowanych paradygmatów programowania: proceduralny, obiektowy, zorientowany na prototyp, funkcjonalny, tabelaryczny i zorientowany na komunikaty. I > nie musisz ich wszystkich opanowywać; wystarczy wybrać składniki > wolisz i niech kod podąża za Twoją inspiracją. Dokumentacja rozszerza nieco sposób działania języka programowania tabelarycznego, ale koncentruje się na własnych strukturach i składni języka i tak naprawdę nie wyjaśnia korzyści wynikających z paradygmatu (z wyjątkiem oczywiście tych, które są oczywiste z uproszczonych przykładów) . Jestem trochę zdezorientowany tym, jak całość działa wewnętrznie, z tego, co rozumiem, „Tabela” Falcona jest natywną strukturą, która działa mniej więcej jako tabela relacyjna i może być opisana (w języku OO) jako natywny zestaw rekordów z relacyjne możliwości zapytań. Okropny opis, wiem (obwiniaj moje korzenie OO i lata nadużywania tequili). Czy możesz mi pomóc lepiej zrozumieć, na czym polega programowanie tabelaryczne i jak działa wewnętrznie? **Wyjaśnienie:** _nie_ pytam o programowanie modeli tabelarycznych.


title: Dlaczego Licencja Publiczna Microsoft nie jest zgodna z GPL?

text: Zgodnie z tą stroną Projektu GNU, dotyczącą Licencji Publicznej Microsoft (Ms-PL): > To jest licencja wolnego oprogramowania; ma copyleft, które nie jest silne, ale > niezgodne z GNU GPL. Nie wyjaśniają, dlaczego jest to niezgodne. Nie mogę znaleźć żadnych satysfakcjonujących odpowiedzi ani wyjaśnień przez Google.


title: Automatyczna denormalizacja dla aplikacji bazodanowej NoSQL

text: Mamy przypadek użycia, w którym przechowujemy dane podobne do tabeli, ale o schemacie danych wiemy dopiero w czasie wykonywania. W naszej aplikacji użytkownik zaawansowany definiuje schemat, a zwykły użytkownik może tworzyć rekordy i tworzyć relacje między tymi rekordami. Problem, który mamy, polega na tym, że podczas wykonywania złożonych zapytań dotyczących powiązanych „tabel” (można powiedzieć, złączeń) z filtrowaniem i sortowaniem, wszystko staje się wolniejsze, co jest logiczne. Dać przykład. Powiedzmy, że mamy tabelę artykułów z 1 mln wierszy i tabelę dostawców z 500 wierszami. Niektórzy dostawcy mają 50 tys. artykułów. Teraz powiedzmy, że chcę uzyskać wszystkie artykuły od tego dostawcy, ale posortowane według nazwy artykułu. To zapytanie jest powolne. Co nie jest dziwne, ponieważ w zasadzie tworzy jakąś tymczasową tabelę/wynik, który musi posortować, ale nie może tego zrobić szybko, ponieważ nie ma indeksu w tymczasowej tabeli/wyniku. Nasze obecne rozwiązanie używa Neo4j, ale próbowałem go również na orientdb i w obu przypadkach zapytania są powolne, z powodu tego samego zachowania. Teraz rozwiązaliśmy ten problem na razie, tworząc indeksy w czasie wykonywania na podstawie schematu podanego przez użytkownika, denormalizując artykuły i dostawców w jednym indeksie. Problem polega na tym, że aktualizowanie tego indeksu jest bardzo kłopotliwe. Powiedzmy, że chcemy filtrować w tabeli artykułów według nazwy dostawcy. Teraz nazwa dostawcy znajduje się w indeksie, ale w powyższym przykładzie została zreplikowana 50 000 razy. Jeśli więc użytkownik zmieni nazwę dostawcy, należy zaktualizować rekordy indeksu 50K. Dając nam wszelkiego rodzaju bóle głowy związane z wydajnością i problemy z czasem, takie jak to, co się stanie, jeśli użytkownik w ciągu kilku sekund dwukrotnie zmieni nazwę dostawcy, musimy kolejkować operacje. Itd. itd. Więc moje aktualne pytanie, czy istnieje czysty, niewygodny sposób na automatyczną denormalizację lub indeksowanie po wyjęciu z pudełka, w przypadku systemu, w którym schemat bazy danych może się zmieniać w czasie wykonywania?


title: Jak określić stan bazy kodu zakresu podczas rozmowy kwalifikacyjnej dla nowej firmy?

text: Niedawno zacząłem pracować dla niesamowitej firmy, nad produktem, który po wejściu pod maskę jest parującym stosem. Oprócz poproszenia o recenzję kodu (co i tak wątpię, czy bym ją otrzymał), jakie są sposoby szacowania jakości kodu podczas rozmowy kwalifikacyjnej?


title: Jak wdrożyć zmianę i nowe narzędzia w małym zespole deweloperskim?

text: Otrzymałem zadanie stworzenia planu wprowadzenia niewielkiej zmiany w pracy naszych programistów (w tej firmie pracuje nas ośmiu). Zmiana dotyczy niewielkiej części naszej pracy, ale wprowadza nowe narzędzie, z którym programiści nie są zaznajomieni, oraz nowy „krok”. _Bardzo_ schematycznie zmiana wygląda tak Przed zmianą: 1. Napisz coś 2. Zrób coś X Po zmianie: 1. Napisz coś 2. Użyj narzędzia A 3. Użyj narzędzia B do zrobienia rzeczy X Do tej pory zrobiłem to, Napisałem dokumentację dotyczącą użycia narzędzia A i narzędzia B. Moje pytanie brzmi, o czym należy pamiętać, wprowadzając nowe narzędzia/zmiany w rozwoju małego zespołu programistycznego? W jaki sposób zapewniasz płynną transmisję do nowego sposobu działania? Jaki rodzaj zasobów edukacyjnych powinien być dostępny? (Wprowadzone narzędzia służą do kontroli wersji schematu bazy danych [więc tylko wtedy, gdy wprowadzamy zmiany w schemacie bazy danych, wpływa to na nasz rozwój], ale uznałem, że nie ma to związku z tematem)


title: Czy są jakieś związki dla programistów?

text: Dlaczego inżynieria oprogramowania nie ma przedstawicielstwa związkowego, tak jak inne zawody zawodowe, takie jak nauczanie? Czy istnieją związki zawodowe dla programistów, które odnoszą sukcesy?


title: Jaki jest właściwy wybór warstwy dostępu do danych dla dużych aplikacji?

text: Używam wzorca Singleton dla mojej aplikacji, jako warstwę dostępu do danych użyłem frameworka ADO.NET Entity, po zalogowaniu się do mojej aplikacji ładowanie dashboardu trwa od 3 do 5 minut. Czy istnieje sposób na skrócenie czasu? Albo muszę poszukać innych metod zamiast frameworka Entity?