title: ASP vs javascript vs jQuery vs User Controls vs AJAX

text: Coraz częściej podczas tworzenia witryn wykorzystuję więcej technologii po stronie klienta, takich jak Javascript, jQuery i AJAX. Dla trzech różnych stron zmierzyłem rozmiar HTML wysyłanego do przeglądarki (bez obrazków i CSS). To, co znalazłem to: * Strona, która ma normalne kontrolki ASP.NET + trochę jQuery: około. size = 30kb * Strona używająca niektórych kontrolek użytkownika, które obsługują AJAX i po stronie klienta: około size = 50kb * Strona używająca bardziej złożonych kontrolek użytkownika z biblioteki z dużym wsparciem po stronie klienta: około. size = 110kb Jak widać rozmiar przesyłanych danych wydaje się rosnąć wraz z dodawaniem obsługi po stronie klienta i funkcji AJAX. Zwiększa to wymagania dotyczące przepustowości lokacji i przypuszczalnie obciążenia we/wy serwerów, co może zmniejszyć liczbę jednoczesnych użytkowników, którzy mogą być obsługiwani. Czy powinienem się martwić o równoważenie bogatych funkcji po stronie klienta i interaktywności z obciążeniem serwera i wykorzystaniem przepustowości? Jakie są priorytety, jeśli w ogóle?


title: Czy czasowniki HTTP powinny być używane semantycznie?

text: Jeśli tworzę aplikację internetową, która integruje się z backendem po stronie serwera, czy za najlepszą praktykę uważa się semantyczne używanie metod HTTP? To znaczy, na przykład, jeśli pobieram dane (np. w celu wypełnienia menu itp.), użyłbym GET, ale do aktualizacji danych (np. zapisania rekordu) użyłbym POST. (Zdaję sobie sprawę, że istnieją inne metody, które mogą być nawet bardziej odpowiednie, ale musimy wziąć pod uwagę obsługę przeglądarek.) Widzę korzyści w tym sensie, że jest to efektywnie API RESTful, ale przy nieco zwiększonych kosztach rozwoju. W moich poprzednich projektach wykonałem POST wszystko: Czy warto przejść na sposób myślenia RESTful po prostu ze względu na najlepsze praktyki?


title: Dlaczego dodatkowy kod i złożoność, gdy model danych i interakcja są proste, jest uważany za wadę modelu MVC?

text: Zgodnie ze slajdami podanymi przez mojego wykładowcę, jedną z wad modelu MVC jest > dodatkowy kod i złożoność, gdy model danych i interakcja są proste Dlaczego tak jest, zakładam, że nie ma to znaczenia, ponieważ model danych i interakcja są na dwóch różne elementy modelu MVC?


title: Frameworki/metodologie dokumentowania scenariuszy funkcjonalnych/przypadków użycia i mapowania ich do bazy kodu

text: Czy istnieje ustalona struktura lub metodologia dokumentowania przypadków funkcjonalnych lub przypadków użycia i mapowania ich na jednostki kodu? Np. załóżmy, że jesteś nowym zatrudnionym programistą przydzielonym do pracy nad aplikacją. Czy istnieje lepszy sposób, aby przyspieszyć, niż przejrzenie listy funkcji tej aplikacji lub scenariuszy przypadków funkcjonalnych, tj. co wszystko, co możesz zrobić z aplikacją? Na przykład weźmy Evernote (mój ulubiony SaaS) jako przykład: 1. Pomyślne zalogowanie (duuhh, ale nadal jest to technicznie przypadek użycia) 2. Nie udało się zalogować (co dalej) 3. Utwórz kilka notatników 4. Utwórz podstawowa, tylko tekstowa notatka 5. Przenieś notatkę z jednego notatnika do drugiego 6. Utwórz notatkę z dołączonymi multimediami 7. Usuń notatkę 8. Udostępnij notatkę publicznie za pośrednictwem stałego adresu URL itp. Teraz to proste. Ale to, co chciałbym zrobić, to mieć sposób na odwzorowanie każdego z tych elementów na fragmenty kodu, które go wykorzystują. W ten sposób, podczas sprawdzania lub uczenia się lub inżynierii wstecznej kodu, można (pod warunkiem, że dokumentacja jest aktualna) łatwo prześledzić funkcję, metodę, skrypt, dokument HTML, usługę REST, serwlet itp. do wszystkich przypadków funkcjonalnych, które wykorzystywać go i podlegać jego wpływowi.


title: Czy w najbliższej przyszłości wrócimy(?) do arytmetyki stałoprzecinkowej?

text: O ile dobrze pamiętam, to był ciągły trend przeszłości, jestem tylko studentem, więc mogę się mylić: * Dawno temu: liczby całkowite i obliczenia. Bardzo precyzyjny, jednak nie może prezentować dużego zasięgu. * Na późniejszym etapie: Dodano liczby zmiennoprzecinkowe o pojedynczej precyzji („floats”), a także dodano FPU, które są niesamowicie szybkie w obliczeniach z nimi. * Całkiem niedawno(?): Liczby zmiennoprzecinkowe o podwójnej precyzji („podwaja”) zaczynają być coraz bardziej powszechne. Na przykład w OpenGL Shader Language stale wprowadzają coraz więcej metod, które natywnie współpracują z dubletami. Myślę, że pracują też nad FPU dla deblów? Ale też kilka lat temu nastąpiła zmiana na przetwarzanie 64-bitowe, więc mam kilka pytań: * Czy jest teraz więcej opcji do obliczania na liczbach stałoprzecinkowych (może dwa rejestry int64?)? * Dlaczego, o ile mi wiadomo, nie ma określonych jednostek do szybkiego obliczania liczb całkowitych w odniesieniu do liczb stałoprzecinkowych? Może większość tego, co mówię, nie ma większego sensu, ale myślę, że pytanie pozostaje aktualne. Czy w najbliższej przyszłości zostanie przestawiony na arytmetykę stałoprzecinkową?


title: Nowa aplikacja Silverlight. MVVM. Usługi RIA a CSLA

text: Kolejne 2 dni czytania i oglądania dem i zaczynamy. Dla mojej korporacyjnej aplikacji LoB Silverlight zamierzam użyć: 1. Prism dla aspektów UI i modułowości. 2. Wzór MVVM (przy użyciu Prism) 3. ??? przenoszenie danych i sprawdzanie poprawności... 4. Entity Framework dla dostępu do danych 5. SQL Server dla danych Ok, główny dylemat to #3. Jeśli nie będę używał żadnego frameworka, będę musiał sam wymyślić, jak zrobić wszystkie rzeczy związane z CRUD. Mogę zrobić RESTful WCF, mogę zrobić SOAP. Wszystko to == kodowanie RĘCZNE. Mogę zrobić usługi RIA. Widzę, co to robi i jest fajnie do bezpośredniego dopasowania do mojej warstwy danych, ALE nie jest to świetne, jeśli będzie dużo logiki biznesowej. Gdzie bym to położył? W moim ViewModelu? Kolejną kwestią jest to, jak te usługi się utrzymały. Po wygenerowaniu - powinienem je obsługiwać ręcznie, jeśli dane ulegną zmianie? Znalazłem też CSLA, który z jednej strony wydaje się fajny, ale otrzymuje wiele krytyki. CSLA pozwoli mi pisać logikę biznesową i kształtować obiekt tak, jak potrzebowałem, a potem mogę go przekazać "przez" ViewModel i wszystko jest w porządku. Coś mi mówi, że RIA Services będzie dużo szybciej pisać. Podoba mi się również to, że nie muszę dołączać dodatkowych zależności. Od 2010 roku nie ma żadnych blogów ani wzmianek o RIA Services. Czy to idzie pod tabelę? Nie jest powszechnie akceptowany? Nie skalujesz się dobrze dla dużych aplikacji? Próbuję zdecydować, na który powinienem postawić. Usługi CSLA lub RIA. LUB?


title: Schemat bazy danych porównania cen

text: Mam mnóstwo danych od wielu sprzedawców. Każdy produkt sprzedawany przez każdego detalistę może, ale nie musi być sprzedawany przez innego detalistę w bazie danych. Jeśli wielu sprzedawców sprzedaje ten sam produkt, produkt można zidentyfikować za pomocą kodu SKU. Obecnie mam 1 bazę danych dla każdego sprzedawcy. Mam problem z określeniem odpowiedniego schematu bazy danych w celu określenia, ilu sprzedawców detalicznych sprzedaje ten sam produkt. Czy powinienem mieć 1 stół u wszystkich sprzedawców?


title: Kluczowe punkty umowy o programowanie na wynajem?

text: **Jakie są ważne i łatwe do przeoczenia punkty, które powinny znaleźć się w umowie na programowanie do wynajęcia?** Niedawno mieliśmy doświadczenie edukacyjne jako klient zatrudniający firmę programistyczną: w podpisanej przez nas umowie nie było żadnej wzmianki o praktyki rozliczeniowe, takie jak * Minimalna jednostka rozliczeniowa. 5 minutowa rozmowa telefoniczna została naliczona jako 1 godzina. * Podział pracy. Jeśli dwóch wykonawców w firmie pracowało nad czymś tego samego dnia, mieli rozliczane godziny i zaokrąglane w górę oddzielnie. * Jakie rzeczy podlegały rozliczeniu. Otrzymaliśmy od nich rachunek za „zainstalowanie programu Visio”, mimo że poprosiliśmy ich, aby używali go na naszym serwerze terminalowym dostępnym przez VPN). Wolimy uczyć się na doświadczeniach _innych_ ludzi niż na własnych, dlatego mamy nadzieję, że poznamy pomysły społeczności na temat innych ważnych punktów, których możemy przegapić. Interesują mnie obie strony medalu, ponieważ byłem i ponownie będę programistą kontraktowym, chociaż w tej chwili myślę o tym bardziej dla potrzeb rekrutacyjnych mojej firmy. Tak więc punkty ważne zarówno dla klienta, jak i wykonawcy są mile widziane.


title: Programista samouk szukający porady

text: Potrzebuję ogólnych rad, jak kontynuować studia programistyczne. Jestem programistą samoukiem i zacząłem programować gdzieś jesienią 2011 roku. Zacząłem od książek o C++ i Javie i nauczyłem się wszystkiego aż do OOP (z wyjątkiem obsługi pamięci w c++). Później zdecydowałem, że chcę pracować z web-developmentem, więc nauczyłem się składni PHP i latem rozpocząłem swój pierwszy projekt, który zaowocował http://doostr.com (oczywiście prace w toku) Głównym powodem, dla którego rozpocząłem projekt było to, że będę zmuszony rozwiązywać różnego rodzaju problemy, z którymi wiedziałem, że napotkam po drodze. Poznałem relacyjne bazy danych i zaprojektowałem własne tabele w MySQL (trzecia forma normalizacji), nauczyłem się logiki i funkcji SQL, nabrałem biegłości w programowaniu, intensywnie wykorzystując podstawowe narzędzia programistyczne (zmienne, pętle, tablice, funkcje, klasy), natywne funkcje PHP , MVC, Javascript (biblioteka jQuery) oraz podstawy CSS/HTML. Użyłem twittera-bootstrapa jako bazy do projektowania, ponieważ chciałem przyspieszyć projektowanie i skupić się na programowaniu. Teraz czuję, że po prostu powtarzam rzeczy, których się nauczyłem wcześniej. Czuję, że muszę skontaktować się z bardziej doświadczonymi programistami w profesjonalnym środowisku programistycznym, od którego mogę się więcej nauczyć, więc przygotowuję się do ubiegania się o pracę jako stażysta programisty backendowego (bezpłatnie) i używam mojego projektu jako życiorysu (ja nie mam dyplomu z informatyki). Potrzebuję ogólnych porad od pracujących profesjonalistów, jak nie tylko przygotować się do tego, z czym chcę pracować, ale także jak ogólnie kontynuować moją ścieżkę programistyczną/deweloperską. Zapytałem znajomego, który pracuje z javą i powiedział, że powinienem znaleźć dobre książki o wzorcach projektowych. Macie jakieś dobre sugestie? Jakikolwiek inny język, który byłby dobry do połączenia z PHP/MySQL? Znam składnię Java/C++. Przyjmę każdą radę, którą możesz mieć. Możesz wejść na moją stronę, założyć konto i przetestować funkcjonalność, a to może dać wskazówkę, do czego jestem zdolny. Dziękuje za przeczytanie.


title: Drogie optymalizacje AOT

text: Kilka razy widziałem, że AOT może uruchamiać droższe optymalizacje, których użycie przez JIT zajmuje zbyt dużo czasu. Ale nigdy nie widziałem, aby napisano, czym dokładnie są te optymalizacje. Zastanawiam się więc, co to za optymalizacje?


title: Najszybsza implementacja sortowania bibliotek Haskella

text: Implementuję aplikację w Haskell i do sortowania wykorzystuję funkcję biblioteczną `Data.List.sort`. Zastanawiałem się jednak, czy jest to najszybsza implementacja sortowania w standardowej bibliotece Haskell (być może listy nie są najlepszym wyborem do wydajnego sortowania). Znalazłem różne alternatywy, m.in. sortowanie sterty po tablicach, sortowanie po sekwencjach (ale dokumentacja nie podaje jakiego rodzaju algorytmu jest używany). Moje pytanie brzmi: jaka jest najszybsza implementacja sortowania (typ kontenera + funkcja sortowania) dostarczana przez standardową bibliotekę Haskell? Czy istnieje jakaś strona dokumentacji zawierająca listę wszystkich funkcji sortowania bibliotek i porównującą ich wydajność wrt? **EDYTUJ** Aby zapewnić więcej kontekstu, przeprowadzam test porównawczy. Napisałem prosty program w językach C, Java, Python i Haskell, który 1. Czyta 1000000 ciągów (linii) z pliku tekstowego. 2. Sortuje ciągi za pomocą wbudowanego (bibliotecznego) algorytmu sortowania. 3. Zapisuje posortowaną listę ciągów do pliku. Dla każdej implementacji mierzę tylko czas sortowania (pomijając czas potrzebny na dyskowe IO). Uruchamiam benchmark na Ubuntu 12.04, otrzymuję * C (gcc 4.6.3, `qsort` na `char **`): 0.890 s * Java (OpenJDK 64-Bit 1.7.0_09, `Collections.sort()` na ` java.util.LinkedList<String>`): 1.307 s * Python (Python 2.7.3, `list.sort()`): 1.072 s * Haskell (GHC 7.4.1, `Data.List.sort` na `[ Data.ByteString.UTF8.ByteString]`): 11.864 s Zastanawiam się więc, czy w Haskell jest inna funkcja typu danych / biblioteka, która może dać lepszą wydajność.


