title: Czasy kompilacji dla małych zmian przyrostowych w aplikacjach internetowych języka C#

text: Ostatnio odchodzę od stron ASP.NET na rzecz aplikacji internetowych. Mówiąc dokładniej, ostatnio wybieram MVC jako alternatywę dla tworzenia witryn ASP.NET Forms. Coś, co uważam za bardzo frustrujące, to ciągły proces budowania->zmiany->przebudowy podczas testowania małych zmian w skompilowanym kodzie. Zauważyłem, że „pakuję” kilka zmian między kompilacjami, aby uniknąć czekania 20-25 sekund, aż Visual Studio zmiażdży proces kompilacji. Stworzyłem czysty projekt MVC 4 z szablonu VS i zmierzyłem czas kompilacji po dokonaniu zmiany kodu w jednej linii, zajęło to 19 sekund. Podczas wprowadzania zmian w kodzie w witrynie ASP.NET zawsze stwierdzałem, że strona jest pozornie ponownie kompilowana w locie, gdy następnym razem trafisz na stronę. Wydaje mi się, że jest to lepsze środowisko do tworzenia stron internetowych niż VS wymuszające całą przebudowę po każdej małej zmianie kodu. W przeszłości cieszyłem się luksusem dokonywania zmian, wciskania odświeżania w przeglądarce i czekania 1-2 sekundy na mój wynik. Czy można to osiągnąć za pomocą aplikacji internetowych utworzonych przy użyciu programu Visual Studio?


title: Uwierzytelnianie HTTP PHP i Android

text: Pracuję nad stroną internetową, na którą również mam nadzieję mieć aplikację. Z tego powodu tworzę API PHP, które trafi do mojej bazy danych i będzie obsługiwać określone dane w oparciu o wywołaną metodę/funkcję. Chcę jednak chronić te interfejsy API przed niewłaściwym użyciem i planuję w tym celu zaimplementować Authentication Digest. Jednak jednym z systemów operacyjnych, który chcę obsługiwać, jest Android. I wiem, że złośliwy użytkownik byłby w stanie przeprowadzić inżynierię wsteczną aplikacji na Androida i rozszyfrować mój schemat uwierzytelniania. Zastanawiam się: 1. Czy istnieje lepszy sposób ochrony tych interfejsów API przed niewłaściwym użyciem? 2. Czy istnieje sposób, aby uniemożliwić złośliwemu użytkownikowi wykonanie inżynierii wstecznej aplikacji i potencjalnego zobaczenia jej kodu źródłowego, umożliwiając im zobaczenie mojego schematu uwierzytelniania? 3. Jeśli żadnemu z nich nie da się zapobiec, czy jedyną opcją jest posiadanie nazwy użytkownika/hasła specjalnie dla aplikacji na Androida, a gdy w końcu zostanie zhakowana, zmień informacje i wydaj aktualizację aplikacji?


title: Zanurzenie się w programowanie mikrokontrolerów

