title: Czy można bezpiecznie polegać na analizie statycznej w celu niezawodnego „odtworzenia” błędów współbieżności?

text: Odziedziczyłem kod Java, który, jak podejrzewam, zawiera pewne błędy współbieżności podczas synchronizacji między wątkiem, który pyta o dane, a zdarzeniem IO, które aktualizuje te same dane. Testuję statyczne narzędzie do analizy o nazwie ThreadSafe, które rzeczywiście wykrywa różne problemy ze współbieżnością (tj. pole dostępne z asynchronicznie wywoływanej metody bez synchronizacji i niespójna synchronizacja dostępu do kolekcji). Po odkryciu, jak trudno jest niezawodnie odtwarzać wyścigi danych, pisząc testy jednostkowe, zastanawiałem się, czy nie jest wskazane poleganie na ThreadSafe, aby niezawodnie „odtwarzać” błędy? Pytam, czy można bezpiecznie polegać na narzędziu do analizy statycznej, która informuje mnie, kiedy naprawiłem błędy? (Oczywiście, aby naprawić błędy, będę musiał zrozumieć każdy z nich w kontekście).


title: Generowanie labiryntu na podstawie drzewa przecięcia

text: **Informacje dodatkowe:** Buduję generator labiryntu 2D. Wypróbowałem algorytm Prima, algorytm Wilsona i algorytm rekursywnego śledzenia wstecznego do generowania mojego labiryntu, jednak nie byłem zadowolony z trudności żadnego z nich. Postanowiłem stworzyć własną. Uznałem, że dwie rzeczy utrudniają labirynt. Po pierwsze, labirynty mogą mieć wiele skrzyżowań i wyborów do wykonania. Po drugie, mogą być dezorientujące i sprawić, że zgubisz swoją drogę. Postanowiłem stworzyć drzewo reprezentujące skrzyżowania i ślepe zaułki w labiryncie i połączyć każdy węzeł w drzewie losowo generowaną ścieżką, aby zdezorientować użytkowników. **Problem:** Jeśli zacznę generować komórki w labiryncie dla drzewa, może się okazać, że węzeł nie ma miejsca, z którym musi się połączyć lub utworzyć swoje dzieci. Jak naprawić lub uniknąć tego problemu? **Moje przemyślenia:** Wygląda na to, że można to zrobić, dzieląc labirynt na sekcje i dzieląc je, ale to nadal nie gwarantuje wystarczającej ilości miejsca na końcu podziału. Mógłbym również spróbować zacząć od małych rzeczy i iść w górę, dzieląc mniejsze obszary, a następnie tworząc połączenia między nimi, ale to nadal może powodować problemy ze ścieżką, ponieważ nie mam wystarczająco dużo miejsca, aby połączyć ze sobą sekcje, a nawet tworzyć naprawdę długie ścieżki między sekcjami . Używam siatki sześciokątnej, ale każde rozwiązanie, które wymyślicie dla siatki prostokątnej, powinno być łatwe do przeniesienia na sześciokątną. Nie byłem pewien, czy powinno to zostać opublikowane w dziale informatyki teoretycznej, czy tutaj, i zdecydowałem się na bardziej ogólną.


title: Czy istnieje sposób na sprawdzenie, jak witryna będzie działać pod obciążeniem?

text: Stworzyłem witrynę Asp.net MVC i hostowałem ją na współdzielonym dostawcy hostingu. Ponieważ moja strona internetowa zawiera bardzo ogólny pomysł, w przyszłości może mieć wielu jednoczesnych użytkowników. Zastanawiałem się więc nad sposobem przetestowania mojej witryny pod kątem wydajności przy obciążeniu. Na przykład, jak witryna będzie działać, gdy 100 lub 1000 użytkowników będzie jednocześnie online i surfuje po witrynie. Dzięki temu zrozumiem, czy moje zapytania LINQ są dobrze napisane, czy nie.


title: Czy skrypt wdrażania powinien być artefaktem kompilacji?

text: To jest projekt sieciowy napisany w Javie. Więc piszę kompilację i skrypty wdrażania. Do stworzenia buildu użyłem mrówki. Ciągła budowa jest wykonywana za pomocą Jenkinsa. Kompilacja generuje 3 różne artefakty: 1. Plik wojny 2. Plik zip z układami 3. Plik zip z obrazami Jak na razie dobrze, ale teraz muszę napisać skrypt wdrażania, który powinien: * Wdrożyć wojnę (artefakt 1 ) do kocura działającego na _serwerze 1_ * Umieść artefakt **2** na _serwerze 1_ w określonym katalogu * Umieść artefakt **3** na _serwerze 2_ w określonym katalogu. Rozmawiałem więc z kolegą i powiedział że powinniśmy również wygenerować artefakt (być może _deploy.xml_ ), który wdraża te artefakty po umieszczeniu na właściwym serwerze. Byłby więc inny skrypt, który: * Pobierał artefakty Jenkinsa * scp na każdy serwer i umieszczał tam plik deploy.xml * zdalnie wywołał plik deploy.xml artefakt kompilacji. Motywacją do tego byłaby możliwość wykonania wdrożenia bez konieczności posiadania dostępu do repozytoriów VCS, więc kompilacja byłaby samowystarczalna, tj. każda kompilacja mogłaby wejść do produkcji tylko z tym, co zostało wygenerowane przez Jenkinsa. Gdzie należy umieścić skrypty wdrażania? Czy powinny być **tylko** w VCS, czy też powinny być artefaktami budowania?


title: Odpowiednie narzędzia do pracy? Jedna lokalizacja czy wiele?

text: Obecnie używam Codebase do zarządzania wszystkimi projektami (gdzie uczę się Agile). Używam go do śledzenia błędów, historyjek użytkowników (poprzez zgłoszenia), wiki, plików i hostingu git. Jednak zamierzam to poprawić i znaleźć narzędzia lepiej dopasowane do takich rzeczy, jak śledzenie błędów, zarządzanie historiami, hosting git, współpraca, opinie klientów itp. Jestem częścią małego zespołu 3 lub 4 programistów. Czy ktokolwiek ma jakieś propozycje? Moje początkowe przemyślenia oparte na badaniach były następujące: * Zarządzanie projektami: JIRA * Śledzenie błędów: JIRA * Historie użytkowników i Agile: Pivotal Tracker * Hosting Git: JIRA * Pamięć masowa: Dropbox. to jest warte. Doceń wszelkie porady dotyczące powyższych lub narzędzi, których użyłeś i które okazały się świetne dla małych i średnich zespołów i pasują do Agile. Moje SZCZEGÓŁOWE wymagania to: śledzenie błędów, zarządzanie historiami, hosting git, zdalna współpraca zespołowa, opinie klientów, śledzenie czasu, przechowywanie, zarządzanie kompilacją, dane o postępach w cyklu życia projektu... Znalazłem również Assembla, który wydaje się doskonały. Jeden z członków mojego zespołu wierzy w „odpowiednie narzędzie do pracy” i że nie ma jednego narzędzia do zarządzania tym wszystkim. Miałem nadzieję na centralną lokalizację.


title: Przenieść się z Curl na Aria2?

text: Mamy silnik indeksujący, który wykorzystuje curl i obsługuje około 400 000 ppl/miesiąc. Chociaż curl obsługuje jednoczesne pobieranie, nie obsługuje ograniczania przepustowości (tylko w php 5.4.0), dlatego mój szef chce, abym przeszedł na aria2. Mówi również, że Aria2 jest szybsza (co wydaje się być prawdą również dla mnie) Aria2 wymagałaby dużej ilości zmian w systemie. W tej chwili mamy system indeksowania, który nie indeksuje w sposób zgodny. Czy przejście na aria2 byłoby dobrą decyzją?


title: Dlaczego popularne witryny internetowe przechowują w plikach cookie bardzo skomplikowane dane dotyczące sesji — i co to wszystko oznacza?

text: Jako twórcy stron internetowych wszyscy dowiadujemy się, że sesje pomagają przezwyciężyć problemy związane z bezstanową naturą protokołu HTTP. Tworzymy unikalny identyfikator sesji i wysyłamy go do przeglądarki — a gdy przeglądarka odsyła do nas ten sam identyfikator, łatwo identyfikujemy użytkownika. Wszystko to brzmi całkiem prosto i NIE jest tak skomplikowane do zaimplementowania w dowolnym języku. ## TERAZ Spójrz na poniższe zrzuty ekranu, które zrobiłem. Pokazują one rodzaje plików cookie, które są przechowywane w popularnych witrynach internetowych. Wygląda na to, że przechowują wiele identyfikatorów sesji lub próbują ukryć rzeczywisty identyfikator, ustawiając tak wiele plików cookie, lub są to bardzo wyspecjalizowane środki bezpieczeństwa, które podejmują, aby zapobiec przejmowaniu sesji i innym powiązanym problemom. Lub cokolwiek. ## Gmail (przed zalogowaniem) ![tu podaj opis obrazka](http://i.stack.imgur.com/RKLmL.jpg) ## Gmail (po zalogowaniu) ![tu podaj opis obrazka](http:// i.stack.imgur.com/9pWMf.jpg) ## Facebook ![tu podaj opis obrazka](http://i.stack.imgur.com/f760r.jpg) ## StackExchange ![tu podaj opis obrazka]( http://i.stack.imgur.com/CIXd4.jpg) (Nie martw się, nie możesz ukraść mojej sesji - jest przestarzała i niekompletna :)) Więc moje pytanie brzmi - po co ta komplikacja obsługiwać? Proszę wyjaśnić, co oznaczają te różne pliki cookie (ogólnie) i do jakich celów są one ustawione. Na koniec podpowiedz, jak mogę to zrobić (i czy powinienem) we własnych aplikacjach. Jeszcze jedno pytanie: w wielu przypadkach wartości w plikach cookie wyglądają tak, jakby były zakodowane w adresie URL – dlaczego tak jest?


title: Stos wywołań zaczyna się od dołu czy od góry?

text: Stos to coś, co układa się od dołu do góry. W związku z tym stos wywołań dodaje nowe elementy na stosie, gdy funkcje są wywoływane z elementami usuwanymi ze stosu, gdy każda funkcja kończy się, dopóki stos nie jest pusty, a następnie program się kończy. Jeśli powyższe jest poprawne, dlaczego ludzie odnoszą się do sterowania przesuwaniem się „w górę” stosu wywołań? Z pewnością kontrola przesuwa _w dół_ stos wywołań, aż osiągnie dno.


title: Sprzedaż LINQ To Management

text: Niedawno rozpocząłem pracę w nowej firmie, która obecnie nie używa linq, ale używa C# i frameworka .net. Pochodzę ze środowiska LINQ, więc jestem stronniczy, ale nadal uważam, że korzystanie z linq ma wiele zalet. Biorąc to pod uwagę, nadal będzie trudno wpływać na zmiany, ponieważ wciąż jestem bardzo nowy. Jakie masz sugestie, aby sprzedać to kierownictwu? Systemy baz danych są wciąż stosunkowo nowe, więc myślę, że teraz, gdy sprawy wciąż się rozwijają, byłby najlepszy czas, aby spróbować przekonać ludzi do korzystania z tego. Jest to kwestia zarówno techniczna, jak i polityczna. Każda pomoc byłaby mile widziana.


title: Izolowane środowisko dla stosów oprogramowania

text: Byłem pewien, że znajdę to pytanie, ale nie mogłem. Jak stworzyć izolowane środowisko programistyczne? Innymi słowy, piaskownica, w której mogę instalować różne kombinacje serwerów internetowych, baz danych, innych pakietów oprogramowania i bawić się nimi, bez zaśmiecania moich pakietów systemowych i bez ręcznego pobierania pakietów z oficjalnych stron internetowych. Coś dla stosów oprogramowania, jak virtualenv + pip, jest dla Pythona. Wcześniej próbowałem zainstalować systemy operacyjne wewnątrz QEMU/KVM, ale jest to przesada i trochę skomplikowane (na przykład nie mogłem skonfigurować mostkowania). Czy możliwe jest tworzenie izolowanych środowisk wirtualnych bez uruchamiania maszyn wirtualnych z pełnymi systemami operacyjnymi? Używam Debiana GNU/Linuksa. **Edytuj (01.08.12):** Podobne pytanie na Unix.SE z bardziej rozbudowanymi odpowiedziami – http://unix.stackexchange.com/q/31136/11397


title: Inspirujące oprogramowanie dla użytkowników końcowych napisane w Haskell?

text: Myślę, że świetna technologia jest niewidoczna. Oprócz zwykłych podejrzanych (GHC, Xmonad, oprogramowanie do handlu własnościowego), jakie są wspaniałe przykłady oprogramowania użytkownika końcowego napisanego w Haskell? Myślę, że dobrymi przykładami są FreeArc, Hledger i „Nikki And The Robots”. Czy masz więcej przykładów (pełne aplikacje GUI, małe narzędzia CLI itp.)? **Edytuj:** Na przykład jestem zafascynowany Wings3D, ponieważ chociaż jest napisany w języku Erlang, użytkownicy nie mogą tego powiedzieć. To po prostu działa. Wśród słabych punktów Haskella są międzyplatformowe GUI. Generalnie nie ma wielu aplikacji GUI napisanych w Haskell, a większość z nich nie jest łatwa w użyciu, instalacji, a nawet kompilacji. Z jakich dobrych przykładów można się nauczyć, jak sprawić, by trudne rzeczy wyglądały na łatwe?


title: Jak interpretować dane ankietowe dotyczące wynagrodzeń programistów, zwłaszcza dotyczące różnych stanowisk?