title: Korzystanie z MVC w aplikacji Java

text: Muszę napisać wieloplatformową aplikację GUI do przetwarzania (w wielu wątkach) i wizualizacji dość dużych ilości danych. Idealnie aplikacja powinna być stosunkowo szybka i dobrze wyglądać. Interfejs aplikacji będzie składał się z widżetu tabeli, widżetu drzewa i niestandardowego widżetu do rysowania figur. Użytkownik będzie mógł modyfikować dane z dowolnego z tych widżetów, a zmiany powinny zostać natychmiast odzwierciedlone w innych widżetach. Oczywiście planuję użyć MVC. Jednak normalnie całe moje programowanie GUI wykonuję w C++/Qt i mam bardzo ograniczony kontakt z Javą. Dlatego bardzo bym wdzięczny za radę, jak zorganizować taką aplikację w Javie. W szczególności powinienem używać Swinga czy JavaFX? Jakie widżety wybrałbyś do pracy? Czy mógłbyś polecić jakieś książki/samouczki online, które obejmują te aspekty platformy Java? Będę bardzo wdzięczny za wszelkie opinie. Dziękuję! (to pytanie zostało pierwotnie opublikowane na Stack Overflow, ale ta strona została zasugerowana jako bardziej odpowiednie miejsce, aby je zadać)


title: Czy lepiej użyć $filehandlera czy FILEHANDLER?

text: Wygląda na to, że UCHWYT PLIKÓW jest częściej używany jako konwencja nazewnictwa obsługi niż $obsługa plików. Ale może dać błąd zwykłego słowa, jeśli zapomni się użyć *FILEHANDLER w niektórych konstrukcjach. Jakie są zalety i wady HANDLERS i $handlerów? Która konwencja nazewnictwa jest lepszą praktyką i dlaczego?


title: Aplikacja po stronie serwera C# 100 GB zestawu danych + Garbage Collection

text: Jeśli mam serwer z 256 GB pamięci RAM. Zastanawiałem się, czy mogę stworzyć aplikację C#, która ma 100 GB pamięci? Chcę utworzyć słownik, taki jak Dictionary<DateTime,Dictionary<string,Dictionary<string,DataClass>> Pierwszy słownik DateTime — maks. 40 odrębnych wartości Ciąg drugiego słownika: 2000 odrębnych wartości Ciąg trzeciego słownika: 100 odrębnych wartości Obiekt zostanie usunięty z Część DateTime (po każdej powiedzmy 1 godzinie), do 1 godziny, wypełniane są różne elementy wewnętrzne. W przypadku Javy powiedziano mi, że nawet jeśli serwer ma dużą pamięć, JVM zatrzyma się z powodu GC.


title: Czy PHP jest jedynym popularnym językiem, który łączy proste i asocjacyjne tablice w jeden typ?

text: Prowadzę badania na temat PHP i zastanawiam się, czy istnieją inne powszechnie używane języki programowania, które używają tablicy asocjacyjnej zarówno dla prostego przechowywania elementów indeksowanych, jak i funkcji klucz-wartość. Czy to sprawia, że PHP jest wyjątkowe w tym sensie? Na przykład język taki jak C# wyraźnie rozróżnia prostą tablicę i map\dictionary\hash T[] array = new T[]; Dictionary<T, S> mapa = new Dictionary<T, S>(); Tymczasem PHP nie czyni takiego rozróżnienia (w czasie projektowania) $array = array(1, 2, 3); $map = array("jeden" => 1, "dwa" => 2, "trzy" => 3)


title: Czy ktoś próbował stworzyć system, który wykorzystuje możliwości stylu e w JavaScript?

text: Możliwości na poziomie obiektu, które pojawiają się w E, wydają się interesującym dodatkiem do języka JavaScript, szczególnie biorąc pod uwagę problemy z bezpieczeństwem, z którymi borykają się programy JavaScript. Czy ktoś próbował zaimplementować system bezpieczeństwa typu obiektowego w JavaScript lub modyfikując maszynę wirtualną javascript?


title: Dlaczego ankieter zadał mi pytanie o ludzi jedzących curry?

text: Miałem kiedyś pytanie z wywiadu, które brzmiało... Przeprowadzający wywiad: "Czy mógłbyś mi powiedzieć, ile osób zje dziś wieczorem curry na kolację" Ja: "Em, przepraszam?" Przeprowadzający wywiad: „Nie _rzeczywista_ liczba, tylko oszacowanie” Właściwie zacząłem się przez to przebijać, kiedy zatrzymałem się i zapytałem, co to ma wspólnego z czymkolwiek w pracy. Prowadzący wywiad wymamrotał coś i ruszył dalej. Myślę, że pytanie brzmi, jaki jest sens tych absurdalnych pytań? Po prostu nie rozumiem, dlaczego zaczęli wymyślać takie rzeczy.


title: Wersja programistyczna Pigmaliona

text: Ile czasu zajęłoby i jakie zasoby byłyby potrzebne, aby wyszkolić kogoś zaraz po ukończeniu szkoły średniej i uczynić go „technicznie” zatrudnionym programistą? To prawda, że mogą nie być wystarczająco dojrzali, aby przejść wiele wywiadów, mieć wymagane doświadczenie w zakresie czasu lub domeny.


title: Jak zbudować zespół ludzi, którzy nie współpracują ze sobą?

text: Kieruję grupą około 30 ekspertów i architektów programistycznych. Chociaż ci ludzie są umieszczeni w schemacie organizacyjnym firm, tak naprawdę nie czują się jak zespół. Wynika to z ich środowiska pracy: 1) Ludzie są rozproszeni w ośmiu lokalizacjach, z max. dystans około 1000km (to jest Europa). 2) Ludzie nie pracują jako zespół, ale zamiast tego są wzywani jako pojedyncze osoby (a czasami małe grupy) do projektów tak długo, jak trwają projekty. 3) Podróżowanie jest nieco ograniczone, ponieważ wymaga to powodów biznesowych. Wiele odbywa się telefonicznie. Czy masz pomysły lub sugestie, jak sprawić, by ci ludzie poczuli się częścią wspólnej organizacji, w której wspierają innych i są wspierani przez innych. Żeby poznali swoich rówieśników, zbudowali sieć, nieformalnie wymieniali informacje? Żeby ogólnie mieli poczucie wspólnej płaszczyzny, czerpali motywację i satysfakcję z pracy?


title: Efektywna nauka 3 języków jednocześnie

text: Tak więc rozwijam się w PHP od półtora roku. Gdzieś w tamtych czasach postanowiłem nabyć umiejętności w Pythonie i Ruby, a niedawno nauczyć się ASP w C# (jako mój pierwszy skompilowany język). Dodając do tego, jestem frajerem dobrego kodowania CSS i Javascript. Martwię się, że to ogromne przedsięwzięcie. Proszę, nie mów mi teraz „powinieneś skupić się na jednym języku”, ponieważ po prostu mój przeklęty mózg każe mi uczyć się wyżej wymienionych języków i jak najszybciej zacząć działać. Mam 21 lat i pracuję w małej firmie zajmującej się tworzeniem stron internetowych. Nie są aż tak restrykcyjni, więc mogę poświęcić trochę czasu na naukę Pythona i ulepszanie PHP. W domu pracuję z Ruby i C#. Zrobiłem następujące rzeczy, aby skutecznie zarządzać moim procesem uczenia się: 1. Skup się na projektach wyłącznie internetowych 2. Ponownie wykorzystaj moje kody z PHP i przekonwertuj je przepisz je zgodnie ze składnią języka (do Ruby, do Python) 3. Utwórz blog online, aby przechowuj niektóre moje kody na wypadek, gdybym musiał wrócić do nich później. Wiem, że to dość szalone żonglować 4 językami serwera i 2 językami frontendu jednocześnie, ale hej, dobrze się przy tym bawię. Nie mówię, że chcę je opanować od razu, bo wiem, że opanowanie jednego języka zajmuje lata. Robiłeś to już kiedyś? Jak zarządzałeś swoim procesem uczenia się? Czy zrezygnowałeś w połowie i skupiłeś się tylko na jednym?


title: Jak mogę pracować na wielu językach programowania jednocześnie?

text: Zawsze zdarza mi się, że jeśli zostawię rzeczy na 1-2 miesiące to zapominam. 5 miesięcy temu miałem projekt w symfony i to zrobiłem. W tamtym czasie byłem bardzo przekonany, że mogę wykonać dowolny projekt w symfony2. Potem dostaliśmy jeden projekt Pythona w django i pracowałem nad nim w pełnym wymiarze godzin przez kilka miesięcy. Ale teraz, kiedy musiałem naprawić błąd w symfony2, całkowicie zapomniałem o strukturze i ciągle mieszam rzeczy python z php symfony. Chcę wiedzieć, jak ludzie pracują jednocześnie z różnymi językami. Czy powinienem uczyć się wszystkich języków jednocześnie, żeby nie zapomnieć? Jestem zdezorientowany, co powinienem zrobić. Albo za każdym razem, gdy robię jakiś projekt, robię notatki o każdym kroku, aby móc później śledzić to, jak to zrobiłem?


title: Ponowne odwiedzanie nauczonych języków

text: Jestem początkującym programistą, naprawdę chciałbym być świetny w wielu językach programowania. Zacząłem programować w mojej szkole, gdzie nie uczyli mnie dobrze, nie przestrzegali standardów, nawet nie rozróżniali IDE od kompilatora, ciągle nazywali Turbo C++ IDE kompilatorem, co było do niczego . A w tamtym czasie nie miałem dobrego dostępu do internetu. Ale mam internet, teraz mogę uczyć się nowych rzeczy i jak robić je poprawnie. Problem, jaki mam teraz, polega na tym, jak nauczyć się wszystkiego od nowa i jednocześnie uczyć się nowych rzeczy. W tej chwili próbuję robić JavaScript i Ruby, ale nie mogę się skoncentrować na żadnej z nich, ponieważ martwię się o tę, której się nie uczę (a także, gdy znajdę coś interesującego, pociąga mnie to, a nie ten, którego szukam, np. przyciąga wskaźnik do funkcji C, gdy próbuję nauczyć się wywołań zwrotnych w JavaScript) . Jak sobie z tym poradzić? Zrobić rutynę? I wielu z nas zaleca ćwiczenie przez tworzenie, ale nie mam pojęcia, co zrobić, ani tworzyć czegoś, co byłoby lepsze w praktyce programowania. Naprawdę potrzebuję pomocy. Edycja: w jaki sposób moje pytanie jest duplikatem? Wspomniane pytanie dotyczy tego, czy „lepiej” uczyć się wielu języków jednocześnie, czy nie. Pytam tutaj, jak skoncentrować się i właściwie zarządzać nauką języków. Dlatego nie jest to duplikat, a odpowiedzi, które tu otrzymuję, są świetne (których nie ma w tym pytaniu, chciałbym wskazać moderatorom, aby przestali tak oceniać).


title: Jak początkujący może opracować algorytm dla tego problemu?