text: Właśnie dostałem partię modułów matryc LED od Sure Electronics (http://www.sureelectronics.net/goods.php?id=1120) i płytę sterownika (http://www.sureelectronics.net/goods.php? id=972). Mam go podłączony i podłączony do mojego Maca. Znalazłem odpowiednie sterowniki i mogę teraz wysyłać tekst do wyświetlaczy za pomocą wirtualnego portu COM, zgodnie z dokumentacją ze strony internetowej Sure Electronic: zacznij od „0xFE,0x47 (G) 0x01,0x01”, a następnie 16 znaków - wyświetl 16 znaków w pierwszym wierszu zaczynaj od "0xFE,0x47 (G) 0x01,0x02" a następnie 16 znaków - wyświetl 16 znaków w drugim wierszu Plan jest taki, aby podłączyć to wszystko do Raspberry Pi (gdy w końcu zdobądź jeden) i użyj go do wyświetlania informacji z usługi sieciowej. Jednak ta konfiguracja nie jest optymalna. Płyta sterownicza wymaga pewnej inicjalizacji przy każdym włączeniu, aby była dostępna przez USB. Chciałbym również mieć większą kontrolę nad wyświetlaniem znaków (ta konfiguracja na przykład nie obsługuje znaków spoza ASCII ani przewijania tekstu). Ciężkie googlowanie doprowadziło mnie do przekonania, że muszę głębiej zagłębić się w chip HT1632 na płycie sterownika. Dokumentacja Sure Electronics jest skąpa. Celem byłaby możliwość indywidualnego adresowania każdego piksela LED z mojego kodu uruchomionego na moim komputerze (na przykład w dwuwymiarowej tablicy wartości logicznych). Jestem zupełnie nowy w mikroprogramowaniu, więc nie mam pojęcia, od czego zacząć. Co muszę zrobić, aby go zaprogramować? Czy mogę nawet zmodyfikować kod tablicy sterowniczej, czy potrzebuję innego rodzaju tablicy sterowniczej? A jak zautomatyzować sekwencję startową, aby płyta automatycznie włączyła USB? Poza tym jestem głównie programistą Java/Web, więc chciałbym uniknąć jak najwięcej programowania w C. Jeśli ktoś z doświadczeniem w tego typu programowaniu mógłby wskazać mi właściwy kierunek do rozpoczęcia, byłbym wdzięczny.


title: Czy brak stanów w HTTP sprawia, że protokół nie nadaje się do nowoczesnych aplikacji?

text: Zmieniłem PHP na ASP.NET, teraz pracuję z formularzami internetowymi w dość dużej firmie. Poświęciłem trochę i badania, aby poprzeć moje wrażenia na temat formularzy internetowych ASP.NET i doszedłem do wniosku, że Webforms jest próbą ułatwienia pisania aplikacji internetowych dla tych, którzy przybyli ze świata "programowania na komputery stacjonarne". Zanim jednak odrzuciłem WebForms, postanowiłem przeanalizować potrzeby pisanego przez nas oprogramowania i natknąłem się na kwestię utrzymywania stanów aplikacji w sieci. Rozumiem, że HTTP jest protokołem bezstanowym, a ASP.NET próbuje symulować stany za pomocą zmiennych sesji, ukrytych pól i stanów widoku, rozumiem również, że wszystkie powyższe mają wady i nie są idealnymi sposobami na utrzymanie stanu w moim aplikacji, ale rozumiem również potrzebę zachowania stanu w mojej aplikacji. Co rodzi pytania, czy HTTP naprawdę nadaje się do tego typu zadań (tworzenie aplikacji wymagających stanu)? Czy narzędzia dostępne obecnie dla webdeveloperów są wystarczające? Czy nowe narzędzia dostępne w HTML5 są skuteczne w pracy, czy są tylko obejściem ograniczeń protokołu HTTP. Uwielbiam programować dla sieci i jestem o wiele bardziej zaznajomiony z siecią niż z komputerem stacjonarnym, po prostu zastanawiałem się nad tą bezstanowością HTTP od jakiegoś czasu i chcę zrozumieć, czy brakuje mi jakiegoś punktu, czy też mam rację w moich wyobrażeniach.


title: czy autor może znakować nazwę aplikacji open-source?

text: Chciałbym wiedzieć, czy nazwa aplikacji o otwartym kodzie źródłowym może być znakiem towarowym oryginalnego autora i co to oznacza, jeśli chodzi o dystrybucję jej za pośrednictwem głównych dystrybucji Linuksa, czyli czy zaakceptują tego rodzaju oprogramowanie?


title: Jak sprawnie przechowywać adresy IP?

text: **Tło** Mam wymaganie, aby usunąć kilka węzłów w sieci na podstawie polecenia podanego przez użytkownika. Aby uniemożliwić węzłom przesyłanie lub odbieranie danych, pomyślałem o zmianie adresu IP na inny. Przed zmianą adresu chcę zapisać adres IP węzła, aby móc ponownie przypisać oryginalny adres IP do węzła po zakończeniu symulowanej awarii sieci. Mój problem polega na tym, jak skutecznie zapisywać adresy IP węzłów. Czy powinienem używać połączonej listy czy tablicy mieszającej?


title: Jakie programy emitują kod C++ i przekazują go do głównych kompilatorów?

text: Podejrzewam, że istnieją programy, które zamiast emitować kod maszynowy zamiast tego emitują kod C++, a następnie uruchamiają główny kompilator C++, aby skompilować go do kodu maszynowego. Nie mogę znaleźć żadnych godnych uwagi przykładów poza MIDL, który emituje dość prymitywny kod. Jakie są godne uwagi przykłady takich systemów?


title: Przechowywanie dynamicznego SQL w plikach tekstowych a kod wbudowany

text: Nasz zespół ds. architektury proponuje platformę, dzięki której nasze zapytania SQL zostaną przeniesione z zakodowanych ciągów znaków w naszych aplikacjach do systemu opartego na plikach, w którym będziemy je wywoływać za pomocą wywołań funkcji. Nasza aplikacja intensywnie wykorzystuje zapytania SQL, od przyziemnych po bardzo złożone. To jest rozwiązanie .NET. Pomysł polega na tym, że każde zapytanie byłoby zapisywane do plików tekstowych, a my moglibyśmy oznaczyć pola, łączenia i warunki atrybutami. Wywołując nasze funkcje SQL, moglibyśmy przekazać argumenty, aby włączyć/wyłączyć te atrybuty w oparciu o naszą logikę biznesową, pozwalając na wykonanie tylko tych części SQL, których potrzebujemy. Chociaż podoba mi się pomysł wyabstrahowania naszego SQL, jestem sceptyczny, czy ten system przyniesie jakiekolwiek wymierne korzyści. Głównym motorem tego jest nasze przeszłe doświadczenie, w którym wielu programistów stworzyło bardzo nieudolne dynamiczne funkcje SQL, których nie można było zrozumieć. Chodzi o to, że ułatwi to definiowanie zapytań, ułatwi testowanie wszystkich zapytań i wyraźnie zdefiniuje logikę biznesową. Nie jestem pewien, czy przetrwa próbę rzeczywistości. Chciałbym uzyskać informację zwrotną na temat zalet/przeciw tego podejścia. Ponadto, zanim ktokolwiek to zasugeruje, Entity Framework został odrzucony z powodu wątpliwego wsparcia ze strony naszego dostawcy bazy danych (Teradata).


title: Obliczanie lokalnych wyników z wartości globalnych za pomocą SQL i PHP

text: Mam dla was wszystkich interesujący problem. Mam częściowe rozwiązanie, ale uważam, że możecie wymyślić skuteczne rozwiązanie. Co mam do tabeli SQL o następującej strukturze: StockId <\- unikalny identyfikator dla akcji StockHolderId <\- unikalny identyfikator dla akcjonariusza StockPrice <\- Cena akcji - jeśli jest to prośba o zakup to jest to zachowane -1 KupnolubSprzedaż <\- wartość 1 oznacza, że posiadacz chce kupić, wartość 2 oznacza, że sprzedaje StockQuality <\- specjalny rekord, który przechowuje wartość obliczoną na podstawie skomplikowanych obliczeń. Wartości to 1, 2 lub 3 w oparciu o, powiedzmy, zły, neutralny, dobry. To, co chcę zrobić, to dowiedzieć się, kto może dać mi akcje, które chcę kupić, a kto może kupić te, które mam. Chcę, aby osoba, która oferuje akcje dobrej jakości (wartość lokalna) po najniższej cenie (wartość globalna), była moim najlepiej sprzedającym się odpowiednikiem, a osoba, która może kupić większość (półglobalnych) moich akcji, aby była moim najlepszym wyborem. Formuła rankingu sprzedawcy to 0,5 * cena + 0,3 * dostępność + 0,2 * jakość. Jak byś się do tego zabrał? Jakieś pomysły? Stworzyłem tabelę, która łączy się ze sobą, aby uzyskać informacje o każdym dopasowaniu, a następnie grupowaniu, ale jak mogę uzyskać wartość ceny, aby była najtańsza?


title: Kategorie celu C i rozrastające się klasy

text: Ogólnie przyjęte praktyki programowania, z którymi się spotkałem, odradzają duże, rozrastające się klasy. Czy używanie kategorii celu C zmienia w jakiś sposób konwencjonalną mądrość? Czy bardziej akceptowalne jest posiadanie większych klas, jeśli każda „podklasa” lub zestaw zadań należy do własnej kategorii? Z własnego doświadczenia odkryłem, że tam, gdzie w przeszłości próbowałem dzielić klasy, teraz czasami łatwiej i łatwiej jest po prostu podzielić kategorie, ale czy przygotowuję się na przyszłe piekło konserwacji (lub inne rodzaj piekła) robiąc to?


title: Licencjonować cały kod?

text: Czy każdy fragment kodu umieszczony w Internecie powinien mieć licencję, czy też powinien wyraźnie zaznaczyć, że znajduje się w domenie publicznej? Piszę prosty skrypt Pythona, który pobierze numer problemu projektu Euler i zapisze plik z tekstem pytania jako komentarz. Tworząc katalog i inicjując git dodałem plik licencyjny, co skłoniło mnie do myślenia, czy w ogóle konieczne jest umieszczenie licencji na coś tak prostego. Czy więc każdy projekt, bez względu na to, jak trywialny powinien mieć wyraźnie wymienioną licencję, czy to po prostu przesada, aby umieścić licencję z tak małymi skryptami? Jaka jest tutaj zalecana praktyka?


title: Wykorzystanie struktur danych i aspekty motywacyjne

text: Przez długie studenckie życie zawsze zastanawiałem się, dlaczego jest ich tak wiele, a mimo to w wielu z nich wydaje się, że w ogóle nie ma ich zastosowania. Opinia wcale się nie zmieniła, kiedy dostałem pracę. Mamy genialne książki o tym, czym one są i jaka jest ich złożoność, ale nigdy nie spotykam się z materiałami, które faktycznie dałyby dobrą wskazówkę do praktycznego zastosowania. Doskonale rozumiem, że muszę przyjrzeć się problemowi, przeanalizować wymagane operacje, poszukać struktury danych, która je sprawnie wykona. Jednak w praktyce nigdy tego nie robię, nie ze względu na syndrom ludzkiego lenistwa, ale dlatego, że w pracy traktuję priorytet czasu nad samorozwojem. Z biegiem czasu pomyślałem, że kiedy będę lepszym programistą, automatycznie użyję ich większej liczby - tak się nie stało, a może po prostu nie. Potem stwierdziłem, że koledzy zwykle na tej samej tablicy co ja - znając mniej więcej trzy struktury danych i ciesząc się z tego całkowicie i odmawiając dalszego omawiania ze mną tej sprawy, wracając do rozmów o "fajnych nowych językach" ' biblioteki, które wykonują zadania dla Ciebie i radość z pracy pod scrumbanem itp. Utknąłem w ArrayLists, Arrays i SortedMap , które bez względu na to, co robię, zawsze wystarczą lub albo podkręcam je, aby były w stanie wykonać moje zadanie. Tak, może to być nieefektywne, ale czy naprawdę musimy się przejmować, czy Intel zwiększa wydajność przez lata, niezależnie od tego, czy poprawiamy nasze umiejętności? Czy nowe maszyny Xeon lub IBM naprawdę dbają o to, czego używamy? Co jeśli lubię budować, ale nie jestem szczególnie podekscytowany, czy jest to n log(n), czy tylko n? W ciągu dwudziestu lat moc obliczeniowa wzrosła ogromnie, co daje nam wolność od krytycznego spojrzenia na to, którego użyć? Oprócz tego pojawiają się nowe, bardziej zoptymalizowane języki, które wydajniej obsługują wiele rdzeni. Dokładniej: chciałbym znaleźć materiał motywacyjny na temat złożonych rzeczywistych obszarów/przypadków możliwych efektywnych zastosowań struktur danych. Byłbym bardzo wdzięczny za udostępnienie odpowiednich zasobów. Jest podobne pytanie, ale w końcu linki ponownie opisują lub robią głupi przykład (pojazdy, studenci lub poszukiwanie świętego Graala - tak, bardzo istotne) i ludzie ciągle odwołują się do "scenariusza decyduje o strukturze danych do wykorzystania". Chcę poznać te złożone scenariusze, aby móc zidentyfikować podobieństwa do mojego scenariusza, a następnie je wykorzystać. Złożone scenariusze, w których ma to naprawdę znaczenie i niekoniecznie mają charakter ilościowy. Wydaje się, że struktury danych dotyczą tylko wydajności i niczego więcej? Wydaje się, że nie ma szczególnej wygody dla programistów w użyciu jednego z drugim. (dopiero gdy znalazłem naukowe źródła o tym, dlaczego dokładnie proste węglowodany są złe, przestałem jeść cukier i cukierki całkowicie zastępując je mniej szkodliwymi owocami - mam nadzieję, że widzisz analogię)


title: Implementacja wzorca poleceń w RESTful API

text: Jestem w trakcie projektowania API HTTP, mam nadzieję, że uczynię go tak RESTful, jak to tylko możliwe. Istnieją akcje, których funkcjonalność rozkłada się na kilka zasobów, a czasami trzeba je cofnąć. Pomyślałem sobie, że brzmi to jak wzorzec poleceń, ale jak mogę go zamodelować w zasób? Wprowadzę nowy zasób o nazwie XXAction, taki jak DepositAction, który zostanie utworzony przez coś takiego POST /card/{identyfikator-karty}/account/{identyfikator-konta}/Deposit AmountToDeposit=100, inne parametry... to będzie faktycznie utwórz nową akcję depozytową i aktywuj jej metodę Do/Wykonaj. W takim przypadku zwrócenie statusu 201 Created HTTP oznacza, że akcja została wykonana pomyślnie. Później, jeśli klient chce sprawdzić szczegóły akcji, może GET /action/{identyfikator akcji} Aktualizacja/PUT powinna być chyba zablokowana, ponieważ nie ma to tutaj znaczenia. Aby cofnąć akcję, pomyślałem o użyciu DELETE /action/{action-id}, który faktycznie wywoła metodę Undo odpowiedniego obiektu i zmieni jej status. Powiedzmy, że jestem zadowolony z tylko jednego cofnięcia, nie muszę wykonywać ponawiania. **Czy to podejście jest w porządku?** **Czy są jakieś pułapki, powody, aby z niego nie korzystać?** **Czy to jest zrozumiałe z POV klientów?**


title: Jak rozmawiać z komputerem

text: Jestem samoukiem, początkującym programistą. Wybrałem język Objective-C, dzięki czemu mogę pisać aplikacje i oprogramowanie Apple. Nauczyłem się na własnej skórze, że Cel-C ma stromą krzywą uczenia się, ale zmuszałem się do patrzenia na to w kółko, dopóki nie zrozumiem. Czuję, że kończę jeden ważny krok, który staje się bardzo wygodny ze składnią. Teraz, gdy wchodzę w kolejny duży krok - dowiedzenie się, co jest możliwe w języku programowania komputerowego - myślę, że całe oprogramowanie jest po prostu rozwijane w ramach: * klas * pętli * wartości logicznych * instrukcji IF/OR * zmiennych * itp. Czy to prawdziwa ocena? Czy myśląc o oprogramowaniu w mojej głowie muszę tylko nauczyć się konwertować to wszystko na powyższe? Prawidłowy? Przepraszam, jeśli to pytanie brzmi śmiesznie, ale dopiero uczę się, jak przyswajać język i mówić (jak mi się wydaje) językiem komputera. Czy istnieje dobra książka lub samouczek, który pomoże zilustrować, jak „mówić tak, jak mówi komputer”?


title: Czy powinienem wykonywać obliczenia w T-SQL czy w programie?

text: Tworzę procedurę składowaną, która rejestruje niektóre dane. Dane ostatecznie muszą znaleźć się w 2 tabelach. Przychodzące dane pochodzą z ciągu JSON zawierającego 15 parametrów, a następnie dane są rejestrowane w bazie danych za pomocą procedury składowanej, którą piszę. Chciałbym wysłać dane do 1 procedury składowanej i WSTAWIĆ je do obu tabel. Pierwsza tabela jest tabelą rejestrowania danych surowych. Będzie używany do debugowania i rozwiązywania problemów. Druga tabela zostanie wykorzystana do wygenerowania raportu. Ta tabela wymaga wykonania kilku prostych obliczeń matematycznych na przychodzących danych. Na przykład: `DECLARE @Table2Fld3 DECIMAL = @IncomingFld9 - @IncomingFld4;` Będę musiał wykonać około 8 takich obliczeń, aby obliczyć wartości dla tabeli 2, a następnie wykonam WSTAWKĘ, aby zapisać dane. Więc moje pytanie brzmi, czy wykonywanie tych obliczeń w T-SQL jest dobrą praktyką? A może byłoby lepiej, gdybym utworzył 2 oddzielne procedury składowane i wykonał obliczenia w moim kodzie? Jednym z kompromisów, który widzę, jest to, że jeśli zrobię to wszystko w kodzie, muszę utworzyć 2 połączenia z bazą danych. **EDYTUJ** Powinienem rozwinąć komentarz „2 połączenia z bazą danych”. Ta aplikacja to usługa systemu Windows, która nawiązuje wielowątkową komunikację serwer/klient. System logowania jest asynchroniczny z komunikacją serwer/klient. Korzystając z istniejącego systemu, abym mógł kierować się wieloma procedurami składowanymi, wymagałoby to 2 wywołań do loggera, który uruchomiłby 2 połączenia z bazą danych.


title: Dlaczego dziedziczenie i interfejsy są ograniczone do członków instancji?

text: Zastrzeżenie: Myślę, że zasady są prawie takie same w większości języków OO, ale ponieważ jestem najbardziej zaznajomiony z C#, będę odnosił się do tego konkretnego języka. Myślę, że użycie atrybutów i odbicia można by w znacznym stopniu ograniczyć, gdyby statyczne składowe stosowały te same zasady, co instancje OO. Statyczne właściwości i metody mogą być „przesłonięte” przez potomków za pomocą słowa kluczowego new, ale nie można ich wymusić zaimplementowania jednego za pośrednictwem interfejsu, nie można też użyć słowa kluczowego „base” (obsługiwane jest tylko jawne nazywanie typu podstawowego). Co gorsza, nie można odwoływać się do elementów członkowskich za pośrednictwem instancji, ale zawsze muszą być konkretnie kwalifikowane z dokładnym typem. Konstruktory mają również ograniczoną obsługę „dziedziczenia”, można wybrać, który konstruktor bazowy zostanie wywołany, ale nie można wymusić na obiekcie obsługi konstruktora, który przyjmuje określone parametry, definiując go w interfejsie. Najlepszą wskazówką, jaką mogłem znaleźć, aby odpowiedzieć na to pytanie, jest ta dotycząca przepełnienia stosu (odpowiedź na inne pytanie). W swojej odpowiedzi Jörg wskazuje trzy zasady, które mają zastosowanie do orientacji obiektowej: * przesyłanie wiadomości, * lokalne przechowywanie i ochrona oraz ukrywanie procesu stanu, oraz * ekstremalne późne wiązanie wszystkich rzeczy. Teraz w pełni rozumiem, że jeśli chcesz przekazać klasę z pełnym stanem z jednej metody do drugiej jako obiekt, te zasady mają sens. Jednak moim zdaniem zasada dziedziczenia, nadpisująca metody bazowe alternatywną lub dodatkową funkcjonalnością, może być również korzystna dla bezstanowej logiki biznesowej. Jednym z przykładów, w których pomocne byłoby wymuszenie na obiekcie implementacji określonego konstruktora, jest deserializacja. Na przykład, gdzie konstruktor powinien zaakceptować węzeł XML. W C# można to dynamicznie zaimplementować za pomocą odbicia, ale błędy w czasie kompilacji i unikanie wzorcowego odbicia przyniosłyby wiele wartości! Statyczne interfejsy metoda/element składowy byłyby pomocne w sytuacjach, gdy niektóre aspekty wartości są specyficzne dla typu, bez żadnego związku z instancją. Na przykład klasa może mieć DisplayName, Unit, Weight, Factor lub inne aspekty, które są takie same we wszystkich wystąpieniach określonego typu, niezależnie od wartości wystąpienia. Atrybuty (lub adnotacje) mogą być użyte do ich wykorzystania bez potrzeby tworzenia instancji, jednak znowu jest to dodatkowy standardowy kod i nie ma możliwości wymuszenia ich implementacji z błędami w czasie kompilacji. Przyznaję, że istnieje wiele prostych sposobów obejścia tych punktów, nie szukam obejścia. Zwracanie wartości statycznej we właściwości instancji jest dość powszechne i tworzenie instancji obiektu nie jest zbyt dużym obciążeniem, aby odczytać aspekty specyficzne dla typu, ale chciałbym poznać tło uzasadniające, dlaczego static rzeczy były systematycznie wykluczane. Słyszałem już wcześniej o „wirtualnym stosie”, ale tak naprawdę nie wiem, jak to działa technicznie (i nie mogę znaleźć żadnego prostego wyjaśnienia w sieci). Czy przyczyny mają charakter techniczny czy filozoficzny? * * * Edycja: opracowanie na temat interfejsów statycznych: Przykład tego, jak myślę, że interfejs statyczny może zapewnić silnie typowaną, sprawdzoną w czasie kompilacji alternatywę dla refleksji: public staticInterface MyStaticInterface { constructor(XmlNode node); ciąg WyświetlanaNazwa { get; } int Waga { pobierz; } } Użycie: public void FillNodesToolBox() { MyStaticInterface[] nodes = Assembly.GetTypes().Where(t => t.Implements<MyStaticInterface>()); for (int i = nodes.Length - 1; i >= 0 ; i--) { Console.WriteLine(string.Concat( nodes[i].DisplayName, " (", nodes[i].Waga.ToString() , „)”)); } } Patrząc wstecz, wygląda to tak, jakby mój obiekt Type dziedziczył po System.Type, dodając do niego pewne właściwości, które różnią się od statycznej składowej... `string.Empty != typeof(string).Emty` ten ostatni nie skompiluje się). Może zaczynam znajdować odpowiedź, ale wydaje mi się, że chodzę w paradoksalnym kręgu, jeszcze nie całkiem „pstryka”….


title: Nauczanie `klas i obiektów w C++ dla studentów uniwersytetu

text: Aby uczyć się klas i przedmiotów na moim uniwersytecie, studenci muszą napisać prostą grę (nine-mens morris lub coś podobnego) przy użyciu Javy. Java jest używana ze względu na biblioteki i obsługę narzędzi. Jaki jest odpowiednik C++. * * * _Tło_ : Jestem naukowcem na uniwersytecie pracującym z dronami. Językiem programowania dla grupy badawczej jest oczywiście C++. Jednak, jak większość uniwersytetów, preferowanym językiem, w którym pracuję, jest Java. Problem polega na tym, że kiedy studenci dołączają do grupy badawczej, ciężko jest „oduczyć się” Javy dla C++. IMHO, bardziej boli niż pomaga. Zamiast tego chcę zaproponować nauczanie C++; ale muszę zaproponować alternatywę dla uczenia się klas i przedmiotów.


title: Prosty, stały system kolejki z pub/sub dla Node.js?

text: > Bardzo spokrewnieni Nodejs: wielu klientów wysyła zapytania przez jedno gniazdo Badam solidny system przekazywania wiadomości dla tej mojej aplikacji. Najłatwiejszym rozwiązaniem byłby Redis pub/sub (jest prosty, skuteczny i użyłbym Redisa do buforowania), ale jak rozumiem, publikowanie jest operacją „jednorazową” tylko dla faktycznie subskrybowanych klientów. Kto zapisze się po publikacji, nie otrzyma wiadomości. Chciałbym mieć możliwość "przechowywania" nieodebranych wiadomości przez jakiś czas, więc jeśli ponownie połączę się z kanałem, odzyskam wiadomości, których nie otrzymałem. Wiem, że systemy takie jak ActiveMQ z mechanizmem ack i permament queue łatwo rozwiązałyby ten problem, ale zastanawiam się, czy nie byłoby prostszego rozwiązania/podejścia. Co myślisz?


title: Usługa Webservice Zwróć ogólny typ wyniku lub zamierzony typ wyniku

text: Buduję serwis internetowy, który w tej chwili zwraca JSON / XML / SOAP... i nie jestem do końca pewien, które podejście do zwracania wyników jest najlepsze. Klient korzystający z Usług będzie zasadniczo Aplikacjami Internetowymi / Mobilnymi Aplikacjami Internetowymi. Ale może pochodzić z różnych WordPress i innych systemów typu Plugin mediów społecznościowych. Jaka byłaby lepsza wartość zwrotu? Ogólna struktura typu „transfer”, która przenosi właściwości ogólne lub typ celowy o odrębnych właściwościach: class GenericTransferObject{ public string returnVal; public string returnType; } Klasa VS PurposedTransferObject_1{ ciąg publiczny Property1; } //a następnie budowanie dodatkowych "typów" dla dodatkowych wartości class PurposedTransferObject_2 { public string PropertyA; ciąg publiczny PropertyB; } To byłby serial zserializowany i zwrócony z wywołania usługi sieciowej za pośrednictwem jakiejś technologii klienckiej, w tym przykładzie JQuery. WIĘC gdybym zadzwonił: /GetDaysInWeek/ albo bym wrócił: {"returnType": "DaysInWeek", "returnVal": "365" } ALBO {"DaysInWeek": "365"} I wtedy by się zaczęło. Z jednej strony jest elastyczność z pierwszym przykładem. Mogę dodać "returnTypes" bez konieczności dostosowywania klienta innego niż odwoływanie się do dodatkowego "indeksu".. ale gdybym musiał dodać właściwość, teraz zmieniam definicję struktury.. Czy w tej sytuacji jest oczywisty wybór?


title: Formatowanie kodu zapytań SQL

text: Czy powinienem dzielić zapytania SQL w różnych wierszach? Na przykład w projekcie, nad którym pracuję, mamy zapytanie, które zajmuje 1600 kolumn! 1600 + znaki tabulacji. Napisałem takie zapytania: "SELECT bla , bla2 , bla FROM bla " . „GDZIE bla=333 I bla=2” . "ZAMÓW PRZEZ nfdfsd..."; Ale zażądali, żebym ułożył je w jednym wierszu i powiedzieli, że mój styl to złe formatowanie. Dlaczego to zła praktyka?


title: Formatowanie instrukcji SQL

text: W ostatnich latach wypracowałem zwyczaj formatowania zapytań SQL `SELECT` w następujący sposób: SELECT fieldNames FROM source JOIN tableSource ON col1 = col2 JOIN ( SELECT fieldNames FROM otherSources ) AS subQuery ON subQuery.foo = col2 WHERE someField = somePredicate Więc ty zobacz mój wzorzec: każde słowo kluczowe znajduje się w osobnym wierszu, a pola tego słowa kluczowego są wcięte o 1 tabulator, a wzorzec jest używany rekursywnie dla podzapytań. Działa to dobrze dla wszystkich moich zapytań `SELECT`, ponieważ maksymalizuje czytelność kosztem miejsca w pionie; ale nie działa w przypadku rzeczy takich jak `INSERT` i `UPDATE`, które mają radykalnie inną składnię. INSERT INTO nazwa_tabeli ( col1, col2, col3, col4, col5, col6, col7, col8 ) WARTOŚCI ( 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8' ), VALUES ( 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8' ) UPDATE nazwa tabeli SET col1 = 'col1', col2 = 'col2', col3 = 'col3', // itd. GDZIE someField = somePredicate Jak widać, nie są one aż tak ładne, a kiedy masz do czynienia z tabelami z dużą ilością kolumn, szybko stają się nieprzyjemne. Czy istnieje lepszy sposób na formatowanie „WSTAW” i „UPDATE”? A co z instrukcjami `CREATE` i innymi operacjami?


title: Jak zintegrować kierownika linii technicznej/funkcjonalnego z zespołem Scrum?

text: Niedawno nowy kierownik liniowy zaczął zarządzać naszym zespołem Scrumowym. Ma ogromne doświadczenie w naszej dziedzinie, ale jest stosunkowo mało doświadczony w Agile/Scrumie. Ma rozległą wiedzę techniczną w zakresie oprogramowania wbudowanego (domena zespołu), które poszłoby na marne, gdyby nie było właściwie wykorzystywane. Jednak zespół jest ostrożny, jeśli chodzi o włączenie menedżera liniowego do zespołu Scrum. Ogólny konsensus jest taki, że menedżer liniowy nie powinien w ogóle być częścią zespołu Scrum. Istnieje wiele problemów, które mogą się pojawić, m.in. zespół może zacząć „zgłaszać” menedżerowi (tj. codzienną aktualizację statusu!), menedżer może zacząć mikro-zarządzać członkami zespołu itp. Na obecnym etapie powiedział już, że czuje się w zespole jak ktoś z zewnątrz . Naprawdę chcemy wykorzystać jego umiejętności techniczne, bylibyśmy głupi, gdybyśmy tego nie zrobili, ponieważ jesteśmy stosunkowo niedoświadczonym i młodym zespołem dwudziestokilkulatków. Jakie byłoby najlepsze podejście, aby zintegrować starszego „technicznego” kierownika liniowego w zespole Scrum i sprawić, by poczuł się _jest_ częścią zespołu?


title: Odpowiednik zasad SOLID dla programowania funkcjonalnego

text: Uważam, że zasady SOLID są całkiem przydatne, gdy myślę o projektowaniu zorientowanym obiektowo. Czy istnieje podobny / równoważny zestaw zasad niezależnych od języka dostosowanych do programowania funkcjonalnego?


title: Zamówienie kodu programistycznego opartego na testach

text: Rozwijam swój pierwszy projekt z wykorzystaniem programowania opartego na testach. Używam Zend Framework i PHPUnit. Obecnie mój projekt ma 100% pokrycie kodu, ale nie jestem pewien, w jakiej kolejności mam pisać kod. Czy mam napisać mój test NAJPIERW z tym, czego oczekuje się od moich obiektów, czy napisać moje obiekty, a następnie je przetestować? Pracowałem nad skompletowaniem kontrolera/modelu, a następnie pisaniem dla niego testu, ale nie jestem pewien, czy o to chodzi w TDD. Jakakolwiek rada? Na przykład napisałem wtyczkę Auth i kontroler Auth i przetestowałem, czy działają poprawnie w mojej przeglądarce; potem zasiadłem do napisania dla nich testów, które wykazały, że w kodzie działającym w przeglądarce były błędy logiczne.


title: Renderowanie bilionów „atomów” zamiast wielokątów?

text: Właśnie zobaczyłem film o tym, co wydawcy nazywają „kolejnym ważnym krokiem po wynalezieniu 3D”. Według osoby, która w nim wypowiada, używają ogromnej ilości _atomów_ pogrupowanych w _chmury_ zamiast wielokątów, aby osiągnąć poziom _nieograniczonej szczegółowości_. Dołożyli wszelkich starań, aby film był zrozumiały dla osób, które nie znają żadnych technik renderowania, a zatem lub do innych celów **pominęli wszystkie szczegóły dotyczące działania ich silnika.** Poziom szczegółowości w ich filmie wygląda imponująco. Dla mnie. * Jak jest możliwe renderowanie scen przy użyciu niestandardowych atomów zamiast wielokątów na obecnym sprzęcie? (Szybkość, pamięć) * Jeśli to jest prawdziwe, dlaczego nikt jeszcze o tym nie pomyślał? Jako programista OpenGL jestem tym naprawdę zaskoczony i naprawdę chciałbym usłyszeć, co mają do powiedzenia eksperci. Dlatego też nie chcę, aby wyglądało to na tanią reklamę i zamieszczam link do filmu tylko na żądanie, w sekcji komentarzy.


title: Jak zademonstrować moje doświadczenie w tworzeniu stron internetowych?

text: Projektanci stron internetowych zazwyczaj muszą mieć przyzwoite portfolio stron internetowych, aby zademonstrować swoje umiejętności. Wygląda na to, że twórcy stron internetowych powinni mieć podobne portfolio, ale każda witryna portfolio, którą może stworzyć programista, może nigdy nie być tak krzykliwa jak projektant stron internetowych, którego głównym celem jest pokazanie dobrego projektu. Czy muszę mieć listę stron, na które mogę wskazać, mówiąc o moim doświadczeniu? A może są inne sposoby na zademonstrowanie mojego doświadczenia, na przykład blog, który opowiada o koncepcjach, które mnie interesują?


title: Licencjonowanie mieszane dla aplikacji

text: Obecnie piszę aplikację, którą myślę o otwartym sourcingu, gdy wyjdę z wersji beta. Chciałbym jednak zachować własność ikon i innych grafik (w rzeczywistości są one dziełem kogoś innego, za wykonanie którego płacę). Czy GPL zezwala na tego rodzaju licencjonowanie mieszane? Czy to wszystko czy nic? Czy istnieją alternatywne licencje, które pozwalają na publikację kodu źródłowego, a jednocześnie nie pozwalają na modyfikację lub ponowne wykorzystanie obrazów?


title: Czy podczas DDD powinniśmy kpić z encji i wartościować obiekty?

text: Po przeczytaniu kilku artykułów o obiektach **Newable** vs **Injectable** oraz o tym, jak te koncepcje odnoszą się do usług, encji i obiektów wartości DDD, miałem wątpliwości co do używania newables w moim kodzie, zwłaszcza w testach jednostkowych. Głównymi kandydatami na newables były obiekty Entities i Value, co oznacza, że zamiast wstrzykiwać te zależności do innych obiektów, należy po prostu „nową” instancję tych obiektów i używać ich bezpośrednio w kodzie. Jednak dobre praktyki DDD zalecają przypisywanie odpowiedzialności podmiotom i przedmiotom wartości, jeśli zostały one uznane za właściwe. Tak więc encje i obiekty wartości będą miały w sobie poważną logikę biznesową. Teraz, jeśli usługa działa na encji lub obiekcie wartości, czy powinienem kpić z encji lub obiektu wartości i przekazać makiety do usługi (kpięcie będzie wymagało `interfejsu` dla obiektów wartości lub encji, co wydaje się być zalecane)? Czy też powinienem po prostu „nowy” obiekt encji/wartości i przekazać konkretną implementację do usługi, naruszając w ten sposób zasadę testowania jednostkowego polegającą na testowaniu tylko jednej jednostki?


title: Chcą stworzyć niestandardowy, graficzny edytor modelu danych przy użyciu HTML5 i SVG

text: Muszę stworzyć edytor graficzny dla naszego modelu danych, który będzie działał w przeglądarce zgodnej z HTML5. Szukam odpowiedniej biblioteki/frameworków do zbudowania. Model jest przechowywany jako xml, ale powinno to być w dużej mierze nieistotne dla technologii front-end. Aby być bardziej konkretnym, chcę zbudować rodzaj edytora diagramów do tworzenia pudełek i linii. Każde pole będzie miało zestaw edytowalnych właściwości i zestaw relacji do innych pól reprezentowanych jako linie różnego rodzaju (pomyśl o diagramie klas UML, ale nieco bardziej złożonym). Musi istnieć możliwość edytowania właściwości każdego pola za pomocą edytora. Potrzebuję pewnego rodzaju paska narzędzi, z którego użytkownicy mogą wybierać nowe skrzynki do tworzenia. Na koniec chciałbym zautomatyzowanego silnika układu, ale użytkownik powinien mieć możliwość nadpisania przez przeciąganie i upuszczanie. Eclipse GEF jest dobrym przykładem tego rodzaju frameworka, którego szukam. Zapewnia paletę narzędzi, menedżerów układu, obsługę przeciągania i upuszczania oraz architekturę MVC. Jednak potrzebuję tego do pracy w przeglądarce, a nie jako aplikacja RCP oparta na Javie. Istnieje wiele doskonałych bibliotek JS do wyświetlania danych (takich jak d3 i jqplot). I zacząłem prototypować w d3. Jest to potężna i elastyczna biblioteka, ale także niskopoziomowa. Wydaje mi się, że musiałbym zaimplementować własny pasek narzędzi i na przykład funkcje przeciągania i upuszczania. To jest coś, co Eclipse GEF zapewnia po wyjęciu z pudełka. Czy muszę samodzielnie zaimplementować całą tę funkcjonalność, czy istnieje biblioteka lub framework, który jest bardziej odpowiedni dla mojego celu?


title: Jak zarządzać informacją o prawach autorskich w projekcie open source?

text: Pracuję nad i dodaję do projektu hostowanego na GitHub, który zawiera ten LICENCE.md (najwyraźniej licencja MIT dosłownie): Copyright (c) 2012 [Acme Corp] Niniejszym udziela się bezpłatnie każdej osobie uzyskanie kopii tego oprogramowania i powiązanych plików dokumentacji („Oprogramowanie”) w celu korzystania z Oprogramowania bez ograniczeń, w tym bez ograniczeń praw do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania podlicencji i/lub sprzedaży kopii Oprogramowania oraz zezwalać na to osobom, którym Oprogramowanie jest dostarczane, pod następującymi warunkami: Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu będą dołączone do wszystkich kopii lub istotnych części Oprogramowania. Wprowadziłem zmiany, ulepszenia itp. (powiedzmy 10% kodu, w liczbach) i opublikowałem kod na moim własnym widelcu GitHub. Co mam zrobić z tą informacją o prawach autorskich? Chciałbym go zaktualizować (np. po prostu dodać nazwę własnej organizacji), ale mówi, że nie. Jak zwykle zarządza się tymi rzeczami? Dodać osobny plik dotyczący praw autorskich?


title: Czy hybrydowy dysk twardy poprawia jakość programowania?

text: Jestem zmęczony tym, jak pospieszny jest mój komputer. To Core2 Duo, 2 GB RAM, Seagate ST3500320AS HDD - nie topowy model, ale całkiem przyzwoity. Zazwyczaj otwieram kilka kopii programu Visual Studio 2008, wiele kart w Firefox, Outlook, MSDN, plus programy, które debuguję, są dość duże, plus to, bez czego Windows myśli, że nie może się obejść, więc kończy się na Menedżerze zadań pokazującym coś w rodzaju 2 ,5 GB wykorzystania pliku stronicowania. Całe powyższe oprogramowanie staje się tak ociężałe, że jest to naprawdę denerwujące. Coś jak klikam pasek menu w Visual Studio - i zamiast po prostu otwierać menu, działa na twardym dysku przez powiedzmy 10 sekund. Chciałbym mieć jakieś magiczne rozwiązanie "nie każ mi myśleć" - tak, aby raz było zainstalowane, a potem ucha zniknęły lub przynajmniej znacznie się zmniejszyły. Nie powinno być bardzo drogie – coś jak obecna cena napędu hybrydowego. Czy napęd hybrydowy w magiczny sposób pomoże raz na zawsze przezwyciężyć mój problem? Czy masz doświadczenie w używaniu napędów hybrydowych do podobnych celów?


title: Jaki jest najlepszy sposób na wydanie małej biblioteki JavaScript typu open source?

text: Napisałem ładną, małą bibliotekę kolorów CoffeeScript o otwartym kodzie źródłowym o nazwie color. Myślę, że jest to przydatne i wierzę, że inni ludzie uznają to za przydatne. Jakie jest najlepsze podejście do poinformowania o tym świata?


title: Konwersja ANTLR AST do kodu bajtowego Java za pomocą ASM

text: Obecnie próbuję napisać własny kompilator, którego celem jest JVM. Ukończyłem krok parsowania przy użyciu klas Java generowanych przez ANTLR i mam AST kodu źródłowego do pracy (w szczególności ANTLR "CommonTree"). Używam ASM, aby uprościć generowanie kodu bajtowego. **Czy ktoś mógłby podać ogólny zarys tego, jak przekonwertować ten plik AST na kod bajtowy?** Moja obecna strategia polega na eksploracji w dół drzewa, generowaniu innego kodu w zależności od bieżącego węzła (za pomocą „Tree.getType()”). Problem polega na tym, że w ten sposób rozpoznaję tylko tokeny z mojego leksera, a nie bardziej złożone wzorce z parsera. **Czy czegoś mi brakuje, czy po prostu podchodzę do tego źle?**


title: Faza początkowa projektu rozwoju oprogramowania

text: Obecnie nasz zespół zajmuje się tworzeniem aplikacji internetowych, a teraz przechodzimy do aplikacji Windows Forms. Stworzyłem fazę inicjacji dla naszej struktury projektu Windows Forms. np.: ApplicationSolution --> Security Project (uwierzytelnianie logowania) Użytkownicy będą zarejestrowani z różnymi aplikacjami w naszej bazie danych aplikacji. np: ProjectApplicationId|ProjectName | UserId 1 |ProjectApplication1| użytkownik 2 |ProjektAplikacja2| użytkownik b. Uruchom aplikację (Start) c. W oknie dialogowym Bezpieczeństwo aplikacja automatycznie pobiera identyfikator użytkownika i widzi wszystkie zarejestrowane aplikacje przy użyciu System.Security.Principal.WindowsIdentity.GetCurrent() np.: Prototype Welcome User! Wybierz poniżej aplikacje, w których jesteś zarejestrowany: ProjectApplication1 <--to będzie menu rozwijane ProjectApplication2 Password: [**********************] [Przycisk aplikacji dostępu] d . Użytkownik wybiera aplikację za pomocą swojego hasła m.in. Jeśli hasło jest nieprawidłowe (aplikacja.exit()) w przeciwnym razie wykonaj Wybraną aplikację, np.: Wybrana jest aplikacja ProjectApplication1, a następnie wykonaj ProjectApplication1 --> ProjectApplication1 --> ProjectApplication2 --> Many to come ++, jeśli ProjectApplications zostało zamknięte, a następnie zrestartuj aplikację bezpieczeństwa. Moje pytania dotyczące tego przypadku użycia: 1. Czy mój przypadek użycia jest możliwy? 2. Czy możesz dać mi jakieś zalecenia? Obecnie używamy konfiguracji i wdrażania do tworzenia instalatora w każdej aplikacji Windows Forms.


title: Pomieszanie polimorfizmu

text: Czytałem kiedyś w książce o wyjątku, gdzie "obiekt typu Exception może być instancją dowolnej podklasy Exception". Trochę to rozumiem, ale nadal jest zamieszanie, czy ktoś może mi wyjaśnić znaczenie tego?


title: Czego powinienem się nauczyć, ćwiczyć, aby uchwycić lub podążać za modą tworzenia interfejsu internetowego?

text: Nie jestem całkowicie programistą Web UI, rzeczywiście pracuję nad wdrożeniem. Ale interesują mnie fantastyczne efekty jakiejś świetnej strony internetowej. Wiem trochę o javascript, jquery, extJS, Ajax czy Flex robią tego rodzaju fantastyczną pracę. Co mnie niepokoi: 1. Czy istnieją inne techniki wykonujące taką pracę? 2. W co powinienem kopać głęboko? 3. Jak mogę skutecznie poprawić techniki w tym zakresie?


title: Argumenty za i przeciw kompatybilności wstecznej dla nowych projektów iOS

text: W chwili pisania tego tekstu iOS 6 był dostępny od około 3 miesięcy. W fazie propozycji nowego projektu iOS klient prosi o wsteczną kompatybilność danej aplikacji, aż do iOS 4.0. Zgodnie z obecnym harmonogramem, ta aplikacja ma zostać uruchomiona we wrześniu 2013 r., w pobliżu prawdopodobnego wydania kolejnej wersji iOS (najprawdopodobniej 7.0). Moje przeczucie podpowiada mi, że wspieranie iOS 4.0 jest śmieszne i bezsensowne wspieranie iOS 5.0 w tym projekcie. Do września 2013 r. większość wszystkich użytkowników iOS znających aplikacje będzie albo posiadała urządzenie obsługujące tylko iOS-6 (takie jak iPhone 5, iPad 4/mini) lub zostanie zaktualizowane do najnowszej wersji iOS. Oprócz statystyk mam wrażenie, że osoby pozostawione na wcześniejszych wersjach iOS prawdopodobnie i tak nie będą polować na najnowsze i najlepsze aplikacje, przez co nie będą interesujące dla klienta. Są to jednak w najlepszym razie domysły i _Mam trudności z poparciem moich domysłów solidnymi odniesieniami z autorytatywnych źródeł_. Czy znasz autorytatywne źródła (takie jak Apple lub główne studia aplikacji) wyrażające swoją opinię na temat kompatybilności wstecznej **dla iOS** i czy możesz podać jeden lub więcej linków? Najbardziej autorytatywne pytanie przyznam ze znacznikiem wyboru „prawidłowa odpowiedź”.


title: Rozważania, którą wersję Java uruchomić w środowisku produkcyjnym

text: Niektórzy ludzie korzystają z najnowocześniejszych technologii – aktualizują dzień, w którym coś jest aktualizowane. W produkcji nie jest to odpowiednie. Badanie, czy bieżąca wersja (Java 7) jest gotowa do produkcji, generuje znaczną ilość starego materiału, który może już nie być poprawny (w momencie pisania tego tekstu Java 7 była niedostępna od półtora roku, co wydaje się być dość długie) . Jakie uwagi należy wziąć pod uwagę, aby określić, czy należy zaktualizować środowisko produkcyjne do nowszej wersji języka Java?


title: Sposób obsługi, fasola jako argument i obowiązkowe atrybuty

text: Istnieje usługa: createUser(User user), w której możesz utworzyć nowego użytkownika z tak wieloma atrybutami (linie `name`, `address`...). Teraz niektóre atrybuty użytkownika są obowiązkowe. Inne atrybuty nie są obowiązkowe (np. „pseudonim” lub „obraz”). Problem polega na tym, że z zewnątrz nie widać różnicy (w czasie kompilacji). Nie możesz zmusić się do ustawienia tylko pól obowiązkowych; co więcej, lista pól obowiązkowych może się zmienić w przyszłości i Twój kod przestanie działać (podczas kompilacji). Możemy więc * `createUser(int userId, String username...)` \- rozbić właściwości ziarna i nie używać ziarna jako argumentu. Teraz każda zmiana zostanie odzwierciedlona w API, ale sygnatury metod mogą stać się ogromne. Także przy przeciążaniu metod dla różnych kombinacji pól obowiązkowych z nieobowiązkowymi - to też może być bałagan. * używaj wielu ziaren i używaj metod takich jak (nadane nazwy są tylko ilustracyjne) `createUser(UserCoreData user)`, `createUser(UserFull user)`, ale to i tak nie pomoże. * lub posiadanie usługi przechowywania obowiązkowych danych Użytkownika, a następnie posiadania dodatkowych usług przechowywania dodatkowych, nieobowiązkowych danych. * (EDITED) lub podzielić `User` na logiczne składniki (np. mniejsze ziarna) `Address`, `DateFrom`... i użyć ich w metodach obsługi. Czy istnieje pragmatyczny sposób opisania metody obsługi i jej argumentów w takim przypadku? (w Javie).


title: Co twoja uczelnia zrobiła dobrze i co mogła poprawić?

text: Niezależnie od tego, czy uczyłeś się od uniwersytetu, mentora, czy czego (jestem bardziej zainteresowany uniwersytetem/ekwiwalentem), co instytucja zrobiła dobrze? A jak myślisz, co mogliby poprawić, ucząc się Twoich umiejętności programistycznych? Jestem ciekawa, jak wszyscy odczuli, że ich instytucja poradziła sobie z uczeniem ich, jak zostać dobrym programistą.


title: Jaka jest prawdziwa odpowiedzialność klasy?

text: Zastanawiam się, czy w OOP można używać czasowników opartych na rzeczownikach. Natknąłem się na ten genialny artykuł, choć nadal nie zgadzam się z jego treścią. Aby nieco wyjaśnić problem, artykuł stwierdza, że nie powinno być np. klasy `FileWriter`, ale ponieważ pisanie jest **działaniem**, powinno to być **metoda** klasy ` Plik`. Zdasz sobie sprawę, że często jest to zależne od języka, ponieważ programista Ruby prawdopodobnie byłby przeciwny użyciu klasy `FileWriter` (Ruby używa metody `File.open` w celu uzyskania dostępu do pliku), podczas gdy programista Java nie. Mój osobisty (i tak, bardzo skromny) punkt widzenia jest taki, że takie postępowanie złamałoby zasadę pojedynczej odpowiedzialności. Kiedy programowałem w PHP (ponieważ PHP jest oczywiście najlepszym językiem do OOP, prawda?), często używałbym tego rodzaju frameworka: <?php // To tylko przykład, który właśnie zrobiłem w locie, może zawierać błędy class Użytkownik extends Rekord { protected $name; public function __construct($name) { $this->name = $name; } } class UserDataHandler extends DataHandler /* zna obiekt pdo */ { public function find($id) { $query = $this->db->prepare('SELECT' . $this->getFields . ' FROM users WHERE = :id'); $query->bindParam(':id', $id, PDO::PARAM_INT); $query->setFetchMode( PDO::FETCH_CLASS, 'użytkownik'); $zapytanie->wykonaj(); return $query->fetch( PDO::FETCH_CLASS ); } } ?> Rozumiem, że przyrostek DataHandler nie dodaje niczego istotnego; chodzi jednak o to, że zasada pojedynczej odpowiedzialności dyktuje nam, że obiekt używany jako model zawierający dane (może być nazywany Rekordem) nie powinien mieć również odpowiedzialności za wykonywanie zapytań SQL i dostęp do bazy danych. To w jakiś sposób unieważnia wzorzec ActionRecord używany na przykład przez Ruby on Rails. Natknąłem się na ten kod C# (tak, czwarty język obiektowy użyty w tym poście) niedawno: byte[] bytes = Encoding.Default.GetBytes(myString); mójString = Kodowanie.UTF8.GetString(bajty); I muszę powiedzieć, że nie ma dla mnie większego sensu, że klasa `Encoding` lub `Charset` faktycznie _koduje_ ciągi znaków. Powinna być jedynie reprezentacją tego, czym naprawdę jest kodowanie. Dlatego skłaniałbym się do myślenia, że: * Nie jest obowiązkiem klasy `File` otwieranie, czytanie lub zapisywanie plików. * Nie jest obowiązkiem klasy `Xml` do serializacji samego siebie. * Zadawanie zapytań do bazy danych nie jest obowiązkiem klasy `User`. * itd. Jeśli jednak ekstrapolujemy te pomysły, dlaczego `Object` miałby mieć klasę `toString`? Przekształcenie się w sznurek nie jest obowiązkiem Samochodu ani Psa, prawda? Rozumiem, że z pragmatycznego punktu widzenia pozbycie się metody `toString` dla piękna przestrzegania ścisłej formy SOLID, która sprawia, że kod jest łatwiejszy w utrzymaniu, czyniąc go bezużytecznym, nie jest akceptowalną opcją. Rozumiem również, że może nie być na to dokładnej odpowiedzi (która byłaby bardziej esejem niż poważną odpowiedzią) lub że może być oparta na opinii. Niemniej jednak nadal chciałbym wiedzieć, czy moje podejście rzeczywiście jest zgodne z tym, czym naprawdę jest zasada pojedynczej odpowiedzialności. Jaka jest odpowiedzialność klasy?


title: Kiedy przestać debugować

text: Przeczytałem artykuł o naprawianiu błędu w tym poście. Jakiego procesu zwykle używasz podczas próby debugowania problemu/problemu/błędu w swoim oprogramowaniu?. Jedną z odpowiedzi, które zauważyłem, jest „odpocznij”, gdy spędziłeś zbyt dużo czasu, aby spróbować naprawić błąd. Uważam, że to też dobry pomysł. Ale czasami mam napięty termin, kiedy pojawia się jakiś tajemniczy błąd. Kiedy tak się dzieje, zwykle myślę o przepisaniu kodu, zamiast spędzać więcej czasu na naprawie błędu. Moje pytanie brzmi, kiedy pomyślisz, że lepiej przepisać kod niż go naprawić? Lub jakich kryteriów możemy użyć, aby określić, czy należy naprawić błąd, czy przepisać kod?


title: Czy Prolog jest przydatny zawodowo?

text: Prologu uczyłem się wiele lat temu na uniwersytecie. W życiu zawodowym nigdy nie musiałem korzystać z Prologu. Czy przegapiłem coś wyjątkowego? O ile dobrze pamiętam Prolog wymaga zupełnie innego sposobu myślenia niż znane języki programowania. **Czy Prolog naprawdę jest kiedykolwiek używany do wdrażania czegoś przydatnego zawodowo?**


title: Oświadczenia jednowierszowe i dobre praktyki

text: Ostatnio nabrałem nawyku, na który wielu z was może się krzywić, ale który ostatecznie pomaga mi mieć oko na globalną strukturę kodu, a nie na strukturę pojedynczej, (czasem) powtarzalnej metody: grupowania liczb instrukcji w jednym wierszu, jak to: textBox1.Text = "Coś!"; textBox2.Text = "Kolejna rzecz!"; textBox3.Text = "Jeszcze jedna rzecz!"; w przeciwieństwie do textBox1.Text = "Coś!"; textBox2.Text = "Kolejna rzecz!"; textBox3.Text = "Jeszcze jedna rzecz!"; Robię to w przypadku powtarzających się zadań, aby utrzymać „piękno” kodu i ułatwić mi śledzenie struktury programu, ale przyznaję, że może to nie być dobra praktyka. Właściwie często go używam, więc chciałbym wiedzieć, co sądzisz na ten temat. Ponadto, czy uważasz, że każdy, kto kiedykolwiek będzie musiał dbać o mój kod, ma problemy z takim podejściem?


title: Zasoby internetowe TAOCP

text: Jestem studentem CS i jestem naprawdę zdumiony, że nie wiedziałem o Donaldzie Knuthu i jego TAoCP. Teraz, kiedy już to robię, naprawdę nie mogę się doczekać, aby się w to zagłębić. Czy dobrym pomysłem byłoby przejście na cały tom 4? Poza tym, czy jest miejsce w sieci, gdzie mogę poczytać (zwłaszcza algorytmy i część DS)? dzięki, Yati


title: Budowanie aplikacji wokół teoretycznej waluty

text: Obecnie zajmuję się projektowaniem aplikacji, która obejmuje sprzedaż usługi. Aplikacja będzie docelowo używana na całym świecie i będzie musiała dostosować ceny w zależności od lokalizacji użytkownika. Czy dobrym pomysłem jest przechowywanie/praca ze wszystkimi cenami w absolutnej jednostce? Na przykład - kredyty. I mogę określić reguły konwersji, takie jak 1 kredyt = 1 USD. Na jakie scenariusze będę musiał uważać, jeśli to zrobię (i czy powinienem to robić)? Jedną rzeczą, o której mogę pomyśleć, są problemy podczas audytu, jeśli okresowo zmieniam reguły konwersji. W takim przypadku będę musiał rozpocząć przechowywanie reguł konwersji według daty, a proces konwersji będzie wymagał również czasu transakcji, aby podać prawidłową kwotę w dowolnej walucie na ten czas. Czy za bardzo to komplikuję?


title: dynamiczne generowanie klasy z typów, które są pobierane w czasie wykonywania

text: robi następujące możliwe w C# (lub w dowolnym innym języku) **1.** Pobieram dane z bazy danych. W czasie wykonywania mogę obliczyć nie. kolumn i typów danych pobranych kolumn. **2.** Następnie chcę "wygenerować" klasę z tymi typami danych jako polami. Chcę również przechowywać wszystkie pobrane rekordy w kolekcji. Problem polega na tym, że chcę wykonać oba kroki **1** i **2** w runt ime, czy to możliwe? Obecnie używam C#, ale mogę przejść do czegoś innego, jeśli zajdzie taka potrzeba.


title: Pula połączeń

text: Jako przykład używam PostgreSQL z pulą połączeń warstwy aplikacji, taką jak pula połączeń JDBC. Konkretna pula połączeń JDBC nie jest ważna. Moje pytanie dotyczy bardziej faktycznego buforowania połączenia z bazą danych. Połączenia z bazą danych są tworzone przez dostarczenie źródła danych (z danymi uwierzytelniającymi) do sterownika JDBC, który prawdopodobnie działa jako pomost ze sterownikiem zgodnym z ODBC, który pobiera standardowy zestaw poleceń i tłumaczy je na formaty specyficzne dla bazy danych. Oprócz sterownika JDBC aplikacja może korzystać z puli połączeń, co zmniejsza obciążenie/opóźnienia podczas tworzenia i zamykania połączeń z bazą danych. Te połączenia są przechowywane w puli w "tablicy", jeśli chcesz. Każde połączenie jest ustawione na „nieużywane”. Gdy połączenie jest potrzebne, pula połączeń oznacza połączenie jako „w użyciu” i przekazuje je do wątku w aplikacji, która zażądała połączenia. Gdy wątek się z nim skończy, zwraca połączenie do puli, w której może z niego korzystać inny wątek w programie wielowątkowym. Po n bezczynności połączenie jest usuwane z puli w celu zwolnienia zasobów. Teraz, gdy połączenie jest w puli, czy samo połączenie tcp z bazą danych pozostaje aktywne? Innymi słowy, gdy wątek pobiera połączenie z puli, konfiguracja sterownika PostgreSQL JDBC (dane uwierzytelniające) jest buforowana, a most do sterownika ODBC jest buforowany, więc dużo pracy jest już wykonane w zakresie pobierania standardowe polecenie sql i przekładając je na konkretne polecenie bazy danych. Ale czy pula połączeń z bazą danych również buforuje połączenie TCP, to znaczy utrzymuje aktywne połączenie TCP i otwiera się na bazę danych, gdy połączenie jest nadal w puli?


title: Narzędzia zapewniające spełnienie oczekiwań klientów

text: Byłem ostatnio na rozmowie kwalifikacyjnej i zapytano mnie, czy używam jakichkolwiek narzędzi, aby spełnić oczekiwania klienta dotyczące projektu. Naprawdę nie mogłem wymyślić żadnych rzeczywistych narzędzi poza takimi rzeczami jak JIRA, aby zapewnić śledzenie błędów/prośby o funkcje. Czy ktoś jeszcze został o to zapytany? Jaka byłaby dobra odpowiedź? Dziękuję!


title: Czy rotujesz zwinnych członków zespołu?

text: W moim zespole sprinterskim mam długoletnich programistów. Znają domenę, są w firmie od ponad 5 lat i jako zespół mamy całkiem niezły wskaźnik wypalania. Istnieją inne zespoły sprintów, niektóre z równie doświadczonymi programistami, a inne z nowszymi programistami, którzy próbują przyspieszyć. Mój menedżer martwi się, że wszystkie nasze jajka są w jednym koszyku i chce rotować jednego lub dwóch doświadczonych programistów w zamian za kilku nowych facetów. Widzę ich punkt widzenia, ale widzę też problemy, które się z tym wiążą - jestem pewien, że są inne, ale to tylko kilka z mojej głowy. 1. Nowy programista będzie miał znacznie mniejszą szybkość pracy 2. Nowy programista obniży szybkość pracy przynajmniej jednej doświadczonej osoby, ponieważ stale zadaje pytania. 3. Nowy programista opuszcza zespół na koniec, aby dołączyć do innego zespołu - miejmy nadzieję, że będzie pamiętał, co z nami zrobił. 4. Nowy programista opuszcza firmę - wow, zmarnowaliśmy całą masę czasu. Dodam, że organizacja zmaga się ze zwinnością. Była to tradycyjna firma zajmująca się tworzeniem wodospadów i nadal myśli o dużych wydaniach i przedmiotach, które „oczekuje” się w wydaniu. Jeśli byłeś w podobnej sytuacji, chciałbym poznać Twoje doświadczenia – czy rotacja członków zespołu działa? Czy lepszym rozwiązaniem byłoby programowanie w parach lub inne metody?


title: Przekazanie projektu jedności

text: Mam kogoś, kto chce, żebym stworzył dla nich grę. Nie zamierzam dalej rozwijać gry po jej pierwszym wydaniu (chce, żebym stworzył ją do użytku komercyjnego). Aby projekt był łatwy, myślałem o użyciu silnika gry Unity. Powiem teraz, że jestem dzieciakiem zmierzającym do college'u, chce mi zapłacić, ale nie chcę, żeby mi płacono, a to dla jego osobistego przedsięwzięcia biznesowego, obawiam się, jeśli to przekażę projekt do bardziej ugruntowanego profesjonalisty, nawet jeśli korzystam z kontroli źródeł, zlekceważy to, wyrzuci, a część, której najbardziej się boję, powie mu, że wykonałem niegrzeczną lub leniwą pracę (ponieważ używałem Unity). Jakie są Twoje opinie na temat tej sytuacji i wykorzystania Unity w ten sposób?


title: Klient wiersza poleceń SVN: checkout odrzucony po zmianie hasła LDAP „svn: OPCJE” (repo) „autoryzacja nie powiodła się” (ale działa w TortoiseSVN)

text: Podczas korzystania z klienta svn wiersza poleceń/terminalu, kolega otrzymuje komunikat o błędzie „svn: OPCJE „[repo] „...autoryzacja nie powiodła się”, gdy próbuje wyewidencjonować repozytorium jako jego lokalną kopię roboczą. Kiedyś byli w stanie to zrobić, ale ostatnio musieli zmienić swoje hasło (okresowa rutynowa polityka bezpieczeństwa). I przestało działać. UWAGA: Polecenie svn check prosi o hasło za każdym razem (które podają - tj. ich nowe). ALE dziwnie nie mają problemu z SVN żółwia, działa na tym. Podają swój zwykły login i nowe hasło i to działa. Nasza konfiguracja to zwirtualizowana maszyna CentOS Linux z kilkoma kontami użytkowników Linux, na których odbywa się rozwój, a centralne repozytorium SVN znajduje się na osobnym serwerze, uwierzytelnianie odbywa się przy użyciu naszego loginu LDAP (tj. tego samego loginu korporacyjnego używanego do logowania się na naszych maszynach z systemem Windows). Logujemy się jako użytkownicy Linuksa do naszego serwera deweloperskiego z naszych maszyn z systemem Windows, korzystając ze standardowych narzędzi terminalowych SSH, m.in. PuTTY, MobaXTerm lub CygWin. Kiedy zmieniam hasło, nie mam tego samego problemu, mogę dokonać płatności. Widziałem wiele pytań dotyczących tego komunikatu o błędzie podczas przeszukiwania różnych forów w Google, ale żadne nie dostarczyło mi jeszcze rozwiązania. Jedno z rozwiązań, które znalazłem, sugeruje wyczyszczenie lub usunięcie lokalnej pamięci podręcznej zawierającej uwierzytelnianie, w folderze .subversion, próbowaliśmy tego, ale nadal ten sam problem. Próbowałem również wyewidencjonować do innego folderu. Wygląda więc na to, że wyczyściliśmy wszelkie ślady haseł z pamięci podręcznej, ale nadal je odrzuca. Czy może być inne miejsce na naszej maszynie CentOS Linux, które buforuje login Co oznacza OPCJE (może to być ustawienie gdzieś na naszym komputerze deweloperskim lub na serwerze repo SVN?) Czy może to być pamięć podręczna HTTP Proxy przechowywanych poświadczeń mojego kolegi gdzieś - więc musimy to wyczyścić po zmianie hasła? (Pomyłkowo opublikowana na superuser.com (która dotyczy użytkowników), więc zamknęłam ją tam i przeniosłam tutaj)


title: Czy niektóre zajęcia z matematyki powinny być wymagane do uzyskania dyplomu z informatyki?

text: W przypadku dyplomu z informatyki (CS) na wielu uczelniach niektóre kursy matematyki są **wymagane**: rachunek różniczkowy, algebra liniowa i matematyka dyskretna to tylko kilka przykładów. Jednak odkąd zacząłem pracować w prawdziwym świecie jako programista, muszę jeszcze naprawdę wykorzystać _część_ wiedzy, którą nabyłem od razu podczas tych zajęć. _Matematyka dyskretna może być jedynym wyjątkiem_. Moje pytania: **Czy te zajęcia z matematyki powinny być wymagane do uzyskania dyplomu z informatyki? A może lepiej by służyły jako fakultatywne?** Wzywam nawet to, że niektóre lekcje matematyki pomagają nawet w wymaganych lekcjach CS. Na przykład nigdy nie używałem algebry liniowej poza samą klasą matematyki. Słyszałem, że jest używany w grafice komputerowej, ale nigdy nie uczęszczałem na te zajęcia, a jednak algebra liniowa była _wymagana_ do uzyskania stopnia CS. Osobiście uważam, że może lepiej służyć jako opcja do wyboru niż wymóg, ponieważ jest bardziej specyficzna dla gałęzi CS niż ogólnego CS. Z postu na Slashdot Debata CS Profs Rola matematyki w edukacji CS: > _'Zbyt długo uczyliśmy informatyki jako dyscypliny akademickiej > (tak jakby wszyscy nasi studenci mieli dalej doktoryzować się, a potem stawali się CS > wykładowcami członków), mimo że większość z nas w przeważającej mierze > poszukuje kariery, w której stosują informatykę.'_


title: Biznes próbuje podejmować decyzje techniczne

text: Często spotykamy się ze scenariuszami, w których firma obiecuje klientowi nową funkcję. Firma obiecuje, że funkcja zostanie zaimplementowana w określony sposób. Te szczegóły techniczne obiecane przez firmę są zwykle słabe. Niestety klient jest już skonfigurowany i chce, aby ta funkcja została zaimplementowana w sposób opisany przez firmę. W końcu firma po prostu chce, aby ta funkcja została ukończona bez względu na jakość i łatwość konserwacji. Czy istnieje dobry sposób na odepchnięcie? Jak możemy wyjaśnić firmie, że dostarczanie szczegółów technicznych przed zebraniem wymagań jest złym pomysłem?


title: Wprowadzenie programowania funkcjonalnego do Twojego środowiska programistycznego

text: To długa historia, ale postaram się ją podsumować najlepiej, jak potrafię. Jesteśmy sklepem .NET, który pisze oprogramowanie dla różnych typów funduszy. Na przykład piszemy oprogramowanie do zarządzania roszczeniami zdrowotnymi, oprogramowanie do zarządzania emeryturami, oprogramowanie 401(k) i inne rzeczy o charakterze finansowym. Teraz wkraczamy w nową sferę: pracy z instrumentami pochodnymi i analityką ilościową, co wydaje się bardzo ekscytujące. To jest coś, co będzie miało miejsce w ciągu najbliższych 8-12 miesięcy, jak mi powiedziano. Teraz sam nauczyłem się trochę programowania funkcjonalnego, głównie powierzchownego spojrzenia na różne języki za pośrednictwem tej książki, ale nigdy tak naprawdę nie zagłębiałem się w to. Teraz, ponieważ jesteśmy sklepem .NET, pomyślałem, że F# może być dobrym wyborem, ponieważ moglibyśmy potencjalnie wykorzystać niektóre biblioteki .NET i być może istniejącą wiedzę. Moje pytanie brzmi, od czego zacząć? Mam wyjątkowo trudny czas, próbując dowiedzieć się, czy powinienem iść z Haskellem, Erlangiem, Scala, F# itp. Wszyscy wydają się bardzo interesujący i zdolni, i szczerze mówiąc, może to być dobra szansa na wyrwanie się z tego, że jest tak zależny od Microsoftu. Czy ktoś miał podobną sytuację? Jeśli tak, jakie było Twoje doświadczenie w przejściu na funkcjonalność i co wybrałeś i dlaczego? Wiem, że to dość duże pytanie, ale nie znam żadnych programistów, którzy używają teraz metod funkcjonalnych, więc nie mam innego wyjścia, jak nieustanne Googling i znajdowanie wszędzie płomiennych wojen w najlepszym języku funkcjonalnym.


title: Jak uzasadnić aktualizacje frameworka

text: Zastanawiam się, jak uzasadnić zmiany tych, którzy kontrolują budżety. Na przykład, jeśli mamy Enterprise Library 4 na niektórych systemach, a najnowsza wersja to 5, czy warto ją zaktualizować? Jak to uzasadniasz? Czy najlepiej jest stale starać się aktualizować frameworki, z których korzystają systemy. A może lepiej zrobić duży lifting co x lat?


title: Zacznij czytać kod Ruby (on Rails)

text: Jestem doświadczonym programistą, który ma spore doświadczenie w metaprogramowaniu. Właśnie znalazłem drogę do Rubiego i chcę zrozumieć więcej elementów wewnętrznych projektu Rails (i powiązanych). Nawet jeśli rozumiem koncepcje wysokiego poziomu, trudno mi uzyskać przegląd tych projektów. Zastanawiam się, jak inni podchodzą do tego problemu? Jak mógłbyś na przykład podejść do kodu źródłowego Mongoid, aby dobrze zrozumieć jego wnętrze?


title: Dokumentacja specyfikacji wymagań oprogramowania przez profesjonalistów

text: Chciałem tylko wiedzieć, jakie jest znaczenie SRS (specyfikacji wymagań oprogramowania) w programowaniu? a jakie są techniki stosowane w przygotowaniu SRS.. również kto pisze SRS.. czy to programiści?


title: Czy średnia liczba błędów na lokalizację jest taka sama dla różnych języków programowania?

text: Powiedziano mi, że średnia liczba błędów/defektów na linię kodu jest „stała” dla różnych języków programowania. 10 KLOC w Ruby miałoby taką samą liczbę błędów jak 10 KLOC w c++. Argument jest zwykle używany do promowania używania języków ekspresyjnych (pomyśl python/ruby nad c++/asembler), ponieważ liczba wierszy opisujących tę samą funkcjonalność byłaby mniejsza. Czy ktoś wie, skąd pochodzi to twierdzenie? Czy języki wyższego poziomu prowadzą do mniejszej liczby błędów?


title: Jaka jest zaleta wdrożenia złożonego wzorca projektowego?

text: Najwyraźniej złożony wzorzec projektowy reprezentuje w ten sam sposób jednostki indywidualne i zbiorowe. Jaka jest z tego korzyść? Na przykład, jeśli mam podklasę klasy, dlaczego miałbym traktować obiekty obu klas w ten sam sposób? Na przykład, jeśli „tuńczyk” jest podklasą „ryby”, dlaczego miałbym chcieć mieć takie same implementacje dla metod obiektów w obu klasach?


title: Zastosowanie implementacji 3 stosów w jednej macierzy [potrzeba]

text: Cóż, toczy się wiele dyskusji na temat implementacji 3 [lub 2 stosów] w pojedynczej tablicy. [Pytanie do rozmowy kwalifikacyjnej], ale jaka jest **rzeczywista potrzeba lub zastosowanie** do wdrażania takich stosów? czy nie możemy przydzielić pamięci jako 3 oddzielnych stosów [tablicy]?. w każdym razie przydzielamy array[size * 3] w tej pojedynczej tablicy. kilka linków, które omawiają niektóre: użyj-tablicy, aby wdrożyć trzy stosy, jak-wdrożyć-3-stosy-w-jednej-macierzy, wydajnie


title: Jak radzić sobie z połączeniami z bazą danych w module biblioteki Pythona

text: Stworzyłem bibliotekę w Pythonie, która zawiera funkcje dostępu do bazy danych. Jest to owijająca biblioteka wokół bazy danych aplikacji firm trzecich, napisana ze względu na fakt, że aplikacja ta nie oferuje przyzwoitego API. Teraz początkowo pozwalałem każdej funkcji otwierać połączenie z bazą danych na czas trwania wywołania funkcji, co było OK, dopóki logika mojego programu nie użyła zagnieżdżonych wywołań funkcji, w których następnie wywołałbym konkretną funkcję kilka tysięcy razy. To nie było zbyt skuteczne. Profilowanie to pokazało, że obciążenie było związane z konfiguracją połączenia z bazą danych - raz na wywołanie funkcji. Przeniosłem więc otwarte połączenie z funkcji (funkcji) do samego modułu, aby połączenie z bazą danych zostało otwarte po zaimportowaniu modułu biblioteki. To dało mi akceptowalną wydajność. Teraz mam dwa pytania dotyczące tego. Po pierwsze, czy muszę się obawiać, że nie zamykam już jawnie połączenia z bazą danych i jak mogę to zrobić jawnie przy tej konfiguracji? Po drugie, czy to, co zrobiłem, zbliża się do sfery dobrych praktyk i jak inaczej mógłbym do tego podejść?


title: Jak daleko zajść w definiowaniu typów prymitywnych, takich jak int

text: Czy zadajesz sobie trud wpisywania większości typów liczb w ten sposób? A może po prostu używasz "int" w większości miejsc? Może to być ważniejsze w moim obecnym projekcie, ponieważ jest oparty na kliencie / serwerze, a typy muszą się zgadzać, gdy są przesyłane przez przewód jako dane binarne - ale zastanawiałem się tylko, jak daleko ludzie posuwają się z tym ogólnie: types.h: typedef int16_t Version; typedef int32_t Długość Pakietu; typedef int32_t Tożsamość; typedef int32_t Numer Gabinetu; typedef int64_t Czas64; typedef int64_t RFID; typedef int64_t AdresSieciowy; typedef int64_t PathfinderAddress; typedef int16_t PathfinderPan; typedef int16_t PathfinderChannel; typedef int64_t NumerSeryjny Telefonu; typedef int16_t NumerPin; typedef int16_t Interwał rejestrowania; typedef int16_t Opóźnienia w minutach; typedef int16_t ReminderDelayMinutes; typedef int16_t Opóźnienie EskalacjiMinuty; typedef float Kalibracja Offset; typedef float AnalogValue; typedef int8_t PathfinderEtrx; typedef int8_t Współczynnik tłumienia; typedef int8_t RankNumber; typedef int8_t SlavePort; typedef int8_t EventLevel; typedef int8_t Procent; typedef int8_t NumerCzujnika; typedef int8_t Kod roli; typedef int8_t Godzina; typedef int8_t Minuta; typedef int8_t Drugi; typedef int8_t Dzień; typedef int8_t Miesiąc; typedef int16_t Rok; typedef int8_t Poziom Eskalacji; Wydaje się logiczne, aby spróbować i upewnić się, że ten sam typ jest zawsze używany do określonej rzeczy, aby uniknąć przepełnień, ale często widzę kod, w którym „int” jest używany prawie wszędzie. Definiowanie typów często prowadzi jednak do kodu, który wygląda trochę tak: DoSomething(EscalationLevel escalationLevel) { ... } Co sprawia, że myślę, który bit faktycznie opisuje parametr - typ parametrów czy nazwa parametrów?! Dziękuję.


title: Czy będzie mnie dużo kosztować, jeśli wybiorę ASP.NET i IIS?

text: Zamierzam zbudować rodzaj sieci społecznościowej online w ASP.NET. Mam zamiar hostować go pod serwerem IIS. Baza danych, której zamierzam używać to SQL Server. Witryna zaakceptuje maksymalnie 500 000 użytkowników. Będzie w jednym języku i skierowany do osób mieszkających w krajach, których głównym językiem jest język, w którym zostanie zbudowana ta strona. Spodziewam się, że liczba użytkowników, którzy będą codziennie korzystać z aplikacji, wyniesie od 30 000 do 34 000. więc średnio może to być 2000 użytkowników online na godzinę. Mogę sobie pozwolić na zakup Visual Studio Professional, ale nie wiem, czy będzie mnie stać na koszt serwera IIS/SQL itp. (wszelkie inne opłaty MS). Nie wiem, jak obliczyć koszt i na podstawie tych szacunków określić, ile serwerów potrzebuję. Czekam na pomoc ekspertów.


title: Dlaczego Iterator i ListIterator Javy wskazują między elementami?

text: Javadoc dla ListIterator mówi: > „ListIterator” nie ma bieżącego elementu; jego pozycja kursora zawsze leży > pomiędzy elementem, który zostałby zwrócony przez wywołanie `previous()` a elementem >, który zostałby zwrócony przez wywołanie `next()`. Dlaczego `ListIterator` Javy został zaimplementowany tak, aby wskazywał między elementami, a nie na bieżący element? Wydaje się, że sprawia to, że kod klienta jest mniej czytelny, gdy musi wielokrotnie wywoływać `getNext()`, `getPrevious()`, więc zakładam, że musi być dobry powód takiego wyboru. Na marginesie, właśnie napisałem małą bibliotekę o nazwie peekable-arraylist, która rozszerza `ArrayList`, `Iterator` i `ListIterator`, która udostępnia metody `peekAtNext()` i `peekAtPrevious()` zaimplementowane jak: @Override public zsynchronizowane T peekAtNext() { T t = next(); poprzedni(); powrót t; }


title: Sprzęt, który przyspiesza dereferencję wskaźnika?

text: Większość współczesnych języków intensywnie korzysta ze wskaźników/odniesień: typowy język OOP używa wyszukiwań VMT, typowy język funkcjonalny buduje kluczowe struktury danych ze wskaźników itp. Nawet typowy kod C często zawiera takie elementy, jak `foo->bar->baz `. Powszechnie wiadomo, że dereferencja wskaźnika jest nieprzyjazna dla pamięci podręcznej, chyba że wskaźnik wskazuje bardzo blisko jakiejś właśnie otwartej lokalizacji i trafia w tę samą linię pamięci podręcznej. Czy istnieje lub był sprzęt, który próbuje rozwiązać ten problem? Obecnie nie jest szeroko stosowany; Dlaczego? Uderzanie w pamięć podręczną L1 lub nawet L2 jest o wiele szybsze niż uderzenie w pamięć RAM na obecnym sprzęcie, że cel polegający na tym, aby dereferencja wskaźnika czerpała niektóre korzyści z pamięci podręcznej, wydaje się słuszna.


title: Poziomy uprawnień użytkownika w RESTful API

text: Załóżmy, że mam firmę, która zajmuje się rankingiem najsłodszych kotów w Internecie. **Oferuję źródło na`/cats/`**, które zapewnia użytkownikom najnowsze, najsłodsze urocze koty. Użytkownicy mogą otrzymać tylko 3 najlepsze koty, jeśli w ogóle nie zapłacili lub nie zarejestrowali się. 10 najlepszych kotów, jeśli zapłaciły 337 dolarów i są zalogowane, oraz 100 najlepszych kotów, jeśli zapłaciły 1337 dolarów i są zalogowane. Podczas składania prośby mam „identyfikator użytkownika”. W skrócie, **konsumenci`/cats/` otrzymują inną liczbę kotów na podstawie ich „rankingu użytkowników”**. Mam identyfikator użytkownika na końcu zużywającym, ale nie mam wyraźnej reprezentacji poziomu użytkownika na końcu zużywającym. **Chcę poinformować użytkowników, że mogą uaktualnić swoją subskrypcję** podczas składania wniosku. Oznacza to, że muszę rozróżnić _3 koty, ponieważ oferuję tylko 3 koty_ i _3 koty, ponieważ na to zezwala poziom użytkownika_. Jaka jest najlepsza praktyka odróżniania ograniczania zasobu, ponieważ konsument nie ma wystarczających przywilejów, a ograniczania, ponieważ takie ma konsument? **Skąd klient wie, czy może uaktualnić swój ranking?** Oznacza to, że mają ograniczony zasób, ponieważ _nie_ mają uprawnień. Jaka jest tutaj najlepsza praktyka? Uwaga, jest to rażące uproszczenie rzeczywistego przypadku. Również dla wyjaśnienia - czytanie jest mile widziane. * * * Aktualizacja: ### Oto opcje, które rozważyliśmy: * Przechowywanie obiektów uprawnień użytkownika raz na kliencie, wysyłanie zapytań o nie tylko podczas logowania lub aktualizacji konta. * Przekazywanie wartości „null” w formacie JSON wskazujące, że istnieje, ale przeniesiono rzeczywiste _nic_. Tak więc 10 kotów dla użytkownika z 3 kotami może być `["Garfield","Sylvester","Kot w butach",null*7]` * Przekazywanie pary uprawnień do zasobów `{koty:["Wąsy","Fluffy" ,"Socks"],authCount:3}` Chciałbym zrobić to dobrze za pierwszym razem, aby dostarczyć najsłodsze koty w najlepszy możliwy sposób i chcielibyśmy i chcielibyśmy


title: Odwoływalne BSD - Jakie są konsekwencje?

text: Badając alternatywy dla Exima/Dovecota dla dedykowanego serwera pocztowego, natknąłem się na projekt lamson, oparty na Pythonie MTA. Znalazłem również następujący widelec projektu: https://github.com/moggers87/salmon Cytując z dokumentacji na widelcu: > Salmon to widelec Lamsona. Latem 2012 (dokładnie 13-07-2012) > Lamson otrzymał relicencję na wariant BSD, który można było odwołać. Dwie > klauzule, które budziły największe obawy: > 1. Współtwórcy zgadzają się, że wszelkie wkłady są własnością właściciela praw > autorskich i że autorzy > nie mają absolutnie żadnych praw do swoich wkładów. > > 2. Właściciel praw autorskich zastrzega sobie prawo do cofnięcia niniejszej licencji dla > każdego, kto korzysta z tego dzieła chronionego prawem autorskim w dowolnym momencie i z dowolnego powodu. > > > > Wyczytałem, że mogę wnieść swój wkład, ale potem powiedziałem, że praca > odmówił mi, ponieważ pan Shaw nie lubił koloru moich skarpetek. Więc poszedłem > i znalazłem najnowszą wersję, która była dostępna na licencji GNU GPL w wersji 3. > > Łosoś jest anagramem Lamsona, jeśli jeszcze tego nie rozpracowałeś. Jestem zaznajomiony z licencją BSD, ale nigdy nie widziałem jej zmodyfikowanej w ten sposób. Jestem ciekaw, jakie konsekwencje miałaby taka licencja dla innych programistów korzystających z kodu, zwłaszcza w płatnych projektach komercyjnych (myśląc coś w rodzaju aplikacji webowych opartych na subskrypcji). Zakładając, że licencja została cofnięta, czy użytkownik mógłby być odpowiedzialny za szkody pieniężne, czy też taki scenariusz byłby równoważny z zaprzestaniem działalności, w którym to przypadku jakakolwiek funkcjonalność oferowana przez bibliotekę musiałaby zostać ponownie zaimplementowana? **Do wyjaśnienia**: Zakłada się zwykłe zastrzeżenia w odniesieniu do odpowiedzi. Pytam tylko z ciekawości i nie mam zamiaru działać ani podejmować ryzyka prawnego za pośrednictwem zamieszczonych porad.


title: Czy istnieją jakieś ważne powody, aby nie zezwalać na znaki i ograniczać długość haseł?

text: Natknąłem się na kilka stron, które albo ograniczają długość, na jaką zezwalają hasła, i/lub nie zezwalają na określone znaki. To mnie ogranicza, ponieważ chcę poszerzyć i wydłużyć przestrzeń wyszukiwania mojego hasła. Daje mi to również nieprzyjemne poczucie, że mogą nie haszować. Czy istnieją _dobre_ powody, aby ustawić górną długość lub wykluczyć znaki w hasłach?


title: Jakie kryteria można zastosować do rankingu popularnych postów na blogu?

text: Tworzę serwis, który znajduje popularne posty z kilku blogów. Jakimi kryteriami mogę się posłużyć, aby określić, jakie są najpopularniejsze posty? Na przykład śledzę liczbę udostępnień na Facebooku i Twitterze dla każdego posta na każdym blogu i oceniam posty na blogu pod kątem ich liczby udostępnień. Ale to nie jest najlepsze rozwiązanie, ponieważ niektórzy blogerzy mogą zwiększyć liczbę udostępnień dzięki fałszywym udostępnieniom. Jaki byłby lepszy zestaw kryteriów do rankingu najbardziej popularnych postów?


title: Czy to zły pomysł, aby wypisać każdy argument funkcji/metody w nowej linii i dlaczego?

text: Pracuję z kimś, kto za każdym razem, gdy wywołuje funkcję, umieszcza argumenty w nowej linii, np. aFunkcja( bajt1, skrócony1, int1, int2, int3, int4, int5 ) ; Uważam to za bardzo irytujące, ponieważ oznacza to, że kod nie jest zbyt zwarty, więc muszę skanować w górę iw dół, aby rzeczywiście zrozumieć logikę. Interesuje mnie, czy to rzeczywiście zła praktyka, a jeśli tak, to jak mam ich przekonać, by tego nie robili?


title: Jak wytłumaczyć ortogonalność osobie nietechnicznej?

text: W _The Pragmatic Programmer_ wprowadzono ten termin i użyto „liniowej niezależności” jako przykładu ortogonalności. Jak wytłumaczyć to samo osobie nietechnicznej i dlaczego warto mieć niezależność? Czy istnieją „prawdziwe” (tj. nie-geek) przykłady dla tej koncepcji?


title: Więc co się dzieje z prawem zamkniętym?

text: Powiedzmy, że Alice Co. pisze program, a Bob Co. zatrudnia wykonawcę, aby go skopiował i umieścił na swojej platformie? Jaka jest ogólna droga prawna w takich przypadkach? Mówię ogólnie, ponieważ większość z nas to programiści, a nie prawnicy i wszyscy rozumiemy, że nie prosimy o wykwalifikowaną poradę prawną. Ale ogólnie. Co się dzieje? Zabierasz ich do sądu? Jakie względy należy wziąć pod uwagę? Co daje ci grunt, na którym możesz stanąć, a innym nic, na czym możesz stanąć?


title: Podstawa definicji

text: Załóżmy, że mamy zbiór funkcji charakteryzujących coś: w świecie OO metody charakteryzujące typ. W matematyce są to zdania i mamy dwa rodzaje: aksjomaty i lematy. Aksjomaty są założeniami, lematy można z nich łatwo wyprowadzić. W C++ aksjomaty są czystymi funkcjami wirtualnymi. Oto problem: istnieje więcej niż jeden sposób aksjomatyzacji systemu. Biorąc pod uwagę zbiór zdań lub metod, podzbiór zdań konieczny i wystarczający do wyprowadzenia wszystkich pozostałych nazywamy podstawą. Tak samo w przypadku metod lub funkcji mamy pożądany zestaw, który musi być zdefiniowany, i zazwyczaj każda z nich ma jedną lub więcej definicji w kategoriach pozostałych i wymagamy od programisty dostarczenia definicji instancji, które są wystarczające, aby umożliwić wszystkim innym należy zdefiniować, a jeśli jest przesunięta specyfikacja, to jest ona spójna. Podam przykład (w Felixie kod Haskella byłby podobny): class Eq[t] { virtual fun ==(x:t,y:t):bool => eq(x,y); wirtualne równanie zabawy(x:t, y:t)=> x == y; wirtualna zabawa != (x:t,y:t):bool => not (x == y); aksjomat odruch(x:t): x == x; aksjomat sym(x:t, y:t): (x == y) == (y == x); aksjomat trans(x:t, y:t, z:t): implikuje(x == y i y == z, x == z); } Tutaj jest jasne: programista musi zdefiniować albo == albo eq albo oba. Jeśli oba są zdefiniowane, definicje muszą być równoważne. Niezdefiniowanie go nie powoduje błędu kompilatora, powoduje nieskończoną pętlę w czasie wykonywania. Definiowanie obu nierównorzędnie też nie powoduje błędu, jest po prostu niespójne. Zauważ, że określone aksjomaty ograniczają semantykę każdej definicji. Mając definicję == albo bezpośrednio, albo poprzez definicję eq, wtedy != jest definiowane automatycznie, chociaż programista może zastąpić domyślne coś bardziej wydajnego, oczywiście takie przespecyfikowanie musi być spójne. Zwróć uwagę, że == można również zdefiniować jako !=, ale tego nie zrobiliśmy. Bardziej złożona jest charakterystyka częściowego lub całkowitego zamówienia. Jest o wiele bardziej wymagający, ponieważ następuje kombinatoryczna eksplozja możliwych baz. Jest powód, aby pragnąć przesunięć: wydajność. Jest jeszcze jeden powód: wybór i wygoda. A więc tutaj jest kilka pytań: jedno dotyczy tego, jak sprawdzić przestrzeganie semantyki i nie szukam tutaj odpowiedzi (zdecydowanie zbyt trudne!). Drugie pytanie brzmi: jak możemy określić i sprawdzić, czy instancja dostarcza przynajmniej podstawy? I o wiele trudniejsze pytanie: jak możemy dostarczyć _kilka_ domyślnych definicji, które zależą od wybranej podstawy?


title: Aktualizacje aplikacji na iOS, które nie wymagają przesyłania do App Store

text: Niektóre aplikacje, zauważyłem, że programiści mogą aktualizować swoje oprogramowanie bez przesyłania ich do App Store. Na przykład Game of War od czasu do czasu poinformuje Cię o dostępności aktualizacji i ponownym uruchomieniu urządzenia. Następnie możesz uważnie obserwować pasek postępu i zobaczyć, że aktualizacje są przesyłane do aplikacji. Zakładam, że używają XML do zmiany niektórych atrybutów i ich lokalizacji na serwerze. Zgaduję, ale nie wiem. Są w stanie wprowadzać znaczące zmiany w funkcjach gry, takie jak dodawanie hiperłączy do lokalizacji na mapie, promocje sprzedaży push, dodawanie określonych wydarzeń itp. Metody te nie wymagają kompilacji, ponieważ oczywiście wymagałoby to ponownego przesłania aplikacji. Jakie technologie na to pozwalają? Czy wszystkie zmiany po stronie serwera z obiektami XML są aktualizowane na kliencie? Jaka jest polityka firmy Apple w warunkach deweloperskich?


title: Różnica między optymalizacją a skalowalnością?

text: Jeśli zacytuję akapit z Wikipedii na temat _Optymalizacja_: > W informatyce optymalizacja programów lub optymalizacja oprogramowania to > proces modyfikowania systemu oprogramowania, aby niektóre jego aspekty działały wydajniej > lub zużywały mniej zasobów. Ogólnie rzecz biorąc, program komputerowy może być > zoptymalizowany tak, aby działał szybciej lub był zdolny do działania > z mniejszą ilością pamięci lub innych zasobów, lub też zużywał mniej energii. A _Skalowalność_ : > Skalowalność aplikacji odnosi się do zwiększonej wydajności uruchamiania aplikacji > w powiększonej wersji systemu. Co za różnica? Obaj poprawiają wydajność systemu. Czy są takie same, jeśli tak, to dlaczego ich imiona są inne?


title: Skąd mam wiedzieć, kiedy powinienem spakować moje zajęcia w Ruby?

text: W Ruby tworzę framework do tworzenia małych gier. Po prostu jakiś osobisty projekt - bardzo mała grupa przyjaciół pomaga. Teraz potrzebuję obsługi pojęć geometrycznych. Prostokąty, koła, wielokąty, wektory, linie itp. Stworzyłem więc klasę dla każdego z nich. Utknąłem w podejmowaniu decyzji, czy powinienem spakować takie klasy w module, takim jak `Geometry`. Uzyskałbym więc do nich dostęp jak „Geometry::Rectangle” lub po prostu „Prostokąt”, jeśli „dołączam” moduł. Teraz moje pytanie nie dotyczy tego konkretnego scenariusza. Chciałbym wiedzieć, **kiedy można spakować podobne klasy w jeden moduł w Ruby?** Jakie czynniki powinienem wziąć pod uwagę? Ilość zajęć? Częstotliwość użytkowania? Złożoność?


title: Dlaczego używamy bibliotek sieciowych zamiast zwykłych NSURLRequests i NSURLConnection?

text: w rozwoju iOS często widziałem ludzi tworzących moduł sieciowy do interakcji z ich API. Ten moduł zazwyczaj znajduje się na szczycie struktury sieciowej, takiej jak MKNetWorkKit lub AFNetWorking. W większości przypadków chodzi o wysłanie żądania GET,POST i parsowanie odpowiedzi, która w większości przypadków jest w formacie JSON. Jakie dodatkowe praktyczne korzyści, które te biblioteki zapewniają, które programista iOS powinien wykorzystać, a których brakuje w zwykłym interfejsie API Cocoa Networking? Mogę zrozumieć RESTKit jako jeden wyjątek, w którym zajmuje się konwersją JSON do obiektów natywnych, a także interfejsami z danymi podstawowymi, ale co z innymi?


title: Implementacja wzorca MVC w aplikacji SWT

text: Zajmuję się tworzeniem aplikacji SWT (w zasadzie jest to wtyczka Eclipse, więc muszę użyć SWT). Obecnie mój projekt wygląda następująco: * Model: W modelu mam POJOs, które reprezentują rzeczywiste pola w widokach. * Widok: Jest to głupa warstwa, zawiera tylko interfejs użytkownika i nie zawiera żadnej logiki (nawet obsługi zdarzeń) * Kontroler: działa jako mediator b/w tych dwóch warstw. Jest również odpowiedzialny za tworzenie warstwy widoku, obsługę zdarzeń itp. Zasadniczo stworzyłem wszystkie kontrolki w widoku jako statyczne, takie jak `public static Button btnLogin` a w kontrolerze mam taki kod: public void createLoginView(Composite comp ) { LoginFormView.createView(comp); //Ta metoda createView znajduje się w warstwie widoku, tj. LoginFormView LoginFormView.btnLogin.addSelectionListener(new SelectionListener() { //Kod idzie tutaj }); } Podobnie zrobiłem dla innych widoków i kontrolek. Tak więc w klasie głównej i innych klasach wywołuję po prostu `createLoginView` kontrolera. Podobnie postępuję z innymi poglądami. Więc moje pytanie, czy to, co robię, jest poprawne? Czy ten projekt jest dobry? Albo powinienem był zastosować inne podejście. Ponieważ jestem nowy w tworzeniu wtyczek SWT i Eclipse (w zasadzie jestem programistą Java EE z ponad 4 letnim doświadczeniem). Wszelkie wskazówki/wskazówki będą mile widziane.


title: Projektanci UX pracują o jeden Sprint do przodu

text: Nasi projektanci UX zwykle mają historię w Sprint X, którą programiści zaimplementują w Sprint X+1 (projektanci UX i deweloperzy/testerzy są w jednym zespole). Myślę, że ma to sens, ponieważ jeśli nie masz makiet ekranów i jasnych specyfikacji, nie możesz tak naprawdę oszacować pracy podczas planowania sprintu. Jednak w Scrumie powinieneś mieć tylko historyjki użytkownika, które zapewniają wartość dla użytkownika. W naszym przypadku historie związane z projektowaniem UX nie zapewniają takiej wartości (są raczej czynnością urabiania backlogu). Zwykle trenerzy Scrum nie zalecają posiadania pełnej specyfikacji przed rozpoczęciem sprintu, co jest dla mnie trudne do zrozumienia. Czy widzisz jakieś wady w naszym podejściu? Wydaje się, że to działa dla nas, ale jest nieco sprzeczne z zasadami Scrum.


title: Dlaczego w WPF ustawiamy obiekt na Stretch za pomocą jego właściwości wyrównania zamiast szerokości/wysokości?

text: W XAML WPF możemy powiedzieć elementowi, aby wypełnił jego kontener w następujący sposób: <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> Dlaczego po ustawieniu elementu na Stretch, robimy to za pomocą HorizontalAlignment i VerticalAlignment nieruchomości? Dlaczego zespół projektowy WPF zdecydował się na zastosowanie tego podejścia zamiast `Width="Stretch"` i `Height="Stretch"`? Zakładam, że była to przemyślana decyzja i jestem ciekaw uzasadnienia. CSS, między innymi, przestrzega konwencji, że rozciąganie odbywa się za pomocą właściwości szerokości i wysokości, a wyrównanie wpływa _wyłącznie_ na pozycjonowanie. Wydaje się to wystarczająco intuicyjne: rozciąganie elementu to w końcu manipulowanie jego szerokością i wysokością! Użycie odpowiedniej właściwości wyrównania do rozciągnięcia elementu wydaje się sprzeczne z intuicją i niezwykłe w porównaniu. To sprawia, że myślę, że nie wybrali tej opcji bez powodu: podjęli przemyślaną decyzję i mieli powody do niej. Width i Height używają podwójnego typu danych, co zwykle oznaczałoby, że przypisanie mu łańcucha byłoby głupie. Jednak obiekty Window WPF mogą przyjmować `Width="Auto"`, które są traktowane jako `double.NaN`. Nie można zapisać parametru „Width="Stretch" jako „double.PositiveInfinity” lub innej wartości?


title: Entity Framework a Linq to SQL?

text: Jestem trochę zdezorientowany tymi dwoma terminami "Linq to SQL" i "Entity Framework". Mam ogólne pojęcie, że oba z nich w jakiś sposób pozwalają odnosić się do tabel bazy danych jako obiektów .net lub czegoś w tym rodzaju, ale proszę wyjaśnij mi różnicę między tymi dwoma terminami.


title: Jak mogę zdefiniować i zmierzyć prostotę kodu?

text: W moim poprzednim pytaniu dotyczącym prostoty związanej z czytelnością jest wiele odpowiedzi, które pomogły mi zobaczyć, jak moja definicja i zrozumienie prostoty w kodzie było prawdopodobnie niepoprawne. Jak mogę zdefiniować prostotę w kodzie? Jakie pomiary i metryki oprogramowania są dostępne do pomiaru prostoty kodu?


title: Notacja przypadków użycia do logowania

text: Gdy potrzebne jest zalogowanie się w systemie, aby wykonać jakąkolwiek akcję. Jak wyrazić to w diagramie przypadków użycia? Posiadam system, który pozwoli pracownikom dokonywać sprzedaży. Muszą być zalogowani, ale gdy są już zalogowani, nie trzeba logować się ponownie aż do zakończenia sesji (typowe logowanie). Nie wiem jak mam wyrazić, że logowanie jest obowiązkowe, ale tylko raz.


title: Subskrypcja na wydarzenia z klas zagnieżdżonych

text: Czy jest w porządku, aby klasa zagnieżdżona zgłaszała zdarzenie, a dla klasy nadrzędnej, która subskrybuje to zdarzenie, następnie zgłasza inne zdarzenie, które subskrybowała jej klasa nadrzędna — w ten sposób przekazuje oryginalne zdarzenie w górę hierarchii klas? Można to łatwo wyjaśnić w ten sposób... _Mamy..._ Klasa A Klasa B Klasa C _Operacja..._ 1. Klasa C zgłasza zdarzenie 2. Klasa B subskrybuje to zdarzenie, po powiadomieniu zgłasza inne zdarzenie 3. Klasa A subskrybuje zdarzenie klasy B, po powiadomieniu coś robi Więc oryginalne zdarzenie miało miejsce w **Klasie C** i **Klasa A** zajmuje się tym. Korzystanie z tej metody oznacza, że wymagam obsługi zdarzeń w klasie średniej (klasa B), której jedyną funkcją jest przekazywanie powiadomienia - wydaje mi się to trochę śmierdzące.


title: Diagramy sekwencji

text: Niedawno przeczytałem książkę „UML Distilled” i stwierdziłem, że diagramy sekwencji są bardzo przydatne. Moje pytanie brzmi, czy możemy pokazać „przepływ danych” również na diagramie sekwencji? To mój pierwszy raz na diagramach sekwencji. Miło zobaczyć kilka przykładów, jeśli takie istnieją.


title: Model 1 klasy czy modele 3 klasy? 1 dla każdego — UI, sprzętowa biblioteka API i baza danych

text: Zawsze używałem jednego modelu klasowego we wszystkich 3 obszarach moich projektów. Interfejs użytkownika, sprzętowe API (do zbierania danych), baza danych (kontekst bazy danych encji). Każdy nowy projekt wydaje się tylko powiększać, co oznacza, że trudno jest zmienić model klasy, ponieważ wszystko z niego korzysta. Doświadczony programista zasugerował mi, aby podzielić mój model zajęć i użyć innego dla każdej części mojego projektu. Następnie przekonwertuj dane między modelami, przekazując dane tam iz powrotem między różnymi częściami. Oznacza to, że jeśli jeden z modeli się zmieni, wystarczy zmienić kod w tej sekcji i zmienić „konwertery”. Czy to powszechna praktyka? Na początku jest zdecydowanie więcej pracy, ale zastanawiam się, czy zaoszczędzi mi to czasu w przyszłości. EDYCJA: Zmieniłem model danych na model klasy, jak sugerowano w komentarzach. Chociaż to, o czym konkretnie mówię, to dane modelowane w klasach w mojej aplikacji.


title: „Pętla gry” w aplikacji innej niż gra?

text: W grach w czasie rzeczywistym zawsze występuje pętla gry, która uruchamia się co kilka milisekund, aktualizuje grę o nowe dane i odświeża cały ekran. Czy jest to coś, co widać w innych typach aplikacji, innych niż gry? „Pętla stałej aktualizacji”? Na przykład wyobraź sobie aplikację taką jak MSPaint. Użytkownik może rysować linie na ekranie za pomocą myszy. Rysowana linia jest wyświetlana na ekranie podczas jej rysowania. Proszę sobie wyobrazić, że ta linia składa się w rzeczywistości z wielu mniejszych linii, każda o długości 2 pikseli. Sensowne byłoby przechowywanie każdej z tych małych linii na liście. Ale jak powiedziałem, rysowana linia (duża linia, złożona z wielu małych linii) jest wyświetlana podczas rysowania. Oznacza to, że konieczne byłoby przemalowanie ekranu, aby wyświetlić nową małą linię, która została dodana w poprzednim momencie. Ale - proszę mnie poprawić, jeśli się mylę - trudno byłoby odmalować tylko tę konkretną część ekranu, na której została narysowana nowa mała kreska. Jeśli tak, konieczne byłoby przemalowanie całego ekranu. W związku z tym sensowne byłoby użycie „pętli aktualizacji” do ciągłego przemalowywania całego ekranu i ciągłego iterowania po liście linii i rysowania tych linii w kółko – jak w grach. Czy takie podejście istnieje w aplikacjach innych niż gry, a konkretnie w aplikacjach „rysunkowych”? Dziękuję


title: Korzystać z wzorców projektowych w C?

text: Wzorce projektowe są przydatne w przypadku języków obiektowych. Ale w jaki sposób **niezorientowany obiektowo** język, taki jak **C**, może je wykorzystać?


title: Czy klasy danych mogą zawierać metody walidacji?

text: OK, powiedzmy, że mam klasę danych dla użytkownika: public class User { private String firstName; prywatne Nazwisko String; prywatna długa osobaKod; prywatne Data urodzenia Data; prywatna płeć płeć; prywatny e-mail String; prywatne hasło String; Teraz powiedzmy, że chcę walidować e-mail, czy imiona nie są puste, czy data urodzenia jest w normalnym zakresie itp. Czy mogę umieścić tę metodę walidacji w tej klasie razem z danymi? A może powinien być w UserManager, który w moim przypadku obsługuje listy tych użytkowników?


title: Licencja na projekt Opensource

text: > **Możliwy duplikat:** > Licencjonowanie hostowanych bibliotek open source i bibliotek stron trzecich Jestem nowicjuszem w świecie społeczności open source. Planuję stworzyć projekt open source, hostowany na github. Projekt będzie wykorzystywał inne komponenty open source, takie jak NHibernate, FNH, Log4net, CommonLibrary, Autofac, Quartz.Net Scheduler itp. Moje pytania to: 1. Czy byłyby jakieś ograniczenia dotyczące używania powyższych komponentów OSS? na przykład: planuję używać licencji MIT, ale Quartz.Net Scheduler używa licencji Apache, czy byłyby jakieś ograniczenia? 2. Jak uzyskać licencję na własny projekt? Czy muszę gdzieś zarejestrować swój projekt? 3. Jaka jest najlepsza praktyka wymieniania punktów kredytowych do użytych komponentów OSS? Wielkie dzięki,


title: Czy powinniśmy projektować programy, które losowo się zabijają?

text: Krótko mówiąc, czy powinniśmy projektować śmierć w naszych programach, procesach i wątkach na niskim poziomie, dla dobra całego systemu? Awarie się zdarzają. Procesy umierają. Planujemy katastrofę i od czasu do czasu wychodzimy z niej. Ale rzadko projektujemy i wdrażamy nieprzewidywalną śmierć programu. Mamy nadzieję, że czas pracy naszych usług będzie tak długi, jak dbamy o to, aby działały. Makroprzykładem tej koncepcji jest Chaos Monkey firmy Netflix, który w niektórych sytuacjach losowo kończy instancje AWS. Twierdzą, że pomogło im to odkryć problemy i zbudować więcej redundantnych systemów. To o czym mówię to niższy poziom. Pomysł polega na tym, aby tradycyjnie długotrwałe procesy kończyły się losowo. Powinno to wymusić redundancję w projekcie i ostatecznie stworzyć bardziej odporne systemy. Czy ta koncepcja ma już nazwę? Czy jest już używany w branży? ### EDYTUJ Opierając się na komentarzach i odpowiedziach, obawiam się, że moje pytanie nie było jasne. Dla jasności: * tak, mam na myśli losowo, * tak, mam na myśli produkcję i * nie, nie tylko do testowania. Aby wyjaśnić, chciałbym narysować analogię do organizmów wielokomórkowych. W naturze organizmy składają się z wielu komórek. Komórki rozwidlają się, tworząc nadmiarowość i ostatecznie umierają. Ale zawsze powinno być wystarczająco dużo komórek odpowiedniego rodzaju, aby organizm mógł funkcjonować. Ten wysoce zbędny system ułatwia również gojenie po zranieniu. Komórki umierają, więc organizm żyje. Włączenie losowej śmierci do programu zmusiłoby większy system do przyjęcia strategii redundancji, aby zachować rentowność. Czy te same strategie pomogłyby systemowi zachować stabilność w obliczu innych rodzajów nieprzewidywalnych awarii? A jeśli ktoś tego próbował, jak to się nazywa? Chciałbym przeczytać więcej na ten temat, jeśli już istnieje.


title: Która platforma byłaby najlepsza do tworzenia stron internetowych do użytku z bardzo wolnymi połączeniami bez poświęcania zbyt dużej ilości projektu?

text: Jak możemy zapewnić użytkownikom dial-up w odległych miejscach lub mniej rozwiniętych krajach dobre wrażenia podczas korzystania z dynamicznych stron internetowych.


title: Dlaczego Visual Basic jest łatwiejszy do nauczenia niż Java dla programistów COBOL?

text: Moja koleżanka wywodziła się ze środowiska VMS/COBOL i daliśmy jej trochę VB6 do zrobienia - absolutnie się z tym pobiegła. Następnie przeszukaliśmy ją przez kilka rzeczy w Javie i w ogóle nie kliknęła. Co jest podobnego do języka COBOL i VB6 (ale nie Javy), co umożliwiłoby to?


title: Czy istnieje lepszy sposób na zorganizowanie moich testów modułów, który pozwoli uniknąć eksplozji nowych plików źródłowych?

text: Mam sprytny (tak myślałem) sposób, aby każdy z moich modułów tworzył plik wykonywalny testu jednostkowego, jeśli został skompilowany z flagą `-DTESTMODULE`. Ta flaga chroni funkcję `main()`, która może uzyskać dostęp do wszystkich statycznych danych i funkcji w module, bez #włączania pliku C. Z pliku README: -- Moduły -- Różne moduły zostały napisane i przetestowane oddzielnie, zanim zostały połączone w celu uzyskania niezbędnej podstawowej funkcjonalności. Każdy moduł zachowuje swój test jednostkowy, funkcję main(), strzeżoną przez #ifdef TESTMODULE. `make test` skompiluje i wykona wszystkie testy jednostkowe, dając obfite wyjście, ale co ważne, kończąc z odpowiednim kodem powodzenia lub niepowodzenia, więc polecenie `make test` zakończy się niepowodzeniem, jeśli którykolwiek z testów się nie powiedzie. Moduł Spis treści __________ test obj src struktury nagłówka STAŁE ---- --- --- --- -------------------- m m.o m.c m.h mplik mtab TABSZ s s.o s.c s.h stack STACKSEGSZ v v.o v.c v.h saverec_ f.o f.c f.h plik ob ob.o ob.c ob.h obiekt ar ar.o ar.c ar.h tablica st st.o st.c st.h string di di. o di.c di.h słownik dichead nm nm.o nm.c nm.h nazwa gc gc.o gc.c gc.h śmieciarka itp.c itp.h kontekst osunix.o osunix.c osunix.h unix -funkcje zależne Jest kompilowany przez podstępny bit makefile, m:m.c ob.h ob.o err.o $(CORE) itp.o $(OP) cc $(CFLAGS) -DTESTMODULE $(LDLIBS) -o $@ $< err.o ob.o s.o ar.o st.o v.o di.o gc.o nm.o itp.o $(OP) f.o gdzie moduł jest kompilowany z własnym plikiem C plus każdy inny plik obiektowy _exce sam pt_. Ale stwarza to trudności uprzejmemu programiście, który zaproponował, że napisze dla mnie pliki Autotools. Tak więc oczywistym sposobem uczynienia tego "mniej dziwnym" byłoby wyrzucenie wszystkich funkcji `main` do oddzielnych plików źródłowych. Ale, ale... Czy muszę?


title: Jestem studentem uczącym się C++ i niedawno dowiedziałem się o Ruby. Czy nauczenie się (niektórych) Rubiego pomogłoby mi w C++, czy po prostu by mnie zmyliło?

text: Jak mówi tytuł, jestem studentem, który niedługo rozpocznie drugi rok C++. Odkryłem jednak Rubiego. Chociaż wcześniej słyszałem dużo szumu na temat języka, zignorowałem go, ponieważ zawsze myślałem, że nie jest to coś, co byłoby przydatne. Jednak znalazłem kilka FANTASTYCZNYCH samouczków na temat ruby i jestem zainteresowany jego nauką (prawdopodobnie dlatego, że wydaje się to takie proste). 1. Czy zabawa z rubinem byłaby dobrym czy złym pomysłem? Rozumiem, że nie ma czegoś takiego jak zła wiedza, ale obawiam się, że Ruby tylko zdezorientuje mnie przy C++. 2. Czym różni się od C++? Czytałem, że jest w pewien sposób oparty na C. 3. Czytałem tutaj kilka postów, że Ruby i C++ mogą od czasu do czasu trzymać się za ręce. Jak elastyczny jest ten związek? Czy rzadko się to udaje? 4. Jak użyteczny jest Ruby w prawdziwym świecie? Nie pytam konkretnie o oferty pracy – bardziej interesuje mnie, jakiego rodzaju aplikacje mogą pochodzić z tego języka. Jakieś konkretne przykłady, na które warto spojrzeć?