title: Aktualizowanie ustawień na urządzeniu z systemami wbudowanymi za pomocą zawodnych połączeń

text: Piszę program JavaFX GUI do konfiguracji użytkownika urządzenia systemów wbudowanych. Urządzenie zostanie połączone przewodowym lub bezprzewodowym połączeniem szeregowym, które nie jest w 100% niezawodne. Dlatego gdy użytkownik dokonuje zmian ustawień w GUI, program wysyła do urządzenia komunikat o ustawieniu, a następnie musi zweryfikować, czy są one ustawione. Moje pytanie brzmi, jakie struktury programu są przydatne do tego celu. Moje obecne podejście to * Klasa o nazwie `Sync`, która zawiera dwie zmienne związane z konkretnym ustawieniem. Jeden jest powiązany z ustawieniem, które pojawia się w GUI, a drugi z ustawieniem otrzymanym z urządzenia. * Właściwość w `Sync`, która opisuje, czy te dwa ustawienia są takie same, ustawienie urządzenia jest nowsze, czy ustawienie GUI jest nowsze. Dekoracje polowe są następnie powiązane z tym ustawieniem. * Przycisk o nazwie `set`, który wysyła do urządzenia wiadomość zestawu. * Pętla, która stale odpytuje urządzenie o jego ustawienia (które są przechowywane w klasie Sync). Dekoratorzy następnie przekazują użytkownikowi informację zwrotną, czy ustawienia zostały zsynchronizowane. Chciałbym zrobić coś bardziej eleganckiego, gdzie klasa Sync zajmuje się wysyłaniem wiadomości i sprawdzaniem, czy ustawienie zostało ustawione. Kilka szczegółowych pytań: * Czy powinienem usunąć przycisk „ustaw” i zlecić, aby klasa Sync aktualizowała urządzenie, gdy ma prawidłowe ustawienia? * Czy dekoracja wystarczy, aby wskazać, czy ustawienie zostało ustawione? Czy okno dialogowe byłoby lepsze? Kilka ogólnych pytań: * Czy istnieje najlepsze podejście do tego problemu? * Czy istnieją wspólne klasy, które byłyby przydatne? * Jakieś inne alternatywne projekty? Edycja: Ograniczenie: chciałbym, aby urządzenie było jak najgłupsze. Wcześniej implementowałem niestandardowe protokoły z CRC, ack/nack, ponawianiem prób, buforami wiadomości itp., aczkolwiek między dwoma systemami wbudowanymi. Oprogramowanie będzie modyfikowane dla różnych projektów Arduino dla początkujących i chcę zachować większość logiki (nawet walidację) po stronie GUI.


title: Zamieszanie w zrozumieniu twierdzenia o amortyzacji

text: Czytałem książkę na temat analizy algorytmów autorstwa Michaela T Goodricha. Natknąłem się na technikę amortyzacji i uderzyło mnie zrozumienie dowodu twierdzenia. Wstawiam twierdzenie i dowód oraz część, że potrzebuję więcej wyjaśnień. Proszę o pomoc: **Twierdzenie:** Seria _n_ operacji na początkowo **pustej** usuwalnej tabeli zaimplementowana za pomocą tablicy zajmuje czas O(n) Definicja usuwalnej tabeli: Ten abstrakcyjny typ danych przechowuje tabelę elementów, które mogą być dostępne przez ich indeks w tabeli. Dodatkowo to narzędzie ADT obsługuje następujące dwie metody: > add(e): Dodaj element _e_ do następnej dostępnej komórki w tabeli. > clear : opróżnij tabelę, usuwając wszystkie jej elementy. **Dowód** : Niech M0....,Mn-1 będzie ciągiem operacji wykonywanych na S i niech Mi0,....,Mik-1 będą operacjami klarownymi w ciągu. Mamy wtedy > 0<= i0 < .... < i k-1 <= n-1. > > Zdefiniujmy także i-1 = -1. Czas wykonania operacji Mij (operacja clear >) wynosi O(ij \- ij-1), ponieważ co najwyżej elementy ij \- ij-1 -1 mogły > zostać dodane do tabeli (za pomocą operacji add) od poprzednia > wyczyść operację Mij-1 lub od początku serii. Pytanie: 1. Dlaczego i jak definiuje się i-1 = -1? 2. Nie rozumiałem "bo co najwyżej ij \- ij-1 -1 elementy mogły zostać dodane do tabeli (za pomocą operacji add) od poprzedniej operacji clear Mij-1 lub od początku serii". Proszę wyjaśnić mi więcej na temat tego stwierdzenia, dlaczego **-1** pojawiło się na zdjęciu.


title: Alternatywa dla Game Makera na Linuksie?

text: Czy są jakieś alternatywy dla Game Makera stworzonego dla Linuksa, które wykonują zadanie przy użyciu znanego interfejsu, podobnego języka skryptowego do konwersji (np. Javascript), który NIE eksportuje gier jako Flash lub HTML5? Szczerze mówiąc, to dość specyficzne, ale hej. Wiele głów to nie jedna, zwłaszcza podczas przeszukiwania ciemnych głębin Internetu. :/


title: W jaki sposób programista powinien zdecydować, czy uzyskać MBA, czy kontynuować pracę jako programista?

text: Ponieważ jestem z Indii, tutaj większość ludzi uważa, że jeśli ktoś ma więcej niż 5 lat doświadczenia, nie powinien go kontynuować. Powinien iść na studia MBA i ubiegać się o stanowisko kierownicze. Co mówisz?


title: Muszę zatrudnić programistę stron internetowych, ale nie jestem pewien, jakie kwalifikacje/umiejętności powinien posiadać, aby robić to, co widzę w mojej głowie. Jakaś pomoc?

text: Chcę opracować prosty edytor obrazów, w którym użytkownik może przechodzić przez wiele warstw (6-10) obrazów, aby stworzyć unikalny awatar. Na przykład początkową warstwą obrazu będzie wybrany przez nich charakter 2D, w większości pozbawiony jakichkolwiek akcesoriów. Następną warstwą obrazu byłaby koszula, kolejne spodnie, inna biżuteria itp. Podoba mi się pomysł frontendu HTML5, więc może to być aplikacja internetowa kompatybilna z większością platform, ale gubię się w wymaganiach backendu takiego projektu. #noob Każda pomoc byłaby bardzo mile widziana.


title: Niestandardowe użycie nagłówka autoryzacji w REST API

text: Tworzę interfejs API REST, w którym klienci są uwierzytelniani przy użyciu certyfikatów klienta. Klient w tym przypadku nie jest indywidualnym użytkownikiem, ale swego rodzaju warstwą prezentacyjną. Użytkownicy są uwierzytelniani przy użyciu niestandardowego podejścia i za warstwę prezentacji odpowiada warstwa prezentacji (uwaga: wiem, że to nie jest właściwe podejście, ale interfejs API nie jest publiczny). Chciałbym przekazać nazwę użytkownika dla każdego żądania (nie hasło), ale nie jestem pewien, gdzie to zrobić. Czy dobrym pomysłem byłoby użycie nagłówka Authorization?


title: Najlepsze rozwiązanie: Jaka może być implementacja metody hashCode(), jeśli niestandardowe pola użyte w metodzie equals() mają wartość NULL?