text: Zanim się rozpalę, dopiero zaczynam programować. Uczę się Pythona sam od około tygodnia. Mam prawdziwy problem do rozwiązania: **Cel:** Najszybsza trasa ścieżką. **Problem:** * Podejdź do celu. Ścieżka to 128 kroków. * Chodzenie o 1 krok zwiększa wartość niebezpieczeństwa o 113 * Jeśli wartość niebezpieczeństwa przekracza limit, dochodzi do walki. Walka trwa 15 sekund, aby wygrać. * Limit jest losowo przydzielany na każdym kroku. * Wartość zagrożenia resetuje się do 0 po walce. **Oto sedno problemu:** W przypadku walki są dwie możliwe opcje: * Z walki można uciec. Ucieczka trwa 2 sekundy. Ale NIE resetuje wartości zagrożenia. * Zaakceptuj walkę. Resetuje wartość zagrożenia. * Im wyższa wartość zagrożenia, tym większa szansa na walkę. Napisałem kod, aby zrobić jeden krok. I napisałem kod dla odpowiedniej losowości wartości zagrożenia itp. Stworzyłem nawet wykres, który pokazuje dokładnie ścieżkę i potencjalne walki, z odpowiednimi limitami. Ten wykres pokazuje, co się dzieje, gdy zaakceptujesz każdą walkę (nie uciekaj): ![Ścieżka walki](http://i.stack.imgur.com/7p4Nv.png) **Będąc samoukiem, po prostu tego nie robię umiem napisać algorytm wyszukiwania, aby znaleźć najszybszą drogę przez określoną trasę.** Uważam, że muszę napisać **algorytm wycofywania**; zasadniczo rodzaj **brutalnej siły**. Po prostu nie wiem, jak to przetłumaczyć z angielskiego na kod. Minęły około 4 dni od samego myślenia o tym i nie mogę napisać niczego, co wyrażałoby równe próby rozwiązania problemu. Jakieś książki lub porady, jak w ogóle zacząć to rozwiązywać? Jak już powiedziałem, mam cały kod na to, co dzieje się na każdym kroku (tutaj: http://pastebin.com/LnV4h9NV). Po prostu nie wiem, jak nawet zacząć próbować brutalnej siły/szukać.


title: W firmach IT pracownicy pracują w tym samym projekcie, czyli jak połączą te części pracy (programy) razem?

text: W firmach IT pracownicy pracują w tym samym projekcie, czyli jak połączą te części pracy (programów) razem? Mam na myśli, że pracuję w pliku `.zul` (po stronie klienta), niektórzy koledzy z mojego zespołu pracują po stronie serwera lub innych plikach Java, w końcu jak mogą połączyć te programy z innego systemu do jednego systemu?


title: Wzorzec Chain-of-Command/Responsibility dla mojego prostego API. Dobry pomysł?

text: Muszę napisać proste API dla projektu, nad którym pracuję. Ten interfejs API będzie używany wewnętrznie do wykonywania niektórych akcji po stronie serwera, które zostały wyzwolone przez wywołania AJAX. Aby mi to ułatwić, pomyślałem o użyciu wzorca Chain-of-Command/Responsibility. Oto więcej szczegółów na temat tego, co chcę zrobić: Tworzę „dashboard”, w którym administratorzy mojej aplikacji będą mogli aktualizować informacje (metadane) o elementach przechowywanych w bazie danych. Aby ułatwić administratorom pracę, wybrałem AJAX. Tak więc, jeśli administrator chce usunąć element, klika przycisk „usuń”. Żądanie POST jest następnie wysyłane do strony `edit.php` ze wszystkimi informacjami potrzebnymi do wykonania usunięcia (akcja : usuń, element : link, id : xx ...). Gdzie `akcja`, `element` i oczywiście `id` mogą się zmienić. Dlatego zdecydowałem się na mini-API, które w zależności od danych `action` i `element` będzie wywoływać inną funkcję z innej klasy. Teraz, aby zaimplementować API, zdecydowałem się na użycie wzorca projektowego Chain-of-Responsibility. Czemu? Ponieważ mogę łatwo dodawać, usuwać lub aktualizować klasy bez konieczności modyfikowania samego API. Czy wzorzec projektowy Łańcucha Odpowiedzialności jest odpowiedni dla mojego przypadku?


title: Przemyślenie strategii testowania

text: Pracując nad projektami Plone, nasz zespół stara się uzyskać pełne pokrycie testowe przynajmniej dla ważnych produktów. Rodzaje testów, które piszemy to testy jednostkowe, testy funkcjonalne i testy integracyjne. (Również testy warunków skrajnych, ale te nie wchodzą w zakres tego pytania). Cel jest co najmniej dwojaki: ułatwienie aktualizacji i wyłapywanie błędów (czasem zdarza się to nawet w trakcie pisania testów). Jednak Plone/Zope jest systemem złożonym i z wieloletnim doświadczeniem zauważyłem, że strategia testowania powinna zostać ponownie przemyślana. Przede wszystkim testy jednostkowe, które często wymagają użycia dużej ilości mockowania, nie są tak (kosztowe) opłacalne. Są one w większości łatwe i korzystne, gdy pisana jest jakaś podstawowa, oparta na logice funkcjonalność, taka jak moduły w czystym Pythonie, które mają znikome sprzężenia z Plone/Zope, bazami danych itp. Rzadko widziałem testy jednostkowe wyłapujące jakiekolwiek błędy, z wyjątkiem pisząc je. Tak więc, robiąc to, co zwykle (pisanie widoków/portletów/viewletów), z mojego doświadczenia wynika, że dużo wydajniej jest pisać testy funkcjonalne i integracyjne. Uzasadnieniem tego jest to, że w przypadku zmian Plone/Zope (w aktualizacji) możemy złapać wpadki w naszym kodzie. Widoki zwykle nie mają zbyt wiele „algorytmicznej” logiki, łączą ze sobą kilka źródeł danych (takich jak zapytania katalogowe), być może z obsługą formularzy i wstępnym przetwarzaniem szablonów. Dość często widoki wywołują jedno lub więcej narzędzi do wykonania rutynowych zadań (takich jak uzyskanie drzewa nawigacji lub wyszukanie katalogu głównego witryny). Kpinie z tego wszystkiego wydaje się niemądre. Na przykład, czasami Plone/Zope zmienia niektóre wartości domyślne na inny typ i wszystkie te zakpiwane testy szczęśliwie kontynuują pracę, podczas gdy kod w rzeczywistej instancji zawodzi. Testy funkcjonalne/integracyjne mogą być czasami kruche (HTML może się zmienić), ale są też tańsze w produkcji. Zapewniają podstawowy zasięg i wyzwalają alarmy w przypadku zmian w systemie bazowym. Dostrzeżenie źródła nieszczęścia zwykle nie stanowi problemu. ( **aktualizacja** : Źle: wykrywanie niepowodzeń testów integracyjnych może być dużym problemem, ale **nasze** testy jednostkowe kodu zwykle nie pomagają.) Pytanie brzmi, czy przeoczam coś ważnego, ograniczając testy jednostkowe do funkcji i klasy, które nie wymagają mocnego wyśmiewania otoczenia, a zamiast tego są „czysto” obciążone logiką? Nie znajduję żadnego uzasadnienia dla pisania testów jednostkowych „na początku”, a nawet w ogóle, dla każdego kawałka kodu w Plone/Zope (nie mam na myśli rdzenia systemu, tylko własne dodatki dla naszych klientów). Aby pytanie było mniej oparte na opiniach, czy istnieją inne powody, o których nie wspomniałem ani nie poruszałem powyżej, a które wymuszają napisanie większej liczby testów jednostkowych (i mniej testów integracyjnych) w sytuacji, gdy kod w dużym stopniu zależy od złożonego (i nieco włochatego) framework, a kod służy bardziej jako spoiwo dla podsystemów frameworka?


title: Rozmowa o kodowanie zadań… ile one stanowią?

text: Więc natknąłem się na kilka firm, które wymagają ukończenia zadań związanych z kodowaniem, zanim udzielą ci rozmowy telefonicznej. Ciekawe, czy te zadania z kodowania odpowiadają za cokolwiek po rozmowach kwalifikacyjnych? A może te zadania są tylko po to, by sprawdzić, czy zasługujesz na ich czas na rozmowę telefoniczną? Bardziej interesują mnie osoby, które brały udział w procesie rekrutacji, który obejmował zadanie kodowania. Byłbym wdzięczny, gdybyś wspomniał o swoim zaangażowaniu (np. byłeś kierownikiem ds. rekrutacji lub jedną z osób w zespole, który zatrudniał). Dziękuję!


title: Czy powinienem zamknąć połączenia z bazą danych po użyciu w PHP?

text: Zastanawiam się, czy powinienem zamknąć jakieś niepotrzebne połączenie z bazą danych w moich skryptach PHP. Zdaję sobie sprawę z tego, że połączenia z bazą danych są zamykane niejawnie, gdy blok przestaje się wykonywać, a „ręczne” zamykanie połączeń może nieco nadwyrężyć bazę kodu niepotrzebnym kodem. Ale czy nie powinienem tego robić, aby kod był jak najbardziej czytelny i jak najłatwiejszy do zrozumienia, jednocześnie zapobiegając kilku możliwym problemom w czasie wykonywania? Ponadto, gdybym to zrobił, czy wystarczyłoby „unset()” mój obiekt bazy danych?


title: Poziomy abstrakcji dostępu do danych

text: Chciałbym opisać tę sytuację z dwóch perspektyw. Mam system o nazwie „Konta”. System ten składa się z podsystemów obsługujących różne czynności związane z kontem. Na przykład: Firma.Konta.Nowe Konta Firma.Konta.Pożyczki Firma.Konta.Transakcje **Perspektywa pierwsza** Z tej perspektywy wyobraź sobie, że mam wspólny poziom dostępu do danych: Firma.Konta.Dostęp do danych Ten podsystem jest zbudowany oddzielnie i każdy z moje inne podsystemy kont odwołują się do skompilowanego zestawu. Ten podsystem Company.Accounts.DataAccess łączy się z wieloma tabelami. Niektóre tabele są specyficzne dla określonych podsystemów, a niektóre są wspólne. Istnieją oddzielne moduły do użytku przez niektóre określone podsystemy, ale także jeden lub dwa wspólne moduły, do których odwołuje się wiele podsystemów. Wspólne moduły zawierają wiele podstawowych działań CRUD, ale także dużą liczbę działań o niskiej/średniej złożoności. Czy z tej perspektywy byłoby uczciwe zachowanie tej architektury, ale przeniesienie logiki specyficznej dla podsystemu do warstwy dostępu do danych specyficznej dla podsystemu? W ten sposób każdy podsystem ma swój własny element dostępu do danych, ale nadal odwołuje się do oryginalnej warstwy dostępu do danych dla wspólnych modułów. Firma.Konta.Nowe Konta Firma.Konta.Nowe Konta.Dostęp do danych Firma.Konta.Pożyczki Firma.Rachunki.Pożyczki.Dostęp do danych Firma.Konta.Transakcje Firma.Konta.Transakcje.Dostęp do danych Firma.Konta.Dostęp do danych **Perspektywa druga** Z tej perspektywy , wyobraź sobie, że mam istniejące warstwy dostępu do danych dla każdego podsystemu: Company.Accounts.NewAccounts.DataAccess Company.Accounts.Loans.DataAccess Company.Accounts.Transactions.DataAccess Są to warstwy logiczne jako część każdego podsystemu i tylko każdy podsystem odwołuje się do swoich własnych element dostępu do danych. Więc nie ma tutaj odniesień. Każda z tych warstw dostępu do danych wykonuje operacje na swoich własnych tabelach bazy danych. Jednak każdy z nich posiada również kod do wykonywania wspólnych operacji na tabelach, które są wspólne dla wszystkich podsystemów w systemie Accounts. Czy z tej perspektywy byłoby uczciwe zachowanie tej architektury, ale abstrahowanie wspólnych operacji do warstwy dostępu do danych niezależnej od podsystemu? W ten sposób każdy podsystem zachowuje własną warstwę logiczną dla określonych operacji, ale także odwołuje się do zewnętrznie zbudowanej warstwy dla wspólnych operacji. Firma.Konta.Nowe Konta Firma.Konta.Nowe Konta.Dostęp do danych Firma.Rachunki.Pożyczki Firma.Konta.Pożyczki.Dostęp do danych Firma.Konta.Transakcje Firma.Konta.Transakcje.Dostęp do danych Firma.Konta.Dostęp do danych **Wniosek** Jak tylko możesz Widzisz, zakończenie jest takie samo, ale przy opisie z dwóch różnych perspektyw. Moim pomysłem jest posiadanie dwóch różnych poziomów dostępu do danych. Tak więc podsystem odwołuje się do swojej warstwy dostępu do danych dla własnych operacji na danych, ale także odwołuje się do wspólnej warstwy dostępu do danych dla typowych operacji. Czy to jest uzasadnione? Czy istnieje już nazwany wzór?


title: Umiejętności pisania na klawiaturze czy programiści potrzebują formalnego szkolenia?

text: Programiści wpisują dużo kodu, piszą bzdury, piszą projekty oprogramowania i tak dalej. Czy potrzebujemy formalnego szkolenia z pisania na klawiaturze? Widziałem wielu programistów zmagających się z klawiaturą, co spowalniało tempo rozwoju. Przynajmniej na początek możemy pobawić się emulatorem pisania oprogramowania.


title: Czynniki, które są ważne dla sukcesu, gdy pozwala na stworzenie zwinnego frameworka dla całej organizacji?

text: Wcześniej wysłałem pytanie [link] na programrs.stackexchange.com z pytaniem, kiedy jest sensowne przyjęcie istniejącego frameworka Agile w skali przedsiębiorstwa, a kiedy ma sens umożliwienie pojawienia się własnego frameworka Agile w skali przedsiębiorstwa (np. metodą prób i błędów). To pytanie przenosi poprzednie pytanie o krok dalej i pyta o **czynniki, które są ważne dla sukcesu**, gdy zdecydowałeś się pójść drogą pozwalającą na wyłonienie się zwinnego frameworka w skali przedsiębiorstwa? \-- Downvoters: głosowanie w dół bez dodania komentarza nie daje możliwości poprawienia pytania. Proszę dać mi znać, dlaczego nie głosujesz, abym mógł poprawić pytanie.


title: Baza danych dokumentów NoSQL jako kolejka wiadomości

text: Rozważam użycie bazy danych NoSQL Document jako kolejki wiadomości. Oto dlaczego: * Chcę, aby klient wysyłał wiadomość (jakiś zserializowany obiekt) do serwera i nie musiał czekać na odpowiedź synchroniczną. * Chcę mieć możliwość wyciągania wiadomości z „kolejki” na podstawie pewnych kryteriów, które mogą być bardziej wyrafinowane niż tylko poziom priorytetu (pracuję nad hostowaną aplikacją internetową, więc chcę dać wszystkim moim klientom uczciwa ilość „czasu obliczeniowego” i nie pozwól, aby jeden klient zajmował się całym przetwarzaniem). * Chcę, aby kolejka była trwała - jeśli serwer ulegnie awarii, chcę, aby pozostałe wiadomości były obsługiwane po ponownym uruchomieniu. Rozważam więc użycie MongoDB lub RavenDB jako kolejki wiadomości. Klient może wysłać obiekt wiadomości do usługi sieciowej, która zapisuje go w bazie danych. Następnie - usługa wykonująca pracę może pobierać różne typy wiadomości na podstawie dowolnych kryteriów, które mogą się pojawić. Mogę tworzyć indeksy wokół scenariuszy, aby przyspieszyć. Więc - szukam kogoś, kto wystrzeli w tym dziurę. Czy komuś się to udało? Czy ktoś próbował tego i zawiódł w jakiś sposób?


title: Gdzie idziesz, aby przeczytać dobre przykłady kodu źródłowego?

text: Słyszałem, jak kilka osób mówi, że jednym z najlepszych sposobów na poprawę umiejętności kodowania jest czytanie kodu innych osób i jego zrozumienie. Moje pytanie, jako stosunkowo nowy programista, gdzie mam się udać, aby znaleźć dobre przykłady kodu źródłowego, które nie są zbyt wysoko nad moją głową?


title: Dobre wprowadzenie do sztucznej inteligencji?

text: Powiedziano mi, że w ramach studiów będę się uczyć o sztucznej inteligencji. Moi wykładowcy polecili kilka książek: Sztuczna inteligencja: podejście systemowe (informatyka) Sztuczna inteligencja (nowoczesne podejście) Obejrzałem kilka wykładów prowadzonych przez Jeffa Hawkinsa, były dobre, choć dla mnie trochę zaawansowane. Czy ktoś mógłby polecić jakieś inne książki lub wykłady wprowadzające w temat?


title: Czy warto kupić/nauczyć się Power++?

text: Znalazłem Power++ i ku mojemu zdziwieniu wygląda na dobrą alternatywę dla Delphi i Visual Studio. Czy ktoś go używał? Czy możesz mi powiedzieć, czy warto go kupić/nauczyć?


title: Podejścia w formie papierowej do śledzenia czasu

text: Mam problem: jestem do niczego przy śledzeniu czasu na zadanie pod kątem określonej funkcji/defektów/itd. podczas ich kodowania. Mam tendencję do przeskakiwania między zadaniami (częściowo ze względu na żonglowanie dziedziczeniem wymagane przez profesjonalne tworzenie oprogramowania, częściowo ze względu na moją osobistą tendencję do skupiania się na samym kodzie, a nie na procesie biznesowym wokół kodu). Osobiście preferuję system w wersji papierowej. Nawet z gabilionami pikseli nieruchomości na ekranie uważam, że utrzymanie wygodnego okna śledzenia jest strasznie rozpraszające; albo o tym zapomnę, albo stanie mi to na przeszkodzie. Szukam więc sugestii dotyczących śledzenia czasu. Moim jedynym wymaganiem jest prosty system śledzenia czasów rozpoczęcia/zatrzymania każdego zadania. Zastanawiałem się, czy nie posunąć się do kupna zegara czasu i dać każdemu biletowi dedykowaną kartę czasu. Kiedy zaczynam nad tym pracować, uderzam; po zakończeniu pracy wybić.


title: Jak mój zespół może uniknąć częstych błędów po refaktoryzacji?

text: Aby dać ci trochę tła: pracuję dla firmy, w której pracuje około dwunastu programistów Ruby on Rails (+/- stażystów). Praca zdalna jest powszechna. Nasz produkt składa się z dwóch części: dość grubego rdzenia i cienkiego, aż po duże projekty klientów, które są na nim oparte. Projekty klientów zwykle rozszerzają rdzeń. Nie dochodzi do nadpisywania kluczowych funkcji. Mogę dodać, że rdzeń ma kilka raczej kiepskich części, które pilnie wymagają refaktoryzacji. Istnieją specyfikacje, ale głównie dla projektów klientów. Najgorsze części rdzenia są nieprzetestowane (nie tak, jak powinno być...). Deweloperzy są podzieleni na dwa zespoły, pracujące z jednym lub dwoma PO na każdy sprint. Zazwyczaj jeden projekt klienta jest ściśle powiązany z jednym z zespołów i PO. A teraz nasz problem: dość często łamiemy sobie nawzajem rzeczy. Ktoś z Zespołu A rozszerza lub refaktoryzuje podstawową funkcję Y, powodując nieoczekiwane błędy w jednym z projektów klientów Zespołu B. Przeważnie zmiany nie są ogłaszane w zespołach, więc błędy trafiają prawie zawsze nieoczekiwanie. Zespół B, w tym PO, myślał, że funkcja Y jest stabilna i nie testowała jej przed wydaniem, nieświadoma zmian. Jak pozbyć się tych problemów? Jaką „technikę ogłaszania” możesz mi polecić?


title: Jak działa Telnet?

text: **Czy telnet to tylko proste połączenie z gniazdem?** Zwykle mam problemy z siecią, więc używam kodu z Internetu, aby mi pomóc, ale nie mogę znaleźć biblioteki dla Telnetu w Objective- C. Najbliższa rzecz, jaką znalazłem, to `CocoaAsyncSocket`. Zastanawiałem się, _Czy telnet to tylko zwykłe połączenia z gniazdem?_ _Czy po prostu tworzę gniazdo do serwera i wysyłam polecenia?_


title: potrzebujesz porady przy budowaniu systemu ewaluacyjnego w Javie dla sieci

text: Stworzyłem program w języku Java, który pozwala na ocenę egzaminu zrobionego przez jednego studenta. W interfejsie uczeń wybiera pomiędzy zestawem opcji dla każdego pytania, a poprzez tablicę (która zawiera poprawne odpowiedzi) otrzymuję wynik ucznia. Nawiasem mówiąc, ten prosty program jest wykonany przy użyciu konsoli java, bez swingu i apletów. Informacje o tym, które odpowiedzi są poprawne, są przechowywane w wektorze, więc każda odpowiedź uczniów jest porównywana z tym wektorem w celu uzyskania końcowego wyniku. Chciałbym umieścić jego program w jednej domenie, którą niedawno dostałem, aby jeden student w momencie wchodzenia na stronę mógł zdać egzamin; a inny program zainstalowany na serwerze sprawdzi poprawne odpowiedzi i zada inne pytania, na wypadek, gdyby uczeń chciał ćwiczyć. Jeden znajomy powiedział mi, że możliwe jest zawinięcie aplikacji java konsoli do java dla sieci, ale po prostu nie znam szczegółów, jak to zrobić. Co ktoś by zasugerował lub czy jest jakiś samouczek online, który mógłby mi w tym pomóc? Moja domena ma następujące rozszerzenia: * FTP * MySQL * Apache * SharedTomcat Proszę nie dyskutować, które narzędzie jest lepsze, chcę tylko używać Javy, ale jestem zagubiony we wszystkich technologiach internetowych, których można używać ten język.


title: Nie udało się przydzielić pamięci – co próbuje powiedzieć?

text: We wczesnych latach programowania często otrzymywałem błędy krytyczne związane z pamięcią w następującym formacie: Błąd krytyczny: wyczerpano dozwolony rozmiar pamięci <jakaś duża liczba> bajtów (próbowałem przydzielić <jakąś małą liczbę> bajtów) w /ścieżka/do /filename.php on line <jakiś numer linii> Wstyd mi powiedzieć, że chociaż wymyśliłem, jak je rozwiązać i podjąć kroki, aby całkowicie ich uniknąć, nadal nie jestem do końca pewien, co dokładnie oznacza komunikat przetłumacz w prostych słowach. Na przykład, jeśli otrzymam komunikat taki jak: Błąd krytyczny: wyczerpano dozwolony rozmiar pamięci 67108864 bajtów (próbowałem przydzielić 4000 bajtów) w ........ w wierszu 34. W obecnej sytuacji zakładam, że aby stwierdzić, że skrypt zużywa 67108864 bajtów danych, ale tylko 4000 bajtów jest dostępnych w czasie wykonywania. * Czy mam rację w moim założeniu? * Jeśli nie, jaka jest prawidłowa interpretacja?


title: Zaprojektuj tabelę skrótu z prostą funkcją skrótu

text: Chcę nauczyć się projektować tabelę mieszającą z prostą funkcją mieszającą, aby lepiej zrozumieć. Rozumiem, że tablica mieszająca będzie działać tak długo, jak długo funkcja mieszająca mapuje każdy klucz na nieujemną liczbę całkowitą mniejszą niż rozmiar tablicy mieszającej, ale będzie działać dobrze tylko wtedy, gdy rozprowadzi różne klucze w różnych przedziałach. Moje pytanie brzmi: Jakie są alternatywne sposoby implementacji funkcji skrótu przy użyciu kodu ASCII. Zauważyłem, że implementacja funkcji skrótu kodu ASCII jest łatwa do zbudowania funkcji skrótu na pomyśle traktowania każdego znaku ciągu jako cyfry w liczbie. Staram się reprezentować liczbę w systemie radix-10 z cyframi arabskimi. Na przykład mógłbym reprezentować liczby za pomocą liter „a” - „z” dla liczb od 0 do 25, aby uzyskać system Radix-26 opisany w twoim podręczniku. Znaki w komputerze są często przechowywane za pomocą 7-bitowych kodów ASCII (o wartościach 0-127). Możemy więc potraktować ciąg znaków ASCII jako liczbę Radix-128.


title: Wzorzec projektowy MVC do łączenia wielu modeli do użytku

text: W moim projekcie mam wiele modeli, a każdy model ma kontroler. Muszę użyć wszystkich modeli do przetworzenia jakiejś operacji. Większość przykładów, które widzę, jest dość prosta z 1 widokiem, 1 kontrolerem i 1 modelem. Jak zebrałbyś wszystkie te modele razem? Jedyne sposoby, jakie mogę sobie wyobrazić, to 1) Posiadanie kontrolera najwyższego poziomu, który ma odniesienie do każdego kontrolera. Te kontrolery będą miały funkcję pobierającą/ustawiającą dla swojego modelu. Czy to narusza MVC, ponieważ każdy kontroler powinien mieć model? 2) Miej klasę średnio zaawansowaną, aby połączyć każdy model w jeden model. Następnie tworzysz kontroler dla tego nowego super modelu. Czy znasz jakieś lepsze pomysły? Dziękuję.


