title: Jak szybkie prototypowanie wpisuje się w zwinną metodologię?

text: Pracuję dla dużej firmy, co dyktuje stosowanie zwinnych procesów. Na przykład w naszych projektach korzystamy z usług opartych na chmurze, które są specjalnie ukierunkowane na zarządzanie zwinnym rozwojem. Konkretna grupa inżynierska, dla której pracuję, nie tworzyła tradycyjnie oprogramowania (zamiast tego pomagamy kierować projektami ze znacznie bardziej „z lotu ptaka”), ale to się zmienia. Mamy szeroką gamę nadchodzących/planowanych projektów oprogramowania, które są w większości zorientowane na dane - np. będziemy monitorować, zbierać, agregować i raportować dane. Inne zadania obejmują automatyzację za pomocą specjalistycznego sprzętu i różnego rodzaju (wielopoziomowych) architektur klient/serwer. Mam asystować w procesie zatrudniania kilku osób i formułowania wielu naszych planów na przyszłość. Moje pytanie brzmi, czy robienie szybkiego prototypowania (kodu jednorazowego) pasuje do filozofii agile. Na przykład kocham Pythona i jego szeroką gamę pakietów. Widzę możliwość bardzo szybkiego wdrożenia wielu naszych pomysłów za pomocą przepływu pracy opartego na Pythonie. Myślę jednak, że będzie wiele opinii, że Python nie jest „jakości korporacyjnej” i większość tej pracy musiałaby zostać napisana od nowa w Javie lub może w C++. Jednak stworzenie prototypów Pythona dałoby nam dużo energii za nasze pieniądze, umożliwiając nam szybkie dostarczanie rzeczywistych wyników. Czy udało Ci się włączyć szybkie prototypowanie – miejmy nadzieję w Pythonie – do solidnego, zwinnego przepływu pracy w środowisku korporacyjnym?


title: Najlepsze praktyki JIRA Ticket: Jak napisać dobry bilet JIRA

text: „Używamy” JIRA jako naszego systemu biletowego, ale „używanie” jest naprawdę trudne. Nie mamy żadnych standardów, szablonów, dokumentacji „najlepszych praktyk” do napisania prawidłowego zgłoszenia JIRA. Więc jestem na czele ruchu, aby stworzyć taki dokument. To jest złe. Naprawdę źle. Czasami reporter po prostu kopiuje-n-wkleja ślad stosu i przesyła zgłoszenie bez podawania kontekstu, historii lub wskazówek do odtworzenia. Zastanawiałem się, czy ktoś miał jakieś dobre dane wejściowe dla jakiego formatu/szablonu moglibyśmy użyć i wymusić, aby nigdy więcej nie dostałem przydzielonego mi kiepsko napisanego biletu! Z góry dziękuję!


title: Zalecane wytyczne dotyczące deklarowania zmiennych bash/sh

text: Od jakiegoś czasu programuję w BASH i skrypty, które piszę, zaczynają się komplikować. Zdałem sobie sprawę, że zacząłem wprowadzać pewne nawyki z C/C++ i chciałem uzyskać potwierdzenie, czy muszę zerwać z obecnymi nawykami, czy nie. Powodem jest to, że nie wszystkie języki programowania są takie same i należy ich używać, aby wykorzystać ich mocne strony. **Using Variables** function() { #declaration block runCommand= for string w "$@"; do runCommand="$runCommand $string" done } vs function() { dla ciągu w "$@"; do runCommand="$runCommand $string" done } **Co jest zalecane dla BASH/SH iz jakich powodów?** Obecnie odsyłam do następujących witryn. http://lug.fh-swf.de/vim/vim-bash/StyleGuideShell.en.pdf http://stackoverflow.com/questions/15610794/bash-coding-conventions http://wiki.bash-hackers. org/scripting/style **Edytuj: Moje pytanie było trochę niejasne, więc trochę zmieniłem przykład kodu.**


title: Stwórz system oparty na zachowaniu/komponentach do gier

text: ## Tło Zajmuję się tworzeniem gier jako hobby i szukam lepszego sposobu na ich projektowanie. Obecnie korzystam ze standardowego podejścia OOP (od 8 lat zajmuję się rozwojem przedsiębiorstw, więc to przychodzi naturalnie). Weźmy na przykład publiczną klasę "baddie" Baddie:AnimatedSprite //(lub w razie potrzeby StaticSprite, która dziedziczy Sprite) { //baza sprite będzie miała takie rzeczy, jak jakiej tekstury użyć, //jaka jest aktualna pozycja, baza Update/ Metody Draw/GetInput itd.. //AnimatedSprite zawiera pomocniki do animowania gracza, podczas gdy //StaticSprite to tylko taki, który narysuje dowolną teksturę } ## Problem Powiedzmy, że tworzę platformówkę 2D i potrzebuję baddie, aby móc skakać. Zazwyczaj dodaję odpowiedni kod w metodach Update/GetInput. Następnie, jeśli będę musiał sprawić, by gracz czołgał się, schylał, wspinał itp., kod tam zostanie. Jeśli nie jestem ostrożny, te metody są zaśmiecone, więc w końcu tworzę pary metod, takie jak `CheckForJumpAction(Input input)` i `DoJump()` `CheckforDuckAction(Input input)` i `DoDuck()`, aby GetInput wyglądało jak public void DoInput(Input input) { CheckForJumpAction(input); CheckForDuckAction(dane wejściowe); } i Update wygląda jak public void Update() { DoJump(); DoKacz(); } Jeśli pójdę i stworzę _inną_ grę, w której gracz musi skakać i robić uniki, zwykle przechodzę do gry, która ma tę funkcjonalność i kopiuję ją. Brudny, wiem. Właśnie dlatego szukam czegoś lepszego. ## Rozwiązanie? Bardzo podoba mi się to, że Blend ma zachowania, które mogę dołączyć do elementu. Myślałem o użyciu tej samej koncepcji w moich grach. Spójrzmy więc na te same przykłady. Utworzyłbym bazowy obiekt Behavior public class Behavior { public void Update() Public void GetInput() } I mogę za jego pomocą tworzyć zachowania. `JumpBehavior:Behavior` i `DuckBehavior:Behavior` Mogę następnie dodać kolekcję zachowań do bazy Sprite i dodać to, czego potrzebuję do każdej encji. public class Baddie:AnimatedSprite { public Baddie() { this.behaviors = new Behavior[2]; this.behaviors[0] = new JumpBehavior(); //etc... } public void Update() { //behaviors.update } public GetInput() { //behaviors.getinput } } Więc teraz, jeśli chcę używać Jump and Duck w wielu grach, mogę po prostu przynieść zachowania ponad. Mógłbym nawet zrobić bibliotekę dla zwykłych. ## Czy to działa? To, czego nie potrafię rozgryźć, to jak podzielić się między nimi stanem. Patrząc na Jump i Duck, oba wpływają nie tylko na bieżącą część rysowanej tekstury, ale także na stan gracza. (Skok z czasem zastosuje coraz mniejszą siłę w górę, podczas gdy kaczka po prostu zatrzyma ruch, zmieni teksturę i rozmiar kolizji baddie. Jak mogę to powiązać, aby działało? Czy powinienem utworzyć właściwości zależności między zachowaniami?Czy powinienem mieć każde zachowanie _wiedzieć_ o rodzicu i bezpośrednio je modyfikować?Myślałem, że jestem w stanie przekazać delegata do każdego zachowania w celu wykonania, gdy zostanie wyzwolony.Jestem pewien, że mam więcej problemów przyglądam się, ale głównym celem jest to, abym mógł łatwo ponownie wykorzystać te zachowania między grami i bytami w tej samej grze. Więc przekazuję to Tobie. Chcesz wyjaśnić, jak/jeśli można to zrobić? lepszy pomysł? Jestem uszami.


title: Czy powinienem używać domyślnego modyfikatora dostępu, czy nie -- Praktyka kodowania?

text: Normalnie przy tworzeniu nowych zmiennych globalnych nie określam jej modyfikatora dostępu. Więc jak na java przyjmie domyślny modyfikator dostępu do właściwości. Kiedy potrzebuję uzyskać dostęp do tej zmiennej poza domyślnym zakresem, zmieniam jej modyfikator dostępu, w przeciwnym razie zostawiam ją bez zmian. Więc moje pytanie brzmi: "_Czy robię to we właściwy sposób? Czy to normalne, że mają domyślne zmienne dostępu? Czy powinienem dla nich używać prywatnych/publicznych? Czy to dobra praktyka kodowania, aby nie używać modyfikatorów dostępu?_ "


title: Potrzebujesz pomocy w modelowaniu relacji Użytkownik/Projekt/Zadanie

text: Tworzę więc bardzo prostą aplikację do zarządzania projektami/zadaniami w Laravel 4 i nie jestem pewien, jak te relacje będą działać. Mam model `Project`, `Task` i `User`. „Użytkownik” może być właścicielem „Projektu” lub być członkiem „Projektu”. „Zadanie” należy do „Użytkownika” i „Projektu”. Jaki jest najlepszy sposób zdefiniowania relacji `Użytkownik`/`Projekt`? Mógłbym mieć wiele do wielu relacji od „Użytkownika” do „Projektu” i użyć tabeli przestawnej „project_user” do powiązania tych dwóch. Gdybym chciał ustalić, czy projekt jest właścicielem `Użytkownika`, mógłbym dodać pole do `Project`u o nazwie `owner` i wypełnić je identyfikatorem `User`, który go utworzył. Wydaje się to jednak niewłaściwe, ponieważ normalnie ten związek byłby modelowany w związku należy do? Każda rada jest bardzo mile widziana :)


title: Najlepsze praktyki pracy z wieloma programistami

text: Myślę, że większość programistów woli pracować solo nad projektami, nawet jeśli nie jest to wykonalne. Wolę pracować sam, nawet poza projektami programistycznymi. Podczas pracy z innymi programistami zazwyczaj stwierdzam, że * nie podoba mi się ich formatowanie lub konwencje (takie jak nazwy zmiennych lub metod) * nie rozumiem dobrze, jak działa kod, który napisali, co miałbym, gdyby Sam to napisałem * Myślę, że jest lepszy lub bardziej wydajny sposób na zaimplementowanie tego, co napisali. Jakie są najlepsze sposoby na pokonanie tych problemów i innych podobnych problemów zespołowych w projekcie z 4-5 programistami?


title: Jak zrobić, aby utworzyć część ViewModel swoich projektów MVVM?

text: Czasami, kiedy planuję stworzyć program używający tego wzorca architektonicznego, mam wiele trudności, gdy jestem w fazie View Model. Używam WAF Framework do opracowania tego wzorca architektonicznego. Nadal jestem nowicjuszem. Zanim zaczniesz, czy tworzysz cały projekt UML, czy używasz innego narzędzia, które Ci pomoże? Jak radzisz sobie z projektowaniem swoich modeli ViewModels?


title: Jaka jest różnica między HaXe NME a OpenFL?

text: Na http://en.wikipedia.org/wiki/NME_%28framework%29 znajduje się informacja: > NME to platforma gier i aplikacji typu open source, która obsługuje iOS, > Android, BlackBerry, Microsoft Windows, Mac OS X, Linux, Flash Player i > HTML5, ze starszą zgodnością z webOS. Na stronie OpenFL ( http://www.openfl.org/about/overview/ ) są następujące informacje: > OpenFL to zestaw programistyczny, który zapewnia środowisko do > tworzenia szybkich, natywnych gier i aplikacji na iOS, Androida, BlackBerry , > Windows, Mac, Linux, Flash i HTML5. Link do strony HaXe NME (na wikipage), przekierowuje na stronę OpenFL, a na tej stronie nie ma żadnych informacji o HaXe NME, wygląda na to, że nie ma własnej strony i dokumentacji. Mam wrażenie, że obie robią trochę to samo - umożliwiają łatwą kompilację na tych samych platformach, ale są wyraźnie dwiema różnymi bibliotekami w haxelibie, więc - jaka jest między nimi różnica? Jak się do siebie odnoszą?


title: Gdzie umieścić informacje o licencji oprogramowania innych firm?

text: Gdy użytkownik zainstaluje moją aplikację, gdzie w katalogu instalacyjnym aplikacji powinienem umieścić informacje dotyczące licencji oprogramowania firm trzecich (np. FOSS)? Czy powinienem po prostu dołączyć go do mojej umowy EULA? Czy istnieje jakaś konwencja lub standard, którego powinienem przestrzegać, aby można go było łatwo skanować za pomocą skryptów wykrywających licencje?


title: Kiedy należy zwiększyć numer wersji?

text: Nie uczyłem się programowania w szkole i nie pracuję jako (zawodowy) programista, stąd wiele podstaw jest dla mnie niejasnych. To pytanie próbuje wyjaśnić jeden z nich. * * * Teraz załóżmy, że mam problemy `#1`, `#2` i `#3` w moim Trackerze problemów, które zostały poprawione/ulepszone dla wersji `1.0.0` i że ostatni (stabilny) wersja to `0.9.0`. Kiedy należy dokonać inkrementacji do wersji `1.0.0` ? Kiedy a) **tylko jeden** z wymienionych powyżej problemów jest zamknięty lub b) kiedy **wszystkie** problemy związane z wersją `1.0` są zamknięte? Który z nich jest _właściwym_ sposobem na zrobienie tego? A mówiąc „właściwie” mam na myśli to, co jest obecnie używane w branży.


title: Korzyści płynące z cyklu rozwoju szybkiego wydania przyjętego przez Mozilla Foundation

text: Jakie są realne korzyści płynące z cyklu rozwoju szybkiego wydania przyjętego przez Mozilla Foundation w porównaniu z przyjętą wcześniej strategią?


title: Jak organizować prezenterów/widoki dla prezentera widoku modelu?

text: Mamy kilkaset plików ASPX (może być więcej, w tysiącach, których właściwie nie policzyłem), które obecnie nie używają żadnej architektury i mają dostęp do logiki/danych w plikach związanych z kodem. Idąc dalej, chcę wypchnąć za pomocą `Model-View-Presenter` (prawdopodobnie wersja "Kontroler nadzoru"), aby spróbować uzyskać czystą separację. Jakie byłoby najlepsze podejście do logicznego rozmieszczenia tych plików w mojej bibliotece prezentacji? Większość plików aspx nie jest zorganizowana i po prostu wrzucona do katalogu głównego, ale niektóre są pogrupowane (lub są źle pogrupowane, np. pliki związane z klientami znajdują się w folderze o nazwie „zamówienia”). Czy powinienem próbować grupować prezenterów i widoki według modułów (np. mieć `Prezentacja.Widoki.Klienci` i/lub `Prezentacja.Klienci`)? Wydaje się, że poprawne podejście **nie** polega na wrzuceniu setek plików `XPresenter` i `XView` do biblioteki klas.


