title: Zmienna prywatna a własność?

text: Podczas ustawiania wartości na zmienną wewnątrz klasy przez większość czasu mamy do wyboru dwie opcje: private string myValue; ciąg publiczny MojaWartość { get { return mojaWartość; } ustaw { mojaWartość = wartość; } } Czy istnieje konwencja, która określa, w jaki sposób powinniśmy przypisywać wartości zmiennym wewnątrz naszych klas? Na przykład, jeśli mam metodę wewnątrz tej samej klasy, powinienem przypisać ją za pomocą właściwości lub za pomocą zmiennej prywatnej. Widziałem to zrobione w obie strony, więc zastanawiałem się, czy to jest wybór, czy wydajność jest czynnikiem (prawdopodobnie drobnym).


title: Zmiana z VB.NET na C#?

text: Pracuję w kooperacji w firmie jako specjalista ds. inżynierii testowej. Technicznie rzecz biorąc, nie jest to praca związana z oprogramowaniem, jednak pod koniec dnia większość czasu spędzam na programowaniu. W żadnym wypadku nie jestem czarodziejem programistycznym, ale z VB.NET czuję się bardzo komfortowo, ponieważ w ten sposób pisano projekty rozpoczęte w mojej firmie przed moim czasem, a więc tego się nauczyłem i wykorzystałem na tym stanowisku. Mam wrażenie, że szukałem pomocy online, kiedy jej potrzebuję, że ogólnie jest więcej i lepsze wsparcie dla C# niż dla VB.NET. To skłoniło mnie do myślenia, że dla firmy może być korzystne rozpoczęcie programowania mniej w VB.NET, a więcej w C#. Jednak prawie wszystkie projekty w moim dziale (ponieważ kilka innych osób pracuje nad małymi projektami programistycznymi) są obecnie pisane w VB.NET. Dodatkowo, większość projektów oprogramowania wykonywanych w naszym dziale jest stosunkowo prosta, jak sobie wyobrażam, w odniesieniu do obszaru skoncentrowanego na oprogramowaniu każdej firmy. Prawdopodobnie połowa z tego to generowanie stron html z wykresami, aby wizualnie zilustrować określone dane. Biorąc pod uwagę te dwa fakty, próba zmiany głównego używanego języka programowania ma oczywiste wady. Ponadto język vb.net jest bardzo podobny do VBA (dla programu Excel) i VBScript, które są również dość często używane w mojej części firmy. Zasadniczo nie jestem pewien, czy warto byłoby pracować nad zmianą głównego używanego języka, ponieważ nie ma zbyt wiele skomplikowanego programowania, a podobne języki są i tak potrzebne. Byłem ciekaw, jaki dodatkowy wgląd mogą mi zaoferować doświadczeni programiści w zakresie zmiany głównego języka używanego w mojej okolicy z VB.NET na C#? Jakie są korzyści lub wady, o których być może nie pomyślałem? Jak dużą rolę odgrywa każda zaleta i wada? Jaka jest Twoja ogólna opinia na temat pomysłu przejścia z VB.NET na C#?


title: Kiedy mówimy o „zamknięciu”, czy odnosimy się do jednej zmiennej, czy też odnosimy się do wszystkich „zamkniętych” zmiennych?

text: Weźmy następujący kod (JavaScript), który zwraca funkcję, która zamyka zmienne `x` i `y`, aby to zilustrować: function test() { var x = Math.random(); var y = Math.losowo(); var f = function() { console.log(x, y); }; powrót f; } test()(); _Kod jest bezsensowny, chcę tylko zamknąć `x` i `y`._ Zmienne `x` i `y` nie istnieją poza funkcją `test`, ale pozostają dostępne w funkcji `f`. Wyłączając jakiekolwiek optymalizacje kompilatora (takie jak inline), czy mówimy, że istnieje pojedyncze zamknięcie ( _utworzone przez_ `f`), czy też mówimy, że są dwa domknięcia ( _for/over_ `x` i `y`)?


title: Jaki jest powód składni if w CoffeeScript?

text: W większości innych języków warunek pojawia się przed instrukcją, która ma zostać wykonana, gdy warunek zostanie spełniony. Jednak w CoffeeScript (i być może w niektórych innych językach) składnia jest następująca: liczba = -42 jeśli przeciwnie.


title: Jak subtelnie powiedzieć profesorowi o naszych słabych zadaniach programistycznych?

text: Wiąże się to z moim nauczycielem C++ z pierwszego semestru i, niestety, także z nadchodzącym drugim semestrem. Wykonałem już pierwsze zadanie; nie trzeba dodawać, że to okropne. Jak mogę delikatnie powiedzieć mojemu profesorowi, że praca domowa, do której nas zmusza, daje nam zły przykład dobrego OOP, a także złą praktykę OOP w C++. Na przykład zmusza nas do klasyfikowania wszystkich naszych funkcji, używania metod get/set dla wszystkich składowych i mozolnie okropnych funkcji do wywoływania naszych danych. Oto przykład pracy domowej, którą musimy wykonać: AuctionApplication aA; Aukcja *auction = aA.CreateAuction("Cześć"); Licytant *licytant = aA.CreateBidder(", Świat"); Oferta *oferta = aA.oferta(licytant, aukcja, 0); std::cout << "Aukcja: " << aA.GetLatestBid(auction)->GetAuction()->GetName() << "\nOferent: " << aA.GetLatestBid(auction)->GetBidder()-> GetName() << "\nCena: " << aA.GetLatestBid(aukcja)->GetPrice() << "\n\n"; std::cout << "Aukcja: " << oferta->GetAuction()->GetName() << "\nLicytant: " << oferta->GetOferent()->GetName() << "\nCena: " << oferta->PobierzCenę(); Każda funkcja musi mieć niepusty typ zwrotu, nie mogę po prostu pobrać żadnych danych bez przeskakiwania przez obręcze. Poza tym nie jest to nawet właściwie zamknięte, ponieważ mogę łatwo uzyskać członka licytacji, a następnie, jeśli byłem nieświadomym programistą, kontynuować programowanie z tą wartością. Nie ma stałej poprawności, nie ma wydajności (wszystko jest przekazywane przez wartość, nawet wektory i listy), nie ma bezpieczeństwa wyjątków, w ogóle nic. Zadania domowe są pełne błędów i są sprzeczne z naturą C++, który moim zdaniem jest OOP z umiarem, jak tego wymaga. Nie jestem pewien, czy to ja, i co myślą o tym moi koledzy z klasy. Wiem, że mój przyjaciel czuje to samo, ale większość klasy ma problemy z 60% niezdaniem egzaminów. Czy jest jakiś sposób, w jaki mogę powiedzieć mojemu nauczycielowi, aby spróbował dawać lepsze zadania w środowisku bardziej w stylu C++, nie budząc jednocześnie gniewu? Publikowanie tego w Programiści w przeciwieństwie do SO, ponieważ pytanie dotyczy tego, jak rozmawiać z profesorami programowania, a nie pisać rzeczywisty kod :)


title: Czy bycie testerem oprogramowania sprawia, że jesteś bardziej wszechstronnym programistą?

text: Interesuje mnie perspektywa spędzenia kilku lat jako tester: wydaje się, że dwa lub trzy lata jako tester w czyimkolwiek CV to duży zysk. Czy są jakieś umiejętności, które możesz zdobyć jako tester oprogramowania, których nie możesz (lub na pewno nie zdobędziesz) jako programista? Czy istnieje droga powrotna od testowania oprogramowania do rozwoju, czy też większość firm woli „czystych” programistów?


title: W jaki sposób nowo utworzone języki programowania korzystają z funkcji interfejsu API systemu Windows?

text: WinAPI koncentruje się głównie na rodzinie C, ale w jaki sposób nowe języki programowania wykorzystują te funkcje bez tworzenia własnego typu runtime/interpreter? Czy podpinają się bezpośrednio do plików DLL? kernel32.dll zawiera większość tych funkcji, prawda? Dziękuję.


title: Czy moduły kryptograficzne Pythona są wystarczająco dobre?

text: Powiedzmy, że pisałeś profesjonalne oprogramowanie, które zawierałoby poufne informacje o kliencie. (Weź to w kontekście mnie jako programisty-amatora.) Czy użyłbyś hlib i hmac? Czy są wystarczająco dobre, aby zabezpieczyć dane? A może napisałbyś odręcznie coś bardziej wyszukanego? Edycja: W kontekście tych bibliotek zawierających mniej więcej najlepsze algorytmy mieszające na świecie, myślę, że głupio jest pytać, czy napisałbyś coś bardziej wyszukanego. To, o co tak naprawdę pytam, to czy samo w sobie wystarczy.


title: Najlepszy sposób na wykonywanie połączeń synchronicznych między aplikacjami JEE

text: Mam dwie aplikacje internetowe jee, które zostaną opublikowane na tym samym serwerze fizycznym, ale pod różnymi adresami sieciowymi. **APP A** : nasłuchuje portu na publicznym adresie IP i w razie potrzeby wykonuje synchroniczne wywołania do aplikacji B. **APP B** : nasłuchuje portu na prywatnym adresie IP i w razie potrzeby wykonuje synchroniczne wywołania do aplikacji A. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/zfoDg.png) Aby połączyć APP A z APP B, rozważam następujące alternatywy. * RMI * Kolejka wiadomości * Lekka magistrala ESB Proszę powiedzieć, czy widzisz jakąkolwiek wyraźną przewagę popartą faktami na którymkolwiek z nich, lub czy jest inna technologia, którą powinienem rozważyć.


title: Strategie unikania powielania wprowadzania danych między PDF a stroną internetową (np. menu restauracji)

text: Tworzę stronę internetową dla restauracji. Mają do pobrania wersję ich menu w formacie PDF (z której jest drukowane menu „z rzeczywistego świata”), ale chcemy również mieć wersję tekstową menu na stronie internetowej (ponieważ jest XXI wiek, a ty nie powinien czytać pliku PDF podczas przeglądania takiej witryny). Mam nadzieję uniknąć – lub maksymalnie zminimalizować – potencjalne problemy z utrzymywaniem danych w dwóch miejscach (jednym w pliku PDF i jednym na stronie internetowej). W idealnym świecie stworzylibyśmy niestandardowy interfejs pulpitu nawigacyjnego do zarządzania danymi menu, z w pełni znormalizowanym schematem, a na podstawie tych danych automatycznie wygenerowalibyśmy plik PDF _i_ wersje menu na stronie internetowej (i wymyśliliśmy bardzo drogi i elastyczny projekt wizualny menu PDF, który uwzględnia wszystkie przyszłe kombinacje danych, które mogą być w nim zawarte -- ponieważ wizualny układ menu PDF jest bardzo ważny, ponieważ to właśnie jest drukowane menu „ze świata rzeczywistego” z). Ale ponieważ budżet nie jest nieograniczony, staram się wymyślić inne sposoby osiągnięcia tego celu. Czy są jakieś kompromisowe rozwiązania lub rzeczy, które mógłbym zrobić w połowie drogi? Oczywiście nie oczekuję idealnego i taniego rozwiązania, ale wszystko, co minimalizuje podwójne wprowadzanie danych do tego stopnia, że nie jest to aż tak uciążliwe, byłoby naprawdę pomocne.


title: Opracowanie testu wartości/semantyki referencji Haskella

text: W językach imperatywnych trywialne jest wymyślenie testu programistycznego dotyczącego używania przez język „semantyki wartości” lub „semantyki odniesienia”. Można wykonać następujące czynności i sprawdzić wartość `a` (gdzie `Vertex {jeden, dwa, trzy :: Integer}`): a := Wierzchołek 3 4 5 b := a jeden b := 6 dwa b := 8 trzy b := 10 Jednakże, ponieważ zmienne są niezmienne w językach funkcjonalnych, ten test nie zadziała w takich językach. Niewiele wiem o Haskell (i ogólnie o programowaniu funkcjonalnym), ale rozumiem, że używa semantyki wartości. Czy jest możliwe wymyślenie eksperymentu programistycznego, który rozróżniłby między „rekordem ref” a „rekordem val” w Haskell?


title: Porady dotyczące struktury i nazw przestrzeni nazw i klas