text: Jaka jest najlepsza praktyka zwracania wartości dla metody hashCode(), jeśli niestandardowe pole używane w równaniach ma wartość null ? Mam sytuację, w której zastąpienie equals() jest realizowane przy użyciu pól niestandardowych. Zwykle zaleca się nadpisanie hashCode() za pomocą pól niestandardowych używanych w equals(). Ale jeśli wszystkie niestandardowe pola używane w equals() mają wartość NULL, to jaka byłaby najlepsza implementacja dla hashCode()? Przykład: class Person { private String firstName; prywatne Nazwisko String; public String getFirstName() { return firstName; } public String getLastName() { return lastName; } @Override public boolean equals(Object object) { boolean wynik = false; if (object == null || object.getClass() != getClass()) { wynik = false; } else { Osoba osoba = (Osoba) obiekt; if (this.firstName == person.getFirstName() && this.lastName == tiger.getLastName()) { wynik = true; } } zwraca wynik; } @Override public int hashCode() { int hash = 3; if(this.firstName == null || this.lastName == null) { // <b>Jaka jest najlepsza praktyka, </b> // <b>Czy return super.hashCode() jest lepsze?</ b> } hash = 7 * hash + this.firstName.hashCode(); hash = 7 * hash + this.lastName.hashCode(); skrót zwrotny; } } 1. czy wymagane jest sprawdzenie wartości null w hashCode() ? 2. Jeśli tak, co powinno zostać zwrócone, jeśli niestandardowe wartości to null ?


title: Czy wielowątkowość jest odpowiednia do konfigurowania wielu okien w tej samej aplikacji?

text: Obecnie pracuję z aplikacją Qt, która próbuje użyć wielowątkowości, aby wykonać dwa zadania * Aby zapobiec blokowaniu pętli zdarzeń głównego wątku * Aby zwiększyć wydajność obliczeń Można by pomyśleć, że to dobry pomysł, ale okazuje się, że może to być nieefektywnym. W Qt klient nie może tworzyć instancji podklasy QWidget **tylko w głównym wątku**. Kod, który do tej pory widziałem, wydaje się naprawdę nieuporządkowany. Program ma „wątek wykonawczy”, innymi słowy wątek w tle, który zarządza żądaniami użytkownika (tj. kliknięcie przycisku, aby uzyskać nowy panel gui) i oczywiście są 3 inne wątki (sieci, przetwarzanie skryptów i oczywiście wątek główny) Konfiguracja jest co najmniej dziwna, zdarzenie akcji (tj. Kliknięcie przycisku) jest sygnalizowane wątkowi wykonawczemu, który następnie wysyła **funkcję do głównego wątku**, aby utworzyć instancję żądanego przez użytkownika panelu gui. Opisane powyżej nie mają sensu. Domyślam się, że pierwotni projektanci obawiali się zablokowania wątku, ale to nie powinno mieć znaczenia. Niezależnie od tego, w jakim wątku pojawił się wątek, nadal kończy się on z powrotem w głównym wątku i i tak go blokuje. **To może nie być najlepszy wybór projektu, czy może tak? Nie jestem pewien, może jest tu ktoś bardziej doświadczony, który może rzucić na to światło.** Osobiście uważam, że byłoby lepiej, gdyby jeden wątek obsługiwał całą interakcję z użytkownikiem, a każde intensywne przetwarzanie użytkownika powinno być wątkowe. Inne części wątkowe mają sens, ponieważ mają osobny wątek do przetwarzania skryptów, sieć faktycznie może zwiększyć wydajność, nie blokując głównej pętli zdarzeń, dzięki czemu interfejs użytkownika może pozostać interaktywny. Czy ktoś mógłby również wyjaśnić, kiedy wielowątkowość jest dobrym wyborem w GUI i w zwykłych okolicznościach? **Dziękuję**


title: Scrum dla zespołów specjalistów

text: Scrum jest najlepszy dla zespołów z członkami generalists, czyli zespołów, w których co najmniej 2 osoby mogą wykonywać te same zadania. Moją główną troską jest znalezienie dobrych rozwiązań **dostosowanie scrum (co zachować, co usunąć, co poprawić) dla zespołów złożonych ze specjalistów?** Załóżmy, że masz zespół 5 programistów (nie prawdziwy, tylko na przykład ): 1. Jeden matematyk z dużymi umiejętnościami w C; 2. Jeden programista DB; 3. Jeden programista WWW; 4. Jeden programista UX/GUI; 5. Jeden architekt oprogramowania; Tutaj wszyscy są specjalistami i nikt nie może zastąpić kogoś innego (nie obchodzi mnie ryzyko budowania takiego zespołu, chcę skupić się na scrumie). Tak więc, w kontekście scrumowym, oto moje przemyślenia: 1. **Bezużyteczne wiosenne plany:** rzeczywiście, gdy matematyk mówi, że określone zadanie jest warte 2 punkty, nikt nie może głosować przeciwko niemu; 2. **Bezużyteczna metryka prędkości zespołu:** ponieważ każdy może przydzielić dowolną liczbę punktów do swoich zadań, obliczanie prędkości nie ma sensu; 3. **Zamień codzienne spotkania scrumowe na cotygodniowe (dłuższe) spotkania scrumowe:** ponieważ każdy członek zespołu pracuje nad własnymi zadaniami, codzienne spotkania scrumowe powinny być bardzo ważne dla zachowania „ducha zespołowego”. Jednak codzienne spotkania scrumowe mają trwać około 15 minut. To oczywiście nie wystarczy, aby zrozumieć, co robią i co zrobią inni. Co więcej, matematyk przez większość czasu odpowie na to samo: "Nadal robię _% &Lo( + ?$$_+&)"... Cotygodniowe spotkania dałyby więcej czasu. Aby zachować ten sam czas spotkań między „wstępnymi” spotkaniami scrumowymi i „cotygodniowymi” spotkaniami scrumowymi, każde cotygodniowe spotkanie scrumowe powinno trwać (5 dni w tygodniu, z 4 tygodniowymi sprintami, przy czym spotkania sprintowe trwają 4 godziny, a codzienne 15 minut): (4*60 + 20*15)/4 => 2h-2h30, co wydaje się rozsądne. Czy może nadal można używać scrum? Może należałoby zastosować inną zwinną technikę? Dzięki za wszelką pomoc. Z poważaniem.


title: Jakiej licencji powinienem użyć w programie?

text: Opracowałem oprogramowanie, które chciałbym sprzedawać komercyjnie. Nie wiem, jakiej licencji powinienem użyć. Nigdy wcześniej nie używałem. Nie sądzę, żebym musiał/powinien sam napisać. Zasadniczo chcę ograniczyć użytkownikom końcowym wykonywanie tych czynności bez uprzedniego skontaktowania się ze mną: * udostępniaj program binarny innym * (odsprzedaj) oprogramowanie


title: Czy istnieją ustalone praktyki dotyczące wersjonowania udostępnionej usługi sieciowej?

text: Pracujemy nad usługą XML Web Service opartą na ASP.NET, z której będziemy korzystać do własnych celów, a także jako część oferty produktowej dla naszych partnerów integracyjnych. Po uruchomieniu będziemy pracować nad przyszłymi fazami projektu i wydaje mi się, że szczegóły usługi mogą z czasem ulec zmianie (podpisy metod, typy obiektów itp.), a ponieważ nie tylko my korzystamy z usług internetowych, będziemy musieli mieć pewien poziom koordynacji z naszymi partnerami. To, czego nie jestem pewien, to najlepszy sposób na zrobienie tego. Kiedy aktualizujemy usługę sieciową w taki sposób, że WSDL zostanie zmieniony, czy powinniśmy wdrożyć ją pod osobnym adresem URL? Czy powinniśmy przeciążać istniejące metody? Masz inaczej nazwane metody? Najlepiej byłoby, gdybyśmy po prostu wszystko skoordynowali i przeszli do nowych metod, ale nie widzę, żeby tak się działo. Czy istnieją dobre sposoby radzenia sobie z tym?


title: Jaka jest zasadnicza różnica między programowaniem zwinnym a programowaniem opartym na planach?

text: W zwinnym procesie właściciel produktu umieszcza nieformalne pomysły/historię użytkownika/elementy zaległości w sprincie/iteracji. Sprint/iteracja jest jak plan na krótki okres i jest napędzany codziennymi spotkaniami. Planowanie odbywa się w obu procesach. Jaka jest więc różnica między programowaniem zwinnym a programowaniem opartym na starym planie?


title: Jaka jest korzyść z usługi Azure ACS, jeśli ASP.NET 4.5 obejmuje dostawców OAuth i OpenID?

text: Azure ACS oferuje dostawców OAuth i OpenID, a teraz, gdy ASP.NET 4.5 oferuje to samo bez dodatkowych kosztów, czy jest jakiś powód, dla którego deweloper .NET powinien rozważyć ACS? (Zastrzeżenie, nie wiem, jaką wersję protokołu Oauth zapewnia każda usługa)


title: Różne rodzaje bezpieczeństwa

text: Języki programowania i programy (a także poszczególne funkcje, obiekty itp.) są często opisywane jako „bezpieczne” w taki czy inny sposób. Na przykład, mogą być one bezpieczne dla typu, bezpieczne dla pamięci, bezpieczne dla wyjątków, bezpieczne dla wątków, a nawet z możliwością ponownego wejścia. Każda z tych koncepcji ma na celu zapobieganie wykonywaniu błędnego lub szkodliwego kodu, co czyni je bardzo ważnymi kwestiami w projektowaniu języka i programu. Więc gdybym chciał być super pedantyczny w kwestii bezpieczeństwa, jakie są wszystkie rodzaje bezpieczeństwa, które mógłbym wziąć pod uwagę? Czy może być ich dowolna liczba, pozostawiając mi nadzieję, że znam wszystkie te, które mogą być dla mnie ważne? Kontekst pytania obejmuje porównanie języków takich jak Haskell z językami takimi jak C++: czysty Haskell jest świetny, jeśli chcesz zagwarantować bezpieczeństwo typu, pamięci i wątków. W C++ możemy obejść każdy z nich. Pomyślałem więc: „Gdybyśmy chcieli stworzyć całkowicie bezpieczny język, jakie rodzaje „bezpieczeństwa” moglibyśmy rozważyć?”


title: Czy przekazywanie parametrów jako obiektów jest złą praktyką programistyczną?

text: Mamy więc faceta, który lubi pisać metody, które przyjmują obiekty jako parametry, dzięki czemu mogą być „bardzo elastyczne”. Następnie, wewnętrznie, wykonuje bezpośrednie rzutowanie, odbicie lub przeciążanie metod, aby obsłużyć różne typy. Czuję, że to zła praktyka, ale nie potrafię wyjaśnić dokładnie, dlaczego, poza tym, że utrudnia to czytanie. Czy istnieją inne, bardziej konkretne powody, dla których byłoby to złą praktyką? Co by to było? * * * Tak więc niektórzy prosili o przykład. Ma zdefiniowany interfejs, coś w rodzaju: public void konstrukt(Object input, Object output); Planuje ich użyć, umieszczając kilka na liście, więc w pewnym sensie buduje bity i dodaje je do obiektu wyjściowego, tak jak poniżej: for (ConstructingThing thing : constructingThings) thing.construct(input, output); wyjście zwrotne; Następnie, w rzeczy, która implementuje `construct`, istnieje chwiejne odbicie, które znajduje właściwą metodę pasującą do wejścia/wyjścia i wywołuje ją, przekazując wejście/wyjście. Wciąż mu powtarzam, że działa, rozumiem, że działa, ale tak samo jak umieszczanie wszystkiego w jednej klasie. Mówimy o ponownym użyciu i utrzymaniu, i myślę, że faktycznie ogranicza się i ma mniej ponownego wykorzystania, niż myśli. Łatwość utrzymania, choć prawdopodobnie obecnie wysoka dla niego, prawdopodobnie będzie bardzo niska dla niego i wszystkich innych w przyszłości.


title: Jak mogę zdobyć więcej doświadczenia w programowaniu?

text: Będę studentem trzeciego roku informatyki i przeczytałem Head first Java, Head First C, a obecnie czytam C++, który jest językiem, który lubię najbardziej, ponieważ ma dobry styl nauczania dla osób z doświadczeniem. Planuję albo nauczyć się tworzyć oprogramowanie z QT, nauczyć się języka Objective-C (dla iPhone'a) albo przeczytać Efektywny C++. Jak zdobyć doświadczenie jako programista? Czy mam umiejętności, aby dołączyć do projektu open source, czy muszę nauczyć się php, mySQL lub innego języka. Uwielbiam programowanie i ogólnie informatykę, chociaż niektóre zajęcia mogą być niezwykle trudne (informatyka teoretyczna). Planuję też zostać guru w C++, ale to nie nastąpi w najbliższym czasie.


title: Czy znak zwrotu przewozu jest uważany za przestarzały?

text: Napisałem bibliotekę open source, która analizuje dane strukturalne, ale celowo pominęłam wykrywanie powrotu karetki, ponieważ nie widzę sensu. Dodaje dodatkową złożoność i koszty ogólne przy niewielkich lub żadnych korzyściach. Ku mojemu zdziwieniu, użytkownik zgłosił błąd, w którym parser nie działał i odkryłem, że przyczyną problemu było to, że dane używały zakończeń linii CR, a nie LF lub CRLF. Czy OSX nie używał końcówek linii w stylu LF od czasu przejścia na platformę opartą na uniksie? Wiem, że istnieją aplikacje takie jak Notepad ++, w których zakończenia linii można zmienić, aby wyraźnie użyć CR, ale nie widzę, dlaczego ktokolwiek chciałby to zrobić. Czy wykluczenie wsparcia dla statystycznie nieistotnego odsetka użytkowników, którzy decydują się (z jakiegokolwiek powodu) na końcówki linii w starym stylu Mac OS, jest bezpieczne? **Aktualizacja:** Aby wyjaśnić, obsługa zakończeń wierszy systemu Windows (np. CRLF) nie wymaga rozpoznawania tokena CR. Dla celów wydajności lekser dopasowuje się na podstawie znaku. Po cichu ignorując znaki CR, token CRLF upraszcza się do LF. W związku z tym sam token CRLF można uznać za własny anachronizm, ale nie o to chodzi w tym pytaniu. Ostatnim systemem operacyjnym, który zapewniał wsparcie dla zakończeń linii w stylu CR, był Mac OS 9. Jak na ironię, jedyną aplikacją, która nadal używa go jako domyślnego w OSX, jest Microsoft Excel.


title: Czy są jakieś podcasty (nie wykłady) dotyczące rozwoju kompilatora?

text: Istnieje kilka podcastów z wykładami z uniwersytetów. Szukam "innych" podcastów. Czy są więc jakieś podcasty, które nie są wykładami na temat rozwoju kompilatora?


title: Zwykle zajmuje mi bardzo dużo czasu, aby nauczyć się nowej koncepcji programowania. Czy nadaję się na programistę?

text: Przyznaję, że nie widziałem, jak szybko uczą się inni ludzie. Ale ja w moim przypadku zwykle zajmuje mi dużo czasu zrozumienie kilku linijek nowej koncepcji programistycznej. Na przykład od jakiegoś czasu programuję w jQuery i trochę w JavaScript. Sprawdzałem ten samouczek Backbone.js. Zrozumienie prostego bloku zabiera mi dużo czasu: var ListView = Backbone.View.extend({ el: $('body'), // dołącza `this.el` do istniejącego elementu. initialize (): Automatycznie wywoływane po tworzeniu instancji.Tym, gdzie tworzysz wszystkie typy powiązań, z wyłączeniem zdarzeń interfejsu użytkownika, takich jak kliknięcia itp. initialize: function(){ _.bindAll(this, 'render'); // naprawia utratę kontekstu dla 'this' w metodach this.render(); // nie wszystkie widoki renderują się samodzielnie. Ten jest. }, Nawet jeśli to wszystko jest skomentowane i wyjaśnione (nadal nie mogę dowiedzieć się, co to jest `el` i dlaczego jest podkreślenie przed `_.bindAll` i utknąłem z tym przez około godzinę).To naprawdę sprawia, że zastanawiam się, czy nadaję się na programistę, czy nie?


title: Jakie są względne zalety słowników w porównaniu z bazami danych?

text: Mam środowisko, które obsługuje zarówno słowniki (styl json), jak i bazy danych (nie relacyjne ani nic, po prostu sformatowane dane według wiersza i kolumny). Moja aplikacja tak naprawdę nie potrzebuje funkcjonalności bazy danych, ale jestem trochę bardziej komfortowy z systemem bazodanowym niż ze słownikami. Czy słowniki mają większą wydajność? Jakie są sytuacje, w których słownik jest lepszy niż baza danych?


title: Algorytm rekonstrukcji grafu na podstawie informacji o najkrótszej ścieżce?

text: Mam dane o najkrótszej ścieżce dla wykresu. Czy mogę zrekonstruować sam wykres na podstawie tych danych? Dokładniej, mam macierz logiczną (0/1) dla każdego wierzchołka _v_ na wykresie _(V, E)_. Element macierzy _[s,d]_ jest równy 1, jeśli _v_ znajduje się w najkrótszej ścieżce od wierzchołka źródłowego _s_ do wierzchołka docelowego _d_. Wszystkie krawędzie na wykresie mają tę samą długość. Na przykład dla wykresu (V1) -- (V2) -- (V3) trzy macierze byłyby następujące: V1: 1 1 1 1 0 0 1 0 0 V2: 0 1 1 1 1 1 1 1 0 V3: 0 0 1 0 0 1 1 1 1 Moje pytania: 1) czy istnieje algorytm rekonstruujący zbiór krawędzi E z tych macierzy? 2) czy rozwiązanie jest zawsze unikalne? (jest to bardziej osobista ciekawostka niż rzeczywisty wymóg) 3) czy algorytm można uogólnić na niejednorodne długości krawędzi?


title: Łączenie logiki biznesowej z definicjami klas

text: Być może jest to moje doświadczenie w pisaniu skryptów, ale moja perspektywa jest taka, że celem obiektu powinno być przechowywanie danych. Klasy są niezbędne, ponieważ zapewniają szablony i standardowe sposoby klasyfikowania i konstruowania obiektów z określonymi atrybutami danych. Standardowy protokół w projektowaniu zorientowanym obiektowo wydaje się zawierać logikę biznesową w definicjach klas. W systemie, który zależy od stanu, rozumiem motywację wiązania metod, której jedynym celem jest zmiana lub przywrócenie stanu obiektu do definicji klasy. Wykluczmy więc proste gettery, settery i konstruktory z zakresu rozmowy. Problemy, jak ja je widzę, zaczynają się, gdy _procesy_ są powiązane z obiektem. Rozważmy prostą metodę „string.equals()”, która przyjmuje ciąg znaków jako parametr i zwraca wartość logiczną wskazującą, czy ciągi są równoważne. Myślę, że ta prosta metoda może spowodować ogromne problemy. Załóżmy, że mam klasę LocationString dziedziczoną z String, gdzie equals() jest zastępowana w następujący sposób: Boolean equals(LocationString otherLocation) { return extractCountry().equals(otherLocation.extractCountry()); } String extractCountry(){ return this.getCountry(); } Załóżmy teraz, że mam tysiąc takich różnych obiektów z różnymi definicjami equals(), z których niektóre są takie same, a niektóre znacznie się różnią. Nagle zmienia się definicja równości na niektórych moich zajęciach. Niezwykle bolesne staje się ustalenie, które z definicji wymagają zmiany. Bolesne staje się ustalenie, czy należy zmienić inne procesy wewnętrzne, zwane metodą równości. W końcu wraz z rozwojem systemu traci się więcej godzin na przeszukiwanie kodu niż na jego analizę. W związku z tym, dla mnie o wiele bardziej sensowne jest zdefiniowanie ogólnej zasady równości, która modyfikuje jej zachowanie polimorficznie w zależności od otrzymywanych danych wejściowych. Rozważ następującą definicję: public static Boolean equals(Object a, Object b) { List locationClasses = Arrays.asList("LocationString") if (locationClasses.contains(a.getClass().getName()) && locationClasses.contains(b .getClass().getName()){ return equals(a.extractCountry(), b.extractCountry()); } else { return StringUtils.equals(a,b); } } Jeśli wszystkie procesy zostały zdefiniowane zewnętrznie, zmiana w procesie nie byłoby aż tak trudne do poprawienia i pod warunkiem, że te bardziej ogólne reguły mogłyby być przechowywane i klasyfikowane logicznie, byłyby łatwe do znalezienia i musiałyby zostać zmienione tylko raz, gdy zmieni się logika biznesowa.Podejście to wydaje się stosunkowo proste i proste Dlaczego zatem został on generalnie odrzucony na rzecz typowego obiektowego łączenia danych z metodami?


title: Licencja na fragmenty kodu

text: Zastanawiam się, czy istnieje powszechna licencja, która byłaby dobra dla _fragmentów_ kodu (np. rzeczy, które możesz po prostu wkleić do pliku), która spełnia następujące warunki: * Modyfikacje tego fragmentu muszą być otwarte * Brak ograniczeń w kodzie, który używa fragmentu kodu Czy ta licencja byłaby zbyt podatna na obejście problemu?


title: Czy słuszne jest utrwalanie obliczonej właściwości w DB?

text: Chciałbym wiedzieć, co myślisz o utrwalaniu "autoobliczonej właściwości" w bazie danych. Na przykład mam te właściwości dziesiętna Cena {get;set;} decimal Tax {get;set;} dziesiętna PriceWithTax {get {return Price + Tax;}} Myślę, że potrzebuję utrwalać `cena z podatkiem`. Mogę używać tej kolumny na przykład w widokach DB. Ale czuję, że to rozwiązanie może prowadzić do ukrytych błędów. Co myślisz? Edycja: Ok, staram się wyjaśnić nasz prawdziwy problem. Mamy klasę "Order", która posiada kolekcję przedmiotów - klasa ItemOrders. Klasa ItemOrder ma właściwość Price, a klasa Order ma właściwość TotalPrice. Oraz implementacja CenyCałkowitej: CenaCałkowita {get { return ItemOrders.Sum(i => i.Price); }} A my potrzebujemy sortowania, grupowania w bazie danych. Więc nie jest to reguła biznesowa, ale „reguła danych”.


title: Odwoływanie się do oficjalnej dokumentacji w dokumentacji kodu źródłowego

text: Jakie są twoje preferencje dotyczące odwoływania się do oficjalnej dokumentacji (takiej jak biała księga) dla algorytmu z komentarzy w kodzie, który go implementuje? Staram się wybierać między dwiema metodami, co ilustrują poniższe przykłady, ale jestem otwarty na inne sugestie. Na przykład RFC 1321 opisuje algorytm mieszający MD5. Gdybym implementował MD5 w Pythonie, korzystając z papieru jako przewodnika i dokumentował swój kod po drodze, którą z poniższych implementacji przykładowej funkcji `pad_string(str)` poleciłbyś, jeśli nie coś zupełnie innego? ### option 1 def pad_string(str): """ Dopełnia ciąg do zaszyfrowania do odpowiedniej długości. Patrz RFC 1321 3.1. """ gdzie odpowiednia sekcja RFC to: 3.1 Krok 1. Dołącz bity dopełniające wiadomość jest „dopełniona” (rozszerzona) tak, że jej długość (w bitach) jest zgodna z 448, modulo 512. Oznacza to, że wiadomość jest rozszerzona tak, że tylko 64 bity nie są wielokrotnością 512 bitów. Dopełnienie jest zawsze wykonywane, nawet jeśli długość wiadomości jest już zgodna z 448, modulo 512. **or** ### option 2 def pad_string(str): """ Dopełnia ciąg argumentów tak, aby jego długość była zgodna do 448, modulo 512. """ Tutaj **opcja 1** po prostu odwołuje się do odpowiednich części "oficjalnej" dokumentacji MD5 według numeru sekcji, gdzie **opcja 2** nie wspomina o papierze i zasadniczo w razie potrzeby powtarza jego treść. Zaletą pierwszego jest to, że dokumentacja jest nieco zgodna z DRY (Don't Repeat Yourself, w tym przypadku w odniesieniu do RFC), ale jej wadą jest to, że opiera się na zasobach strony trzeciej: jeśli jest to niejasna specyfikacja techniczna hostowane w jednym miejscu, a link podany w dokumentacji kodu umiera, to nie masz szczęścia. Zaletą drugiego podejścia jest to, że Twoje źródło jest samowystarczalne: podczas czytania nie potrzebujesz żadnych innych informacji, a nasz przykładowy skrypt MD5 stałby się tak samo opisem algorytmu, jak jego implementacją; to oczywiście wymaga więcej pisania ze strony autora kodu, może nadwyrężyć dokumentację i, co ważniejsze, może skończyć się błędnie skopiowanymi informacjami i innymi błędami. Czy istnieje konsensus co do tego, co jest lepsze?


title: Dlaczego kod jest czasami nazywany „wykazami”?

text: Czytając _Programmers at Work_ (autorstwa Susan Lammers), często odnoszą się do kodu jako „listingów”. Dlaczego?


title: Jak byś poszedł o tworzenie diagramu klas dla aplikacji JPA/JSF?

text: Tworzyłem diagram klas dla aplikacji, nad którą dzisiaj pracowałem i nie uwzględniłem encji JPA, ponieważ miałem wszystkie informacje, które uważałem za ważne w moich DAO, na przykład zależy mi tylko na tym, jak zarejestrować użytkownika niezależnie od tego, co informacje zawiera obiekt User, więc umieściłem tylko UserDao w moim diagramie klas i dodałem operację o nazwie register, która ma parametr typu User bez posiadania klasy User w moim diagramie. Moje pytanie brzmi: czy konieczne jest uwzględnienie każdej pojedynczej klasy, którą mam na moim diagramie, czy mogę pominąć klasy, które będę zmuszony dodać, ponieważ używam określonego frameworka, takiego jak JSF lub JPA?


title: Uruchamianie skryptu Pythona w tle na komputerze Mac

text: Mam skrypt Pythona, który zlicza liczbę plików w folderze, a jeśli liczba plików przekracza 10, tworzy wyskakujące okienko z prośbą o wyczyszczenie folderu (używam tkMessageBox). Jak mogę uruchomić program w tle, aby zużywał tylko minimalne zasoby? Próbowałem uruchomić go jako demon i jako agent, ale nic się nie działo (brak wyskakującego okienka).


title: jak zaprojektować tabele bazy danych dla statystyk pobierania plików?

text: Mam aplikację internetową, w której udostępniam pliki do pobrania w php. Wszystko działa dobrze i mam kolumnę pobierania w `polu pliku`, gdzie ją zwiększam. Ale chcę mieć pełną statystykę pobrań, np. ile pobrań „każdego dnia” lub „miesiąca” lub „pory dnia” lub „z której lokalizacji” Ale nie jestem w stanie znaleźć jak zaprojektować do tego tabele mysql . Czy muszę w tym celu loć każde żądanie pobrania w bazie danych. Dowolny wzorzec projektowy lub przykład tego w prawdziwym świecie


title: Wzorzec IClass, Class, ClassImpl?

text: Ostatnio widziałem dużo kodu, który wygląda tak: interfejs publiczny IFoo { int Bar(); } public statyczna klasa Foo { public statyczna IFoo Create() { return new FooImpl(); } private class FooImpl : IFoo { public int Bar () { ... } } } Zasadniczo istnieje kontrakt zdefiniowany przez interfejs, główna klasa obiektu biznesowego jest klasą statyczną udostępniającą metody fabryczne, a ponadto istnieje klasa, która zapewnia rzeczywistą implementację. Ten wzorzec ma pewne zalety, w szczególności czyste oddzielenie kontraktu od wdrożenia. Mimo to wydaje mi się to trochę brzydkie: zwłaszcza nazewnictwo statycznej klasy fabrycznej z nazwą obiektu biznesowego niepokoi mnie. Moje pytania to... 1\. Czy istnieje nazwa dla tego wzoru lub stylu rozwoju? 2\. Co myślisz o tym wzorze? Czy oprócz rygorystycznego ukrywania implementacji są jakieś inne korzyści? Czy istnieje lepszy sposób na osiągnięcie tych samych celów?


title: Jak dodać kolejny silnik skryptów do przeglądarek internetowych w systemie Linux / Windows / Mac?

text:
W moim (NIE!) wolnym czasie bawię się Lhogho i zastanawiam się, jak przekształcić go w silnik skryptów dla przeglądarek internetowych, a mianowicie
Moja pierwsza strona internetowa
    Jakieś sugestie, od czego zacząć? W przypadku systemu Windows przypuszczam, że interfejsy skryptów Microsoft Windows — wprowadzenie. A co z Linuksem i Macem? Po drodze próbuję również dowiedzieć się, jak zrobić Lhogho w języku po stronie serwera, podobnie jak PHP lub ASP, a mianowicie  <title>Preprocesor Lhogho</title>  <? print [Witaj świecie] ?>    Myślę, że będzie to nieco łatwiejsze. Może.


title: jak radzić sobie z programowaniem równoległym

text: Wiem, że programowanie równoległe jest dużym zasobem w grafice komputerowej, z nowoczesnymi maszynami i być może modelem obliczeniowym, który wyrośnie w niedalekiej przyszłości (czy ten trend jest prawdziwy?). Chcę wiedzieć, jak najlepiej sobie z tym poradzić. jest jakaś praktyczna użyteczność ogólnego przeznaczenia w badaniu n-wymiarowej siatki procesora lub sortowania bitonicznego w maszynach p-ram, czy jest to tylko teoria dla specyficznego dla domeny sprzętu używanego w rzeczywistych konkretnych opracowaniach sygnału symulacji naukowych? Czy to najlepszy sposób na zdobycie wiedzy, jak zapoznać się z cuda lub opencl? (interesuję się aplikacjami do grafiki komputerowej) i dlaczego programowanie funkcjonalne jest tak ważne dla zrozumienia obliczeń równoległych? ps: jak ktoś ma mi radę rozwidlałem tę dyskusję z http://stackoverflow.com/questions/4908677/how-to-deal-with-parallel- Programming


title: Jak ulepszyć to gniazdo w systemie TCP-IP?

text: Jestem nowy w programowaniu w Socket i buduję system Socket over TCP-IP z tą architekturą: ![system](http://i.stack.imgur.com/N2txX.png) **Serwer:** Zasadniczo odbiornik TCPIP który czeka na połączenie od klientów. **Klient:** Zna adres IP serwera i próbuje się połączyć, gdy połączenie jest ustawione, mogę wysyłać polecenia od innego klienta, który zachowuje się jak ADMIN. Innymi słowy jest to system czatu dostosowany do tego przypadku użycia. Gdy klient otrzyma polecenia z konsoli administracyjnej, przekazuje je do wyświetlacza LED podłączonego przez port szeregowy. Moje pytanie brzmi: Jeśli chcesz usunąć tych klientów (Laptop, PC) z systemu i podłączyć bezpośrednio do wyświetlacza LED, jak mogę to zrobić? Co się dzieje z logiką Klienta? Czy mogę wysyłać komendy z serwera bezpośrednio do wyświetlacza ledowego?


title: Jakie technologie oprogramowania stoją za aplikacjami internetowymi czasu rzeczywistego?

text: Jakie technologie oprogramowania stoją za aplikacjami internetowymi „w czasie rzeczywistym”, takimi jak Twitter, Trello, a nawet Gmail? Wiem, że na zapleczu jest serwer sieciowy i prawdopodobnie baza danych, ale jakie elementy oprogramowania przyczyniają się do tej bogatej interakcji w Internecie, której dzisiaj widzę więcej?


title: Jaki jest dobry wzorzec kodu dla pojedynczej próby, a następnie błędu?

text: Piszę procedurę, która ma następującą postać: TRY A IF bez powodzenia, B IF bez sukcesu, RETRY A IF bez powodzenia, wyrzuć błąd Wyodrębnienie A lub B do własnej procedury nie jest trywialne, więc **co jest najbardziej prosta struktura, która pozwoli mi ponowić próbę A bez duplikowania kodu?** Obecnie mam `do..while`, który pozwala na `N` ponownych prób: int retries = 1; do { // ZRÓB A if ( /*sukces*/ ) { przerwa; } else if (powtórzenia > 0) { // DO B if ( /*sukces*/) { przerwa; } } else { // wyrzuć błąd } } while (ponownie-- > 0); Jest to brzydkie i nie idealne, ponieważ oznacza, że mogę chcieć spróbować więcej niż raz, czego nie robię. Będę musiał użyć pętli, ale musi być prostszy sposób, którego nie widzę. Dla kontekstu, jest to kod wygenerowany w Javie, wykonujący instrukcje SQL, aby najpierw wypróbować `UPDATE`, a następnie, jeśli nie znaleziono żadnego wpisu do aktualizacji, `INSERT`, a jeśli to polecenie nie powiedzie się (współbieżność, już utworzone), spróbuj `UPDATE` ponownie.


title: Jak prowadzić zajęcia z systemów informatycznych zarządzania bez dostępu do komputerów?

text: Uczę wieczorami w więzieniu. Studenci potrzebują kursu komputerowego w zakresie systemów informatycznych zarządzania, aby spełnić wymagania stopnia naukowego. Nie ma dostępnych komputerów ani kalkulatorów i nie wolno mi wnosić sprzętu do więzienia. Większość z tego, co znalazłem w Internecie na ten temat, jest stworzona dla małych dzieci. Potrzebuję czegoś dla dorosłych.


title: Wzorzec projektowy: statyczne wywołanie funkcji z kontenerami wejścia/wyjścia?

text: Pracuję dla firmy w dziale badań oprogramowania. Używamy algorytmów z naszego prawdziwego oprogramowania i opakowujemy je, aby móc je wykorzystać do prototypowania. Za każdym razem, gdy interfejs algorytmu się zmienia, musimy odpowiednio dostosować nasze wrappery. Ostatnio wszystkie algorytmy zostały zrefaktoryzowane w taki sposób, że zamiast akceptować wiele różnych danych wejściowych i zwracać wyjścia za pomocą parametrów, do których się odwołujemy, akceptują teraz jeden kontener danych wejściowych i jeden kontener danych wyjściowych (ten ostatni jest przekazywany przez referencję). Interfejs algorytmu jest ograniczony do statycznego wywołania funkcji w następujący sposób: class MójAlgorytm{ static bool include(MyAlgorithmInput input, MyAlgorithmOutput &output); } W rzeczywistości jest to bardzo potężny projekt, chociaż nigdy wcześniej nie widziałem go w środowisku programistycznym C++. Zmiany w liczbie parametrów i ich typach danych są teraz enkapsulowane i nie zmieniają wywołania zwrotnego algorytmu. W najnowszym opracowanym przeze mnie algorytmie zastosowałem ten sam schemat. Teraz chcę wiedzieć, czy jest to popularny wzorzec projektowy i jak się to nazywa.


title: Jak bardzo model danych wpływa na skalowalność i wydajność w tzw. bazie danych „NoSQL”?

text: Nie można rozmawiać o tak zwanej bazie danych "NoSQL" bez przedstawienia twierdzenia CAP (spójność, dostępność, partycja: wybierz dwa). Jeśli musisz wybrać, powiedzmy, między MongoDB (partycja, spójność) a CouchDB (dostępność, partycja), najpierw musisz pomyśleć: „Czy potrzebuję poprawnych danych, czy potrzebuję dostępu przez cały czas?”. Te nowe bazy danych zostały _zrobione_ do partycjonowania. Ale co, jeśli ja tego nie zrobię? Co jeśli po prostu myślę, że fajnie jest mieć klucz/wartość, kolumnę, dokument, dowolną bazę danych zamiast relacyjnej i po prostu utworzyć jedną instancję serwera i nigdy jej nie dzielić? Czy w takim razie nie miałbym zarówno dostępności, jak i spójności? MongoDB nie musiałby niczego replikować, więc byłby dostępny. A CouchDB miałby tylko jedno źródło danych, więc byłby dość spójny. Czyli oznaczałoby to, że w takim przypadku MongoDB i CouchDB miałyby niewielką różnicę pod względem przypadku użycia? Cóż, oczywiście z wyjątkiem wydajności, API i innych, ale byłoby to bardziej jak wybór między PostgreSQL i MySQL niż posiadanie dwóch fundamentalnie różnych zestawów wymagań. Czy jestem tutaj? Czy mogę zmienić bazę danych AP lub CP na bazę AC, nie tworząc więcej niż jednej instancji? Czy jest coś, czego mi brakuje? Zadajmy pytanie w odwrotnej kolejności. Co jeśli wezmę relacyjną bazę danych, powiedzmy MySQL, i umieszczę ją w konfiguracji master/slaves. Nie używam transakcji ACID Jeśli żądam, aby jakikolwiek zapis był natychmiast zsynchronizowany z urządzeniem slave, czy nie uczyniłoby to bazy danych CP? A co jeśli zsynchronizuję to w określonych odstępach czasu i nie ma znaczenia, czy klient odczyta nieaktualne dane z slave'a. Czy to nie uczyniłoby z niej bazy danych AP? Czy nie oznaczałoby to, że jeśli zrezygnuję ze zgodności z ACID, nadal mogę używać modelu relacyjnego dla partycjonowanej bazy danych? W skrócie: czy skalowalność tego, z czego jesteś gotowy zrezygnować w twierdzeniu CAP, jest czymś więcej niż bazowym modelem danych? Czy posiadanie kolumny, dokumentu, wartości klucza, cokolwiek zwiększa skalowalność w stosunku do modelu relacyjnego? Czy możemy zaprojektować relacyjną bazę danych zaprojektowaną od podstaw pod kątem tolerancji partycji? (Może już istnieje). Czy możemy sprawić, by baza danych NoSQL była zgodna z ACID? Przepraszam, jest wiele pytań, ale ostatnio dużo czytałem o bazie danych NoSQL i wydaje mi się, że największą korzyścią z ich używania jest to, że lepiej pasują do "kształtu" twoich danych, a nie tylko do partycji, CAP i rezygnacja ze zgodności z ACID. W końcu nie każdy ma tyle danych, że musi je partycjonować. Czy istnieje korzyść w zakresie wydajności/skalowalności niekorzystania z modelu relacyjnego _zanim nawet pomyślę o partycjonowaniu moich danych?_


title: Czy nie wypada udzielać programiście niezamówionej konstruktywnej krytyki?

text: Niedawno rozpocząłem pracę w nowym biurze, które korzysta z autorskiego programu napisanego przez samodzielnego programistę. Od czasu do czasu pracuje jako pomoc techniczna w niepełnym wymiarze godzin, ale firma podpisała umowę z tym oprogramowaniem i nie otrzymuje już zapłaty za jego rozwijanie. Jako użytkownik jego oprogramowania istnieje wiele problemów, które wydają mi się źródłem obaw: * bardzo proste bezpośrednie przeglądanie bazy danych jako użytkownika o niskich uprawnieniach * hasła przechowywane w postaci zwykłego tekstu * hasła administratora słownika * aplikacja korzysta z roota bazy danych konto * DB nie spełnia 1NF (np. spotkanie1, spotkanie2, itp.) Czuję, że są to poważne problemy i gdybym był nim, chciałbym, aby mi je poinformowano, ale nie jestem wykwalifikowanym programistą ( Jestem pracownikiem socjalnym) i nie wiem, czy byłoby niegrzecznie z mojej strony, gdybym po prostu zapiął mu guziki i zaczął bełkotać o solonych haszyszach i normalnych formach, zwłaszcza gdy nie jest to już jego płatne zadanie. Czy to jest poza linią? Jeśli nie, jak byś się tym zajął? **Edytuj - więcej informacji podpowiadają komentarze:** * Aplikacja przechowuje poufne dane. * Jest do użytku wewnętrznego, ale działa na wielu maszynach w kilku miastach i wielu odwiedzających przychodzi przez nasze biura. * Moje obawy dotyczą zarówno przyszłych projektów dewelopera, jak i tego konkretnego.


title: Technika zniekształcania części obrazu w celu przejęcia cech z innego obrazu?

text: Mam projekt portalu społecznościowego, na którym ludzie mogą w określony sposób zmieniać/manipulować zdjęciami, które przesyłają. Na przykład osoba może wybrać różne kontury i punkty kontrolne na swoim nosie i zrobić to samo dla obrazu twarzy innej osoby, a tym samym zmienić swoje zdjęcie tak, aby zniekształcało nos tak, aby pasowało do czyjegoś. Założenie strony opartej na profilu, na której można przesyłać zdjęcia, jest pod pasem, ale zastanawiałem się, czy ktoś może wskazać mi właściwy kierunek do manipulacji zdjęciami. Szukałem skryptów/bibliotek - głównie php i python, ale nigdzie nie dotarłem. Próbowałem przeszukiwać złożone skrypty obrazkowe, ale to, co znalazłem, po prostu przykleiło jedno zdjęcie do drugiego. Jak wycinanie i wklejanie jednego nosa na innym obrazie, bez wtapiania go. Próbowałem przeszukiwać skrypty morfingu, ale po prostu znalazłem skrypty, które zamieniały jeden obraz w inny. Próbowałem wyszukać superpozycję obrazów, ale to dało tylko złożony skrypt obrazu. Żadne z powyższych nie jest tym, co próbuję zrobić. Jaka jest technika zniekształcania części obrazu w celu pobrania cech z innego obrazu?


title: Jaki jest najbardziej absurdalny mit o problemach z programowaniem?

text: Innymi słowy... Jakie jest najczęstsze i najbardziej frustrujące nieporozumienie dotyczące programowania, z jakim się spotkałeś? Które z powszechnych i długotrwałych mitów/błędnych przekonań **trudno programistom rozwiać/skorygować**. Proszę wyjaśnić, dlaczego to mit.


title: Modelowanie relacji treści w handlu elektronicznym za pomocą Entity Framework

text: W wolnym czasie buduję system e-Commerce, aby lepiej poznać tajniki ASP.net MVC, WebAPI i Entity Framework. Jedną z rzeczy, z którymi się zmagam, jest modelowanie relacji dla elementów treści (kategorii, produktów i stron internetowych). 1. Kategorie mogą mieć 1 kategorię nadrzędną lub jej brak. 2. Produkty mogą mieć 0 lub więcej kategorii, ale 1 może być określona jako podstawowa (dla domyślnej bułki tartej). 3. Strony internetowe mogą mieć 0 lub więcej kategorii, ale 1 może być określona jako podstawowa (dla domyślnej bułki tartej). 4. Chcę mieć możliwość określenia domyślnego porządku sortowania dla każdego w ramach kategorii nadrzędnej. To mówi mi, że będę potrzebować tabeli wiele do wielu z kolumną sortowania. 5. Chcę móc sprawnie liczyć i/lub wyświetlać produkty w dalszej części drzewa kategorii. Na przykład: Używając kategorii **Apple => MacBook** i **Apple => iMac** , chcę mieć możliwość wyświetlania produktów z MacBooka i iMaca w kategorii Apple. Ponieważ kategorie, produkty i strony internetowe mają podobne właściwości, takie jak nazwa, tytuł strony, opis meta, treść główna i opublikowana, stworzyłem abstrakcyjną klasę bazową o nazwie CatalogPage, z której wszystkie dziedziczą. Ponieważ kategoria, produkt i strona internetowa mają opcjonalną kategorię domyślną/nadrzędną, dołączyłem również wartości nullable **DefaultCategory/DefaultCategoryId** w klasie CatalogPage. Zakładam, że jeśli chcę, aby #5 był wydajny, będę musiał przechowywać nadmiarowe dane. Na przykład przechowuj Macbooka Air 11" jako dziecko zarówno Apple, jak i Macbooka. Jakie są dobre sposoby modelowania pozostałych relacji?


title: Jakiego rodzaju kodowania mogę użyć, aby skrócić łańcuch?

text: Jestem zainteresowany kodowaniem ciągu, który posiadam, i jestem ciekawy, czy istnieje rodzaj kodowania, którego można użyć, który będzie zawierał tylko znaki alfanumeryczne i najlepiej skróciłby liczbę znaków potrzebnych do reprezentowania ciągu. Do tej pory przyglądałem się użyciu kodowania Base64, aby to zrobić, ale wydaje się, że mój łańcuch jest dłuższy i czasami zawiera `==`, czego chciałbym uniknąć. Przykład: > nazwa testu|120101 staje się > dGVzdCBuYW1lfDEyMDEwMQ==, która ma długość od 16 do 24 znaków i zawiera znaki niealfanumeryczne. Czy ktoś zna inny rodzaj kodowania, którego mógłbym użyć, aby spełnić moje wymagania? Dodatkowe punkty, jeśli jest wbudowany w platformę .NET lub istnieje biblioteka innej firmy, która wykona kodowanie.


title: metody aktualizacji w prostych fabrykach

text: Mam prostą klasę fabryki z różnie nazwanymi metodami, które tworzą ten sam obiekt, ale inaczej. Te utworzone obiekty są utrwalane w db. Są one następnie pobierane z bazy danych w innym miejscu i modyfikowane w różny sposób w zależności od różnych warunków. Chcę pozostawić logikę warunkową wewnątrz klasy usługi i scentralizować tę modyfikację obiektu, tak jak to zrobiłem przy tworzeniu obiektów. Czy można dodawać metody aktualizacji* w prostej fabryce? Czy istnieje inny wzór, którego powinienem użyć zamiast tego? W idealnym świecie mógłbym dodać te metody aktualizacji do samego Dao, ale używam repozytoriów JPA dla Dao. Dlatego dodanie metod aktualizacji do Dao nie jest proste. Te metody aktualizacji obiektów wiadomości muszą znajdować się gdzie indziej i nie mogę zdecydować, gdzie. public class Message { // ma pewne właściwości } public class Messagefactory { public Message createMessageForConditionA() {} public Message createMessageForConditionB() {} public Message createMessageForConditionC() {} public Message createMessageForConditionD() {} // Czy to jest w porządku ? public Message updateMessageForConditionE() {} public Message updateMessageForConditionF() {} } public class MessageService { @Autowired private MessageDao messageDao; public Message createMessage(String warunek){ Wiadomość wiadomość = null; if(warunek.equals(A)) { wiadomość = utwórzWiadomośćDlaWarunkuA(); } else if(condition.equals(B)) { message = createMessageForConditionB(); } else if(condition.equals(C)) { message = createMessageForConditionC(); } else if(condition.equals(D)) { message = createMessageForConditionD(); } wiadomośćDao.save(wiadomość); wiadomość zwrotna; } public Wiadomość updateMessage(string messageKey, String warunek) { Message message = messageDao.findByMessageId(messageKey); if(warunek.equals(E)) { wiadomość = aktualizacjaWiadomościDlaWarunkuE(); } else if(warunek.equals(F)) { wiadomość = aktualizacjaWiadomościDlaWarunkuF(); } wiadomośćDao.save(wiadomość); wiadomość zwrotna; } }


title: Jakie jest uzasadnienie tych wyborów projektowych?

text: W tutorialu ReactJS nauczysz się budować system komentowania. To bardzo przydatny samouczek do zrozumienia biblioteki ReactJS, ale jest kilka opcji projektowych, których nie mogę w pełni zrozumieć. Zacznijmy więc od konfiguracji początkowej: System składa się z trzech komponentów: CommentBox, CommentList, Comment i Formularza komentarzy. Hierarchia jest następująca CommentBox CommentList CommentForm komentarza W samouczku zaimplementowano całą logikę pobierania danych w składniku CommentBox, który następnie przekazuje te dane do elementu CommentList, który renderuje je w modelu DOM. ** P1: Dlaczego? Czy jest to arbitralny wybór, czy jest za tym jakieś uzasadnienie?** Następnie, gdy w samouczku dochodzi do logiki zgłaszania nowych komentarzy, stwierdza się: > Gdy użytkownik prześle komentarz, będziemy musieli odświeżyć listę komentarzy > aby uwzględnić nowy. Cała ta logika w CommentBox > ma sens, ponieważ CommentBox jest właścicielem stanu **reprezentującego listę komentarzy**. **P2: Dlaczego CommentBox reprezentuje listę komentarzy, gdy istnieje inny komponent, który ją reprezentuje (CommentList, jak sama nazwa wskazuje)?** Ponadto, implementując logikę przesyłania, kod obsługujący POST komentarza do serwera jest częścią składnik CommentBox, opakowany w metodę, która jest przekazywana do CommentForm jako wywołanie zwrotne. Więc kiedy formularz CommentForm jest przesyłany, wywołuje funkcję CommentBox w celu wykonania żądania serwera, podczas gdy reszta logiki jest zaimplementowana w funkcjach CommentForm. **P3: Dlaczego nie cała logika przesyłania jest zaimplementowana w CommentForm?** _EDIT: jak stwierdziłem w komentarzu: „Zrozumiałem już architekturę aplikacji i koncepcję pudełka. Spieram się o szczegóły „indywidualnej implementacji” i **dlaczego niektóre opcje są lepsze niż inne** "_


title: Aplikacje i operacje interfejsu użytkownika w wątkach w tle

text: Nie jestem do końca pewien, jaki jest najlepszy sposób radzenia sobie z operacjami wykonywanymi w wątkach w tle w aplikacji, którą piszę. Piszę to w C# i podążam za wzorcem projektowym MVVM. Niektóre działania użytkownika są drogie i chciałbym je uruchomić w wątku w tle, co jest dość prostym podejściem. Następnie wątek roboczy modyfikuje mój model, który powiadamia ViewModel, że coś się zmieniło, a na koniec zmiana jest propagowana do widoku. Mój problem polega na tym, że wyzwolony łańcuch zdarzeń spowodowałby modyfikację widoku z wątku w tle, gdy jest to dozwolone tylko w wątku interfejsu użytkownika. Wiem, że mogę użyć dyspozytora wątków interfejsu użytkownika, ale nie jestem do końca pewien, gdzie (czy model widoku może być właściwym miejscem?), więc chciałbym wiedzieć, czy podążasz za jakimkolwiek wzorcem projektowym, aby rozwiązać tę sytuację.


title: Czy takie podejście do CSS jest poprawne?

text:
Czytając podstawowe funkcje SASS na ich stronie internetowej, natknąłem się na funkcję `@extend`. Przykład, który podają, jest następujący: .message { border: 1px solid #ccc; wypełnienie: 10px; kolor: #333; } .sukces { @extend .message; kolor obramowania: zielony; } .error { @rozszerz .wiadomość; kolor obramowania: czerwony; } .ostrzeżenie { @extend .message; kolor obramowania: żółty; } To kompiluje się do .message, .success, .error, .warning { border: 1px solid #cccccc; wypełnienie: 10px; kolor: #333; } .success { kolor obramowania: zielony; } .error { kolor obramowania: czerwony; } .warning { kolor obramowania: żółty; } Tak więc za pomocą tego fragmentu kodu HTML
witaj świecie
 stylizujesz swój element za pomocą właściwości `.message` i `.success`. Jednak uważam, że ten sposób pisania HTML (i CSS) jest bardzo słaby, jeśli chodzi o semantykę (nie widać wyraźnie z powyższego znacznika, że element ma _również_ stylizację `.message`). Czy powyższy fragment nie powinien brzmieć
witaj świecie
? Uważam, że jest bardziej opisowy i łatwiejszy do ponownego użycia. Na przykład mógłbym przypisać klasę `.success` (jak napisano w powyższym CSS, ale bez `@extend`) do innych elementów, które nie są wiadomościami, a więc używając klasy jako modyfikatora, w modzie BEM. **Więc moje pytanie brzmi, czy przykładowe podejście SASS jest bardziej pożądane niż moje?**


title: Jak mogę użyć guice, aby zastąpić kod zależny od implementacji lokalizatora usług?

text: Rozważmy, że mam usługę o nazwie FileSystem i że ten system plików jest używany przez różne klasy w całej aplikacji. Zazwyczaj usługa jest pozyskiwana za pomocą jakiejś statycznej metody klasy ServiceLocator.getService(FileSystem.class) Teraz rozważmy, że mam klasę Game, która zależy od obiektu FileSystem, aby otworzyć niektóre zasoby interfejsu użytkownika. Gra zbuduje również świat, korzystając z WorldFactory. WorldFactory wymaga również usługi FileSystem. Tutaj napotykam problem, konstruuję nową instancję WorldFactory - która wymaga wstrzyknięcia do niej instancji FileSystem. Guice nie będzie jednak wprowadzał do obiektów, których nie zbudował. Tak więc WorldFactory pozostaje bez wstrzykiwanego do niego systemu plików. Mógłbym więc przekazać obiekt FileSystem do WorldFactory, ale w gruncie rzeczy Guice nie rozwiązał żadnego z moich problemów i zdałem sobie sprawę, że nie używam Guice poprawnie, ponieważ mogę to wszystko zrobić bez niego? Tak więc otrzymujesz dziwną instancję, w której konstruktor encji gry wymaga przekazania instancji do AudioSystem, do której może odtwarzać dźwięk. Po prostu robi się bardzo nieporządny, gdy wszystkie te obiekty/usługi są jawnie przekazywane. Dziękuję. Nadal jestem nowy w prowadzeniu i próbuję dowiedzieć się, jak z niego korzystać.


title: Jak mogę dać mojemu klientowi "pełny dostęp" do bazy danych MySQL jego aplikacji PHP?

text: Buduję aplikację PHP dla klienta i poważnie rozważam WordPress lub prosty framework, który pozwoli mi szybko zbudować funkcje, takie jak fora itp. Jednak klient jest nieugięty, aby mieć „pełny dostęp” do bazy danych i możliwość „wydobycia danych”. Niestety, jestem prawie pewien, że będą rozczarowani, gdy zdadzą sobie sprawę, że nie będą w stanie łatwo uzyskać znaczącego wglądu, patrząc na zserializowane pola w wp_usermeta itp. Jedną z myśli, jaką miałem, było zreplikowanie odmiany na żywo w bazie danych, w której spłaszcz wszystkie te niejednoznaczne i/lub zserializowane pola w coś, co może być następnie przeanalizowane przez zwykłego śmiertelnika za pomocą tak prostego narzędzia jak phpMyAdmin. Niestety, klient nie zadowoli się prostym backendowym dashboardem, w którym tworzę dla niego niestandardowe raporty, chociaż wiem, że byłoby to najłatwiejsze i najbardziej rozsądne podejście.


title: Czy powinienem utworzyć „zastępczy” przypadek nadrzędny, czy skonfigurować obszary?

text: Używam FogBugz do zarządzania projektami i nie jestem pewien, jak uporządkować moje sprawy. Posiadam różne funkcje, które wymagają wdrożenia w ramach tego projektu. Na przykład, jeśli mam nową funkcję do włączenia autouzupełniania w polu tekstowym wyszukiwania, może to mieć następujące przypadki: * Metoda zwracania wyszukiwanych haseł * Zmiany w interfejsie w metodzie żądania * Zmiany w interfejsie w celu wyświetlania wyszukiwanych haseł. utworzyć je jako **podsprawy** w ramach sprawy „Autouzupełnianie”, czy też jako sprawy najwyższego poziomu w **obszarze o nazwie „Autouzupełnianie”?


title: Poszukiwanie najlepszych praktyk dotyczących numerowania wersji zależnych komponentów oprogramowania

text: Staramy się zadecydować o dobrym sposobie na numerowanie wersji dla komponentów oprogramowania, które są od siebie zależne. Bądźmy bardziej konkretni: składnik oprogramowania A to oprogramowanie układowe działające na wbudowanym urządzeniu, a składnik B to odpowiedni sterownik dla normalnego komputera (komputer z systemem Linux/Windows). Komunikują się ze sobą za pomocą niestandardowego protokołu. Ponieważ nasz produkt jest również skierowany do programistów, będziemy oferować stabilne i niestabilne (eksperymentalne) wersje obu komponentów (firmware jest o zamkniętym kodzie źródłowym, podczas gdy sterownik jest o otwartym kodzie źródłowym). Naszą największą trudnością jest obsługa zmian API w protokole komunikacyjnym. Podczas gdy wdrażaliśmy kontrolę zgodności w sterowniku - sprawdza ona, czy wersja oprogramowania jest zgodna z wersją sterownika - zaczęliśmy omawiać wiele sposobów numerowania wersji. Wymyśliliśmy jedno rozwiązanie, ale mieliśmy też ochotę wynaleźć koło na nowo. Dlatego chciałbym uzyskać informację zwrotną od społeczności programistów/programistów, ponieważ uważamy, że jest to powszechny problem. Oto nasze rozwiązanie: Planujemy podążać za powszechnie stosowaną numeracją wersji _major.minor.patch_ i używać parzystych/nieparzystych podrzędnych numerów dla wersji stabilnych/niestabilnych. Jeśli wprowadzimy zmiany w API, zwiększymy mniejszą liczbę. Ta konwencja doprowadzi do następującej przykładowej sytuacji: Bieżąca stabilna gałąź to 1.2.1, a niestabilna to 1.3.7. Teraz nowa łatka dla niestabilnej zmienia API, co spowoduje, że nowy niestabilny numer wersji stanie się 1.5.0. Kiedy niestabilna gałąź zostanie uznana za stabilną, powiedzmy w 1.5.3, wydamy ją jako 1.4.0. Chętnie udzielę odpowiedzi na którekolwiek z poniższych pytań: * Czy możesz zaproponować najlepsze praktyki dotyczące rozwiązywania problemów opisanych powyżej? * Czy uważasz, że nasza „niestandardowa” konwencja jest dobra? * Jakie zmiany wprowadziłbyś do opisywanej konwencji?


title: Jak w Subversion skonfigurować nową główną wersję mojej aplikacji?

text: Zaraz rozpoczynam pracę nad nową wersją (wersja 4) mojej komercyjnej aplikacji. Używam Subversion. Opierając się na twoich doświadczeniach, błędach i sukcesach, jak poleciłbyś skonfigurować nową wersję w Subversion? Oto kilka informacji: Zamierzam wypuszczać krytyczne aktualizacje w wersji 3 przez jakiś czas po wydaniu wersji 4. Jednak wszystkie nowe funkcje będą opracowywane wyłącznie w wersji 4. Jeśli ma to znaczenie: jestem samodzielnym programistą tego produktu i prawdopodobnie tak pozostanie. EDYCJA: Jestem świadomy tagów i gałęzi SVN. Myślę, że potrzebuję optymalnej strategii używania tagów i gałęzi w mojej sytuacji.


title: Czuję się utknąłem w centrum Pythona, Jak ominąć początkującego

text: Naprawdę przepraszam, jeśli to nie jest zgodne z zasadami S.O, ale potrzebuję trochę pomocy, osobiście nadal klasyfikuję się jako początkujący w Pythonie. Jednak napisałem bardzo mały i BARDZO NIEpraktyczny program dla mojego szefa. Wiem, że wciąż jestem początkujący, ponieważ proste rzeczy wciąż mnie wprawiają w zakłopotanie, ale każda książka, którą czytam dla początkujących, uczciwie powtarza to, co już wiem, ale każda „bardziej zaawansowana” książka tak naprawdę nie pozwala mi się uczyć, zależą od przykładowych plików i nigdy tak naprawdę nie rozumiem, dlaczego zbudowali funkcję „powiedział” lub klasę „powiedział”. Więc na moje pytanie ... Czy są jakieś zalecenia dotyczące książki lub czegokolwiek, co wypycha mnie z tego etapu, najpierw użyłem głowy i zwykle są naprawdę dobre, ale mój problem polega na tym, że śledzą mnie wstecz, aby iść do przodu znowu, działało w HTML, ale jest mylące w Pythonie, w zasadzie myślę, że muszę zbudować program, podążając za nim, Znowu podoba mi się styl HeadFirst, ale potrzebuję czegoś, co nie sprawi, że będę musiał pamiętać o jednej rzeczy, aby zapomnieć to... dla przypomnienia, sprawdziłem w niektórych książkach O'Reilly


title: Licencje na oprogramowanie: zakaz dystrybucji i sprzedaży prywatnej przy użyciu podwójnych licencji

text: Niedawno napisałem kilka motywów WordPress w PHP i zastanawiałem się, jaką licencję powinienem na nie umieścić. Nie mam nic przeciwko ponownemu wykorzystaniu mojego kodu przez użytkowników, ale nie chcę, aby mogli sprzedawać i rozpowszechniać moje motywy, ponieważ chcę zachować to prawo. Słyszałem gdzieś, że link _wszystkie prawa zastrzeżone_ zatrzyma dystrybucję itp... Czy to prawda, czy muszę dołączyć inną licencję i podwójną licencję na moje motywy? Podsumowując, chcę użyć licencji, aby powstrzymać innych przed sprzedażą i dystrybucją moich motywów, jednocześnie pozwalając innym korzystać z kodu, jeśli chcą.


title: Czy wypróbowałeś Chronon "Time Travelling Debugger" Javy - jeśli tak, to czy warto spróbować i dlaczego?

text: Po raz pierwszy usłyszeliśmy o tym z Google Tech Talks, w 2009 roku, kiedy nazywał się Silver Bullet: http://www.youtube.com/watch?v=LpfmKIxusZY Teraz nazywa się Chronon... http://chrononsystems.com/ " Brzmi nieźle, czy wypróbowałeś Chronon "Time Travelling Debugger" Javy - jeśli tak, to czy warto spróbować i dlaczego?


title: Czy obsługa makr w języku programowania jest uważana za szkodliwą?

text: Pierwsze nadużycie, które przychodzi mi do głowy w C to: #define if while Ale jednocześnie jest niezwykle poręczne i potężne, gdy jest używane poprawnie. Coś podobnego dzieje się z makrami Common Lisp. Dlaczego nie wszystkie języki programowania obsługują makra takie jak to i jakie są alternatywy? Czy są uważane za szkodliwe?


title: Strona do przeglądu kodu

text: Wiem, że wszyscy staramy się ulepszyć naszą strukturę i styl naszego kodu, starając się być naprawdę zwinni. Witryny takie jak Stack Overflow są świetne, gdy chcesz uzyskać odpowiedź na konkretne pytanie, ale co z krytyką swojej pracy. Czy są jakieś społeczności, które skupiają się na przeglądzie kodu lub, jeszcze lepiej, rozwiązaniach zwinnych, a jeszcze lepiej na rozwiązaniach T/BDD?


title: Recenzje kodów online

text: > **Możliwy duplikat:** > Witryna do przeglądu kodu Gdzie mogę opublikować swój kod online, aby ludzie mogli komentować, zgłaszać sugestie i/lub krytykować? Próbowałem 4chan, ale ludzie szybko tracą zainteresowanie, jeśli nie powiesz czegoś naprawdę głupiego. Pomysły? Mój język można znaleźć na http://github.com/tekknolagi/gecho/tree/testing


title: Usługi weryfikacji kodu

text: > **Możliwy duplikat:** > Strona internetowa poświęcona przeglądowi kodu Jako jedyny programista projektu Sharp Architecture, chciałbym znaleźć sposób na przeprowadzenie przeglądu kodu. Jak ludzie to robią? Czy są usługi, które ludzie mogą polecić? Edycja: W szczególności potrzebuję przeglądu kodu dla całego projektu - duże zadanie.


title: Jak zdobyć współpracowników do projektu na Androida?

text: Jak zachęcić ludzi do współpracy nad pomysłem na projekt, który mam/faktycznie wnoszę? Jestem trochę wrażliwy na mój pomysł z kilku powodów: 1. Nie chcę, żeby ludzie podjęli mój pomysł. 2. Mam kilka osób, które chciały pomóc, ale potem praca/rodzina/szkoła nie pozwalają im mieć czasu i sprawiają, że jestem mniej entuzjastyczny. Na razie jest właściwie ok, bo zmusiło mnie to do oswojenia się z PHP i serwerami i dopiero pracowałem nad tym sam, bo chcę się uczyć i bawić, ale w pewnym momencie będę potrzebował innych do pomocy, aby uczynić go solidnym i gotowym do dystrybucji. Jak pozyskać współpracowników, kiedy będę ich potrzebować? Czuję, że powinienem teraz zacząć to rozgryźć. Właśnie uczyłem się pisać oprogramowanie używając głównie Stack Overflow, poradników idiotów i YouTube'a. Świetnie się uczy, ale rozwój jest powolny.


title: Planowanie projektów rozwojowych

text: Obecnie dokonujemy ponownej oceny sposobu, w jaki zarządzamy, planujemy i prowadzimy nasze projekty (obszar, który myślę, że możemy znacznie poprawić), więc chciałem tylko uzyskać kilka pomysłów na to, jak inne zespoły programistyczne podejmą się rozpoczęcia nowego projektu aplikacji internetowej . Obecnie, po wstępnych spotkaniach z klientami, opracowujemy prosty dokument planistyczny, który przedstawia, co zamierzamy dla nich stworzyć (zazwyczaj zawiera on zrzuty ekranu różnych sekcji aplikacji i trochę szczegółów na temat tego, co zrobi każda strona). Kiedy już się na to zgodzimy, programiści przyzwyczajają się do tego jako plan rozwoju. Nie mogę pomóc, ale czuję, że nam tutaj brakuje, ponieważ dokument planowania klienta po prostu nie jest wystarczająco szczegółowy i tak naprawdę nie pokazuje żadnych decyzji dotyczących logiki biznesowej podejmowanych w aplikacji. Po opracowaniu aplikacja przechodzi do testów, w których testerzy rejestrują błędy w arkuszu kalkulacyjnym Excel. Czuję, że jest to również bardzo podstawowy sposób robienia rzeczy. Spojrzałem na aplikacje internetowe, takie jak Sifter i myślę, że tak powinniśmy robić rzeczy. Używamy TFS jako naszej kontroli źródła, ale śledzenie błędów jest przesadą dla tego, czego potrzebujemy. Chciałbym się od was dowiedzieć, jakiego rodzaju dokumentację tworzycie dla projektów i jakie procesy stosujecie podczas planowania i rozwoju.


title: SQL Servers Resource Governor — zalety i wady

text: Z tego, co przeczytałem o SQL Server Resource Governor, tak naprawdę nie ma żadnych wad. Zastanawiam się nad wdrożeniem go do naszej infrastruktury, w której hostujemy strony internetowe, a także system zarządzania i raportowania. System zarządzania wymaga załadowania danych, co musi być wykonywane poza godzinami pracy, ponieważ wymaga dużej ilości zasobów i ma efekt domina na stronach internetowych. Tak więc użycie gubernatora zasobów do rozdzielenia zasobów ma sens. jakieś pomysły?


title: Algorytm obliczania trajektorii z pola wektorowego

text: Mam dwuwymiarowe pole wektorowe, tj. dla każdego punktu `(x, y)` mam wektor `(u, v)`, natomiast `u` i `v` są funkcjami `x` i `y `. To pole wektorowe kanonicznie definiuje zbiór trajektorii, tj. zbiór ścieżek, które obrałaby cząstka, gdyby podążała wzdłuż pola wektorowego. Na poniższym obrazku pole wektorowe jest przedstawione na czerwono, a cztery trajektorie są częściowo widoczne, przedstawione w kolorze ciemnoczerwonym: ![trajektorie](http://i.stack.imgur.com/u78WF.gif) I potrzebujesz algorytmu, który skutecznie oblicza niektóre trajektorie dla danego pola wektorowego. Trajektorie muszą spełniać pewien rodzaj minimalnej gęstości na płaszczyźnie (dla każdego punktu na płaszczyźnie musimy mieć trajektorię „w pobliżu”) lub inny warunek, aby uzyskać rozsądny zestaw trajektorii. Nie mogłem znaleźć niczego przydatnego w Google na ten temat, a Stackexchange również nie radzi sobie z tym tematem. Zanim zacznę samodzielnie opracowywać taki algorytm: **Czy są jakieś znane algorytmy dla tego problemu? Jak się nazywają, jakich słów kluczowych muszę szukać?**


title: Jak napisać optymalne oprogramowanie komunikatora LAN?

text: Zadaję to pytanie jako rozszerzenie następującego pytania: https://superuser.com/questions/713409/how-to-message-any-user-on-your-lan Nie sądzę, że mam prawdziwą odpowiedź . Uznałem, że dość trudno jest uruchomić polecenie `net send` działające w systemie Windows 7, a nawet gdybym mógł, byłoby ono włączone tylko dla administratorów. Postanowiłem więc napisać własny program, który rozwiąże ten problem. Używając `pythona` mogę napisać program sprawdzający wiadomości we wspólnym pliku (który mogę przechowywać na wspólnym dysku twardym, który mamy w naszej sieci LAN). Program napisze więc `from:192.168.23.44 to:192.168.23.45 Hello`. Zakładając, że program jest zainstalowany na obu komputerach, mogę poprosić komputery, aby co kilka sekund sprawdzały ten plik i wyświetlały komunikat, jeśli wiadomość została dla niego napisana, wyszukując ją w polu `to:`. Jeśli pisanie do jednego pliku stanie się problemem, stworzę wiele plików, które będą pełnić rolę skrzynek odbiorczych dla każdego komputera w sieci LAN. Jednak takie podejście jest bardzo nieeleganckie. Nie sądzę, aby komunikatory internetowe, na przykład Google Talk, odpytywały serwer, aby sprawdzić, czy są jakieś nowe wiadomości dla użytkownika. Więc moje pytanie brzmi: jaki jest optymalny sposób napisania programu LAN messenger. Teraz, gdy o tym myślę, szukam minimalistycznego podejścia. Po prostu umieszczę program w folderze `Startup` na wszystkich komputerach i powinien on aktywować się za każdym razem, gdy zaloguje się jakikolwiek użytkownik. Udało mi się po prostu skonfigurować komputer tak, aby odpowiadał na polecenie `ping`, tworząc nową regułę dla Protokół ICMPv4 (ref: http://answers.microsoft.com/en-us/windows/forum/windows_7-networking/how-to-enable-ping-response-in-windows-7/5aff5f8d-f138-4c9a-8646 -5b3a99f1cae6). Zgaduję, że odpowiedź leży w `pythonie` i protokole `ICMPv4`, ale potrzebowałem jakiegoś kierunku.


Czy znaczniki języka IETF BCP 47 są zdefiniowane jako wyliczenia w dowolnym miejscu w JDK? Dla `Locale.forLanguageTag()` przekazujemy wartości takie jak `fr-FR`, `jp-JP` itd. Czy JDK dostarcza już jakieś wyliczenia? A może programista powinien pisać w tym celu niestandardowe wyliczenie? Jak sobie z tym poradzić w aplikacji i18n?


title: Git Branch Model dla projektów iOS z jednym deweloperem

text: Używam git do projektu iOS i do tej pory mam następujący model gałęzi: feature_brach(zwykle wiele) -> development -> testing -> master Gałęzie funkcji są krótkotrwałe, służą tylko do dodania funkcji lub błędu, następnie połączyła się z powrotem w programowaniu i została usunięta. Rozwój jest dość stabilny, ale nie gotowy do produkcji. Testowanie jest wtedy, gdy mamy stabilną wersję z wystarczającą liczbą funkcji do nowej aktualizacji i wysyłamy ją do beta testerów. Po zakończeniu testowania można go przenieść z powrotem do wersji deweloperskiej lub zaawansować do wersji master. Problem polega jednak na tym, że nie możemy od razu wdrożyć. W systemie iOS może minąć kilka tygodni między wydaniem kompilacji a faktycznym trafieniem w użytkowników. Zawsze chcę mieć w moim repozytorium wersję kodu, która jest aktualnie dostępna na rynku, ale muszę też mieć miejsce na przechowywanie aktualnego, stabilnego kodu, który zostanie wysłany do wydania. A więc: * gdzie powinienem trzymać stabilny kod * gdzie powinienem trzymać kod aktualnie dostępny na rynku * i gdzie powinienem trzymać kod, który jest w trakcie sprawdzania z Apple i zostanie (mam nadzieję) wkrótce wprowadzony na rynek? Ponadto jest to jeden zespół programistów, więc współpraca nie jest całkowicie konieczna, ale preferowana, ponieważ w przyszłości może być więcej członków.


title: Usługa jako model w MVC

text: Mam aplikację PHP MVC i tabelę plików. Muszę zaimplementować funkcjonalność: oznacz wszystko jako przeczytane. Najlepszym rozwiązaniem dla kodu, który do tej pory znalazłem, było umieszczenie rzeczywistej implementacji w pliku Model/Service/FileService.php. Problemem jest to, że klasa FileService będzie bardzo szybko rozdęta z różnymi funkcjami. Jakie byłoby dobre rozwiązanie, aby uniknąć nadętych usług. Czy powinienem utworzyć różne Usługi dla każdej akcji?


title: Ty piszesz serwer, ja piszę klienta: Najlepsze praktyki projektowania API?

text: Pracuję nad zupełnie nową aplikacją, która obejmuje klienta i serwer. W szczególności jest to natywna aplikacja mobilna komunikująca się z serwerem sieciowym przy użyciu niestandardowego interfejsu API, który zdefiniujemy. Zostałem zatrudniony do napisania klienta, a inny facet (nigdy nie spotkałem) został zatrudniony do napisania serwera. Aby rozpocząć, musimy uzgodnić API. Oboje mamy na to bardzo różne perspektywy, pracując z różnymi technologiami. Każdy z nas może nawet nie być pewien, jakie drobne zmiany ułatwiają lub utrudniają życie drugiemu facetowi. Nie mogę dostarczyć klienta, jeśli jego serwer nie działa, a jego serwer jest całkiem bezużyteczny bez klienta. Jakie są dobre strategie radzenia sobie z takimi układami? Wiem, że odpowiedź zwykle sprowadza się do „to zależy od twojej sytuacji”, ale jeśli mogę uczyć się na cudzych błędach, to na pewno nie zrobię ich ponownie na własną rękę.


title: Do jakich kwalifikacji firmy Microsoft powinien pracować deweloper C# ASP.NET Web?

text: Od 4 lat pracuję jako web developer vb.net ASP.NET, a obecnie przechodzę na C# Poza kwalifikacjami szkolnymi/szóstymi aktualnie brak mi kwalifikacji branżowych, i chcę rozpocząć pracę nad kwalifikacją Microsoft. Jaka kwalifikacja byłaby najbardziej odpowiednia dla mnie do pracy? Wszelkie odpowiednie linki byłyby najbardziej mile widziane.


title: Jak radzić sobie w sytuacjach „końca życia oprogramowania”?

text: Kiedy sprzedawca deklaruje, że nie zamierza już świadczyć żadnego wsparcia ani usług dla oprogramowania (i wyraził zamiar zakończenia działalności – nie oferując ścieżek uaktualnień), jaki rodzaj rozwiązania jest dostępny dla klienta? Rozważ to z punktu widzenia _klienta_. Personel IT klienta prawdopodobnie rozważy tylko opcje techniczne, ale są też prawdopodobnie opcje nietechniczne, z których klient może skorzystać. Ponadto, jakie rozsądne kroki może podjąć klient z wyprzedzeniem, aby zminimalizować zakłócenia, na przykład w warunkach umowy? Rzeczy, które przychodzą mi do głowy: * Konieczność zakupu zapasowego sprzętu i skonfigurowania zapasowego środowiska, w którym oprogramowanie może nadal działać. * Różne metody eksportu danych, które nie wymagają zaangażowania dostawcy. (Może to obejmować techniki trywialne, takie jak badanie danych przechowywanych w zapleczu bazy danych towarów, do bardziej skomplikowanych technik, takich jak skrobanie ekranu, drukowanie do obrazu, a następnie ponowne skanowanie itp.) * Systemy równoległe, w których personel powiela stare dane do nowy system ręcznie lub półautomatycznie * Środki prawne w przypadku kłopotów finansowych dostawcy (jak w przypadku depozytu kodu źródłowego) Inne pomysły? * Zakładając, że nie ma żadnego „obejścia” (bez DRM, bez DMCA), czy odzyskiwanie danych lub inżynieria wsteczna są legalne/akceptowalne? _**Zredagowano:_** _Jest to połączenie kilku anegdotycznych, ale prawdziwych historii. Nie jestem bezpośrednio zaangażowany w żadną z nich. Moim pragnieniem jest po prostu dowiedzieć się, jak ogólnie radzimy sobie z sytuacją „końca życia oprogramowania”. Nie jest moim zamiarem, aby oryginalna historia brzmiała jak zbyt „trudna”, aby można ją było rozwiązać._


title: Licencja czasu wykonywania Sencha Ext JS

text: Czy musisz kupić licencję run-time od Sencha, jeśli kod Twojej aplikacji jest napisany w Ext JS i wdrożony na serwerze WWW? http://www.sencha.com


title: Współpracuj w UML online

text: Kilkoro przyjaciół i ja zaczynamy hobbystyczny projekt programistyczny. Zastanawiam się, czy istnieje jakaś dobra metoda/narzędzie/usługa, która pozwala nam współpracować nad diagramami UML online. Może to mieć dowolną formę (bezpośrednia edycja online, styl kontroli źródła itp.), o ile możemy wprowadzać zmiany niezależnie od siebie.


title: Jak pozwolić światu zewnętrznemu ozdobić moje prywatne pole?

text: Wyobraź sobie prosty interfejs kontrolera (jak w kontroli procesu). Mam kilka konkretnych klas, powiedzmy `PIDController`, które to implementują. Mam również kilka klas dekoratorów, które w jakiś sposób rozszerzają te klasy, powiedzmy `ITAETuningDecorator`. Teraz wyobraź sobie, że klasa `FloodGate` ma prywatne pole `Controller`. Chciałbym, z zewnątrz iw czasie wykonywania, dołączyć do kontrolera `Controller` w `FloodGate` element `ITAETuningDecorator`. Jak mogę to zrobić? Nie mam dostępu do pola z zewnątrz i oczywiście dekorator potrzebuje odniesienia do oryginalnego kontrolera do zbudowania.


title: Redundancja spowodowana polimorfizmem

text: Mam dwa czaty, jeden zachowuje się jak administracja, a drugi nie. Umieściłem cały wspólny kod w podstawowym pokoju rozmów, ale zachowanie `AdministerChatroom` wyciągnąłem do interfejsu o nazwie `IAdministrable` i znajduje się ono w podstawowej klasie pokoju rozmów. Mój problem polega na tym, że ponieważ interfejs jest w klasie bazowej, co pozwala na polimorficzne zachowanie, klasa `NonAdministratableChatroom` musi zaimplementować to zachowanie, nawet jeśli nic nie zrobi. Widziałem, jak niektórzy programiści umieszczają interfejs tylko na jednej podklasie: klasie, która zachowuje się, w tym przypadku na metodzie `AdministerChatroom`, a kiedy używany jest czat, po prostu sprawdzają istnienie interfejsu `IAdministrable`, coś w stylu `if(Chatroom is IAdministraable){ // zrób coś }`, co wydaje się pogwałceniem zasady "tell don't ask". Wydaje mi się, że mam dwie możliwości: trzymam się polimorficznego wzorca strategii lub testuję instancję pod kątem interfejsu; ten pierwszy wydaje się lepszy, ale zastanawiam się, czy są jakieś inne opcje? Kod klas wygląda następująco: interfejs publiczny IAdministrable { void AdministerChatroom(); } public abstract class BaseChatRoom : IAdministrable { public void Close() { } public abstract void AdministerChatroom(); } public class AdministrableChatroom : BaseChatRoom { private readonly Administrator _administrator; public AdministrableChatroom(Administrator administrator) { _administrator = administrator; } nadpisanie publiczne void AdministerChatroom() { _administrator.DoSomethingSpecial(); } } public class NonAdministratableChatroom : BaseChatRoom { public override void AdministerChatroom() { // nic nie rób, ponieważ nie jest to możliwe do administrowania } } public class Uczestnik { } public class Administrator : Uczestnik { public void DoSomethingSpecial() { // zaimplementuj tutaj coś specjalnego } }


title: TDD: Wyśmiewanie ściśle powiązanych obiektów

text: Czasami przedmioty muszą być po prostu mocno połączone. Na przykład klasa `CsvFile` prawdopodobnie będzie musiała ściśle współpracować z klasą `CsvRecord` (lub interfejsem `ICsvRecord`). Jednak z tego, czego nauczyłem się w przeszłości, jedną z głównych zasad programowania opartego na testach jest „Nigdy nie testuj więcej niż jednej klasy na raz”. Oznacza to, że powinieneś używać mocków lub skrótów `ICsvRecord` zamiast rzeczywistych wystąpień `CsvRecord`. Jednak po wypróbowaniu tego podejścia zauważyłem, że wyśmiewanie klasy `CsvRecord` może być trochę owłosione. Co prowadzi do jednego z dwóch wniosków: 1. Trudno pisać testy jednostkowe! To zapach kodu! Refaktoryzacja! 2. Wyśmiewanie każdej zależności jest po prostu nierozsądne. Kiedy zastąpiłem moje makiety rzeczywistymi instancjami `CsvRecord`, sprawy potoczyły się znacznie sprawniej. Rozglądając się za myślami innych ludzi, natknąłem się na ten wpis na blogu, który wydaje się potwierdzać punkt 2 powyżej. W przypadku obiektów, które są naturalnie ściśle powiązane, nie powinniśmy się tak martwić o kpiny. Czy zboczyłem z trasy? Czy są jakieś wady powyższego założenia nr 2? Czy naprawdę powinienem pomyśleć o refaktoryzacji mojego projektu?


title: Jaki jest uzasadniony powód używania Ogórka?

text: Pracowałem w kilku kontraktach, w których klient używał Cucumbera i często czułem, że pakiet testowy tak naprawdę nie ma miejsca w naszym stosie. Z tego, co rozumiem, analitycy biznesowi/współpracownicy nietechniczni piszą testy, a programiści sprawiają, że definicje kroków działają. Mój problem z tym podejściem polega na tym, że testy nigdy nie są wystarczająco ważne lub zwięzłe, aby można było ich używać bez przepisywania całego pliku.


title: zwiększenie produktywności - opanowanie języka a wybór wydajnych narzędzi

text: W tej kwestii szukam porady od doświadczonych programistów. W mojej pracy potrzeba dużo jednorazowego kodu. Kuszące jest po prostu zanurzenie się w odpowiednich wywołaniach biblioteki Python/Perl, aby wykonać te małe zadania tak szybko, jak to możliwe. Kiedyś wyznawałem filozofię - "użyj najskuteczniejszego narzędzia do zadania". Obawiam się jednak, że z czasem oznacza to, że nie będę miał głębszego doświadczenia i wiedzy, więc ostatnio zmuszam się do używania C++ (z Boostem i STL) do wszystkiego, nawet gdybym mógł zadanie w Pythonie lub Perlu znacznie szybciej. Mam nadzieję, że na dłuższą metę dzięki temu będę bardziej produktywnym programistą. Mam nadzieję, że osiągnę taki poziom znajomości, że mogę robić rzeczy w C++ tak szybko, jak mogę w Pythonie (a także mieć praktykę do pracy nad większymi projektami, które wymagałyby C++). Czy to dobra strategia w kierunku długoterminowej produktywności i głębszych umiejętności? A może niepotrzebnie tracę czas / torturuję siebie?


title: Najlepszy zorientowany obiektowo sposób parsowania modelu z kilkoma polami (>50) i ze sprawdzaniem wartości null

text: Mam dane oparte na formacie JSON, które zawierają wiele pól z określonego modelu. Dowolna wartość z listy pól może być pusta. Staram się znaleźć najlepszy zorientowany obiektowo sposób parsowania, a także musi być lekki, ponieważ jest to aplikacja mobilna. PS: Chcesz uniknąć wielu "if-checks" Struktura danych JSON: data=( classId="" classDesc="" items=( { //Tablica 50 elementów },{ //Tablica 50 elementów },{ / /Tablica 50 elementów } ); }, //Pozostałe elementy );


title: Czy źle zrozumieli curry, czy ja?

text: To pytanie jest podobne do pytania z Czy groovy nazywa częściową aplikację 'currying'?, ale nie do końca takie samo, a odpowiedzi tam udzielane mnie nie satysfakcjonują. Chciałbym w tym miejscu powiedzieć, zanim przejdę dalej, że curry jest jednym z pojęć, które trudno było w pełni zrozumieć. Myślę, że powodem tego jest fakt, że wydają się istnieć dwie ogólne definicje curry i tak naprawdę nie oznaczają tego samego zarówno w teorii, jak i w zastosowaniu. Biorąc to pod uwagę, myślę, że curry jest bardzo prostym pojęciem, gdy zdecydujesz się przyjąć tylko jedną z dwóch definicji i się jej trzymać. W rzeczywistości, curry nie powinno być trudne do zrozumienia, ale z mojego doświadczenia wynika, że rozumienie curry jest równoznaczne z pokazaniem małemu chłopcu jabłka i powiedzeniem mu, że owoc nazywa się jabłkiem, a następnie nazywasz ten owoc pomarańczą . Chłopiec nigdy nie zrozumie prostego pojęcia jabłka, ponieważ wywołałeś ogromne zamieszanie, nazywając jabłko pomarańczą. Definicja currying, którą zaakceptowałem jako właściwą, polega na tym, że currying polega na przyjmowaniu funkcji o dowolnej arności i przekształcaniu jej w wiele funkcji łańcuchowych, z których każda akceptuje tylko jeden parametr (funkcje jednoargumentowe). W kodzie wyglądałoby to tak: f(1,2,3); //staje się f(1)(2)(3); Jednak niektórzy, w tym tak znani programiści jak John Resig, tłumaczą currying jako coś zupełnie innego. Dla nich curry to nic innego jak prosta, częściowa aplikacja. Istnieje nawet ogólnie akceptowana funkcja javascript do curry: Function.prototype.curry = function() { var fn = this, args = Array.prototype.slice.call(arguments); return function() { return fn.apply(this, args.concat(Array.prototype.slice.call(argumenty))); }; }; Ta funkcja tak naprawdę niczego nie curry, ale raczej częściowo stosuje dostarczone argumenty. Powodem, dla którego nie sądzę, że ta funkcja cokolwiek curries, jest to, że możesz skończyć z funkcją, która akceptuje więcej niż jeden argument: var f2 = f.curry(1); //f akceptuje 3 argumenty f(1,2,3); f2(2,3); // wywołanie wynikowej funkcji "curried". Więc moje pytanie brzmi, czy źle zrozumiałem curry, czy też? Chciałem zamieścić linki do materiału, który przeczytałem na temat curry, ale nie mogę zamieścić więcej niż 2 linków, ponieważ nie mam reputacji co najmniej 10. Zostawię cię z tym postem, który wyjaśnia currying w javascript, ale w sposób, w którym tak naprawdę nie widzę curry: https://javascriptweblog.wordpress.com/2010/04/05/curry-cooking-up-tastier-functions/


title: Jak działa kompilator?

text: _Uwaga: jestem zaskoczony, że nie było wcześniej o to pytane, a jeśli tak, nie mogłem znaleźć tego w wyszukiwaniu._ Byłem na wielu stronach internetowych, przeczytałem mnóstwo artykułów i słyszałem mnóstwo wyjaśnień. Większość z nich była dobra, ale wszystkie były albo zbyt obszerne, albo zbyt skomplikowane, albo po prostu złe. Więc moje pytanie brzmi: jak działa kompilator? Jeśli to trudne, obszerne pytanie, proszę mi powiedzieć. Ale jeśli nie, odpowiedz na pytanie.


title: Przykłady optymalizacji kompilatora

text: Chciałbym zobaczyć (dobre) przykłady optymalizacji wykonywanych przez kompilatory (statyczne i JIT). Czemu? * Aby dowiedzieć się, czego nie musimy się optymalizować (często prowadzi to do lepszego kodu) * Bycie zdumionym


title: Jaki jest najlepszy sposób na pokazanie klientowi aplikacji CLI CRUD?

text: Zajmuję się tworzeniem aplikacji CRUD w wierszu poleceń dla klienta non-tech. Jaki jest dla mnie prosty (dla obu stron) sposób na zdalne demo aplikacji? Pośrodku między SSH (łatwe dla mnie) a skonfigurowaniem go jako aplikacji internetowej (łatwe dla klienta) byłoby świetne.


title: Jaki jest najlepszy sposób na wprowadzenie algorytmów do studentów studiów licencjackich?

text: Jeśli masz za zadanie zaprojektować kursy prowadzące do uzyskania stopnia naukowego w dziedzinie informatyki i masz tylko dwa kursy na temat „Algorytmów”, jak byś ustrukturyzował kursy? Moje szczegółowe pytania to: 1. Czy pierwszy kurs powinien wprowadzać niektóre z podstawowych algorytmów sortowania i wyszukiwania bez wprowadzania pojęć złożoności czasowej i przestrzennej? 2. Drugi kurs projektowania algorytmów. Ten kurs obejmowałby nie tylko złożoność czasu i przestrzeni, ale także ogólne techniki projektowania algorytmów, takie jak dziel i zwyciężaj, programowanie dynamiczne itp. Jest to typowy profil uczniów, dla których projektuję ten kurs: 1. Większość byłaby nowa w pojęcie programowania, choć zaznajomione z obsługą komputerów. 2. Uczą się programowania w C w tym samym semestrze, w którym uczą się algorytmów. 3. Braliby udział w równoległym kursie z wprowadzenia do informatyki. Większość podręczników, które brałem pod uwagę, jest albo zbyt obszerna, albo zbyt onieśmielająca dla ucznia, z nadmiernym naciskiem na analizę złożoności algorytmów. Wszelkie sugestie dotyczące odpowiednich podręczników lub metod nauczania będą mile widziane!


title: Jak chronić swoją witrynę (kody, bazę danych, informacje FTP) przed freelancerem?

text: Tworzę stronę internetową przy użyciu Joomla i wielu innych wtyczek innych firm, a także chcę stworzyć niestandardowe komponenty, więc zatrudniam niektórych programistów freelancerów, a kilka z nich to firmy internetowe, które mówią, że znajdują się w Wielkiej Brytanii lub gdzieś. Po wyjaśnieniu im funkcjonalności i układu komponentu, proszą o dostęp do FTP mojej witryny, Baza danych, CPanel. W takim razie jak mam chronić swoją witrynę? Co się stanie, jeśli wezmą mój inny kod i utworzą witrynę klonów lub coś takiego? Czy są jakieś pomysły poza umową firmową?


title: Czy musisz kupić program Visual Studio, aby opracować/wdrożyć aplikację sieci Web ASP.NET?

text: Ponieważ .NET Framework SDK jest bezpłatny, czy Visual Studio jest czymś więcej niż IDE? Jeśli tak, czy muszę kupić program Visual Studio, aby wdrożyć moją aplikację sieci Web ASP.NET (napisaną w C#)? Używam MySQL dla bazy danych. Jestem studentem, który wkrótce kończy studia i badam technologie dla aplikacji internetowej, którą tworzę dla startupu.


title: Jaka praca jest lepsza dla nowicjusza, taka, która wymaga częstego tworzenia nowego programu lub czegoś takiego jak konserwacja oprogramowania?

text: Jeden z moich znajomych właśnie ukończył studia i jest gotowy do przyłączenia się do świata programistów. Dziś ma dwie oferty, jedną z nowymi projektami za każdym razem, a drugą z utrzymaniem oprogramowania. Pozostałe czynniki nie są dla niego ważne, chce wiedzieć, która opcja jest lepsza? Moje doświadczenie wiąże się z drugą opcją, ponieważ moją pierwszą pracą była konserwacja i **mogłem dowiedzieć się, jak moi koledzy programiści popełniali błędy podczas kodowania** . Ale wkrótce przeszedłem do nowej pracy, co wymagało ode mnie za każdym razem tworzenia nowego projektu. Cieszyłem się z obu, ale muszę przyznać, że moja pierwsza praca dała mi dzisiaj większą przewagę. Ale nie jest konieczne, aby moje doświadczenie mogło mu pomóc. Ale chcę wiedzieć, co to jest podejście ogólne? Jeśli mam wydać mu ostateczny werdykt w sprawie tych dwóch, co mam mu powiedzieć? _**Edytuj_** Każdy zasługuje tutaj na jeden głos, naprawdę dużo się od was uczę.


title: Czym jest algorytm znajdowania prostych cykli?

text: Mam wykres z cyklem Eulera i bez cykli Hamiltona. Chciałbym podzielić ten wykres na proste cykle. Krawędzie nie mogą się powtarzać w prostych cyklach. Jak to zrobić?


title: Wstrzykiwanie zależności i Singleton. Czy są to dwie zupełnie różne koncepcje?

text: Słyszałem o używaniu wstrzykiwania zależności przez Singletona dla mojego kolegi. Nadal nie mogę stwierdzić, czy są to dwa prostopadłe wzory, które można zastąpić sobą? A może DI jest metodą pozwalającą na testowanie wzorca Singletona? Proszę spojrzeć na następujący fragment kodu. IMathFace obj = Singleton.Instance; SingletonConsumer singConsumer = new SingletonConsumer(obj); singConsumer.ConsumerAdd(10,20); `SingletonConsumer` akceptuje parametr typu `IMathFace`. Zamiast wewnętrznie uzyskiwać dostęp do klasy singleton, `SingletonConsumer` otrzyma instancję singletona przekazaną przez obiekt wywołujący. Czy to dobry przykład używania klasy singleton przez iniekcję zależności?


title: W jaki sposób programy takie jak subversion wykrywają, że plik został edytowany, a nie utworzony/usunięty?

text: To jest moje pierwsze pytanie, więc mam nadzieję, że nie jest to nie na temat. Chociaż używam biblioteki `inotify` Linuksa do nasłuchiwania zmian w plikach i porównuję jej użycie z programem `Subversion`, to w szczególności szukam zastosowanego algorytmu. Człowiekowi bardzo łatwo jest stwierdzić, czy plik został utworzony lub zmodyfikowany. Kliknięcie przycisku „Nowy” stanowi pierwsze, a kliknięcie przycisku „Zapisz” – drugie. Dla Linuksa oba te działania poważnie się pokrywają. Na przykład w edytorach tekstu zazwyczaj tworzony jest plik wymiany, a następnie kopiowany/przenoszony. To sprawia, że trudno jest odróżnić poprzez `inotify` drobną zmianę w pliku od celowego nadpisania pliku. Próbuję zrozumieć, w jaki sposób program taki jak `Subversion` rozpoznaje różnicę między użytkownikiem, który zmodyfikował plik za pomocą edytora tekstu, a użytkownikiem, który faktycznie usunął plik i otworzył nowy plik o tej samej nazwie. **Edycja:** Zwrócono uwagę, że subversion nie robi tego, co chcę, więc błędem z mojej strony było użycie tego jako przykładu. Zamiast tego pozwól mi przeformułować pytanie: „Czy istnieje jakiś znany program lub podejście programistyczne, które pasuje do działań wysokiego poziomu, takich jak tworzenie nowych plików i zapisywanie ich w działaniach niskiego poziomu, takich jak modyfikowanie, przenoszenie, kopiowanie itp., dzięki czemu mogę rejestrować wszystkie pliki w systemie i zmiany w nich"?


title: Czy dobrym rozwiązaniem jest ustawienie parametrów połączenia w konfiguracji sieciowej?

text: Ostatnio rozmawiałem z kilkoma kolegami z mojej pracy, ponieważ powiedzieli, że lepiej mieć w .DLL szyfrowane połączenie łańcuchowe. I powiedziałem, dlaczego po prostu nie używać połączenia ciągów zdefiniowanego w zaszyfrowanym pliku web.config? jest tak samo i to lepiej bo framework encji np szuka nazwy połączenia w web config aplikacji, teraz chcę wiedzieć z punktu bezpieczeństwa co jest lepsze lub jaka jest najlepsza praktyka??


title: W jaki sposób zasada DRY (stosowana na poziomie klasy) jest powiązana z SRP?

text: Innymi słowy, czy DRY (nie powtarzaj się) stosowane na poziomie klasy jest podzbiorem SRP (zasada pojedynczej odpowiedzialności)? Chodzi mi o to, że podczas gdy SRP stwierdza, że każda klasa powinna mieć tylko jedną odpowiedzialność (tj. Klasa powinna mieć tylko jeden powód do zmiany), czy to zastosowanie DRY na poziomie klasy uniemożliwia dwóm klasom posiadanie tej samej odpowiedzialności (w ten sposób czy to SUCHY zapobiega powtórzeniu/powieleniu tej samej odpowiedzialności w dwóch różnych klasach )? Dziękuję Ci


title: Czas działania prostych pętli for

text: Czytam algorytmy i rozumiem większość z nich, jedną rzeczą, z którą wciąż mogę się bardzo zmagać, jest coś tak prostego, jak czasy uruchamiania różnych pętli for. Wydaje się, że wszyscy mają z tym łatwo, z wyjątkiem mnie, dlatego szukam tutaj pomocy. Obecnie wykonuję kilka ćwiczeń z mojej książki i potrzebuję pomocy w ich wypełnieniu, aby ustalić różne czasy trwania. Tytuł ćwiczenia brzmi: „Podaj kolejność wzrostu (w funkcji N) czasów wykonania każdego z poniższych fragmentów kodu” a: int sum = 0; for (int n = N; n > 0; n /= 2) for(int i = 0; i < n; i++) sum++; b: suma int = 0; for (int i = 1; i < N; i *= 2) for(int j = 0; j < i; j++) suma++; c: suma int = 0; for (int i = 1; i < N; i *= 2) for(int j = 0; j < N; j++) sum++; Nauczyliśmy się różnych rodzajów czasów działania/kolejności wzrostu, takich jak n, n^2, n^3, Log N, N Log N itd. Ale trudno mi zrozumieć, co wybrać, gdy pętla for różni się tak, jak ma to miejsce. "n, n^2, n^3" nie jest jednak problemem, ale nie mogę powiedzieć, jaki jest czas wykonywania tych pętli. Oto próba czegoś... oś y reprezentuje wartość "N", a oś x reprezentuje czasy uruchomienia zewnętrznej pętli. Rysunki po lewej to: strzałka po prawej = pętla zewnętrzna, okrąg = pętla wewnętrzna i aktualna wartość N. Potem narysowałem kilka wykresów tylko po to, żeby na to spojrzeć, ale nie jestem pewien, czy to prawda. Zwłaszcza ten ostatni, w którym N pozostaje 16 cały czas. Dziękuję. ![Mój rysunek](http://i.stack.imgur.com/35QwR.jpg)


title: Wiedza domenowa a programowanie

text: > **Możliwy duplikat:** > Jak ważna jest wiedza o domenie w porównaniu z wiedzą techniczną? Często słyszę od moich kolegów, a czasem od ankieterów, że > „Nie ma nic tak wspaniałego w posiadaniu doskonałej wiedzy programistycznej. to nie jest wielka sprawa”. (Tutaj wiedza domenowa jest czymś związanym z obszarem, w którym pracujesz. Na przykład pracuję w domenie telekomunikacyjnej, ktoś może być w finansach lub farmacji, programowaniu internetowym lub osadzonym i tak dalej.) Nie zgadzam się z powyższym fragmentem i myślę dokładnie odwrotnie. W mojej karierze _do tej pory_ rzadko kiedy przegapiłem jakikolwiek termin na naprawę błędów lub ulepszenie funkcji. Ciągle zmieniałem domeny (w ramach telekomunikacji), ale utknąłem w nauce technik programowania. Chociaż mogę się mylić. **Pytania** : * Czy moje obecne podejście jest prawidłowe? * Mając wybór między domeną a programowaniem (w ograniczonym czasie), którą wybrać? * Czy ma dobrą przyszłość dla osoby, która jest przede wszystkim bardzo dobrym koderem, ale nie tak świetna w dziedzinie (oczywiście początkowo) ? Pytam o to, ponieważ czuję, że każda domena ostatecznie sprowadza się do kodowania morza, w którym trzeba nurkować!


title: Jak przechowywać historyczne dane użytkownika?

text: Próbuję wymyślić dobry sposób przechowywania danych historycznych dla mojej aplikacji sieci web. Aplikacja posiada użytkowników, którzy dodają zdjęcia, komentują je i oceniają. Wszystko to przechowywane jest w relacyjnej bazie danych. Użytkownicy mają również możliwość usuwania własnych zdjęć (a tym samym komentarzy/ocen) oraz własnego konta. Chcę przechowywać te usunięte jednostki jako dane historyczne. **Celem jest rozróżnienie kategorii tego, co ludzie lubią fotografować i zaklasyfikowanie użytkowników do tych kategorii**. Czy powinienem przechowywać go w jakiejś bazie danych NoSQL? A może w mojej bazie danych pochodzenia, zaznaczając ją polem `is_deleted`? Może inny stół, np. `zarchiwizowane_użytkownicy`, `zarchiwizowane_zdjęcia`? Inna instancja bazy danych tylko dla danych historycznych? Czy ktoś poradził sobie z takim zadaniem i jest chętny do podzielenia się przemyśleniami? * * * Do tej pory używam flagi `is_deleted` dla zdjęć i tabeli kopii zapasowych (`archived_users`) dla użytkowników. Skąd takie rozróżnienie? Aby uniknąć naruszenia ograniczenia „unikalne” w polu „nazwa użytkownika”. To rozwiązanie ma dla mnie 3 problemy. * Niespójne jest robienie tego samego na 2 sposoby. A może jest ok? * Dziwne jest przenoszenie `użytkownika` na inny stół (z skojarzeniami ze zdjęciami). Tworzy pewne powierzchowne pola. A może jest ok? * Dane „żywe” są mieszane z danymi historycznymi. Czy może to być problem z wydajnością, gdy baza danych jest naprawdę ogromna?


title: Architektura wewnętrzna i zewnętrzna API

text: Firma, w której pracuję, utrzymuje udany produkt SaaS, który przez lata rósł „organicznie”. Planujemy poszerzenie linii o pakiet nowych produktów, które będą współdzieliły dane z dotychczasowym produktem. Aby to wspierać, chcemy skonsolidować logikę biznesową w jednym miejscu: w warstwie usług internetowych. Warstwa WS będzie wykorzystywana przez: * Aplikacje internetowe * Narzędzie do importowania danych * Narzędzie do integracji z innym oprogramowaniem klienckim (nie API per se) Chcemy również stworzyć API, z którego mogą korzystać nasi klienci, którzy są potrafią wykorzystać go do tworzenia własnych integracji. Zmagamy się z następującym pytaniem: Czy wewnętrzny interfejs API (czyli warstwa WS) i zewnętrzny interfejs API powinny być tym samym, z ustawieniami zabezpieczeń i uprawnień pozwalającymi kontrolować, co może zrobić kto, czy też powinny to być dwie oddzielne aplikacje, w których zewnętrzne API po prostu wywołuje wewnętrzne API, jak każda inna aplikacja? Jak dotąd w naszej debacie wydaje się, że ich rozdzielenie może być bezpieczniejsze, ale zwiększy koszty. Co zrobili inni w podobnej sytuacji?


title: Czy dziedziczenie tabeli jest złym podejściem?

text: Jeśli weźmiemy dwa poniższe podmioty jako przykład. public class Osoba { public string Nazwa użytkownika {get;set;} public string DisplayName {get;set;} } public class Worker:Person { public string Title {get;set} public int SecurityId {get;set;} } Kiedy ktoś pierwszy rejestruje się w tej aplikacji, podstawowe informacje zostaną przechwycone i zostanie utworzona osoba. Gdy pojawi się administrator, może chcieć przypisać rolę tej osobie. Teraz role w sensie autoryzacji nie są kwestionowane, istnieje RoleProvider. Jeśli jednak mianuję kogoś pracownikiem, trzeba uchwycić dodatkowe szczegóły. Pytanie, jak najlepiej przechowywać te nowe dane, jest pytanie. * Mogę mieć klasę WorkerProperties z polami i nadać Person \--> Worker relację 0.1->1. * Mogę mieć wszystkie pola w ramach osoby i po prostu wypełnić to, co jest wymagane. W czasie wykonywania potrzebny byłby dostęp do roli Osoby, aby ustalić, jakie pola będą wymagane. * Mogę stworzyć Robotnika, jak pokazano powyżej. Dziedziczenie po osobie. Przy tej opcji pojawia się problem, że PK to zarejestrowana nazwa użytkownika. Musiałbym jakoś zmienić kolumnę dyskryminatora generowaną przez EF, aby zasadniczo zmienić typ obiektu na Worker.


title: Zasada otwartego zamknięcia (OCP) a zasada odwrócenia zależności (DIP)

text: Próbowałem zrozumieć różnicę między Open Closed Principle (OCP) a Dependency Inversion Princible (DIP). Na podstawie dotychczasowych poszukiwań w Internecie doszedłem do wniosku, że „DIP jest jedną z opcji, dzięki której możemy osiągnąć OCP”. Mam rację? Czy możesz podać przykład, który nie podąża za DIP, ale za OCP?


title: Czy mój stateful widget powinien sam generować potrzebny kod HTML?

text:
Jakie zachowanie powinno być preferowane przy inicjalizacji widgetu: 1) Wymagany kod HTML jest generowany przez sam widget: Układ:
 Inicjalizacja: $('#my-widget').myWidget(); // Tworzy HTML 2) Wymagany kod HTML jest umieszczany na stronie przez użytkownika:

 Inicjalizacja: $('#mój-widget').myWidget(); // Nie utworzy zagnieżdżonego div'a Mark Otto (jeden z twórców Bootstrap) sugeruje, aby nie generować znaczników przez javascript: https://github.com/mdo/code-guide#javascript-generated-markup Obecnie używam następującej funkcji , który dołącza element do katalogu głównego widżetu (this.$element) tylko wtedy, gdy nie istnieje: function($content) { var $child = this.$element.children('.' + $content.attr( 'klasa')); return $child.length ? $dziecko : $content.appendTo(ten.$element); };


title: Czy przykład Wujka Boba powinien zostać zrefaktoryzowany do AbstractFactory czy SimpleFactory?

text: W książce „Czysty kod” Robert Martin wypowiada się na temat następującego kodu: public Money ObliczPay(Employee e) throws InvalidEmployeeType { switch (e.type) { case COMMISSIONED: return generateCommissionedPay(e); case HOURLY: zwróć obliczHourlyPay(e); case WYNAGRODZONY: zwróć obliczSalariedPay(e); domyślnie: wyrzuć nowy InvalidEmployeeType(e.type); } } Oświadczenie: Rozwiązaniem tego problemu (patrz Listing 3-5) jest zakopanie instrukcji switch w podziemiach FABRYKI ABSTRAKCYJNEJ9 i nigdy nie pozwól nikomu jej zobaczyć. Nie rozumiem, dlaczego nazywa to Fabryką Abstrakcyjną? Jeśli rozwiązaniem jest utworzenie 3 podklas Employee, z których każda implementuje własną metodę CalculatePay, to logika jest przenoszona w górę, powiedzmy, do kontrolera. Ale potem musimy stworzyć „Prostą Fabrykę (Idiom)”, a nie Fabrykę Abstrakcyjną, jak przedstawiono w oryginalnej książce GOF. Celem Fabryki Abstrakcyjnej jest: „Zapewnić interfejs do tworzenia rodzin powiązanych lub zależnych obiektów bez określania ich konkretnych klas”. ale wyraźnie tak nie jest.