text: Próbowałem zrozumieć, jak moje wynagrodzenie wypada na tle konkurencji. Rozumiem, że może to być pytanie zlokalizowane, więc dołożę wszelkich starań, aby uniknąć lokalnych problemów. Istnieje wiele stron internetowych, które zawierają dane z ankiet płacowych na temat różnych zawodów. W szczególności przyglądałem się danym na portalu careerbuilder.com. Chciałbym wykorzystać te dane, aby zrozumieć, o jaką pensję rozsądnie bym prosić w negocjacjach, ale wydaje się to niemożliwe do zinterpretowania. Zacznę od tytułów stanowisk. Mam wykształcenie matematyczne i programistyczne. Obecnie zajmuję się tworzeniem stron internetowych opartych na bazach danych przy użyciu głównie SQL, .net i Javascript. Zajmuję się znacznie więcej programowaniem niż projektowaniem stron internetowych. Na moim obecnym stanowisku powiedziano mi, że będę „Web Developerem”. Powiedziano mi, że będę młodszy od „Programistów aplikacji”, ale starszy od „Młodszych programistów”. To mi odpowiadało. Po kilku miesiącach otrzymałem (bez wcześniejszego powiadomienia) nową tabliczkę znamionową dla mojej kostki, która nosiła tytuł "Programista aplikacji". Programiści, którzy wcześniej byli nazywani „Programistami Aplikacji”, teraz nazywani są „Sr. Systems Analysts”. O ile wiem, te nowe tabliczki znamionowe nie towarzyszyły żadnej faktycznej zmianie organizacyjnej ani różnicom płacowym. Kiedy jednak przechodzę do ankiet płacowych na careerbuilder.com i wpisuję „programista komputerowy”, „programista aplikacji”, „programista webowy” i inne pozornie podobne tytuły, otrzymuję szalenie rozbieżne wyniki. Jeszcze bardziej rozbieżne są wyniki na stronie Glassdoor.com, która raportuje wyniki ankiet z poszczególnych firm. Rozważmy ten przykład: ( http://www.glassdoor.com/Salaries/net-salary-SRCH_KO0,3.htm ), który ma ponad 100% pensje między różnymi firmami o tym samym tytule!


title: Odnośnie interfejsów klas w OOP

text: Kiedy ktoś mówi „interfejs klasy”: czy odwołuje się on/ona do wszystkich metod get i set - czy też odwołuje się tylko do sygnatur metod i typów zwracanych, bez wewnętrznej implementacji tych metod? (Aka, implementacja metody 'get' nie jest uważana za część interfejsu, ale raczej za część wewnętrznej implementacji klasy. Interfejs jest typem zwracanym dla tej metody i podpisem tej metody).


title: Poprowadź programistów, aby nie zapomnieli o swoich obowiązkach

text: > **Możliwe duplikaty:** > Jaki jest najlepszy sposób na zachęcenie zespołu programistów? > Jak motywujesz rówieśników, aby stali się lepszymi programistami? Poza zadaniami programisty, są drobne rzeczy, które każdy programista powinien zrobić. W naszej firmie lider projektu spędza trochę czasu z każdym deweloperem, aby poprowadzić go, jak zrobić kilka rzeczy, zwłaszcza tych niedoświadczonych. Oczywiście każdy programista ma swoje zadania, ale ma też notatki, które zauważył albo on, albo kierownik projektu. Zadania te mogą wyglądać następująco: 1. Powinieneś zmienić przebieg tej metody, 2. Nie podoba mi się sposób, w jaki rozwiązujesz ten problem, 3. Rozważ szybsze rozwiązanie 4. itd. Te notatki oczywiście można zauważyć! Ale lenistwo jest problemem, nawet jeśli programista ma wymagane umiejętności. Moje pytanie brzmi: jak „zmuszamy” ich, by stali się bardziej hipochondryczni niż leniwi?


title: Czy używasz zapachu kodu MultiMaps? Jeśli tak, jakie alternatywne struktury danych pasują do moich potrzeb?

text: Próbuję modelować postacie nWoD do gry fabularnej w programie do tworzenia postaci. Najważniejsze jest to, że chcę również wspierać zapisywanie i ładowanie z dokumentów yaml. Jednym z aspektów postaci jest ich zestaw umiejętności. Umiejętności dzielą się na dokładnie trzy „typy”: umysłowe, fizyczne i społeczne. Każdy typ ma listę umiejętności pod if. Mój Yaml wygląda tak: FIZYCZNE: Lekkoatletyka: 0 Bójka: 3 UMYSŁOWE: Akademicy: 2 Komputery Moją pierwszą myślą było użycie pewnego rodzaju Multimap i posiadanie typu umiejętności jako Enum i klucza do mojej mapy. Każda umiejętność jest elementem w kolekcji, która wspiera multimapę. Jednak walczyłem o to, aby yaml działał. Wyjaśniając to koledze poza pracą, powiedzieli, że jest to prawdopodobnie oznaka zapachu kodu, a on nigdy nie widział, żeby używano go „dobrze”. Czy multiMaps naprawdę pachnie kodem? Jeśli tak, jakie alternatywne struktury danych pasowałyby do moich celów?


title: W wolnym czasie znajdujesz czas na programowanie?

text: Mam około tuzina projektów programistycznych skaczących po mojej głowie i chciałbym przyczynić się do niektórych projektów open source, problem, który mam, polega na tym, że spędziłem cały dzień wpatrując się w Visual Studio i lub Eclipse (czasami zarówno w w tym samym czasie...) ostatnią rzeczą, na którą mam ochotę, kiedy wracam do domu, jest program. Jak budujesz motywację/czas do pracy nad własnymi projektami po pracy? Nie mówię, że nie lubię programować, po prostu lubię inne rzeczy i może być trudno nawet zrobić coś, co lubisz, jeśli spędziłeś już na tym cały dzień. Myślę, że gdybym pracował w fabryce czekolady, ostatnią rzeczą, jaką chciałbym zobaczyć po powrocie do domu, był batonik Wonka.


title: Po co profilować aplikacje za pomocą AOP?

text: Dostrajając wydajność w aplikacji internetowej, szukam dobrych i lekkich narzędzi do profilowania wydajności, aby zmierzyć czas wykonania dla każdej metody. Wiem, że najłatwiejszą metodą profilowania jest rejestrowanie czasu rozpoczęcia i zakończenia dla każdej metody, ale widzę coraz więcej osób używających AOP do profilowania (dodaj @profiled przed każdą metodą). Jaka jest korzyść z profilowania AOP w porównaniu ze zwykłym sposobem „logowania”? Z góry dziękuję Vance


title: Czy podczas wywoływania metody powinniśmy używać base.methodname i this.methodname?

text: W C#, z zestawem dziedziczonych klas -- podczas wywoływania metody powinniśmy używać słów kluczowych 'base.methodname i this.methodname'... niezależnie od tego, czy jest to metoda przesłonięta, czy nie? Kod prawdopodobnie ulegnie zmianom pod względem logicznym i być może niektóre warunki podobne do JEŻELI-INNEGO mogą pojawić się w późniejszym terminie. Dlatego w tym czasie programista musi być zmuszony do ponownego przejrzenia każdego wiersza kodu i upewnienia się, że dokonuje właściwego wyboru, która metoda jest nazywana --- base.methodname() lub this.methodname() W PRZYPADKU . NET Framework wywoła DEFAULT (myślę, że jego base.methodname()) i cała logika może zostać podrzucona.


title: Czy powinienem kupić Clean Code po przeczytaniu The Clean Coder?

text: Obecnie czytam _The Clean Coder_ Roberta C. Martina. To świetna książka i wiele się z niej uczę. Moim celem jest zostać "profesjonalnym" programistą, więc staram się nauczyć jak najwięcej, kiedy Nie ma mnie w biurze.Zastanawiałem się, czy powinienem kupić _Czysty kod_ od tego samego autora. Czy jest to naturalna "kontynuacja" _Czystego kodera_? Czy obejmuje ten sam grunt, aby jego zakup nie był opłacalny?


title: Wybór technologii dla dynamicznego produktu

text: Budujemy produkt dla Domeny Zakupowej w JAVA. Poniżej znajdują się główne wymagania techniczne. 1. Niezależny od platformy 2. Niezależny od bazy danych 3. Niezależny od przeglądarki W wymaganiach funkcjonalnych produkt ma bardzo dynamiczny charakter. Głównym powodem jest to, że proces zamówień na całym świecie różni się w zależności od klienta. Krótko mówiąc, potrzebujemy dynamicznego silnika przepływu pracy i dynamicznego silnika szablonów. Silnik przepływu pracy, za pomocą którego możemy zdefiniować dowolny rodzaj przepływów pracy oraz silnik szablonów, pozwala na definiowanie dowolnego rodzaju struktur danych i na podstawie definicji może pobierać dane wejściowe użytkownika z przepływu pracy. Rozwijamy ten produkt od prawie 2 lat. Minęło dużo czasu, zanim zdążyliśmy zejść z dynamiką wymagań. Do tej pory opracowaliśmy podstawowy silnik workflow i szablonów, który jest używany u jednego z klientów. Korzystamy z następujących technologii. 1. GWT-Ext (Front End Framework) 2. Hibernacja (Warstwa bazy danych) W międzyczasie napotkaliśmy pewne problemy z GWT-Ext (głównie kompatybilność z przeglądarkami) i optymalizacją bazy danych ze względu na podklasy w hibernacji. Za rozwiązanie problemu GWT-Ext, który umierającej społeczności zdecydowaliśmy się na przejście do SmartGWT. W SmartGWT napotkaliśmy problemy związane z ładowaniem i teraz jesteśmy w stanie sfinalizować, że GWT 2.3 będzie drogą do zrobienia, ponieważ biblioteka jest bogata, a wydajność jest na najwyższym poziomie. Jesteśmy w stanie prawie sfinalizować przednią i środkową warstwę opartą na GWT-Spring. W trybie hibernacji znaleźliśmy główne problemy z podklasowaniem, ponieważ rzucał zapytania astronomiczne i czasami przestawał wysyłać zapytania na 5-10 sekund lub mógł trwać około 30 sekund, a następnie wznawiać. Kilka dni temu trafiłem do jednego artykułu związanego z ORM-em. Jestem tradycyjnym programistą .Net SQL i zawsze pracowałem z relacyjnymi bazami danych. Czytając ten artykuł, odkryłem, że odnosi się on również do problemów, z którymi się borykam. Nadal nie jestem do końca przekonany do używania hibernacji, a ten artykuł tylko potwierdził moją opinię. Poniżej znajdują się pytania, na które szukam odpowiedzi. 1. Czy powinniśmy przejść na Hibernate w przypadku wymagań dynamicznych baz danych, a obciążenie danymi będzie w przyszłości duże? Jak możemy podzielić dane, jak sprawnie połączyć dane, jak zoptymalizować zapytania? Jeśli odpowiedź brzmi „nie”, to jak osiągnąć niezależność od bazy danych? 2. Czy nasz wybór dotyczy GWT i Springa, czy też musimy to zmienić? 3. Czy powinniśmy używać jakiejkolwiek innej bazy danych par klucz-wartość, jeśli dane mają charakter dynamiczny i bardzo trudno jest je relacjonowac?


title: Dokumentowanie logiki matematycznej w kodzie

text: Czasami, choć nie często, muszę włączyć logikę matematyczną do mojego kodu. Użyte koncepcje są w większości bardzo proste, ale wynikowy kod nie jest - wiele zmiennych o niejasnym celu i niektóre operacje o nie tak oczywistej intencji. Nie mam na myśli tego, że kod jest nieczytelny lub nie do utrzymania, po prostu jest _waaaay_ trudniejszy do zrozumienia niż rzeczywisty problem matematyczny. Staram się komentować te fragmenty, które są najtrudniejsze do zrozumienia, ale jest ten sam problem, co w ich kodowaniu - _tekst nie ma wyrazistej mocy matematyki_. Szukam wydajniejszego i łatwiejszego do zrozumienia sposobu wyjaśnienia logiki kryjącej się za niektórymi złożonymi kodami, najlepiej w samym kodzie. Rozważałem TeX - pisanie dokumentacji i generowanie jej oddzielnie od kodu. Ale wtedy musiałbym nauczyć się TeX-a, a dokumentacji nie będzie w samym kodzie. Inną rzeczą, o której pomyślałem, jest zrobienie zdjęcia notacji matematycznych, równań i diagramów zapisanych na papierze/tablicy i umieszczenie ich w javadoc. Czy istnieje prostszy i jaśniejszy sposób? * * * PS Nadanie zmiennym opisowych nazw (`timeOfFirstEvent` zamiast `t1`) sprawia, że kod jest bardziej szczegółowy i jeszcze trudniejszy do odczytania.


title: Inspirujące historie studentów informatyki?

text: Po obejrzeniu filmu „The Social Network”, filmu o Marku Zuckerbergu i Facebooku, miałem skok wydajności, ponieważ zainspirował mnie do nauki wielu różnych języków i oprogramowania. Ten skok nieco się pogarsza i nie mam ochoty oglądać filmu od nowa, więc zastanawiałem się, czy ktoś miał inne podobne historie sukcesu/linki/artykuły/cokolwiek. Głównie o sukcesach, które zaczęły się dla osób na studiach.


title: Książka Vernona Implementing DDD i modelowanie podstawowych koncepcji

text: Wszystkie poniższe pytania odnoszą się do przykładów przedstawionych w Implementing DDD W artykule widzimy na Rysunku 6, że zarówno **BankingAccount** jak i **PayeeAccount** reprezentują tę samą _podstawową koncepcję_ _konta bankowego_ **BA** **1.** Na _stronie 64_ autor podaje przykład _organizacji wydawniczej_ , gdzie cykl życia książki przechodzi przez kilka etapów ( _proponowanie książki_ , _proces redakcyjny_ , _tłumaczenie książki_ ... ) i na każdym z tych etapów książka posiada inna definicja. Każdy _etap księgi_ jest zdefiniowany w innym _kontekście ograniczonym_ , ale czy wszystkie te różne definicje nadal reprezentują tę samą _podstawową koncepcję_ **książki** , tak jak **konto bankowe** i **konto płatnicze** reprezentują to samo _koncepcja leżąca u podstaw_ **BA**? **2.** a) Rozumiem, dlaczego `User` nie powinien istnieć w **Kontekście współpracy** ( CC ), ale zamiast tego powinien być zdefiniowany w **Identity and Access Context** IAC ( _strona 65_ ). Ale czy „Użytkownik” (IAC), „Moderator” (CC), „Autor” (CC), „Właściciel” (CC) i „Uczestnik” (CC) reprezentują _różne aspekty_ tej samej _podstawowej koncepcji_? b) Jeśli tak, oznacza to, że CC zawiera kilka _elementów modelu_ ( `Moderator`, `Autor`, `Właściciel` i `Uczestnik` ), z których każdy reprezentuje _inny aspekt_ tej samej _koncepcji bazowej_ (tak jak w przypadku **KontoBankowe** i **PayeeAccount** reprezentują tę samą _podstawową koncepcję_ co **BA** ). Ale czy nie jest to uważane za **duplikację pojęć** (książka Evana, strona 339), skoro kilka _elementów modelu_ w CC reprezentuje tę samą _podstawową koncepcję_? c) Jeśli `Moderator`, `Autor` ... nie reprezentują tego samego _podstawowego pojęcia_ , to jakie _podstawowe pojęcie_ reprezentuje każdy z nich? **3.** W **systemie e-commerce** termin **Klient** ma wiele znaczeń (strona 49): Gdy użytkownik przegląda **Katalog** , **Klient** ma inne znaczenie co oznacza, że użytkownik składa **Zamówienie**. Ale czy te dwie różne definicje **Klienta** reprezentują tę samą _podstawową koncepcję_ , tak jak **BankingAccount** i **PayeeAccount** reprezentują to samo _bazowe pojęcie_ **BA**? **AKTUALIZACJA:** 2. > 2a) Podobnie jak w książce, odnoszą się do tej samej tożsamości, ale wyrażają różne > aspekty tej tożsamości w określonym kontekście. Coś w rodzaju pojedynczego obiektu > implementowanie wielu interfejsów, które ucieleśniają role, które odgrywa obiekt. a) Czy posiadanie dwóch _elementów modelu_ (oba w tym samym **BC**) , z których każdy reprezentuje _różny aspekt tego samego podstawowego pojęcia_ , skutkuje tym, co _Evans_ nazywa **duplikatami koncepcji**? b) Myślałem, że terminy " _reprezentujące różne aspekty tożsamości w ramach konkretnego BC_" i " _reprezentujące różne aspekty tego samego podstawowego pojęcia w ramach konkretnego BC_" są zamienne (tj. oznaczają to samo)? Jeśli nie, to czym się różnią? c) > Coś w rodzaju pojedynczego obiektu implementującego wiele interfejsów, które ucieleśniają > role, które obiekt odgrywa. Założyłem, że każda _rola_ reprezentuje _konkretny aspekt podstawowej koncepcji_ , ale mówisz, że tak nie jest? Czym zatem jest model _role_ i czym różni się koncepcyjnie model roli od _aspektu podstawowej koncepcji_? **2\. AKTUALIZACJA:** **2.** a) > > Czy posiadanie dwóch elementów modelu (oba w ramach tego samego BC), z których każdy reprezentuje > inny aspekt tego samego podstawowego pojęcia, skutkuje tym, co Evans nazywa > duplikatami koncepcji? > > Nie pamiętam, co Evans nazywał duplikatami, więc nie jestem pewien. Na stronie 339 Evans opisuje **Powielone koncepcje** jako jeden z dwóch odłamów pojęciowych, które powodują załamanie się unifikacji modelu. Oto cytat: > Łączenie elementów różnych modeli powoduje dwie kategorie problemów: > powielanie koncepcji i fałszywe pokrewne. Powielanie koncepcji oznacza, że > istnieją dwa elementy modelu (i towarzyszące im implementacje), które faktycznie > reprezentują to samo pojęcie. Za każdym razem, gdy te informacje się zmieniają, muszą być > aktualizowane w dwóch miejscach z konwersjami. Za każdym razem, gdy nowa wiedza prowadzi do zmiany > jednego z obiektów, inny musi zostać ponownie przeanalizowany i zmieniony. > Z wyjątkiem tego, że ponowna analiza nie ma miejsca w rzeczywistości, więc wynikiem są dwie > wersje tego samego pojęcia, które podlegają innym regułom, a nawet mają > różne dane. b) i c) > Może to być kwestia językowa. Z mojego punktu widzenia tożsamość może mieć > różne koncepcje związane z nią w zależności od kontekstu. > > Ponownie wydaje się, że jest to kwestia językowa. Używasz "podstawowego pojęcia", aby > odnieść się do tożsamości, która moim zdaniem nie jest wystarczająco jasna, aby ją odróżnić od > po prostu "pojęcia", które samo w sobie nie jest wystarczające. Być może poniższe uczyni moje pytania jaśniejszymi: Przez _pod pojęciem_ mam na myśli _aspekt rzeczywistości_ (tj. rzecz), którą staramy się modelować. Dziękuję