title: Czy licencja „Bezpłatna do użytku niekomercyjnego” jest zgodna z licencją GNU GPLv3?

text: Chciałbym zapytać, czy jakiekolwiek materiały, które mają licencję „Bezpłatne do użytku niekomercyjnego”, mogą być używane w oprogramowaniu na licencji GNU GPLv3. Moim zdaniem jest „darmowa do użytku niekomercyjnego”, a GNU GPLv3 jest również niekomercyjna, więc może być używana w oprogramowaniu, prawda? Zadaję to pytanie, ponieważ nie ma wyraźnej ani wyraźnej deklaracji dotyczącej licencji „BEZPŁATNE DO UŻYTKU NIEKOMERCYJNEGO”....


title: Jaki jest właściwy termin dla funkcji odwrotnej do konstruktora — aby odpakować wartość z typu danych?

text: **Edytuj:** trochę przeformułuję pytanie. Najwyraźniej narobiłem trochę zamieszania, ponieważ nie zdawałem sobie sprawy, że termin destruktor jest używany w OOP do czegoś zupełnie innego - jest to funkcja wywoływana, gdy obiekt jest niszczony. W programowaniu funkcjonalnym staramy się unikać mutable state, więc nie ma takiego odpowiednika. (Dodałem właściwy znacznik do pytania.) Zamiast tego zauważyłem, że pole rekordu do rozpakowania wartości (zwłaszcza w przypadku typów danych jednowartościowych, takich jak `newtype`s) jest czasami nazywane _destructor_ lub być może _deconstructor_. Na przykład, weźmy (w Haskell): newtype Wrap = Wrap { unwrap :: Int } Tutaj `Wrap` jest konstruktorem, a `unwrap` jest czym? Pytania to: * **Jak nazywamy `unwrap` w programowaniu funkcjonalnym?** Dekonstruktor? Burzyciel? A może przez inny termin? * Aby wyjaśnić, **czy ta/inna terminologia ma zastosowanie do innych języków funkcjonalnych** , czy jest używana tylko w Haskell? * Być może również, **czy jest jakaś terminologia na to w ogóle, w językach niefunkcjonalnych**? * * * Widziałem oba terminy, na przykład: > ... Najczęściej dostarcza się inteligentne konstruktory i **destruktory** dla > tych, aby ułatwić sobie z nimi pracę. ... na Haskell wiki, lub > ... Ogólnym tematem jest tu połączenie konstruktora - **dekonstruktor** par > jak ... na Haskell wikibook (tutaj prawdopodobnie chodzi o nieco bardziej ogólny sens), lub > > newtype DList a = DL { unDL :: [a] -> [a] } > > > Funkcja unDL jest naszym **dekonstruktorem** , który usuwa konstruktor DL >. ... w prawdziwym świecie Haskell.


title: API Wordpress i Inksoft

text: Jestem nowy w tym całym projekcie strony internetowej i bit API. Mój mąż kupił licencję na program InkSoft. Ich strona nie oferuje zbyt wiele możliwości dostosowania, więc zdecydowaliśmy się kupić witrynę Wordpress.org hostowaną przez godaddy. Biorąc to wszystko pod uwagę, staram się znaleźć sposób, aby produkty znajdujące się na stronie InkSoftu, które uzyskują informacje z magazynów dostawców (w przypadku takich rzeczy, jak zapasy) i umieścić je na stronie Wordpress. W InkSoft jest obszar, w którym mogę uzyskać dostęp do „Store API...API feeds”. Myślę, że jestem po prostu zdezorientowany, gdzie umieścić tego typu rzeczy w witrynie WordPress lub jak je tam umieścić? Jeśli przejdę do obszaru „Produkty” w tym interfejsie API Sklepu, otrzymam adres URL, który zajmuje się produktami, a także OGROMNĄ listę rzeczy, które zawierają takie rzeczy, jak: <ProductCategoryList> <vw_product_categories product_category_id="1000076 " name="Najpopularniejsze" path="Najpopularniejsze" thumburl_front="REPLACE_DOMAIN_WITH/images/publishers/2433/ProductCategories/Most_Popular/80.gif" /> Jak korzystać z tych wszystkich rzeczy?


title: Kiedy używać dziedziczenia czy kompozycji/agregacji?