title: Najlepsze praktyki dotyczące architektury projektów - po stronie serwera

text: Zwykły sposób (który znam) dzielenia strony serwera to architektura n-warstwowa : ) 2. **BLL** \- warstwa logiki biznesowej 3. **Kontrakt** \- Interfejsy 4. **Usługi** \- klasy implementujące interfejsy (mogą być Web API dla E.G ) Oczywiście jest także architekturę n-warstwową, o której nie chcę dyskutować. ostatnio coraz częściej spotykam się z architekturą "Modułów" i zastanawiam się nad nią (nie znam fachowego określenia tej architektury) gdzie każdy moduł nie jest tabelą w bazie danych, ale grupą tabel, które mają wspólna koncepcja . coś, co wygląda tak: ![Architektura modułów i DAL](http://i.stack.imgur.com/qPrqb.jpg) Czy jest jakaś znana dobra architektura, która oddziela warstwy według modułów po stronie serwera? jeśli tak, to jakie jest profesjonalne określenie tego rodzaju architektury i jakie są zalety/wady każdej z tych architektur?


title: Jaki jest właściwy sposób parsowania kodu HTML?

text: Słyszałem, że parsowanie HTMLa metodą Cthulhu nie jest zbyt dobre. Ale jakie są właściwe sposoby analizowania kodu HTML? Czy w ogóle można go przeanalizować?


title: Czy istnieje czysto techniczny termin na „łatanie małp”

text: **EDYTUJ** Pierwotny tytuł pytania brzmiał: **Czy istnieje nieobraźliwe określenie na „łatanie małp”**. Ponieważ dowiedziałem się, że termin ten w rzeczywistości nie jest obraźliwy, a przynajmniej nie powinien nim być, zmieniłem nazwę, aby uwolnić go od błędnych implikacji. * * * Chciałbym opisać oprogramowanie i starać się nie używać emocjonalnie stronniczego języka. Nie znam jednak bezstronnej alternatywy dla „łatania małp”. Z jakiegoś powodu określenie to ma być obraźliwe. Wielu postrzega to jako użyteczną, ale problematyczną technikę. Znam alternatywę, ale jest ona równie uwłaczająca: „pobicie kaczki”. Postrzegam „klasy otwarte” nie jako alternatywną nazwę, ale jako warunek wstępny dla małpich łatania. „Zastępowanie” też nie wydaje się właściwe. Chciałbym rozróżnić między małpim łataniem a regularnym nadpisywaniem jako częścią polimorfizmu opartego na dziedziczeniu.


title: Co powinienem wiedzieć o C++?

text: Niedawno zacząłem uczyć się C++ i bardzo mi się to podoba. Często czytałem, że łatwiej jest napisać zły kod w C++ niż w większości języków i że jest on znacznie głębszy niż się wydaje. Ponieważ chciałem uniknąć pisania złego kodu, zastanawiałem się, czego właściwie nie powinienem robić, a co powinienem zrobić, aby napisać dobry kod w C++.


title: Sprzedaż oprogramowania pośredniczącego

text: Jestem bliski ukończenia zestawu przydatnych narzędzi do tworzenia gier 2D (z myślą o platformach mobilnych), do pracy z duszkami i animacjami. Czy ktoś może doradzić najlepszy sposób na sprzedaż i promocję mojego produktu (bez inwestowania kapitału). Zdaję sobie sprawę, że istnieje wiele stron internetowych, które mogą reklamować i sprzedawać oprogramowanie konsumentom końcowym, ale muszę kierować reklamy konkretnie do twórców gier, ponieważ oprogramowanie pośredniczące jest całkowicie bez znaczenia dla przeciętnego użytkownika. Czy poza korzystaniem z PayPala na mojej stronie są jakieś rynki dla oprogramowania pośredniczącego do gier? Jak mogę promować aplikację poza moją witryną bez spamowania forów programistów?


title: Jak długo korzystasz z okresu próbnego z programistami - jak szybko możesz stwierdzić, czy są utalentowani i dobrze pasują?

text: Wygląda na to, że większość prac, na które byłem narażony, obejmuje 3 miesięczny okres próbny, podczas którego pracodawca decyduje, czy pracownik wykonuje wystarczająco dobrą pracę i jest dobrze dopasowany. 3 miesiące wydają mi się przesadą, w większości przypadków dużo wcześniej wiedzieliśmy, czy ktoś nie pasuje. Jak długo średnio zajmuje Ci ocena, czy nowo zatrudniony programista jest zarówno utalentowany, jak i dobrze pasuje do Twojego zespołu?


title: Jaka „klasyfikacja branżowa” to programowanie komputerowe?

text: Za każdym razem, gdy wypełniam ankietę (zwłaszcza, ale nie ograniczając się do gazet/magazynów/serwisów), pojawia się jedno pytanie (lub jakiekolwiek jego pochodzenie), które zawsze mnie dręczy: > Która klasyfikacja branżowa najlepiej opisuje Twoją pracę. Zwykle jest to a następnie lista rzeczy takich jak _Handel_ , _Zdrowie_ , _Edukacja_ , _Budownictwo_ , _Produkcja_ , itp. Nigdy nie mogę dokładnie określić, w co dokładnie wpisuje się branżowe programowanie komputerowe. produkowanie czegoś, _Detal_, ponieważ w pewnym sensie produkuję towary, albo jakakolwiek opcja, która wspomina o „komputerach” lub „elektronice” (jeśli w ogóle). Próbowałem googlować, ale wyszedłem pusty. Czy ktoś wie, jaka jest „prawidłowa” odpowiedź? Co inni programiści wpisują w tych ankietach? * * * ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/YOTmp.png)


title: PHP - Jak automatycznie opublikować formularz w innej witrynie i przeanalizować wynik

text: Planuję stworzyć stronę internetową podobną do tego, co robi http://dohop.com, która pozwoli użytkownikowi pobrać kurs i datę linii lotniczych ze strony http://airasia.com. Obecnie strona umożliwia użytkownikowi przeglądanie rozkładu lotów tylko na jeden dzień, a jeśli chce zobaczyć x dni naprzód, musi ponownie opublikować dane. Chciałbym zebrać dane za x dni do przodu i pogrupować je w tabeli, aby użytkownik mógł zobaczyć wszystkie ceny lotów i różnice w rozkładzie lotów na jednym ekranie bez ponownego publikowania. Sprawdziłem stronę `AirAsia.com` i obecnie nie mają żadnego wsparcia API, które pozwoliłoby mi wyodrębnić ich dane. Podczas gdy używają „aspx” na swojej stronie internetowej i metodzie POST. Czy ktoś może udzielić mi wskazówek na temat metody, podejścia lub techniki zbierania danych?


title: Jakie są najlepsze praktyki dotyczące porządkowania parametrów w funkcji?