text: Jestem oporny na nazywanie klasy „głównej” taką samą jak przestrzeń nazw, ale czasami czuję, że jej potrzebuję. Biorąc pod uwagę, że używam formuły `Vendor.Namespace.[Subnamespace].Class`, wyobraź sobie następujący scenariusz: [MyFramework] [Database] Database Sql Schema DriverAbstract DriverInterface [Drivers] Mysql Postgresql Sqlite obs: `[]` są dla przestrzeni nazw, pozostałe to klasy. Teraz mógłbym zamiast tego wywołać klasę `Database` `Connection`, ale kiedy zaimportuję przestrzeń nazw `MyFramework.Database`, zobaczyłbym tylko `Connection` w kodzie (ale połączenie z czym?). Innym rozwiązaniem byłoby nazwanie go `DatabaseConnection`, ale czy to naprawdę konieczne? Chciałbym poznać Twoje przemyślenia i pomysły dotyczące tego problemu. Dziękuję (: Zadanie poboczne: również, jakie są twoje przemyślenia na temat `DriverAbstract` i `DriverInterface`? Czy powinny one lepiej pasować do przestrzeni nazw `[Drivers]`? Czy `DriverAbstract` powinienem nazywać po prostu `Driver`?


title: Kiedy połączenie Efferent / Afferent jest dobre lub złe?

text: W tym tygodniu mam egzamin z wzorców oprogramowania i jednym z tematów, które będziemy studiować, jest sprzężenie eferentne i aferentne. Rozumiem, że pakiet ma wysokie Ce (sprzęgło odprowadzające), jeśli zależy to od wielu innych typów. Na przykład: class Car{ Engine engine; Koło koła; Ciało ciała; } Ta klasa miałaby wysoce eferentne sprzężenie, ponieważ zależy od typów silnika, koła i nadwozia. Natomiast typ „koło” miałby wysokie Ca (sprzęgło doprowadzające), gdyby zależało od niego kilka innych pakietów (samochód, samolot, rower). Jedno z możliwych pytań na naszym egzaminie brzmi: kiedy połączenie Efferent / Afferent jest dobre czy złe? Wydaje mi się to dziwne, ponieważ logicznie program potrzebowałby pakietów / klas z wysokim sprzężeniem Efferent / Afferent. Czy ktoś ma przykład na to, kiedy/gdzie wysokie eferentne lub aferentne sprzężenie jest dobre/złe? Dziękuję !


title: W jaki sposób priorytet_kolejka skutecznie utrzymuje stertę w deque?

text: W C++ STL `priority_queue` (sterta) może być używana z dowolnym kontenerem bazowym, takim jak `deque`. W jaki sposób implementacja pozostaje `O(log n)`, jeśli `deque`s nie zamienia elementu w indeksie `a` na indeks `b` w stałym czasie?


title: Uproszczenie procesu kompilowania i uruchamiania aplikacji Object-C w GNUstep

text: Właśnie zainstalowałem GNUstep (po tym poście: http://www.jaysonjc.com/programming/objective-c-programming-in-windows-gnustep-projectcenter.html) Mówi, żeby uruchomić ten kod: gcc -o helloworld helloworld. m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString za każdym razem, gdy chcę skompilować. U mnie działa dobrze. Jednak ponieważ uczę się i będę często kompilować/uruchamiać aplikacje (wprowadzając niewielkie zmiany i próbując ponownie), chciałbym prostszy sposób na zrobienie tego. Czy istnieje łatwiejszy sposób na skompilowanie, a następnie uruchomienie aplikacji? Czy po prostu jestem leniwy?


title: Jaka jest najlepsza struktura repozytorium?

text: Zajrzałem do wielu repozytoriów oprogramowania open source i znalazłem kilka wspólnych elementów i rzeczy, które ludzie robią w inny sposób od siebie. Na przykład, każde repozytorium ma plik `README`, plik `INSTALL`, plik `COPYING` i tym podobne. Inne rzeczy się różnią: * Niektóre projekty, takie jak git, mają swój kod źródłowy na poziomie głównym, podczas gdy inne mają kod źródłowy w folderze `src/`, a inne, jak jądro Linux, mają kod źródłowy rozproszony w różnych folderach w poziom root, który dzieli kod na obszary; * Niektóre mają swoje testy w folderze `t/`, podczas gdy inne w folderze `tests/` lub nazwane inaczej; * Niektóre zawierają pliki dotyczące przesyłania łat i opiekunów, które mogą znajdować się w niektórych `Documentation/` lub na poziomie głównym. Czy istnieją rekomendacje? Najlepsza praktyka? Na przykład: osobiście nie podoba mi się kod na poziomie głównym, git-fashion. Wygląda na niechlujny i dezorientuje kogoś, kto próbuje zacząć jako współtwórca (zwłaszcza, że mają trochę kodu w folderach i skryptach również na poziomie głównym, jest to naprawdę brudne). Jeśli miałabym rozpocząć własny projekt i chciałabym zacząć od samego początku, czy są jakieś zalecenia? Najlepsze praktyki? Jak mogę stworzyć czystą i przejrzystą strukturę? Dziękuję Ci!


title: test na rolę programisty dla absolwentów?

text: Szukam testów, które nadają się do roli programisty absolwenta, głównie testów, które polegają na przeglądaniu kodu i znajdowaniu błędów itp., wielokrotnego wyboru lub w inny sposób. Najlepiej kod napisany w c#. Niedługo mam test i chcę się wcześniej przygotować.


title: dlaczego javascript jest szeroko stosowanym językiem skryptowym w aplikacjach internetowych?

text: Nie mogę znaleźć wtyczek napisanych w innych językach niż javascript. Przeglądarka obsługuje tylko Javascript. Dlaczego nie używali innych języków skryptowych niż Javascript, kiedy ludzie zaczęli używać skryptów na swoich stronach internetowych? Dlaczego javascript otrzymał priorytet?


title: Dlaczego nadal używamy JavaScript?

text: > **Możliwy duplikat:** > Dlaczego nie ma innych języków skryptowych po stronie klienta dla witryn internetowych? Wydaje mi się, że pomimo tego, że jest jednym z najczęściej używanych języków na świecie, nawet niektórzy czołowi eksperci od JavaScriptu, tacy jak Doug Crockford, uważają, że JavaScript ma dość duże wady projektowe (_JavaScript: The World's Most Misunderstood Programming Language_ ), które sprawiają, że programowanie jest mylące i niejednoznaczne. Języki programowania i narzędzia programistyczne są coraz lepsze i znacznie ułatwiają programistom tworzenie rzeczy. Co kilka lat pojawia się nowa wersja .NET, nowa wersja HTML5 z nowymi tagami, nowe wersje CSS itp. Dlaczego nie było lepszej wersji JavaScript lub innego dynamicznego języka luźno pisanego, ale bez wszystkich wad projektowych , wyjdź, aby zastąpić JavaScript?


title: Dlaczego nie ma innych języków skryptowych po stronie klienta dla stron internetowych?

text: Dlaczego w przeglądarkach dostępna jest obecnie tylko obsługa JavaScript i niektórych VBScript? Wiem, że JavaScript jest dobry iw ogóle, ale czy możliwość korzystania z innego języka programowania nie pomogłaby promować różnych stylów programowania?


title: Jakie są niezbędne biblioteki Clojure, aby dowiedzieć się poza podstawami „podstawy”

text: Uczę się Clojure. Zacząłem używać Leiningen, pracuję nad Clojure Koans, planuję zrobić LabREPL w następnej kolejności i przyjrzę się Noir. Moje pytanie brzmi: jakie są niezbędne biblioteki i funkcje Clojure, które należy znać, poza tymi, które zostały opisane w powyższym planie nauki? Patrząc na Clojure Contrib, istnieje duża liczba bibliotek. Jako profesjonalny (lub OSS) programista Clojure, którego używasz na co dzień? Które z nich nie są tak przydatne lub w inny sposób nie są powszechnie używane (tj. są ezoteryczne / nie pojawiają się często w codziennym kodowaniu).


title: Jak wprowadzić do programowania 50-letniego analfabetę komputerowego?

text: Pewnego dnia tata zadał mi pytanie, którego nigdy bym się po nim nie spodziewała. "Jak mogę nauczyć się C++?" Mój tata kończy w tym roku 56 lat, a komputery to dla niego odległa koncepcja. Nie umie dobrze posługiwać się telefonem, poza dzwonieniem na numery (bez szybkiego wybierania i kontaktów); chociaż zaczął uczyć się komputerów trochę lepiej - do tego stopnia, że wie, jak otwierać Internet (w systemie Windows) i przeglądać (i pomyślnie ukończył kilka podań o pracę całkowicie samodzielnie przez Internet, z których również zaoferowano mu stanowiska ). Ale nadal są to doświadczenia zbyt ograniczone, by naprawdę wiele znaczyć. Chociaż może nie mieć tła, mój tata umie czytać. I mam na myśli czytanie jako umiejętność, a nie tylko umiejętność. Ma niewielkie lub żadne wykształcenie wyższe (problemy finansowe, rodzina itp.) i miał szczęście ukończyć szkołę średnią, ale nadal nauczył się zostać mistrzem elektryka i jest nim od prawie 30 lat. To samo zrobił z gitarą, ucząc się grać na bardzo profesjonalnym poziomie i był chwalony za swoje umiejętności. W liceum podniósł książkę o podnoszeniu ciężarów - i był wtedy jedyną osobą w jego liceum, która oficjalnie zakwalifikowała się jako „sportowiec” według krajowych standardów. We wszystkich przypadkach po prostu potrzebował czegoś do czytania. Czegoś, żeby go nauczyć. Chłonie informacje jak gąbka. Nie mam wątpliwości co do motywacji lub zdolności mojego taty do robienia tego, więc moim ogólnym celem jest po prostu: **Wprowadzić mojego tatę w świat komputerów i wprowadzić go w drogę do programowania.** Mocno wierzę, że kiedy dostanę go przez podstawy, jego umiejętność jazdy i czytania pozwolą mu działać na własną rękę. Pytam więc wszystkich: od czego mam to wszystko zacząć? A jakie są najlepsze dostępne zasoby? Czy powinienem skłonić go do uruchomienia Linuksa zamiast Windowsa? Czy C++ to zły pomysł? Pamiętaj, że najpierw musi (IMO) nauczyć się komputerów, a następnie zdobyć pierwsze zrozumienie (doświadczenie "Witaj świecie") programowania. Ze względu na pieniądze i jak najlepsze preferencje chciałbym mieć darmowe zasoby online, które mógłby przeczytać, ale jak najbardziej mile widziane są wszelkie dobre sugestie w wersji drukowanej lub płatne online (które ewentualnie mógłbym zajrzeć później w celu zakupu). A poza tym zamierzam zacząć od C++ (bez Pythona, Javy itp.), bo znam go najlepiej i będę w stanie pomóc mu po drodze z kodem. (Mam teraz minimalną wiedzę w innych językach). Edycja: otrzymuję wiele uporczywych sugestii dotyczących używania Pythona. Jedynym powodem, dla którego chciałem robić C++ jest to, że ZNAM go i mogę być TAM, gdy mój tata potrzebuje pomocy. Moim BARDZO PIERWSZYM kontaktem z programowaniem była Java. Nauczyłem się Javy i stałem się w tym dobry. Otwieram się na inne propozycje, ale proszę o skuteczne zastosowanie swoich sugestii. EDYCJA #2: Rozumiem, że może tutaj brakować mojego podejścia / myślenia / wiedzy. Jestem studentem drugiego stopnia CS major. Jeśli nie zgadzasz się z niczym w moim poście, powiedz dlaczego - podaj mi pomysły, informacje - dlatego w pierwszej kolejności pytam. Aby zawęzić mój ogólny cel do konkretnych osiągalnych celów.


title: Python dla dużych projektów

text: Czy istnieją jakieś zasoby na temat projektowania dużych, przemysłowych projektów Pythona? Chciałbym zacząć od ambitnego osobistego projektu, ale nie jestem do końca pewien, jak go zaprojektować i jakie praktyki zastosować, aby projekt zakończył się sukcesem. Czy istnieją jakieś zasoby omawiające, jak sprawić, by duże projekty w Pythonie działały?


title: Zrozumienie teorii DIP, DI, IoC

text: Od około 2 miesięcy czytam wszystko, co mogę znaleźć na te 3 tematy i nie jestem jeszcze pewien, czy to zrozumiałem. 1. **Zasada odwrócenia zależności**. Oznacza to, że zawsze powinieneś polegać tylko na interfejsach, a nie na ich implementacjach. Jeśli twoja klasa zależy od innej klasy, to źle, ponieważ zależy to od szczegółów tej drugiej klasy. Jeśli twoja klasa zależy od interfejsu, jest to absolutnie w porządku, ponieważ ten rodzaj zależności oznacza tylko, że twoja klasa potrzebuje czegoś abstrakcyjnego, co może zrobić coś konkretnego i tak naprawdę nie obchodzi cię, jak to robi. Ponieważ P w "DIP" oznacza "zasadę", powinienem prawdopodobnie zdefiniować to w ten sposób: **Zasada odwrócenia zależności to zasada, która wymaga, aby wszystkie encje Twojego kodu były zależne tylko od szczegółów, których _naprawdę_ potrzebują**. Przez „szczegóły, których naprawdę potrzebują” rozumiem interfejsy w najprostszym przypadku. Użyłem też słowa „byty”, aby podkreślić, że DIP ma zastosowanie również do procedur i wszystkiego innego, nie tylko do klas. 2. **Wstrzykiwanie zależności**. Ma zastosowanie tylko do jednostek obsługujących DI. Jednostka z obsługą DI to jednostka, która jest "otwarta" do konfigurowania swojego zachowania bez zmiany swoich elementów wewnętrznych. Istnieją 2 podstawowe rodzaje wstrzykiwania (jeśli mowa o klasach): * Wstrzyknięcie konstruktora - polega na przekazaniu do obiektu wszystkich wymaganych "abstrakcyjnych szczegółów" w momencie, gdy ma on zostać skonstruowany. * Setter Injection - ma miejsce, gdy "wyjaśnisz" wymagane aspekty po utworzeniu obiektu. Definicja wygląda więc prawdopodobnie tak: **Wstrzykiwanie zależności to proces przekazywania „abstrakcyjnych szczegółów” encji, która _naprawdę_ ich potrzebuje**. Przez „naprawdę potrzebuje tych szczegółów” rozumiem interfejsy w najprostszym przypadku. Słowo „podmioty” jest, jak zawsze, używane do podkreślenia, że DI ma również zastosowanie do procedur i wszystkiego innego. 3. **Odwrócenie kontroli.** Często jest to definiowane jako „różnica między bibliotekami a frameworkami”, jako „pisanie programów w taki sposób, jak w przypadku programowania proceduralnego” i tak dalej. To dla mnie najbardziej zagmatwana rzecz. Uważam, że główną ideą jest tutaj inicjowanie jakichkolwiek działań. Albo robisz coś „kiedy chcesz” (sposób proceduralny), albo „czekasz”, aż ktoś cię poprosi (sposób IoC). Moja definicja to: **IoC jest właściwością przepływu wykonywania twojego programu, gdy nic nie robisz, dopóki _oni_ cię o to nie poproszą**. Brzmi dokładnie jak „Zasada Hollywoodu”, ale wierzę, że „Zasada Hollywood” i IoC to absolutnie ten sam pomysł. Czy to rozumiem?


title: Jak wymyślić wzorzec projektowy dla tego konkretnego rozwiązania?

text: Podczas pracy nad projektem wymyśliłem pewne rozwiązanie projektowe. Trudno mi odnieść to do jakiegokolwiek ogólnego wzorca projektowego lub szczegółowo przeanalizować tę sytuację. To również uniemożliwia mi znalezienie lepszego projektu do tego. To jest prosta analogia do mojego rozwiązania - zarówno `Kangur` jak i `Tiger` mogą `chodzić`, ale tylko `Kangur` może `skakać` i tylko `Tiger` może `biegać`. Zwierzę<TLeg> gdzie TLegi: ILegi { TLegi Nogi; void Spacer(){ Nogi.Spacer(); } } Kangur: Zwierzę<ISkokiNogi> { void Skocz() { Nogi.Skok(); } } Tygrys: Zwierzę<IRbiegnąceNogi> { void Run() { Nogi.Run(); } } ILegi { void Spacer(); } IrunningLegs : Ilegs { void Run(); } IJumpingLegs : Ilegs { void Jump(); } [Edytuj] Opis problemu: Tutaj Kangur i Tygrys mają wspólne funkcje i właściwość Odnóża. Dlatego mam klasę bazową dla typowych funkcji. Klasa podstawowa musi mieć dostęp do tej właściwości `Legs`. Funkcje w podklasach również opierają się na Nogach iw zależności od typu Nogi, podklasa będzie musiała wywoływać różne funkcje tej właściwości. Zasadniczo, dwa konkretne zwierzęta wymagają wspólnych metod, a ich nietypowe metody (Skok i Bieg) wymagają innego TYPU wspólnej właściwości. W przypadku tego problemu wymyśliłem rozwiązanie opisane powyżej. Mając nadzieję, że jestem w stanie opisać mój problem, chciałbym wiedzieć, czy istnieje jakieś alternatywne rozwiązanie. Czy ten problem/rozwiązanie brzmi znajomo? Czy jest coś, co można poprawić?


title: Jak duży może być kod binarny?

text: Gdzie binarny idzie w komputerze? Po włączeniu komputera wskazuje na bios i przechodzi przez niego. Rozumiem. Następnie ładuje dane z czegoś (dysk, flash itp.). Ale gdzie to idzie? Czy binarny działa w baranie? Czy to oznacza, że jeśli mój program ma 2 MB, a pamięć RAM 32 MB, mogę zaadresować tylko 30 MB? Chcę głównie wiedzieć, jak duży może być mój kosz. Jestem trochę zdezorientowany w tej kwestii. Wiem, że to specyficzna platforma. Ale ogólnie, gdzie by to poszło i ogólnie na jaki dokument bym spojrzał, aby sprawdzić te informacje?


title: Jak radzić sobie ze zmianami środowiska uruchomieniowego w lokalizacji dzierżawy w klastrowanej, wielodostępnej aplikacji sieci Web ze źródłami danych zarządzanymi przez aplikację?

text: Mam aplikację internetową Java, która obsługuje wiele dzierżawców, aby oddzielić dane klientów. Pule połączeń do każdej bazy danych klientów są tworzone w czasie wykonywania. Szczegóły każdego fragmentu klienta (adres URL jdbc, poświadczenia itp.) są przechowywane w „kontrolnej” bazie danych fragmentu. Gdy aplikacja musi uzyskać dostęp do fragmentu klienta, próbuje uzyskać połączenie JDBC z puli połączeń tego fragmentu. Jeśli ta pula połączeń nie została jeszcze ustanowiona, aplikacja wyszuka niezbędne szczegóły ze schematu kontroli i utworzy pulę. To dobra konfiguracja, ale ma jeden poważny problem, którego nie jestem pewien, jak najlepiej go rozwiązać. Ta aplikacja zostanie ostatecznie połączona w klastry z każdą instancją aplikacji zarządzającą własnymi pulami połączeń fragmentu klienta. Problem polega na tym, co zrobić, gdy zmieni się lokalizacja fragmentu klienta. To nie zdarza się często, ale się zdarza. Aplikacja ma interfejs administratora do zarządzania szczegółami fragmentu i mógłbym tam umieścić funkcję, która mówi „odbuduj pulę połączeń tego fragmentu”, ale będziesz komunikować się tylko z dowolną instancją aplikacji, do której wysłał Cię load balancer na to żądanie i wszystkie inne instancje nie będą wiedziały, że chcesz odbudować pulę. Oto sposoby radzenia sobie z tym, wraz z zaletami i wadami, jak je widzę. ### 1) Ponieważ ten scenariusz nie jest częstym zjawiskiem, po prostu wymuś ponowne uruchomienie wszystkich instancji klastra aplikacji, gdy taka sytuacja się pojawi i zadzwoń do tego dnia. PLUSY: Nie wymaga dalszej pracy. MINUSY: To bardziej obejście niż rozwiązanie. To powiedziawszy, ponowne uruchomienie wszystkich wystąpień aplikacji w klastrze może nie być łatwe, jak naciśnięcie przycisku, a następnie przerwa na kawę. Ponadto użytkownik aplikacji z uprawnieniami do zarządzania odłamkami klientów może nie być osobą, która może inicjować ponowne uruchomienie klastra. ### 2) Przed zwolnieniem połączenia z puli połączeń, sprawdź kontrolną bazę danych, aby zobaczyć, czy definicja puli została zmieniona, a jeśli tak, skonfiguruj ponownie pulę przed zwolnieniem połączenia komukolwiek, kto o to poprosił. PLUSY: Najprostsze podejście. Wystąpienia aplikacji gwarantują uzyskanie połączenia z właściwym fragmentem przy użyciu najświeższych informacji. MINUSY: Poważne koszty ogólne wydajności. Musisz przejść do schematu kontroli i przeczytać wszystkie definicje fragmentów, a następnie porównać je z tym, co aktualnie załadowano dla każdego żądania połączenia w aplikacji. ### 3) Miej wątek w tle na zegarze, który szuka zmian definicji fragmentów i przebudowuje pule, gdy jest to konieczne. PLUSY: Unikasz spadku wydajności związanego z sprawdzaniem przy każdym żądaniu połączenia. MINUSY: Po zmianie definicji fragmentu nastąpi okres czasu, w którym każda instancja aplikacji będzie miała nieprawidłowe informacje. Może to mieć wiele konsekwencji, w tym wyjątki aplikacji, dopóki nie zostanie wybrana zmiana definicji fragmentu. Im dłuższy interwał sprawdzania, tym gorszy będzie ten problem, więc chciałbyś, aby był jak najkrótszy, ale im krótszy, tym większa wydajność, ponieważ musisz załadować definicje fragmentów z kontrolnej bazy danych . ### 4) Poczekaj na zgłoszenie wyjątku podczas próby uzyskania połączenia z puli połączeń fragmentu, a następnie skorzystaj z okazji, aby przejść do schematu kontrolnego i sprawdzić, czy definicja fragmentu uległa zmianie. PLUSY: Żaden z problemów z wydajnością opcji 2 i 3 MINUSY: Założono, że zmieniasz definicję fragmentu, ponieważ stara lokalizacja już nie działa, co może nie być prawdą. Myślę, że samo to jest wystarczającym powodem, aby zabić tę opcję, ale wymieniam ją tutaj, ponieważ przyszło mi to do głowy. ### 5) Utwórz temat „zmiana definicji fragmentu” w infrastrukturze przesyłania wiadomości, do której będą subskrybowane wszystkie instancje aplikacji, i przeładuj pule połączeń w odpowiedzi na nie. PLUSY: Żaden z problemów z wydajnością opcji 2 i 3. Żaden z problemów z przestarzałymi danymi opcji 3. MINUSY: Nie mam dzisiaj dostępnej infrastruktury przesyłania wiadomości. Nadchodzi, ale nie mogę jeszcze umówić się na randkę. Byłbym wdzięczny za wszelkie przemyślenia/doświadczenia/rady, którymi możesz się podzielić z tym problemem.


title: Analiza bazy kodów trendów w czasie

text: Rozejrzałem się w poszukiwaniu rozwiązania (najlepiej nie hostowanego, coś, co mogę uruchomić lokalnie), aby przeprowadzić statyczną analizę bazy kodu w czasie dla takich rzeczy jak SLOC, złożoność, autorzy, zatwierdzenia itp. Musi działać z subversion, a ja trzeba mieć jakiś sposób na uzyskanie tych „surowych danych” w csv. Docelowo chcę napisać małą aplikację R na podstawie wyników, aby wyświetlić interesujące wykresy i zrobić coś z wynikającymi z nich danymi (jak nakładanie zatwierdzeń lub SLOC w stosunku do terminów lub tagów/wydań). Czy ktoś wie, czy istnieją rozwiązania typu open source, które to robią? Myślę, że tak naprawdę wszystko, czego chcemy, to sposób na wyodrębnienie informacji o subversion dla zatwierdzeń i statyczną analizę kodu dla tego danego zatwierdzenia oraz możliwość agregacji tego wszystkiego i wyeksportowania jako .csv (dla importu do R). **Myślę**, że sonar robi część z tego, ale nie sądzę, aby wykonał tego rodzaju analizę lub przechwytywanie danych w historii bazy kodu (tj. Patrząc na dywersję od pierwszego dnia i przechwytywanie zatwierdzeń dziennie, SLOC, złożoność z czasem itp.). Analiza statyczna, którą będę musiał wykonać, jest oparta na Javie i JavaScript.


title: PHP: plik konfiguracyjny w formacie .ini lub .php?

text: Pracuję na ogromnym systemie CMS i zadałem sobie pytanie, jakiego formatu konfiguracji powinienem użyć. Istnieją dwa popularne formaty plików konfiguracyjnych. Pierwszym z nich jest plik INI, zawierający wszystkie właściwości konfiguracyjne. Następnie możesz po prostu przeanalizować ten plik INI za pomocą funkcji wbudowanych w PHP. Drugą opcją jest użycie pliku PHP zawierającego zwykłą tablicę PHP z tymi właściwościami konfiguracyjnymi. Teraz łatwiej jest edytować plik INI, ale plik PHP daje więcej opcji, na przykład pozwala na dodanie funkcji, która pobiera jedną z opcji konfiguracyjnych podczas czytania pliku konfiguracyjnego. Uwaga: Plik konfiguracyjny PHP zawierałby tylko tablicę konfiguracji, żadnych funkcji inicjujących lub czegokolwiek. (Oczywiście jest to możliwe, ale nie jest domyślnie zaimplementowane) A teraz, co jest zalecane jako plik konfiguracyjny? Jaki jest najpopularniejszy format pliku konfiguracyjnego? Czy powinienem dążyć do uproszczenia z plikami INI, czy do bardziej dynamicznego przy użyciu PHP. Należy zauważyć, że nie jest to do użytku osobistego. Planuję wkrótce wydać system CMS, a wiele stron internetowych ma już przejść na mój system CMS.


title: Uogólnienie Javy

text: Mam pytanie dotyczące uogólnienia. Wiem, kiedy trzeba to zrobić, ale czy warto mieć dodatkowe zajęcia na 1 pole? np.: `StatisticsCustomer` ma pola: `Customer customer` i `int projectCount` `StatisticsCountry` ma pola: `Country country` i `int projectCount` Co jest najlepsze w tej sytuacji? Tworzenie dodatkowej klasy tylko dla projectCount czy trzymanie jej dwa razy w dwóch klasach?


title: Dlaczego ludzie rozdzielają repozytoria na GitHub?

text: Zauważyłem, że wiele kont GitHub ma tylko repozytoria, które są forkowane z innych kont. Ponadto osoby, które to robią, zwykle nie wnoszą żadnego wkładu do rozwidlonych repozytoriów. Słyszałem o ludziach zbierających znaczki i muszle, ale po co ktoś miałby chcieć zbierać repozytoria? Osobiście rozwidlałbym repozytorium tylko wtedy, gdybym chciał wprowadzić w nim jakieś zmiany.


title: Co należy zrobić z nazwami klas, które kolidują z (częstymi) nazwami frameworków?

text: Co należy zrobić, gdy najbardziej oczywista nazwa klasy dla komponentu jest przyjęta przez framework? W moim przypadku muszę stworzyć klasę opisującą żądanie HTTP. Oczywiście najczęstszą nazwą jest „przyjmowana” jako System.Web.HttpRequest. Co powinienem zrobić? Ten projekt będzie używany w kontekście sieciowym, więc naprawdę wolałbym nie zmuszać ludzi do nie importowania przestrzeni nazw System.Web lub ręcznego wpisywania wszystkich nazw moich klas. Jaki jest zwykle sposób radzenia sobie z tym? Mogę wymyślić to: * Poprzedź nazwę klasy skróconą nazwą projektu * Spróbuj wymyślić inną nazwę, która oznacza to samo (próbowałem i nie mogę nic wymyślić) * Zmuś użytkowników do wyboru między przestrzeniami nazw


title: Czy powinniśmy trzymać się ram?

text: Obecnie pracuję z Zend Framework, ale wiem też o CodeIgniter i Kohana. Zastanawiam się tylko, czy powinienem trzymać się frameworka, czy zależeć od moich celów? Bo myślę, że nie potrafię wszystkiego opanować.


title: Architektura wielowarstwowa z wykorzystaniem API

text: Czytałem wiele postów i skłaniam się ku zbudowaniu SOA. Moje główne zależności to: * Potrzeba obsługi wielu klientów * Potrzebuję indywidualnych środowisk klienckich, aby nie wpływały na inne środowiska klienckie Na przykład, jeśli chcę dodać pole tekstowe do aplikacji Klienta A, ale nie chcę, aby Klient B miał wpływ na w każdym razie. Rozwiązaniem, które mam, jest przesłanie adresu API wraz z tokenem uwierzytelniania klienta. Na przykład klient wyśle coś takiego: api: http://myWebsite/api/clients/ClientA/someServiceCall Podobnie, z tokena, kontroler (MVC) będzie wiedział, który widok renderować dla danego użytkownika. Moje pytanie brzmi, czy to dobre rozwiązanie mojego problemu? Rozumiem, że muszę wywołać usługę HTTP REST, aby uzyskać dostęp do moich danych; ale czuję, że to rozwiązuje wiele problemów. Na przykład mogłem zobaczyć, które usługi wysyłają błędy 404 i naprawić je (prawdopodobnie), zanim zostaną zgłoszone. Przeczytałem szereg artykułów, które wydają się wymuszać mój pomysł. Czy źle zrozumiałem tę koncepcję? Czy istnieje lepsze podejście architektoniczne? Oto co czytałem: * Dogfooding: jak zbudować świetne API * Czy strona internetowa powinna używać własnego publicznego API? * Stevey's Google Platforms Rant Again, celem jest zachowanie jak największej separacji poszczególnych środowisk klienckich; tak, że jeśli wypchniemy zmianę do warstwy usług, nie będzie przestoju i nikt nie zostanie wylogowany z powodu odświeżenia puli aplikacji. Mój ogólny plan polega na włączeniu tych wywołań API wszędzie tam, gdzie są potrzebne; np. w kontrolerze MVC lub wywołaniu javascript AJAX. Na przykład: public class HomeController : Controller { public ActionResult Index() { WebClient client = new WebClient(); string api = /* api z tokena uwierzytelniania */ Wynik użytkownika = JsonConvert.DeserializeObject<User>(client.DownloadString(api)); powrót Widok(wynik); } }


title: Jak zoptymalizować następujący algorytm?

text: Obecnie pracuję nad grą w kółko i krzyżyk. Znalazłem przyzwoity algorytm, który pozwala komputerowi łatwo budować i zdobywać miejsca zwycięstwa. Problem polega jednak na tym, że gdy przeciwnik jest niebezpiecznie bliski zwycięstwa, komputer kontynuuje budowę w kierunku własnego zwycięstwa, zamiast blokować przeciwników. Czy jest jakiś sposób, aby zoptymalizować poniższy algorytm, aby temu przeciwdziałać? Algorytm działa w następujący sposób: 1. Zainicjuj tablicę liczb całkowitych 3x3 2. Zapętl wszystkie możliwe kombinacje na tablicy (0|0, 1|1, 0|2... itd.). 1. Jeśli kombinacja jest natychmiastowym zwycięstwem, zatrzymaj się i odwróć tę pozycję. 2. W przeciwnym razie zainicjuj pętlę (która zapętla się 1000, 10000 lub 100000 razy, w zależności od trudności) 1. Ciągle poruszaj się losowo z obu stron, aż do zwycięstwa. Jeśli zwycięstwo ma komputer, zwiększ licznik punktów. 3. Wybierz pozycję na planszy z najwyższym wynikiem Ten algorytm działa dobrze i może budować w kierunku zwycięstwa (przykład: ·|x|o ·|x|o ·|x|o ·|·|· x|·|o x|x| o ·|·|· ·|·|· ·|·|o Jednak w konfrontacji z tablicą w ten sposób ·|x|o o|x|· ·|·|· Optymalnym ruchem powinno być zerwanie łańcucha x, ale komputer buduje w kierunku podniesienia własnego łańcucha, tj. poruszania się o 1|2 (Płytka jest 3x3, indeksy zaczynają się od zera. Więc to byłaby trzecia kolumna w drugim wierszu).Czy jest jakiś sposób na zoptymalizowanie tego algorytmu, aby ta słabość zniknęła ?


title: Czy złą praktyką jest używanie pustego węzła z atrybutem value w XML?

text: Stworzyłem logikę parsowania XML, która wymusza formatowanie XML w następujący sposób: <fooList> <fooObject value="SomeValue1" /> <fooObject value="SomeValue2" /> </fooList> A potem zacząłem myśleć, że jest to bardziej elegancki sposób byłoby <fooList> <fooObject>JakaśWartość1</fooObject> <fooObject>JakaśWartość2</fooObject> </fooList> Czy są jakieś zalecenia lub dobre praktyki w tym zakresie? Wiem już o pytaniu Element vs. Attribute, proszę zauważyć, że moje jest inne.


title: Czym są Web CMS i jak działają?

text: Słyszałem o wielu CMS-ach, takich jak Drupal, Wordpress, Joomla itp. Wiele witryn jest zbudowanych przy użyciu tych CMS-ów, ale czym jest CMS i jak działają (tj. podstawy)? Czy CMS to normalna witryna typu Blog, która ma wiele rozszerzonych funkcji, czy możemy na niej zrobić więcej?


title: Tworzenie wirtualnego superkomputera z rozproszonym przetwarzaniem P2P

text: Miałem ten pomysł tylko raz i zastanawiałem się, czy jest jakaś możliwość wykorzystania mocy rozproszonego przetwarzania p2p do stworzenia wirtualnego superkomputera z następującymi funkcjami: * Działa jak normalna maszyna, ale używa pamięci RAM w sieci * Normalne aplikacje powinny być w stanie pracować rozproszone środowisko dzielące obciążenie między rówieśników To może być nierealne, po prostu ciekawe i chcę poznać twoje poglądy.. EDIT: Kilka interesujących linków, które znalazłem podczas badania ... * http://mashable.com/2005/11/29/my-latest -harebrained-scheme-distributed-computing-as-a-web-service/ * http://mashable.com/2005/11/04/amazon-mechanical-turk-human-processing-for-web-20/


title: Dlaczego zmienne potrzebują typu?

text: Piszemy więc: Klient c = nowy Klient(); Dlaczego projekt nie jest taki, jak piszemy: c = new Customer(); c.Limit kredytu = 1000; Kompilator może wypracować punkty c dla Klienta i zezwolić na wywoływanie członków Klienta na c? Wiem, że możemy chcieć napisać: IPerson c = new Customer(); IPosoba e = nowy Pracownik(); aby móc napisać: public string GetName(IPerson object) { return object.Name } string name = GetName(c); // lub GetName(e); Ale gdybyśmy napisali: c = new Customer(); e = nowy Pracownik(); nadal moglibyśmy napisać: public string GetName(object) { return object.Name } string name = GetName(c); // lub GetName(e); Kompilator może narzekać na kod bezpośrednio powyżej, jeśli typ odwołania do obiektu c nie obsługuje właściwości Name (ponieważ może sprawdzić, które elementy członkowskie są używane w argumencie/parametrze w ramach metody) lub środowisko uruchomieniowe może narzekać. Nawet w przypadku dynamicznego słowa kluczowego C# nadal używamy zmiennej „type” (określonej w czasie wykonywania). Ale dlaczego zmienna w ogóle potrzebuje typu? Jestem pewien, że musi być dobry powód, ale nie potrafię o tym myśleć!


title: użycie podwójnych wskaźników i n wskaźników?

text: Znam podstawowe wskaźniki C. Chciałem tylko zapytać, jakie jest faktyczne użycie podwójnych wskaźników lub o to chodzi n wskaźnik? #include<stdio.h> int main() { int n = 10 , *ptr , **ptr_ptr ; ptr = &n; ptr_ptr = &ptr; printf("%d",**ptr_ptr); powrót(0); } **ptr_ptr drukuje 10, ale jak?


title: Klasa rodzica traci połączenie po refaktoryzacji identycznych bloków kodu z klas potomnych do rodzica

text: Mam klasę o nazwie „Parent” i klasy o nazwie „Child1”, „Child2” itp. Zauważyłem, że klasy potomne mają serię wywołań funkcji, które mają te same (zduplikowane) wiersze kodu, które można przerobić na funkcję połączenie. Stworzyłem więc metodę `getData()`, którą umieściłem w klasie nadrzędnej i umieściłem te zduplikowane wiersze kodu w metodzie oraz usunąłem oryginalne wiersze z klas potomnych. Wydarzyły się dwie rzeczy: * Dynamiczna natura PHP pozwala klasom potomnym wywoływać metodę z klasy nadrzędnej, więc wszystko nadal działa, mimo że dzieci nie mają (ale wywołują) tę konkretną funkcję. **To dobrze** * Moje IDE nie może już przeskakiwać z instancji funkcji wewnątrz klasy nadrzędnej do treści funkcji w klasach potomnych. Ponieważ nie wie, który wybrać, ani nie istnieje w klasie nadrzędnej. **To trochę złe** \- przynajmniej tak mi się wydaje. Tracę zdolność IDE/PHP do informowania mnie o błędach. tj. wygląda na to, że mogę wymyślić dowolną funkcję w klasie nadrzędnej, a PHP po prostu pomyśli "och, może to jest w klasie potomnej", podczas gdy w rzeczywistości może nie być - fakt, który zostanie odkryty tylko w czasie wykonywania, lub przy użyciu specjalnych narzędzi do statycznego kodu źródłowego w PHP. Czy istnieje bardziej odpowiedni sposób na refaktoryzację mojego kodu? Mianowicie, aby mieć IDE/PHP, aby móc walidować rzeczy nieco lepiej niż to, co mam teraz.


title: Znajomość zakresu potrzebnych typów zmiennych

text: Tak więc, jeśli ja (jako programista) wiem, że moja wartość nigdy nie przekroczy małej liczby (powiedzmy 100), ponieważ tak naprawdę jest to tylko pętla kontrolowana przez licznik lub cokolwiek, czy mogę użyć `short` lub `char` zamiast `int ` dla oszczędności pamięci minutowej?


title: "TDD dotyczy projektowania, a nie weryfikacji"; konkretnie, co to znaczy?

text: Zastanawiałem się nad tym. Co dokładnie rozumiemy przez projektowanie i weryfikację. Czy powinienem po prostu zastosować TDD, aby upewnić się, że mój kod jest SOLID, a nie sprawdzać, czy jego zewnętrzne zachowanie jest poprawne? Czy powinienem używać BDD do sprawdzenia, czy zachowanie jest prawidłowe? To, co mnie myli, dotyczy również kata kodu TDD, dla mnie wyglądały bardziej na weryfikację niż projekt; czy nie powinno się ich nazywać BDD Kata zamiast TDD Kata? Uważam, że na przykład Kata bowlingowa wujka Boba prowadzi w końcu do prostego i ładnego projektu wewnętrznego, ale czułem, że większość procesu była skupiona bardziej na weryfikacji niż na projektowaniu. Design wydawał się być efektem ubocznym stopniowego testowania zewnętrznego zachowania. Nie czułem tak bardzo, że skupiamy większość naszych wysiłków na projektowaniu, ale bardziej na weryfikacji. Podczas gdy zwykle mówi się nam odwrotnie, że w TDD weryfikacja jest efektem ubocznym, głównym celem jest projektowanie. Więc moje pytanie brzmi, na czym powinienem się skupić, kiedy robię TDD: SOLID, użyteczność zewnętrznego API, czy coś innego? A jak mogę to zrobić, nie skupiając się na weryfikacji? Na czym skupiacie swoją energię, kiedy ćwiczycie TDD?


title: Jaki proces osobisty mogę zastosować w firmie, która nie korzysta z oprogramowania?

text: Jaki jest najlepszy sposób, w jaki programista może śledzić swoje godziny pracy, jeśli w tej firmie nie ma ram, które pozwoliłyby uniknąć komplikacji związanych z przechowywaniem wewnętrznych tajnych informacji na serwerze, który posiadam w domu? W szczególności chciałbym usłyszeć o wszelkich metodologiach lub oprogramowaniu, które można wykorzystać w tej sytuacji z ograniczonym problemem. Właśnie skończyłem studia i przenoszę się do mojej pierwszej pełnoetatowej pracy w firmie zajmującej się systemami wbudowanymi, która wydaje się, że nie ma żadnego określonego procesu, z którego mogliby korzystać pracownicy. Od zeszłego lata pracuję nad ulepszeniem procesu rozwoju, próbując rejestrować wykorzystanie czasu, znalezione błędy i inne proste metryki dla mojego procesu. Do tej pory używałem Microsoft Team Foundation Server (TFS), aby to robić z jednego z moich osobistych serwerów i praca z nim sprawiała mi przyjemność. Firma, do której się wybieram, nie wydaje się jednak mieć nic podobnego, więc utknąłem w potrzebie znalezienia sposobu na dalsze śledzenie tych wskaźników. Czuję, że nie powinienem używać mojego serwera TFS (lub podobnej taktyki, takiej jak Traq), ponieważ istnieje szansa na ujawnienie tajemnic firmy światu zewnętrznemu za pośrednictwem mojego serwera.


title: W którym momencie „konstruktywna” krytyka Twojego kodu staje się nieprzydatna?

text: Niedawno zacząłem jako młodszy programista. Poza tym, że jestem jedną z najmniej doświadczonych osób w zespole, jestem również kobietą, która stawia czoła różnym wyzwaniom, pracując w środowisku zdominowanym przez mężczyzn. Ostatnio mam problemy, ponieważ czuję, że dostaję zbyt dużo nieuzasadnionej pedantycznej krytyki mojej pracy. Podam przykład tego, co wydarzyło się ostatnio. Lider zespołu był zbyt zajęty, by wciskać niektóre gałęzie, które stworzyłem, więc dotarł do nich dopiero w weekend. Sprawdziłem pocztę, nie mając zamiaru wykonywać żadnej pracy, i stwierdziłem, że moje dwie gałęzie zostały odrzucone na podstawie nazw zmiennych, dzięki czemu komunikaty o błędach są bardziej opisowe i przeniosłem niektóre wartości do pliku konfiguracyjnego. Nie wydaje mi się, żeby odrzucanie mojej gałęzi na tej podstawie było użyteczne. Wiele osób pracowało w weekend, a ja nigdy nie powiedziałem, że będę pracował. W efekcie niektóre osoby zostały prawdopodobnie zablokowane, ponieważ nie miałem czasu na wprowadzenie zmian i ponowne przesłanie. Pracujemy nad projektem, który jest bardzo czasochłonny i wydaje mi się, że odrzucanie kodu na podstawie rzeczy, które są przejrzyste dla klienta, nie jest pomocne. Może się mylę, ale wygląda na to, że tego rodzaju rzeczy powinny być obsługiwane w zatwierdzeniach typu łata, kiedy mam czas. Teraz widzę, że w niektórych środowiskach byłoby to normą. Jednak krytyka nie wydaje się równomiernie rozłożona, co prowadzi do mojego kolejnego problemu. Podstawą większości tych problemów był fakt, że byłem w kodzie, który napisał ktoś inny i starałem się być minimalnie inwazyjny. Naśladowałem nazwy zmiennych używane w innym miejscu pliku. Kiedy to powiedziałem, dosadnie powiedziano mi: „Nie naśladuj innych, po prostu rób to, co słuszne”. To chyba najmniej przydatna rzecz, o której mógłbym powiedzieć. Jeśli kod, który jest już zaewidencjonowany, jest nie do przyjęcia, jak mam stwierdzić, co jest dobre, a co złe? Jeśli podstawą zamieszania był kod bazowy, nie sądzę, że moim obowiązkiem jest spędzanie godzin na refaktoryzacji całego pliku, który napisał ktoś inny (i działa doskonale), potencjalnie wprowadzając nowe błędy itp. Czuję się naprawdę wyróżniony i sfrustrowany w tej sytuacji. Znacznie poprawiłem się w przestrzeganiu oczekiwanych standardów i czuję się sfrustrowany, że na przykład, gdy refaktoryzuję fragment kodu w celu sprawdzenia błędów ADD, którego wcześniej brakowało, dowiaduję się tylko, że tego nie zrobiłem zrób wystarczająco dużo błędów (i na tej podstawie gałąź została odrzucona). A gdybym nigdy go nie dodała na początku? Jak to się znalazło w kodzie, skoro było tak źle? Dlatego czuję się tak wyróżniony: ciągle natrafiam na ten problematyczny kod, który albo naśladuję, albo refaktoruję. Kiedy to naśladuję, jest to „niewłaściwe”, a jeśli to zmienię, jestem karany za to, że nie robię wystarczająco dużo (a jeśli pójdę na całość, wprowadzając błędy itp.). Ponownie, jeśli to jest taki problem, nie rozumiem, w jaki sposób jakikolwiek kod dostaje się do bazy kodu i dlaczego staje się to moją odpowiedzialnością, gdy został napisany przez kogoś innego, kto najwyraźniej nie przejrzał swojego kodu. Zresztą, jak sobie z tym poradzić? Proszę pamiętać, że powiedziałem na górze, że jestem kobietą i jestem pewien, że ci faceci zwykle nie muszą się martwić o przyzwoitość, gdy recenzują kod innych facetów, ale szczerze to nie działa dla mnie i to powoduje, że jestem mniej produktywny. Martwię się, że jeśli porozmawiam o tym z moim przełożonym, pomyśli, że nie poradzę sobie ze środowiskiem itp.


title: Który certyfikat jest najlepszy dla PHP?

text: Jakie są najlepsze certyfikaty PHP zgodnie z wymaganiami rynku? Właściwie chcę uzyskać certyfikat PHP, na który jest największe zapotrzebowanie. Chcę również dowiedzieć się więcej o przyszłości PHP: * Kiedy zostanie wydane PHP 6? * Czy możesz mi powiedzieć coś o dostępności egzaminu PHP 6?


title: Zatrudnić do pracy/projektu czy zatrudnić na przyszłość?

text: Jestem w punkcie zwrotnym w mojej małej firmie programistycznej, w której osiągnąłem masę krytyczną zbyt dużej ilości pracy i muszę kogoś zatrudnić. Proste pytanie: Czy zatrudniam kogoś, kto jest po prostu wykwalifikowany i może wykonywać pracę i być może rozwijać się wraz z firmą, czy też zatrudniam kogoś o zbyt wysokich kwalifikacjach do bezpośredniej pracy, którą mam do zaoferowania, ale który może znacznie pogłębić wiedzę i doświadczenie mojej firmy ?


title: Dlaczego Prolog jest dobry do programowania AI?

text: Zajmuję się badaniem języków programowania używanych do programowania AI. Wiem, że LISP jest nauczany jako język programowania AI na mojej uczelni, ale Prolog rzadko tak jest. Trochę lubię Prolog, ale nie jestem programistą AI, więc nie wydaje mi się, żebym mógł sam osądzać, dlaczego Prolog jest lepszy niż LISP/Scheme. Zastanawiałem się, czy programiści mieli jakiś wkład na ten temat. Jak możesz argumentować, że Prolog byłby bardziej przydatny do programowania AI? Trochę to badałem, a podstawowym argumentem, który widziałem w kółko, jest to, że skoro myśli są przedstawiane w logice, a Prolog jest logicznym językiem programowania, Prolog może łatwo budować maszyny decyzyjne lub coś w tym stylu. Czy jest coś jeszcze, co można powiedzieć o Prologu w AI?


title: Który framework/język po stronie serwera powinienem użyć

text: Jestem programistą iOS. Uwielbiam cel-c i ramy kakao/kakao-touch. Zastanawiałem się, co to jest język programowania / framework do programowania po stronie serwera, który najlepiej naśladuje lub bardzo przypomina Object-C i framework kakao? Nigdy wcześniej nie programowałem aplikacji po stronie serwera, dlatego pytam. Oto lista języków/struktur, o których słyszałem, a które mogą być zbliżone do kakao. Ruby - Ruby on Rails PHP - nie jestem pewien, który fw Python - dzięki Djano


title: proste wiązanie let vs funkcja stała

text: Rozumiem powody, dla których wolałbym `let a = f(x)` nad `let a() = f(x)`, zwłaszcza gdy f take jest długo działającą funkcją. Myślę również, że słuszne jest stwierdzenie, że biorąc pod uwagę początki programowania funkcyjnego w rachunku lambda, `let a()` jest naprawdę funkcjonalne, podczas gdy `let a` nie jest. Proszę mnie poprawić, jeśli się mylę. Nie mam jednak pojęcia, które wyrażenie będzie lepsze: let a = 4 lub let a() = 4 Czy jest jakiś powód, dla którego wolę jedno od drugiego?


title: Jakie są różnice między wymaganiami funkcjonalnymi, operacyjnymi i technicznymi?

text: Wykonywałem zadania w oparciu o Javę, ale moi seniorzy zlecili mi zebranie wymagań do stworzenia zglobalizowanego narzędzia do śledzenia błędów. Przeczytałem wiele rodzajów wymagań z Wikipedii i strony mindtools, ale było to bardzo zagmatwane. Jakie są dokładne różnice między wymaganiami funkcjonalnymi, wymaganiami operacyjnymi i wymaganiami technicznymi?


title: Projekt REST API dla skojarzeń/agregacji

text: Buduję RESTful API do zarządzania osobami i listami. Może być wiele „List” i wiele „Osob”, każdy z własnym zestawem właściwości. „Osoba” może znajdować się na zero lub więcej listach, „Lista” może zawierać zero lub więcej osób. Zaimplementowałem te operacje dla osób i list: * `GET api/Persons/` aby pobrać wszystkie osoby * `POST api/Persons/ {..}` aby utworzyć nową osobę * `PUT api/Persons/123 {..} ` aby zaktualizować osobę według id * `DELETE api/Persons/123` aby usunąć osobę według id Aby pobrać listy, na które osoba znajduje się użyłbym `GET /api/Persons/123/Lists`, aby pobrać wszystkie osoby z listy, których użyłbym `GET /api/Lists/234/Persons`. Jak zaprojektować API, aby dodać osobę do list, usunąć ją z list? Myślałem o spłaszczeniu `Person`, aby uwzględnić `Listy`, ale wtedy pojawią się inne skojarzenia z `Person` i wydaje się, że nie trzeba przesyłać tej papki informacji. Używam asp.net Web API 2, ale ogólnie pytam, jakie są zasady projektowania w tym przypadku.


title: Oddzielne metody czy pojedyncza metoda z instrukcją if?

text: Pracuję nad aplikacją .NET i zastanawiam się, czy należy używać oddzielnych metod do obsługi zdarzeń kliknięcia dwóch różnych przycisków. Zasadniczo robią to samo, tylko na różnych obiektach w formularzu, w tym przypadku na dwóch oddzielnych mapach. Ta sama metoda: Private Sub SingleButtonHandler(nadawca jako obiekt, e jako EventArgs) Obsługuje btnToggleSatNew.Click, btnToggleSatOld.Click Jeśli nadawca jest btnToggleSatNew Następnie Me.NewMap.ToggleSateliteView() Inne Me.OldMap.ToggleSateliteView() End: Jeśli End Sub Private Sub btnToggleSatOld_Click(nadawca jako obiekt, e jako EventArgs) Obsługuje btnToggleSatOld.Click Me.OldMap.ToggleSateliteView() End Sub Private Sub btnToggleSatNew_Click(nadawca jako obiekt, e jako EventArgs) Obsługuje btnToggleSatNew.Click Me. Jaki jest koszt sprawdzania, czy te dwa obiekty są takie same? Czy jedna wersja jest łatwiejsza do odczytania niż druga? A może powinienem robić coś zupełnie innego?


title: Zdobywanie doświadczenia z asp.net

text: Cześć Niedawno nauczyłem się formularzy internetowych asp.net i chciałem zdobyć trochę doświadczenia w ich używaniu. Znalazłem stronę internetową, która zawierała kilka ćwiczeń tutaj: ćwiczenia asp.net Nie było ich zbyt wiele i udało mi się je wszystkie ukończyć. jakakolwiek inna strona internetowa lub książki z podobnymi ćwiczeniami lub zadaniami, które mogłyby mi pomóc zdobyć trochę doświadczenia w korzystaniu z asp.net?


title: Python GUI i MVC - pobierz zmienną z innego modułu

text: Staram się podzielić mój kod na różne warstwy: GUI, czytanie GUI, tworzenie danych wejściowych, obliczanie modelu, interpretowanie danych, tworzenie widoku, wysyłanie widoku do GUI. Ktoś powiedział mi o MVC i chciałbym w ten sposób spróbować zbudować swój program. Ale jestem trochę zdezorientowany, jak wymieniać informacje między tymi modułami. Mam problemy z niezdefiniowanymi nazwami globalnymi i tak dalej. Mój model jest napisany w Matlabie i składa się z symulacji. GUI ma przedstawiać dane na wykresach. Mój aktualny problem to: jak połączyć ze sobą różne moduły/klasy/pliki, jeśli mają być jak najbardziej niezależne? Na przykład: tworzę GUI w jednym pliku, tak: # userinterface.py class Userinterface(object): def __init__(self, controller): self.controller = kontroler self.buildGUI() return def buildGUI(): # buduj wiele widżetów i rzeczy widget = tk.Thewidget(options=values, command=self.controller.onclick) I nazwij to moim interfejsem. Aby ten plik był ładny i czysty, chciałbym zdefiniować wszystkie funkcje do obsługi kliknięć przycisków i odczytywania pól w innym pliku i myślę, że tak nazwałbyś część kontrolera: # main.py import userinterface jako gui class Controls (object): def onclick(self): # odczytuje wartości z widżetów i robi różne rzeczy var1 = GUI.widget_entry.get() # Wywołaj inną funkcję za pomocą var1 itd. if __name__ == '__main__': GUI_controls = Controls() GUI = gui.UserInterface(GUI_controls) Ale jak mam połączyć te dwa? W powyższym przykładzie przekazuję instancję mojego obiektu Controls. Ale potem czytałem też o Zdarzeniach, Dziedziczeniu lub podklasach. Jestem raczej nowy w programowaniu i zacząłem to wszystko 2 miesiące temu, więc zmagam się z sortowaniem wszystkich tych teorii. Jeśli ktoś mógłby mi wskazać, jaki powinien być sposób komunikacji między moimi modułami/plikami i jak wygląda takie spotkanie. Lub po prostu daj mi link, który mogę studiować (tak jak Javier, chociaż będę musiał to przeczytać więcej niż raz)


title: Jaki jest wzorzec oprogramowania pośredniczącego?

text: Oto projekt Ruby, który implementuje wzorzec oprogramowania pośredniczącego. Z opisu nie mam pojęcia, co to za wzór, do czego się przydaje i dlaczego inne rozwiązania też by się nie sprawdziły. Jaki jest wzorzec oprogramowania pośredniczącego i jakie są jego zalety i wady?


title: Ukryć czy pokazać singletona?

text: Singleton to wspólny wzorzec zaimplementowany w obu natywnych bibliotekach .NET i Java. Zobaczysz to jako takie: C#: `MyClass.Instance` Java: `MyClass.getInstance()` Pytanie brzmi: **przy pisaniu API, czy lepiej eksponować singletona poprzez właściwość lub getter, czy powinienem ukryć jak najwięcej?** Oto alternatywy dla celów ilustracyjnych: Exposed(C#): private static instancja MyClass; public static Instancja MyClass { get { if (instance == null) instance = new MyClass (); zwracać instancję; } } public void PerformOperation() { ... } Ukryty (C#): prywatne statyczne wystąpienie MyClass; public static void PerformOperation() { if (instance == null) { instance = new MyClass(); } ... } **EDYTUJ:** Wydaje się, że istnieje wiele przeciwników projektu Singleton. Świetny! Proszę powiedz mi dlaczego i jaka jest lepsza alternatywa. Oto mój scenariusz: Cała moja aplikacja korzysta z jednego rejestratora (log4net/log4j). Ilekroć program ma coś do zalogowania, używa klasy `Logger` (np. `Logger.Instance.Warn(...)` lub `Logger.Instance.Error(...)` itd. Czy powinienem używać `Logger Zamiast tego .Warn(...)` lub `Logger.Warn(...)`? Jeśli masz alternatywę dla singletonów, która rozwiązuje moje obawy, to proszę napisz na nią odpowiedź. Dziękuję :)


title: Jak często należy aktualizować aplikację do nowej wersji?

text: Stworzyłem własną aplikację na iPhone'a, która jest obecnie w App Store. Jaki jest maksymalny okres, który powinien upłynąć bez aktualizacji nowej wersji? Jaki jest średni czas między wydaniami wersji? Pytam o to, ponieważ chcę mieć pewność, że sprawiam wrażenie, że moja aplikacja nie jest zaniedbywana. Obecnie pracuję nad aktualizacją, ale ponieważ jest to jeden człowiek, może to trochę potrwać.


title: Algorytm wyszukiwania obrazów w obrazach

text: Nie mogę wygooglować tego pytania, bo nie potrafię wymyślić dobrego zapytania, więc opiszę, czego chcę i może ktoś będzie w stanie zasugerować mi drogę naprzód. Muszę rozwiązać następujący problem: jest lista obrazów jpg. Jest też jeden "źródłowy" obraz jpg. Muszę sprawdzić, czy ten obraz jest przyciętym obrazem z listy. Nie wiem, jakie oprogramowanie zostało użyte do kadrowania i nie mam kontroli nad tym, jakie ustawienie jakości jpeg zostało użyte w obrazie źródłowym. Zdaję sobie sprawę, że jeśli ustawienie jest zbyt niskie, wynik nie może być nierozpoznawalny, ale nadal chciałbym w jakiś sposób porównać obraz źródłowy z każdym z obrazów na liście i uzyskać „tak”, jeśli znaleziono dopasowanie. Idealnie chciałbym mieć do tego bibliotekę .net, ale też mógłbym ją zaimplementować sam, gdybym tylko znał odpowiedni algorytm (a jego opis nie ma 100 stron). Ponieważ jpeg jest formatem stratnym, nie mogę dokonać porównania bit po bicie, a nawet gdybym mógł, nie jest od razu oczywiste, jak znaleźć odpowiednią część obrazu do porównania, więc nie zajmuje to zbyt dużo czasu, ponieważ kadr może mieć dowolny rozmiar w dowolnym miejscu obrazu. W moim przypadku plon nigdy nie jest zmieniany ani obracany, więc to trochę ułatwia, ale wciąż nie jestem pewien, od czego zacząć.


title: Czy zawijanie wszystkich prymitywów i ciągów jest dobrą praktyką?

text: Zgodnie z Esejem Jeffa Baya o Kalistenice Obiektów, jedną z praktyk ma być _"Zawijaj wszystkie prymitywy i struny"_ Czy ktoś może to rozwinąć? W językach, w których mamy już wrappery dla prymitywów, takich jak C# i Java. oraz Czy w językach, w których kolekcje mogą mieć typy generyczne, w przypadku których masz pewność, jaki typ znajduje się w kolekcji, musimy owijać stringi wewnątrz ich własnych klas ? Czy ma jakieś inne zalety?


title: Czy jest jakiś powód, dla którego większość języków programowania nie ma operatorów '!>' (nie większy niż) i '!<' (nie mniej niż)?

text: Zastanawiam się, czy istnieje jakiś powód - lub czy to tylko przypadek historii - że nie ma operatorów `!>` i `!<` w _większości_ języków programowania? `a >= b` _(większe OR równa się b)_ można zapisać jako `!(a < b)` _(a NIE mniejsze b)_ , co równa się `a !< b`. To pytanie uderzyło mnie, gdy byłem w trakcie kodowania mojego własnego konstruktora drzewa wyrażeń. Większość języków programowania ma operator `a != b` dla `!(a=b)`, więc dlaczego nie ma `!>` i `!<` ? _UPDATE:_ * `!<` (nie mniejsze) jest **łatwiejsze do wymówienia** niż `>=` (większe lub równe) * `!<` (nie mniejsze) jest **krótsze do wpisania** niż `> =` (większe lub równe) * `!<` (nie mniejsze) jest **łatwiejsze do zrozumienia*** niż `>=` (większe lub równe) *ponieważ `OR` jest operatorem binarnym, którego mózg potrzebuje do obsługi dwóch operandów (większe, równa się), podczas gdy `NIE` jest operatorem jednoargumentowym, a mózg musi operować tylko jednym operandem (mniejszym).


title: czy singleton powinien być dostępny przez całe życie, czy powinien być zniszczalny?

text: Czy singleton powinien być zaprojektowany tak, aby mógł być tworzony i niszczony w dowolnym momencie w programie, czy powinien być stworzony tak, aby był dostępny w czasie życia programu. Który z nich jest najlepszą praktyką? Jakie są zalety i wady obu? EDYCJA :- Zgodnie z linkiem udostępnionym przez Mata, singleton powinien być statyczny. Ale jakie są wady uczynienia go zniszczalnym? Jedną z zalet jest to, że pamięć można oszczędzać, gdy nie jest przydatna.


title: Jak skonfigurować MVP dla rozwiązania WinForm?

text: Pytanie przeniesione z Stackoverflow - http://stackoverflow.com/questions/4971048/how-do-i-set-up-mvp-for-a-winforms- rozwiązanie W przeszłości korzystałem z MVP i MVC, a preferuję MVP ponieważ moim zdaniem znacznie lepiej kontroluje przepływ egzekucji. Stworzyłem swoją infrastrukturę (klasy datastore/repository) i używam ich bez problemu podczas twardego kodowania przykładowych danych, więc teraz przechodzę do GUI i przygotowuję MVP. **Część A** 1. Widziałem, jak MVP używa widoku jako punktu wejścia, czyli w metodzie konstruktora widoków tworzy prezenter, który z kolei tworzy model, łącząc zdarzenia w razie potrzeby. 2. Widziałem również prezentera jako punkt wejścia, w którym tworzony jest widok, model i prezenter, ten prezenter otrzymuje następnie widok i obiekt modelu w swoim konstruktorze, aby połączyć zdarzenia. 3. Jak w 2, ale model nie jest przekazywany prezenterowi. Zamiast tego model jest statyczną klasą, w której metody są wywoływane, a odpowiedzi zwracane bezpośrednio. **Sekcja B** Jeśli chodzi o synchronizację widoku i modelu, widziałem. 1. Za każdym razem, gdy zmienia się wartość w widoku, tj. zdarzenie `TextChanged` w .Net/C#. Powoduje to wywołanie `DataChangedEvent`, które jest przekazywane do modelu, aby zachować jego synchronizację przez cały czas. A tam, gdzie zmienia się model, tj. zdarzenie w tle, którego nasłuchuje, widok jest aktualizowany za pomocą tego samego pomysłu, jak wywołanie „DataChangedEvent”. Gdy użytkownik chce zatwierdzić zmiany, uruchamiane jest zdarzenie `SaveEvent`, które przechodzi do modelu w celu zapisania. W tym przypadku model naśladuje działania danych i procesów widoku. 2. Podobny do #b1, jednak widok nie jest cały czas synchronizowany z modelem. Zamiast tego, gdy użytkownik chce zatwierdzić zmiany, uruchamiany jest `SaveEvent`, a prezenter pobiera najnowsze szczegóły i przekazuje je do modelu. w tym przypadku model nie wie o danych widoków, dopóki nie będzie musiał na nich działać, w którym to przypadku przekazuje wszystkie potrzebne szczegóły. **Sekcja C** Wyświetlanie obiektów biznesowych w widoku, tj. obiekt (MojaKlasa), a nie dane pierwotne (int, double) 1. Widok posiada pola właściwości dla wszystkich swoich danych, które będą wyświetlane jako obiekty domeny/biznesu. Takie jak `view.Animals` uwidacznia właściwość `IEnumerable<IAnimal>`, mimo że widok przetwarza je w Nodes w TreeView. Następnie dla wybranego zwierzęcia odsłoniłoby to `SelectedAnimal` jako właściwość `IAnimal`. 2. Widok nie posiada wiedzy o obiektach domenowych, udostępnia tylko właściwość dla typów obiektów prymitywnych/frameworkowych (.Net/Java). W takim przypadku prezenter przekaże obiektowi adaptera obiekt domeny, a następnie adapter dokona translacji danego obiektu biznesowego na kontrolki widoczne w widoku. W takim przypadku adapter musi mieć dostęp do rzeczywistych elementów sterujących w widoku, a nie tylko do dowolnego widoku, więc staje się ściślej powiązany. **Sekcja D** Wiele widoków używanych do tworzenia jednej kontrolki. tj. Masz złożony widok z prostym modelem, takim jak zapisywanie obiektów różnych typów. Możesz mieć system menu z boku, po każdym kliknięciu elementu wyświetlane są odpowiednie elementy sterujące. 1. Tworzysz jeden ogromny widok, który zawiera wszystkie indywidualne kontrolki, które są widoczne za pośrednictwem interfejsu widoków. 2. Masz kilka poglądów. Masz jeden widok na menu i pusty panel. Ten widok tworzy inne wymagane widoki, ale ich nie wyświetla (visible = false), ten widok implementuje również interfejs dla każdego zawartego w nim widoku (tj. widoki podrzędne), dzięki czemu można go udostępnić jednemu prezenterowi. Pusty panel jest wypełniony innymi widokami (`Controls.Add(myview)`) i (`(myview.visible = true`). Zdarzenia wywołane w tych widokach "podrzędnych" są obsługiwane przez widok nadrzędny, który z kolei przekazuje zdarzenie do prezentera i na odwrót, aby dostarczyć zdarzenia z powrotem do elementów podrzędnych. 3. Każdy widok, niezależnie od tego, czy jest to główny widok nadrzędny, czy mniejszy widok podrzędny, jest podłączony do własnego prezentera i modelu. Możesz dosłownie po prostu upuścić kontrolkę widoku w istniejącym formularzu i będzie miał gotową funkcjonalność, wystarczy okablowanie do prezentera za kulisami **Sekcja E** Jeśli wszystko ma interfejs, teraz na podstawie tego, jak MVP jest wykonane w powyższych przykładach, wpłynie na tę odpowiedź ponieważ mogą nie być kompatybilne. 1. Wszystko ma interfejs, widok, prezenter i model. Każdy z nich ma oczywiście konkretną implementację. Nawet jeśli masz tylko jeden konkretny widok, model i prezenter. 2. Widok i Model mają interfejs. Dzięki temu widoki i modele mogą się różnić r. Prezenter tworzy/otrzymuje obiekty widoku i modelu i służy jedynie do przekazywania wiadomości między nimi. 3. Tylko widok ma interfejs. Model ma metody statyczne i nie jest tworzony, dlatego nie ma potrzeby korzystania z interfejsu. Jeśli potrzebujesz innego modelu, prezenter wywołuje inny zestaw metod klas statycznych. Będąc statycznym Modelem nie ma linku do prezentera. ### Osobiste przemyślenia Ze wszystkich przedstawionych przeze mnie wariacji (większość prawdopodobnie wykorzystałem w jakiejś formie), których jestem pewien, że jest ich więcej. Wolę A3 jako możliwość ponownego wykorzystania logiki biznesowej poza MVP, B2 dla mniejszej duplikacji danych i mniejszej liczby uruchamianych zdarzeń. C1 dla nie dodawania innej klasy, na pewno umieszcza niewielką ilość logiki nietestowalnej jednostkowo w widoku (jak wizualizowany jest obiekt domeny), ale może to być przegląd kodu lub po prostu przeglądanie w aplikacji. Gdyby logika była złożona, zgodziłbym się na klasę adaptera, ale nie we wszystkich przypadkach. W sekcji D, czuję, że D1 tworzy widok, który jest zbyt duży, przynajmniej na przykład menu. Używałem wcześniej D2 i D3. Problem z D2 polega na tym, że musisz napisać dużo kodu, aby kierować zdarzenia do i od prezentera do właściwego widoku podrzędnego, a nie jest kompatybilny z przeciąganiem/upuszczaniem, każda nowa kontrolka wymaga więcej okablowania do obsługi pojedynczego prezentera. D3 to mój preferowany wybór, ale dodaje jeszcze więcej klas jako prezenterów i modeli, aby poradzić sobie z widokiem, nawet jeśli widok jest bardzo prosty lub nie ma potrzeby ponownego użycia. Myślę, że mieszanka D2 i D3 najlepiej opiera się na okolicznościach. Jeśli chodzi o sekcję E, myślę, że wszystko, co ma interfejs, może być przesadą. Robię to już dla obiektów domeny/biznesu i często nie widzę w ten sposób korzyści w „projektowaniu”, ale pomaga to w kpiwaniu obiektów w testach. Osobiście postrzegałbym E2 jako klasyczne rozwiązanie, chociaż widziałem E3 w 2 projektach, nad którymi pracowałem wcześniej. ### Pytanie Czy poprawnie wdrażam MVP? Czy można to zrobić we właściwy sposób? Czytałem pracę Martina Fowlera, która ma różne odmiany i pamiętam, że kiedy po raz pierwszy zacząłem robić MVC, rozumiałem tę koncepcję, ale nie mogłem pierwotnie ustalić, gdzie jest punkt wejścia, wszystko ma swoją funkcję, ale co kontroluje i tworzy oryginał zestaw obiektów MVC.


title: Jak dostać się do Guawy

text: Więc niedawno zacząłem używać Netty do komunikacji klient/serwer w moich aplikacjach i odkryłem, że podoba mi się pomysł słuchania `Future`s. Zastanawiałem się, dlaczego nie wiedziałem, że Java jest w stanie to zrobić, a na pewno nie. Po kilku poszukiwaniach zdałem sobie sprawę, że jest to funkcja dostarczana przez narzędzia współbieżności Guava, dzięki czemu przejrzałem jej podręcznik użytkownika. Wydaje się to niesamowite, ale mam pewne obawy: 1. Mam już przyzwoitą ilość kodu korzystającego ze współbieżności JDK. Jak trudna będzie migracja? 2. Jakie jest ryzyko zostania „programistą Guavy”, że tak powiem? Jak trudne będzie przeskakiwanie w tę i z powrotem między robieniem rzeczy w stylu Guavy a podstawowym sposobem Javy? * Jaka potencjalna szkoda może być, jeśli w istniejącym projekcie piszę nowe klasy z klasami Guava bez migracji reszty kodu? 3. Czy istnieje dobry przewodnik dla powolnego rozpoczynania korzystania z funkcji guawy bez konieczności przerywania pracy, aby trenować przez kilka dni/tygodni? 4. Czy jest coś jeszcze, o czym powinienem wiedzieć z góry, o czym jeszcze nie pomyślałem?


title: Co to jest stos deweloperski?

text: Właśnie teraz szukam pracy, ponieważ mam zamiar ukończyć studia. Ankieter zapytał mnie, jaki jest mój obecny „stack rozwojowy”? Wiem, że to chyba naprawdę podstawowe pytanie. ale czy ktoś mógłby mi wyjaśnić, co to jest „stos rozwojowy”? Nie jest to termin używany w szkole.


title: Czy po każdej zmianie powinienem ponownie pobierać dane mojego serwera?

text: Mam prosty edytor DB, który znajduje się na kliencie. Kiedy wprowadzam zmiany za pomocą edytora, czy powinienem ponownie pobrać wszystkie moje dane, ponieważ niektóre z nich uległy zmianie, czy po prostu sprawdzić, czy procedura przebiegła bezbłędnie i założyć, że moje dane są takie same jak na serwerze?


title: Czy programista PHP potrzebuje certyfikatu ZCE?

text: Chcę wiedzieć, czy programiści PHP posiadają certyfikat Zend Certified Engineer. Wokół mnie niektórzy mówią, że to bardzo przydatne, inni mówią nie. Proszę oczyść mój umysł. Z góry dziękuję.


title: Określanie agregatów w tej domenie

text: Pracuję nad systemem zamówień, w którym otrzymujemy pliki rozdzielane tabulatorami, które wyglądają tak (usunąłem większość kolumn dla jasności): OrderId OrderLineId NazwaKupującego AdresNabywcy Nazwa Odbiorcy Adres Odbiorcy 1 1 John 123, Street Doe 25, street 1 2 John 123, Street Doe 25, street 1 3 John 123, Street Michael 11, France 2 1 Sam 66,Somewhere Lily 25, Poland 2 2 Sam 66,Somewhere Dave 25, Russia ... Stosując **DDD** przede wszystkim wyodrębniłem kilka podmiotów jako pokazane na obrazku poniżej: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/YdOci.png) Kilka faktów na temat danych otrzymanych w plikach: 1. **Zamówienie** musi zawierać **Kupujący** i **Kupujący** muszą mieć **Zamówienie** . 2. **Zamówienie** zawiera co najmniej 1 **OrderLine** i każde **OrderLine** musi należeć do **Zamówienia**. 3. Każde **OrderLine** musi mieć **Odbiorcę**, a każdy **Odbiorca** musi mieć powiązany **OrderLine**. 4. Historia statusu dla **OrderLine** musi być śledzona przez system (stąd encja **Line History**) **Pytania:** 1. Która encja jest **zagregowanym korzeniem**? Większość artykułów, które czytałem o DDD, umieszcza encję **Klient** jako swój własny zagregowany korzeń, a Zamówienie z jego wierszami zamówienia jako drugi korzeń. Skoro jednak Kupujący i Odbiorca **NIE** mogą istnieć samodzielnie, to jak mogą być traktowani jako ich własny zbiorczy korzeń? 2. Czy OrderLines powinien być obiektem wartości czy encją? Widziałem odpowiedzi na wielu blogach, które sugerowały, że Linie Zamówień powinny być VO, ale nie widzę, dlaczego nie powinno się ich traktować jako bytu, ponieważ jego tożsamość będzie potrzebna w relacji z bytem Historii. 3. Podobnie historia linii powinna być modelowana jako jednostka lub obiekt wartości


title: Dlaczego serwery HTTP wysyłają informacje o sobie w nagłówkach HTTP?

text: Większość znanych mi serwerów HTTP wysyła nazwę i wersję aplikacji w odpowiedzi nagłówków http jako zachowanie domyślne. (Nginx, IIS, Apache itp.) Oczywiście możemy zmienić domyślne zachowanie, ale zastanawiam się, dlaczego wysyłają te informacje? Czy ma znaczenie, których serwerów HTTP używamy dla requesterów? Jedynym powodem, jaki przychodzi mi do głowy, jest umożliwienie usługom analitycznym śledzenia, które serwery HTTP są powszechnie używane przez witryny internetowe, ale w przeciwnym razie informacje te są niepotrzebne w przypadku większości żądań i gdy atakujący zorientuje się, że konkretna wersja serwera HTTP ma błąd, może łatwo znaleźć strony internetowe, które używają tej wersji i wykorzystać te informacje przeciwko tym stronom.


title: Jak nazywa się część aplikacji, która ogólnie zarządza ludźmi?

text: W każdej aplikacji istnieją pojęcia takie jak użytkownicy, klienci itp. i jakaś część aplikacji stara się nimi zarządzać. Na przykład: 1. przechowywanie informacji o osobach, organizacjach, firmach itp. 2. zarządzanie użytkownikami (osoby pracujące z systemem) 3. zarządzanie klientami (osoby, które kupują towary/usługi) 4. rozróżnianie klientów, od użytkowników, od zwykli ludzie itp. 5. ... Czy mamy uniwersalne określenie dla tego obszaru każdej aplikacji (ten podsystem, ten moduł, cokolwiek)? Lub, jeśli chcę spytać bardziej precyzyjnie, czy możemy połączyć klientów, użytkowników, osoby, organizacje itp. w jednym module i nazwać to jak X? Czy to jest prawidłowa taksonomia podsystemów? Aktualizacja: Czy **Entities** to dobra nazwa?


title: Zwróć wiele kolumn za pomocą SQL, gdzie Group By znajduje się w jednej kolumnie

text: Zauważyłem, że wszystkie kolumny w zapytaniu SQL Select Query powinny być w funkcji agregującej, ponieważ w przeciwnym razie wartość wyjściowa dla grupy byłaby dowolna. To ma sens. Ale gdy inne kolumny mają taką samą wartość, nie ma znaczenia, która z nich zostanie zwrócona. Czy istnieje sposób, aby to określić lub po prostu użyć MAX() lub MIN() w kolumnach varchar?


title: Czym jest dobre lekkie środowisko IDE, które działa dobrze w oknie Xterm?

text: Nasza grupa posiada obecnie serwer solaris z zainstalowanym na nim eclipse. Jednak musimy uruchomić to z biurek za pomocą okna xterm. Każde działanie ma opóźnienie ze względu na wagę zaćmienia. Czy są jakieś inne przyzwoite unixowe IDE, które są bardziej wybaczające na Xterm? IDE jest najczęściej używane w naszych projektach php (chociaż robimy również perl, ksh, python).


title: Odświeżenie komputera firmowego, laptopa czy komputera stacjonarnego?

text: Moja firma odświeży komputery PC z możliwością wyboru komputera stacjonarnego lub laptopa. Każdy wydaje się mieć swoje plusy i minusy. Czy chciałbyś mieć elastyczność i swobodę działania laptopa, ale ryzykować dodatkowe godziny pracy w domu? A może komputer stacjonarny ograniczony do jednego miejsca, ale nie musisz martwić się o zabieranie pracy do domu i zakłócanie czasu w domu? Nie pytam, co byłoby lepsze do kodowania, ale bardziej dla wygody i wydajności. Obecnie mam komputer stacjonarny i pracuję około 8 do 9 godzin dziennie, a przychodzę tylko w weekendy, gdy spóźnimy się z głównymi terminami. Uwielbiam się rozwijać, ale poza pracą mam też dość intensywnego życia. Czuję, że posiadanie laptopa do pracy tylko zaciemni linię pracy i domu.


title: Elementy odsprzęgające — projektowanie

text: Stworzyłem wiele nietrywialnych skryptów w Pythonie, które wykonują długotrwałe raportowanie. Na początku raporty te zaczynały się jako skrypty z plikiem konfiguracyjnym. Następnie dodałem komponent bazy danych, aby utrwalić dane. Teraz buduję GUI, aby usiąść na ich wszystkich. Moje pytanie dotyczy designu. Za każdym razem, gdy dodaję dodatkowe wymaganie, żałuję, że nie oddzieliłem elementów tych skryptów bardziej niż to zrobiłem. Kiedy zastanawiam się, jak zrefaktoryzować mój kod, aby był bardziej modułowy, stwierdzam, że muszę przekazać kilka odniesień wokół kodu, do tego stopnia, że inicjatory klas i sygnatury funkcji mają mnóstwo parametrów. Również uważam, że mam parametry, które są po prostu „przechodzące”, w tym, że jeden obiekt potrzebuje ich tylko do przekazania do innego obiektu, nie robiąc z nimi nic. Jaki jest najlepszy sposób podejścia do modularności w Pythonie, przy jednoczesnym zminimalizowaniu potrzeby przekazywania referencji w dowolne miejsce? Rozumiem, że jest to bardzo koncepcyjne i będzie się różnić w zależności od projektu, ale szukam zasad przewodnich.


title: Jak mogę zbudować ten wniosek o wpłatę/rezerwację?

text: Planuję zbudować aplikację do wpłat/rezerwacji płatności dla firmy medialnej posiadającej kilka oddziałów w różnych lokalizacjach. Aplikacja powinna mieć możliwość przenoszenia danych przez sieć/internet do centralnej bazy danych, gdzie administrator/księgowy w innej lokalizacji będzie mógł zobaczyć wynik całego zadania z każdego dnia z każdego oddziału. Aplikacja będzie działać w środowisku Windows. Będzie mógł wysłać wynik rezerwacji do drukarki punktu sprzedaży w celu wydrukowania. Teraz jestem zdezorientowany, jeśli chodzi o wybór odpowiedniego języka programowania do wykonania tego zadania. Jestem na poziomie początkującym/średniozaawansowanym w PHP, znam HTML/CSS i JavaScript. Próbowałem to zrobić w PHP, ale mam do czynienia z kilkoma wyzwaniami i obawiam się o część POS, ponieważ aplikacja PHP działa w przeglądarce internetowej. Nie wiem, czy python będzie się do tego najlepiej nadawał i jak długo zajmie komuś z moim poziomem doświadczenia, aby podnieść pytona. Wszelkie sugestie będą bardzo mile widziane.


title: Szaleństwo sortowania komentarzy

text: Mam stronę internetową, w której ładuję wszystkie komentarze użytkowników według liczby polubień, które mają. Przysporzyło mi to kłopotów. Powiedzmy, że komentarz #1 ma 5 polubień, komentarz #2 ma 2 polubienia, a reszta ma 0 polubień. Mamy następujące id komentarza: 1 2 3 4 5 6 7 8 9 10 Teraz załóżmy, że ktoś inny "lubi" komentarz #4. Teraz kolejność id to: 1 2 4 3 5 6 7 8 9 10 Załóżmy, że ładuję 3 komentarze jednocześnie. W scenariuszu nr 1 załadowałem komentarze: {1, 2, 3} Teraz, gdy klikam „Załaduj więcej”, ładuję: {3, 5, 6} Załadowano nr 3 dwa razy! A komentarz nr 4 nigdy nie jest wyświetlany. Problemy pojawiają się również, gdy komentarz zostanie usunięty, ale to na później. Jak mogę to obejść? Widziałem strony internetowe, które porządkują według „polubień” lub czegoś podobnego i prawie nigdy nie napotykam duplikatów i/lub brakujących komentarzy. Jakieś wskazówki? Dziękuję.


title: Dlaczego oferta „przetwarzania w chmurze” nie pojawiła się wcześniej?

text: Cloud computing to model wynajmu zasobów - serwerów i przechowywania danych. Zarówno serwery, jak i przechowywanie danych istnieją już od ponad dekady. Jednak oferty cloud computing pojawiły się dopiero kilka lat temu. O co tu chodzi? Jaka była najważniejsza zmiana, która spowodowała masowe przyjęcie i masowy marketing ofert przetwarzania w chmurze?


title: Jakie są szkody związane ze stylem kodowania kowbojskiego w małym osobistym projekcie?

text: Zastanów się, czy jest to mały, osobisty projekt i nie jest przeznaczony do utrzymywania w przyszłości, co może w takim przypadku zaszkodzić stylowi kodowania kowbojskiego?


title: monitorować aplikacje internetowe .net

text: Jestem młodszym programistą, jestem w zespole z wewnętrznym systemem zgłoszeń (więcej/mniej). Chcę ulepszyć nasze monitorowanie, aby móc stwierdzić, kiedy funkcjonalność mojej aplikacji jest zepsuta. aktualne alarmy ostrzegają tylko wtedy, gdy strona internetowa jest niedostępna. Chcę ostrzec, jeśli kliknięcie linku spowoduje 500. Mam trudności ze znalezieniem innych zespołów, które wdrażają to, o co proszę, a jedyną dokumentacją, jaką mogę znaleźć, jest przegląd monitorowania kondycji ASP.Net z http:// msdn.microsoft.com/library/bb398933.ASPX#Features i zastanawiałem się, czy są jakieś przykłady, o których wiesz? Istniejące zespoły sugerują stworzenie licznika, który czeka 2 minuty i robi coś, aby sprawdzić kondycję i zgłaszać do innego serwera, czy jest aktywny, czy nie - jak mogę stworzyć metodę, która... dokładniej sprawdza kondycję mojej aplikacji internetowej? czy istnieje sposób na zasymulowanie funkcji i sprawdzenie, czy się zepsuje, czy nie?


title: Odwrotność refaktoryzacji interfejsu ekstraktu

text: Pracuję z projektem Java, który ma kilka interfejsów, z których wiele ma tylko jedną implementację. (Patrz powiązane pytanie) Dla danej wersji oprogramowania można by pomyśleć, że jest to akceptowalne, ponieważ interfejsy były pewnym planem przyszłych rozszerzeń. Jednakże, gdy patrzę na ponad 200 poprawek na przestrzeni kilku lat, te interfejsy _nigdy_ nie miały więcej niż jednej implementacji (ani nie były używane w testach jednostkowych). Wydaje się, że w tych przypadkach prawdopodobnego wzdęcia (YAGNI) ze względu na Anti-wzorzec interfejsu, przydatne byłoby zastosowanie _odwrotności_ interfejsu Extract. Jednak klasa Inline (domniemana odwrotność według refactoring.com) nie jest tym, o czym mówię. Jak nazywa się refaktoryzacja, która usuwa nieużywany interfejs, zastępując jedyną klasę, która go implementuje?


Jestem samotnym programistą pracującym nad stroną internetową obsługującą zarówno frontend jak i backend. Ostatnio na mojej liście zadań muszę podać kanał wiadomości społecznościowych (aktywności wśród znajomych), który powinien podsumowywać działania z różnych modułów (co najmniej 7 modułów). Opracowanie tego zajęło mi co najmniej 20-25 dni. Pamiętaj, że w kanale aktualności każdą akcję można wykonać bezpośrednio na kanale aktualności + musi istnieć jakaś agregacja, która powinna agregować podobne działania, np. Użytkownik A, B i C polubił Twój przedmiot. Jak przekonać klienta, że zadanie było złożone, a czas, który poświęciłem, jest sprawiedliwy?


title: Czy należy udostępnić „obliczoną” wartość jako właściwość czy metodę?

text:
Mam klasę C#, która reprezentuje typ zawartości w systemie zarządzania zawartością sieci web. Mamy pole, które umożliwia edytorowi treści internetowych wprowadzenie szablonu HTML określającego sposób wyświetlania obiektu. Zasadniczo używa składni uchwytów do zastępowania wartości właściwości obiektu w ciągu HTML:
{{Title}}

{{Message}}
 Czy z perspektywy projektowania klas powinienem ujawnić sformatowany ciąg HTML (z podstawieniem) jako _właściwość_ lub _metoda_? **Przykład jako właściwość:** public class Przykład { private string _template; ciąg publiczny Tytuł { get; ustawić; } ciąg publiczny Wiadomość { get; ustawić; } public string Html { get { return this.ToHtml(); } protected set { } } public Przykład(Zawartość treści) { this.Title = content.GetValue("tytuł") as string; this.Message = content.GetValue("wiadomość") jako ciąg; _template = content.GetValue("szablon") jako ciąg; } private string ToHtml() { // Wykonaj podstawienie i zwróć sformatowany ciąg. } } **Przykład jako metoda:** public class Przykład { private string _template; ciąg publiczny Tytuł { get; ustawić; } ciąg publiczny Wiadomość { get; ustawić; } public Przykład(Zawartość treści) { this.Title = content.GetValue("tytuł") as string; this.Message = content.GetValue("wiadomość") jako ciąg; _template = content.GetValue("szablon") jako ciąg; } public string ToHtml() { // Wykonaj podstawienie i zwróć sformatowany ciąg. } } Nie jestem pewien, czy z punktu widzenia projektu ma to znaczenie, czy są powody, dla których jedno podejście jest lepsze od drugiego?


title: Jak montaż odnosi się do maszyny/kodu binarnego?

text: Jak assembler odnosi się do kodu maszynowego/binarnego. Na przykład tutaj jest jak drukować na ekranie w mikeOS (mały system operacyjny z czystym montażem), mikeOS używa NASM do asemblacji. BITS 16 ORG 32768 %INCLUDE 'mikedev.inc' start: mov si, mystring call os_print_string call os_wait_for_key ret mystring db 'Mój pierwszy program MikeOS!', 0 Gdzie os_print_string i os_wait_for_key są zdefiniowane jako os_print_h ;equ 0003 SI = ciąg zakończony zerem i os_wait_for_key equ 0012h ; Zwraca AL = klawisz naciśnięty odpowiednio w mikedev.inc i zdefiniowany jako os_call_vectors: jmp os_print_string ; 0003h w kernal.asm Teraz nasm musi wykonać dużo więcej pracy pod sceną podczas asemblacji, nie mam pojęcia co. Innymi słowy język asemblera jest do pewnego stopnia opakowaniem kodu maszynowego, tak jak powiedzmy, że C jest opakowaniem asemblera. Gdybym powiedział cout >> "Hello World" na przykład w C++, to jest to następnie kompilowane do jego odpowiednika w asemblerze i składane w kod maszynowy. Więc staram się zrozumieć, jak 0003h i 0012h wydają się dyktować wszystko, co się dzieje podczas drukowania na ekranie. W jaki sposób te dwie wartości: a) Powiedz procesorowi/systemowi PC, którą magistralę ma wysłać odpowiednie bajty reprezentujące wymagany ciąg do magistrali monitora, a nie do karty dźwiękowej. b) W tym przypadku ciąg jest oczywiście wysyłany do monitora, teraz rozumiem, że masz bufor ramki, który może przechowywać maksymalną liczbę bajtów. Powiedzmy, że rozdzielczość twojego ekranu jest ustawiona na 1024 x 768, czyli 786432 pikseli i częstotliwość odświeżania 60 Hz na ekranie, dlatego FB będzie zawierał tę liczbę wartości bajtowych, a zatem będzie wysyłał tyle bajtów do monitora co 1 /60 sek. Pierwszy bajt w FB odpowiadający pierwszemu pikselowi na ekranie i od ostatniego do ostatniego na ekranie itd. Skąd więc CPU/GPU wie, który bajt umieścić w jakiej pozycji w FB. To tak, jakby powiedzieć do GPU 'ok, potrzebuję tego piksela na coord (245,232) zielony, więc zostawię tobie, aby umieścić tę wartość pikseli we właściwej pozycji w FB' itp. Jak to działa.


title: Jak poprawnie zaprojektować schemat bazy danych NoSql?

text: Chciałbym dowiedzieć się czegoś więcej o bazach danych NoSQL, więc zdecydowałem się na stworzenie od podstaw nowego projektu do obsługi wyników piłkarskich. W mojej tradycyjnej relacyjnej bazie danych mam tabele turniejów, drużyn, wyników i klas. Wszystkie są oczywiście powiązane. Jakie może być dobre podejście do projektowania takiego projektu, używając zamiast tego podejścia NoSQL?


title: Manager na bieżąco zmienia specyfikację wymagań po każdym demo.

text: ## Tło mojego środowiska pracy Mój przełożony nie ma żadnego doświadczenia ani znajomości komputerów lub oprogramowania. Jest wysoce prawdopodobne, że w swoim życiu nie widział kodu w żadnej formie (nawet z odległości fizycznej 10 stóp lub mniejszej). Nie ma nikogo, kto rozumie złożoność tego, o co zostałem poproszony. Do tego stopnia, że gdybym pół-hardcode, nikt nie wiedział. W teście Joela otrzymujemy niewiarygodny wynik 0. ## Problemy * Menedżer i czasami inni „senior” ciągle zmieniają specyfikację wymagań. Zmiany, które, jeśli zostaną wykonane dobre prace inżynieryjne, a nie niejednolite „poprawki”, wymagają zmian w podstawowym projekcie. * Nie ma _absolutnie nikt_, kto patrzy na kod (prawdopodobnie dlatego, że nikt nie wie, jak to zrobić, a nawet jeśli należy to zrobić), co oznacza, że nikt nigdy nie będzie w stanie: * Docenić złożoności problemu lub elegancji rozwiązania . * Zaproponuj poprawę podejścia. * Doceń jakość kodu. * Wskaż, gdzie można poprawić kod. * Używa się dużo żargonu, który ma sens gramatycznie, ale nie ma sensu w żaden inny sposób. * Nie czuje się, nie zachowuje ani nie pracuje jak firma programistyczna. ## Pytanie Co należy zrobić? _Szczególnie biorąc pod uwagę, że nie ma nikogo, kto wskazałby ulepszenia w moim kodzie._ ## Aktualizacja Aby odpowiedzieć na pytania HLGEM (i prawdopodobnie innych) dotyczące tego, co zrobiłem, aby to naprawić. Zaproponowałem skonfigurowanie Redmine i wprowadzenie wszystkim kontroli źródła. Powiedziałem, że polecam dystrybucję (git lub mercurial), ale porozmawiam też o tych scentralizowanych i pozwól zespołowi zdecydować. Odpowiedź była taka, że rzeczy są robione i zostaną zrobione w ciągu kilku tygodni. Nie widziałem tego i nie wiem, czy inne części firmy z niego korzystają.


title: Pobieranie instrukcji z pamięci

text: Więc jestem noobem w języku asemblera i instrukcjach maszynowych. Kiedy pojawiła się dyskusja na temat tego, jak wywołania funkcji są implementowane na poziomie procesora, ktoś powiedział, że instrukcja `CALL` wpycha adres następnej instrukcji do wykonania na stos przed aktualizacją `EIP`, a następnie ktoś zapytał, jak to zrobić znamy adres następnej instrukcji. A potem ktoś zapytał, podczas gdy `EIP` wskazuje na bieżącą instrukcję w pamięci, skąd procesor wie, ile bajtów z `EIP` należy odczytać, aby odczytać całą instrukcję. Założyłem, że wszystkie instrukcje mają stałą długość, więc procesor odczytałby tyle bajtów, co stanowiłoby instrukcję, a następnie proces dekodowania określi, ile jeszcze bajtów trzeba odczytać, aby pobrać operandy. Jednak szukając instrukcji dowiedziałem się, że rozmiary instrukcji są różne. Wracamy więc do tego samego pytania: Skąd procesor wie, ile bajtów należy odczytać, aby pobrać instrukcję z pamięci do pamięci podręcznej instrukcji?


title: czy ktoś wie, jak korzystać z metody modułu PyQt 'uic' 'compileUiDir'?

text: Dokumentacja nie jest dla mnie zbyt przejrzysta: def compileUiDir(dir, recurse=False, map=None, **compileUi_args): """compileUiDir(dir, recurse=False, map=None, **compileUi_args) Moduły Pythona z plików .ui Qt Designera w katalogu lub drzewie katalogów. dir to nazwa katalogu do przeszukania w poszukiwaniu plików, których nazwa kończy się na '.ui'. Domyślnie wygenerowany moduł Pythona jest tworzony w tym samym katalogu kończącym się na ' .py'.recurse jest ustawiane, jeśli jakiekolwiek podkatalogi powinny być skanowane.Domyślnie jest to False.map jest opcjonalną funkcją wywoływaną, do której przekazuje się nazwę katalogu zawierającego plik '.ui' i nazwę modułu Pythona, który będzie Wywoływalny powinien zwrócić krotkę nazwy katalogu, w którym zostanie utworzony moduł Pythona oraz (ewentualnie zmodyfikowaną) nazwę modułu. Wartość domyślna to None. compileUi_args to any ad Argumenty słów kluczowych, które są przekazywane do funkcji compileUi(), która jest wywoływana w celu utworzenia każdego modułu Pythona. """ w odniesieniu do argumentu słowa kluczowego map i nie ma prostego przykładu do wykorzystania. Czy oczekuje argumentu mapy? jak w: uic.compileUiDir("ui/", map=("ui/", ".). ./widget/test.py")) i jak powstaje? Zasadniczo mam kilka plików `.ui` w katalogu `ui` i chcę je skompilować i umieścić wynikowe pliki `.py` w innym katalogu o nazwie `widget`. Mają nazwy takie jak `test1Widget.ui`, `test2Widget.ui` itp. i chciałbym, aby zostały przemianowane na `test1.py`, `test2.py` itd. Czy ktoś może mi dać proszę o jakieś wskazówki?


title: Jaka jest ocena zaliczenia egzaminu MS (szczególnie 70-515)

text: Zamierzam zdać wkrótce egzamin 70-515 (aplikacje webowe z .net4) i zastanawiam się, co to jest ocena zaliczenia? Egzaminy testowe materiału szkoleniowego stawiają ocenę zaliczeniową na 80%, ale z wcześniejszych doświadczeń (zdawanie 1,0 egzaminu 6 lat temu) sądziłem, że to tylko 70%. Czy ktoś może również potwierdzić, czy liczba pytań na egzaminie wynosi 45? Dziękuję.


title: Czy kompilatory mogą sprawdzić, czy pewne aksjomaty są zgodne z typem zdefiniowanym przez użytkownika?

text: Załóżmy, że zdefiniowany jest następujący typ (składnia C++, może być koncepcyjnie zastosowany do dowolnego języka statycznie wpisanego). class T { int val; przyjaciel bool operator<(const T& lhs, const T& rhs) { return lhs.val < rhs.val; } // Idealnie, gdybyśmy uczynili ich "przyjaciółmi" // Nie oznacza to, że należą do samego typu, ponieważ nie są funkcjami składowymi friend bool operator>=(const T& lhs, const T& rhs) { return !(lewa oś < prawa oś); } // Interesująca jest również następująca implementacja zaprzyjaźniony operator bool>=(const T& lhs, const T& rhs) { return lsh.val >= rhs.val; } }; Tak więc kompilator może zdecydowanie sprawdzić, czy T obsługuje operator< lub operator>=, może po prostu sprawdzić deklarację. Staje się to bardziej skomplikowane, jeśli są one zdefiniowane jako „przyjaciele” zamiast funkcji składowych, ale jeśli o mnie chodzi, można to zrobić. Czy jednak kompilator może sprawdzić, czy „wspólny aksjomat rodzaju” jest spełniony? (Czy można to sprawdzić we wszystkich scenariuszach? Nie ma znaczenia, czy byłoby to zgodne z normami.) Powiedz: nie (a < b) == a >= b Czy powinniśmy zdefiniować je w kategoriach z drugiej strony jest to zdecydowanie możliwe w tym konkretnym scenariuszu, ale oczywiście nie jest to jedyny aksjomat, który trzeba sprawdzić, a co z: (a > b) => (b < a) i nie jest też konieczne (niestety) zdefiniować nasze zachowanie w kategoriach czegoś, co zostało już zdefiniowane. A czasami nie byłoby to nawet możliwe. Jeśli więc kompilator może sprawdzić, czy pewne aksjomaty są zgodne, to w jaki sposób? Generowanie losowych wartości z określonych zakresów? Czy można wymyślić i udowodnić poprawność takich zakresów? Odnosi się to głównie do koncepcji C++, które w przeciwieństwie do koncepcji C++ Lite, powinny również być w stanie "obsługiwać aksjomaty", cokolwiek to znaczy, po prostu nie widzę jasnego sposobu, w jaki sposób można je egzekwować. Czy też twórca typu będzie musiał określić, jakim aksjomatom przestrzega jego klasa? C++ porzucił "mapy pojęć", o ile wiem.


title: Jak skonfigurować zmienny katalog instalacyjny?

text: Mam kilka projektów, które zależą od dodatkowych plików, takich jak obrazy lub pliki konfiguracyjne. Podczas kompilowania i instalowania programów takich jak `Okular` za pomocą `cmake` mogę określić katalog instalacyjny i pozwolić, aby `make install` zainstaluje się w nim. W jakiś sposób ten program zorientuje się, że wszystkie jego zależności znajdują się w tym folderze, a nie w głównym systemie plików Linux. Do tej pory miałem ścieżki bezwzględne, takie jak `/etc/config.ini`. Problem polega na tym, że nie mogę przetestować programu bez zainstalowania go w moim systemie. Jak mogę to łatwo zrobić w C++ i Pythonie?


title: C# Design, wiele właściwości, złożony konstruktor i równość

text: Nadal jestem względnym nowicjuszem w OOP, więc wciąż próbuję zrozumieć niektóre z najlepszych praktyk projektowania „dobrych” obiektów. Wiem, że to pytanie jest chyba raczej subiektywne, dlatego jestem tutaj, a nie na stackoverflow. Projektuję obiekt, który będzie miał 20 oddzielnych właściwości ciągu, z których żadna nie jest wymagana. Te ograniczenia są stałe i nie można ich zmienić, ponieważ jest to implementacja zewnętrznego źródła danych, nad którym nie mam kontroli. Problem projektowy, z którym się spotykam, polega na tym, jak skutecznie skonstruować instancję obiektu i móc porównać równość, porównując każde pole bez naruszania normalnych najlepszych praktyk. * Konstruktor 20-argumentowy wydaje się bardzo błędny, zwłaszcza że każde pole jest łańcuchem i zdarzają się przypadki, w których wiele z nich będzie miało wartość null. Mógłbym użyć opcjonalnych argumentów w C#4, aby zmniejszyć liczbę faktycznie wywoływanych argumentów, ale ponieważ wszystko jest ciągiem, musiałbym użyć nazwanych parametrów podczas wywoływania konstruktora, a to wydaje się, że byłoby jeszcze brzydsze. * Myślałem o próbie zgrupowania właściwości w mniejsze klasy, ale najbardziej logiczne grupowanie nadal ma obiekt z 10 właściwościami, a co najmniej połowa pozostałych właściwości nie ma logicznego grupowania. * Mógłbym nadać każdej właściwości publiczny ustawiacz, ale to spowodowałoby, że obiekt byłby modyfikowalny, a tym samym skomplikowałoby sprawę nadpisania funkcji `GetHashCode()`. I naprawdę nie potrzebuję, aby obiekt był zmienny. Po zbudowaniu nigdy nie powinno być powodu, aby go zmieniać, ale nie chcę na tym polegać, bo kto wie, co ktoś spróbuje z nim zrobić. * Implementacja `IEquatable<T>` jest możliwością dla testu równości, ale rozumiem, że zaleca się również zastąpienie `Equals(object obj)` i `GetHashCode()` podczas implementacji `IEquatable`, więc wszystkie metody `Equals` mają takie samo zachowanie. Czy jest to przypadek brzegowy, w którym należy wykonać zastępowanie „Równa się” bez zastępowania „GetHashCode”? Nie zamierzam używać tego obiektu jako klucza w słowniku lub jako członka `HashSet`, ale nie mogę przewidzieć, co ktoś inny będzie próbował zrobić w przyszłości. A może powinienem po prostu porzucić pomysł porównywania równości wszystkich właściwości za pomocą Equals i zaimplementować własną metodę `Compare()`? A może istnieje lepsza metoda budowania obiektu, która pozwoliłaby mu nadal być niezmiennym bez konieczności przekazywania wszystkich argumentów przez konstruktor lub metodę? EDYCJA: W odpowiedzi na komentarz Signa celem obiektu jest ostatecznie możliwość porównania danych z zewnętrznego źródła danych z naszymi danymi wewnętrznymi, aby zapewnić ich dokładność. Oba zestawy danych zawierają informacje adresowe, ale są one podzielone inaczej. Dane wewnętrzne są zazwyczaj przechowywane jako typowy adres (ulica, miasto, stan, kod pocztowy, hrabstwo, kraj), ale istnieją różnice w przypadku posiadania numeru apartamentu/mieszkania lub piętra w budynku. Dane zewnętrzne są dzielone jeszcze bardziej na mniejsze części. Zatem ten obiekt ma być wspólnym łączem między dwoma źródłami danych i umożliwiać użytkownikowi porównywanie podobnych pól pod kątem równości. EDYCJA #2: Ostatecznie wybrałem odpowiedź Doc Browna, ponieważ zmodyfikowana wersja jego pomysłu na słownik (z wyliczeniami jako kluczami zamiast ciągów) była najprostszym sposobem, aby przejść bez niechlujnego konstruktora i nadal zapewniać niezmienność, na którą miałem nadzieję. Na dłuższą metę zamierzam poeksperymentować z niektórymi sugestiami Olivera, ponieważ niektóre z jego edycji miały wiele do zaoferowania.