text: Ogólnie rzecz biorąc, jak mam zdecydować, czy uczynić klasę superklasą, czy uczynić ją członkiem danych prywatnych innej klasy? Na przykład, biorąc pod uwagę dwie klasy, w jaki sposób można zdecydować, czy należy to zrobić: public class Sprite { private BaseImage image; ... lub tak: public class Sprite extends BaseImage { ... Funkcjonalnie znam różnicę: w drugim przypadku każda metoda korzystająca z instancji klasy Sprite będzie miała dostęp do bazowego zachowania BaseImage. W pierwszym przypadku zachowanie obiektu BaseImage jest ukryte. Ale z punktu widzenia projektowania, co jest lepsze w jakich przypadkach?


title: Jak mogę jednocześnie efektywnie zarządzać długoterminowym rozwojem funkcji i krótkoterminowym naprawianiem błędów?

text: Mamy ogromną bazę kodów C i C++. Planowane jest dodanie nowej funkcji do istniejącego systemu, ale powinno to nastąpić dopiero po 3-4 miesiącach. Dlatego szukamy najlepszych możliwych opcji. 1. Rozgałęzienie jest jedną z opcji, ale wiąże się to z przeniesieniem poprawek błędów do gałęzi funkcji z łącza głównego. 2. Pozostając na samym pniu, użyj `ifdef`, aby odróżnić kompilację nowej funkcji. 3. Podziel pliki źródłowe/nagłówkowe, które zawierają nową funkcję, edytuj pliki makefile, aby wybrać właściwy plik. Rozumiem, że to pytanie jest dość niejasne i tylko osoby nad nim pracujące mogą dobrze decydować o dalszej drodze. Ale szukam uogólnionych opinii w takiej sprawie.


title: Jak wygląda proces tworzenia aplikacji Android SIP?

text: Chcę zbudować aplikację Android SIP i szukam inspiracji w csipsimple. Używam: * Linux, * Eclipse 3.7, * Android sdk & ndk, * swig. Jakie są fazy lub kroki rozwoju takiej aplikacji? A jaka byłaby odpowiednia licencja? Nie proszę o kod, ale o przegląd pracy deweloperskiej dla takiej aplikacji.


title: Tworzenie maksymalnie powtarzalnego poddrzewa w drzewie obiektów

text: Próbuję rozwiązać problem znalezienia maksymalnie powtarzalnego poddrzewa w drzewie obiektów. Przez drzewo obiektów rozumiem drzewo, w którym każdy liść i węzeł ma swoją nazwę. Każdy liść ma typ i wartość tego typu skojarzoną z tym liściem. Każdy węzeł ma zestaw liści/węzłów w określonej kolejności. Biorąc pod uwagę drzewo obiektów, które - wiemy - ma w sobie powtarzające się poddrzewo. Przez powtarzające się rozumiem 2 lub więcej poddrzew, które są podobne we wszystkim (nazwy/typy/kolejność podelementów) oprócz wartości liści. Żadne węzły/liście nie mogą być współdzielone między drzewami podrzędnymi. Problem polega na zidentyfikowaniu tych poddrzew o maksymalnej wysokości. Wiem, że wyczerpujące poszukiwania mogą załatwić sprawę. Raczej szukam bardziej efektywnego podejścia.


title: Algorytm ustalania kolejności rozstrzygania majątkowego

text: Mam listę właściwości, które są powiązane z jakimś wyrażeniem tekstowym: > właściwość z, wyrażenie '[x] + [y]' > właściwość x, wyrażenie '[y] + 1' > właściwość y, wyrażenie '1' aby rozwiązać z, muszę najpierw rozwiązać x i y. Moje obecne przybliżenie jest następujące: var solved = new List<string>(); while (properties.Count() > 0) { var property = properties.Dequeue(); var dependencies = FindDependencies(property) .Where(x => !solved.Contains(x)) .ToList(); // brak nierozwiązanych zależności, rozwiąż to if (dependencies.Count == 0) { property.Solve(); rozwiązane.Dodaj(właściwość.Nazwa); } // nie można teraz rozwiązać, dodaj na koniec kolejki else { properties.Enqueue(); } } To przybliżenie ma dwa problemy: a) Myślę, że nie jest optymalne, ponieważ nierozwiązana właściwość jest dodawana na końcu, być może dałoby się ją rozwiązać wcześniej i w takim przypadku właściwości zależne również nie byłyby odkładane. b) Nie można uzyskać żadnego dobrego warunku wyjścia, gdy jest nierozwiązywalny (co oznacza, że istnieje odwołanie cykliczne). Czy ktoś rozpoznaje tutaj istniejący, dobrze znany algorytm, lub ma pomysły, jak go zoptymalizować?


title: gdzie mogę znaleźć omówienie znanych wzorców projektowych „architektur systemów wielowątkowych”?

text: Używając C#, zajmuję się wielowątkowym programowaniem od około 5 lat i uważam się za dość biegłego (napisałem własną kolejkę bez blokad i równoległy framework zadań, zanim Microsoft stworzył TPF). Jednak niezwykle trudno jest mi znaleźć informacje na temat praktycznych wzorców projektowania systemów wielowątkowych w dowolnym miejscu. Istnieje kilka dobrych zasobów na temat algorytmów i kolekcji niskiego poziomu, ale niewiele na temat projektowania systemu. Więc na pytanie ktoś wie gdzie można znaleźć te informacje?


title: Czy w dokumentacji XML właściwości konieczne jest "Gets or sets .."?

text: Szukam rekomendacji najlepszych praktyk dla komentarzy XML w C#. Podczas tworzenia właściwości wygląda na to, że oczekiwana dokumentacja XML ma następującą postać: /// <summary> /// Pobiera lub ustawia identyfikator, który jednoznacznie identyfikuje tę instancję <see cref="User" />. /// </summary> public int ID { get; ustawić; } Ale ponieważ podpis właściwości już mówi jakie operacje są dostępne dla zewnętrznych klientów klasy (w tym przypadku są to zarówno `get` jak i `set`) wydaje mi się, że komentarze są zbyt gadatliwe i być może następujące wystarczy: /// <summary> /// Identyfikator, który jednoznacznie identyfikuje tę instancję <see cref="User" />. /// </summary> public int ID { get; ustawić; } Microsoft używa pierwszej formy, więc wydaje się, że jest to dorozumiana konwencja. Ale myślę, że ten drugi jest lepszy z powodów, które podałem. Rozumiem, że to pytanie jest adeptem bycia oznaczonym jako niekonstruktywne, ale ilość właściwości, które trzeba komentować, jest ogromna i uważam, że to pytanie ma tu prawo być. Będę wdzięczny za wszelkie pomysły lub linki do oficjalnych zalecanych praktyk.


title: Użycie NotImplementedException

text: Czy rzucanie `NotImplementedException` dla kodu, którego jeszcze nie napisałeś, jest uważane za złą praktykę? Być może komentarze TODO byłyby uważane za bezpieczniejsze?


title: Jaka jest dobra strategia wiązania obiektów widoku z obiektami modelu w C++?

text: Wyobraź sobie, że mam bogaty model danych, który jest reprezentowany przez hierarchię obiektów. Mam również hierarchię widoków z widokami, które mogą wyodrębnić wymagane dane z obiektów modelu i wyświetlić dane (i umożliwić użytkownikowi manipulowanie danymi). W rzeczywistości może istnieć wiele hierarchii widoków, które mogą reprezentować model i manipulować nim (np. widok ogólny-szczegółowy i widok bezpośredniej manipulacji). Moje obecne podejście do tego polega na tym, że warstwa kontrolera przechowuje odwołanie do bazowego obiektu modelu w obiekcie widoku. Obiekt widoku może następnie pobrać bieżące dane z modelu do wyświetlenia i wysłać komunikaty obiektu modelu w celu zaktualizowania danych. Obiekty widoku są efektywnie obserwatorami obiektów modelu, a obiekty modelu emitują powiadomienia, gdy zmieniają się właściwości. Takie podejście umożliwia jednoczesne aktualizowanie wszystkich widoków, gdy dowolny widok zmienia model. Wdrożone starannie, to wszystko działa. Jednak wymaga to dużo pracy, aby upewnić się, że żadne obiekty widoku lub modelu nie zawierają żadnych przestarzałych odwołań do obiektów modelu. Użytkownik może w dowolnym momencie usunąć obiekty modelu lub podhierarchie modelu. Zapewnienie, że wszystkie obiekty widoku, które zawierają odniesienia do obiektów modelu, które zostały usunięte, jest czasochłonne i trudne. Wydaje mi się, że moje podejście nie jest szczególnie czyste; chociaż nie chcę mieć wyraźnego kodu w warstwie kontrolera do pośredniczenia w komunikacji między widokami a modelem, wydaje się, że musi istnieć lepsze (niejawne) podejście do ustanawiania powiązań między widokiem a modelem i między powiązane obiekty modelu. W szczególności szukam podejścia (w C++), które rozumie dwa kluczowe punkty: 1. Istnieje wiele do jednego związku między widokiem a obiektami modelu 2. Jeśli bazowy obiekt modelu zostanie zniszczony, wszystkie zależne obiekty widoku muszą być oczyszczone, aby nie istniały przestarzałe referencje Chociaż shared_ptr i poor_ptr można używać do zarządzania okresami istnienia podstawowych obiektów modelu i pozwala na słabe odwołania z widoku do modelu, nie zapewniają powiadomienia o zniszczeniu podstawowego obiektu (robią to w tym sensie, że użycie przestarzałego słabego_ptr pozwala na powiadomienie), ale potrzebuję podejścia, które powiadamia obiekty zależne, że ich słabe referencje znikają. Czy ktoś może zaproponować dobrą strategię zarządzania tym?


title: Jakie techniki ekstremalnego programowania są odpowiednie do zastosowania w środowisku badawczym?

text: Które (jeśli w ogóle) ekstremalne techniki programowania byłyby odpowiednie do zastosowania w środowisku badawczym – gdzie celem jest produkcja prototypów, prac nadających się do opatentowania i/lub publikacji?


title: Jak radzić sobie z wymaganiami i przypadkami użycia w takiej sytuacji?

text: Ostatnio zacząłem pracować z analizą i projektowaniem zorientowanym obiektowo i wydawało mi się to bardzo interesujące jako sposób na lepsze wykonanie pracy. Ale wciąż mam wątpliwości co do jednego rodzaju sytuacji. Jeśli nie jest to właściwa strona, aby o to zapytać, przepraszam. Cóż, jeśli mam zaprojektować system, który pozwala jednemu użytkownikowi rejestrować klientów, sprzedawać produkty itd., mamy kogoś, kto będzie obsługiwał system, w tym sensie, że aktor jest dość oczywisty dla niektórych przypadków użycia - aktor rozważymy przypadek użycia „Zarejestruj nowego klienta” jest po prostu odpowiedzialny za to działanie w firmie klienta, który kupuje oprogramowanie. Czasami zdarza się, że tak się nie dzieje. Podam przykład: Stworzyłem kiedyś system do zarządzania szablonami stron internetowych w PHP. W tamtym czasie nie rozwijałem go w kontekście zorientowanym obiektowo, ale zastanawiałem się nad wprowadzeniem tego systemu w zorientowanie obiektowe, aby ćwiczyć analizę i projektowanie zorientowane obiektowo. Chodzi o to, że system jest bardzo prosty: „pobiera pewne konfiguracje zapisane w pliku xml, pobiera adres URL i mapuje go do pliku”. Chodzi o to, że nie ma interakcji między użytkownikami serwisów a systemem. Jedyną rzeczą, która się dzieje, jest to, że użytkownik żąda adresu URL, a system wybiera jeden plik html, który w jakiś sposób pasuje do tego adresu URL, i umieszcza ten html w szablonie określonym w xml. W takich przypadkach jedynymi wymaganiami funkcjonalnymi, jakie mogę sobie wyobrazić, są: * System musi umożliwiać użytkownikowi określenie folderów szablonów w pliku xml; * System musi pobierać informacje o katalogach z pliku xml; * System musi załadować jeden konkretny plik odpowiadający żądanemu adresowi URL w jednym pliku szablonu; * System musi umożliwiać zastąpienie symboli zastępczych w szablonie wartościami określonymi w kodzie; Problem polega na tym, że na przykład, chociaż myślałem o nich jako o wymaganiach funkcjonalnych, wszystkie one mają bezpośredni związek z tym, jak musi być zrobiony kod. Tylko trzeci naprawdę pasuje do tego, co zrozumiałem z wymagań funkcjonalnych. Również przypadki użycia są nieco skomplikowane, każde działanie jest podejmowane przez sam system. Jedynym przypadkiem użycia może być „Poproś o stronę” z aktorem będącym „Odwiedzającym witrynę”, a to oznaczałoby, że scenariusz byłby po prostu „Użytkownik wprowadza adres URL do okna przeglądarki, a system ładuje stronę”. Tak więc w takich przypadkach, gdy mamy do czynienia z kodem, który zostanie po prostu ponownie wykorzystany w jakimś innym kodzie (to jest przykład, to tylko garść kodu, którego programista może użyć do załadowania stron niezależnych od szablonu), jak powinniśmy zajmować się analizą wymagań, przypadkami użycia i tak dalej? Jak już wspomniałem, system PHP, który napisałem jest tylko przykładem, naprawdę pytam w ogóle. Czy ktoś mógłby dać jakieś wskazówki lub odniesienia (jakiś artykuł, tutorial, coś w tym stylu), które pokazują, jak sobie z tym poradzić? Z góry bardzo dziękuję!


title: podklasa QAbstractTableModel - wykorzystaj jak najwięcej kodu

text: w mojej aplikacji PyQt intensywnie używam podejścia model/widok. Dla każdego tworzonego modelu wykonuję następujące czynności: class myModel(QtCore.QAbstractTableModel): def __init__(self, parent = None): QtCore.QAbstractTableModel.__init__(self, parent) self.lst = [[]] #initialize # zapełnij lst danymi niestandardowymi #self.lst = .... def rowCount(self, parent = QtCore.QModelIndex()): return len(self.lst) def columnCount(self, parent = QtCore.QModelIndex()): return len(self.lst[0]) def data(self, role = QtCore.Qt.DisplayRole): row = index.row() col = index.column() if role == QtCore.Qt.DisplayRole: zwróć self. lst[rząd][kol].getContent() if role == QtCore.Qt.BackgroundRole: return self.lst[row][col].getColor() if role == QtCore.Qt.FontRole: return self.lst[ wiersz][col].getFont() if role == QtCore.Qt.Decorat ionRole: return self.lst[row][col].getIcon() if role == QtCore.Qt.TextAlignmentRole: return self.lst[row][col].getAlignment() if role == QtCore.Qt.UserRole: return self.lst[row][col] Innymi słowy, `columnCount()`, `rowCount()` i `data()` wyglądają zawsze tak samo. Po kilku modelach pisanie staje się naprawdę denerwujące i zadaję sobie pytanie, czy mogę pozbyć się tego powtarzającego się pisania? Wiem, że mógłbym stworzyć klasę bazową, w której umieściłbym metody `rowCount()`, `columnCount()` i `data()` i dziedziczy po tej klasie, ale czy jest to najlepsze/najczystsze rozwiązanie, czy jest koncepcja w Pythonie, która bardziej pasuje?


title: Jak zmaksymalizować wiedzę, którą czerpiesz z książki o programowaniu?

text: Nie dlatego, że obchodzi mnie, ile czasu zajmuje komuś przeczytanie książki, ale bardziej dlatego, że interesuje mnie, w jaki sposób ludzie przekazują wiedzę z książki (lub chyba innych źródeł) do swoich mózgów w najlepszy, najbardziej efektywny sposób. Osobiście przyjmuję podejście wieloprzebiegowe (od mojej odpowiedzi do pierwotnego pytania): 1. Przejrzyj zawartość, zanurz się i przeczytaj wszystko, co ma ciekawie wyglądający nagłówek, a na koniec gapię się na ładne diagramy i ilustracje. Na tym etapie nie zajmę się zbyt wiele, ale daje mi to mentalny widok książki (najwyżej godzinę) 2. Najpierw przejrzyj książkę, na ogół dokładnie przeczytam początkowe rozdziały książki, która jest albo bardzo ciężki, albo wprowadza coś zupełnie nowego. W przypadku książek, które dotyczą tematu, który już znam, przeglądam lub pomijam fragmenty, które wydają się trywialne. Pozostałą część książki przejdę dość szybko, ale nie tak szybko, żebym po prostu przewracała strony. (około tygodnia) 3. Nie wszystkie książki, które czytam, docierają tak daleko, ale jeśli uznam, że książka jest interesująca lub wystarczająco użyteczna, przestudiuję ją właściwie. Przejdę przez książkę w wolniejszym tempie i zrobię niektóre lub wszystkie przykłady, wypróbuję kod itp. Często pomijam tutaj całe rozdziały, chyba że książka jest naprawdę dobra (1-3 tygodnie w zależności od książki). 4. Wreszcie, kiedy skończę czytać i czytam inne książki, często zagłębiam się w to raz za razem, aby odnieść się do nich, porównać, sprawdzić, przeglądać itd. – tak wiele z moich ulubionych książek nie kończy się tak po prostu w górę, zbierając kurz na półce z książkami. Rzadko robię notatki podczas czytania (chociaż mogę planować na papierze, jeśli pracuję nad czymś w rodzaju próbki kodu). Rozważałem również rozpoczęcie używania osobistego kanbana do organizowania swoich postępów, ale nigdy nie miałem pojęcia, jak używać tej techniki. Mapy myśli to kolejna rzecz, o której lubię pomysł, ale rzadko to robię. Jakie inne metody mają ludzie? Jak odnoszą one sukcesy? Czy są jakieś powszechnie zalecane techniki, które Twoim zdaniem są stratą czasu?


title: Określanie opcji „na sztywno”, w języku interpretowanym

text: Czy w języku takim jak Python lub JavaScript (NodeJS) jest coś złego w definiowaniu „pliku konfiguracyjnego” jako pliku, który zasadniczo koduje ustawienia konfiguracyjne? Na przykład: options.py: OUTPUT_DIRECTORY = 'out' LOGLEVEL = 'debug' options.js: outputDirectory = 'out'; logLevel = 'debugowanie'; Czy liczy się to jako opcje „na sztywno”? Kiedy byłoby niewłaściwe oczekiwać, że użytkownik będzie konfigurował oprogramowanie w ten sposób? Czy istnieją jakieś korzyści z używania tradycyjnego formatu konfiguracji (np. pliku ini), który jest analizowany w czasie wykonywania?


title: API SQL zamiast API REST?

text: Jakie są zalety i wady udostępniania interfejsu API SQL zamiast interfejsu API REST? Załóżmy, że będzie to API prywatne – programista API i użytkownik są w tym samym zespole. Prawdopodobnie największym problemem byłoby bezpieczeństwo i walidacja. Widzę dwa możliwe podejścia: 1. Zdefiniowanie zestawu dozwolonych szablonów zapytań SQL. 2. Przeprowadzenie sprytnej analizy każdego przychodzącego zapytania SQL.


title: Uwierzytelnianie na mojej stronie internetowej przy użyciu innych danych uwierzytelniających

text: Załóżmy, że istnieją 2 strony internetowe: `example.com`, których nie jestem właścicielem i `example2.com`, których jestem właścicielem. Chcę jakoś rozszerzyć funkcjonalność `example.com`. `example.com` nie ma żadnego API. Chcę, aby użytkownicy `example.com` mogli logować się do `example2.com` używając swoich loginów i haseł `example.com`. Jednakże, ponieważ `example.com` nie posiada żadnego API, nie jest to łatwe, a może nawet niemożliwe. Bez wątpienia nikt nie zgodziłby się na wprowadzenie swoich danych uwierzytelniających „example.com” w „example2.com” z wielu oczywistych powodów. Czy jest więc jakiś sposób na uwierzytelnienie użytkowników `example.com` w `example2.com` **(lub gdzie indziej)** przy użyciu ich oryginalnych poświadczeń?


title: Dlaczego ilość w oprogramowaniu jest nadal zapisywana jako „1 wynik(i)”?

text: Ostatnio zauważyłem, że wiele programów, czy to strony internetowe, aplikacje klienckie, czy gry wideo, często zapisuje reprezentację ilości w następujący sposób: „1 wynik(i)”. Teraz rozumiem, dlaczego zrobili to 20 lat temu. Ale czy w dzisiejszych czasach nie powinniśmy mieć wystarczającej mocy obliczeniowej i pamięci, aby móc powiedzieć „1 wynik” i „2 wyniki”? Czy jest jakiś szczególny powód, dla którego nadal robi się to w ten sposób? Teraz, zanim powiesz mi to Google, zrobiłbym to. Ale chodzi o to, że nie mam pojęcia, jakich wyszukiwanych haseł użyć. Więc nawet niektóre sugerowane terminy wyszukiwania byłyby mile widziane.


title: Świetna produktywność programisty — uwzględnienie 10 000-krotnej różnicy?

text: „Wspaniały operator tokarki kosztuje kilka razy więcej niż przeciętny operator, ale świetny twórca kodu oprogramowania jest wart 10 000 razy więcej niż przeciętny twórca oprogramowania”. - Bill Gates Powiedzmy, że w tym samym zespole jest „świetny” inżynier oprogramowania i „przeciętny” inżynier oprogramowania. Jak można wyjaśnić, że jeden inżynier jest 10 000 razy bardziej produktywny? Nie mogę tego do końca pojąć, biorąc pod uwagę, że oboje przejmują swój udział w funkcjach, błędach i badaniach i konsekwentnie dostarczają produkty wysokiej jakości. Czy mój opis może uzasadnić, że są powyżej „przeciętnej”? "Świetnie"? W korporacji takiej jak Microsoft, jaki procent inżynierów oprogramowania jest „przeciętny”? Jaki % „świetnie”?


title: Big-O dla pętli zagnieżdżonej

text: Czytam ten post na Big-O Mówi, że następujący kod to O(n^2): bool ContainsDuplicates(String[] strings) { for(int i = 0; i < strings.Length; i++) { for( int j = 0; j < strings.Length; j++) { if(i == j) // Nie porównuj z self { Continue; } if(strings[i] == strings[j]) { return true; } } } return false; } Ale nie rozumiem dlaczego. Wewnętrzna pętla robi coś stałego. Czyli jest to suma 1...N stałej. tj. stała liczba O(1). Zewnętrzna pętla to sumowanie po O(1). Więc wyobrażam sobie, że to n*O(1). Myślę, że coś tutaj nie rozumiem. Nie sądzę, że wszystkie zagnieżdżone pętle oznaczają O (n ^ 2), prawda?


title: Czy ktoś zrobił certyfikację WPBiO?

text: Szukałem certyfikatów, które mogą potencjalnie zwiększyć moją wiedzę i wartość rynkową jako inżyniera oprogramowania. Moją uwagę zwrócił IEEE Certified Software Development Professional (CSDP). Kiedy szukałem w sieci żadnych doświadczeń użytkowników, nie mogłem znaleźć niczego istotnego. Nie wydaje się zbyt popularny. I na pewno nie słyszałem o nikim w mojej organizacji lub kręgu znajomych, kto to zrobił. Chciałbym dowiedzieć się od członków społeczności, czy ktoś zrobił ten certyfikat i jakie są jego doświadczenia z tym samym. Czy certyfikacja była przydatna pod względem wiedzy. Czy dodało to wagi do twojego CV (nie deadweight!)?


title: Jak systematycznie i efektywnie obliczyć współrzędne barycentryczne?

text: W ramach implementacji ray tracera muszę obliczyć współrzędne barycentryczne w trójkącie w 3D, aby zdecydować, czy promień trafia w trójkąt, czy nie. Teoretycznie można to zrobić, po prostu rozwiązując kilka równań liniowych. Ale ze względu na fakt, że wierzchołki trójkąta mogą mieć te same współrzędne x, y lub z, niektóre współczynniki w równaniach będą wynosić 0, co spowodowało błąd numeryczny w moich początkowych implementacjach. Czy istnieje zatem systematyczne podejście do znajdowania współrzędnych barycentrycznych w bardziej efektywny sposób? A może nie mam innego wyjścia, jak brutalnie sprawdzać każdą możliwość jedna po drugiej?


title: Jak sprawdzić luki w aplikacjach webowych

text: Stworzyłem aplikację internetową przy użyciu zend framework, mysql i innych technologii po stronie klienta, takich jak javascript, jquery ajax, kendo grid i tak dalej. Zakończyłem rozwój i przeprowadziłem kilka rund testów, aby upewnić się, że część funkcjonalna jest poprawna. Teraz chciałbym sprawdzić podatności w mojej aplikacji - podatności takie jak * wstrzyknięcie sql * podatności ajax * inne, których nie znam. Chciałbym was zapytać, jak to sprawdzić i zabezpieczyć aplikację. Jakimi metodami powinienem użyć, aby zabezpieczyć swoją aplikację?


title: Dynamiczne dane ASP.NET

text: Chciałbym wiedzieć, co ludzie myślą o danych dynamicznych ASP.NET. Widzę ten typ projektu w studio wizualnym i niewiele znalazłem o nim wzmianki na blogach iw książkach. Stworzyłem witrynę za jej pomocą i jest to świetny sposób, w jaki łączy strony CRUD, ale nie rozumiem, jak modyfikować strony bez modyfikowania szablonu, z którego korzystają wszystkie strony. Czy myślisz, że zostanie porzucona w przyszłych wersjach visual studio? Zastanawiam się, czy warto uczyć się tego typu aplikacji. Osobiście myślę, że chciałbym coś prostszego.... stworzyć CRUD dla nas, ale rób je na osobnych stronach, bez całego systemu szablonów.


title: Czy kiedykolwiek byłeś naprawdę mocno spalony przez VSS?

text: Słyszałem wiele anegdotycznych dowodów na to, że korzystanie z VSS jest okropnym pomysłem, ponieważ prędzej czy później po prostu straci/zepsuje/usunie całą twoją pracę. (Jestem nawet winny wykorzystywania takich dowodów jako jednego z czynników motywujących jakiś czas temu do przejścia na SVN). Jednak, chociaż naprawdę wolę Update/Commit niż Checkout/Checkin, jest to okropne w porównaniu z SVN i nie ma dobrego wsparcia rozgałęzień, nigdy nie miałem katastrofalnych doświadczeń z VSS. Czy VSS kiedykolwiek zrujnowało Twój projekt/pracę/zdrowie psychiczne? Stara wersja czy nowa? Czy za historiami kryje się prawda?


title: „Często wypuszczaj wczesne wydania” dla aplikacji na Androida i iPhone'a

text: Chciałem poznać doświadczenia innych osób związane ze zwinną metodą „Wcześniej wydawaj, często wydawaj” z aplikacjami na iPhone'a i Androida. Nie jest to problem z aplikacjami internetowymi, ponieważ aktualizacja odbywa się na serwerze, a użytkownik nie musi robić nic konkretnego w przypadku aktualizacji. Może to nie być duży problem z Androidem, ponieważ proces zatwierdzania jest płynny w porównaniu do sklepu z aplikacjami na iPhone'a. Czy ktoś może podzielić się swoimi doświadczeniami/sugestiami/przykładami dotyczącymi wczesnego i częstego wypuszczania na rynki Androida i iPhone'a?


title: Czy jest to dobra struktura rozwiązania programu Visual Studio dla usługi sieci Web RESTful projektu opartego na domenie?

text: Tworzę rozwiązanie .NET 4.5 C# Web API RESTful i chciałbym, aby ktoś powiedział mi, czy moje rozwiązanie projektowe jest poprawne i/lub mądre (wystarczająco?) dla rozwiązania zaprojektowanego przy użyciu Domain Driven Design. Rozwiązanie zostało podzielone na 6 projektów: * /Base (brak odniesienia do czegokolwiek) Projekt sieciowy i stanowi interfejs między rozwiązaniem a światem zewnętrznym. Zawiera kontrolery internetowego interfejsu API. Nie zawiera prawie żadnej logiki poza zbieraniem wartości z obiektów żądań i proszeniem warstwy BizApi o pracę. * /Biz.Api (do którego odwołuje się Base]) Udostępnia usługi domeny i umożliwia projektowi interfejsu /Base dostęp do obiektów logiki biznesowej domeny w projekcie /Biz.Domain. * /Biz.Domain (do którego odwołuje się Biz.Api) Udostępnia klasy domeny dla warstwy Biz.Api. Zapewniają one metody manipulowania danymi firmy w pamięci. * /Dal.Db (odwołuje się Biz.Api) Warstwa repozytorium bazy danych. Uzyskuje dostęp do baz danych i mapuje zwrócone dane do wewnętrznych DTO zdefiniowanych w warstwie /Interfaces. * /Dal.Services (do którego odwołuje się Biz.Api) Zapewnia warstwę proxy dla zewnętrznych zależności, takich jak usługi sieciowe, i mapuje zwrócone dane na wewnętrzne DTO zdefiniowane w projekcie /Interfaces. * /Interfaces (przywoływane w większości projektów powyżej) Zawiera klasy DTO do przekazywania danych wokół rozwiązania oraz interfejsy C# do definiowania kontraktów na takie rzeczy, jak IoC.


title: Czy Apple zatwierdzi aplikację, która wewnętrznie korzysta z biblioteki opracowanej przez Google?

text: Używam biblioteki `GDataXML` opracowanej przez Google jako część ich biblioteki klienckiej Objective-C. Ponieważ jest to biblioteka przetwarzania XML firmy Google i słyszałem, że Apple nie zezwala na korzystanie z żadnych bibliotek stron trzecich w aplikacji, czy zezwolą na to?. (Korzystam z tej biblioteki, ponieważ wielu maniaków iOS sugeruje użycie tej !!). Z góry dziękuję. :)


title: Opakować wszystkie połączenia zewnętrzne flagą, aby walczyć z rekurencją i podwójnym wejściem?

text: Wytwarzanie przewidywalnych danych wyjściowych dla każdego możliwego wejścia jest obowiązkiem każdego modułu. Na przykład (w C#): class Logger { public ITextWriter Writer { get; ustawić; } licznik jednostek prywatnych; /// <summary> /// Zapisuje wiadomość w specjalnym formacie i zwraca liczbę wszystkich napisanych wiadomości /// </summary> public uint Debug(string message) { if (message == null) throw new ArgumentNullException("message ”); if (Writer == null) wyrzuć nowy InvalidOperationException("Nie ustawiono zapisu"); Writer.Write(string.Format("{0:HHmmss}: [DEBUG] {1}", DateTime.Now, message)); zwróć ++licznik; } } Moduł `Logger` jest dość gadatliwy, ale jego wyjście - wyjątek, wywołanie zależności i zwracana wartość - jest przewidywalne i oczywiste dla każdego argumentu i stanu. Ale niepokoi mnie jeden możliwy przypadek użycia. Co by było, gdyby `Writer` był ustawiony na jakąś dziwną implementację, która w jakiś sposób wywołuje metodę `Logger.Debug` na tym samym obiekcie? Pierwszą możliwą konsekwencją jest przepełnienie stosu z powodu nieskończonej rekurencji. Po drugie - nieprzewidywalne wyjście i możliwe błędy. To oczywiste, że taka sytuacja musi być jakoś kontrolowana. Jeśli chcemy przewidywalnego wyjścia dla naszego loggera, powinien on kontrolować podwójne wpisy: // ... private bool enter; public uint Debug(string message) { if (komunikat == null) wyrzuć nowy ArgumentNullException("wiadomość"); if (Writer == null) wyrzuć nowy InvalidOperationException("Nie ustawiono zapisu"); if (enter) wyrzuć nowy InvalidOperationException("Podwójny wpis"); enter = prawda; Writer.Write(string.Format("{0:HHmmss}: [DEBUG] {1}", DateTime.Now, message)); wprowadź = fałsz; zwróć ++licznik; } // ... I wydaje się, że każde wywołanie zewnętrzne (odwołanie nie do swoich własnych komponentów) musi być opakowane takimi flagami. To wygląda na szalone! Czy to jak dobry kod jest napisany? A może to normalne, że w twoim systemie nie ma wywołań cyklicznych? Czy brakuje mi czegoś ważnego? Proszę doradź. **AKTUALIZACJA** Jest jeszcze gorzej, chłopaki: // ... private bool enter; public uint Debug(string message) { if (komunikat == null) wyrzuć nowy ArgumentNullException("wiadomość"); if (Writer == null) wyrzuć nowy InvalidOperationException("Nie ustawiono zapisu"); if (enter) wyrzuć nowy InvalidOperationException("Podwójny wpis"); spróbuj { enter = prawda; Writer.Write(string.Format("{0:HHmmss}: [DEBUG] {1}", DateTime.Now, message)); } wreszcie { enter = false; } zwraca ++licznik; } // ... Uważam, że przechwycenie wyjątku jest obowiązkiem modułu wyższego poziomu (tego, który je wszystkie utworzył), więc wyjątki muszą podążać swoją drogą. Ale stan po nieudanym wezwaniu musi pozostać poprawny. Wyjątek to nie koniec świata, a moduły mogą być ponownie wykorzystane.


title: Oczekiwana obsługa błędów

text: Załóżmy, że mam portal społecznościowy. Na tej stronie użytkownicy mogą załadować kilka informacji o sobie, w tym swój numer telefonu. Aby to zaimplementować, mam klasę o nazwie `PhoneNumber`, która reprezentuje numer telefonu użytkownika. Ale numery telefonów są opcjonalne. Mam klasę `PhoneNumber`, która ma gwarantować dostęp do numeru telefonu użytkownika, ale nie może. Jak sobie z tym poradzić? Moje obecne podejście polega na przypisaniu wartości do zmiennej `error` wewnątrz `PhoneNumber`, która reprezentuje dany problem (może to być wyjątek, ciąg znaków lub kod błędu, nie ma to znaczenia dla tego pytania ). Dodałem również metodę do `PhoneNumber` o nazwie `isPhoneNumberAvailable()`, która powinna zostać wywołana przed użyciem któregokolwiek z akcesorów. Jeśli jeden z akcesorów zostanie wywołany, a użytkownik nie dodał swojego numeru telefonu, zgłaszam `IllegalStateException`. Ale to nie wydaje się dobrym rozwiązaniem. Nie jestem pewien dlaczego, nie jestem w tym zbyt nowy, żeby to wyjaśnić, ale wygląda na to, że może to spowodować pewne problemy w przyszłości. Zauważ, że to pytanie jest niezależne od języka, a istnienie `IllegalStateException` w Javie jest czysto przypadkowe. EDYCJA: Rozwiązanie poprawia model. Mam zagwarantowany dostęp do czegoś, do czego nie mogę zagwarantować dostępu, co jest złym projektem. Mój inny problem dotyczył użycia zmiennej `error` w zakresie klasy, ale to wykracza poza zakres tego pytania. Zobacz moje dalsze pytanie tutaj.


title: ArgoUML - Nauka

text: Więc właśnie dostałem kopię ArgoUML. Początkowo myślałem, że będę mógł się nim po prostu bawić, aby się tego nauczyć, ale okazuje się to niezwykle trudne. Szukałem w Internecie samouczków i filmów, ale nie znalazłem niczego przydatnego. Plik pomocy dla ArgoUML jest również bardzo niekompletny. Czy ktoś zna jakieś zasoby internetowe, które pomogą mi nauczyć się ArgoUML (i ogólnie UML, jak sądzę)? Dziękuję!


title: Jak ograniczyć użytkowników usługi do konkretnego programu?

text: Zbudowałem grę na Androida - chciałbym dodać do niej tablicę wyników z najlepszymi wynikami, aby ludzie mogli pochwalić się, jak wysoko udało im się zdobyć punkty. Jak mam go zaprojektować, aby ludzie nie mogli go „zhakować” przez dekompilację i wysłanie fałszywego wyniku? Nie wierzę, że android ma jeszcze moduł TPM dla większości urządzeń, więc nie mogę tam przechowywać hasła (nawet gdybym mógł, jak mógłbym go tam wstawić, aby nie został wykryty podczas transmisji?). Mógłbym zaciemnić kod, ale to nie zapobiegnie włamaniu, a jedynie go zniechęci. Będę korzystał z bezpiecznego połączenia, więc nie powinienem mieć żadnych problemów z podsłuchiwaniem sieci. Nie jestem pewien, czy lepiej byłoby opublikować go pod Androidem czy zabezpieczeniami zamiast tutaj, ale myślę, że to jest właściwe miejsce, ponieważ proszę o projekt.


title: Czy zmienne błędu są antywzorcem czy dobrym projektem?

text: Aby poradzić sobie z kilkoma możliwymi błędami, które nie powinny wstrzymywać wykonywania, mam zmienną `error`, którą klienci mogą sprawdzić i użyć do zgłaszania wyjątków. Czy to jest antywzór? Czy istnieje lepszy sposób na poradzenie sobie z tym? Przykładem tego w działaniu jest PHP mysqli API. Załóżmy, że problemy z widocznością (akcesory, zakres publiczny i prywatny, czy zmienna jest w klasie czy globalna?) są obsługiwane poprawnie.


title: Korzystanie z Memcached: czy dobrą praktyką jest aktualizowanie pamięci podręcznej podczas aktualizacji bazy danych?

text: To pytanie dotyczy najlepszych praktyk w architekturze. ### Nasza obecna architektura Mam klasę PHP, która uzyskuje dostęp do MySQL w celu uzyskania informacji o użytkowniku. Nazwijmy to „Użytkownikiem”. Dostęp do `User` jest uzyskiwany wielokrotnie, dlatego zaimplementowaliśmy warstwy buforowania w celu zmniejszenia obciążenia. Pierwsza warstwa to tak zwana pamięć podręczna „na żądanie”. Po pobraniu danych z MySQL przechowujemy je w prywatnej własności `User`. Każde kolejne żądanie danych zwraca właściwość zamiast ponownego żądania danych z MySQL. Ponieważ żądanie sieciowe żyje i umiera na podstawie żądania, ta pamięć podręczna uniemożliwia aplikacji dostęp do MySQL więcej niż raz w ramach jednego żądania. Naszą drugą warstwą jest Memcached. Gdy własność prywatna jest pusta, najpierw sprawdzamy dane w Memcached. Jeśli Memcached jest pusty, pytamy MySQL o dane, aktualizujemy Memcached i aktualizujemy prywatną własność `User`. ### Pytanie Nasza aplikacja jest grą i czasami konieczne jest, aby niektóre dane były jak najbardziej aktualne. W ciągu około pięciu minut żądanie odczytu danych użytkownika może wystąpić 10 lub 11 razy; wtedy może nastąpić aktualizacja. Kolejne żądania odczytu muszą być aktualne, w przeciwnym razie mechanika gry zawiedzie. Więc to, co zrobiliśmy, to zaimplementowanie fragmentu kodu, który jest wykonywany, gdy nastąpi aktualizacja bazy danych. Ten kod ustawia klucz w Memcached ze zaktualizowanymi danymi, więc wszystkie kolejne żądania do Memcached są aktualne. Czy to optymalne? Czy są jakieś problemy z wydajnością lub inne „gotcha”, o których powinniśmy wiedzieć, próbując utrzymać coś w rodzaju „żywej pamięci podręcznej” takiej jak ta?


title: Prosty projekt dla funkcji Singleton w java dla Kernel

text: Rozumiem, że Singelton pomaga w tworzeniu instancji tylko jednej klasy NA CZAS. Staram się nauczyć jak projektować funkcję dla Singletona w javie. Chcę to lepiej poznać, aby zrozumieć Kernel. Więc staram się to zrobić, ale lubię wiedzieć, czy to jedyny sposób na wymyślenie prywatnego konstruktora. public class Singleton { prywatne statyczne wystąpienie Singleton = null; private Singleton() { } public static zsynchronizowane Singleton getInstance() { if (instance == null) { instancja = new Singleton (); } zwracać instancję; } }


title: Licencja Unicode

text: Warunki użytkowania Unicode stanowią, że każde oprogramowanie, które wykorzystuje ich pliki danych (lub ich modyfikację) powinno zawierać odniesienia do licencji Unicode. Wydaje mi się, że większość bibliotek Unicode posiada funkcje sprawdzające, czy znak jest cyfrą, literą, symbolem itp., a więc będzie zawierać modyfikację plików danych Unicode (zwykle w postaci tabel). Czy to oznacza, że licencja ma zastosowanie i wszystkie aplikacje korzystające z takich bibliotek Unicode powinny posiadać licencję? Sprawdziłem i wygląda na to, że bardzo niewiele oprogramowania Unicode posiada licencję, chociaż można twierdzić, że większość z tych, które nie posiadały licencji, pochodziła od firm, które były członkami konsorcjum Unicode (czy otrzymują zwolnienie z licencji?). Niektóre (np. Mozilla) są tylko „członkami łącznikowymi” i chociaż ich oprogramowanie nie jest objęte licencją (AFAICT), w oczywisty sposób opierają się na danych pochodzących z tych plików danych. Czy Mozilla narusza licencję? Czy powinniśmy mieć licencję we wszystkich aplikacjach, które zawierają jakąkolwiek formę zaawansowanej obsługi Unicode? (tj. muszą polegać na plikach danych Unicode) Czy istnieje jakaś forma szerokiego wyłączenia? (ponieważ bardzo niewiele oprogramowania posiada licencję). **edycja:** Przesłałem to pytanie do obsługi Unicode, odpowiem tutaj, kiedy/jeśli ją otrzymam


title: Formatowanie SQL na podstawie AST

text: Pracuję nad moim projektem open source .NET do generowania SQL... Początkowo napisałem projekt, aby wypluł dokładnie jeden format SQL... brzydki. Zacząłem używać tego projektu w prawdziwym świecie i zdecydowałem, że fajnie byłoby, gdybym mógł generować ładny SQL w trybie debugowania i brzydki SQL w trybie wydania. Moje pierwsze podejście obejmowało wiele pętli if/else w kodzie generowania poleceń. Szybko musiało być za dużo do zniesienia. Zacząłem więc szukać innego podejścia, które pozwoliłoby mi podłączyć różne strategie formatowania. Przyjrzałem się również innym bibliotekom formatującym SQL, ale większość była specyficzna dla jednego dialektu. W tej chwili bawię się pomysłem wygenerowania drzewa tokenów, podobnego do abstrakcyjnego drzewa składni (AST), z którym współpracuje kompilator. Miałem nadzieję, że nawiguję po drzewie i generuję tekst na podstawie tego, gdzie jestem w drzewie. Teraz, gdy zbudowałem te drzewa, nie jestem pewien, jak napisać kod, aby odwiedzić te węzły. Czuję, że cofam się. Zamiast analizować SQL, generować AST i wypluwać obiekty SQL, pozwalam komuś na budowanie obiektów SQL, a następnie generowanie AST i wypluwanie SQL. Kiedy ktoś używa mojej biblioteki do tworzenia instrukcji SELECT, określa wartości do wybrania, tabele do wyboru, filtry, kolejność itp. Ale kiedy wygenerowałem AST... mam mniej informacji niż początkowo! Tylko pytając "Czy następny token to słowo kluczowe FROM?" czy mogę dostać zdjęcie tego, gdzie jestem. Muszę napisać kilka instrukcji if/elif/else, aby dowiedzieć się, co będzie dalej. Przynajmniej gdy miałem obiekty SQL, mogłem użyć polimorfizmu, aby uniknąć nieprzyjemnych rozgałęzień. Więc może przegapiłem dzień w teorii kompilatora, a może to dlatego, że próbuję się cofnąć. Ale z jakiegoś powodu mój następny krok jest dla mnie naprawdę niejasny. Myślę, że trasa AST była we właściwym kierunku, nawet jeśli oznacza to utratę informacji. Udało mi się na razie napisać naprawdę głupi formater, który na razie umieszcza spacje między każdym tokenem. Naprawdę, jeśli chodzi o wymyślanie, jestem przytłoczony. Jeśli ktoś ma dobre środki do cofania się, prawdopodobnie będzie to bardzo pomocne.


title: Łączenie kompilatora: jak obsługiwać odwołania cykliczne?

text: Obecnie piszę kompilator dla nowego języka i zmagam się z aspektem łączenia nowych typów, gdy istnieje odwołanie cykliczne. Stworzyłem drzewo zależności, dzięki czemu mogę skompilować typy w kolejności ich zależności, które wydawały się naprawić mój problem ... to znaczy, dopóki nie natrafię na odwołania cykliczne, jak na poniższym przykładzie (opublikowanym w c#): public class A { public A() { var b = nowy B (); } } public class B { public B() { var a = new A(); } } Moim ograniczeniem jest to, że mogę utworzyć tylko 1 typ na raz, a w przypadku odwołań cyklicznych najpierw należy utworzyć A albo B, co stwarza problem, że mogę” t utworzyć albo, chyba że najpierw zostaną utworzone jego zależności! Jak kompilatory radzą sobie z tym?


title: Jak skutecznie śledzić klucze pamięci podręcznej, aby odpowiednio je unieważnić?

text: W zwykłej aplikacji te same informacje można pobrać z bazy danych na kilka sposobów. Jeśli wszystkie te sposoby implementują buforowanie, musisz unieważnić wszystkie te wpisy w pamięci podręcznej podczas aktualizowania wpisu w bazie danych. Niektóre parowanie między aktualizacjami i wyborami jest łatwe. Weźmy na przykład produkt 123 z kategorii 9 w cenie 12,50 USD. Jeśli wybierzesz produkt według ID: wybierz [...] z [Sklep].[Produkt] gdzie [ProductId] = 123 buforując go z kluczem `Produkt<Id:123>`, unieważnienie tej pamięci podręcznej nie jest takie trudne wpis po aktualizacji ceny produktu identyfikowanego przez jego identyfikator: update [Shop].[Product] set [Price] = 14.99 gdzie [ProductId] = 123 Sprawy stają się trudniejsze, gdy trzeba również pamiętać o unieważnieniu pamięci podręcznej za pomocą klucza `MostExpensive<CategoryId:9>` odpowiadające zapytaniu: wybierz max([Cena]) z [Sklep].[Produkt] gdzie [Identyfikator Kategorii] = 9 Jaki jest skuteczny sposób śledzenia wpisów w pamięci podręcznej? Jak znaleźć, podczas programowania lub przeglądu kodu, które wpisy muszą zostać unieważnione, gdy ten lub inny fragment danych zostanie zmieniony?


title: Czy ktoś może w prosty sposób wyjaśnić, co to jest wzór zakłócający?

text: Chciałbym w prosty sposób wyjaśnić mi, jak działa tupot zakłócający. Ta koncepcja była dla mnie nieuchwytna, jak wiem. Może z twoją pomocą mógłbym to zrozumieć.


title: Algorytm genetyczny nowa generacja rośnie wykładniczo

text: Programuję Genetic Algorithm w C++ i po przeszukaniu wszelkiego rodzaju sposobów wykonywania operatorów GA'a (selekcja, crossover, mutacja) natrafiłem na wątpliwość. Powiedzmy, że mam początkową populację 500. Mój wybór będzie polegał na uzyskaniu najlepszych 20% z 500 (w oparciu o najlepszą kondycję). Więc mam 100 osobników do kopulacji. Kiedy zrobię crossover dostanę 2 dzieci, z których oboje mają 50% przeżycia. Na razie w porządku. Zaczynam mutację i wszystko jest ok.. Teraz kiedy zaczynam wybierać Next Generation, widzę, że mam dużą liczbę dzieci (w tym przypadku 4950 jeśli chcecie wiedzieć). Chodzi o to, że za każdym razem, gdy prowadzę AH, jeśli wyślę wszystkie dzieci do następnego pokolenia, liczba osób na pokolenie wzrośnie wykładniczo. Musi więc istnieć sposób na dobranie dzieci do nowego pokolenia bez wychodzenia poza ten zakres populacji początkowej. Pytam tutaj, czy jest w ogóle możliwość wyboru dzieci, aby wypełnić nowe pokolenia **LUB** powinienem jakoś wybrać (i może zmniejszyć) rodziców do krycia, aby w końcu nie mieć tak wielu dzieci .


title: Ruby Koans: głębia i użyteczność?

text: Kilka osób zasugerowało mi Ruby Koans po prostu po przeczytaniu książki i wydaje się to o wiele lepszą perspektywą. Ponieważ nie ma wątpliwości co do całości Ruby Koans, co myślą o tym użytkownicy SO? Czy to w większości tylko składnia, czy można dowiedzieć się znacznie więcej z ich rozwiązywania? :)


title: Przykłady potrzebnych scenariuszy współbieżnych iteracji

text: Próbuję owinąć głowę wokół różnych rozwiązań współbieżności do kilku wątków iterujących w tej samej kolekcji, ale mam trudności z wymyśleniem dobrych realistycznych (ale najlepiej łatwych do modelowania) scenariuszy do kodowania. Poszukuję realistycznych scenariuszy dla: 1. Scenariuszu, w którym kilka wątków może jednocześnie iterować po kolekcji i blokować każdy element, jeśli chodzi o to i dokonywać pewnych modyfikacji, element nie może być widoczny w stanie częściowo zaktualizowanym 2. A scenariusz, w którym różne wątki próbują iterować po kolekcji, ale tylko jeden naraz powinien być dozwolony do 3. Scenariusz, w którym kilka wątków może iterować po kolekcji w celu odczytu, ale tylko jeden wątek może iterować w celu pisania Inne fajne scenariusze iteracji współbieżności może wymyślić są mile widziane :) dzięki!


title: Jak kodować szybciej (bez poświęcania jakości)

text: Od kilku lat jestem zawodowym koderem. Komentarze na temat mojego kodu są generalnie takie same: pisze świetny kod, dobrze przetestowany, ale _może być szybszy_. Więc **jak mogę zostać szybszym koderem** bez poświęcania jakości? Ze względu na to pytanie ograniczę zakres do C#, ponieważ to głównie koduję (dla zabawy) -- lub Javy, która jest wystarczająco podobna pod wieloma względami, które mają znaczenie. Rzeczy, które już robię: * Napisz minimalne rozwiązanie, które wykona zadanie * Napisz mnóstwo automatycznych testów (zapobiegających regresji) * Napisz (i użyj) bibliotek wielokrotnego użytku do wszelkiego rodzaju rzeczy * Używaj dobrze znanych technologii, w których działają dobrze (np. Hibernacja) * Używaj wzorców projektowych tam, gdzie pasują (np. Singleton) Są świetne, ale nie wydaje mi się, żeby moja prędkość wzrastała z czasem. Obchodzi mnie to, bo jeśli mogę coś zrobić, aby zwiększyć swoją produktywność (nawet o 10%), to jest to o 10% szybciej niż moi konkurenci. (Nie żebym je posiadał.) Poza tym stale otrzymywałem tę opinię od moich menedżerów – niezależnie od tego, czy chodziło o programowanie Flash na małą skalę, czy programowanie Java/C++ dla przedsiębiorstw. **Edytuj:** wydaje się, że pojawia się wiele pytań dotyczących tego, co rozumiem przez szybko i skąd wiem, że jestem wolny. Pozwólcie, że wyjaśnię więcej szczegółów. Pracowałem w małych i średnich zespołach (5-50 osób) w różnych firmach nad różnymi projektami i różnymi technologiami (Flash, ASP.NET, Java, C++). Obserwacja moich menedżerów (o której powiedzieli mi wprost) jest taka, że jestem „wolny”. Częściowo jest to spowodowane tym, że znaczna liczba moich rówieśników poświęciła jakość na rzecz szybkości; napisali kod, który był błędny, trudny do odczytania, trudny do utrzymania i trudny do napisania automatycznych testów. Mój kod jest ogólnie dobrze udokumentowany, czytelny i testowalny. W Oracle konsekwentnie rozwiązywałbym błędy wolniej niż inni członkowie zespołu. Wiem o tym, bo otrzymuję komentarze na ten temat; oznacza to, że inni (tak, bardziej doświadczeni i doświadczeni) programiści mogli wykonać moją pracę w krótszym czasie niż ja, przy niemal tej samej jakości (czytelność, łatwość utrzymania i testowalność). Czemu? czego mi brakuje? Jak mogę być w tym lepszy? Mój cel końcowy jest prosty: jeśli mogę dziś wyprodukować produkt X w 40 godzin i mogę się jakoś ulepszyć, abym mógł stworzyć ten sam produkt jutro po 20, 30, a nawet 38 godzinach, to właśnie to chcę wiedzieć. jak się tam dostanę? Jakiego procesu mogę użyć do ciągłego doskonalenia? Myślałem, że chodzi o ponowne użycie kodu, ale wydaje się, że to nie wystarczy.


title: Dlaczego większość ofert pracy dotyczy programisty <language here>, a nie programisty w ogóle?

text: **W idealnym świecie:** W doskonałym artykule Don’t Call Yourself A Programmer, And Other Career Advice, Patrick McKenzie wyjaśnia między innymi, że język nie ma znaczenia: * Programista to osoba, która rozwiązuje problemy , ogólnie. Programista nie jest osobą, która pisze kod w określonym języku. * Firmy nie dbają o języki, które znasz. Jeśli muszą zatrudnić programistę do projektu napisanego w określonym języku i mają kandydata, który jest bardzo doświadczony, ale nigdy nie napisał ani jednej linijki kodu w tym języku, nadal zostanie zatrudniony. Zgodnie z moim doświadczeniem zarówno jako dewelopera, jak i osoby, która musiała zatrudniać innych programistów, obserwacja jest bardzo podobna: * N-letnie doświadczenie w Javie czy N-letnie doświadczenie w C# nie ma znaczenia. **Liczy się to, że kandydat umie rozwiązywać problemy, zna różnicę między kodem spaghetti a czystym kodem o przemyślanej architekturze itp.** * Nie dbam o języki, których używałeś wcześniej. **W przypadku projektu w C# wolałbym zatrudnić profesjonalnego programistę, który spędził całe życie pisząc kod Java, Python i Ruby on Rails**, a nie początkującego, który zna tylko C# i zna go bardzo słabo. * **Wiedza i doświadczenie zdobyte przy użyciu jednego języka można w większości wykorzystać ponownie w dowolnym innym języku.** Doświadczony programista, który używał Ruby on Rails do tworzenia stron internetowych i spędził resztę swojej kariery pisząc aplikacje Java na komputery stacjonarne przy użyciu Oracle, pasuje idealnie dla projektu ASP.NET MVC przy użyciu Microsoft SQL Server. Ponieważ **ta osoba wie już wszystko, czego potrzebuje do tej pracy** , oprócz kilku konkretnych rzeczy i różnic składniowych. Z drugiej strony osoba, która zrobiła tylko kilka małych stron ASP.NET MVC, w ogóle nie pasuje, ponieważ może nie do końca rozumieć architekturę MVC, może wiedzieć, co to jest profilowanie SQL i może brakować innych niezbędnych wiedza. Nie mów mi, że nie jestem w stanie rozwiązać małego problemu ze stroną PHP, która używa CodeIgniter tylko dlatego, że nigdy wcześniej nie używałem CodeIgniter. **W praktyce:** W praktyce, gdy szukam pracy jako freelancer i ogólnie widzę oferty pracy, są one bardzo specyficzne dla języka. Niektórzy szukaliby programisty PHP z dwuletnim doświadczeniem w Magento. Inni będą szukać osoby z co najmniej trzyletnim doświadczeniem w VB.NET, a jeśli wyślesz im CV z informacją, że tworzysz C# od sześciu lat, ale bez wzmianki o VB.NET, nie będą sobie zawracać głowy odpowiedzieć. Jeśli poproszą o osobę, która ma doświadczenie z Firebirdem, nie posłuchają o twoim dziesięcioletnim doświadczeniu z Oracle. Dlaczego istnieje taka różnica między teorią a tym, co Patrick McKenzie i ja nazywamy zdrowym rozsądkiem, a rzeczywistym światem ofert pracy?


title: Jaki język zorientowany na sieć najlepiej sprawdziłby się z danymi binarnymi?

text: Chcę stworzyć usługę, w której ludzie będą mogli przesyłać pliki. Ponieważ jednak przechowywanie plików kosztuje, chcę skompresować pliki, aby zajmowały mniej miejsca. Chciałbym napisać własny algorytm kompresji, jednak PHP nie ma dobrych sposobów na obsługę danych binarnych (co jest potrzebne w przypadku wielu algorytmów kompresji). Zastanawiałem się więc, jaki byłby lepszy język do stworzenia takiej strony internetowej? Mam wiedzę na temat PHP (oraz Javascript, HTML i CSS), ale nie mam doświadczenia z innymi rzeczami, takimi jak Ruby, Perl, Python i innymi językami tworzenia stron internetowych.


title: Nowoczesne wdrożenie Spring Remoting czyli EJB3

text: Pracuję nad prototypem „co jest możliwe z najnowszym i najlepszym” prototypem. Jednym z głównych problemów, który był wielkim problemem dla mnie i mojego administratora AS/400, jest to, że istniejący system uruchamia się, istnieje 35 indywidualnych aplikacji, z których każda łączy się z 8 bazami danych i uruchamia pulę połączeń składającą się z 5 połączeń na . dla was, magów matematycznych, jest to 1400 indywidualnych połączeń bazy danych z serwerem podczas uruchamiania, aw ciągu typowego dnia może być kiedykolwiek używanych 40. To, co chciałbym zrobić w tym prototypie, to przenieść wszystkie funkcje bazy danych do centralnej biblioteki (api). Od tego momentu chciałbym wdrożyć to API indywidualnie, a 35 aplikacji po prostu zdalnie otworzy klasy usług i przekaże obiekty tam iz powrotem. Efektem końcowym jest to, że aplikacje nie muszą już tworzyć połączeń z bazami danych, po prostu wywołują metody zdalne, a my możemy odpowiednio dostroić centralne API do obsługi obciążenia. W tamtych czasach EJB3 był drogą do zrobienia. integracja z politykami bezpieczeństwa jest fajna, ale zawsze miałem z nią problemy z wydajnością. Wiosenny bieg zdalny w Hessian wygląda obiecująco, widząc, że używam sprężyny wszędzie indziej. ale minęły LATA, odkąd musiałem zrobić coś takiego, więc zastanawiałem się, co sugerujecie, aby to osiągnąć. Dziękuję


title: pryzmat i wiele ekranów

text: OK - trochę się uczę Prism ze względu na ofertę "darmowego weekendu" w Pluralsight. Ponieważ okazuje się to dla mnie zbyt skomplikowane, poszedłem do książki Prism i spojrzałem na przód i oto, co było napisane: > Co następuje po „Hello, World?” > > Deweloperzy WPF i Silverlight są obdarzeni mnóstwem doskonałych > książek... Nie brakuje samouczków na temat Model-View-ViewModel... Ale oni > zatrzymują się na wskazówkach, których potrzebujesz, aby dostarczyć nietrywialną aplikację w > pełne. > > Twój pierwszy ekran idzie dobrze. Dodajesz drugi ekran i trzeci. Ponieważ > zacząłeś swoje rozwiązanie od wbudowanej „Aplikacji nawigacyjnej > Szablonu”, dodawanie nowych ekranów przypomina wieszanie koszul na wieszaku. Jesteś > na fali. Dopóki nie nadejdzie trudna rzeczywistość rzeczywistych wymagań aplikacji > w. > > Tak się składa, że Twoja aplikacja ma 30 ekranów, a nie trzy. Nie ma miejsca na > ten drążek do szafy na 30 ekranów. Niektóre ekrany to modalne wyskakujące okienka; nie > przejdź do wyskakującego okienka. Ekrany stają się współzależne, tak że aktywność użytkownika > na jednym ekranie powoduje zmiany, które rozprzestrzeniają się w całym interfejsie użytkownika. Niektóre ekrany > są opcjonalne; inne są widoczne tylko dla autoryzowanych użytkowników. Niektóre ekrany > są trwałe, podczas gdy inne ekrany można dowolnie otwierać i zamykać. > Odkrywasz, że powrót do poprzednio wyświetlanego ekranu tworzy > nową instancję. Nie tego się spodziewałeś i, ku swojemu przerażeniu, poprzednia instancja zniknęła wraz z niezapisanymi zmianami użytkownika. Teraz problem polega na tym, że nie odnoszę się do tego opisu. Nigdy nie byłem programistą UI, ale tak jak wszyscy inni używam aplikacji Windows, takich jak MS-Office, oraz stron internetowych, takich jak Amazon, Facebook i StackExchange. Patrzę na nie i nie widzę zbyt wielu problemów z „tyloma ekranami”! Rzeczywiście, jedynymi aplikacjami mającymi wiele okien, o których mogę pomyśleć, jest Visual Studio. Może trochę Visio. Ale weź Word - masz wstążkę i główne okno. Lub weź Facebooka: masz te listy po lewej stronie (Ulubione, Listy, Grupy itp.), pośrodku stanu, dodawania, a następnie pasek boczny Kontakty. Ale to tylko jedna strona. Oczywiście rozumiem, że w scenariuszach korporacyjnych istnieją aplikacje dashboadowe, w których wiele segmentów ekranu jest aktualizowanych z wielu niepowiązanych usług. To kopie. Ale inne scenariusze? Więc - Czego mi brakuje? Dlaczego Pirsm z „wieloekranowym” potworem ma być srebrną kulą? Czy powinienem zainwestować w naukę Prism oprócz nauki WPF lub ASP.NET MVC?


title: Jak mogę poradzić sobie ze wskazówkami zegara używając podwójnych, które cierpią na co najwyżej O (log n) uszkodzonych bitów w n-tej ramce wyświetlania?

text: Obecnie mam aplikację zegarową, która oblicza od podstaw w każdej iteracji. Oznacza to, że uszkodzone przez O(1) bity w moich dubletach i ciężkim tworzeniu i usuwaniu obiektów również. Ostrożnie podchodzę do wykonywania nieskończonych obliczeń z podwajaniami lub innymi liczbami zmiennoprzecinkowymi, ponieważ O(n) uszkodzonych bitów zwykle towarzyszy każdemu krokowi. Chciałbym wiedzieć, czy istnieje alternatywny sposób (w aplikacji na iOS) przekształcania i pozycjonowania wskazówek zegara za pomocą O(1), a może O(log n), uszkodzonych bitów po n krokach. W szczególności zastanawiałem się, jakie byłoby zniekształcenie „Na każdym kroku obróć każdą rękę z powrotem do pozycji zerowej, co oznacza afiniczną transformację rotacji -1 * ostatni obrót otrzymany przez rękę, a następnie obróć do przodu o nowy kąt ręka powinna mieć na tym etapie." Czy w arytmetyce zmiennoprzecinkowej Objective-C nie jest kiedykolwiek (poza wyjątkami, takimi jak wartość wskazująca, że liczba jest uszkodzona), że x - x != 0.0 dokładnie? Przypadki, które widziałem, ilustrujące bity zmiennoprzecinkowe, które ilustrują, to Python mówiący, że 1.1 + 1.1 + 1.1 - 3.3 != 0.0; Nie widziałem podręcznikowych przykładów postaci x - x != 0.0. Nie jest to dokładnie pytanie, czy obraz rastrowy przekształcony o kąt x, a następnie o kąt -x, jest swoim pierwotnym ja; może się zdarzyć, że powyższa sugestia zadziała dobrze w przypadku błędu O(1) dla kątów, ale zwykłe uszkodzenie narysowanego i przekształconego obrazu. Jaka jest minimalna „złożoność korupcji”, czyli najmniej uszkodzonych bitów na końcu n obliczeń, do renderowania zegara? Czy istnieją podejścia O(1) lub O(log n)? Dziękuję,


title: Czy istnieje narzędzie do generowania wielocelowych instrukcji proceduralnych?

text: **Jako użytkownik:** Kiedy mam dobre instrukcje do wykonania, jestem pewien, że mogę zrobić prawie wszystko. Z kiepskimi instrukcjami kończę frustrację, marnuję czas i prawdopodobnie poddaję się. Typ instrukcji, który widzę najczęściej, to procedura. Używam wielu systemów operacyjnych z różnymi narzędziami, więc typ procedury, którą zwykle widzę, nazywam procedurami wielocelowymi. Daj mi znać, czy istnieje dla nich bardziej poprawne lub lepsze określenie! Jestem pewien, że już wcześniej spotkałeś się z takimi wielocelowymi procedurami: Jak zainstalować MegaWidget dla Linuksa 1. Pobierz i zainstaluj bibliotekę foo 2. Przeczytaj poniższą notatkę o foo 3. Pobierz źródło paska 4. Skompiluj i zainstaluj pasek 5. Pobierz MegaWidget źródło 6. Skompiluj i zainstaluj MegaWidget Instalacja Windows 1. Wykonaj kroki 1, 2 i 3 powyżej 2. Pobierz yet_inother_cross_platform_build_system i zainstaluj 3. Edytuj plik konfiguracyjny dla paska i zmień X na Y 4. Zobacz krok 4 powyżej. Pamiętaj jednak, aby użyć yet_another_cross_platform_build_system. 5. Patrz krok 5 powyżej. Instalacja w systemie Windows 64-bit Postępuj zgodnie z instrukcjami dla 32-bitowego systemu Windows, ale przed zainstalowaniem paska musisz także zainstalować Super64Library. O foo: Biblioteka foo istnieje tylko po to, by sprawiać ci ból i cierpienie. Raport od użytkowników: MegaWidget nie działa z Super64Library w wersji 3.x. Zamiast tego użyj wersji 2.x. (Zobacz tutaj prawdziwy przykład tego, czego chcę uniknąć) Widzę to cały czas. Instrukcje, które odwołują się do innych instrukcji lub pozycji poza procedurą. Wymagane informacje, do których nie ma odniesienia tam, gdzie są potrzebne. Procedury, które nie kończą się na celu/celu. ARGH! W moim wymyślonym przykładzie procedura Linuksa jest wystarczająco jasna, ale instrukcje Windowsa są coraz bardziej okropne. Jako użytkownik chcę JEDNEJ jasnej procedury, aby osiągnąć mój cel. Gdybym chciał postępować zgodnie z instrukcjami dla Windows 64bit, powinny wyglądać tak: Jak zainstalować MegaWidget dla Windows 64bit 1. Pobierz i zainstaluj bibliotekę foo. UWAGA: Biblioteka foo istnieje tylko po to, by sprawiać ci ból i cierpienie. 2. Pobierz i zainstaluj Super64Library UWAGA: Potrzebujesz Super64Library 2.x, a nie nowszej wersji 3.x. 3. Pobierz yet_another_cross_platform_build_system i zainstaluj go 4. Pobierz źródło paska 5. Edytuj plik konfiguracyjny paska i zmień X na Y 6. Użyj yet_inother_cross_platform_build_system do skompilowania i zainstalowania paska 7. Pobierz źródło MegaWidget. 8. Użyj yet_inother_cross_platform_build_system do skompilowania i zainstalowania MegaWidget Procedura, która doprowadzi mnie do pożądanego celu, zawiera wszystko, co zawiera ta procedura. * * * **TL;DR** : Większość wielocelowych procedur to bzdury i trudne do naśladowania. **Jako programista:** też jestem winny pisania takich bzdur. Nie chcę już być kimś, kto przekazuje moim użytkownikom okropne instrukcje. Jednak pisanie, aktualizowanie i utrzymywanie procedur mutil-goal w płaskim pliku tekstowym jest trudne i podatne na błędy. Potrzebuję narzędzia, które wygeneruje dla mnie procedury. Być może mógłbym stworzyć taki schemat blokowy... ![makieta Gliffy](http://i.stack.imgur.com/STemz.png) ... a narzędzie wyeksportowałoby kompletne procedury dla trzech celów. **Czy coś takiego istnieje?**


title: Jakie funkcje językowe są uważane za szkodliwe?

text: Proszę, **wyjaśnij, dlaczego** i wymień, które języki mają zaimplementowaną (błędną) funkcję O ile wiesz. Publikuj to, co uważasz za szkodliwe, a nie to, czego nie lubisz.


title: Funkcja skrótu do progresywnych zmian

text: Szukam algorytmu mieszającego, który działa w ten sposób. Zaczynam od pliku tekstowego i obliczam jego hash. Teraz wiem, że usunę jeden znak, powiedzmy, na pozycji 67, a tym znakiem jest „m”, i chciałbym obliczyć nowy skrót bez ponownego stosowania funkcji skrótu do pełnego tekstu, ale zamiast tego przy użyciu skrótu pełny tekst i wiedza, że usunąłem 'm' z pozycji 67. Jeśli przeczytam 'm' w tym samym miejscu, ponownie przeliczę tą samą metodologią i otrzymam ten sam początkowy hash. Jaka jest nazwa techniczna takich funkcji mieszających, abym mógł szukać wskazówek? Myślę, że CRC nie jest tym, czego potrzebuję, ponieważ (afaik) CRC działa na dodawaniu strumienia, a nie na arbitralnych zmianach w początkowych danych.


title: Czy udostępnienie programiście wolniejszej maszyny programistycznej skutkuje szybszym/bardziej wydajnym kodem?

text: Załóżmy, że daję moim programistom niesamowicie szybką maszynę. VS2010 oparty na WPF ładuje się bardzo szybko. Deweloper tworzy następnie aplikację WPF lub WPF/e, która działa dobrze na jego komputerze, ale znacznie wolniej w świecie rzeczywistym. To pytanie składa się z dwóch części... 1) Jeśli dam programiście wolniejszą maszynę, czy to oznacza, że otrzymany kod może być szybszy lub bardziej wydajny? 2) Co mogę zrobić, aby zapewnić moim programistom szybkie środowisko IDE, jednocześnie dając „typowe” środowisko uruchomieniowe? **Aktualizacja:** Dla przypomnienia, przygotowuję bezstronną odpowiedź dla kierownictwa. To nie jest mój pomysł, a wy pomagacie mi poprawiać błędne prośby mojego klienta. Dzięki za danie mi więcej amunicji i odniesienia do tego, gdzie i kiedy się do tego podejść. Dodałem +1 ważnych przypadków użycia, takich jak: \- specyficzne optymalizacje programowania po stronie serwera \- laboratoria testowe \- możliwość zakupu lepszego serwera zamiast najlepszych kart graficznych


title: Technologia/Techniki zapobiegające obraźliwym obrazom na stronie internetowej

text: Planuję zbudować stronę internetową, której jedną z głównych cech jest wykorzystanie zdjęć. Zastanawiałem się, jakie istniejące techniki są używane do zapobiegania ładowaniu przez użytkowników obraźliwych zdjęć (np. pornografii). tj. Z czego korzysta Facebook lub Pinterest? Chciałbym również wiedzieć, jakie byłyby twoje zalecenia dotyczące kontrolowania obraźliwych zdjęć, które mają zostać przesłane na stronę (może narzędzia OpenSource..) Biorąc pod uwagę, że jest to osobisty projekt i będzie rozwijany przy bardzo małym budżecie. Dziękuję Ci


title: Wydrukuj następną najmniejszą z 2^i * 5^j gdzie i,j >= 0

text: Niedawno zadano mi to pytanie podczas technicznego przeglądu telefonu i nie poszło mi dobrze. Pytanie jest zawarte dosłownie poniżej. > Generuj `{2^i * 5^j | i,j >= 0}` posortowana kolekcja. Ciągle drukuj > następną najmniejszą wartość. > > Przykład: `{ 1, 2, 4, 5, 8, 10...}` "Następny najmniejszy" każe mi myśleć, że w grę wchodzi stos min, ale tak naprawdę nie wiedziałem, gdzie się udać i nie pomocy udzielał ankieter. Czy ktoś ma radę jak rozwiązać taki problem?


title: Wywołanie tej samej metody na innym obiekcie - Rekurencja?

text: Mam obiekt, który zawiera odwołanie do innego obiektu tego samego typu. Przykład w PHP: class A { protected $child; public function __construct(A $child = null) { $this->child = $child; } public function go() { if($to->dziecko) { $to->dziecko->go(); } } } $a = nowe A(nowe A()); $a->go(); Czy metoda `go` jest uważana za metodę rekurencyjną? Sam widzę to w obie strony i nie jestem pewien, czy jest „prawidłowa” odpowiedź, czy nie, ale zakładam, że tak.


title: Co uważa się za ostateczne referencje do ładowania wiedzy po stronie klienta?

text: Jestem ćpunem po stronie serwera i mam na myśli to, że spędzam czas na pisaniu kodu, który nie jest widoczny dla nikogo. Jestem zainteresowany uzupełnieniem mojego zestawu umiejętności i staniem się bardziej samowystarczalnym dzięki pisaniu aplikacji internetowych z pełnym stosem. Ale trudno mi pracować z tego rodzaju „organicznością” technologii HTML po stronie klienta. Wiem, że nic nie zastąpi czasu i doświadczenia, ale gdyby doświadczony deweloper po stronie klienta zaczynał od zera, co by czytał/robił? EDYCJA: przykład odpowiedzi, którą dałbym po stronie serwera: > Poznaj najlepsze praktyki języka, w którym pracujesz, np. dla java > przeczytaj 'efektywna java'. Naucz się podstaw algorytmów, projektowania aplikacji > pojęć przydatnych w dowolnym języku, dwa dobre źródła to „projekt > wzorce”, „SICP”. Nie szukam: 'Naucz się CSS, HTML i Javascript.' Szukam czegoś takiego: > Intencja, uzasadnienie, koncepcje X są dobrze wyjaśnione w Y. Framework Z jest > dobrym przykładem, a kod źródłowy jest pouczający i dobrze udokumentowany.


title: Wiadomości z interfejsu użytkownika czy od subskrybentów?

text: Projektuję małą aplikację, która jest naprawdę justa gui dla wiersza poleceń przy użyciu vb.net. Pytanie 1. Czy wiadomości (msgbox) do użytkownika powinny pochodzić z interfejsu użytkownika, czy też wiadomości powinny pochodzić z subskrybentów i funkcji wywołanych przez interfejs użytkownika. Pytanie 2. Czy subs i funkcje powinny rzucać nowe wyjątki do interfejsu użytkownika, czy też powinny być one zawarte w sub/funkcji Pytanie 3. Czy instrukcje if powinny być używane na poziomie interfejsu użytkownika, czy też dane wejściowe użytkowników powinny być przekazywane do subs i funkcji w celu przetwarzania instrukcji if?


title: Najlepszy sposób na wyczyszczenie sald między płatnikami a odbiorcami

text: Powiedzmy, że jakieś 20 osób idzie do sklepu i każdy coś kupuje. Jeśli chodzi o płacenie, 5 z nich płaci całą kwotę 10 000 $ podzieloną nierówno między siebie. Ponieważ każdy kupił inne rzeczy, wszyscy są winni płatnikom różne kwoty. Obecnie istnieje wiele sposobów, w jakie płatnicy mogą rozliczać salda z odbiorcami dokładnie od 20 do potęgi 20. Moje pytanie brzmi, na jakiej podstawie technicznej płatnicy i odbiorcy powinni kontaktować się ze sobą w celu rozliczenia? Wszystkie rozwiązania nie mogą być równie dobre, czy są? Jednym ze sposobów rozliczania byłoby znalezienie płatników i odbiorców o równej kwocie, aby mogli się wzajemnie anulować, zmniejszając w ten sposób całkowitą liczbę przelewów. **AKTUALIZACJA:** 1. Ludzie mogą przekazywać dowolne kwoty każdemu. 2. Głównym celem jest zminimalizowanie całkowitej liczby przelewów. 3. Odbiorca płatności nie może zapłacić kwoty większej niż to, co jest mu winien, i zostać wtórnym płatnikiem. 4. Wyjściem powinna być lista sugerowanych przelewów. Sugerowany przelew będzie wyglądał tak: `{FromUser: a, ToUser: b, ClearanceAmount: 100}` 5. Płatnicy nie wiedzą, kto posiada ich dług. 6. Dług odbiorcy można podzielić na wielu płatników. 7. Odbiorcy wiedzą, ile każdy płatnik zapłacił z łącznej kwoty.


title: Czy uczymy się lepiej z wideo lub tekstem, czy jest to osobiste preferencje?

text: Nieustannie szukam nowych sposobów uczenia się i oczywiście w tym poszukiwaniu ważne jest, aby zrozumieć, jak najlepiej się uczymy. Czy jako programiści i programiści najlepiej uczymy się z filmów, czy z czytania tekstu, czy też zależy to od danej osoby? Dziękuję! ~Daniel


title: Program nie może zapisywać danych (plik tylko do odczytu) i traci je — błąd czy funkcja?

text: Odkryłem, że jakaś bardzo znana aplikacja (nazwy celowo nie ujawniam) ma "problem", gdy zapisuje metadane pliku i okazuje się, że plik jest tylko do odczytu. Program nie radzi sobie z tym zbyt wdzięcznie. Nie sprawdza, czy plik jest odczytywany tylko po otwarciu okna dialogowego metadanych. Dzięki temu użytkownik może wypełnić (dość długi) formularz, wprowadzić dość dużą ilość danych, nawet nie sprawdzając, czy będzie w stanie je zapisać. Sprawdza tylko, czy plik jest tylko do odczytu, podczas _zapisywania_ metadanych (próbując to zrobić). A jeśli stwierdzi, że plik jest w rzeczywistości tylko do odczytu, wyświetla tylko ostrzeżenie dla użytkownika i... **zamyka okno dialogowe** , powodując utratę danych przez użytkownika. Dla mnie jest to oczywisty błąd, który nie podlega dyskusji. Ponieważ twórcą tego programu jest mój e-znajomy, od razu się z nim skontaktowałem, pisząc (jak zwykle) " _Hej, właśnie zauważyłem kolejny błąd w twoim programie_ ". Jego odpowiedź po prostu mnie zszokowała, jak twierdził i zaczął mnie przekonywać, że **to nie jest błąd, można to traktować tylko jako dodatkową funkcję, której użytkownik _może_ chcieć** (mówiąc o mojej propozycji dodania jakiegoś ostrzeżenia, ten plik jest tylko do odczytu i dlatego zapis metadanych jest niemożliwy). Posunął się nawet (chyba) do pisania: > plik tylko do odczytu to problem użytkownika, a nie błąd w programie Była sobota, dzień pracy i męczący dla mnie. Pomyślałem sobie, że może w moim krwiobiegu jest za mało gorącej kawy, więc skontaktowałem się z kilkoma deweloperami, z którymi pracowałem przy różnych projektach. Wszystkie odpowiedzi były takie same: „Pewny błąd, nic więcej do dyskusji”. Odpowiedziałem autorowi tej aplikacji i mojemu przyjacielowi, podając mu najgłupszy przykład, z jakim mogłem przyjść: > Wyobraź sobie, że piszesz coś w Wordzie, zapisz dokument, > Word mówi Ci, że nie może zapisać pliku, ponieważ jest tylko do odczytu i... > zamyka dokument, tracąc wszystko, co napisałeś od ostatniego zapisania. Czy nazwałbyś to dodatkową funkcją i brakiem utraty danych? (...) > > A nazywasz to cechą i moim problemem? Znam wielu ludzi gotowych > ukrzyżować cię za taką funkcję! :) W odpowiedzi usłyszałem, że porównanie nie jest zbyt dobre, ponieważ nie piszę w metadanych tak wielu tekstów, jak w dokumencie Worda, więc "strata" jest nieistotna. Jestem **całkowicie zagubiony**, obie ręce opuszczone! Jak powiedziałem, dla mnie jest to pewien błąd poza wszelką dyskusją. Ale może przespałem jakąś radykalną rewolucję w sposobie definiowania błędu, więc może ktoś mnie uprzejmie oświeci. Kto z nas dwojga ma rację, a jeśli jest to autor programu, to dlaczego?


title: Czy przeprowadzono badania nad językoznawstwem programowania?

text: Języki programowania są językami formalnymi, ale w przeciwieństwie do wielu formalizmów, mają również pewne wrodzone _znaczenie_ zdefiniowane przez ich semantykę operacyjną lub, w przypadku języków znaczników, semantykę prezentacji. A języki programowania, choć w istocie formalne, są bardzo podobne do języków naturalnych, jeśli chodzi o komunikację, jaką umożliwiają. Chociaż rozwój języków programowania jest sztuczny, procesy ewolucji, pożyczania, mieszania i mutacji języka naturalnego mają dość wyraźne sztuczne odpowiedniki. Zastanawiam się więc: czy kiedykolwiek przeprowadzono jakieś szeroko zakrojone, dogłębne badania nad ewolucją i zachowaniem języków programowania _z perspektywy językoznawcy_?


title: Najbardziej niedoceniane narzędzie programistyczne

text: Mamy wiele świetnych narzędzi, które bardzo pomagają podczas programowania, takich jak dobrzy programiści, edytory tekstu, IDE, debuggery, systemy kontroli wersji itp. Niektóre z narzędzi są mniej lub bardziej „must have” narzędziami do wykonania zadania (np. kompilatory) . Wciąż są narzędzia, które bardzo pomagają, ale wciąż nie zwracają na siebie uwagi, z różnych powodów, na przykład kiedy zostały wydane, wyprzedziły swój czas i teraz są mniej lub bardziej zapomniane. Jaki rodzaj narzędzia programistycznego uważasz za _naj_ najbardziej niedoceniany? Zmotywuj swoją odpowiedź.


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

text: W tworzeniu stron internetowych często słyszysz terminy „element” i „kontrola”. Termin „element” jest często kojarzony z kodem HTML i najczęściej słyszysz termin „kontrolka” w programowaniu Asp.NET... ale w3c odnosi się do kontrolek w zaleceniu formularzy w dokumentach HTML, nieco zamazując wiersze. Czym jest kontrola, a czym elementem? Czym są takie same i czym się różnią? Czy jedno jest uogólnieniem drugiego?


title: Doświadczenie C# dla studentów

text: Gdzie można uzyskać prawdziwe doświadczenie z programowaniem w C# i .net? Zespoły open source zazwyczaj nie chcą zajmować się nowicjuszami, tworzenie projektów z innymi studentami też jest problematyczne z powodu braku wolontariuszy. Więc jakie jest rozwiązanie tego problemu?


title: Mikrooptymalizacja — ZŁE vs Tworzenie gier

text: W tworzeniu gier jest dużo C/C++, w aplikacjach biznesowych C#. Widziałem, jak deweloperzy C/C++ wyrażają zaniepokojenie tym, jak pojedyncza linia kodu przekłada się na montaż. W .NET niektórzy rzadko przechodzą do IL. W C# „mikrooptymalizacja” jest mile widziana, rzadka i zwykle jest stratą czasu. Wydaje się, że tak nie jest w przypadku tworzenia gier. Co konkretnie tworzy tę niespójność? Czy gry nieustannie przesuwają granice sprzętu? Jeśli tak, to czy wraz z poprawą sprzętu powinniśmy oczekiwać, że języki wyższego poziomu przejmą branżę gier? _Nie szukam debaty na temat wykonalności C# jako języka dla twórców gier. Wiem, że do pewnego stopnia zostało to zrobione. Skoncentruj się na mikrooptymalizacji. W szczególności różnica między deweloperami gier a programistami aplikacji_ **AKTUALIZACJA** Przez grę rozumiem nowoczesny, wielkoskalowy rozwój. NP. MMORPG, Xbox, PS3, Wii...


title: Jak uniknąć nadmiernego przeciążania metod?

text: W kodzie źródłowym naszej aplikacji mamy sporo miejsc, gdzie jedna klasa ma wiele metod o tych samych nazwach i różnych parametrach. Te metody zawsze mają wszystkie parametry „poprzedniej” metody plus jeszcze jeden. To wynik długiej ewolucji (przestarzały kod) i takiego myślenia (chyba): „ _Istnieje metoda M, która robi rzecz A. Muszę zrobić A + B. OK, wiem… dodam nowy parametr do M, utwórz w tym celu nową metodę, przenieś kod z M do nowej metody z jeszcze jednym parametrem, wykonaj tam A + B i wywołaj nową metodę z M z domyślną wartością nowego parametru._ " Tu jest przykład (w języku Java): class DocumentHome { (...) public Document createDocument(String name) { // po prostu wywołuje inną metodę z domyślną wartością jej parametru return createDocument(name, -1); } public Document createDocument(String name, int minPagesCount) { // po prostu wywołuje inną metodę z domyślną wartością jej parametru return createDocument(name, minPagesCount, false); } public Document createDocument(String name, int minPagesCount, boolean firstPageBlank) { // po prostu wywołuje inną metodę z domyślną wartością jej parametru return createDocument(name, minPagesCount, false, ""); } public Document createDocument(String name, int minPagesCount, boolean firstPageBlank, String title) { // tutaj wykonywana jest prawdziwa praca (...) } (...) } Czuję, że to jest złe. Nie dość, że nie możemy bez końca dodawać nowych parametrów, to jeszcze kod jest trudny do rozszerzenia/zmiany ze względu na wszystkie zależności między metodami. Oto kilka sposobów, jak zrobić to lepiej: 1. Wprowadź obiekt parametru: class DocumentCreationParams { String name; int minPagesCount; wartość logiczna pierwszaStronaPuste; Tytuł ciągu; (...) } class DokumentHome { public Document createDocument(DocumentCreationParams p) { // tu kończy się prawdziwa praca (...) } } 2. Ustaw parametry na obiekt `DocumentHome` zanim wywołamy `createDocument() ` @In DocumentHome dh = null; (...) dh.setName(...); dh.setMinPagesCount(...); dh.setPierwszaStronaBlank(...); Dokument nowyDokument = dh.createDocument(); 3. Podziel pracę na różne metody i wywołuj je w razie potrzeby: @In DocumentHome dh = null; Dokument nowyDokument = dh.createDocument(); dh.changeName(nowyDokument, "nazwa"); dh.addFirstBlankPage(nowy dokument); dh.changeMinPagesCount (nowy dokument, 10); **Moje pytania:** 1. Czy opisany problem rzeczywiście jest problemem? 2. Co myślisz o proponowanych rozwiązaniach? Którą wolałbyś (na podstawie swojego doświadczenia)? 3. Czy możesz wymyślić inne rozwiązanie?


title: Jak nazywamy proces zamiany kodów zakodowanych na sztywno w kody z kodowaniem miękkim?

text: Czy jest jakiś konkretny termin określający proces modyfikacji kodów zakodowanych na stałe w kody z kodowaniem miękkim? Muszę zgłosić to, co robię kierownikowi projektu, czy mam po prostu wstawić „zmienianie kodów zakodowanych na sztywno w kody kodowane programowo”? Przykład "kodów zakodowanych na stałe" int random(){ return 42; } Przykład "kodów programowych" int random(){ return Random.nextInt(); } kody zakodowane na sztywno mogą spełniać wymagania dotyczące zestawu danych wejściowych, ale nie są elastyczne. EDYCJA: Akceptowane jako refaktoryzacja kodu.


title: Upewnij się, że każda klasa ma tylko jedną odpowiedzialność, dlaczego?

text: Zgodnie z dokumentacją Microsoftu, artykułem Wikipedia SOLID principe lub większością architektów IT musimy zapewnić, że każda klasa ma tylko jedną odpowiedzialność. Chciałbym wiedzieć dlaczego, bo jeśli wszyscy wydają się zgadzać z tą zasadą, to nikt nie wydaje się zgadzać co do powodów tej zasady. Niektórzy przytaczają lepszą konserwację, inni twierdzą, że zapewnia ona łatwe testowanie lub sprawia, że klasa jest bardziej niezawodna lub zapewnia bezpieczeństwo. Co jest poprawne i co to właściwie oznacza? Dlaczego poprawia to utrzymanie, łatwiejsze testowanie lub bardziej niezawodny kod?


title: Dokumentacja XML dla klas IoC

text: Pracuję nad aplikacją, która używa Inversion of Control, aby osiągnąć luźne sprzężenie między warstwami dostępu do danych i biznesu. Mając ILoanApplicationRepository i LoanApplicationRepository, gdzie powinienem przechowywać komentarze XML, które dokumentują członków klasy? na interfejsie czy na konkretnej klasie? czy powinienem to zrobić na obu?


title: Czy są jakieś realne korzyści z warstwy DAO?

text: Kiedy po raz pierwszy zacząłem używać Hibernate, słyszałem o całej radości z używania warstwy DAO. Początkowo miało to sens dla mojego problemu: zamierzałem poeksperymentować z Hibernate, a później eksperymentować z NoSQL i/lub XML, aby zdobyć doświadczenie. W tamtym czasie miało to sens Zanim pójdę dalej, chcę powiedzieć, że moja obecna warstwa DAO nie jest „prawdziwą” warstwą dao. To więcej niż kilka obiektów danych wspieranych przez interfejsy i "kontroler", który generuje nowe obiekty, zapytania i czyści po zamknięciu aplikacji. Teraz, chociaż wybieram Spring, warstwa DAO zaczyna mieć coraz mniej sensu. NoSQL jest zgrabny iw ogóle, ale naprawdę zaczynam zastanawiać się, czy jest tego wart. Nie jestem nawet pewien, czy moje dane nadają się do NoSQL, działa całkiem dobrze w relacyjnej bazie danych. Okropne przechowywanie XML wydaje się być przeszkodą, którą przejdę później. Poza tym jest dużo kodu, który musiałbym obsługiwać dla innych opcji przechowywania: Mój niestandardowy "Kontroler" + interfejsy Zillion Spring do zaimplementowania + inne rzeczy, których mi brakuje. Jednak to, co powstrzymuje mnie przed po prostu wyrwaniem tego i połączeniem modułów dao core i hibernate, jest to, że istnieje kilka innych projektów, które mają warstwę DAO (prawdziwą) z tylko Spring i Hibernate. Oznacza to, że mają wszystkie interfejsy, wszystkie klasy abstrakcyjne, całą złożoność tylko z tymi dwoma frameworkami. Ponieważ dopiero zaczynam w świecie Spring+Hibernacji, niechętnie sprzeciwiam się temu, co robią inni, mając tak małe doświadczenie. **Pytanie:** Czy są inne zalety, których mi brakuje w przypadku warstwy DAO? A dlaczego inne projekty miałyby mieć warstwę DAO, skoro używają tylko jednej bazy danych?


title: Jak mogę jak najefektywniej dowiedzieć się o rozproszonych systemach oprogramowania?

text: Próbuję nauczyć się przetwarzania w chmurze, zwłaszcza idei operacji rozproszonych (Grid Computing?) dla projektu, nad którym pracuję. Będziemy musieli wykonywać rozproszone, odporne na błędy operacje na bardzo dużym zbiorze danych, który będziemy również odpowiedzialni za przechowywanie i utrzymywanie w zoptymalizowany sposób. Jeśli próbuję uczyć się z książek lub białych ksiąg, na jakie rzeczy powinienem zwrócić uwagę i na czym się skupić, aby jak najefektywniej i efektywniej zdobyć tę wiedzę?


title: Jaka jest korzyść z zapisywania do tymczasowej lokalizacji, a następnie kopiowania go do zamierzonego miejsca docelowego?

text: Piszę aplikację, która działa z obrazami satelitarnymi, a mój szef poprosił mnie, żebym przyjrzał się niektórym z komercyjnych aplikacji i zobaczył, jak się zachowują. Znalazłem dziwne zachowanie, a potem, gdy szukałem, znalazłem je również w innych standardowych aplikacjach. Te programy najpierw zapisują w folderze temp, a następnie kopiują go do zamierzonego miejsca docelowego. Przykład: 7zip najpierw rozpakowuje do folderu temp, a następnie kopiuje wyodrębnione dane do lokalizacji, do której prosiłeś o wyodrębnienie danych. Widzę kilka problemów związanych z tym podejściem: 1. Folder temp może nie mieć wystarczającej ilości miejsca, podczas gdy zamierzona lokalizacja może mieć tyle miejsca. 2. Jeśli jest to duży plik, operacja kopiowania może zająć dużo czasu. Dużo o tym myślałem, ale nie widziałem w tym ani jednego pozytywnego punktu. Czy czegoś mi brakuje, czy jest to realna korzyść?


title: Interfejs API wyszukiwania domen

text: Chcę włączyć funkcję wyszukiwania nazw domen w mojej witrynie, aby upewnić się, czy domena jest dostępna, czy nie. Jedynym interfejsem API, jaki udało mi się znaleźć w sieci, jest http://www.domaintools.com/api/docs/domain-search/ . Ale to jest płatne. Czy są dostępne inne interfejsy API, które mogą być tańsze / bezpłatne. Pracuję z php, jquery Dziękuje


title: Co zrobić z folderem .git i danymi w Xcode?

text: Używam Hg do mojego rozwoju. Ostatnio zaktualizowałem do Lion i Xcode 4.2 i stworzyłem projekt Xcode w moim drzewie źródłowym. Xcode domyślnie używa Git i utworzonego folderu .git w folderze projektu. Możliwość wersjonowania w Xcode jest plusem, ale jest trochę zbędna zarówno w przypadku Git, jak i Hg. Problem polega na tym, czy powinienem zaewidencjonować .git (folder i pliki) w folderze projektu Xcode, czy nie? A może powinienem po prostu wyłączyć Git w Xcode i usunąć folder .git? Dziękuję.


title: Dlaczego należy unikać scalania między zespołami (kołowego) w wielozespołowej kontroli wersji?

text: ![cross-stream lub cross-team merge](http://i.stack.imgur.com/OIZ4a.png) Proszę wybaczyć grafikę, wiem, że wygląda jak wydłużony prom imperialny, ale tak właśnie jest wizualizować strategię kontroli wersji dla wielu zespołów (lub wielu strumieni). Centralnym rdzeniem jest repozytorium trunk (lub master). Gdyby strumieni było dużo więcej, można sobie wyobrazić więcej płaszczyzn wystających z pnia, w których w obrębie tych strumieni zachodzą różne rozgałęzienia i łączenia (cieńsze linie). Czerwona linia pokazuje * _A_ * wszy z księgowości, które chcą wziąć kawałek kodu, który * _B_ *ob z zespołu kopii zapasowych dopiero co sfałszował (potrzebuje go pilnie z jakiegoś powodu, o którym nie wiem). Właściwie to nie jest zmiana jednej linii, którą może po prostu zrobić sama. Zamiast tego możesz wziąć pod uwagę, że księgowość jest mocno blokowana i aby kontynuować, potrzebujesz dużego zestawu zmian z kopii zapasowych. Teraz, jak rozumiem, jest to sprzeczne z najlepszymi praktykami, a wymagane zmiany powinny przejść przez bagażnik, a Alice powinna je odebrać w ten sposób, zamiast iść na skróty przedstawione na ilustracji (tunel kontrolny wersji). Jednak, chociaż widziałem to w różnych miejscach, nigdy nie widziałem głębokich, długich i dobrze uzasadnionych powodów, dla których nie pozwalać na połączenie krzyżowe (lub kołowe?). Jedyne, o czym mogę pomyśleć, to to, że myślę, że może to prowadzić do lepszego ręcznego rozwiązywania konfliktów. Oto pytania: * Dlaczego zezwalanie na scalanie między strumieniami jest złe? (Potrzebuję dobrze zdefiniowanych powodów, aby przekonać moich współpracowników o różnych poglądach, dlaczego nie powinno się tego robić) * Czy są jakieś uzasadnione powody, by sprzeciwiać się najlepszym praktykom? * Co jeśli zespół Alice zbliża się do ostatecznego terminu wydania, czy może być wyjątek?