text: Czasami (rzadko) wydaje się, że najlepszą drogą jest stworzenie funkcji, która pobiera przyzwoitą ilość parametrów. Jednak kiedy to robię, mam wrażenie, że często wybieram kolejność parametrów na chybił trafił. Zwykle wybieram „kolejność ważności”, z najważniejszym parametrem na początku. Czy jest na to lepszy sposób? Czy istnieje „najlepszy sposób” zamawiania parametrów, który zwiększa przejrzystość?


title: Czy system wątków zapisu:odczytu 1:* jest bezpieczny?

text: Teoretycznie kod bezpieczny dla wątków powinien naprawiać warunki wyścigu. Warunki wyścigowe, jak rozumiem, występują, ponieważ dwa wątki próbują jednocześnie pisać w tej samej lokalizacji. Co jednak z modelem wątków, w którym pojedynczy wątek jest przeznaczony do zapisu w lokalizacji, a kilka wątków podrzędnych/roboczych po prostu odczytuje z lokalizacji? Zakładając, że wartość/czas, w którym czytają dane, nie są istotne/nie utrudniają wyniku wątku roboczego, czy nie byłoby to uważane za „bezpieczne wątkowo”, czy też brakuje mi czegoś w mojej logice?


title: Czy innowacje w oprogramowaniu nadal są głównie w Ameryce Północnej i Europie? Dlaczego i na jak długo jeszcze?

text: Ponieważ tę stronę czytają programiści na całym świecie, chcę wiedzieć, czy ludzie ogólnie zgadzają się, że zdecydowana większość innowacji w oprogramowaniu – języki, systemy operacyjne, narzędzia, metodologie, książki itp. – nadal pochodzi z USA, Kanady i Unia Europejska. Przychodzi mi do głowy kilka wyjątków, m.in. Serwer WWW Nginx z Rosji i język Ruby z Japonii, ale w przeważającej mierze oprogramowanie, którego używam i spotykam na co dzień, pochodzi z Ameryki Północnej i UE. * Czemu? Czy historia i dynamika historyczna (informacje rozpoczęły się w USA i Europie) nadal napędzają branżę? I/lub czy jakaś mglista (lub rzeczywista) różnica kulturowa zniechęca do innowacji oprogramowania za granicą? * A może ci z nas na Zachodzie po prostu ignorują prawdziwe innowacje w zakresie oprogramowania, które mają miejsce w Azji, Ameryce Południowej, Europie Wschodniej itp.? * Kiedy, jeśli w ogóle, centra innowacji mogą wyprowadzić się z Zachodu? Twoje doświadczenia i opinie mile widziane, dzięki!


title: Przykładowe przypadki dla każdej struktury danych?

text: Szukałem w całym Internecie strony, która zawiera listę **przypadków**, kiedy należy użyć każdego abstrakcyjnego typu danych. Spodziewam się, że zapoznanie się z serią zarówno zaskakujących, jak i oczywistych zastosowań każdego typu pomoże czytelnikom rozpoznać przyszłe możliwości zastosowania konkretnego ADT w ich algorytmach. Na przykład: > **Drzewa** > > * System plików > * Drzewo DOM HTML > * Genealogia rodziny > * Analiza składni ciągów > * itp... > Podam listę podstawowych ADT, które powinny zostać uwzględnione; możesz dodać więcej lub określić podtypy: Tablice, Listy połączone, Zestawy, Słowniki/Mapy, Stosy, Kolejki, Drzewa, Wykresy.


title: Czy warto napisać test jednostkowy dla DTO z najbardziej podstawowym getterem/setterem?

text: Zaletą jest to, że chroni Twój DTO przed przyszłymi "ulepszeniami"?


title: Java EE - konfiguracja ponad konwencją?

text: Jestem administratorem systemów, a także realizuję bardziej konkretną karierę deweloperską. Zacząłem około półtora roku temu z Javascriptem i C#/.NET… pewnego dnia postanowiłem nauczyć się Javy. Potem zaskoczyły mnie wszystkie dostępne opcje, społeczność wydaje się wspaniała i myślę, że JVM to świetny kawałek technologii i platformy programistycznej. Jednak… jedną rzeczą w Microsoft jest to, że wszystko jest całkowicie wyjęte z pudełka. Jeśli chcesz zbudować infrastrukturę lub po prostu prostą aplikację, to masz do czynienia z jedną technologią, jednym dostawcą, jednym IDE, jednym zestawem forów… po prostu wskażesz, klikniesz, opracujesz. Wiem, że dzięki Javie poczyniono ogromne postępy. Mówiąc dokładniej, większość czasu spędzam ze stosem Pivotal. Spring, Spring Boot, Grails itp. Ale ponieważ jest tak wiele opcji i wszystko jest tak otwarte, wydaje się, że samouczki na różnych stronach są dość trudne do naśladowania, a ponieważ wszystko się zmienia tak szybko, w końcu znalazłem dobrą książkę lub samouczek i układ wszystkiego po prostu się zmienia. Potrafię budować proste aplikacje Java, a także mogę błyskawicznie uruchomić projekt Grails. Również Play! ramy ... wow. Ale chodzi o to, że po prostu chcę trochę porady jako ktoś, kto jest nowy w programowaniu Java. Wiem, że jeśli po prostu przekopię się przez wszystkie te pliki XML i domyślę się wszystkiego, będę mógł naprawdę zacząć korzystać z zalet tych technologii. Chciałem tylko wiedzieć, czy jest de facto samouczek, od którego powinienem zacząć. Wiosna jest dość łatwa, chociaż czasami moje rzeczy po prostu… nie działają. Nawet gdy śledzę przewodnik na stronie. Kolejną częścią tego pytania jest to, czy powinienem iść z Mavenem czy Gradle? Nie używałem żadnego z tych narzędzi. Czy to ma ułatwić wszystko? Wszystkie projekty, które stworzyłem, pochodzą prosto z IDE (Spring Tool Suite). .. Ok, robi się to długo .. Naprawdę chcę uruchomić aplikację z Spring Data/Rest i rozpocząć tworzenie frontendu Angular JS. Wiele opcji.. trochę przytłaczające. Ale chcę się tego dobrze nauczyć, a jedyną rzeczą, za którą tęsknię w .NET, jest łatwość użytkowania. Czy ktoś czuje coś podobnego ucząc się tworzenia stron internetowych w języku Java? Jakie jest najlepsze miejsce, aby się zamknąć i zacząć?


title: Jak zmapować słownik języka angielskiego na kody UNSPSC?