title: Komunikaty internacjonalizacji na podstawie widoków lub encji modelowych

text: Mam małą aplikację webową w javie i dodaję obsługę internacjonalizacji, zastępując teksty etykietami zdefiniowanymi w plikach słownikowych. Podczas gdy niektóre teksty są oczywiście unikalne dla każdego widoku (np. tytuł html), inne odnoszą się do pojęć z modelu (np. bilet, lokalizacja lub status takiego biletu itp.) Jak zwykle, niektóre terminy będą pojawiać się wielokrotnie w różnych lokalizacje (bdb, zarówno na stronie wydania, jak i na stronie wyszukiwania oraz w aukcjach mam etykietę "ticketLocation"). Moje pytanie brzmi: czy mogę uporządkować etykiety wokół koncepcji modelu (więc mam etykietę `ticket.location` i używam jej wszędzie tam, gdzie takie pole jest oznaczone) czy też powinienem utworzyć inną etykietę dla każdego z nich (więc `form.ticketLocation` oraz „filtr.lokalizacja.biletów” i „lista.lokalizacja.biletów”. Wybrałbym pierwszą opcję; Szukałem wskazówek i jedyne, co widzę, że może mi przeszkadzać, to długość sznurka zakłócająca projekt, a nawet za to wolałbym dodać `ticket.locationShort` dla miejsc, w których nie ma dużo miejsca. Jaka jest twoja opinia/wskazówki/doświadczenie?


title: jak sprawdzić, czy błędy ortograficzne w kodzie źródłowym są poważnym problemem, czy nie?

text: Znalazłem bardzo niepokojącą ilość błędów ortograficznych, które widzę codziennie w naszej bazie kodu, z której odtworzę bardzo krótki, ale reprezentatywny przykład: ArgumnetCount Timeount Gor wiadomość z kolejki Niestety nie jest to w żaden sposób ograniczone do jednej osoby. W naszym zespole jest wielu nierodowitych anglojęzycznych użytkowników, którzy się do tego przyczyniają, jednak mogę również wskazać niektóre z najgorszych błędów ortograficznych naszemu architektowi oprogramowania, który jest Amerykaninem, urodzonym i wychowanym. Można je również znaleźć nawet w e-mailach, prezentacjach, dokumentach, w jakiejkolwiek pisemnej informacji, którą posiadamy w firmie programistycznej. Chciałbym wiedzieć, jak sprawdzić, czy jest to poważny problem, czy nie? Zawsze z niepokojem spotykałem się z tymi błędami ortograficznymi, ale moja własna, **oficjalna** polityka jest taka, że nie otrzymujemy zapłaty za poprawne pisownię, płaci się nam za to, aby coś zrobić, więc w firmie nigdy tak naprawdę nie krytykowałem ktokolwiek o tym. Ale poruszyłem tę kwestię z kilkoma moimi bliskimi przyjaciółmi i nigdy nie rozwiązałem tego na dobre.


title: Wzorzec projektowy do rejestrowania zmian w obiektach nadrzędnych/podrzędnych zapisany w bazie danych

text: Mam 2 tabele bazy danych w relacji nadrzędny/podrzędny jako jeden-wiele. Mam trzy klasy reprezentujące dane w tych dwóch tabelach: Klasa nadrzędna { Public int ID {get; set;} .. inne właściwości } Klasa potomna { Public int ID {get; set;} Public int ParentID {get; set;} .. inne właściwości } TogetherClass { Public Parent Parent; Lista publiczna<Child> ChildList; } Na koniec mam aplikację kliencką i serwerową – kontroluję obie strony, więc mogę wprowadzać zmiany w obu programach według potrzeb. Klient wysyła żądanie o ParentID i otrzymuje klasę Together dla pasującego rodzica oraz wszystkie rekordy podrzędne. Aplikacja kliencka może wprowadzać zmiany w dzieciach – dodawać nowe dzieci, usuwać lub modyfikować już istniejące. Aplikacja kliencka wysyła następnie klasę Together z powrotem do aplikacji serwera. Aplikacja serwera musi zaktualizować rekordy nadrzędne i podrzędne w bazie danych. Dodatkowo chciałbym móc rejestrować zmiany – robię to, mając 2 oddzielne tabele, jedną dla Rodzica, drugą dla dziecka; każda zawiera te same kolumny co oryginalna data plus data modyfikacji, przez kogo i lista zmian. Nie jestem pewien, jakie jest najlepsze podejście do wykrywania zmian w rekordach – nowe rekordy, rekordy do usunięcia, rekordy bez zmienionych pól, rekordy ze zmienionymi niektórymi polami. Myślę, że muszę przeczytać rekordy rodziców i dzieci i porównać je z tymi w klasie Together. Strategia A: Jeśli rekord podrzędny klasy Together ma identyfikator powiedzmy 0, oznacza to nowy rekord; wstawić. Wszelkie usunięte rekordy podrzędne nie znajdują się już w klasie Together; sprawdź, czy któryś z rekordów podrzędnych porównania nie został znaleziony w klasie Together i usuń, jeśli nie został znaleziony (porównaj przy użyciu identyfikatora). Sprawdź każdy rekord podrzędny pod kątem zmian i jeśli zmienił się dziennik. Strategia B: Zrób nową zaktualizowaną klasę TogetherClass Zaktualizowaną klasę { Public Parent Parent {get; set} Public List<Child> ListNewChild {get;set;} Public List<Child> DeletedChild {get;set;} Public List<Child> ExistingChild {get;set;} // używane do braku zmian i zmodyfikowanych wierszy } proces zgodnie z listą. Powodem, dla którego pytam o pomysły, jest to, że oba te rozwiązania nie wydają mi się optymalne i podejrzewam, że problem został już rozwiązany – jakiś wzorzec projektowy? Mam świadomość jednego potencjalnego problemu w tym ogólnym podejściu – gdy aplikacja kliencka A żąda rekordu; Aplikacja B żąda tego samego rekordu; A następnie zapisuje zmiany; B następnie zapisuje zmiany, które mogą nadpisać zmiany dokonane przez A. Jest to osobny problem z blokowaniem, na który podniosę osobne pytanie, jeśli mam problemy z wdrożeniem. Rzeczywista implementacja to c#, SQL Server i WCF między klientem a serwerem — udostępnianie biblioteki zawierającej implementacje klas. Przepraszamy, jeśli jest to zduplikowany post – próbowałem jednak przeszukiwać różne terminy bez znalezienia dopasowania. * * * Aktualizacja oparta na komentarzach svicka i TimGa: Aby śledzić zmiany, klasa bazowa powinna wyglądać następująco: public class ChangedRowBase { public enum StatusState { Nowy, niezmieniony, zaktualizowany, usunięty }; chroniony StatusState _Status; publiczny StatusState Status { get { return _Status; } } public void SetUnchanged() { _Status = StatusState.Unchanged; } public void SetDeleted() { _Status = StatusState.Deleted; } } Wtedy moja klasa Child miałaby coś takiego: public int SomeDumbProperty { get; set { base.Status = StatusState.Updated; // Brakuje tu wiersza do ustawienia samej właściwości } } private int _SomeIntelligentProperty; public int SomeIntelligentProperty { get { return _SomeIntelligentProperty; } set { if (wartość != _SomeIntelligentProperty) { _SomeIntelligentProperty = wartość; base.Status = StanStan.Zaktualizowany; } } } Chodzi o to, że inteligentny wykrywa, czy rzeczywiście nastąpiła zmiana; w przeciwnym razie przy użyciu głupiego aplikacja kliencka musiałaby albo wykryć zmianę i zaktualizować tylko wtedy, gdy nastąpiła zmiana, albo użyć settera, który mimo wszystko oznacza zmianę, która w rzeczywistości nie nastąpiła. Wiem też, że moja głupia właściwość nie działa (lub się nie kompiluje) w tej chwili. Jeśli chcę kodu w pobierającym lub ustawiającym, czy to oznacza, że muszę samodzielnie zdefiniować oddzielną zmienną prywatną? Znam krótką rękę {get; set;} robi to za kulisami.


title: Jak nauczyć się podstaw

text: Programuję od 2 lat w Pythonie, Javie i C#. Opracowałem dwa programy, które są używane przez firmę informatyczną, dla której pracowałem, i używam umysłu programisty do rozwiązania prawie każdego problemu, z którym się zmierzę. Ale nadal czuję, że czegoś mi brakuje w moim programie nauczania (głównie samoukiem). Podczas programowania najczęściej popełniam błąd polegający na tym, że nigdy nie zmieniam swoich rozwiązań problemów w kodzie. Bo nie znam najniższych zasad programowania. Często rezygnuję z nowych projektów, które z tego powodu zaczynam. Widzę kody od innych i drżę, gdy potem wracam myślami do swojego kodu. Jakie są podstawy programowania? Jak mogę się tego nauczyć? A które zasady programowania są podstawą do stania się lepszym programistą?


title: Jakiego rozszerzenia pliku używasz dla swoich szablonów/widoku plików w PHP?

text: Buduję framework Model-View-Controller i nadszedł czas, aby zdecydować, w jaki sposób będę tworzyć i używać szablonów widoków i układów. Niektóre frameworki używają specjalnych rozszerzeń dla tych plików. CakePHP używa `.ctp`. Słyszałem/widziałem pliki `.tpl`, chociaż sam nigdy z nich nie korzystałem. Jest rozszerzenie `.inc`, które nie wydaje się właściwe, i oczywiście mógłbym pozostać przy plaonie `.php`. Z tego powodu dlaczego nie „.niesamowita”? Czego używasz do swoich plików szablonów? Czy jest jakaś korzyść z używania specjalnego rozszerzenia pliku dla tych plików? Czy jesteś stronniczy w pewnym przedłużeniu samej nostalgii lub konwencji? Zazwyczaj znajdują się (i będą w moim projekcie) już w swoim własnym katalogu, więc zakładam, że musi istnieć _jakiś_ powód, dla którego są one rozróżniane przez ich rozszerzenie w projektach takich jak CakePHP.


title: Czy istnieje kanoniczny zasób na bouncycastle?

text: Nie ma znaczenia, czy jest to Java czy .NET. Czy istnieje źródło, które jest de facto standardem opisu najlepszych praktyk i innych przydatnych informacji na temat bouncycastle? Co z tym zasobem czyni go wyjątkowym?


title: Gdzie postawić granicę między inspiracją a plagiatami?

text: Załóżmy, że ktoś chciałby użyć w aplikacji iOS tylko jednej funkcji z biblioteki GPLv3, która zawiera ich dużą liczbę. Nie można po prostu połączyć całej biblioteki, ponieważ w przeciwnym razie powstałe oprogramowanie, które musiałoby być na licencji GPLv3, byłoby niekompatybilne z App Store. Czy można „zainspirować się” kodem źródłowym biblioteki, aby napisać funkcję, która wykonałaby to samo zadanie? Rozumiem, że to cienka linia, ale zastanawiam się, czy istnieje praktyczna zasada.


title: Ustalanie łańcucha połączeń

text: Załóżmy, że mam `assemblyA` z metodą, która tworzy instancję `assemblyB` i wywołuje jego `MethodFoo()`. Teraz `assemblyB` tworzy również instancję `assemblyC` i wywołuje `MethodFoo()`. Więc nieważne, czy zacznę od `assemblyB` w przepływie kodu, czy od `assemlyA`, na końcu nazywamy to `MethodFoo` of `AssemblyC()`. Moje pytanie brzmi: kiedy jestem w `MethodFoo()`, skąd mogę wiedzieć, kto do mnie dzwonił? Czy było to wywołanie pierwotnie z „assemblyA” czy z „assemblyB”? Czy jest jakiś wzorzec projektowy lub dobry sposób na rozwiązanie tego problemu?


title: Jakich technologii lub technik starsi programiści powinni *oduczyć*

text: Wiele pytań dotyczących uczenia się nowych rzeczy. Ale co z „oduczaniem się”? Kiedy 10 czy 20 lat temu tworzyliśmy oprogramowanie zupełnie inaczej, liczyliśmy pamięć RAM w bajtach, biblioteki były bardzo rzadkie, IDE było nieznanym słowem, a Merise była królem. **Czego powinniśmy się dzisiaj oduczyć? Jakich złych nawyków powinniśmy się pozbyć?** EDIT: **oduczyć się** nie oznacza **zapomnieć**. Zamiast używać starych technik, które były przydatne w przeszłości, użyj nowych technologii (takich jak GC do zarządzania pamięcią). Ale twoja przeszła wiedza zawsze będzie przydatna dzisiaj.


title: Uruchamianie grupy użytkowników C#/.net

text: Zainspirowany tym pytaniem, przyjrzałem się grupom użytkowników w mojej okolicy w Anglii i wydaje się, że w odległości kilkuset mil w ogóle ich nie ma. Chciałbym zastanowić się nad możliwością założenia takiego w lokalnym mieście, ale nie mam pojęcia, jaki powinien być format. Moje pytania to: Jaki jest cel grupy użytkowników? Czy jest to po prostu nawiązywanie kontaktów, czy są oczekiwania dotyczące prezentacji, nieformalnego uczenia się itp.? Jak i gdzie promuje się grupę użytkowników? Czy jest prowadzony jako wolne przedsiębiorstwo, czy też zazwyczaj jest pobierana opłata za inwestycję z powrotem w spotkania? Dziękuję.


title: Czy konieczne jest stworzenie strony z portfolio dla web developera?

text: Pracowałem na około 15-20 serwisach. Używałem tam różnych umiejętności/języków. Więc jestem zdezorientowany, jak powinienem je napisać w moim CV. A może powinienem stworzyć stronę internetową z portfolio, na której mam zrzuty ekranu z tych witryn, w których pracowałem. W takim razie czy muszę wspomnieć o witrynach, czy po prostu podać link w moim CV?


title: Czy istnieje licencja open source, która zabrania publicznego hostingu, abym mógł uniknąć konkurencji?

text: Zastanawiam się nad open sourcingiem mojego projektu, ale chcę zabronić publicznego hostingu, aby nikt nie wstawiał alternatywnej strony z moim kodem i nie konkurował z moją stroną. Sieci wewnętrzne, takie jak biblioteki itp. byłyby mile widziane, aby z niego korzystać. Czy znasz taką licencję? Myślę, że byłoby to jeszcze bardziej restrykcyjne niż AGPL.


title: Jakie istotne rzeczy zauważyła firma w CV doświadczonego programisty?

text: Hai Friends, powiedz mi lub podziel się ze mną, jestem programistą z rocznym doświadczeniem, teraz chcę zmienić moje stare, świeższe CV na CV z doświadczeniem, więc chcę wiedzieć, jakie są podstawowe rzeczy, które muszą znajdować się w doświadczonym CV, które jest przyciągnięty przez firmę.


title: Zarządzaj trwałością encji na iOS w kilku miejscach: CoreData na urządzeniu, iCloud oraz na REST API

text: Na potrzeby projektu utrwaliłbym dane zawarte w Core Data w kilku miejscach w zależności od stanu użytkownika. * Jeśli użytkownik jest zalogowany do mojego API -> Utrwalaj dane w moim API. * Jeśli jest zalogowany na iCloud -> Utrwalaj dane na iCloud * W każdym przypadku -> Utrwalaj dane na urządzeniu. Rzeczywiście, dzięki temu schematowi dane mogą być zapisywane na urządzeniu, w iCloud i moim API. Musimy zduplikować dane, aby ostatnie dane były dostępne, nawet jeśli użytkownik nie jest zalogowany w iCloud lub API. * * * Oto implementacja tego, jak moim zdaniem zostanie zaimplementowana ta funkcja. Aby ujednolicić proces wykonywania żądań CRUD myślę o stworzeniu `PersistenceManager`, który pozwala na wykonywanie żądań CRUD dla podmiotów w zależności od stanu użytkownika. (Jeśli jest zalogowany do API, na iCloud lub nigdzie). Oto kilka metod, które zaimplementuje `PersistenceManager`: **Zapisz żądanie** Ta metoda zapisze encję w zależności od stanu użytkownika. Jeśli użytkownik jest zalogowany do API: zachowaj w API Jeśli użytkownik jest zalogowany do iCloud: zapisz w iCloud W każdym przypadku -> Zapisz na urządzeniu z danymi podstawowymi. Każde przechowywane dane będą miały sygnaturę czasową, aby upewnić się, że pobrana zostanie ostatnia wersja danych. **Żądanie odczytu** Ta metoda pobierze encje tylko z urządzenia de w trybie asynchronicznym. W przypadku każdego wykonanego żądania zapisania, aktualizacji lub usunięcia, jeśli użytkownik jest zalogowany do API lub do iCloud, jedno lub obaj wyślą powiadomienie do aplikacji klienckiej, w której użytkownik jest zalogowany, w celu pobrania danych z API lub iCloud i zapisania ich w danych podstawowych . Następnie dane, które użytkownik chce odczytać, są zwracane przez dane podstawowe. Aby pobrać powiadomienie z API, myślę, że do komunikacji użyj gniazda za pośrednictwem mojego API i mojej aplikacji na iOS. Ale nie wiem, jak mogę zrobić ten sam mechanizm dla iCloud. Jakieś sugestie ? **Żądanie aktualizacji** Ta sama mechanika co w przypadku żądania zapisania, ale w przypadku aktualizacji danych. **Żądanie usunięcia** Ta sama mechanika co w przypadku żądania zapisania, ale w przypadku żądania usunięcia danych. * * * Nie znam się na tych problemach i chciałbym zasięgnąć rady na ten temat. Wielkie dzięki !


title: Oddzielenie wątków

text: Nierzadko słyszy się o odłączeniu interfejsu użytkownika od logiki programu lub projektowania/dostępu do bazy danych od logiki programu… a nawet logiki programu od samego siebie. Jednak nigdy nie słyszałem o podejściu do uogólniania lub abstrahowania szczegółów wątkowania zadań do logiki (poza Tymeac, pakietem specyficznym dla Androida). Szczerze mówiąc, biorąc pod uwagę wszystkie szczegóły związane z zarządzaniem wątkami, nie oczekuję, że wiele rozwiązań będzie działać dobrze w najbliższym czasie, więc... Moje pytanie brzmi, jak piszesz wątki, które nie są połączone na biodrze z procesami, które użyć tych wątków? Co zwykle robisz, gdy wymagania zmieniają się w już skomplikowanej aplikacji wielowątkowej? Czy jest jakieś podejście projektowe, które powinienem przeczytać? Pytam o to, ponieważ jesteśmy na progu ery „bagillion” rdzenia w informatyce. W końcu w ciągu najbliższych kilku dekad będzie musiała istnieć dobra metodologia, aby zarządzać ponad tysiącami rdzeni i jeszcze większą liczbą wątków.


title: Projekt hierarchii interfejsów dla oddzielnych domen

text: Są firmy i ludzie. Ludzi można polubić, a biznesy komentować: klasa Like klasa Comment klasa Person implementuje klasę iLikeTarget Business implementuje iCommentTarget Likes i komentarze są wykonywane przez użytkownika(osobę), więc są one tworzone: class Like implementuje klasę iAuthored Comment implementuje iAuthored People's like może być również używane w ich historii: klasa history class Like implementuje iAuthored, iHistoryTarget Teraz przychodzi sprytny programista i mówi, że każda historia jest dołączona do użytkownika, więc historia powinna być tworzona: interfejs iHistoryTarget rozszerza iAuthored, aby można było ją usunąć z `class Like` : klasa Person implementuje klasę iLikeTarget Business implementuje klasę iCommentTarget Like implementuje klasę iHistoryTarget Comment implementuje interfejs historii klas iAuthored iHistoryTarget rozszerza iAuthored Oto kolejny sprytny facet pytanie: Jak mogę uchwycić fakt „Autoryzowany” w klasach „Lubię to” i „Komentarz”? Być może nie wie nic o koncepcji „historii” w projekcie. Skalując tego rodzaju funkcje, interfejsy mogą przejść do ich hermetyzowanych typów, co powoduje większą siłę typu, z drugiej strony ucierpi na jawności, a także użytkownicy końcowi kodu będą musieli napotkać wiele trudności podczas przetwarzania. Oto pytanie: Czy powinienem hermetyzować te typy zależne do ich typów nadrzędnych (hierarchii interfejsów), czy nie, czy też jawnie powtarzać każdy typ dla każdego poziomu mojego systemu typów lub ...?


title: Wydajność F# w porównaniu z wydajnością Erlanga, czy istnieje dowód, że maszyna wirtualna Erlanga jest szybsza?

text: Poświęcałem czas na naukę programowania funkcjonalnego i doszedłem do części, w której chcę zacząć pisać projekt, zamiast tylko babrać się w samouczkach/przykładach. Podczas moich badań odkryłem, że Erlang wydaje się być całkiem potężny, jeśli chodzi o pisanie oprogramowania współbieżnego (co jest moim celem), ale zasoby i narzędzia do rozwoju nie są tak dojrzałe, jak produkty deweloperskie Microsoft. F# może działać na Linuksie (Mono), więc ten wymóg jest spełniony, ale rozglądając się po Internecie nie mogę znaleźć żadnych porównań F# vs Erlang. W tej chwili skłaniam się ku Erlangowi tylko dlatego, że wydaje się, że ma najwięcej prasy, ale jestem ciekaw, czy naprawdę istnieje różnica w wydajności między tymi dwoma językami. Ponieważ jestem przyzwyczajony do programowania w .NET, prawdopodobnie mogę przyspieszyć F# o wiele szybciej niż Erlang, ale nie mogę znaleźć żadnego zasobu, który przekonałby mnie, że F# jest tak samo skalowalny jak Erlang. Najbardziej interesuje mnie symulacja, która będzie wysyłała wiele szybko przetworzonych wiadomości do trwałych węzłów. Jeśli nie wykonałem dobrej pracy z tym, o co próbuję poprosić, poproś o dalszą weryfikację.


title: Dlaczego inżynierowie Suna zdecydowali, że Java będzie dzwonić tylko według wartości?

text: Czy jest jakiś konkretny powód, dla którego zdecydowali się na Call by value? Czy to dla prostoty?


title: Po stronie serwera C# MVC z AngularJS

text: Lubię używać .NET MVC i używałem go całkiem sporo w przeszłości. Zbudowałem również SPA przy użyciu AngularJS bez ładowania strony innej niż początkowa. Myślę, że w wielu przypadkach chcę użyć ich połączenia. Skonfiguruj aplikację początkowo przy użyciu platformy .NET MVC i skonfiguruj po stronie serwera routingu. Następnie skonfiguruj każdą stronę jako mini-SPA. Te strony mogą być dość złożone z dużą ilością funkcji po stronie klienta. Moje zamieszanie dotyczy sposobu obsługi powiązania modelu z widokiem przy użyciu zarówno .NET MVC, jak i zakresu AngularJS. Czy unikam używania pomocników Razor Html? Helpery Html tworzą znaczniki za sceną, więc próba dodania znaczników angularjs przy użyciu pomocników może być nieuporządkowana. Jak więc dodać model ng na przykład do @Html.TextBoxFor(x => x.Name). Również ng-repeat nie zadziała, ponieważ nie ładuję mojego modelu do zakresu, prawda? Nadal chciałbym używać pętli foreach w języku c#? Gdzie rysuję linie separacji? Czy ktoś namówił .NET MVC i AngularJS, aby ładnie ze sobą współgrały i jakie są twoje sugestie dotyczące architektury?


title: Zarządzanie konfiguracją przechowywaną w bazie danych

text: Opracowując oprogramowanie oparte na bazie danych, często wygodnie jest przechowywać w bazie rzeczy, które można tradycyjnie wyrazić w kodzie, ale które są przydatne do przechowywania w bazie danych (aby można je było zmienić bez konieczności ponownego ładowania aplikacji). Na przykład można mieć procesy, które wysyłają zautomatyzowane wiadomości e-mail za pomocą szablonu; sensowne jest przechowywanie tego szablonu w bazie danych, aby tekst mógł być modyfikowany przez użytkowników bez konieczności zmiany kodu / ponownego wdrażania / itp. Jednak te szablony są "ważne" - są wymagane do prawidłowego działania systemu, a na przykład, jeśli zostaną zniekształcone lub ich brak, ich podstawowa funkcjonalność prawdopodobnie przestanie działać. Ponieważ znajdują się teraz w bazie danych, nie są poza kontrolą wersji - możesz dodać tabele audytu, aby mieć historię zmian dotyczących tych informacji, ale wersje/itd. są oddzielne i niezależne od wersji głównego kodu. Jak sobie z tym radzisz? Nie umieszczasz tego typu rzeczy w bazie danych i nie wprowadzasz zmian przez cykle rozwoju/kontroli zmian/wdrażania? Albo coś innego? Pozdrawiam, Álex


title: Co jest wbudowane w oprogramowanie Mars Curiosity Rover?

text: Łazik Mars Curiosity wylądował pomyślnie, a jeden z filmów promocyjnych „7 minut terroru” chwali się, że jest 500 000 linijek kodu. To bez wątpienia skomplikowany problem. Ale to dużo kodu, z pewnością krył się za tym dość duży wysiłek programistyczny. Czy ktoś wie coś o tym projekcie? Mogę sobie tylko wyobrazić, że to jakiś osadzony C.


title: W jakim języku firmy takie jak NASA używają do tworzenia swoich aplikacji?

text: Więc oczywiście NASA potrzebuje programistów, aby tworzyli dla nich aplikacje, czy to aplikacje VOIP, aplikacje do sterowania maszynami i sztuczną inteligencją, itp. Ale w jakim języku faktycznie do tego używają? Mam 15 lat i planuję studiować Inżynierię Oprogramowania na uniwersytecie, a moim wymarzonym zajęciem jest programowanie dla NASA, astronomia to moje ogromne hobby. Muszę się czegoś nauczyć zanim osiągnę „zalecany” wiek, na przykład w wolnym czasie studiuję podyplomową Astrofizykę. W związku z tym chciałbym wiedzieć, jakiego języka programowania używa NASA, abym mógł zacząć uczyć się podstaw i zobaczyć, czy jest to coś, co może mi się spodobać. Proszę nie mów „Żyj życiem jako dziecko”, ponieważ widziałem, jak ludzie mówią takie rzeczy wcześniej, w ten sposób lubię żyć swoim życiem i absolutnie kocham programowanie. Po prostu czuję, że tak jak w wielu rzeczach, jeśli nauczę się tego w młodszym wieku, będę miał większe doświadczenie, gdy będę starszy - tak, mam aspiracje, w które nie uwierzysz (haha). Myślę o nauczeniu się programowania Arduino lub Engduino, czego możemy być świadkami na moich zajęciach z informatyki, ale czy jest to w ogóle związane z rodzajem programowania NASA. Rozumiem, że NASA będzie programować DUŻO, DUŻO, DUŻO bardziej zaawansowanych programów niż ja, ale samo odczucie ożywienia nieożywionego przedmiotu byłoby dla mnie osiągnięciem. Więc tak, jakiego języka programowania używają, co poleciłbyś, abym studiował na uniwersytecie, aby zrealizować takie marzenie?


title: Algorytm Węża, który implementuje Cipher

text: Jak muszę zmienić standardową implementację algorytmu węża, abym mógł go używać z javax.crypto.CipherInputStream lub javax.crypto.CipherOutputStream? Muszę zaimplementować/rozszerzyć klasę Cipher, a kiedy to zrobię, co muszę zmienić? Oryginalna implementacja algorytmu węża jest tutaj http://www.cl.cam.ac.uk/~rja14/serpent.html Czy istnieje implementacja algorytmu węża, która implementuje szyfr? Implementację algorytmu w Javie znalazłem na stronie jego twórcy. Problem w tym polega na tym, że nie mogę go używać z javax.crypto.CipherInputStream lub javax.crypto.CipherOutputStream. Próbuję użyć ObjectOutputStream do napisania pliku konfiguracyjnego, ale chciałbym go zaszyfrować za pomocą algorytmu Serpent. To samo dotyczy odczytu tego pliku konfiguracyjnego. Nie chcę używać API, takich jak BouncyCastle i flexiprovider, ponieważ tworzą one zbyt ciężki boilerplate, którego nie potrzebuję. Jaka jest najlepsza praktyka korzystania z gotowego (ostatecznego i przetestowanego) algorytmu, który nie rozszerza/implementuje Cipher i powinien być używany w javax.crypto.CipherXxxStream?


title: Czy jesteś w stanie zamknąć oczy i skupić się/myśleć tylko na swoim kodzie?

text: Mam kilku kolegów w pracy, przychodzą rano, wyłączają e-mail, telefon, zamykają drzwi itp. Potem zamykają oczy i przez 30 minut próbują skupić się na swoim programowaniu (C++, C, itp.) i pamiętają, co zrobili wczoraj. Następnie i jakoś przetworzyć lub wyobrazić sobie kod w głowie, z zamkniętymi oczami. A jakiś czas później po prostu chwytają za ołówek i zrzucają kod na kartkę papieru lub na swoje IDE (Kdevelop, Visual Studio, Eclipse itp.). Niektórzy z tych gości są naprawdę skuteczni i tworzą bardzo skomplikowany kod. Ja nie umiem tego zrobić i zastanawiam się, czy ktoś z Was mógłby zrobić coś podobnego, a w razie czego mógłbyś udzielić jakiejś rady, jak móc się tak głęboko skupić w kodzie lub problemie. Dziękuję


title: Czego należy użyć do stworzenia diagramu wewnętrznej architektury aplikacji?

text: Mam aplikację, która ma kilka zależności, w tym bibliotekę Matlab i kontrolkę Microsoft Windows Media Player ActiveX. Jak graficznie przedstawić wewnętrzną architekturę tej aplikacji w celach dokumentacyjnych? Czy odpowiedni byłby diagram struktury UML? Jeśli tak, czy byłoby to tak proste, jak: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/77xN8.png)


title: Pomoc z wzorcem projektowym MVC?

text: Próbuję zbudować program Java do logowania użytkownika, ale nie jestem pewien, czy mój projekt MVC jest dokładny. Mam następujące klasy: * LoginControl - servlet * LoginBean - klasa java przechowująca dane ze zmiennymi prywatnymi pobierającymi i ustawiającymi * LoginDAO - konkretna klasa java, w której uruchamiam moje zapytania SQL i wykonuję resztę pracy logicznej. * Klasa połączenia - klasa java tylko do połączenia z bazą danych * widok - jsp do wyświetlania wyników * html - używany do formularza Czy tak projektuje się program java oparty na wzorcu projektowym MVC? Proszę podać jakieś sugestie?


title: Czy maskowanie jest naprawdę konieczne przy wysyłaniu z klienta Websocket?

text: Obecny Websocket RFC wymaga, aby klienty Websocket maskowały wszystkie dane w ramkach podczas wysyłania (ale serwer nie jest do tego wymagany). Powodem, dla którego protokół został zaprojektowany w ten sposób, jest zapobieganie zmianie danych ramek przez złośliwe usługi między klientem a serwerem (proxy itp.). Jednak klucz maskujący jest nadal znany takim usługom (jest wysyłany na ramkę na początku każdej ramki) Czy mylę się zakładając, że takie usługi nadal mogą używać klucza do demaskowania, zmiany, a następnie ponownego maskowania zawartość przed przekazaniem ramki do następnego punktu? Jeśli się nie mylę, jak to naprawi rzekomą lukę?


title: Tworzenie treści e-mail | Właściwy projekt

text: Pracuję nad aplikacją e-commerce, w której musimy wysłać tak wiele e-maili do klienta, jak * E-mail rejestracyjny * Zapomniałem hasła * Złożono zamówienie Istnieje wiele innych e-maili, które można wysłać, mam już `emailService`, który jest odpowiedzialny za wysyłanie wiadomości e-mail i potrzebuje obiektu e-mail, wszystko działa, znajdź, ale w pewnym momencie uderza mnie i nie jestem pewien, jak najlepiej to zrobić. Musimy stworzyć treść tak, aby można ją było przekazać do `emailService` i nie jesteśmy pewni, jak to zaprojektować. Na przykład, podczas rejestracji klienta, mam `customerFacade`, który działa między `Controller` i `ServiceLayer`, chcę po prostu delegować tę pracę nad tworzeniem treści wiadomości e-mail z warstwy Facade i uczynić ją bardziej elastyczną. Obecnie tworzę treść e-maila rejestracyjnego wewnątrz `customerFacade` i coś, co mi się nie podoba, ponieważ oznacza to, że dla każdego e-maila muszę tworzyć treść w odpowiedniej elewacji. Jaka jest najlepsza droga lub obecne podejście jest wystarczające?


title: Standardy pracy programistów na własnych stacjach roboczych

text: Właśnie natknęliśmy się na jedną z tych sytuacji, która czasami pojawia się, gdy programista zachoruje na kilka dni w trakcie trwania projektu. Pojawiło się kilka pytań dotyczących tego, czy zatwierdził najnowszą wersję swojego kodu, czy też na jego lokalnym komputerze znajduje się coś nowszego, na co powinniśmy się przyjrzeć. Mieliśmy oczekującą dostawę do klienta, więc nie mogliśmy się doczekać go do powrotu. Jeden z innych programistów zalogował się jako on, aby zobaczyć i znaleźć bałagan obszarów roboczych, wiele pozornie tych samych projektów, z sygnaturami czasowymi, które sprawiały, że nie było jasne, który z nich jest „aktualny” (prototypował niektóre fragmenty wersji projektu innych niż jego "rdzeń"). Oczywiście jest to utrapienie, jednak alternatywa (która wydaje się być ścisłymi standardami dla tego, jak każdy programista pracuje _na własnej maszynie_, aby zapewnić, że każdy inny programista może wybrać coś przy minimalnym wysiłku) prawdopodobnie złamie wiele deweloperzy osobiste przepływy pracy i prowadzą do nieefektywności na poziomie indywidualnym. Nie mówię tu o standardach zaewidencjonowanego kodu, ani nawet o ogólnych standardach programistycznych, mówię o tym, jak programista działa lokalnie, domena ogólnie uważana (z mojego doświadczenia) za prawie całkowicie pod kontrolą programistów. Więc jak radzisz sobie w takich sytuacjach? Czy to jedna z tych rzeczy, które po prostu się zdarzają i musisz sobie z nimi poradzić, cena, jaką płacisz za pozwolenie programistom na pracę w sposób, który najbardziej im odpowiada? A może prosisz programistów o przestrzeganie standardów w tej dziedzinie – używanie określonych katalogów, standardów nazewnictwa, notatek na wiki lub cokolwiek innego? A jeśli tak, co obejmują twoje standardy, jak surowe są, jak je kontrolujesz i tak dalej? A może brakuje mi innego rozwiązania? [Załóżmy, ze względu na argument, że nie można skontaktować się z deweloperem, aby omówić to, co tutaj robił - nawet gdyby mógł wiedzieć i opisywać, który obszar roboczy jest, który z pamięci nie będzie prosty i bezbłędny, a czasami ludzie naprawdę mogą nie kontaktować się i potrzebuję rozwiązania, które obejmie wszystkie ewentualności.] **Edytuj:** Rozumiem, że przeglądanie czyjejś stacji roboczej jest złą formą (chociaż jest to interesujące - _i prawdopodobnie nie na temat__ \- pytanie dotyczące dokładnego dlaczego tak jest) iz pewnością nie patrzę na nieograniczony dostęp. Pomyśl bardziej zgodnie ze standardem, w którym ich katalogi kodu są skonfigurowane z udziałem tylko do odczytu — nic nie można zmienić, nic więcej nie można zobaczyć i tak dalej.


title: Czy sprawdzasz poprawność danych innych niż wejściowe od klienta?

text: Jeden z naszych programistów uważa, że wszystkie dane klienta powinny zostać zweryfikowane przed użyciem. Nawet dane niebędące danymi wejściowymi. Powiedzmy, że nasza usługa internetowa ma wewnętrzną ochronę przed wstrzyknięciami bazy danych. Przykłady: kody generowane maszynowo, różne liczby całkowite, indeksy, obliczone wartości. Używamy ORM-a (Django). Jak wiem, w Django jest kolejne podejście: waliduj tylko wartości wprowadzone jako podstawowe ciągi (zwykle za pomocą formularzy internetowych). Na przykład: czy jest jakiś powód do tworzenia reguł walidacji w celu walidacji liczb, jeśli wiemy, że na początku obsługi żądania występuje błąd 500 (jeśli dane są błędne)? Myśle że nie. Ale chyba się mylę. Czy moja pozycja wymaga zmiany?


title: Jak nazywa się ten wzorzec projektowy?

text: Używam tego „wzorca projektowego” (może być, ale nie musi być „oficjalnym” wzorcem projektowym) od jakiegoś czasu i chciałem wiedzieć, czy ma on nazwę (aby móc od niego nazwać swoje zajęcia). Przykład w kodzie PHP (choć dotyczy dowolnego języka) (przykład jest głupi, proszę nie zwracać uwagi): interface Formatter { public function format($variable); } class IntFormatter implementuje Formatter { public function format($zmienna) { echo (string) $zmienna; } } class StringFormatter implementuje Formatter { public function format($zmienna) { echo ''"' .$zmienna .''"'; } } Teraz wzorzec chcę wiedzieć, czy dla tej klasy: class FormatterDispatcher implementuje Formatter { private $formatters = []; funkcja public setFormatter($type, Formatter $formatter) { $this->formatters[$type] = $formatter; } format funkcji publicznej($zmienna) { $typ = gettype($zmienna); return $this->formatters[$type]->format($variable); } } // Teraz w kodzie: $formatter = new FormatterDispatcher(); $formatter->setFormatter('int', nowy IntFormatter()); $formatter->setFormatter('string', nowy StringFormatter()); $formatter->format($zmienna); Jak widać, jest to tylko proxy do innych implementacji interfejsu. Wybierze implementację do użycia na podstawie klasy parametru (tu dla uproszczenia użyłem typów prymitywnych). Jaka jest nazwa tego wzoru? PS: w języku, który obsługuje Generics, kod na pewno wyglądałby lepiej, ale myślę, że duch byłby taki sam.


title: Laravel 4: Wiązanie/łączenie dwóch użytkowników razem

text: Buduję system testów jednostkowych. W pewnym momencie chcę związać ze sobą dwóch użytkowników w celu wykonania zadania dla tych dwóch. Więc kiedy administrator zdecyduje się połączyć ze sobą dwóch uczniów, system powinien wymyślić, jak to zrobić, być może używając numerów identyfikacyjnych obu użytkowników. Mam pomysł, jak to zrealizować, ale niezbyt jasne.


title: Jak dostać pracę jako twórca gier?

text: Jestem początkującym programistą tuż po studiach. Jak się dowiedziałem, nie lubię pracować nad „nudnymi” aplikacjami, takimi jak sieci, zapory sieciowe i tym podobne. Moja wymarzona praca to coś w rodzaju twórcy gier. Na czym powinienem się skupić, aby przejść do tworzenia gier? Czy istnieją konkretne technologie lub języki, które powinienem znać?


title: obliczyć złożoność LinkedHashSet

text: Mam `ArrayList<LinkedHashSet<String>> setOfStrings` na przykład ta arraylist wewnętrznie składa się z: positionX[hello,car,three,hotel,beach] positionY[.....] ... Chcę znaleźć samochód wewnątrz tej struktury danych, więc zrobiłem to dla (Iterator<LinkedHashSet<String>> iterator = setOfStrings.iterator(); iterator.hasNext();) { LinkedHashSet<String> subSet = iterator.next(); if (subSet.contains("hotel")) System.out.println("znaleziono"); } Iteracja for po całej `arrayList`, a złożoność w najgorszym przypadku to O(n), ale jestem zdezorientowany co do złożoności metody `contains()` zestawu. Zgodnie z `javadocs` ta metoda jest wykonywana w **stałym czasie** , ale słyszałem, że w niektórych przypadkach złożoność może stać się `O(n)`. Mówiąc to, nie jestem pewien złożoności tego algorytmu fragmentu kodu. Czy ktoś może mi to wyjaśnić?


title: Klasa prostokąta java.lang.Object

text: Czy ktoś może mi wytłumaczyć różnicę lub korzyści raczej z używania klasy rectangle ex. Prostokąt r1 = nowy Prostokąt(x,y,w,h); w porównaniu z metodą drawRec klasy graficznej? g.drawRec(x,y,w,h); Myślę, że możesz stworzyć nowy obiekt poza paint() lub paintcomponent() co daje tworzeniu obiektu więcej opcji i może związane z nim metody to bonus? Po prostu spekuluję, ponieważ samouczek, przez który przechodziłem, zmienił się z używania jednego na drugi bez wyjaśnienia, dlaczego. Wierzę, że rozumiem, jak ich używać, ale nie, kiedy lepiej jest użyć których. Staraj się, aby Twoje odpowiedzi były na poziomie początkującym, ponieważ dopiero zaczynam, ale oczywiście każda pomoc jest BARDZO mile widziana. Dziękuję!! Oto fragment kodu tego, z czym pracuję: public void paintComponent(Graphics g){ g.drawImage(yellowBall, xCoor, yCoor, this); Rectangle r1 = new Rectangle((boardXSize/2), (boardYSize/2),50, 50); g.setColor(Kolor.czerwony); g.fillRect(r1.x, r1.y,r1.width, r1.height); odmalować(); }


title: znalezienie wysokiej klasy zleceń w zakresie kontraktacji oprogramowania

text: Kontraktuję od około 3 lat. Obecnie jestem wykonawcą w firmie internetowej. To jest pozycja godzinowa. Chcę znaleźć większe projekty. Czytałem, że niektórzy ludzie są w stanie wykonywać tylko jedną lub dwie prace rocznie i być na tym nastawionym. Chcę tego typu prac i chcę zatrudniać ludzi do wykonywania tych prac, ale nie mam pojęcia, od czego zacząć. Bardzo wątpię w miejsca takie jak odesk, które publikują tego typu umowy. Gdzie mogę je znaleźć? Jak mogę dobrze zarabiać i wygodnie żyć, pracując dla siebie?


title: Jak wyglądałaby najwyższa klasa szkoleniowa dla programistów?

text: Myślę, że dzisiejsze typowe/tradycyjne 3-5-dniowe zajęcia szkoleniowe dla programistów nie są tak wspaniałe, ponieważ niedługo potem zapomina się o połowie z nich. To za dużo komunikacji w jedną stronę, a za mało interakcji. Również badania mózgu wykazały, że tego rodzaju konfiguracja zwykle nie jest optymalna dla efektywnego uczenia się. Dla wyjaśnienia mam na myśli profesjonalne, komercyjne, płatne zajęcia. Można to jednak zastosować również do wszelkiego rodzaju badań. Jak można skonfigurować ostateczny pakiet szkoleniowy dla programistów, aby naprawdę upewnić się, że nauczysz się tego, czego powinieneś się nauczyć? Czy to byłoby więcej: * Multimedia? * Ćwiczenia? * Zadania domowe? * Rozłożone w czasie zamiast 3-5 kompaktowych dni? * Projekty grupowe?


title: Czy facet z osadzonym tłem systemu może przejść do tworzenia gier?

text: Cóż, skończyłem studia magisterskie z systemów wbudowanych i pracuję nad tworzeniem GUI, a praca z narzędziami graficznymi i obrazami oraz GUI trzymają mnie w miejscu bardziej niż praca nad kodem dla MUP/MUC. I chcę dać twórcom gier uczciwą szansę, wypróbuj grę od podstaw przy użyciu podstawowych bibliotek, a następnie wypróbuj to samo w wolnym/otwartym silniku gier i jest duża szansa, że mogę się w niej zakochać, możliwe dla osoby z licencjatem elektryki i elektroniki oraz magistrem systemów wbudowanych (zaledwie letnie doświadczenie w tej dziedzinie) przejść do tworzenia gier i odnieść sukces w zawodzie. I zadałem to samo pytanie @ stackoverflow.com (niewłaściwe miejsce do zapytania) http://stackoverflow.com/questions/13794822/can-a-guy-with-embedded-system-background-go-into-game-development/ 13794943#13794943 Otrzymałem dobrą, ale bardzo ogólną odpowiedź. Chętnie poznałbym rzeczywiste zalety i wady mistrza w systemach wbudowanych migrujących do Game Dev


title: Różnica między działaniem atomowym a bezpieczeństwem wątków?

text: Z dyskusji, którą widziałem, wydaje się, że _operacja atomowa_ i _bezpieczeństwo gwintu_ to to samo, ale wiele osób twierdzi, że są różne. Czy ktoś może mi powiedzieć, jaka jest różnica, jeśli istnieje?


title: Co dokładnie muszę zrobić, jeśli korzystam z biblioteki na licencji LGPL?

text: Przeczytałem te pytania i odpowiedzi, ale nadal nie rozumiem, co dokładnie muszę zrobić, jeśli dynamicznie łączę się z biblioteką korzystającą z licencji LGLP (w moim przypadku biblioteka SDL). Jeśli poprawnie rozumiem tekst LGLP, muszę w jakiś sposób podać źródło biblioteki. Czy to wystarczy? Jeśli nie, co jeszcze należy zrobić?


title: Jak sprawić, by menedżer zrozumiał Agile?

text: Mam problem ze starszym dyrektorem, który nie rozumie rozwoju iteracyjnego (a tym bardziej Agile). Nalega, aby nasza specyfikacja projektowania oprogramowania (SDS) była kompletna przed napisaniem jakiejkolwiek linii kodu. Kompletność oznacza dla niego wszystkie funkcjonalne szczegóły. Ponadto, będąc byłym programistą Cobol, chce zobaczyć „moduły” i schematy blokowe. To jest aplikacja internetowa Java do głośnego płaczu! W każdym razie staram się znaleźć proste miejsce, aby delikatnie go wskazać, aby pokazać, że karta charakterystyki nie musi być w 100% kompletna przed rozpoczęciem kodowania (ani nie może być kompletna). Jakieś sugestie? Dziękuję!


title: Czy dopuszczalne jest dekompilowanie cudzego kodu w celu poznania tego, co zrobił i jak to zrobił?

text: Nie mówię o kradzieży kodu lub ponownym wykorzystaniu czyjegoś dla zysku. Ale zakładam, że jeśli program lub wtyczka są rozpowszechniane w formacie, w którym nie mogę łatwo zobaczyć źródła, jest to celowe działanie ze strony programisty. Czy mimo to można patrzeć w celu uczenia się? A jeśli tak, to czy istnieją ograniczenia tej wolności?


title: Jaki procent zmian jest uważany za licencję artystyczną w porównaniu z klonem w tworzeniu gier wideo?

text: Jestem programistą „weekendowym koderem” tworzącym aplikacje i gry mobilne i miałem ochotę stworzyć własną wersję gry stworzonej na Commodore 64 na początku lat 80-tych przez małego wydawcę, m.in. Nie Gry EA lub podobne. Od tego czasu gra nie została przeniesiona / wydana na żadną platformę. Chcę stworzyć swoją wersję, ponieważ gra się w nią fajnie, ale oczywiście mogę teraz stworzyć znacznie lepszą grafikę (oryginał miał najwyżej 8 kolorów i wymaga dobrej wyobraźni, aby przekształcić obraz postaci w grze w coś z 4 kończynami i głowa). Ponieważ zrobienie tego od zera będzie wymagało wysiłku, a po zakończeniu gra będzie inna, chciałbym obciążyć użytkowników 99 centami... Ale obawiam się, że zostanę pozwany, gdyby oryginalny twórca wyskoczył skądś z stolarki. Oto zestawienie intencji oryginału w porównaniu z moimi intencjami w grze. Oryginalna gra była grą 2D z widokiem z boku (pomyśl o oryginalnych Mario Bros) z 3 ekranami, które odwracały się, gdy przekraczałeś krawędź. Mogłeś zbierać przedmioty, byli gracze AI, którzy cię „ścigali”, drabiny i niektóre obiekty, na których można jeździć… Wszystko w ramach określonego tematu. Moja wersja byłaby również widokiem z boku 2D, ale byłaby sidecrollerem z co najmniej 3, a może 4 lub 5 "ekranami" zawartości. Wszystkie obrazy byłyby oryginalne, miały ładny wygląd 3D, pełne kolory, cienie i efekty świetlne. Nadal zbierałbyś przedmioty, ale wszystkie byłyby inne, i nadal by cię ścigał itp., ale staram się jak najlepiej, aby moja gra była wyjątkowa... i oczywiście miałaby inną nazwę. Entuzjastom gier wideo, którzy grali w tę grę na początku lat 80-tych, mogliby ogłosić... "O rany, ta gra przypomina mi **___ _**!" Nie sądzę jednak, by uznali to za „zdzierstwo” lub „tylko klon”. Czy istnieją udokumentowane przypadki, w których deweloper został pomyślnie pozwany za skopiowanie innej gry?... A jeśli tak, to jak blisko było? Podobnie, czy istnieje przedawnienie?... Ta gra ma już 30 lat... A może odpowiedź po prostu zbuduj i zobacz?


title: Kolejki i wątki

text: Rozwijam nowy projekt, w którym będę stale sprawdzał stronę internetową pod kątem danych i dodawał te dane do kolejki do przetworzenia. Dane te zostaną następnie usunięte z kolejki i dodane do listy, jeśli nie zostały jeszcze dodane. Lista ta zostanie następnie zapisana w bazie danych. Zastanawiałem się, jak używać wątków, ponieważ jestem stosunkowo nowy w programowaniu? Myślę, że byłoby idealnie, gdybym miał wątek stale sprawdzający stronę pod kątem danych, wątek przetwarzający kolejkę i wątek przetwarzający listę. Wszelkie sugestie dotyczące tego, czy ta metoda jest najskuteczniejsza, czy nie i jak to osiągnąć, byłyby mile widziane.


title: Porównywanie ciągów znaków z pulą słów

text: Tworzę aplikację, w której użytkownik wpisuje 8 znaków. Po tym, jak wprowadzi ciąg, muszę sprawdzić, czy jest to słowo ośmioliterowe. Jeśli nie, sprawdź, czy zawiera siedmioliterowe słowo itp. Sprawdzam podaną pulę ponad 150 000 słów. Zależy mi tylko na jak najdłuższym meczu. Czy istnieje lepszy sposób niż ten: * WordPool.Contains(word.substring(0,8)) * WordPool.Contains(word.substring(0,7)), WordPool.Contains(word.substirng(1,7) ) * WordPool.Contains(word.substring(0,6)), WordPool.Contains(word.substirng(1,6)), WordPool.Contains(word.substring(2,6)) * itd... _Edytuj_ I zapomniałem dodać, że sprawdzam w słowniku angielskim. Do tej pory używam tego: for(i = 8; i >= 3; i--) for(j = 0; j <= 8 - i; j++) if(words.contains(word.substring(j, i )) //zrób coś **Edytuj 2** Używałem podejścia zdefiniowanego powyżej tylko z niewielką zmianą.Używam kilku agentów działających w tle, z których wszyscy wyszukują słowo o określonej długości.Wszyscy zwracają wynik i po prostu wybieram ten, który daje użytkownikowi najwyższy wynik.


Czy powinienem ponownie używać zmiennych? Wiem, że wiele dobrych praktyk mówi, że nie powinieneś tego robić, jednak później, gdy inny programista debuguje kod i ma 3 zmienne, które wyglądają podobnie, a jedyną różnicą jest to, że są tworzone w różnych miejscach w kodzie, może być zdezorientowany. testowanie jednostkowe jest tego doskonałym przykładem. Wiem jednak, że najlepsze praktyki są przez większość czasu temu przeciwne. Na przykład mówią, aby nie „przesłonić” parametrów metody. Najlepsze praktyki są nawet przeciwko nullowaniu poprzednich zmiennych (w Javie istnieje Sonar, który ostrzega, gdy przypisujesz null do zmiennej, że nie musisz tego robić, aby wywołać garbage collector od wersji Java6. Nie zawsze możesz kontrolować, jakie ostrzeżenia są wyłączone , przez większość czasu domyślnie jest włączone)


title: Czy można używać tej samej zmiennej do sekwencyjnego przechowywania podobnych rzeczy?

text: Powiedzmy, że mam nazwę zmiennej `len` w funkcji i kilka ciągów. Czy mogę użyć tego do przechowywania długości tych ciągów jeden po drugim, czy powinienem utworzyć oddzielne zmienne? Zasadniczo to: size_t len; len = string1.size() ....//jakiś kod len = string2.size() ...//więcej kodu kontra size_t str1len, str2len; str1len = string1.size() ....//jakiś kod str2len = string2.size() ...//więcej kodu Wszystkie są zmiennymi lokalnymi w ramach funkcji BTW.


title: Tematy, których należy się nauczyć przed uzyskaniem stopnia CS

text: Czując się nieco rozczarowany treścią na mojej ścieżce dyplomowej z informatyki na mojej uczelni, próbowałem uczyć się na własną rękę. Szukam wskazówek dotyczących tematów, które będą pomocne przy wchodzeniu w świat pracy. Jako senior nauczyłem się podstaw abstrakcji danych oraz podstaw C++, vb.net i php.


title: Analogia ze świata rzeczywistego dla indeksu klastrowego

text: Indeks bazy danych jest analogiczny do spisu treści. Pomaga mi to w łatwy sposób zrozumieć indeks db. Moje pytanie brzmi, czy istnieją jakieś analogie ze świata rzeczywistego dla indeksu klastrowego?


title: Apache License 2.0 i rekompilacja kodu źródłowego

text: Nie jestem ekspertem od licencji, więc trochę się pomyliłem... Licencja Apache 2.0; Czy pozwala na pozyskiwanie kodów źródłowych i modyfikowanie ich pod nowe projekty? Mam na myśli modyfikację kodów źródłowych (niektóre ich części) i ich przekompilowanie?


title: Czy niewłaściwe jest przesyłanie komunikatów z serwera do klienta w aplikacji klient-serwer?

text: Praktycznie nigdy nie widzę żadnej aplikacji webowej, w której serwer wysyła wiadomości do klienta. Podczas gdy przesyłanie wiadomości z serwera do klienta jest szeroko stosowane w grach wieloosobowych, dlaczego ten model jest tak słabo wykorzystywany w aplikacjach internetowych? Czy to źle? Czy to niszczy model klient-serwer?


title: Czy testerzy mogą recenzować projekt i kod deweloperów?

text: Jestem młodszym programistą dla małej firmy korzystającej z programowania scrum / agile. Naszym długoterminowym celem jest uzyskanie oceny na poziomie 2 CMMI. Mamy zespół 3 starszych programistów, którzy wdrażają historie użytkowników i garstkę młodszych programistów do wsparcia. Zbliżamy się do metodologii „trzech amigo”, szczególnie w odniesieniu do rozdzielenia obowiązków rozwoju i testowania (trzecim amigo jest właściciel produktu / interesariusze biznesowi). W ten sposób nasi starsi programiści mogą skupić się na implementacji, a nasi młodsi programiści mogą skupić się jako bezstronni testerzy. Używamy recenzji partnerskich jako specyficznej praktyki weryfikacji produktów pracy, takich jak kod źródłowy. Ten artykuł, http://repository.cmu.edu/cgi/viewcontent.cgi?article=1208&context=sei, opisuje na s. 19, że optymalny proces recenzowania projektu i kodu wynosi od 50 do 65% czasu spędzonego na projektowaniu i kodowaniu. **Moje pytanie jest takie**: czy nasi testerzy powinni recenzować projekt i kod programistów? Zaletą byłoby to, że programiści mogą poświęcić więcej czasu na wdrażanie historyjek użytkownika. Wadą byłoby to, że testerzy mogą poświęcić swój obiektywny/bezstronny pogląd na system, ponieważ recenzowanie tworzy współwłasność kodu.


title: Czy można zainicjować wystąpienie klasy w tej samej klasie?

text: Zastanawiałem się, czy można zainicjować wystąpienie klasy w tej samej klasie? Na przykład: public class Person() { string name; wiek sznurka; public Person getPerson() { Osoba p1=nowa Osoba(); //jaka logika tutaj zwraca p1 } } Skończyło się na tym, że zrobiłem to dla części mojego kodu w pracy i dlatego chciałem wiedzieć, czy są jakieś potencjalne problemy z robieniem czegoś takiego.


title: Czy podczas definiowania elementów Backlogu Produktu opisywanie, co będzie częścią doświadczenia użytkownika, jest złym pomysłem?

text: Najpierw używam szablonu TFS 2010 SCRUM. Zastanawiam się, czy to zły pomysł... Zacząłem definiować PBI dla elementów interfejsu użytkownika. Zasadniczo będzie to zawierało wszystkie zadania, które deweloperzy zostaną przydzieleni podczas opracowywania elementów interfejsu użytkownika dla aplikacji internetowej. Ponieważ ma to związek z interakcją użytkownika i użytecznością, pomyślałem, że może być OK, jednak moja walka polega na tym, że można to również uznać za funkcjonalność i może nie pasować jako PBI.


title: Jaki jest najlepszy sposób oszacowania podczas korzystania z Agile ze Scrumem? Godziny czy punkty fabularne?

text: Byłem w firmie, która zmieniła nas z godzin na punkty historii dla naszych szacunków. Pamiętam, że trudno było to zrozumieć i wszyscy się z tym zmagaliśmy. Jednak kiedy już zorientowaliśmy się, jak to zrobić i zaczęliśmy to robić, myślę, że nasze szacunki stały się znacznie dokładniejsze. Znacznie lepiej byliśmy w stanie ukończyć nasze sprinty na czas i lepiej oszacować czas pozostały do wykonania. Kiedy minęło kilka tygodni, mieliśmy dobre pojęcie o prędkościach naszych poszczególnych zespołów, a następnie mogliśmy przełożyć te punkty historii na dni i tygodnie pracy. Następnie wykorzystaliśmy to, aby wiedzieć, co możemy ukończyć w danym przedziale czasowym. Myślę, że to samo może działać, jeśli szacowanie w godzinach, o ile wiadomo, że każdy zespół będzie miał inną liczbę godzin tygodniowo w swojej prędkości. Jeden zespół może przepracować 200 godzin, a inny średnio 150 godzin. Nie oznacza to, że jeden zespół pracuje ciężej niż drugi, oznacza to po prostu, że inaczej szacują godziny lub że niektórzy członkowie zespołu mogą nie mieć tyle czasu na pracę nad projektem, na przykład zawsze mogą zostać wyciągnięci w poprawki błędów lub pomoc w innych projektach, co zmniejsza ich dostępny czas dla tego projektu. W każdym razie, co myślisz? I dlaczego? Który jest najlepszy? Godziny czy punkty fabularne?


title: Wyszukiwanie w repozytorium

text: Jestem bardzo nowy w zarządzaniu kontrolą źródła i jedna rzecz mnie dziwi: czy można przeszukać całe repozytorium w poszukiwaniu ciągu? Na przykład śledzę jeden plik, który ma 100 zatwierdzeń i chciałbym zobaczyć całą wersję pliku, która zawiera w środku "xyz". czy to możliwe? Używam różnych klientów GUI i żaden z nich nie ma tego...? Tak, mogą przeszukiwać komunikaty o zatwierdzeniu, ale chcę znaleźć wersję, nawet jeśli komunikat o zatwierdzeniu nie zawiera ciągu. Innymi słowy, który klient GUI ma taką funkcję? Nie obchodzi mnie, jakiego SCM używa - git, hg, bazar, wszystko jest w porządku.


title: Czy powinienem używać gałęzi, na przykład korzystania z repozytorium github?

text: Pracuję nad repozytorium Github o nazwie Designemplate pod adresem https://github.com/benwatkinsart/Designemplate i myślałem o opracowaniu przykładowych zastosowań pliku CSS, aby pokazać, jak jest używany. Czy powinienem używać gałęzi o nazwie przykłady i tam je przechowywać?


title: Czy musisz mieć boks prymitywów w języku OO?

text: Czy w językach OO wymagane jest pakowanie prymitywów, aby były spójne z resztą systemu obiektów (generyki itp.)? Czy można tego uniknąć - czy można uniknąć dodatkowych kosztów wydajności związanych z posiadaniem zarówno prymitywów, jak i obiektów w języku? Jednym z rozwiązań, które mogę znaleźć na miejscu, jest posiadanie referencji wystarczająco dużych, aby przechowywać wartości każdego możliwego typu pierwotnego. Czy istnieją inne (lepsze) rozwiązania i czy są zaimplementowane w popularnych językach?


title: Kod testowalny jednostkowo: widoczność metody a złożoność testu

text: Nie mogę się zdecydować, jak poprawnie zrefaktoryzować kod. Załóżmy, że mam złożony kawałek hipotetycznej logiki: public class ImageService { public void UploadImage (VectorData data) { var image = ConvertVectorDataToImage(); var miniatura = UtwórzMiniaturę(obraz); ZapiszMiniaturę(miniaturka); ZapiszObraz(obraz); Wyślij e-mail(obraz); ... } } _(Jeżeli coś w przykładzie jest poza odpowiedzialnością, załóżmy, że mógłbym skomponować lepszy przykład)_ Jeśli udostępnię UploadImage jako widoczny (publiczny), pisanie testów staje się skomplikowane. Zwykle są długie, trudne do odczytania i jeśli chcesz uniknąć duplikacji kodu, pojawia się logika w testach. Jeśli sprawię, że wszystkie te małe kawałki będą widoczne, API stanie się bałaganem (ponieważ w moim przykładzie jedyną interesującą rzeczą dla wszystkich jest metoda UploadImage). Co gorsza, po pewnym czasie ludzie będą używać tych małych metod, ponieważ są one publiczne, a nie dlatego, że powinny być używane poza klasą. Więc moje pytanie brzmi: jak zrównoważyć widoczność i złożoność testów? A może przede wszystkim robię coś złego?


title: Czy „Aurora” to dobry paradygmat wydawniczy?

text: Jak wszyscy wiemy, istnieje status wydania „alfa” i „beta”. Mozilla Firefox jednak inaczej określa swoje wydania: „nightly”, „aurora”, „beta”. Czy to przykład do naśladowania? Czy aurora to nowa alfa? Czy powoduje to zamieszanie, ponieważ są to w zasadzie publiczne testy beta z fajną nazwą i fajną ikoną?


title: Najlepszy sposób na otwarcie mojej strony internetowej

text: Tworzę stronę internetową, w której zaufanie jest dużym problemem, chcę udowodnić, że jest to open source, że faktycznie robię to, co deklaruję. Pytanie 1. Jeśli otworzę swój kod źródłowy, jak mogę udowodnić, że rzeczywista witryna działa na tym kodzie? Ale mam też dylemat, jest to projekt komercyjny i nie chcę, żeby inni uciekali z nim i uznawali to za swoje. Myślę więc, że potrzebuję odpowiedniej licencji. Pytanie 2. Jaka licencja jest dla mnie najlepsza? Obecnie myślę o GPL v3.


title: Czy języki programowania obiektowego są proceduralne?

text: Programowanie proceduralne oznacza, że kodowanie aplikacji to szereg zadań. Wykonaj A, potem wykonaj B, potem wykonaj C. Często opakuj te zadania procedurami lub funkcjami, które można łatwo wywołać i uruchomić kilka razy w kodzie. Programowanie zorientowane obiektowo jest również często wykonywane przez wykonanie A, następnie wykonanie B, a następnie wykonanie C. Ale obiekty są używane (i poprawiają mnie, jeśli się mylę, ponieważ nie jestem pewien) jako wyrafinowane sposoby przechowywania, manipulowania i ukrywania danych. Wpływa to znacząco na projekt programu. Ale ogólny przepływ aplikacji to nadal A, potem B, potem C. Zgadzasz się? Jeśli tak, czy powiedziałbyś, że OOP jest zasadniczo rodzajem programowania proceduralnego?


title: Walidacja najlepszych praktyk, właściwość vs dto, prosty typ vs obiekt

text: Rozważ stronę profilu użytkownika. Użytkownik może dodać wiele e-maili do swojego profilu (coś jak strona profilu GitHub). Tak więc, teoretycznie, użytkownik klika przycisk plusa, następnie wpisuje adres e-mail i klika przycisk zapisu. Teraz toczymy w naszym zespole pewien spór o to, jak zweryfikować ten adres e-mail. Niektórzy programiści (w tym ja) uważają, że powinniśmy zweryfikować ten prosty ciąg za pomocą metody rozszerzającej: bool isValid = newEmail.IsEmail(); Twierdzą, że każdy mechanizm walidacji inny niż wywołanie pojedynczej metody byłby narzutem i antywzorcem (przeciwko zleceniodawcy KISS). Podczas gdy inni twierdzą, że ten e-mail powinien najpierw zostać dodany do nowej instancji DTO `UserEmail`, a następnie DTO powinien zostać przekazany do odpowiedniego walidatora: UserEmail userEmail = new UserEmail() { Email = newEmail }; bool isValid = new UserEmailValidator().Validate(userEmail); Druga grupa twierdzi, że walidacja pojedynczej właściwości nie ma sensu, ponieważ właściwość nie może istnieć samodzielnie. Dlatego zawsze powinniśmy sprawdzać poprawność obiektu, a nie właściwości (mam na myśli właściwości typu wartości, takie jak ciągi i liczby całkowite itp.). Szukałem, ale nie znalazłem dobrych zasobów w sieci na korzyść lub przeciw tym metodom. Jaką wadę może mieć każde podejście? Byłbym wdzięczny, gdyby ktoś wskazał mi właściwy kierunek i pokazał najlepsze praktyki w zakresie walidacji.


title: Odkrywanie eleganckich sposobów kodowania

text: Przeczytałem dzisiaj ten wątek na programistach i pomyślałem, że wygląda to na naprawdę elegancki sposób kodowania. Chciałbym odkryć bardziej zgrabne metody kodowania. Jakie są najlepsze sposoby odkrywania nowych, eleganckich sposobów kodowania? (Jestem już świadomy standardowych wzorców projektowych)


title: Do czego programiści są stworzeni w wolnym czasie w pracy?

text: Cóż, bez wcześniejszego doświadczenia zawodowego jestem całkowicie ignorantem, jak rzeczy dzieją się w firmach programistycznych. Chcę wiedzieć, do czego są stworzeni programiści, gdy nie ma nic do roboty? Rozważmy Facebooka lub Twittera. Teraz jest całkiem nieprawdopodobne, aby ludzie z Facebooka mieli na myśli coś lub inną funkcję do wdrożenia. Oczekuje się więc, że twórcy oprogramowania będą mieli trochę czasu, gdy nie ma nic do roboty. Czy mogą coś w tym zrobić?


title: Wzorzec obserwatora: „Sieć obserwatorów” – czy jest w ogóle używany?

text: Wpadłem na pomysł (który na pewno już istnieje), aby stworzyć coś w rodzaju „sieci obserwatorów/obiektów”. Chciałbym opisać, jak to działa, a następnie zadać kilka pytań na ten temat. Załóżmy, że mamy 5 obiektów: Obiekty **A** , **B** , **C** , **D** i **E**. Obiekty **D** i **E** muszą obserwować obiekty **A** , **B** i **C**. W przypadku zwykłego wzorca obserwatora zarówno **D**, jak i **E** zarejestrowałyby się jako obserwatorzy w **A** , **B** i **C**. Oznacza to, że zarówno **D**, jak i **E** musiałyby zarejestrować się trzy razy jako obserwatorzy, tworząc łącznie **sześć** relacji obserwator-podmiot. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/OR0ii.png) Pomysł polega na dodaniu kolejnego obiektu na środku, nazwijmy go Object **O**. Implementuje zarówno interfejs Observer, jak i Observable. Rejestruje się jako obserwator obiektów **A** , **B** i **C**. Obiekty **D** i **E** rejestrują się jako obserwatorzy do obiektu **O**. Ilekroć obiekty **A** , **B** i **C** powiadamiają obiekt **O** , obiekt **O** powiadamia swoich własnych obserwatorów - **D** i **E**. Tworząc w ten sposób rodzaj sieci. Ta sieć ma łącznie **pięć** relacji obserwator-podmiot. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/4LjjX.png) **Z mojego punktu widzenia ma to dwie główne zalety:** * **Mniej ważna korzyść:** rozwiązanie pozwala na mniej relacji obserwator-podmiot, a co za tym idzie (chyba) tworzy mniej złożoności systemu. W tym prostym opisie liczba relacji zmniejsza się tylko o jeden, ale im więcej obserwatorów i podmiotów, tym większe korzyści. * **Ważniejsza korzyść:** Proszę rozważyć aplikację z dwiema grupami obiektów, grupą A i grupą B. **Wszystkie obiekty z grupy A muszą obserwować wszystkie obiekty z grupy B.** Jeśli zdecydujemy się dodać obiekt do grupy B, niż używając zwykłego Observera musielibyśmy aktualizować dużo kodu, aby zarejestrować wszystkie obiekty z grupy A jako obserwatorów nowego obiektu. W przypadku rozwiązania „sieć” (które z pewnością ma inną nazwę) rejestrujemy tylko obiekt „środkowy” (obiekt **O** ) jako obserwator nowego obiektu w grupie B i wszystkich obiektów w grupie A zostanie powiadomiony, gdy nowy obiekt w grupie B zmieni stan. **Moje pytania:** 1. **Czy to rozwiązanie jest kiedykolwiek używane w profesjonalnych projektach?** Czy **kiedyś z nim** spotkałeś się** w użyciu? A może to tylko fajny pomysł, ale nigdy nie wykorzystany w praktyce? 2. Jakie są wady tego wzoru? 3. Czy ma więcej zalet, o których nie wiem? 4. Czy to ma nazwę?


title: Od czego zacząć uczyć się analizy systemów?

text: Chociaż nauczyłem się analizy systemów na studiach, czuję się nieaktualny. Wszystko, co naprawdę pamiętam, to pewne aspekty SDLC, które, jak sądzę, są trochę passé. Przez ostatnie pięć lat byłem na etapie implementacji procesu rozwoju i chcę zbadać design i być może zrobić kilka własnych projektów. Mam więc dwa pytania. Jaka jest najpopularniejsza metodologia projektowania? A jaka książka byłaby dobrym miejscem do rozpoczęcia dla kogoś, kto chce nauczyć się tej metodologii. Znam całkiem sporo metodologii i wzorców (PRISM, MVVM, UML itp.), ale bardzo trudno mi wyobrazić sobie cały proces projektowania. Czy istnieje strona internetowa, która oferuje przykładowe dokumenty wymagań? To najtrudniejsza część rozpoczynania własnych projektów, to znalezienie czegoś do zrobienia.


title: Pytania dotyczące testów jednostkowych i programowania opartego na testach

text: Pracuję na witrynie ASP.NET MVC, która jako jedna z funkcji wykonuje stosunkowo złożone obliczenia. Funkcjonalność ta została opracowana jakiś czas temu (zanim zacząłem pracę nad stroną) i pojawiły się wady polegające na tym, że obliczenia nie są poprawnie obliczane (w zasadzie te obliczenia są stosowane do każdego użytkownika, który ma na swoim koncie określone flagi itp.). Notatka; defekty te zostały do tej pory zaobserwowane tylko przez użytkowników i nie zostały jeszcze zbadane w kodzie podczas debugowania. **Moje pytania to:** * Ponieważ wszystkie istniejące testy jednostkowe przeszły pomyślnie i dlatego nie wskazują, że zgłoszone defekty istnieją; czy to sugeruje, że oryginalny kod, który został zaimplementowany jest niepoprawny? tj. albo wymagania były nieprawidłowe i zostały odpowiednio zakodowane, albo po prostu nie zostały zakodowane tak, jak miały być zakodowane? * Jeśli stosuję podejście TDD, czy zlekceważyłbym istniejące testy jednostkowe, ponieważ nie pokazują one żadnych problemów z funkcjonalnością obliczeń - i zaczynam od wykonania kilku nieudanych testów jednostkowych, które testują / udowadniają, że występują te problemy, i następnie dodać kod, który sprawi, że przejdą? Notatka; jeśli jest to po prostu błąd, który można znaleźć podczas debugowania kodu, czy testy jednostkowe muszą być aktualizowane, ponieważ już przechodzą?


title: Potrzeba jawnej konwersji typu w C#

text: Rozważmy następujący kod: DerivedClass drbObj = (DerivedClass)obj; Tutaj `obj` jest typu `Object` i jest to uzasadnione, ponieważ Object jest typem bazowym każdej klasy w C#. Tutaj, skoro typ `derObj` jest zdefiniowany w czasie kompilacji, jaka jest potrzeba jawnego użycia tutaj konwersji typów. Czy kompilator nie może sam przewidzieć, że będzie to klasa `DerivedClass`. Rozumiem, że typ konwersji nie musi odpowiadać typowi `Derived`, ale ze względów praktycznych będzie tylko tak użyteczny jak typ `Derived`. Czy ktoś mógłby wyjaśnić na małym, hipotetycznym przykładzie, dlaczego jawna konwersja typu jest konieczna, gdy odwołanie typu Object jest przypisywane do klasy pochodnej. Z tego, co wiem, w C nie ma potrzeby wykonywania jawnej konwersji typu z `void*` na dowolny wskaźnik, a kompilator może to obsłużyć w oparciu o typ wskaźnika, do którego przypisywana jest przekonwertowana wartość.


title: Jak mogę przezwyciężyć problem komunikacyjny (język ustny)

text: Jestem młodszym programistą mieszkającym w Korei. Myślę, że jestem dość namiętna i aktywna. i chcę być jednym ze znanych deweloperów na całym świecie. Aby rozszerzyć swój obszar, staram się dołączyć do Projektów Open Source. Ale problem jest zawsze _angielski_. Często nie rozumiem, co członek zespołu mówi na kanale IRC. Jak wszyscy wiecie, do rozwiązania problemu musimy szczegółowo omówić. Więc angielski jest dla mnie dużym problemem. A wśród moich członków Opensource nie ma orientu. Jak mogę rozwiązać ten problem z komunikacją? jeśli znasz kogoś, kto może przezwyciężyć ten problem, proszę o opinie. Z góry dziękuję.


title: Jak udostępnić różne pliki w repozytorium git różnym osobom?

text: W jednym katalogu z folderem głównym Git mam kilka plików. Pracuję nad jednym z tych plików, X.py, z moją przyjaciółką Alice. Inne pliki, nad którymi pracuję z innymi osobami. Chcę, aby Alice (i wszyscy inni) mieli dostęp do X.py. Jednak chcę, aby Alice miała dostęp tylko do X.py. Jak mogę to osiągnąć za pomocą Git? Czy istnieje sposób na podzielenie katalogu na dwa repozytoria? Brzmi to dość nieporęcznie. Może mógłbym dodać zdalne repozytorium, do którego Alicja ma dostęp, zawierające X.py?


title: Czy trzeba rozumieć, co się dzieje na poziomie sprzętowym, aby być dobrym programistą?

text: Jestem programistą samoukiem, na wypadek gdyby odpowiedź na to pytanie znalazła się w CS 101. Nauczyłem się i używałem wielu języków, głównie na własny użytek, ale od czasu do czasu do pracy zawodowej. Wygląda na to, że zawsze wpadam na tę samą ścianę, kiedy mam problemy z programowaniem. Na przykład właśnie zadałem pytanie na innym forum, jak obsługiwać wskaźnik do tablicy, który został zwrócony przez funkcję. Początkowo myślę, że po prostu nie znam odpowiedniej techniki, którą projektanci C++ przygotowali, aby poradzić sobie z tą sytuacją. Ale z odpowiedzi i dyskusji, które następują, widzę, że tak naprawdę nie rozumiem, co się dzieje, gdy coś jest „zwracane”. Jak głęboki poziom zrozumienia procesu programowania musi osiągnąć dobry programista?


title: metoda pozwalająca mi na swobodne modyfikowanie moich klas, ale czyniąca je niezmiennymi dla innych?

text: Tworzę modelową część architektury MVC. Moja jedna klasa zapewni wszystkie dostępy, aby umożliwić pobranie stanu systemu. Chcę, aby większość tego stanu była niezmienna, ponieważ nie powinna być zmieniana i nie chcę, aby ktokolwiek, kto ma dostęp do mojego modelu, był w stanie złamać stan, dokonując głupiej zmiany. Jednak obiekty reprezentujące stan mają nieco strukturę drzewa. obiekt A zawiera zbiór B, który zawiera zbiór obiektów C, które zawierają zbiór obiektów D itd. itd. Ze względu na charakter tego, w jaki sposób muszę pobierać dane, nie mogę zbudować struktury od dołu do góry; najniżej położony „obiekt chid” zostanie wygenerowany po zakończeniu wszystkich pozostałych. To sprawia, że budowanie niezmiennych obiektów w intuicyjny sposób jest raczej niewygodne. Chcę dodać zestaw jako ostatnią fazę budowania, ale nie mogę, jeśli już zbudowałem niezmienne obiekty. Znam trzy podejścia, ale nie jestem pewien, czy którekolwiek mi się podobają. Jednym z nich jest wzorzec budowniczy, ale śledzenie wszystkich budowniczych skomplikowanej struktury, dopóki nie skończę, wydaje się być bardzo brzydkie. Drugi to rodzaj metody „klonowania”, która buduje nowy niezmienny obiekt przez klonowanie starego, ale dodanie do niego nowo dostarczonego zestawu (jak nazywa się ten wzorzec ponownie?). Staje się to brzydkie, gdy próbuję dodać element potomny do zestawu, ponieważ muszę przebudować całe drzewo za pomocą „nowych” niezmiennych obiektów, aby dodać jedną wartość. Trzecim i jak dotąd najłatwiejszym rozwiązaniem jest po prostu pozbycie się struktury drzewa i zmuszenie ich do wywołania mojego modelu, aby uzyskać żądane dane. więc zamiast wywoływać myObject.getChildren, wywołują Model.getObjectChildren (myObject). Ten zadziała, ale cholera, chciałem mieć ładną strukturę drzewa dla mojego niezmiennego stanu. Czy jest jakiś inny sposób na wygodne zbudowanie mojego stanu w sposób, w którym mój Model może dowolnie modyfikować stan podczas budowania; ale nadal są niezmienne, gdy w końcu zostaną opublikowane w kontrolerze? ps. Biegam w javie, jeśli to ma znaczenie.


title: W jaki sposób skutecznie utrzymujesz działanie testów podczas przeprojektowywania?

text: Dobrze przetestowana baza kodu ma wiele przykładów, ale testowanie pewnych aspektów systemu daje bazę kodu, która jest odporna na niektóre rodzaje zmian. Przykładem jest testowanie pod kątem określonych danych wyjściowych, np. tekstu lub HTML. Testy są często (naiwnie?) pisane, aby oczekiwać określonego bloku tekstu jako danych wyjściowych dla niektórych parametrów wejściowych lub w celu wyszukania określonych sekcji w bloku. Zmiana zachowania kodu w celu spełnienia nowych wymagań lub ponieważ testowanie użyteczności spowodowało zmianę interfejsu, wymaga również zmiany testów — być może nawet testów, które nie są specyficznymi testami jednostkowymi dla zmienianego kodu. * Jak radzisz sobie z pracą polegającą na znalezieniu i przepisaniu tych testów? Co zrobić, jeśli nie możesz po prostu „uruchomić ich wszystkich i pozwolić frameworkowi je uporządkować”? * Jakie inne rodzaje testowanego kodu powodują zwykle kruche testy?


title: Testowanie pod kątem równoważności dwóch programów w różnych architekturach (sekwencyjne, wieloprocesorowe, wielordzeniowe)

text: Znalazłem pytanie, z którym mam problem. Wygląda to następująco: Rozważmy program P :: x := 1; y := 1; z := 1; u := 0; oraz program Q :: x,y,z,u := 1,1,1,1; u := 0; Które z poniższych jest prawdziwe? (tylko 1 opcja jest poprawna) 1. P i Q są równoważne dla procesorów sekwencyjnych. 2. P i Q są równoważne dla wszystkich modeli wieloprocesorowych. 3. P i Q są równoważne dla wszystkich maszyn wielordzeniowych. 4. P i Q są równoważne dla wszystkich sieci komputerów. 5. Żadne z powyższych. Na pierwszy rzut oka wydaje się, że opcja (1) jest prawdziwa. Ale aby P & Q były równoważne, ich odpowiednie instrukcje muszą być wykonywane sekwencyjnie, same mogą być wykonywane w dowolnej kolejności (nawet równolegle). Dotyczy to opcji (1) i (2) [lub nawet opcji (3)]. > Np.: P jest wykonywane na procesorze-1 i Q jest wykonywane na procesorze-2 > (równolegle), ale poszczególne instrukcje są wykonywane > sekwencyjnie na odpowiednich procesorach. W takim przypadku oba są > równoważne, co sprawia, że opcja (2) jest prawdziwa. Tu pojawia się dwuznaczność. Czy ktoś może mi pomóc?


title: Ruby on Rails: Konwersja aplikacji Rails 3 do Rails 2?

text: Niedawno nauczyłem się ruby on rails używając ruby 1.9.2 i rails 3 korzystając z samouczka Michaela Hartla. Tworzę aplikację, którą chciałem umieścić na moim istniejącym serwerze. Jednak stwierdziłem, że nadal nie obsługują szyn 3, ponieważ łamie to kompatybilność z kundlem. Moje pytanie brzmi: jak trudno będzie przenieść całą aplikację Rails 3 na Rails 2, jeśli zajdzie taka potrzeba? Należy pamiętać, że chociaż rozumiem już dość dobrze rails 3, nigdy nie korzystałem z rails 2 i nie mam pojęcia o różnicach między nimi.