text: Czy istnieje baza danych, która mapuje słowa ze słownika angielskiego na kody UNSPSC?(http://www.unspsc.org/) Mój problem jest następujący: buduję system wyszukiwania. Zwracane są również hasła wyszukiwane przez klientów „ołówek” i „temperówka do ołówków”. Każdy ze zwracanych przedmiotów ma powiązany z nim kod UNSPSC. Tak więc jednym z możliwych rozwiązań byłoby wyszukiwanie tylko tych elementów w kategoriach, do których należy wyszukiwane słowo. Ale to rozwiązanie wymagałoby odwzorowania słów angielskich na kody UNSPSC...


title: Redis i MongoDB dla platformy metryk

text: Jestem w trakcie pisania aplikacji, która docelowo będzie wyświetlać użytkownikowi dane analityczne. Napisałem usługę, która zbiera dane z API. Dane te będą następnie przetwarzane, przechowywane, a następnie, gdy użytkownik zażąda danych, pobierze je ze sklepu i wyświetli. Dość bezpośredni. Planujemy używać MongoDB do bazy danych aplikacji (przechowywanie użytkowników, ustawień itp.). Czytałem, że Redis jest dobry do przechowywania informacji o metrykach ze względu na naturę pary klucz/wartość. Moje pytanie brzmi, jaki byłby najlepszy sposób na zamianę sposobu, w jaki dane pochodzą z usługi API na użytkownika, który może ich zażądać? Początkowo wymyśliłem przechowywanie danych API w innym sklepie MongoDB, oddzielnie od aplikacji. Następnie posiadanie innej usługi, która działa w dłuższych odstępach czasu niż usługa API, która agreguje surowe dane w Mongo, przenosi je do Redis, a następnie archiwizuje przeanalizowane dane Mongo w jakimś pliku dziennika lub w czymś innym. Aplikacja będzie wtedy mogła uzyskać dostęp do Redis, aby pobrać metryki na podstawie wcześniej określonych kluczy. Czy Redis jest w ogóle odpowiednią opcją na coś takiego? Rozważałem również zamianę MongoDB na Postgres lub MySQL, ponieważ operacje takie jak SUM działają dobrze na platformie relacyjnej.


title: Javadoc dla statycznej „przeciążonej” metody

text: Mój problem jest następujący: mam interfejs, który wymaga implementacji metody statycznej, a mianowicie `void load()`. Jednak wydaje się, że do wersji Java 8 nie otrzymamy statycznych metod w interfejsach. Ufam moim użytkownikom, że nadal poprawnie je zaimplementują, ale moim problemem jest to, jak napisać poprawny dokument. Istnieje do 50 implementacji tego interfejsu i brak możliwości dziedziczenia javadoc jest kłopotliwy. Jaki jest najlepszy sposób postępowania w mojej sprawie? Czy powinienem udokumentować losową implementację i dodać adnotacje `@see` w pozostałych? Wydaje mi się to brudne. Wszelkie sugestie są mile widziane.


title: Najlepszy projekt dla formularzy Windows, które będą miały wspólną funkcjonalność

text: W przeszłości używałem dziedziczenia, aby umożliwić rozszerzenie formularzy Windows w mojej aplikacji. Gdyby wszystkie moje formularze miały wspólne kontrolki, grafikę i funkcjonalność, utworzyłbym formularz podstawowy implementujący wspólne kontrolki i funkcje, a następnie zezwolił innym kontrolkom dziedziczyć z tego formularza podstawowego. Jednak napotkałem kilka problemów z tym projektem. 1. Kontrolki mogą znajdować się tylko w jednym kontenerze na raz, więc wszelkie statyczne kontrolki, które masz, będą trudne. Na przykład: Załóżmy, że masz formularz podstawowy o nazwie BaseForm, który zawierał TreeView, który jest chroniony i statyczny, dzięki czemu wszystkie inne (pochodne) wystąpienia tej klasy mogą modyfikować i wyświetlać ten sam TreeView. Nie działałoby to w przypadku wielu klas dziedziczących z BaseForm, ponieważ ten TreeView może znajdować się tylko w jednym kontenerze na raz. Prawdopodobnie będzie to ostatni zainicjowany formularz. Chociaż każda instancja mogła edytować kontrolkę, byłaby wyświetlana tylko w jednym w danym czasie. Oczywiście istnieją rozwiązania, ale wszystkie są brzydkie. (Wydaje mi się, że to naprawdę zły projekt. Dlaczego wiele kontenerów nie może przechowywać wskaźników do tego samego obiektu? W każdym razie tak właśnie jest.) 2. Stan między formularzami, czyli stany przycisków, tekst etykiety itp. ., muszę użyć zmiennych globalnych i zresetować stany na Load. 3. To nie jest tak naprawdę obsługiwane przez projektanta Visual Studio. Czy istnieje lepszy, ale nadal łatwy w utrzymaniu projekt do wykorzystania? A może dziedziczenie form nadal jest najlepszym podejściem? **Aktualizacja** Przeszedłem od patrzenia na MVC do MVP, do wzorca obserwatora, do wzorca zdarzeń. Oto, o czym myślę w tej chwili, proszę o krytykę: Moja klasa BaseForm będzie zawierać tylko kontrolki i zdarzenia połączone z tymi kontrolkami. Wszystkie zdarzenia, które wymagają jakiejkolwiek logiki do ich obsługi, zostaną natychmiast przekazane do klasy BaseFormPresenter. Ta klasa będzie obsługiwać dane z interfejsu użytkownika, wykonywać wszelkie operacje logiczne, a następnie aktualizować BaseFormModel. Model ujawni zdarzenia, które zostaną uruchomione po zmianie stanu, klasie Presenter, którą będzie subskrybować (lub obserwować). Gdy prezenter otrzyma powiadomienie o zdarzeniu, wykona dowolną logikę, a następnie prezenter odpowiednio zmodyfikuje widok. W pamięci będzie tylko jedna z każdej klasy Model, ale potencjalnie może istnieć wiele wystąpień BaseForm, a zatem i BaseFormPresenter. To rozwiązałoby mój problem z synchronizacją każdego wystąpienia BaseForm z tym samym modelem danych. Pytania: Która warstwa powinna przechowywać takie rzeczy jak ostatnio wciśnięty przycisk, abym mógł go podświetlić dla użytkownika (jak w menu CSS) między formularzami? Proszę skrytykować ten projekt. Dzięki za pomoc!


title: Czy spotkania na stojąco są naprawdę przydatne?

text: Moi współpracownicy mówią mi, że spotkania na stojąco są bezużyteczne. Mój kierownik projektu każe nam również kończyć każde poranne spotkanie przyśpiewką firmową.


title: Kompromisy między lokalnymi a zdalnymi przepływami pracy programistycznej dla zespołu programistów internetowych

text: Obecnie mamy konfigurację SVN na zdalnym serwerze deweloperskim. Deweloperzy SSH do serwera i rozwijają się w swoim środowisku piaskownicy na serwerze. Każdy z nich ma wirtualny host skierowany do ich piaskownicy, dzięki czemu mogą wyświetlić podgląd swoich zmian za pośrednictwem przeglądarki internetowej, łącząc się z deweloperem-piaskownica1.domena.com. Jak dotąd działało to dobrze, ponieważ zespół jest mały i wszyscy używają komputerów o różnych specyfikacjach i systemach operacyjnych. Słyszałem, że niektóre sklepy internetowe używają przepływu pracy, w którym programiści pracują na maszynie wirtualnej na ich maszynie lokalnej, a następnie wprowadzają zmiany do zdalnego serwera obsługującego SVN. Wadą tego jest to, że każdy będzie musiał upewnić się, że jego maszyna jest wystarczająco wydajna, aby uruchomić zarówno maszynę wirtualną, jak i wszystkie narzędzia programistyczne. Oznaczałoby to również tworzenie obrazów odzwierciedlających środowisko serwera (używamy CentOS) i instalowanie ich na swoich maszynach wirtualnych. A to oznaczałoby tworzenie nowych obrazów za każdym razem, gdy nastąpi aktualizacja środowiska serwera. Jakie są inne kompromisy? Ostatecznie, dlaczego wybrałeś jeden przepływ pracy nad drugim?


title: Jaki jest najlepszy sposób przechowywania daty?

text: Jestem nowy w przechowywaniu dat na podstawie stref czasowych. Musisz znać standardowy sposób przechowywania daty w datastore. Moje wymagania to 1. Łatwe wyszukiwanie daty na podstawie zakresu dat. 2. Pokaż datę z klientem odpowiednią strefę czasową wybraną przez niego (posiadam tabelę utrzymywaną dla strefy czasowej osobno) 3. Możliwość zapytania również za pomocą konsoli administracyjnej datastore. Wszelkie sugestie/pomysły dotyczące tego będą bardzo pomocne w dalszym postępowaniu.


title: Odkryto dużą lukę w zabezpieczeniach w cudzej witrynie... Co robić?

text: Facet, dla którego licytuję, żeby zrobić jakiś program, ma sieć społecznościową, którą sam napisał. Pod żadnym pozorem nie następny facebook. Ale kilka tysięcy lokalnych użytkowników. Poszedłem rzucić okiem na to, aby zobaczyć, jaki poziom wiedzy miał, więc wiedziałem, jak ustawić się do tej potencjalnej pracy. Wcisnąłem pojedynczy cytat w pole logowania na pierwszej stronie i pojawił się błąd SQL. Więc spróbowałem prostego "a" lub "a'='a" w każdym polu i natychmiast zostałem zalogowany jako administrator. Wygląda na to, że napisał dość obszerną witrynę administracyjną. Na dole strony przycisk „Pobierz kopię zapasową SQL”. Tu się zatrzymałem. Moje pytanie jest takie. Co ja robię? Jako programista byłbym wdzięczny za heads-upy. Ale jako ktoś, kto, miejmy nadzieję, otrzyma zapłatę za wykonanie dla niego jakiejś pracy, nie chciałbym wrzucać do tej mieszanki wszelkiego rodzaju problemów związanych z zaufaniem. Jakieś pomysły?


title: Dlaczego istnieją oddzielne pamięci podręczne L1 na dane i instrukcje?

text: Właśnie przejrzałem kilka slajdów i zauważyłem, że pamięć podręczna L1 (przynajmniej w procesorach Intela) rozróżnia pamięć podręczną danych i instrukcji, chciałbym wiedzieć, dlaczego tak jest..


title: Czy muszę publikować skrypty wdrażania do wdrażania prac na licencji AGPL (MongoDB)

text: MongoDB posiada podwójną licencję z AGPL (silnik) i ASL 2.0 (sterowniki). W skrócie, samo użycie MongoDB przez sterowniki nie nakazuje wydania kodu źródłowego (ze względu na licencję ASL 2.0 sterowników). AFAIK, tylko jeśli bezpośrednio wywołasz silnik mongo, musisz podać swój kod, który go używa (ale nadal nie kod _aplikacji_, który komunikuje się z mongo przez sterowniki). Sprawdź ten wpis na blogu MongoDB: http://blog.mongodb.org/post/103832439/the-agpl Co się stanie, jeśli wdrożysz (zainstalowasz, skonfigurujesz) mongodb w swoich skryptach wdrożeniowych. A następnie uruchom/zatrzymaj/zrestartuj te procesy. A potem może stworzyć kilku użytkowników przez powłokę mongo. Czy musisz opublikować swoje _skrypty wdrożeniowe_? (Dodatkowe pytanie: jak mogą opublikować sterowniki jako ASL 2.0, jeśli te sterowniki używają części MongoDB na licencji AGPL przez sieć? Ponieważ są autorami obu?)


title: Jak zaprojektować IDisposable, który bezwarunkowo musi zostać usunięty?

text: Rozważ klasę, która implementuje `IDisposable` i która ma członków w taki sposób, że nigdy nie będzie kwalifikować się do wyrzucania elementów bezużytecznych, gdy nie zostanie usunięta. A ponieważ nie będzie on zbierał śmieci, nie będzie miał szansy użyć destruktora do sprzątania. W efekcie, gdy nie zostanie usunięty (np. nierzetelni użytkownicy, błędy programistyczne), nastąpi wyciek zasobów. Czy istnieje ogólne podejście, w jaki sposób można zaprojektować taką klasę, aby poradzić sobie z taką sytuacją lub jej uniknąć? _Przykład_ : korzystanie z systemu; class Program { static void Main(string[] args) { new Cyclical(); GC.Collect(); GC.WaitForPendingFinalizers(); Konsola.KluczOdczytu(); } } class Cyclical { public Cyclical() { timer = new System.Threading.Timer(Callback, null, 0, 1000); } System.Threading.Timer; void Callback(stan obiektu) { Console.Write('.'); // zrób coś użytecznego } ~Cyclical() { Console.WriteLine("destructor"); } } (Pominięto `IDisposable`, aby przykład był krótki.) Ta klasa używa `Timer` do robienia czegoś użytecznego w określonych odstępach czasu. Potrzebuje odniesienia do `Timer`, aby uniknąć zbierania śmieci. Załóżmy, że użytkownik tej klasy nie pozbędzie się jej. W wyniku działania licznika, gdzieś jakiś wątek roboczy ma odwołanie do instancji `Cyclical` poprzez wywołanie zwrotne, w wyniku czego instancja `Cyclical` nigdy nie będzie kwalifikować się do wyrzucania śmieci, a jej destruktor nigdy nie zostanie uruchomiony, a zasoby wyciekną. W tym przykładzie możliwą poprawką (lub obejściem) może być użycie klasy pomocniczej, która odbiera wywołania zwrotne z `Timer` i która nie ma odniesienia, a jedynie `WeakReference` do instancji `Cyclical`, którą wywołuje używając tego `WeakReference`. Jednak ogólnie rzecz biorąc, czy istnieje zasada projektowania dla takich klas, którą należy usunąć, aby uniknąć wycieku zasobów? * * * Dla kompletności, oto przykład zawierający `IDispose` i zawierający obejście/rozwiązanie (i, miejmy nadzieję, mniej rozpraszającą nazwę): class SomethingWithTimer : IDisposable { public SomethingWithTimer() { timer = new System.Threading.Timer (StaticCallback, nowe WeakReference<SomethingWithTimer>(this), 0, 1000); } System.Threading.Timer; static void StaticCallback(object state) { WeakReference<CośZCzasem> instanceRef = (WeakReference<CośZCzasem>) stan; Instancja SomethingWithTimer; if (instanceRef.TryGetTarget(poza instancją)) instance.Callback(null); } void Callback(stan obiektu) { Console.Write('.'); // zrób coś użytecznego } public void Dispose() { Dispose(true); GC.SuppressFinalize(to); } protected virtual void Dispose(bool disposing) { if (disposing) { Console.WriteLine("dispose"); timer.Dispose(); } } ~CośZCzasem() { Console.WriteLine("destruktor"); Utylizacja(fałsz); } } * Jeśli zostanie usunięty, licznik czasu zostanie usunięty. * Jeśli nie zostanie usunięty, obiekt kwalifikuje się do zbierania śmieci.


title: Czy istnieje różnica między terminami „Open Source” i „Open Source Software”?

text: Do dziś zawsze używałem zamiennie terminów **open source** i **oprogramowanie open source**. Ale potem przeczytałem post na blogu Phila Haacka, w którym sugeruje, że te dwa terminy niekoniecznie odnoszą się do tej samej rzeczy. Proponuje następujące definicje: **Oprogramowanie Open Source** to kod źródłowy, który jest licencjonowany na podstawie licencji spełniającej definicję Open Source. **Open Source** to metodologia rozwoju, która zawiera pewne cechy: * Opracowana w środowisku otwartym przy zaangażowaniu społeczności * Zespół akceptuje wkład, który spełnia jego standardy * Produkt końcowy posiada licencję open source. Obejmuje to oprogramowanie open source, sprzęt open source itp. Phil twierdzi, że końcowym produktem rozwoju oprogramowania open source jest oprogramowanie open source, ale oprogramowanie open source jest _niekoniecznie_ produktem rozwoju open source. Skoro wspomina również, że istnieje wiele różnych sposobów rozumienia tego, co oznacza open source, co sądzisz o tych definicjach? Czy zgadzasz się z dokonanym przez niego rozróżnieniem?


title: RDF i OWL: Czy spełniły one obietnice Sieci Semantycznej?

text: Ostatnio wiele się nauczyłem o tym, jak różne dziedziny nauki próbują przenieść swoje dane do sieci semantycznej, aby „uwolnić dane od przechowywania w odizolowanych silosach”. Dużo czytam o tym, jak te dziedziny mówią, jak ich wysiłki realizują „wizje” Sieci Semantycznej. Jako uczeń (i z perspektywy czysto uczenia się) byłem ciekawy, dlaczego, jeśli technologia semantyczna jest uważana za tak potężną, wysiłki są podejmowane od lat, ale ja i wiele osób, które znam, nigdy o tym nie słyszało do niedawna? Nie natknąłem się też na żadne artykuły naukowe, w których stwierdzano, że „och, nasz silnik wnioskowania był w stanie dokonać takiego a takiego odkrycia, które pomaga nam utorować drogę do rozwiązania…” itd. Wydaje się, że podejmowane są autentyczne wysiłki w różnych instytucjach, dziedzinach i dyscyplinach, aby przenieść wszystkie swoje dane do formatu „semantycznego”, ale co się dzieje po tym wszystkim, co zostało zrobione? Wszystkie **ontologie** zostały stworzone/ujednolicone i co dalej?


title: Jaka jest różnica między kontrolerem a routerem w MVC?

text: Czy oznaczają to samo (dołączanie adresów URL do działań lub działań do adresów URL) czy jest jakaś różnica, której mi brakuje? Przykład: http://github.com/dannyvankooten/PHP-Router kontra http://konstrukt.dk


title: Jak (taktownie) powiedzieć mojemu kierownikowi projektu lub głównemu programiście, że baza kodu projektu wymaga poważnej pracy?

text: Właśnie dołączyłem do (stosunkowo) małego zespołu programistów, który pracuje nad projektem od kilku miesięcy, jeśli nie roku. Podobnie jak w przypadku większości programistów dołączających do projektu, pierwsze kilka dni spędziłem na przeglądaniu bazy kodu projektu. Projekt (średnia i duża wewnętrzna linia aplikacji ASP.NET WebForms) jest, z braku bardziej opisowego terminu, katastrofą. Istnieją trzy natychmiast zauważalne problemy ze standardami kodowania: 1. **Standard jest bardzo luźny.** Opisuje więcej tego, czego nie robić (nie używaj notacji węgierskiej itp.) niż tego, co _nie_ robić. 2. **Standard nie zawsze jest przestrzegany.** Istnieją niespójności z formatowaniem kodu **wszędzie**. 3. **Standard nie jest zgodny z wytycznymi stylistycznymi Microsoftu.** Moim zdaniem nie ma sensu odstępować od wytycznych, które zostały określone przez twórcę frameworka i największego wkładu w specyfikację języka. Jeśli chodzi o punkt 3, być może bardziej mi to przeszkadza, ponieważ poświęciłem czas na uzyskanie mojego MCPD z naciskiem na aplikacje internetowe (w szczególności ASP.NET). Jestem również jedynym w zespole certyfikowanym specjalistą Microsoft. Z powodu tego, czego nauczyłem się podczas całej mojej nauki, samokształcenia i uczenia się w miejscu pracy (w tym przygotowania do egzaminów certyfikacyjnych), zauważyłem również kilka przypadków w kodzie projektu, w których rzeczy po prostu nie są robione w Najlepszym sposobem. Jestem w tym zespole dopiero od tygodnia, ale widzę tak wiele problemów z ich bazą kodu, że wyobrażam sobie, że będę spędzał więcej czasu na walce z tym, co już zostało napisane, aby robić rzeczy „po ich sposobie”, niż gdybym był praca nad projektem, który na przykład był zgodny z szerzej przyjętymi standardami kodowania, wzorcami architektury i najlepszymi praktykami. To prowadzi mnie do mojego pytania: **Czy powinienem (a jeśli tak, to w jaki sposób) zaproponować mojemu kierownikowi projektu i kierownikowi zespołu, że projekt wymaga gruntownego remontu?** Nie chcę wchodzić do ich biura, wymachiwać moimi certyfikatami MCTS i MCPD, mówiąc, że baza kodu ich projektu jest gówniana. Ale nie chcę też milczeć i pisać kludgey kodu na _ich_ kodzie kludgey, ponieważ faktycznie chcę pisać wysokiej jakości oprogramowanie i chcę, aby produkt końcowy był stabilny i łatwy w utrzymaniu.


title: Jaki jest najlepszy wzorzec projektowy do asynchronicznego przekazywania wiadomości w rozszerzeniu do Chrome?

text: Mam skrypt w tle, który jest odpowiedzialny za pobieranie i ustawianie danych w bazie danych `localStorage`. Moje skrypty treści muszą komunikować się ze skryptem w tle, aby wysyłać i odbierać dane. W tej chwili wysyłam do funkcji obiekt JSON zawierający polecenie i dane. Więc jeśli próbuję dodać obiekt do bazy danych, stworzę JSON, który ma atrybut `command` czyli `addObject` i inny obiekt, którym są dane. Po wykonaniu tej czynności skrypty działające w tle odsyłają odpowiedź stwierdzającą, że operacja się powiodła. Innym przypadkiem użycia funkcji byłoby zapytanie o dane, w którym to przypadku odeśle obiekt z powrotem, a nie sukces/niepowodzenie. Kod staje się trochę _hacky_, gdy zaczynam próbować pobrać zwrócony obiekt ze skryptu działającego w tle. Wygląda na to, że prawdopodobnie jest tu prosty problem projektowy, którego nie znam. Niektórzy ludzie sugerowali przyszłe/obiecujące problemy projektowe, ale nie znalazłem bardzo dobrego przykładu. Content Script function sendCommand(cmdJson){ chrome.extension.sendRequest(cmdJson, function(response){ //dowiedz się, co zrobić z odpowiedzią }); } Skrypt w tle if (request.command == "addObject"){ db[request.id]= JSON.stringify(request.data); sendResponse("sukces"); } else if(request.command == "getKeystroke"){ var keystroke = db[request.id]; sendResponse(klawisz); }


title: Dlaczego metody dziedziczone nie korzystają z właściwości podrzędnych? (PHP)

text: Próbuję uzyskać poniższy kod do pracy w klasach podrzędnych. Ale ciągle zawodzi, ponieważ sprawdza `basicDbClass`, a nie klasę potomną. Dla tych, którzy narzekają i odrzucają moje pytanie z powodu używania przeze mnie statycznych metod i zmiennych, statyczna metoda getBy służy do zwrócenia tablicy pasujących obiektów klas. Jeśli masz skargę na tę metodologię, raczej odrzucaj każde pytanie, które używa kodu, z którym się nie zgadzasz, poszukaj następnego pytania na ten temat, a następnie udziel im swojej genialnej odpowiedzi. Jeśli jesteś naprawdę podenerwowany, wyświadczę ci nawet przysługę zadania tego pytania, abyś mógł wyrzucić to ze swojego systemu. Główny problem tkwi w `static::$data_table`. Gdy wykonam następujące czynności, otrzymuję błąd krytyczny: > dostęp do niezadeklarowanej właściwości statycznej: basicDbClass::$data_table * * * $obj_array = childClass::getBy('id',5); class basicDbClass { public static function getBy($property,$value) { if(!property_exists(get_named_class(),$property)) { debug::add('errors',__FILE__,__LINE__,__METHOD__,$property.' nie jest ważna właściwość.'); zwróć fałsz; } $obj_array = tablica(); dbConnection::connect(MAIN_DB); $sql = sprintf('SELECT `id` FROM `%s` WHERE `%s` = \'%s\'',static::$data_table,mysql_real_escape_string($property),mysql_real_escape_string($value)); $wynik = mysql_query($sql); if($wynik === fałsz) { return false; } while($wiersz = mysql_fetch_assoc($wynik)) { $obj_array[$wiersz['id']] = new static($wiersz['id']); } return $obj_array; } } class childClass extends basicDbClass { protected static $data_table = 'child_class_table'; chronione $nazwa; chroniony identyfikator $; }


title: Jak aplikacje na dużą skalę radzą sobie z tworzeniem GUI?

text: Interesuje mnie tworzenie aplikacji Windows opartych na GUI w C++, ale nie jestem pewien, jak to się robi w ustawieniach profesjonalnych lub na dużą skalę. Wygląda na to, że opisanie wszystkich elementów (np. wymiarów itp.) w kodzie zajęłoby dużo czasu. Przypuszczalnie nie wszystko jest zrobione wizualnie, prawda? Jak to się zwykle robi? Jakie metody są używane, aby zapobiec marnowaniu czasu na definiowanie każdej właściwości, jaką może mieć kontrolka interfejsu użytkownika?


title: Jakie problemy napotkam, jeśli usunę koncepcję interfejsów z mojego kodu?

text: Programuję od wielu lat, ale nadal nie czuję się dobrze z koncepcją „Interfejsów”. Staram się używać interfejsów, ale wiele razy nie widzę dla nich obowiązkowego zastosowania. Myślę, że to prawdopodobnie dlatego, że projekty nie były tak duże, lub dlatego, że interfejsy są bardziej przydatne, gdy zaangażowana jest praca zespołowa. Podejmując kolejną próbę zrozumienia znaczenia interfejsów, oto moje pytanie: Jakie problemy napotkam, jeśli usunę pojęcie interfejsów z mojego kodu?


title: Nazewnictwo pakietów w stylu Java i domeny krajowe drugiego poziomu

text: Posiadam domenę .co.uk i zawsze, gdy mam do czynienia z nazewnictwem pakietów w stylu Java, wybieram `uk.co.domainname`. Kiedyś natknąłem się na pakiet, który robił co następuje: `co.uk.domainname`. Czy jedna z tych rzeczy jest słuszna, czy jest to decyzja dewelopera? Czy istnieje jakaś konwencja, która się tym zajmuje?


title: Czy pierwsze asemblery zostały napisane w kodzie maszynowym?

text: Czytam książkę The Elements of Computing Systems: Building a Modern Computer from First Principles, która zawiera projekty obejmujące budowę komputera od bramek logicznych aż do aplikacji wysokiego poziomu (w tej kolejności). Obecny projekt, nad którym pracuję, to pisanie asemblera przy użyciu wybranego przeze mnie języka wysokiego poziomu, który tłumaczy z kodu asemblera Hack na kod maszynowy Hack (Hack to nazwa platformy sprzętowej zbudowanej w poprzednich rozdziałach). Chociaż cały sprzęt został zbudowany w symulatorze, próbowałem udawać, że naprawdę konstruuję każdy poziom, używając tylko narzędzi dostępnych w tym momencie rzeczywistego procesu. To powiedziawszy, dało mi do myślenia. Używanie języka wysokiego poziomu do pisania mojego asemblera jest z pewnością wygodne, ale dla pierwszego asemblera, jaki kiedykolwiek napisano (tj. w historii), czy nie musiałby być napisany w kodzie maszynowym, skoro to wszystko, co istniało w tym czasie? I skorelowane pytanie... a może dzisiaj? Jeśli pojawi się zupełnie nowa architektura procesora, z zupełnie nowym zestawem instrukcji i zupełnie nową składnią asemblera, jak skonstruowany zostanie asembler? Zakładam, że nadal możesz używać istniejącego języka wysokiego poziomu do generowania plików binarnych dla programu asemblera, ponieważ jeśli znasz składnię zarówno języka asemblera, jak i języka maszynowego dla twojej nowej platformy, to zadanie napisania asemblera jest tak naprawdę tylko zadanie analizy tekstu i nie jest nieodłącznie związane z tą platformą (tj. musi być napisane w języku maszynowym tej platformy)... co jest właśnie powodem, dla którego jestem w stanie "oszukiwać" podczas pisania mojego asemblera hakerskiego w 2012 roku i korzystać z istniejących język na wysokim poziomie, aby mi pomóc.


title: Mając trochę kodu, jak mogę dowiedzieć się, skąd ładuje zasoby, jeśli programista nie udokumentował?

text: Zgodnie z tym samouczkiem OpenNI nie obsługuje gestów niestandardowych. Jednak Youtube ma filmy, na których ludzie właśnie to robią. Teraz wyraźnie ta rzecz ładuje skądś gesty. Jak mogę się dowiedzieć, gdzie udało im się skutecznie zaciemnić kod?


title: Sprzęgło systemu elementu jednostki

text: Ostatnio pracowałem nad małym osobistym projektem, który jest w zasadzie frameworkiem Entity Component System z automatycznie aktualizowanymi systemami. Chociaż mam całkiem niezły pomysł na sposób, w jaki framework powinien działać, z powodu braku doświadczenia mam problem z utrzymaniem wszystkiego w separacji. Kilka szczegółów na temat struktury: Każda jednostka jest zdefiniowana przez jej komponenty. Systemy odpowiadają za faktyczną modyfikację podmiotów poprzez zmianę ich elementów składowych. Aby poprawić lokalność odniesienia, zamiast przechowywać każdy składnik w odpowiednim elemencie, wszystkie składniki są przechowywane w jednorodnych wektorach, a każdy podmiot przechowuje listę indeksów do każdego wektora. Ponieważ każdy system modyfikuje określone komponenty, powinien prowadzić listę tylko jednostek z odpowiadającymi im komponentami. Jak radziłem sobie z tym wszystkim do tej pory, było mieć ComponentManager, EntityManager i SystemManager. Jednak klasy te są ze sobą bardzo ściśle powiązane. EntitManager musi mieć dostęp do ComponentManager w celu obsługi rozmiaru list indeksów i mapowania do nich każdego typu komponentu. Potrzebuje również dostępu, aby faktycznie dodać komponenty w odpowiednim wektorze. Inne sprzężenie jest między EntityManager i SystemManager. Za każdym razem, gdy tworzony jest podmiot, należy go dodać do listy odpowiednich Systemów. Ogólna magistrala zdarzeń wydaje się pomagać, ale nie jestem pewien, jak ją zaimplementować bez uczynienia jej globalną. Jak ulepszyć ten projekt, usuwając sprzężenie, jednocześnie zachowując funkcjonalność systemu?


title: Jak wprowadzić doświadczenie flow do rozwoju oprogramowania?

text: Jakie są twoje strategie poprawy przepływu pracy podczas pracy?


title: Gdzie jesteś zarówno serwerem autoryzacji, jak i serwerem zasobów, czy ma sens używanie protokołu OAUTH2 w celu zapewnienia bezpieczeństwa?

text: Jestem ciekawy, czy istnieją przypadki użycia, w których sensowne jest użycie OAUTH2, gdy jesteś zarówno chronionym zasobem, jak i serwerem autoryzacji. W tym przypadku masz już hasła na przykład, więc chronisz własne zasoby. Wydaje się, że jest to dość ciężkie - czy to powszechna praktyka, czy warto przyjrzeć się prostszym rozwiązaniom?


title: Czy algorytmy dopasowywania sekwencji mogą być używane do implementacji wyszukiwania?

text: Cześć Chcę zaimplementować wyszukiwanie na stronie internetowej, która zawiera niedoskonałe wyniki wyszukiwania. Oznacza to, że jeśli wyszukiwane hasło jest błędnie napisane lub nieznacznie różni się od dopasowania 100%, funkcja nadal powinna zwracać wyniki posortowane według podobieństwa pod względem słowa kluczowego search. Zaimplementowałem już algorytmy takie jak Smith-Waterman i Needleman-Wunsch, które również mogą być używane do przeszukiwania baz danych. Więc moim pomysłem było uruchomienie tych algorytmów dla każdego słowa kluczowego w bazie danych i posortowanie ich według wyniku każdego wyniku. Czy to dobry pomysł? Używam ASP.NET w C#. Czy są jakieś narzędzia lub sztuczki, które mogą to osiągnąć bez użycia moich własnych metod? Moim największym zmartwieniem jest wydajność, ponieważ wszystkie te algorytmy tworzą przynajmniej jedną dwuwymiarową macierz, obliczają jej wartości i wykonują traceback. Jakieś sugestie?


title: Zarządzanie informacjami debugowania programu w języku C dla Debuggera

text: Nie jestem pewien, czy tytuł jest odpowiedni. Napisałem parser plików CDB w C# i ANTLR, który tworzy dla mnie obiekty uruchomieniowe tak, abym mógł je przekazać do Agenta TCF, który zajmuje się wszystkim, co trzeba zadbać po stronie Eclipse. Taki plik CDB składa się z rekordów symboli, rekordów funkcji, rekordów modułów, a także rekordów typu i tak dalej. Opisuje program w C skompilowany za pomocą SDCC. Mam już dobrą strukturę zmiennych lokalnych, które debugują informacje, które mogę pobrać, rozwiązując identyfikator składający się z * **scope_flag** Wskazuje zakres symbolu: `L` local, `G`global, `F`File, ... * **module_base** Adres modułów, w których zadeklarowana jest zmienna lokalna * **poziom** i **poziom** Tupelka wskazująca węzeł drzewa, w którym każdy węzeł jest zasięgiem `{ ..}`. Nie ma znaczenia, czy jest to zakres funkcji, czy polecenie sterujące (`if`, `for`, itp.) * **index** Indeks symbolu wewnątrz węzła (dlatego jest to uporządkowana lista) To działa i powinien być wystarczająco szybki nawet dla dużych programów. Jeśli Eclipse chce wiedzieć cokolwiek o symbolu, niezależnie od tego, czy jest to nazwa, typ czy wartość, wysyła mi identyfikator, który wygląda mniej więcej tak (wartości w szesnastce): L@C415.E.1.1 i mogę zidentyfikować symbol w moim parserze. Głównym problemem, który teraz mam, są symbole globalne, takie jak zmienne globalne, nazwy funkcji i tak dalej. W tej chwili mam `Dictionary<T>`, który mapuje nazwę symbolu na jego obiekt wykonawczy: /* Dictionary, który przechowuje wszystkie symbole o zasięgu globalnym. */ private Dictionary<Ciąg, CDBSymbol> m_nameToGlobalSymbolDict = new Dictionary<Ciąg, CDBSymbol>(); Rozważmy teraz bardzo duży program, w którym może wystąpić wiele symboli globalnych. Czy tak duża tablica mieszająca to najlepsze, co mogę zrobić? W tej chwili globalny identyfikator symbolu wygląda tak: G@nazwa_funkcji1 G@global_integer1 G@nazwa_funkcji2 Jedyne, co mógłbym zrobić, to dodać identyfikatory dla funkcji, zmiennych itp., takich jak G@C.nazwa_funkcji1 G@E.global_integer1 G@C.nazwa_funkcji2, gdzie „C” oznacza kod i wewnętrzną pamięć RAM „E”, ale to pozwoliłoby mi tylko na podzielenie tablicy mieszającej i nic więcej. Czy ktoś może mi zasugerować rozwiązanie lub powiedzieć, czy jest to już w porządku, tak jak to robię? Mam nadzieję, że jasne jest, o co proszę. Jeśli nie, daj mi znać.


title: Jak powinienem zaprojektować poprawny projekt OO w przypadku operacji typu Business-Logic?

text: **EDYTUJ:** Może powinienem zadać pytanie w inny sposób. w świetle komentarza ammoQ zdaję sobie sprawę, że zrobiłem coś takiego jak sugerowane, co jest swego rodzaju poprawką i jest w porządku. Ale nadal chcę się uczyć na przyszłość, aby jeśli opracuję nowy kod dla operacji podobnych do tego, od początku będę mógł go poprawnie zaprojektować. Tak więc, jeśli mam następujące cechy: * Odpowiednie dane wejściowe składają się z danych, które są połączone z kilkoma różnymi obiektami biznesowymi * Wszystkie dane wejściowe są walidowane i sprawdzane krzyżowo * Podejmowane są próby wstawienia danych do bazy danych * Wszystko to jest tylko jedną operacją z perspektywy biznesowej, co oznacza, że wszystkie kontrole krzyżowe i walidacje są tylko efektami ubocznymi. Nie mogę wymyślić innego sposobu niż jakiś rodzaj Obiektu Operator/Koordynator, który aktywuje całą procedurę, ale potem wpadam w kod typu Functional-Decomposition. więc czy jest lepszy sposób na zrobienie tego? **Pytanie oryginalne** W naszym systemie mamy do czynienia z wieloma złożonymi operacjami, które obejmują wiele walidacji i czynności DB. Jedną z głównych funkcjonalności biznesowych można było lepiej zaprojektować. Krótko mówiąc, nie było separacji warstw, a kod działałby tylko ze scenariusza, w którym został pierwotnie zaprojektowany, a teraz scenariuszy było więcej (takich jak żądania z API lub z innych urządzeń), więc musiałem przeprojektować. Przeniosłem cały kod DB do obiektów, które działają jak obiekty Business to DB, a całą logikę biznesową umieściłem w klasie typu Operator, którą zaimplementowałem w następujący sposób: Najpierw stworzyłem obiekt, który pomieści wszystkie informacje potrzebne do operacji, nazwijmy to InformationObject. Następnie stworzyłem OperatorObject, który przyjmie InformationObject jako parametr i będzie na nim działał. OperatorObject powinien aktywować różne obiekty i weryfikować lub sprawdzać istnienie lub dowolny scenariusz, w którym logika biznesowa jest naruszona, a następnie wykonać operację zgodnie z informacjami w InformationObject. Więc moje pytanie brzmi - czy taka implementacja jest poprawna? PS, ten Operator działa tylko w jednej Operacji Biznesowej.


title: Obsługa błędów PHP MVC, wyświetlanie wyświetlania i uprawnienia użytkownika

text: Buduję panel moderacyjny od podstaw w podejściu MVC i wiele pytań pojawiało się podczas rozwoju. Chciałbym usłyszeć od innych, jak radzą sobie w takich sytuacjach. 1. **Obsługa błędów** Czy należy obsłużyć błąd w metodzie klasy, czy metoda powinna mimo to coś zwrócić, a błąd należy obsłużyć w kontrolerze? A co z wyjątkami PDO, jak sobie z nimi radzić? Załóżmy na przykład, że mamy metodę, która zwraca prawdę, jeśli użytkownik istnieje w tabeli i fałsz, jeśli nie istnieje. Co zwracasz w deklaracji catch? Nie możesz po prostu zwrócić false, ponieważ wtedy kontroler zakłada, że wszystko jest w porządku, podczas gdy prawda jest taka, że coś musi być poważnie zepsute. Wyświetlenie błędu z metody całkowicie psuje cały projekt. Może przekierowanie strony wewnątrz metody? 2. **Właściwy sposób pokazania widoku** Kontroler teraz wygląda mniej więcej tak: include('view/header.php'); if ($_GET['m']=='coś') include('view/something.php'); elseif ($_GET['m']=='coś') include('widok/coś.php'); include('widok/foter.php'); Każdy widok sprawdza również, czy został dołączony ze strony indeksu, aby uniemożliwić bezpośredni dostęp do niego. Istnieje plik widoku dla każdej innej treści dokumentu. Czy ten sposób włączania różnych poglądów jest w porządku, czy jest bardziej odpowiedni sposób? 3. **Zarządzanie prawami użytkowników** Każdy użytkownik ma swoje prawa, co może zobaczyć i co może zrobić. Która część systemu powinna sprawdzać, czy użytkownik ma uprawnienia do oglądania widoku, kontrolera lub samego widoku? Obecnie sprawdzam uprawnienia bezpośrednio w widoku, ponieważ każdy widok może zawierać kilka formularzy, które wymagają różnych uprawnień i musiałbym utworzyć osobny plik dla każdego z nich, gdyby został umieszczony w kontrolerze. Muszę również ponownie sprawdzać uprawnienia za każdym razem, gdy formularz jest przesyłany, ponieważ dane formularza można łatwo sfałszować. Prawda jest taka, że całe to sprawdzanie uprawnień i walidacja danych wejściowych po prostu zamienia kontroler w ogromny klaster „jeśli/to/w przeciwnym razie”. Czuję, że w 90% przypadków sprawdzam błędy/uprawnienia/walidacje i bardzo mało rzeczywistej logiki. Czy to normalne nawet w przypadku popularnych frameworków?


title: Zautomatyzowana platforma testowania Qt

text: Czy ktoś może polecić dobry, solidny „darmowy” framework testowy dla Qt? Nasze wymagania: 1. Powinien być w stanie przetestować podstawowe zdarzenia kliknięcia myszą / ruchu myszy 2. Powinien być w stanie obsłużyć elementy widoku niebędące widżetem 3. Powinien mieć możliwość "zapisu" w celu generowania skryptów testowych. 4. Powinien być zautomatyzowany do codziennego uruchamiania. Przyjrzeliśmy się: 1. Squish - to rozwiązuje wszystkie nasze problemy. Ale to jest po prostu zbyt drogie. 2. KD Executor - strona pobierania łączy się teraz ze stroną squish i mówi, że to właśnie zalecają do testowania. Nie jestem pewien, co przez to rozumieją. 3. TDriver - z nokia.qt. Super trudne do zainstalowania. Bardzo mało dokumentacji. Trudno jest po prostu zainstalować. Zastanawiam się, o ile trudniej byłoby pisać testy. 4. qtestlib — Nie można obsłużyć składników niebędących widżetami. Wszystko musi być widgetem do przetestowania. Brak funkcji „nagrywania”. Czy ktoś może pomóc z inną alternatywą?


title: Zapisywanie wszystkich trafień w aplikacji internetowej

text: Czy istnieją standardowe podejścia do utrwalania danych dla każdego trafienia otrzymywanego przez aplikację internetową? Byłoby to do celów analitycznych (jako lepsza alternatywa dla wydobycia dziennika w dół drogi). Wygląda na to, że Redis byłby koniecznością. Czy wskazane jest użycie innego serwera DB dla tej tabeli, czy też Redis wystarczy, aby złagodzić wpływ na główną bazę danych? Jak powszechna jest ta praktyka? Wydaje się, że nie ma sensu dla firm, które chcą lepiej zrozumieć swoich użytkowników, ale niewiele o tym czytałem.


title: Funkcje języka programowania, które pomagają wcześnie wyłapywać błędy

text: Czy znasz jakieś funkcje języka programowania, które pomagają wykrywać błędy na wczesnym etapie procesu tworzenia oprogramowania - najlepiej w czasie kompilacji lub jak najwcześniej w czasie wykonywania? Przykłady dobrze znanych i skutecznych funkcji redukujących błędy to: * Typy statyczne i typy ogólne: błędy niezgodności typów są wykrywane przez kompilator * Design by Contract (TM), zwany także Programowaniem kontraktowym: nieprawidłowe wartości są szybko wykrywane w czasie wykonywania (poprzez warunki wstępne, warunki końcowe i niezmienniki klas) * Testowanie jednostkowe Zadaję to pytanie w kontekście ulepszania języka programowania obiektowego (zwanego Obix), który został zaprojektowany od podstaw, aby „ułatwić szybkie pisanie niezawodnego kodu”. Poza funkcjami wymienionymi powyżej, język ten zawiera również inne funkcje Fail-fast, takie jak: * Obiekty są domyślnie niezmienne * Wartości Void (null) nie są domyślnie dozwolone Celem jest dodanie większej liczby koncepcji Fail-fast do języka. Jeśli znasz inne funkcje, które pomagają pisać mniej podatny na błędy kod, daj nam znać. Dziękuję Ci.


title: Po co mieć minimalny kod użytkownika/odręcznie i robić wszystko w XAML?

text: Czuję, że społeczność MVVM stała się nadgorliwa jak programiści OO w latach 90-tych - to myląca nazwa MVVM jest synonimem braku kodu. Z mojego zamkniętego pytania StackOverflow: Wiele razy natrafiam tutaj na posty o kimś, kto próbuje zrobić odpowiednik w XAML zamiast kodu z tyłu. Ich jedynym powodem jest to, że chcą zachować swój kod za „czysty”. Popraw mnie, jeśli się mylę, ale nie jest tak, że: XAML jest również kompilowany - do BAML - a następnie w czasie wykonywania i tak musi zostać przeanalizowany do kodu. XAML może potencjalnie zawierać więcej błędów w czasie wykonywania, ponieważ nie zostaną one odebrane przez kompilator w czasie kompilacji — z nieprawidłowej pisowni — te błędy są również trudniejsze do debugowania. Za tym jest już kod - podoba się to lub nie InitializeComponent(); musi zostać uruchomiony, a plik .g.i.cs, w którym się znajduje, zawiera sporo kodu, chociaż może być ukryty. Czy to czysto psychologiczne? Podejrzewam, że to programiści, którzy wywodzą się z sieci i lubią znaczniki, a nie kod. EDYCJA: Nie proponuję kodu w tyle zamiast XAML - używaj obu - wolę też robić moje powiązanie w XAML - jestem po prostu przeciwny podejmowaniu wszelkich wysiłków, aby uniknąć pisania kodu za esp w aplikacji WPF - powinno to być połączenie obaj, aby jak najlepiej z niego skorzystać. AKTUALIZACJA: To nawet nie pomysł Microsoftu, każdy przykład w MSDN pokazuje, jak możesz to zrobić w obu.


title: Co jest nie tak z odwołaniami cyklicznymi?

text: Byłem dziś zaangażowany w dyskusję na temat programowania, w której przedstawiłem pewne stwierdzenia, które zasadniczo zakładały aksjomatycznie, że odwołania cykliczne (między modułami, klasami, czymkolwiek) są generalnie złe. Kiedy udało mi się przebrnąć przez prezentację, mój współpracownik zapytał: „Co jest nie tak z referencjami cyklicznymi?”. Mam do tego silne odczucia, ale trudno mi to zwięźle i konkretnie wypowiedzieć. Wszelkie wyjaśnienia, które mogę wymyślić, zwykle opierają się na innych elementach, które również uważam za aksjomaty („nie można używać w izolacji, więc nie można testować”, „nieznane/niezdefiniowane zachowanie, gdy stan mutuje w uczestniczących obiektach” itp. .), ale chciałbym usłyszeć zwięzły powód, dlaczego okrągłe odniesienia są złe, które nie wymagają takich przeskoków wiary, jakie robi mój własny mózg, po spędzeniu wielu godzin na rozplątywaniu ich, aby zrozumieć, naprawić, i rozszerzaj różne fragmenty kodu. **Edytuj:** nie pytam o jednorodne odwołania cykliczne, takie jak te na podwójnie połączonej liście lub wskaźnik do elementu nadrzędnego. To pytanie tak naprawdę dotyczy odwołań cyklicznych o „większym zasięgu”, takich jak libA wywołująca libB, która odwołuje się do libA. Jeśli chcesz, zamień „moduł” na „lib”. Dzięki za wszystkie dotychczasowe odpowiedzi!


title: Korzystanie z usługi katalogowej zamiast bazy danych

text: Właśnie rozpocząłem pracę nad istniejącą aplikacją, która zamiast bazy danych wykorzystuje usługę katalogową LDAP jako magazyn obiektów. Wielu moich współpracowników komentowało, że aplikacja nigdy nie powinna używać usługi katalogowej zamiast bazy danych jako składnicy obiektów. Mimo wszystko muszę nad tym popracować i nie będę mógł w najbliższym czasie zmienić go z LDAP na bazę danych. To powiedziawszy, komentarze moich współpracowników nasuwają mi w głowie pytanie: _Dlaczego używanie dostawcy katalogów zamiast bazy danych jako składnicy obiektów jest złe?_ Czy kiedykolwiek mogą się zdarzyć przypadki, w których byłoby to nie tylko akceptowalne, ale nawet lepsze niż używanie bazę danych?


title: Czas wdrożenia Visual Design w Agile

text: Pracujemy w Scrumie z zastrzeżeniem, że nie mamy potencjalnie możliwego do wysłania produktu na koniec każdego sprintu, zamiast tego wymagamy kilku sprintów wzmacniających/stabilizujących przed wydaniem. Jednym z powodów jest to, że nasz główny projektant UX woli, abyśmy wykonali wszystkie prace wizualne (takie jak kolory, czcionki, dokładny układ i kontrolki) na późniejszych etapach projektu. Z jednej strony ma to sens, ponieważ funkcja z przyzwoitym interfejsem użytkownika oparta na modelu szkieletowym jest zwykle wystarczająco dobra, aby otrzymywać informacje zwrotne od użytkowników, więc zbyt ciężka praca nad ostatecznymi wizualizacjami i stylami nie jest konieczna do zmniejszenia ryzyka. Może to być nawet marnotrawstwem, jeśli funkcja nie przejdzie testów użyteczności lub jeśli po dalszych opiniach użytkowników zdecydujemy się zmienić projekt wizualny całego systemu, w tym funkcji, które zostały już zaimplementowane. Z drugiej strony dzięki takiemu podejściu będziemy mieli listę funkcji, które nie są w pełni rozwinięte, a końcowe poprawki zostaną pominięte aż do ostatnich Sprintów. Jak myślisz, co powinniśmy zrobić? Czy powinniśmy sięgnąć po rekomendację głównego projektanta UX, czy może powinniśmy zdecydować się na produkt potencjalnie nadający się do wysyłki? Dziękuję Ci.


title: Programowanie jako opcja kariery dla absolwenta informatyki a inne dziedziny?

text: > **Możliwy duplikat:** > Dlaczego dyplom z informatyki ma znaczenie dla profesjonalnego programisty? > Czy potrzebuję dyplomu z informatyki, aby dostać pracę juniora w programowaniu? Są różne zawody, takie jak: lekarze - do tego wymagane są różne stopnie naukowe i po ich ukończeniu zostajesz lekarzem lub chirurgiem. inżynierowie - inżynier elektryk, inżynier budownictwa, elektronik i wielu innych. teraz, gdy widzę programistów pracujących w firmach, mają oni różne stopnie, jak inżynier cywilny. stopień, stopień biotechnologii, stopień Mcom, stopień inżyniera mechanika.... i wiele innych. Wydaje się raczej bezcelowe, że ci ludzie zdobyli te stopnie naukowe, ale tak czy inaczej, twój stopień ma znaczenie, gdy jesteś dobrym programistą. powiedz, że ktoś jest dobry w C++ i jest inżynierem budownictwa .... ** a co ze stackoverflow lub innymi firmami, czy rozważyłbyś takie osoby na rozmowę kwalifikacyjną, czy też ściśle wspomniałbyś, że informatyka jest niezbędna do aplikowania.**


title: Wydajność programu Visual Studio 2010 z dodatkiem SP1

text: Od czasu instalacji dodatku SP1 dla programu Visual Studio 2010 zauważyłem, że mam ogromne problemy z wydajnością. Spowoduje to losowe zawieszenie się na mnie. Nie miałem problemów z wydajnością w Visual Studio 2010 przed aktualizacją. Jedynym dodatkiem, który mam uruchomiony, jest ReSharper. Zastanawiam się, czy ktoś jeszcze ma problemy z wydajnością? Jeśli tak, czy znalazłeś sposób, aby je naprawić?