title: Freelancer jako osoba fizyczna. Produkty jako firma. Czy powinienem zintegrować te dwa, aby się rozwijać?

text: Kiedy zakładałem firmę w 2005 roku, zacząłem od projektów freelancerskich, ale szybko przeniosłem się do produktów. Moja osobista witryna zawierała informacje o dostępności usług konsultingowych i portfolio, które zawierały wybór produktów sprzedawanych przez moją firmę. Przez lata firma zyskała reputację dzięki produktom, a moja osobista strona zyskała reputację dzięki pracy kontraktowej. Oczywiście nie chodzi już tylko o mnie, ani o produkty, ani o pracę konsultingową; inne osoby w firmie są zaangażowane, a prace konsultingowe są technicznie rozliczane przez firmę, jak zawsze. Chcę zachować oba źródła pracy; praca konsultingowa pochodząca od osób, które znalazły moją osobistą witrynę, oraz produkty sprzedawane przez firmę. Ale ostatnio firma zaczęła bezpośrednio otrzymywać prośby o niestandardowe prace programistyczne i mam problem z podjęciem decyzji, co zrobić, aby pogodzić te dwie „twarze”, a nawet czy powinienem w ogóle coś z tym zrobić. Zasadniczo firma ma małą stronę „usługi”, na której prezentowane są nasze produkty jako elementy portfolio, a ja mam swoją oryginalną witrynę, która otrzymuje wiele prac przychodzących od klientów, a także przedstawia tę samą listę elementów portfolio (i niektóre inne prace klientów ). Jeśli przekieruję klientów, którzy kontaktują się z firmą w celu wykonania niestandardowej pracy, na moją stronę osobistą, możemy stracić niektórych większych klientów, którym jesteśmy w stanie obsłużyć, ale którzy woleliby współpracować z firmą, a nie z pojedynczym programistą. Jeśli zrezygnuję z mojej osobistej witryny i skupię się ponownie na „usługowej” stronie firmy, zignoruję lata budowania reputacji, które ma osobista witryna (i strumień klientów, który wciąż dociera do tych drzwi). Czy ktoś się tym zajmował? Wszelkie rady i sugestie będą mile widziane. **EDYTUJ:** Aby wyjaśnić, jedną z wad posiadania dwóch oddzielnych kanałów jest brak koncentracji na marketingu. Gdzie wskazujesz podpis na forach, które mogą prowadzić do szukania Cię przez klientów? Gdzie wskazujesz osoby, którym wręczasz swoją wizytówkę? Po prostu wydaje się "czystsze", jakoś zintegrować je lub wybrać jeden, na którym się skoncentruję - a może to po prostu programista we mnie, próbujący kategoryzować rzeczy i umieszczać wszystko we właściwym miejscu.


title: Pułapki projektowe API w C

text: Jakie są wady, które doprowadzają Cię do szału w C API (w tym standardowe biblioteki, biblioteki stron trzecich i nagłówki wewnątrz projektu)? Celem jest zidentyfikowanie pułapek projektowych API w C, aby osoby piszące nowe biblioteki C mogły uczyć się na błędach z przeszłości. Wyjaśnij, dlaczego wada jest zła (najlepiej na przykładzie) i spróbuj zasugerować poprawę. Chociaż twoje rozwiązanie może nie być praktyczne w prawdziwym życiu (jest już za późno na naprawienie `strncpy`), powinno dać się zauważyć przyszłym autorom bibliotek. Chociaż w centrum tego pytania są interfejsy API języka C, mile widziane są problemy, które wpływają na możliwość korzystania z nich w innych językach. Proszę podać jedną wadę na odpowiedź, aby demokracja mogła posortować odpowiedzi.


title: Przyszłość web developmentu - Front-end > Back-end?

text: Ludzie zwykli mówić, że "lepiej"/"Zarabiaj więcej pieniędzy" robić programowanie back-end (PHP, asp.net) zamiast front-end (HTML, javascript) do tworzenia stron internetowych. Zauważam jednak, że HTML5, CSS3, WebGL, Javascript zyskują na znaczeniu. Możemy nawet używać HTML5, CSS3 i JAVASCRIPT do tworzenia mobilnych aplikacji internetowych (zarówno dla iPhone'a / Androida), a nawet aplikacji Windows 8 w przyszłości! Czy to oznacza, że nowi twórcy stron internetowych powinni teraz skupić się na rozwoju front-end zamiast na rozwoju po stronie serwera?


title: Co oznacza zgodność binarna? Jakie jest jego znaczenie podczas serializacji/deserializacji w języku takim jak Java, który zajmuje się kodem bajtowym?

text: W informatyce, co oznacza _zgodność binarna_? Czytałem o tym w kontekście serializacji/deserializacji, że ten proces serializacji/deserializacji powinien być zgodny z danymi binarnymi. Co to oznacza w tym kontekście? W szczególności interesuje mnie zrozumienie roli kompatybilności binarnej w języku takim jak Java, który zajmuje się kodem bajtowym. Ten cytat pochodzi z Effective Java: > Kiedy zmieniana jest klasa możliwa do serializacji, ważne jest, aby sprawdzić, czy jest > możliwa serializacja instancji w nowym wydaniu i jej deserializacja w > starych wydaniach i na odwrót. Ilość wymaganych testów jest zatem > proporcjonalna do iloczynu liczby klas możliwych do serializacji i > liczby wydań, które mogą być duże. Testy te nie mogą być skonstruowane > automatycznie, ponieważ oprócz zgodności binarnej, musisz przetestować > zgodność forsemantyczną. Innymi słowy, musisz upewnić się, że proces > serializacji-deserializacji się powiedzie i że w jego wyniku powstanie wierna replika > oryginalnego obiektu. Im większa zmiana w > klasy możliwej do serializacji, tym większa potrzeba testowania. Potrzeba jest zmniejszona, jeśli > niestandardowy formularz serializowany jest starannie zaprojektowany, gdy klasa jest > napisana po raz pierwszy (Pozycje 75, 78), ale nie znika całkowicie.


title: Chcesz pracować sam czy w zespole?

text: Jeśli możesz wybrać, czy chcesz pracować nad projektem samodzielnie, czy w zespole, jaki byłby Twój wybór i dlaczego? A jeśli chcesz pracować w zespole, jaka jest idealna wielkość zespołu?


title: Metoda Java zwraca nieograniczony typ

text: Czytałem ten artykuł, https://weblogs.java.net/blog/emcmanus/archive/2010/10/25/using-builder-pattern-subclasses, o podklasie klasy builder. Rozumiałem artykuł, ale był jeden mały drobiazg, który mnie niepokoił. Była taka metoda, public static Builder<?> builder() { return new Builder2(); } Kiedy zmieniłem `Builder<?>` na `Builder`, surowy typ, kompilator nie skompilował kodu. Jakie dodatkowe informacje zostały przekazane do kompilatora z dodatkowym `<?>`? Kod wkleiłem tutaj: public class Shape { private final double opacity; public static class Builder<T extends Builder<T>> { private double opacity; krycie publiczne T(podwójne krycie) { this.opacity = krycie; zwróć self(); } /* public T height(podwójna wysokość) { System.out.println("wysokość nie została ustawiona"); zwróć self(); } */ protected T self() { System.out.println("shape.self -> " + this); zwróć (T) to; } public Shape build() { return new Shape(this); } } public static Builder<?> builder() { return new Builder(); } protected Shape(Builder builder) { this.opacity = builder.opacity; } } public class Rectangle extends Shape { private final double height; public static class Builder<T extends Builder<T>> extends Shape.Builder<T> { private double height; public T height(podwójna wysokość) { System.out.println("wysokość jest ustawiona"); this.height = wysokość; zwróć self(); } public Rectangle build() { return new Rectangle(this); } } public static Builder<?> builder() { return new Builder(); } protected Rectangle(Builder builder) { super(builder); to.wysokość = budowniczy.wysokość; } public static void main(String[] args) { Prostokąt r = Rectangle.builder().opacity(0.5).height(250).build(); } }


title: Ustawienia konfiguracji Usługa/repozytorium: czy są używane w prawdziwym świecie?

text: Obecnie lubię czytać „Ciągła dostawa: niezawodne wersje oprogramowania poprzez kompilację, testowanie i automatyzację wdrażania”, a część, która przykuła moją uwagę, to zarządzanie ustawieniami konfiguracji aplikacji. To, co proponuje się w książce, to to, że wszystkie ustawienia konfiguracyjne są udostępniane na zewnątrz i scentralizowane w pewnego rodzaju repozytorium, czy to w katalogu LDAP, serwerze ESCAPE lub innym, a następnie pobierane stamtąd. Brzmi to dla mnie naprawdę przekonująco, ponieważ takie podejście może zapewnić wiele namacalnych korzyści, ale po pewnym czasie google wydaje mi się, że nie jest to zbyt rozpowszechnione podejście. Wiem, że istnieje artykuł dotyczący aplikacji Twelve-Factor App na ten temat, ale sugeruje on używanie zmiennych środowiskowych zamiast scentralizowanego repozytorium. To podejście wydaje się być najczęściej stosowane, ale wydaje się brudne w porównaniu z rozwiązaniem opartym na repozytorium. Czy zatem podejście centralne-konfiguracja-repozytorium jest używane w jakikolwiek znaczący sposób w rzeczywistym świecie, a jeśli nie, to jakie są tego powody?


title: Czy to we wzorcu Obserwator liczy się jako kompozycja?

text: W klasycznej implementacji wzorca projektowego Observer podmiot ma listę odniesień do wszystkich swoich obserwatorów, a każdy obserwator może mieć odniesienie do swojego podmiotu. Czy to rozważana kompozycja? O ile rozumiem, kompozycja oznacza, że jeden obiekt 'zawiera' w sobie inny obiekt, aby **wykorzystać funkcjonalność tego obiektu**. We wzorcu Obserwator podmiot zawiera w sobie odniesienia do swoich obserwatorów, ale nie wykorzystuje ich funkcji wewnętrznie, aby robić rzeczy na zewnątrz. Przechowuje referencje, dzięki czemu może je powiadomić. Z drugiej strony podmiot i obserwatorzy utrzymują relację HAS-A, która często charakteryzuje kompozycję (obiekt ma obserwatorów, obserwatorzy mają podmiot). Czy uważa się to za rodzaj kompozycji?


title: Jakie są różne aspekty, które należy wziąć pod uwagę podczas przenoszenia kodu ze środowiska jednowątkowego do środowiska wielowątkowego lub odwrotnie?

text: Chcę zapewnić pewną funkcjonalność biblioteki i aplikację referencyjną, która będzie działać na w pełni funkcjonalnej platformie zgodnej z POSIX. Aplikacja i biblioteka będą wymagały dwukierunkowej komunikacji przez port szeregowy, danych wejściowych użytkownika z klawiatury, wyświetlacza użytkownika do konsoli tekstowej i prawdopodobnie liczników czasu. Chcę również dostarczyć przewodnik przenoszenia, aby użytkownicy biblioteki mogli przenieść ją (z aplikacją referencyjną lub bez) na własne platformy, które mogą być zgodne lub nie z POSIX i mogą, ale nie muszą, obsługiwać wiele wątków. Zajmuję się głównym problemem przenośności platformy, pisząc przenośny kod do wszystkiego, o ile to możliwe i dostarczając samodzielną warstwę przenoszącą dla kodu specyficznego dla platformy. W moim przewodniku po portowaniu powiem użytkownikowi, aby zastąpił funkcje warstwy portowania implementacjami na własną platformę. Jednak jeśli chodzi o model wątków, mam dwie możliwości: * zaimplementuj moją aplikację referencyjną jako bardzo prosty jednowątkowy program (główna pętla odpytuje klawiaturę, odpytuje port szeregowy, sprawdza stan timera i w razie potrzeby wywołuje funkcje biblioteki) * użyj biblioteki pthreads i miej główny wątek aplikacji z oddzielnymi wątkami do wprowadzania danych przez użytkownika, odbierania portu szeregowego i wygaśnięcia licznika czasu, z których wszystkie będą publikować wiadomości do mojego głównego wątku aplikacji w celu przetworzenia. Niezależnie od tego, który model wybiorę, będę musiał wyjaśnić użytkownikom, jak przenieść go na platformę, która może korzystać z innego modelu. Nawet jeśli używam implementacji jednowątkowej dla aplikacji referencyjnej, upewnię się, że każda funkcjonalność biblioteki jest ponownie wprowadzana (lub umieszczam wokół niej duże zastrzeżenia, jeśli nie jest to możliwe). O czym powinienem pamiętać podczas implementacji i przewodniku przenoszenia? Jakich informacji potrzebujesz, gdybyś przenosił kod wielowątkowy do systemu jednowątkowego lub odwrotnie?


title: Kiedy i ile powinniśmy sprawdzać dane wejściowe podczas pracy z pamięcią (C)AP?

text: Tutaj rozważamy architekturę serwer-klient. Załóżmy, że zachowujemy elastyczność szczegółów, ale istnieje więcej niż jedna warstwa serwerów obsługujących naszą hipotetyczną usługę. Ogólne pytanie brzmi: ** „Kiedy i ile mam weryfikować dane klienta?”**. Z innych pytań i odpowiedzi, które przeczytałem, odpowiedź może być podsumowana jako jedna z poniższych strategii (lub ich kombinacja). 1. Zweryfikuj wszystkie dane, gdy tylko dotrą od klienta. Inne serwery ufają sobie nawzajem. 2. Sprawdź poprawność wszystkich danych na każdym serwerze w systemie. _(nie jest to szczególnie preferowane)_ 3. **Weryfikuj wszystkie dane _rygorystycznie_ po dotarciu do bazy danych i opcjonalnie w innym miejscu, zgodnie z wymaganiami aplikacji.** 4. Na wszystkich poziomach zweryfikuj dokładnie tyle danych, ile potrzebuje dany serwer wykonać swoją pracę. Szczególnie popularny wydaje się numer 3. Jednak w odpowiedziach, które widziałem, wydaje się, że istnieje **domniemane założenie klasycznego scentralizowanego przechowywania danych RDBMS** („OldSql”). To są MySQL i Postgres świata. Biorąc wskazówki z twierdzenia CAP, nazwijmy te **bazy danych CP** , ponieważ mają tendencję do zapewniania narzędzi zapewniających spójność kosztem pewnej klasy dostępności: zwykle tylko delegowany _master_ może zapisywać do określonej partycji. Najnowsze alternatywy dla klasycznych RDBMS (w szczególności Voldemort, Riak i Cassandra, które są wzorowane na systemie pamięci masowej Dynamo) są lepiej klasyfikowane jako **bazy danych AP**. Narzędzia te umożliwiają pojawienie się naturalnych niespójności podczas pobierania danych (np. wiele wartości danych z zegarami wektorowymi) w zamian za dostępność „zawsze zapisywalną”. Biorąc pod uwagę, że te magazyny danych mają raczej **unikalne właściwości** , zadaję pytanie: **Czy historia walidacji danych klienta zmienia się, gdy używamy magazynów danych AP? Jaką część danych mojego klienta należy zweryfikować przed i po wstawieniu do bazy danych AP?**


title: Tworzenie warstwy abstrakcji nad warstwą ORM

text: Uważam, że jeśli masz swoje repozytoria, użyj ORM, który jest już wystarczająco wyabstrahowany z bazy danych. Jednak tam, gdzie teraz pracuję, ktoś uważa, że powinniśmy mieć warstwę abstrahującą ORM na wypadek, gdybyśmy chcieli później zmienić ORM. Czy naprawdę konieczne jest stworzenie warstwy, która będzie działać na wielu ORM-ach, czy jest to po prostu dużo nakładu pracy? ### Edytuj Aby podać więcej szczegółów: 1. Mamy klasę POCO i klasę Entity, które są mapowane za pomocą AutoMappera. Klasy Entity są używane przez warstwę Repository. Warstwa repozytorium następnie używa dodatkowej warstwy abstrakcji do komunikowania się z Entity Framework. 2. Warstwa biznesowa nie ma w żaden sposób bezpośredniego dostępu do Entity Framework. Nawet bez dodatkowej warstwy abstrakcji nad ORM, ta musi korzystać z warstwy usług, która korzysta z warstwy repozytorium. W obu przypadkach warstwa biznesowa jest całkowicie oddzielona od ORM. 3. Głównym argumentem jest możliwość zmiany ORM w przyszłości. Ponieważ tak naprawdę jest zlokalizowane w warstwie Repozytorium, według mnie jest już dobrze odseparowane i nie widzę, dlaczego dodatkowa warstwa abstrakcji jest wymagana, aby mieć kod „jakości”.


title: jaka jest właściwa nazwa klasy dla menedżera/przeglądarki/edytora?

text: Czytałem gdzieś, że nazywanie klas po czasownikach to zły pomysł (menedżer/przeglądarka/edytor), ale jaka jest właściwa nazwa menedżera/przeglądarki/edytora? EDYCJA: problem polega na tym, że system może zamienić się w wielką kulę "usług" - małe obiekty, które robią coś konkretnego i nie zawierają żadnych danych - co jest złe (przynajmniej dlatego, że tylko odpytuje inne obiekty), ale muszę też być możliwość łatwego dodawania nowych "menedżerów" (obecnie aplikacja musi zarządzać użytkownikami, kontami FTP, kontami pocztowymi itp.)


title: Jak wdrożyć bezpieczną historię haseł

text: Hasła nie powinny być przechowywane w postaci zwykłego tekstu z oczywistych względów bezpieczeństwa: musisz przechowywać skróty, a także generować je ostrożnie, aby uniknąć ataków tablicami tęczowymi. Jednak zazwyczaj wymagane jest przechowywanie ostatnich _n_ haseł i wymuszanie minimalnej złożoności i minimalnej zmiany między różnymi hasłami (aby uniemożliwić użytkownikowi używanie sekwencji, takiej jak Hasło_1, Hasło_2, ..., Hasło__n_ ). Byłoby to trywialne w przypadku haseł w postaci zwykłego tekstu, ale jak możesz to zrobić, przechowując tylko skróty? Innymi słowy: jak zaimplementować mechanizm bezpiecznej historii haseł?


title: Jakie są zalety Mavena, jeśli chodzi o jednoosobowe projekty edukacyjne

text: Spędziłem kilka godzin bawiąc się z Mavenem + czytając kilka rzeczy na oficjalnej stronie Apache, a także kilka losowych artykułów w Google. Mam przez to na myśli, że naprawdę starałem się sam znaleźć odpowiedzi - zarówno czytając, jak i robiąc rzeczy samemu. Może warto też wspomnieć, że zainstalowałem `wtyczkę m2e`, więc przez większość czasu próbowałem rzeczy z `Eclipse` i nie używałem zbyt wiele linii poleceń. Jednak poza wygenerowanym projektem, który na przykład uniemożliwia mi korzystanie z domyślnego pakietu, nie zauważyłem dużej różnicy w stosunku do standardowego sposobu, w jaki stworzyłem swoje projekty przed wypróbowaniem Mavena. Prawdę mówiąc, prawie zdecydowałem się na razie pominąć Maven i przejść do innej technologii, którą chciałem poznać bardziej dogłębnie - `Hibernacja`, ale kiedy zacząłem otwierać oficjalną stronę, pierwszą rzeczą, którą przeczytałem, była zalecenie używania Hibernate z Mavenem. To mnie zdezorientowało i sprawiło, że cofnąłem się o krok i ponownie spróbowałem znaleźć to, czego najwyraźniej teraz brakuje. Jak zostało powiedziane na stronie `maven.apache..`, prawdziwa siła Mavena jest pokazana podczas pracy z innymi ludźmi nad dużymi projektami, ale nie mam możliwości zobaczenia, w jaki sposób Maven jest naprawdę używany w tym scenariuszu, nadal myślę że może są zalety, nawet jeśli chodzi o samodzielną pracę z małymi projektami, ale naprawdę trudno mi je wskazać. Jak myślisz, jakie są zalety Mavena, gdy jest używany do małych projektów pisanych przez jedną osobę. Jakie są rzeczy, o których powinienem wiedzieć i próbować wykorzystać (mam na myśli funkcje oferowane przez Mavena), które mogą się przydać w takich sytuacjach?


title: Jaką metadadę zapisać i czy umieścić ją w pliku binarnym?

text: Zastanawiam się, czy istnieją ogólne wytyczne lub najlepsze praktyki dotyczące dzielenia danych na format metadanych, w przeciwieństwie do bezpośredniego osadzania ich w danych. (Konkretny przykład poniżej). Moje rozumienie metadanych polega na tym, że opisują one dane (bez konieczności rzeczywistego patrzenia na dane), umożliwiając szybkie wyszukiwanie/filtrowanie danych w celu łatwego dostępu. Weźmy na przykład prosty format modelu 3D. Sam plik danych jest plikiem binarnym zawierającym wierzchołki i kolory. Rzeczy takie jak data utworzenia, zmodyfikowane dane i nazwisko autora byłyby rzeczami, które opisują dane binarne, więc powiedziałbym, że należą one do metadanych (poza plikiem binarnym). Pojawiają się jednak następujące pytania: * Co by było, gdyby aplikacja nie musiała wyszukiwać ani filtrować według tych pól? * Czy dopuszczalne byłoby osadzenie tych pól bezpośrednio w samych danych binarnych? * Czy mogą być zduplikowane zarówno w danych binarnych, jak i metadanych, czy też byłoby to uważane za złą praktykę? * A co z bardziej niejednoznacznymi polami, takimi jak nazwa modelu, które można uznać za część samych danych, ale także za dane opisujące dane binarne? * Jak zdecydować, które dane umieścić w rzeczywistym pliku binarnym, zamiast rozdzielać je na bardziej elastyczny format metadanych? Dziękuję!


title: Koordynacja między programistami na wspólnych zasobach

text: W naszej organizacji niektóre zasoby (takie jak maszyny QA itp.) są współdzielone. Różni ludzie wykonują pracę w różnym czasie i niektóre testy muszą zostać uruchomione (podczas tworzenia i kontroli jakości) na tych maszynach. W tej chwili wysyłamy wiadomość do zespołu na Skypie: „Przeprowadzę kilka testów niszczących na takich a takich maszynach – daj mi znać, jeśli ktoś ma problem”. To podejście ma oczywiście wiele problemów (co się stanie, jeśli ktoś przegapi wiadomość itp.) Oprócz utrzymywania wspólnego dokumentu Google, który musi być stale aktualizowany - czy istnieje łatwiejszy sposób, którego ludzie używają do takiej koordynacji?


title: Najlepsze praktyki Java Interfejs - podklasy i stałe

text: W przypadku, gdy kilka klas implementuje interfejs, a te klasy mają kilka wspólnych stałych (ale nie ma funkcji), czy powinienem umieścić tę stałą? Miałem ten problem kilka razy. Mam ten interfejs: DataFromSensors, którego używam do ukrywania implementacji kilku podklas, takich jak DataFromHeartRateMonitor DataFromGps itp. Z jakiegoś powodu te klasy używają tych samych stałych. A w kodzie nie ma innego miejsca, w którym jest używany. Moje pytanie brzmi, czy powinienem umieścić te stałe? Nie w interfejsie, bo to nie ma nic wspólnego z moim API Nie w statycznej klasie Constants, bo staram się unikać tych Not we wspólnej klasie abstrakcyjnej, która stałaby między interfejsem a podklasami, bo nie mam funkcje wspólne, tylko kilka stałych (TIMEOUT_DURATION, UUID, tego typu rzeczy) Przeczytałem najlepsze praktyki dotyczące stałych i interfejsu do definiowania stałych, ale tak naprawdę nie odpowiadają one na moje pytanie. Dziękuję !


title: Dlaczego typ logiczny w C++ obsługuje `++` ale nie `--`?

text: Dlaczego operator `--` nie istnieje dla bool, podczas gdy dla operatora `++`? Próbowałem w C++ i nie wiem, czy moje pytanie dotyczy innego języka. Chętnie też dowiem się. Wiem, mogę użyć operatora `++` z boolem. To sprawia, że każdy bool jest równy prawdzie. bool b = fałsz; b++; // Teraz b == prawda. Dlaczego nie możemy użyć operatora `--` w odwrotny sposób? bool b = prawda; b--; // Teraz b == false; Nie jest to bardzo przydatne, ale jestem ciekawy.


title: Czy aktywny rekord nie narusza SRP i OCP?

text: Obserwowałem, jak zajęcia z aktywnego rekordu w naszym projekcie przekształciły się w duże zajęcia typu „zrób to wszystko”. Kiedy potrzebujesz czegokolwiek na temat użytkownika, na przykład, powinieneś przejść do klasy `Person`. Chociaż ma to sens, gdy weźmie się pod uwagę domenę, w rzeczywistości klasa `Person` jest miszmaszem wielu funkcji, które czasami ulegają modyfikacjom, gdy domena staje się bardziej przejrzysta, co oznacza, że naruszane są zarówno SRP, jak i OCP. Czy to jedna z rzeczy, które towarzyszą wzorcowi Active Record, czy robimy to źle?


title: Weryfikowanie obiektów za pomocą XSD: czy ponowne serializowanie jest zbędne czy nieistotne?

text: **Kontekst:** Mam usługę sieciową, która zajmuje się obiektami żądania/odpowiedzi. Istnieją ścisłe, zewnętrznie zdefiniowane schematy ograniczające zarówno strukturę, jak i treść zarówno żądań, jak i odpowiedzi. Muszę zweryfikować wszystkie żądania po ich otrzymaniu i wszystkie odpowiedzi przed ich odesłaniem (na końcu przewodu usługi sieciowej). Nie chcę replikować reguł walidacji w kodzie, więc będę walidować serializowane obiekty żądania/odpowiedzi (XML), prawdopodobnie używając XmlReader jako punktu wyjścia (dla szybkości). Będzie to obiekt jednokierunkowy --> metoda walidacji XML, która krzyczy, jeśli walidacja się nie powiedzie, w przeciwnym razie oryginalny obiekt zostanie użyty do rzeczywistej pracy. Używam WCF, ale z XMLSerializer, ponieważ schematy są złożone i potrzebuję dodatkowej obsługi XSD. **Pytanie:** 1) Czy istnieje sposób na uniknięcie ponownego serializowania obiektów, które trafiają na mój koniec przewodu? _Idealnie_ Chciałbym dostać się do XML przed deserializacji w drodze i po jego serializacji, tuż przed przejściem, w drodze. Znam adnotacje [OnSerializing] i [OnSerialized], ale nie będą one działać z XMLSerializer. Nie sądzę, że powinienem pisać ReadXml() i WriteXml() przy użyciu IXmlSerializable — schematy są złożone i mogą ulec zmianie. 2) Biorąc pod uwagę, że dokumenty XML są dość małe (wydaje się, że 122kb to górny koniec w przykładowym zestawie danych), czy mam rację, twierdząc, że spadek wydajności związany z ponownym serializowaniem będzie znikomy? 3) Jakieś lepsze pomysły?


title: Czyszczenie wygenerowanego kodu: Refaktoryzacja czy mapa?

text: **Kontekst:** Ostatnio miałem do czynienia z plikiem klasy wygenerowanym przez XSD.exe. Miał 3500 wierszy z absurdalnie pełnymi nazwami klas/zmiennych (pomyśl `someRidiculouslyLongPrefixThenMaybeOneThingUniqueAtTheEnd` \- trudne do porównania na pierwszy rzut oka z `someRidiculouslyLongPrefixThenMaybeOneOtherThingChanged`) i adnotacjami w różnych miejscach. Najważniejsze jest to, że zajęło mi wieki, aby zrozumieć, co się do cholery dzieje. Przeczytałem to i pomyślałem, że nigdy nie umieściłbym swojego nazwiska obok czegoś tak... nieczystego. **Pytanie:** 1) Czy grzebanie w wygenerowanym kodzie to zła praktyka (np. czyszczenie go). 2) Czy nie byłoby lepszą praktyką napisanie mappera do mapowania wygenerowanych klas na moje własne ładne, czyste klasy (z którymi mógłbym wtedy pracować, całkiem szczęśliwie)? **EDYTUJ:** Dzięki za wszystkie komentarze. Gdybym faktycznie zamierzał zrobić z tym coś interesującego (tj. Gdyby istniały obiekty domeny, które nie były obiektami transportowymi), to myślę, że zmapowałbym je do „czystszych” klas, które i tak musiałbym zrobić, aby uzyskać jakiekolwiek rodzaj funkcjonalności z nich. W tym przypadku klasy są w rzeczywistości DTO, więc być może ma sens, aby nazewnictwo pasowało do odpowiednich elementów. Jak wspomniano, nie muszę tego dotykać - wystarczy wywołać akcesory / mutatory przed przekazaniem danych do innej warstwy w celu przetworzenia. Na razie myślę, że zostawię je w spokoju.


title: Kiedy zmieniasz klasę/metodę i masz już zaliczone testy jednostkowe, czy powinieneś zmienić, a następnie test, czy napisać test, a następnie zmienić?

text: Powiedzmy, że mam klasę z jednym konstruktorem, który akceptuje 2 parametry i inicjuje się przy użyciu tych parametrów. Napisałem na to testy i wszystkie zdają. Później zdaję sobie sprawę, że muszę zrobić dodatek do konstruktora, aby zaakceptować trzy parametry. Czy powinienem a) dodać nowy parametr, obserwować, jak moje testy się psują i próbować to naprawić b) przepisać istniejące testy, aby przetestować nowe oczekiwane zachowanie, obserwować, jak początkowo zawodzą, a następnie dodać do klasy (to wydaje mi się bardziej TDD sposób) Z punktu widzenia TDD myślę, że opcja „b” ma więcej sensu. Jednak opcja „a” (dla mnie) wydaje się bardziej naturalnym podejściem. Czy jest jakiś standardowy sposób, w jaki większość ludzi to robi?


title: Architektura oprogramowania pozwalająca na rozwój, realna sytuacja życiowa

text: Wiem o interfejsach, klasach abstrakcyjnych, które służą jako klasa bazowa, czytałem o luźnym sprzężeniu ... Ale nie mogę wymyślić przyzwoitego rozwiązania, gdy zmienia się właściwość klasy, a nowy typ potrzebuje do zaimplementowania w innych klasach przy użyciu tej zaktualizowanej klasy. **Przykład** Poniżej znajduje się uproszczona reprezentacja rzeczywistej sytuacji. Faktura zawiera obiekt Contact, który ma właściwość Address. Klasa abstrakcyjna Kontakt{ string Nazwa{get;set;} string Adres{get;set;} } Klasa Klient:Kontakt{ string NumerKlienta{get;set;} } Klasa Faktura{ string NumerDokumentu{get;set;} Klient Klient{get ;set;} } Następnie decydujemy się uaktualnić klasę Contact tak, aby zawierała wiele adresów. Z czego faktura będzie potrzebować. Class Address{ string Street{get;set;} } Klasa abstrakcyjna Contact{ string Nazwa{get;set;} Lista<Address> Addresses{get;set;} } Logicznie rzecz biorąc, klasa Invoice musi zostać zmieniona na coś w rodzaju Class Invoice { string NumerDokumentu{get;set;} Klient Klient{get;set;} Adres InvoiceAddress{get;set;} } **Problem** Od razu widzisz, że _wszędzie_ używałem wcześniej właściwości `Address` **string**, Będę teraz musiał zmienić to na wystąpienie typu **Adres** Jak wspomniano wcześniej, jest to tylko uproszczony przykład. Problem w prawdziwym życiu byłby znacznie większy, ponieważ kontakty będą używane w całym oprogramowaniu. **Wniosek** Chcę rozwijać oprogramowanie z zasadą, że moje oprogramowanie będzie lekkie dla nowych wersji niektórych modułów. Tak więc, jeśli zdecyduję się stworzyć nowy moduł Kontakt, wpływ na inne moduły jest prawie nieistniejący. Dodaną funkcjonalność można więc wdrażać stopniowo. Chcę wiedzieć, jak poradzić sobie z takimi problemami wersjonowania. Ten projekt jest obecnie nadal na etapie projektowania architektonicznego i chcę, aby to się wyjaśniło, zanim przejdziemy dalej.


title: Bitowe OR a dodawanie flag

text: Widziałem, jak inni używali Bitwise-OR do łączenia flag przed: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN | SKOK | STRZELAĆ; Ja też tak to robię. Ale widziałem też kilka (nie tak wiele) flag łączących za pomocą dodawania: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN + JUMP + SHOOT; Który jest bardziej „czytelny”? (Jak myślisz, który z nich rozpozna więcej osób?) Jaki jest „standardowy” sposób na zrobienie tego? Który wolisz?


title: Automatyczne programowanie: napisz kod, który pisze kod

text: Po przeczytaniu książki The Pragmatic Programmer jednym z najbardziej interesujących mnie argumentów było „napisz kod, który pisze kod”. Próbowałem przeszukać sieć, aby znaleźć więcej wyjaśnień lub artykułów na ten temat, i chociaż znalazłem dobre artykuły na ten temat, nadal nie znalazłem żadnej konkretnej implementacji kodu ani dobrych przykładów. Czuję, że wciąż nie jest to tak powszechny argument, coś, co nie ma dokumentacji lub nie jest akceptowane przez tak wiele osób, i chciałbym dowiedzieć się więcej na ten temat. Co myślisz na ten temat? Czy jest to coś, co naprawdę zwiększy Twoją produktywność? Jakie są dobre zasoby na ten temat, wśród książek, blogów, pokazów slajdów itp.? * * * Niektóre przykłady kodu byłyby bardzo mile widziane, aby umożliwić mi lepsze zrozumienie jego implementacji. * * * Oto strona wiki na ten temat z różnymi odpowiednimi technikami programowania, takimi jak programowanie meta, programowanie generatywne i generowanie kodu.


title: Jakie są „musi wiedzieć” polecenia Emacsa?

text: Jestem całkiem nowym konwertytą na Emacsa i naprawdę uwielbiam go jako edytora, przede wszystkim dlatego, że ciągle znajduję nowe i bardzo przydatne polecenia. Czy na mojej liście brakuje innych poleceń programisty, które „musi znać”? M-x replace-string — Znajdź i zamień podany ciąg. M-x goto-line - Przejdź do określonej linii M-x column-number-mode - Pokaż aktualny numer kolumny w pasku tekstowym


title: Jak oceniasz mały kawałek kodu?

text: Tworzę stronę internetową w oparciu o kod użytkowników, miejsce, w którym mogą udostępniać kod w sposób społecznościowy, a jedną z funkcji, którą aktualnie rozwijam, jest Code Review. Ta funkcja pozwoli użytkownikom ocenić kod w pewnych aspektach, od samego początku wyszedłem z takich rzeczy jak: * Czytelność, * Wydajność i * Modułowość. Jakie są ogólne cechy, które oceniasz podczas przeglądania kodu?


title: Czy w przypadku wywiadów e-mailowych źle jest szukać odpowiedzi?

text: Dostałem więc maila „wywiad” z pytaniami, na które mam odpowiedzieć. Nie jestem pewien tylko jednego z nich, więc chciałem wygooglować odpowiedź. Oczywiście w prawdziwym wywiadzie nie mogę tego zrobić, więc czy powinienem powiedzieć „nie wiem”, czy to zbadać? To znaczy, gdybym był w pracy, szukałbym tego, żeby nie można było na to patrzeć? Prawidłowy?


title: Inteligencja jako wielkość wektorowa

text: Czytam tę wspaniałą książkę zatytułowaną _"Coders at Work: Reflections on the Craft of Programming" Petera Seibela i jestem w części, w której rozmowa jest z Joshuą Blochem i znalazłem tę odpowiedź, która jest ważna dla programisty. Akapit brzmi mniej więcej tak. > Jest taki problem, który polega na tym, że programowanie jest w dużej mierze intelektualną merytokracją i często ci ludzie są najmądrzejszymi ludźmi w organizacji; dlatego uważają, że powinni mieć możliwość podejmowania wszystkich > decyzji. Ale sam fakt, że są najmądrzejszymi ludźmi w organizacji, nie oznacza, że powinni podejmować wszystkie decyzje, ponieważ inteligencja nie jest wielkością skalarną; jest to wielkość wektorowa. Tu, w ostatnim zdaniu, nie dostrzegam wglądu, którym próbuje się podzielić. **Czy ktoś może nieco dokładniej wyjaśnić to, co rozumie przez wielkość wektorową, prawdopodobnie próbując przedstawić ten sam wgląd.** W dalszej części dochodzę do wniosku, że nie chodzi mu o posiadanie organizacji, w której ludzie nietechniczni (czasami nieświadomi) mogą być menedżerami ludzi technicznych z jakiegoś powodu, że mogą poświęcić więcej czasu na dobre pisanie e-maili, ponieważ właśnie następne stwierdzenie po powyższym akapicie było. > A jeśli brakuje Ci empatii lub inteligencji emocjonalnej, nie powinieneś > projektować interfejsów API, GUI lub języków. Rozumiem, że mówi, że w inżynierii oprogramowania programiści powinni wiedzieć, jak użytkownicy będą postrzegać ich produkt i projekt dla nich. Powyższy akapit wydał mi się bardzo interesujący.


title: Jak pogodzić deklaratywne tworzenie baz danych z nietrywialnymi „wnioskami” dotyczącymi danych?

text: Wracając do SQL Server po kilku latach, uważam, że projekty Visual Studio Database (a teraz SSDT) są bardzo ekscytujące, ponieważ mają na celu zaoferowanie sposobu na tworzenie baz danych w sposób deklaratywny, zamiast grzebania w skryptach zmian. Jednak słoń w pokoju to „ruchy danych” (nie jestem pewien, czy to oficjalny termin): nie jest zbyt trudno automatycznie napisać prostą zmianę w jednej tabeli, ale jeśli normalizujesz/denormalizujesz, rzeczy bardzo szybko stają się owłosione. Gert Drapers powiedział to samo w tym wideo TechEd i że starają się również wypracować sposób pracy z tymi złożonymi migracjami danych. **Pytanie:** To dało mi do myślenia. Jak mogłeś to zrobić? Czy istnieje sposób – nawet teoretycznie – na zdefiniowanie tych migracji danych w sposób deklaratywny? A może nawet niedeklaratywny sposób, który można by elegancko połączyć z deklaratywnymi bitami? Czy coś takiego już istnieje w innych frameworkach (niewyraźnie słyszałem coś o Ruby/Rails?) _(Zastanawiałem się, czy wrzucić tę ondbę, ale nie jestem pewien, czy lubią „dobre subiektywne pytania (jeśli to jest jeden ), w razie potrzeby możesz przeprowadzić migrację)_


title: Tworzenie konfigurowalnego formatera Java?

text: AFAIK to tylko `java.util.Formatter` i `java.text.Format`, a AFAIK żaden z nich nie jest rozszerzalny. Nie mam na myśli podklas, ale możliwość określenia sposobu obsługi obiektów według klasy, np. > proszę sformatować `char[]` jako łańcuch i > sformatować `byte[]` w hex. jest gadatliwy, a następnie formatowanie „Formatter” (lub „String.format”) nie ma większego sensu, jeśli muszę wykonać połowę pracy ręcznie („java.text.Format” to inna historia, ponieważ jest przeznaczona dla i18n). Również takie rzeczy jak String.format("%1$tY-%1$tm-%1$te", nowa Date()) nie są zbyt atrakcyjne. Proszę więc o pomysły jak coś takiego stworzyć, np. jak to ustrukturyzować i ewentualnie co jeszcze powinno robić.


title: CRM w kontekście programowania w C++

text: Zostałem zapytany przez pracodawcę o CRM w kontekście tworzenia oprogramowania w C++. Stanowisko, o które się ubiegałem, to C++ Software Engineer. Powiedziałem im: O ile wiem, CRM to skrót od Customer Relationship Management. Odnosi się również do narzędzi programowych, które śledzą reakcje i działania klientów i pracowników zaangażowanych w pewne relacje biznesowe. Wydawali się jednak rozczarowani, że nie umiem kodować ani zaimplementować frameworka CRM w C++ i nie mogłem znaleźć zbyt wiele w sieci. Czy ktoś wie, czego szuka pracodawca na tym etapie – zanim Cię zatrudni i przeszkoli? Byłbym wdzięczny za kilka wskazówek na początek.


title: Czy Java jest wolnym oprogramowaniem?

text: Wolne oprogramowanie zgodnie z definicją FSF. Czy jego standardowe biblioteki są wolne/open source? Czy jego implementacja jest bezpłatna/open source? Które części nie są wolne/open source? Wszelkie inne istotne informacje.


title: Stos MQTT, GWT, ActiveMQ do przenoszenia jms do przeglądarki

text: Jestem na wstępnych etapach projektowania starego projektu zastępczego. Mają już wyniki poniżej pół sekundy na swoich zielonych ekranach i chcą tego samego w swojej aplikacji internetowej. Mamy komputer mainframe 390, który może obsłużyć wszystko, co do niego wrzucimy, ale nie mają do tego dobrego jvm, więc mamy dwa poziomy serwerów websphere między komputerem mainframe a przeglądarką, serwer interfejsu użytkownika i serwer bl. W przypadku interfejsu skłaniam się ku GWT. Ale myślę, że jedną rzeczą, która mogłaby przypieczętować umowę, jest dodanie funkcji przesyłania wiadomości do przeglądarki. Pomysł polega na tym, że klikasz link, który wyświetla drugi panel informacji, zamiast klasycznego GWT, w którym uruchamia wywołanie GWT-RPC do serwera ui, serwer ui kieruje je do serwera bl, a bl wysyła do mainframe i wycofuje się, wysyła wiadomość MQTT bezpośrednio do serwera bl lub bezpośrednio do mainframe. Powiedzmy, że zapisy idą do bl, odczyty idą do mainframe'u. Jest to dość łatwe w klasycznym jmsie, ponieważ możesz wysłać wiadomość, która ma oczekiwaną odpowiedź. Następnie przygotuj wywołanie zwrotne, aby uzyskać odpowiedź. Ale z tego, co do tej pory czytam. Wygląda na to, że mqtt tego nie ma. Wygląda na to, że jest to tylko „odpal i zapomnij”, co utrudniłoby znalezienie sposobu na otrzymanie odpowiedzi z powrotem do stacji roboczej, która ją nazwała. Czy jestem tutaj? Czy ktoś próbował wcześniej tego stosu z gwt.


title: Unikanie syndromu „inteligentnego faceta” w projektach zespołowych

text: Na początku projektu popełniono wiele złych praktyk, rozpoznałem je i walczyłem z nimi wszystkimi. Ponieważ nie wybierałem i nie wybierałem swoich bitew, mój szef zakłada teraz, że wszystko, co wyszło mi z ust, jest zbyt skomplikowaną odpowiedzią i spędza dużo czasu na obronie siebie, zamiast dbać o najlepszy interes projektu. Jak popchnąć zespół we właściwym kierunku, nie czekając cztery miesiące, aż wszyscy dojdą do konsensusu, który starałem się osiągnąć przez cały czas, ani nie szkodząc mojej reputacji w zespole jako trudnego, wszystkowiedzącego?


title: Potrzebne wyjaśnienie dla podejścia „Pytaj, nie mów”?

text: Biorę kurs na temat wzorców projektowych w inżynierii oprogramowania i tutaj staram się zrozumieć dobry i zły sposób projektowania w odniesieniu do "sprzężenia" i "spójności". Nie mogłem zrozumieć koncepcji opisanej na poniższym obrazku. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/Tft7E.jpg) Przykład kodu pokazanego na obrazku jest dla mnie niejednoznaczny, więc nie mogę do końca jasno określić, co dokładnie „Zapytaj, nie mów!" podejście średniej. Czy mógłbyś wyjaśnić?


title: Dynamiczne tworzenie nowych skryptów w Lua

text: W tej chwili to tylko szalony pomysł, który miałem, ale udało mi się zaimplementować kod i sprawić, by działał poprawnie. Nie jestem do końca pewien, jakie byłyby przypadki użycia. Ten kod tworzy nowy plik skryptu Lua w katalogu projektu. ScriptWriter przyjmuje jako argumenty nazwę pliku, tabelę zawierającą wszystkie argumenty, które skrypt powinien przyjąć podczas tworzenia, oraz tabelę zawierającą wszelkie zmienne instancji, które mają zostać utworzone domyślnie. Planuję rozszerzyć ten kod, aby tworzyć nowe funkcje również na podstawie danych przesyłanych podczas jego tworzenia. To, co sprawia, że jest to fajne, to fakt, że nowy plik jest zarówno generowany, jak i ładowany dynamicznie w locie. Teoretycznie możesz uzyskać ten kod, aby wygenerować i załadować dowolny skrypt, jaki można sobie wyobrazić. Jednym z przypadków użycia, o którym myślę, jest sztuczna inteligencja, która tworzy skrypty w celu odwzorowania swoich funkcji i tworzy nowe skrypty dla nowych sytuacji lub środowisk. W tym momencie to wszystko jest jednak teoretyczne. Oto kod testowy, który tworzy nowy skrypt, a następnie natychmiast go ładuje i wywołuje z niego funkcje: function Card:doScriptWriterThing() local scriptName = "ScriptIAmMaking" local scripter = scriptWriter:new(scriptName, {"argumentName"}, { name = "'test'", jeden = 1}) scripter:makeFileForLoadedSettings() local loaderScript = require (scriptName) local scriptInstance = loadScript:new("sayThis") print(scriptInstance:get_name()) --wydrukuje wydruk testowy (scriptInstance:get_one()) -- wydrukuje 1 scriptInstance:set_one(10000) print(scriptInstance:get_one()) -- wydrukuje 10000 print(scriptInstance:get_argumentName()) -- wydrukuje sayThis scriptInstance:set_argumentName("saySomethingElse ") print(scriptInstance:get_argumentName()) --wypisze saySomethingElse end Oto **ScriptWriter.lua** local ScriptWriter = {} local twoSpa ceIndent = " " local equalsWithSpaces = " = " local newLine = "\n" --scriptNameToCreate musi być ciągiem --argumentsForNew i instanceVariablesToCreate muszą być tabelami, a nie pustą funkcją ScriptWriter:new(scriptNameToCreate, argumentsForNew, instanceVariablesToCreatable) lokalne wystąpienie = set ({}, { __index = self }) instance.name = scriptNameToCreate instance.newArguments = argumentsForNew instance.instanceVariables = instanceVariablesToCreate instance.stringList = {} zwróć funkcję zakończenia instancji self:buildSettersAndGetters() self:buildReturn() self:writeStringsToFile() end --najpierw pierwszy wiersz dowolnego skryptu, który będzie miał instancje function ScriptWriter:buildInstanceMetatable() table.insert(self.stringList, "local" .. self.name .. " = {}" .. newLine) table.insert(self.stringList, newLine) end --każdy stworzony w ten sposób skrypt potrzebuje nowej metody do tworzenia jego instancji function ScriptWriter:buildInstanceCreationMethod() --new( ) deklaracja funkcji table.insert(self.stringList, ("function " ..self.name .. ":new()) self:buildNewArguments() table.insert(self.stringList, ")" .. newLine) - -pierwsza linia wewnątrz funkcji :new() table.insert(self.stringList, twoSpaceIndent .. "local instance = setmetatable({}, { __index = self })" .. newLine) --dodaj wyznaczone argumenty wewnątrz :new() self:buildNewArgumentVariables() --utwórz zmienne instancji z załadowanymi wartościami dla klucz,wartość w parach(self.instanceVariables) do table.insert(self.stringList, twoSpaceIndent .. "instance" .. key .. equalsWithSpaces .. value .. newLine) end --zamknij funkcję :new() table.insert(self.stringList, twoSpaceIndent .. "zwróć instancję" .. newLine) table.insert(self.stringList, "end" .. newLine) table.insert(self.stringList, newLine) funkcja zakończenia ScriptWriter:buildNewArguments( ) --jeśli istnieją argumenty dla :new(), dodaj je jako klucz,wartość w ipairs(self.newArguments) do table.insert(self.stringList, value) table.insert(self.stringList, ",") end if next(self.newArguments) ~= nil then --upewnia się, że tabela nie jest pusta first table.remove(self.stringList) --usuwa ostatni element, który będzie dodatkowym "," end end function ScriptWriter: buildNewArgumentVariables() --dodaj wyznaczone argumenty do :new() dla klucza, wartości w ipairs(self.newArguments) do table.insert(self.stringList, twoSpaceIndent .. "instance" .. value .. equalsWithSpaces .. value .. newLine) end end -- zmienne instancji wymagają sep arate kodu, ponieważ ich nazwy muszą być kluczem, a nie nazwą argumentu funkcja ScriptWriter:buildSettersAndGetters() for key,value w ipairs(self.newArguments) do self:buildArgumentSetter(value) self:buildArgumentGetter(value) table.insert(self .stringList, newLine) end dla klucz, wartość w parach(self.instanceVariables) do self:buildInstanceVariableSetter(klucz, wartość) self:buildInstanceVariableGetter(klucz, wartość) table.insert(self.stringList, newLine) end end --kod dla argumenty przekazane w funkcji ScriptWriter:buildArgumentSetter(variable) table.insert(self.stringList, "function " .. self.name .. ":set_" .. variable .. "(newValue)" .. newLine) table.insert( self.stringList, twoSpaceIndent .. "self" .. zmienna .. equalsWithSpaces .. "newValue" .. newLine) table.insert(self.stringList, "end" .. newLine) funkcja końcowa ScriptWriter:buildAr gumentGetter(variable) table.insert(self.stringList, "function " ..self.name .. ":get_" ..variable .. "()" ..newLine) table.insert(self.stringList, twoSpaceIndent .. "return" .. "self". table.insert(self.stringList, "function " ..self.name .. ":set_" .. key .. "(newValue)" .. newLine) table.insert(self.stringList, twoSpaceIndent .. "self. " .. key .. equalsWithSpaces .. "newValue" .. newLine) table.insert(self.stringList, "end" .. newLine) end function ScriptWriter:buildInstanceVariableGetter(key, variable) table.insert(self.stringList, " funkcja " .. self.name .. ":get_" .. key .. "()" .. newLine) table.insert(self.stringList, twoSpaceIndent .. "return" .. "self" .. key . . newLine) table.insert(self.strin gList, "end" .. newLine) end --ostatnia linia dowolnego skryptu, który będzie miał instancje function ScriptWriter:buildReturn() table.insert(self.stringList, "return " ..self.name) end function ScriptWriter:writeStringsToFile( ) local fileName = (self.name .. ".lua") file = io.open(fileName, 'w') dla klucza, wartości w ipairs(self.stringList) do file:write(value) end file:close( ) end return ScriptWriter A oto, co wygeneruje dostarczony kod: local ScriptIAmMaking = {} function ScriptIAmMaking:new(argumentName) local instance = setmetatable({}, { __index = self }) instance.argumentName = argumentName instance.name = ' test' instance.one = 1 zwróć funkcję końcową instancji ScriptIAmMaking:set_argumentName(nowaWartość) self.argumentName = nowa wartość funkcja końcowa ScriptIAmMaking:get_argumentName() retur n self.argumentName funkcja końcowa ScriptIAmMaking:set_name(newValue) self.name = newValue funkcja końcowa ScriptIAmMaking:get_name() return self.name funkcja końcowa ScriptIAmMaking:set_one(newValue) self.one = newValue funkcja końcowa ScriptIAmMaking:get_one() return self .one end return ScriptIAmMaking Wszystko to jest generowane za pomocą tych wywołań: local scripter = scriptWriter:new(scriptName, {"argumentName"}, {name = "'test'", one = 1}) scripter:makeFileForLoadedSettings() Jestem nie jestem pewien, czy mam rację, że może to być przydatne w pewnych sytuacjach. To, czego szukam, to informacje zwrotne na temat czytelności kodu i postępowanie zgodnie z najlepszymi praktykami Lua. Chciałabym również usłyszeć, czy to podejście jest słuszne i czy sposób, w jaki to robiłem, da się rozszerzyć.


title: Problem z zegarem - czy czy nie do czy?

text: Powiedzmy, że mamy prosty zegar cyfrowy. Aby go „zasilić”, używamy procedury wykonywanej co sekundę. Aktualizujemy w nim część sekundową. Ale co z częściami minut i godzin? Co jest lepsze / bardziej profesjonalne / oferuje lepszą wydajność: 1. Ignoruj wszystkie sprawdzanie i uaktualnianie godzin, minut i sekund za każdym razem, co sekundę. 2. Użyj zmiennej `if` \+ do sprawdzenia, czy minęło 60 (lub 3600) sekund i aktualizuj część minutową/godzinną tylko w tych dokładnych momentach. To prowadzi nas do pytania, co jest lepsze – niepotrzebne rysunki (pierwsze podejście) czy dodatkowe „jeśli”? Właśnie zauważyłem cyfrowy zegar Javascript, jeden z milionów podobnych na jednej z miliardów stron. I zauważyłem, że wszystkie trzy części (godziny, minuty i sekundy) są aktualizowane co sekundę, choć pierwsza zmienia swoją wartość tylko raz na 3600 sekund, a druga raz na 60 sekund. Nie jestem doświadczonym programistą, więc mogę się mylić. Ale wszystko, czego się do tej pory nauczyłem, mówi mi, że `jeśli` są o wiele lepsze niż wykonywanie sekwencji rysowania/odświeżania tylko po to, aby narysować tę samą treść.


title: Udane biblioteki wspólnego kodu

text: Czy istnieją jakieś procesy, wytyczne lub najlepsze praktyki, których można przestrzegać, aby pomyślnie zaimplementować wspólne biblioteki kodu. Obecnie omawiamy implementację wspólnych bibliotek kodu w naszym zespole deweloperskim. W naszym przypadku nasze wspólne biblioteki kodu byłyby uzupełnieniem pakietów oprogramowania .net głównego nurtu, dla których tworzymy. W szczególności interesują mnie szczegóły i opinie na temat: * Podejście organiczne kontra projektowanie * Zarządzanie wersjami * Historie sukcesu (kiedy działają) * Horrory (kiedy nie działają) Wielkie dzięki


title: Czy testy jednostkowe czasami łamią enkapsulację?

text: Bardzo często słyszę: „Jeśli chcesz przetestować metody prywatne, lepiej umieść to w innej klasie i udostępnij”. Chociaż czasami tak jest i mamy ukrytą koncepcję wewnątrz naszej klasy, innym razem kończysz z klasami, które mają te same atrybuty (lub, co gorsza, każdy atrybut jednej klasy staje się argumentem metody w drugiej klasie) i ujawnia funkcjonalność, czyli w rzeczywistości szczegóły implementacji. Szczególnie w TDD, kiedy **refaktorujesz** klasę z publicznymi metodami z poprzedniej testowanej klasy, ta klasa jest teraz częścią twojego interfejsu, ale nie ma żadnych testów (ponieważ ją zrefaktoryzowałeś i jest to szczegół implementacji) . Teraz może nie znajduję oczywistej lepszej odpowiedzi, ale jeśli moja odpowiedź jest „poprawna”, oznacza to, że czasami pisanie testów jednostkowych może złamać enkapsulację i podzielić tę samą odpowiedzialność na różne klasy. Prostym przykładem może być testowanie metody ustawiającej, gdy getter nie jest w rzeczywistości potrzebny do niczego w prawdziwym kodzie. Proszę, odpowiadając, nie udzielaj prostych odpowiedzi na konkretne przypadki, które być może napisałem. Spróbuj raczej wyjaśnić ogólny przypadek i podejście teoretyczne. I to nie jest specyficzne dla języka. Z góry dziękuję. **EDYTUJ:** Odpowiedź udzielona przez Matthew Flynna była naprawdę wnikliwa, ale nie do końca odpowiadała na pytanie. Chociaż słusznie stwierdził, że albo nie testujesz metod prywatnych, albo ich nie wyodrębniasz, ponieważ tak naprawdę stanowią one inny problem i odpowiedzialność (a przynajmniej to mogłem zrozumieć z jego odpowiedzi), myślę, że są sytuacje, w których testowanie jednostkowe jest prywatne metody są przydatne. Moim głównym przykładem jest sytuacja, gdy masz klasę, która ma jedną odpowiedzialność, ale dane wyjściowe (lub dane wejściowe), które daje (pobiera) są po prostu zbyt złożone. Na przykład funkcja mieszająca. Nie ma dobrego sposobu na rozbicie funkcji mieszającej i zachowanie spójności i hermetyzacji. Jednak testowanie funkcji mieszającej może być naprawdę trudne, ponieważ musiałbyś obliczyć ręcznie (nie możesz użyć obliczania kodu do testowania obliczania kodu!) haszowania i przetestować wiele przypadków, w których skrót się zmienia. W ten sposób (i może to być kwestia warta osobnego tematu) uważam, że testowanie metod prywatnych jest najlepszym sposobem na poradzenie sobie z tym problemem. Teraz nie jestem pewien, czy powinienem zadać inne pytanie, czy zadać je tutaj, ale czy istnieje lepszy sposób na przetestowanie tak złożonego wyjścia (wejścia)? OBS: Jeśli uważasz, że powinienem zadać inne pytanie na ten temat, zostaw komentarz. :) **EDIT2:** Przyjąłem odpowiedź jako poprawną, ponieważ skłoniła mnie do zastanowienia się i podjęcia decyzji o moim kierunku działania, chociaż nie odpowiedziała całkowicie na moje pytanie. Ale dla tych, którzy borykają się z tym samym problemem co ja (jedna spójna klasa, która zmieni się razem, ale nadal jest zbyt trudna do przetestowania sama w sobie), powiem, co zrobiłem i dlaczego. Uznałem, że dane wyjściowe tej klasy są po prostu zbyt trudne do poprawnego przetestowania przez komputer, więc ich nie testowałem. Mógłbym użyć frameworka do przetestowania jego prywatnych metod (co byłoby najlepszym pomysłem, jak sądzę), ale nie chciałem do tego dojść. Jeśli zastanawiasz się, co jest spójne i szanuje SRP, a mimo to jest zbyt trudne do przetestowania przez komputer, podam kilka przykładów: generowanie mapy wysokości, funkcje mieszające, proceduralne generowanie muzyki (możesz przetestować niektóre jednostki, ale jednostka najwyższego poziomu jest po prostu zbyt subiektywna).


title: Jakiekolwiek narzędzie Code Review z bezpośrednim połączeniem z CVS?

text: Znalazłem wiele narzędzi Code Review: * Phabricator (przez Facebook) - http://phabricator.org/ * Rietveld (przez Google) - http://code.google.com/appengine/articles/rietveld.html * GitHub - https://github.com/ * Tygiel - http://www.atlassian.com/software/crucible/overview * GitLab - http://gitlabhq.com/demo.html * SmartBear - http://smartbear. com/products/software-development/code-review * itd. Ale nie znalazłem żadnego, który byłby bezpośrednio związany z systemem wersjonowania. Ponieważ chcę, aby proces przeglądu kodu był wymagany, aby nikt nie mógł wepchnąć ani jednej linii niesprawdzonego kodu do masteru, potrzebuję mojego systemu wersjonowania, aby **odrzucał wszystkie wydania poprawek, które nie zostały jeszcze sprawdzone**. Czy jest jakieś narzędzie, które to robi? Czy jest jakiś prosty sposób, jak to zrobić?


title: Jak zarządzać aplikacją winforms zainstalowaną na wielu komputerach podłączonych do jednej bazy sql?

text: Posiadam aplikację winforms, która łączy się z pojedynczą bazą danych serwera sql 2012 i jest wykonywana na wielu komputerach firmy. Mam kilka problemów z niektórymi transakcjami wewnątrz aplikacji, zakleszczeniami i przekroczeniami limitów czasu, więc pomysł refaktoryzacji przychodzi mi do głowy. W rzeczywistości aplikacja używa obiektu DbConnection (aplikacja zaczyna się od Framework 2.0 i niedawno została zaktualizowana do Framework 3.5, ale warstwa dostępu do danych nie została zmieniona) do wykonywania wywołań sql do bazy danych, a w Program.cs połączenie jest otwarte i do użytkownik nie zamyka aplikacji, którą utrzymuje otwarte połączenie. Jakie mam opcje refaktoryzacji tej aplikacji? * Entity Framework? => W związku z tym muszę powiedzieć, że baza danych SQL nie ma kluczy obcych * Refaktoryzacja warstwy dostępu do danych, aby użyć bardziej wydajnego połączenia? Może za pomocą TransactionScope? * Czy zawsze podłączona aplikacja jest wydajna?


title: Projektowanie systemu wtyczek

text: Pracuję nad projektem Java i chciałbym dodać system wtyczek. Dokładniej, chciałbym pozwolić użytkownikowi zaprojektować własny moduł, zapakować go do jara, zostawić w podfolderze "plugins/" mojej aplikacji i skończyć z tym. Udało mi się uzyskać potomny ładowacz klas do tworzenia instancji klas znajdujących się w zewnętrznych słoikach, ale teraz mam dylemat projektowy: powiedzmy, że Joe tworzy wtyczkę i pakuje ją w joeplugin.jar. Naprawdę chciałbym, aby Joe miał zajęcia o nazwie „Instantiation.Factory” i chciałbym, aby wszyscy mieli tę klasę z dokładnie taką lokalizacją i nazwą. (Ta klasa fabryczna oczywiście implementuje interfejs, który dostarczam i dzięki niemu otrzymuję to, czego chcę od wtyczki.) Gdyby Joe nie był ograniczony w ten sposób, musiałbym przejrzeć cały jego jar w poszukiwaniu jakiejś klasy, która implementuje mój interfejs fabryczny i nie chcę sobie wyobrażać, jak skomplikowane stają się rzeczy. Więc moje pytanie brzmi: czy powinienem wymusić ścisłą konwencję nazewnictwa dla tej pojedynczej klasy? Nie mam pojęcia, jak działają systemy wtyczek.


title: Zalety Java w edukacji?

text: Mam nadzieję, że nie jest to zbyt nie na temat i/lub oparte na opiniach. Szukam przykładów i powodów, dla których Java jest akceptowalnym językiem do celów edukacyjnych. Oto dlaczego: Sama uczyłam się programowania w C w wieku około 15 lat. W szkole używaliśmy Pascala (co moim zdaniem jest całkiem OK, szczególnie w kontekście edukacyjnym). Na uniwersytecie używano Javy i byłem zniesmaczony. Przykłady: Szczegółowość: Wskazówki dotyczące renderowania rh = new Wskazówki dotyczące renderowania( Wskazówki dotyczące renderowania.KEY_ANTIALIASING, Wskazówki dotyczące renderowania.VALUE_ANTIALIAS_ON); g2.setRenderingWskazówki(rh); * * * Klasy słuchaczy zamiast funkcji. * * * Brak przeciążania (co skutkuje brzydkimi `.equals()` i `.get()` zamiast `==` i `[]`). * * * Kiedy znowu mogłem samodzielnie wybrać język programowania, wybrałem Pythona i wszystko "wydawało się w porządku". Teraz problem polega na tym, że mam zamiar zostać nauczycielem informatyki w niemieckich liceach (klasa 5-13), gdzie będę zmuszony uczyć Javy. Więc szukam _ładnych części_ Javy. Co jest szczególnie łatwe/czytelne/... do zaimplementowania w Javie? Najlepiej w kontekście edukacyjnym, ale także z punktu widzenia zawodowego programisty.


title: Dlaczego Haskell nie ma funkcji „format” do interpolacji ciągów?

text: Próbuję użyć Shake'a i natknąłem się na następujący problem: nie ma łatwego i wygodnego sposobu na interpolację ciągu. Wiem o `Text.Printf` — nie tego szukam. Składnia interpolacji, o której mówię, jest następująca: (Make) HEADERS_DIR := /jakaś/ścieżka/do/katalogu CFLAGS := "-g -I$(HEADERS_DIR) -O2" (Python) headers_dir = "/jakiś/ path/to/dir" cflags = "-g -I{headers_dir} -O2".format(**locals()) A teraz porównaj to z możliwym rozwiązaniem Haskella. Po pierwsze: $ cabal install interpolatedstring-perl6 $ ghci -XExtendedDefaultRules -XQuasiQuotes A następnie: > import Text.InterpolatedString.Perl6 (qq) > let headers_dir = "/ścieżka/do/niektórych/katalogów" > [qq| -g -I$headers_dir -O2 |] :: String Chociaż wydaje mi się, że Make posuwa się być może o krok za daleko w swojej chęci interpolacji, nawet jeśli nie jest pytany, zastanawiam się, dlaczego Haskell nie ma funkcji formatu, jak Python. Może przeanalizować dostarczony ciąg i pobrać wartość o tej samej nazwie, do której odwołuje się wzorzec: let headers_dir = "/path/to/some/dir" format "-g -I$headers_dir -O2" Czy jest jakiś konkretny powód, dla którego tak nie jest zaimplementowane, czy wszyscy są po prostu zadowoleni z gadatliwości `Text.Printf` i/lub długiej konfiguracji bibliotek interpolacji? **Aktualizacja** : Wiele osób błędnie interpretuje pytanie jako pytanie o ogólne formatowanie ciągów, z możliwością określenia precyzji w przypadku liczb całkowitych itp. Podane przykłady pokazują jeden konkretny przypadek interpolacji, którym jest po prostu „podstawienie wyniku „pokaż a” w miejscu nazwy”. Pozwala na prostszą składnię i nie używa funkcji variadic per se.


title: Opracowanie koncepcji algorytmicznej dla problemu harmonogramowania i alokacji

text: Mam do rozwiązania problem z zakresu _badań operacyjnych_. Chcę zebrać kilka ogólnych podejść do ich oceny, aby wybrać najbardziej obiecujące do zaprojektowania programu związanego z problemem. * * * **Definicja problemu** Firma ACME, która sprzedaje niestandardowe kolaże i prowadzi produkcję zgodną z zasadami masowej personalizacji. **Produkcja** * _biurko_ **D**, w którym powstają _kolaże_ (może w przyszłości będzie więcej biurek, ale nie na razie) * _kolaż_ **C** składa się z... * Różnorodny _kwadrat zdjęcia_ **P** Kolaż możemy uznać za utworzony, gdy zostanie utworzony ostatni potrzebny kwadratowy obraz. * _Znacznik_ **M** _koloru_ **T** i pojemności **c_m** _Obraz_ jest rysowany z jednym lub więcej _znacznikami_ tego samego _koloru_. Każde _zdjęcie_ zużywa określoną ilość _pojemności znaczników_. Możliwe, że obrazki mogą _zużywać_ więcej niż jeden znacznik. Puste _znaczniki_ można uzupełnić, ale zajmuje to określoną ilość czasu. Szuflada to android, który pracuje 24/7 (ponieważ androidy nie mają jeszcze praw człowieka) i może pomieścić _wiele znaczników_ (jest limit, na razie możemy założyć 2), jeśli jeden _znacznik_ jest pusty, może przełączyć się na następny i nie traci czasu na uzupełnianie. Zmiana _znacznika_, ponieważ potrzebny jest inny _kolor_, również wymaga czasu. _Znaczniki_ **nie** znajdują się na biurku androida, tylko na tym, którego aktualnie używa. Dostają się tam o wyznaczonej godzinie. Problemem jest teraz zaplanowanie określonych _przypisania obrazu kwadratowego_, zgodnie z _przypisaniami znaczników_, _uzupełniania znaczników_ i _przełącznikami kolorów_ tak, aby każdy etap produkcji kolażu był zaplanowany z uwzględnieniem wysokiej wydajności (obejmującej minimalizację przełączników kolorów). * * * **Pytanie** Potrzebuję pomocy w znalezieniu algorytmów i pomysłów na rozwiązanie problemu. Może istnieją jakieś najlepsze praktyki lub przypadki problemów do mapowania, o których nie pomyślałem. Np. _TSP_ , gdzie nie jestem pewien, jak to zastosować w tym szczególnym przypadku. * * * **Moje dotychczasowe rozwiązania/pomysły** * Symulowane wyżarzanie Przypisania obrazków kwadratowych, przypisania znaczników itp. są traktowane jako zdarzenia. Znajdź permutację zdarzeń, która minimalizuje funkcję kosztów globalnych. * Algorytmy klasy aukcji Każde przypisanie obrazu kwadratowego uzyskuje bilans pieniędzy zgodnie ze zwracaną wartością funkcji kosztu przypisania. Przydziały mogą _kupić_ potrzebne zasoby w domu aukcyjnym. Po prawidłowym zakupie zasób i przydział są zaplanowane. * Mapuj do _instancji wykresu_ (Jeszcze nie wiem dokładnie, jak to zrobić) i znajdź ścieżkę o minimalnej wadze. * * * **Dodatkowe informacje** Istnieje meta tier z lepszym systemem **ERP** (Enterprise Resource Planning), który już wykonuje pewne wstępne planowanie. Tutaj zadaniem jest szczegółowe planowanie, tak jak zrobiłby to **MES** (Manufacturing Execution System). Ale nie wiem, ile kolaży muszę zaplanować w określonym czasie. Po prostu wiem, że jest to ciągły problem i nie ma potrzeby używania algorytmu internetowego. Program, który zamierzam opracować, jest wzywany na żądanie, aby zaplanować produkcję na kilka dni. Znalazłem sposób na mapowanie problemu na symulowane wyżarzanie i inne podejście zgodne z algorytmami klasy aukcyjnej. Potrzebuję pomocy w ocenie tych podejść, a nawet zebraniu nowych pomysłów, najlepszych praktyk, aby rozwiązać ten problem, ponieważ nigdy wcześniej nie miałem do czynienia z takim problemem. Np. pomogłaby mi odpowiedź typu spójrz na algorytm xyz lub pierwsze podejście do mapowania grafów.


title: Jak przetestować oprogramowanie, które wypala płyty CD bez marnowania płyt?

text: Chcę napisać aplikację, której można używać do nagrywania płyt CD (muzyki). Wiem, że i tak powinienem to przetestować na prawdziwych płytach CD, ale nie chcę tego robić za każdym razem, gdy wprowadzam małą zmianę. Ale chcę wiedzieć i testować, czy zostaną nagrane właściwe dane, aby nie dostać uszkodzonych płyt CD. Korzystam z biblioteki, która udostępnia tylko interfejsy API do bezpośredniego nagrywania na dysku fizycznym; nie pozwala na zapis na obraz dysku (co byłoby znacznie łatwiejsze do przetestowania). Jak mogę to przetestować bez marnowania płyt CD i czasu na każdą zmianę/kilka zmian, które wprowadzam?


title: Poszukiwanie lepszego wzorca Factory (Java)

text: Po wykonaniu przybliżonego szkicu modelu obiektu wysokiego poziomu, robię iteracyjne TDD i pozwalam innym obiektom wyłonić się jako refaktoryzacja kodu (ponieważ zwiększa się jego złożoność). (To całe podejście może być dyskusją / argumentem na inny dzień.) W każdym razie jestem w punkcie, w którym szukam refaktoryzacji bloków kodu obecnie w blokach if-else na oddzielne obiekty. Dzieje się tak, ponieważ istnieje inna kombinacja wartości, która tworzy nowy zestaw logicznych podgałęzi. Mówiąc dokładniej, jest to funkcja systemu transakcyjnego, w której zlecenia kupna zachowują się inaczej niż zlecenia sprzedaży. Odpowiedzi na zamówienia mają pole wskaźnika liczbowego, które opisuje jakieś zdarzenie, które miało miejsce (np. wypełnij, anuluj). Kombinacja tego pola wskaźnika liczbowego oraz tego, czy jest to kupno, czy sprzedaż, wymagają innego przetwarzania kodu kupna. Stworzenie rodziny obiektów w celu oddzielenia kodu w celu unikalnej obsługi każdej z kombinacji dwóch pól wydaje się w tym momencie dobrym wyborem. Sposób, w jaki normalnie bym to zrobił, to utworzenie obiektu Factory, który po wywołaniu z 2 odpowiednimi parametrami (wskaźnik, buysell) zwróci poprawną podklasę obiektu. Czasami robię ten wzorzec z mapą, która pozwala na wyszukanie żywej instancji (lub konstruktora do użycia poprzez odbicie), a czasami po prostu koduję na stałe przypadki w klasie Factory. Tak więc - z jakiegoś powodu wydaje się, że projekt nie jest dobry (np. jeden obiekt, który zna wszystkie podklasy interfejsu lub obiektu nadrzędnego) i jest trochę niezgrabny. Czy istnieje lepszy wzór rozwiązania tego rodzaju problemu? A jeśli takie podejście fabryczne ma sens, czy ktoś może zaproponować ładniejszy projekt?


title: Wzorzec projektu dla metody akceptującej jeden z kilku elementów statycznych w C#?

text: Chcę zilustrować moje pytanie na (miejmy nadzieję) reprezentatywnym przykładzie. Powiedzmy, że mam sytuację, w której opracowuję bibliotekę klas w języku C#, która ma być używana w niektórych symulacjach. Chcę zdefiniować planety (Ziemia, Mars, Saturn itp.) i sprawić, by każda z nich miała pewne właściwości i metody, które są wspólne w interfejsie (nazwa, sygnatura itp.), ale są unikalne w implementacji dla każdej z nich. Tj. Earth.Mass nie jest równa Mars.Mass. Jak dotąd nic wielkiego. Chcę mieć kilka innych klas/metod/algorytmów, które przyjmują jako argument planetę i używają jej zdefiniowanych właściwości i metody: double MyApparentWeight(Planet someplanet, double MassInKG) double DistanceFromInKM(Planet someplanet, Planet originplanet) Planety mogą być używane wszędzie miejsce przez kogoś korzystającego z tej biblioteki. Wszystkie "Ziemi" powinny być identyczne i wszystkie "Saturny" powinny być identyczne. Oczywiście „Ziemi” różnią się od „Saturna”. Chcę również, aby użytkownik biblioteki mógł łatwo tworzyć nową planetę (np. Vulcan, Endor, Tralfamadore, Persephone, Rupert itp.). Powinna być zmuszona do dostarczenia właściwości i metod istniejących, a tym samym być wykorzystywana przez metody MyApparentWeight i DistanceFromInKM. Tak więc podejście na poziomie podstawowym polega na tym, że istnieje klasa Planet, a następnie konkretni (Ziemia, Vulcan itp.) po prostu dziedziczą po niej. W tym przypadku jednak użytkownik musi albo utworzyć instancję Ziemi i nosić ją ze sobą, albo tworzyć nową za każdym razem, gdy jest potrzebna. Może to być niepotrzebnie niezgrabne (zwłaszcza w świetle oczekiwanych użytkowników) i prawdopodobnie uderzyć w wydajność, ponieważ niektóre Planety mogą mieć etapy inicjalizacji odczytu danych z plików itp. Następnym pomysłem był powyższy, ale z paradygmatem singletona. To jest w zasadzie to, co zrobiłem do tej pory. Wydaje się, że to dyktuje wewnętrzne wdrożenie wszelkich nowych tworzonych Planet (i znowu coś niepokojącego, biorąc pod uwagę potencjalny poziom niektórych użytkowników). W tym projekcie wycinam zęby C#/.NET. Moje początkowe naiwne podejście polegało na próbie tworzenia klas statycznych z interfejsami lub dziedziczeniem. Oczywiście szybko nauczyłem się szaleństwa tej ścieżki. Na wysokim poziomie jest to paradygmat, którego bym chciał. Czy jest jakiś inny wzorzec projektowy, którego mi brakuje, który mógłby objąć tego typu sytuację? Doceń wszelkie sugestie. # Aktualizacje Być może nie wyjaśniłem, że ten przykład "Planety" miał być jedynie ilustracją strukturalną i nie odzwierciedlał bezpośrednio rzeczywistych obliczeń. Niektórzy ludzie wydawali się być trochę pochłonięci implementacją tego, jakie dane są w nich reprezentowane i innymi aspektami peryferyjnymi. Sugestie, że poszczególne planety (takie jak Ziemia) są jedynie instancjami klasy „Planeta”, nie uchwyciły moich uwag na temat potencjalnie istotnych różnych implementacji ich wewnętrznej mechaniki wspierającej ich metody i właściwości. Nie rozumiem również, w jaki sposób pomaga to, że nie chcę zarządzać tymi instancjami w dowolnym miejscu, w którym chcesz ich użyć, lub koniecznością tworzenia nowych instancji. Myślę, że rozszerzenie sugestii Stephena przez Glenna działa najlepiej w kontekście tego, czego tutaj potrzebuję. Mogę to połączyć z sugestią rsbarro, aby mieć statyczne właściwości dla wbudowanych dzieci `Planet`. (Właściwie bardziej jak implementatory `interfejsu IPlanet`). Zapewnia to najłatwiejszy dostęp dla użytkowników do najczęściej używanych elementów i zapewnia niewielką poprawę wydajności bez konieczności każdorazowego pobierania ze słownika po nazwie. Nadal oferuje użytkownikom możliwość dynamicznego dodawania większej liczby rodzajów planet. Nie mam jeszcze przedstawiciela, który zagłosowałby na wszystkie odpowiedzi, o których wspomniałem powyżej, w przeciwnym razie zrobiłbym to. Dziękuję wszystkim za sugestie i opinie.


title: Co zrobić, jeśli okaże się, że przepisywanie trwa zbyt długo?

text: Wiem, że Joel mówi, że przepisywanie zawsze jest złe, jasne, ale to zakładając, że osoba, która napisała kod, miała jakieś pojęcie, co robi. Mam projekt C++ średniej wielkości (w każdym razie dla jednego programisty, ~18k LoC), który zacząłem, gdy nie znałem tak naprawdę C++. Dlatego jest kilka rzeczy, które są po prostu… złe. Źle to jedyny sposób, aby to opisać. Musi zostać przepisany, prosty i prosty. Jednak -- spędziłem dużo czasu na przepisaniu -- błędy w oryginale nie są naprawiane. Jednak niektóre z błędów same w sobie są problemami z architekturą oryginalnego narzędzia - a niektóre z nich, które muszę naprawić, i tak wymagałyby dotknięcia niemal każdego wiersza kodu. Z jednej strony uważam, że naprawienie błędów w starym programie będzie ogromnym marnotrawstwem wysiłku, ponieważ te błędy nie są nawet możliwe w nowym projekcie, nad którym pracowałem. Z drugiej strony czułem, że zaniedbałem użytkowników mojego oryginalnego programu, ponieważ nie był on aktualizowany od tak dawna. Co powinienem zrobić?


title: Jakie są najgorsze rzeczy, o których zapominają myśleć niedoświadczeni programiści?

text: Jako młody programista, przydałoby się kilka porad dotyczących tego, o czym należy pomyśleć, aby stworzyć wysokiej jakości aplikację. Na moich kursach w college'u większość nauczycieli kładła nacisk na walidację danych wejściowych, a niektórzy mówili o kwestiach bezpieczeństwa, ale nikt nie omawiał znaczenia innych rzeczy, takich jak na przykład logowanie. Jakie błędy popełniają niedoświadczeni programiści, które mogą prowadzić do frustracji bardziej doświadczonych programistów?


title: Uczyń program shareware darmowy w niektórych krajach

text: **Pomysł.** Aby mój program shareware był darmowy w mniej rozwiniętych krajach. Lub wydaj bezpłatną wersję dla tych krajów. **Cel.** Więcej użytkowników, raporty o błędach, rozszerzenia, aktywne forum itp. W każdym razie 90% sprzedaży odbywa się w ~30 najbogatszych krajach. Dlaczego nie udostępnić go bezpłatnie w Chinach, Indiach, Rosji... **Pytanie.** Jakie są możliwe problemy? Nie mogę znaleźć informacji na ten temat. Wygląda na to, że prawie nikt tego nie robi (znam tylko Windows 7 Home Basic). **Algorytm.** Jak byś go zaimplementował? Wiem, że możliwe jest wykrycie kraju za pomocą adresu IP. Jest OK, jeśli nie uda się wykryć w 20% przypadków. Po wykryciu kraju użytkownik otrzyma klucz licencyjny za darmo. Wykrywanie kraju i generowanie kluczy licencyjnych można zaimplementować na serwerze WWW. EDYCJA: Wykrywanie kraju może być wykonywane, kiedy użytkownik chce (klika przycisk „Zarejestruj się za darmo”). Następnie program łączy się z moją witryną, która wykrywa kraj i generuje klucz licencyjny na podstawie identyfikatora sprzętowego użytkownika. Następnie bezpłatny klucz może być używany na tym komputerze jak zakupiony klucz i nie jest wymagane połączenie z Internetem. Na innym komputerze/sprzętu użytkownik może po prostu powtórzyć procedurę, o ile przebywa w jednym z tych krajów. EDYCJA: Wykrywanie kraju jest łatwe i szybkie, przetestowałem to za pomocą tego skryptu php + baza danych. Działało ze wszystkimi adresami IP odwiedzających moją witrynę w tym miesiącu. Jednak niektórzy z nich mogą faktycznie mieszkać w innych krajach (patrz odpowiedź jwentinga).


title: Czy zalogowani użytkownicy muszą przeglądać witrynę przez https?

text: Nigdy nie sądziłem, że to konieczne, ale klient zażądał, aby wszystkie strony internetowe obsługiwane zalogowanym użytkownikom były dostarczane przez HTTPS. Pomijając punkt widzenia implementacji, do którego nie zamierzam się dążyć, czy jest jakiś prawdziwy powód dla tej prośby? Dla jasności, proces logowania / wylogowania, ustawienia konta, preferencje rejestracji i wszystkie skrypty związane z użytkownikiem są obsługiwane przez https. ale nie widzę sensu w moich artykułach prasowych, informacjach prasowych, wydarzeniach itp., które są podawane w ten sposób? Czy czegoś mi brakuje?


title: Czy ktoś używał skrótu w kodzie produkcyjnym?

text: Mam sytuację, w której niektóre procedury zwracają obiekt (coś jak DTO) z pewnym interfejsem: interface ISomeInterface { string StringReadOnlyProperty { get; } int IntReadWriteProperty { get; ustawić; } } (W rzeczywistej implementacji jest więcej właściwości). Istnieją dwa różne miejsca, w których te obiekty są obsługiwane — jeden proces, który generuje nowe instancje, a drugi proces, który manipuluje istniejącymi instancjami. Wewnętrznie te dwie implementacje są bardzo różne. „Nowa” instancja jest tylko skrótem, a „istniejąca” instancja ma wiele logiki śledzenia. Więc muszę mieć tę implementację "Stub" przez cały czas. Myślałem o tym, jak ładnie Rhino Mocks może zatkać implementacje interfejsu bez konieczności generowania konkretnej klasy. Czy ktoś kiedykolwiek używał mechanizmu „zatykania”, takiego jak Rhino Mocks, ale w swoim kodzie produkcyjnym, a nie w testach jednostkowych? Po prostu wydaje się to złą praktyką, ze względu na zależność od frameworka testowego.


title: Procedury składowane w języku Java w Oracle, dobry pomysł?

text: Rozważam użycie procedury składowanej Java jako bardzo małej podkładki, aby umożliwić komunikację UDP z pakietu PL/SQL. Oracle nie zapewnia UTL_UDP, aby dopasować jego UTL_TCP. Istnieje XUTL_UDP innej firmy, który używa Javy, ale jest to zamknięte źródło (co oznacza, że nie widzę, jak jest zaimplementowane, a nie, że nie chcę używać zamkniętego źródła). Ważna różnica między procedurami składowanymi PL/SQL i Java w odniesieniu do sieci: gniazda PL/SQL są zamykane po wywołaniu dbms_session.reset_package, ale gniazda Java nie. Więc jeśli chcesz pozostawić otwarte gniazdo, aby uniknąć kosztów rozerwania/ponownego połączenia, nie możesz tego zrobić w sesjach korzystających z reset_package (takich jak żądania HTTP mod_plsql lub mod_owa). Wcześniej nie używałem procedur składowanych Java w zdolności produkcyjnej w Oracle. Jest to bardzo duża, intensywnie używana baza danych, a ta konkretna podkładka również byłaby intensywnie używana (służy jako most UDP między klientem syslog PL/SQL RFC 5424 a lokalnym demonem rsyslog). Czy narażam się na nieszczęście i przerażenie, czy też procedury składowane w Javie są wystarczająco stabilne i solidne do użycia w 10g? Zastanawiam się nad problemami z osadzoną JVM, jit, garbage collection lub innymi rzeczami, które mogą mieć wpływ na intensywnie używaną bazę danych.


title: Czy istnieje standard, kiedy dołączasz biblioteki, czy nie?

text: Często spotykam się z klasą, która ma pojedyncze odniesienie do innej biblioteki i zastanawiałem się, czy lepiej dołączyć bibliotekę, czy odwoływać się do obiektu za pomocą jego pełnej nazwy. Czy jedno jest lepsze od drugiego? Czy jeden jest bardziej standardem niż drugi? Na przykład using System.Windows.Messagebox: Opcja A: using System.Windows; public class MojaKlasa { SomeMethod() { MessageBox.Show("Coś"); } } Opcja B: public class MojaKlasa { SomeMethod() { System.Windows.MessageBox.Show("Coś"); } } Jeśli B, to ile referencji potrzebujesz, zanim zdecydujesz się dodać całą bibliotekę?


title: Jakie mam opcje? - Oddzielenie interfejsu użytkownika

text: Pracuję nad projektem, w którym wszystko jest sterowane z .dll na serwerze. Interfejs użytkownika i reguły biznesowe znajdują się w tym pliku .dll. Utrudnia to debugowanie. Moje pytanie brzmi, chciałbym przedstawić alternatywy dla umożliwienia użytkownikom tworzenia niestandardowych ekranów bez interfejsu użytkownika i tak ściśle powiązanych reguł. Czy ktoś może zaproponować sugestie lub odniesienia do sposobów podziału interfejsu użytkownika, ale nadal pozwalających na maksymalne możliwości dostosowywania? Daj mi znać, jeśli będę potrzebował dodatkowych informacji.


title: Oblicz, czy funkcja jest czysta

text: Zgodnie z Wikipedią: > W programowaniu komputerowym, funkcję można opisać jako czystą, jeśli obie te > stwierdzenia dotyczące funkcji są aktualne: Funkcja zawsze ocenia tę samą > wartość wyniku przy tych samych wartościach argumentów. Wartość wyniku funkcji > nie może zależeć od żadnych ukrytych informacji lub stanu, które mogą się zmieniać w miarę postępu wykonywania programu lub pomiędzy różnymi wykonaniami programu, ani nie może zależeć od jakichkolwiek zewnętrznych danych wejściowych z urządzeń I/O. Ocena wyniku > nie powoduje żadnych semantycznie obserwowalnych skutków ubocznych lub danych wyjściowych, takich jak > mutacja mutowalnych obiektów lub wyjście do urządzeń I/O. Zastanawiam się, czy można napisać funkcję, która oblicza, czy funkcja jest czysta, czy nie. Przykładowy kod w JavaScript: function sum(a,b) { return a+b; } funkcja say(x){ console.log(x); } isPure(sum) // True isPure(say) // False


title: Wzorzec projektowy do synchronizacji danych w Androidzie

text: Widzę dwie implementacje do synchronizacji danych między serwerem a klientem w większości aplikacji. Zakłada się, że nie skonfigurowano GCM: 1. Okresowe uruchamianie usługi intencji, która pobiera dane z sieci i zapisuje je w bazie danych. 2. Implementacja adaptera synchronizacji, który działa okresowo. Które z powyższych poleciłbyś mieć w swojej aplikacji i dlaczego?


title: Czy nadszedł czas, aby wycofać synchronizację, poczekać i powiadomić?

text: Czy istnieje jeden scenariusz (inny niż zgodność ze starymi maszynami wirtualnymi JVM), w którym użycie „zsynchronizowanego” jest lepsze niż użycie „blokady”? Czy ktoś może usprawiedliwić użycie opcji „czekaj” lub „powiadom” w nowszych systemach? Czy istnieje jakiś algorytm, który **musi** używać jednego z nich w swojej implementacji? Widzę poprzednie pytania, które dotyczyły tej sprawy, ale chciałbym posunąć się nieco dalej i właściwie je „odrzucić”. Istnieje zbyt wiele pułapek, pułapek i ostrzeżeń, które zostały rozwiązane dzięki nowym obiektom. Po prostu czuję, że wkrótce może nadejść czas, aby uznać je za przestarzałe.


title: Czy „downcast if block” byłby rozsądną funkcją językową?

text: Rozważ następujące "jeśli rzutowane": class A { public void f1() { ... } } class B : A { public void f2() { ... } } A a = foo(); // może zwrócić A lub B if ( a is B ) { // Wewnątrz bloku, niejawnie "ponownie zadeklaruj" a jako typ B // To jest B, przejdź do niego a.f2(); // Nie skompiluje się. a = nowy A(); } Nie wchodzimy do bloku, chyba że `a` jest `B`, dlatego wewnątrz bloku kompilator traktuje `a` dokładnie tak, jakby został zadeklarowany jako typ `B`. Możesz przypisać mu null w bloku, jeśli jest to typ referencyjny, ale byłoby błędem czasu kompilacji przypisanie do niego na przykład `new A()` (dzięki @ThomasEding za poruszenie tego pytania). Wszystko, co mogłoby złamać to założenie, że „a” to „B”, może równie dobrze złamać następujący legalny C#: if (a is B ) { B b = a as B; b.f2(); } Pierwsza wygląda jak cukier składniowy dla drugiej. Nawet jeśli ta funkcja ma sens, jestem pewien, że chłopcy Andersa Hjelberga mają więcej przydatnych funkcji do zaimplementowania. Zastanawiam się tylko, czy to gorszy pomysł, niż mi się wydaje. **AKTUALIZACJA** Poważnym zarzutem byłoby to, że opisana funkcja dodaje semantykę bez dodawania składni: Z jednej wersji języka do drugiej znaczenie powyższego bloku znacznie się zmieni. Byłoby to bardziej znośne z nowym słowem kluczowym. Ale wtedy dodałbyś nowe słowo kluczowe.


title: Niestandardowe aplikacje .NET i klastrowanie

text: A więc w przypadku środowiska klastrowego — jak to będzie działać z Twoimi aplikacjami? co z własnymi niestandardowymi aplikacjami .NET? Czy istniałby jakiś specjalny sposób na ich rozwój? Wiem, że można powiedzieć, że można utworzyć prostą aplikację Hello World i klastrować ją, ale nie byłyby one czymś, co można zobaczyć pod względem interfejsu użytkownika lub czegokolwiek, więc faktycznie musiałyby zostać opracowane jako usługa systemu Windows, a może nawet jako standardowa konsola aplikacja, która działa i nie czeka na dane wejściowe użytkownika, ale nie zobaczysz z niej żadnych danych wyjściowych (chyba że przekierujesz dane wyjściowe w inne miejsce) To, do czego zmierzam, to... dla tych, którzy mają doświadczenie lub opracowali aplikację klastrową w .NET, jak czy to zrobiłeś i o czym należy pamiętać? Na przykład mamy usługę w chmurze – zasadniczo zbudowaną na klastrach – w przypadku awarii następuje kolejny węzeł i usługa jest wznawiana normalnie, ale tak naprawdę nie widzimy zbyt wiele tego przestoju.


title: „stan” czy „stan”? Kiedy nazwa zmiennej powinna zawierać słowo „stan”, a kiedy zamiast tego nazwa zmiennej powinna zawierać słowo „stan”?

text: Czytając kod i dyskusje dotyczące kodu, często widzę słowa „stan” i „status” używane zamiennie, ale wydaje się, że istnieją następujące tendencje: * Gdy zmienna posiada wartość, która ma wskazywać, że coś jest w określonym stanie, nazwa tej zmiennej najczęściej zawiera słowo „stan” lub jego skrót. * Jednak gdy wartość zwracana przez funkcję służy do wskazania takiego stanu, zwykle nazywamy tę wartość „kodem stanu”; a gdy ta wartość jest przechowywana w zmiennej, ta zmienna jest powszechnie nazywana „statusem” lub podobnie. W odosobnieniu wszystko jest w porządku, jak sądzę, ale kiedy wyżej wymienione zmienne są w rzeczywistości jednym i tym samym, należy dokonać wyboru obejmującego wypaczone zawiłości języka angielskiego (lub ogólnie języka ludzkiego). Jaki jest dominujący standard kodowania lub konwencja, jeśli chodzi o ujednoznacznienie między nimi? A może zawsze należy unikać jednego z tych dwóch? Przypuszczam, że to pytanie o english.stackexchange jest również istotne.


title: Dominujący członkowie zespołu Scrumowego

text: Co byś zrobił w sytuacji, gdy członek zespołu próbuje przejąć obowiązki nie są początkowo przypisane do niego, ale do Scrum Mastera?


title: Doradztwo w sprawie luźnego sprzężenia między elementami sterującymi użytkownika

text: Mam 5 kontrolek użytkownika na stronie, a każda kontrolka implementuje własny interfejs, który zawiera właściwości i zdarzenia. Aby umożliwić komunikację między kontrolkami użytkownika, tworzę właściwość kontrolki użytkownika docelowego wewnątrz innej kontrolki użytkownika. Dzięki tej właściwości można zmieniać jego stan i rejestrować zdarzenia. Poniżej znajduje się pseudokod kontroli użytkownika wyników. Subskrybuje zdarzenie OnSearch kontroli użytkownika w wyszukiwarce. public interface IResults { //inne pola ISearch SearchControl { get;} } public parts class Wyniki : IResults { //inne fields public ISearch SearchControl { get{ this.Page.Parent.FindControl("UCSearch") as ISearch;} } protected override void Page_Load(object sender, EventArgs e) { this.SearchControl.OnSearch += new EventHandler(testMethod); } } Czy można mieć właściwości referencyjne wewnątrz kontrolek użytkownika, aby subskrybować zdarzenia i manipulować stanem. Czy stwarza to jakiekolwiek problemy z konserwacją w przyszłości. Czy FindControl i rzutowanie typów obniżają wydajność aplikacji.


title: Dlaczego gadatliwość jest zła dla języka programowania?

text: Widziałem wielu ludzi narzekających na gadatliwość w językach programowania. Uważam, że w pewnych granicach im bardziej gadatliwy jest język programowania, tym lepiej jest go zrozumieć. Myślę, że gadatliwość wzmacnia również pisanie bardziej przejrzystych interfejsów API dla tego konkretnego języka. Jedyną wadą, o której mogę pomyśleć, jest to, że sprawia to, że piszesz więcej, ale mam na myśli, że większość ludzi używa IDE, które robią wszystko, co dla ciebie działa. więc, jakie są możliwe wady pełnego języka programowania?


title: Czy równoległe sortowanie działa inaczej na siatce w porównaniu z liniowym układem procesorów?

text: Obecnie jestem na kursie z wprowadzenia do algorytmu i natknąłem się na algorytm równoległego sortowania seryjnego. Moje pytanie brzmi: czy są jakieś różnice w planie algorytmu, jeśli działa on na siatce 2d zamiast nieskończonych procesorów liniowych? Dziękuję Ci,


title: Czy kategorie celu C mogą służyć temu samemu celowi, co cechy w Scali?

text: Sformułowanie pytania wydaje mi się mało abstrakcyjne, dlatego proszę o zapoznanie się z poniższymi szczegółami. Od czasu, gdy C++ był pierwszym wyborem dla języka obiektowego dla prawie wszystkiego, mieliśmy duży problem z dziedziczeniem wielokrotnym w C++, gdy dwie różne implementacje tej samej funkcji zadeklarowane lub zdefiniowane w (abstrakcyjnej lub konkretnej) klasie nadrzędnej tych dwóch, pojawiły się do wspólnej klasy dzieci i stworzyć niejednoznaczność, popularnie zwaną problemem diamentu. C++ dał rozwiązanie: słowo kluczowe "virtual", które ma być używane podczas określania klas nadrzędnych, dzięki czemu tylko jedna kopia trafia do ostatniej klasy potomnej, która jest wybierana w czasie wykonywania, zamiast w czasie kompilacji w oparciu o pewne zasady. Java próbowała rozwiązać ten problem, zapewniając pojedyncze dziedziczenie i całkowicie unikając dziedziczenia wielokrotnego. Ale potem brakowało funkcji, w której na zachowanie klasy może wpłynąć trochę i która może się zmienić w przyszłości lub można do niej dodać więcej zachowań i potrzebowaliśmy sposobu na enkapsulację zachowania, wtedy pojawił się "interfejs" konstruktu, który nie miał nic poza deklaracje metod, które każda klasa implementująca musiała zaimplementować na swój sposób. Protokoły w Celu C to mniej więcej to samo. Jednak takie podejście ma poważną wadę i tutaj pojawia się moje pytanie. Wadą jest to, że klasa ma wiele podklas implementujących ten sam interfejs w ten sam sposób. W każdej klasie musi być napisany ten sam kod. Gdyby to były wszystkie klasy, implementacja mogłaby znajdować się w klasie nadrzędnej, która daje implementację. Maksymalnie można wprowadzić klasę z implementacją wspólnej metody pomiędzy bieżącą klasę nadrzędną i sprawić, by wszystkie te klasy dziedziczyły po niej. Ale może to prowadzić do wielu błędów, jeśli nie zostanie wykonane prawidłowo w złożonym projekcie. Scala dostarcza cechy, które nie tylko służą jako interfejsy, ale mogą dodawać pełne implementacje dla kilku z nich, które można mieszać z niektórymi klasami, które tego wymagają, i usuwać, gdy nie. Nie widziałem składni, ale słyszałem, że Ruby rozwiązuje ten sam problem, używając czegoś, co nazywa się mixinami. W przypadku Objective C mamy protokoły, ale mają one takie same ograniczenia jak interfejsy Java. Więc moje pytanie brzmi: jeśli utworzę kategorię klasy i zaimportuję ją do dowolnej podklasy tej klasy, czy podklasa otrzyma wszystkie te metody implementacji? Również jeśli ją usunę, czy będzie to równoznaczne z usunięciem deklaracji włączenia cechy dla klasy? Mogę się mylić w którymkolwiek z moich powyższych założeń, jestem nowicjuszem, jeśli chodzi o projektowanie OOP (i właśnie zainteresowałem się FP). Doceniłbym również wszelkie lepsze rozwiązania niż to.


title: Przechodzenie przez K&R języka programowania C w Visual Studio

text: Z tego, co przeczytałem, K&R wydaje się być dobrym miejscem do rozpoczęcia nauki programowania w ogóle, a szczególnie programowania w C. Jednak dopiero zacząłem pierwszy rozdział i mam kilka pytań. Mogą być niezwykle proste i przepraszam, jeśli tak jest (w końcu jestem nowy) - ale twoja pomoc w odpowiedzi na nie byłaby bardzo wdzięczna. 1) Rozumiem, że książka została napisana w celu ogólnego opisania języków C. Czy to oznacza, że przykłady, które podają, są tylko przybliżonymi zarysami i że abym sam spróbował ich użyć, muszę „przetłumaczyć” ogólny zarys podany na C++, C# lub cokolwiek innego? Na przykład podręcznik podaje następujący program: #include <stdio.h> main() { printf("Witaj, świecie\n"); } Ale znalazłem program do drukowania "Hello, world" w C#, na przykład: // A Hello World! program w C#. korzystanie z Systemu; namespace HelloWorld { class Hello { static void Main() { Console.WriteLine("Witaj świecie!"); // Pozostaw otwarte okno konsoli w trybie debugowania. Console.WriteLine("Naciśnij dowolny klawisz, aby wyjść."); Konsola.KluczOdczytu(); } } } A program w C++ wygląda inaczej niż oba powyższe... Więc moje pytanie brzmi: czy książka oczekuje, że będę w stanie przetłumaczyć pierwszy program (lub zarys, cokolwiek to jest) na program C# lub C++ - - Używam programu Visual Studio -- aby móc samodzielnie ćwiczyć? 2) Jeśli książka oczekuje, że to zrobię, czy wszyscy macie jakieś wskazówki, jak mogę przetłumaczyć ogólny kod C na C# lub C++. 3) To może być opinia, ale na czym powinienem opierać swoją naukę (i ćwiczyć kodowanie) - C# czy C++?


title: Wiarygodność programu Windows azure Architect firmy Sundblad & Sundblad

text: Planuję wziąć udział w programie Windows Azure Architect od S&S. http://www.windowsazurearchitect.com/ Chociaż witryna podaje, że jest to program szkoleniowy firmy Microsoft, nie jestem pewien, jak bardzo jest wiarygodny i rozpoznawalny. Jeśli ktoś uczestniczył w programie, podziel się również swoją opinią na temat programu.


title: Czy istnieje jakiś przykład lub zasób wyjaśniający/pokazujący kod od wysokiego do niskiego poziomu do głębokiego kodu maszynowego?

text: Szukałem przykładu w Internecie, który pokazuje jakąkolwiek operację, taką jak zapisywanie pliku lub rysowanie czegokolwiek w interfejsie użytkownika lub innego rodzaju, który pokazuje implementację od kodu języka wysokiego poziomu do kodu niskiego poziomu do głębokiego kodu na poziomie maszyny. Podstawowym założeniem jest wyjaśnienie działania komputera w pigułce. Na przykład w języku wysokiego poziomu piszemy `int c= int a + int b`, który jest kompilowany do kodu niskopoziomowego `IL_0001:ldarg.1 IL_0002:ldarg.2 IL_0003:dodaj`, a następnie do kodu maszynowego. Pomocny będzie dowolny przykład lub schemat blokowy kodu od języka wysokiego poziomu do głębokiego kodu maszynowego.


title: Czy memrystory mogą zmienić paradygmaty programowania? W jaki sposób?

text: Pomyśl o trwałym magazynie, który może zachować wskaźniki: między innymi nie ma potrzeby serializacji/deserializacji danych. Na przykład zazwyczaj budujesz strukturę drzewa, a następnie serializujesz ją do XML, aby mogła być przechowywana na stałe na dysku. Teraz nie ma takiej potrzeby: strukturę w pamięci można pozostawić bez zmian, ewentualnie nadać jej nazwę, aby mogła być używana przez inne programy. W ten sposób koncepcje ładowania/oszczędzania mogą zostać przekształcone w coś innego, jeśli nie zostaną całkowicie wyeliminowane. Systemy plików mogą stać się czymś zupełnie innym: m.in. tylko pamięć z symbolicznymi etykietami. Serializacja będzie oczywiście nadal wykorzystywana w komunikacji sieciowej. Poza tym, biorąc pod uwagę izolację procesów, ochronę pamięci itp., powyższy scenariusz może być nieco bardziej skomplikowany. Jedna rzecz jest jednak jasna: duża, trwała adresowalna pamięć masowa może przynajmniej zaoszczędzić dużo czasu, a co najwyżej spowodować zmiany paradygmatu w programowaniu. Byłoby interesujące usłyszeć twoje spostrzeżenia na ten temat.


title: Jaki jest najlepszy sposób radzenia sobie z dużymi skompresowanymi plikami przez FTP?

text: W mojej aplikacji otrzymuję pliki informacji o produkcie z serwera FTP. Są to pliki tekstowe skompresowane do ZIP. Początkowo myślałem, że zdekompresowany plik na serwerze, a następnie odczytanie tekstu przez Internet będzie działać, ale nieskompresowane pliki mają ~900 MB, co czyni go powolnym i nieefektywnym, powodując wyjątki braku pamięci. Jak mam sobie poradzić z tego typu problemem? Czy powinienem pobrać skompresowane pliki, rozpakować je i przetworzyć lokalnie, a następnie ponownie przesłać? A może istnieje inny, skuteczniejszy sposób na zrobienie tego?


title: C#: Jawne definiowanie typów danych zmiennych a użycie słowa kluczowego „var”?

text: Czy w języku C# zachęca się do używania uniwersalnego słowa kluczowego var dla każdej deklaracji zmiennej? Jeśli tak, czy muszę wspomnieć o tych specjalnych znakach dla wartości literałowych w deklaracji zmiennej, takich jak M dla dziesiętnego w następującej instrukcji: var myDecimal = 14,5M; Jeśli to robi różnicę, próbuję zrobić trochę rozwoju sieci web z C#. Dzięki za udostępnienie.


title: Standardowy sposób zezwalania na ogólne dane XML

text: Piszę aplikację do zbierania i raportowania danych, która pobiera pliki XML jako dane wejściowe, które następnie będą odczytywane, przetwarzane i przechowywane w silnie typizowanej bazie danych. Na przykład plik XML dla „Zadania” może wyglądać tak: <Data type="Job"> <ID>12345</ID> <JobName>MyJob</JobName> <StartDate>04/07/2012 10: 45:00</StartDate> <Files> <File name="a.jpeg" path="images\" /> <File name="b.mp3" path="music\mp3\" /> </Files > </Data> Chciałbym użyć schematu, aby mieć standardowy format dla tych plików wejściowych (w zależności od rodzaju używanych danych, na przykład „Zadanie”, „Użytkownik”, „Widok”), ale ja Chciałby również, aby weryfikacja nie zakończyła się niepowodzeniem, jeśli podano dodatkowe dane. Na przykład może zadanie ma dodatkowe właściwości, takie jak „IsAutomated”, „Requester”, „EndDate” i tak dalej. Niespecjalnie obchodzą mnie te dodatkowe właściwości. Jeśli są zawarte w XML, po prostu je zignoruję podczas przetwarzania pliku XML i chciałbym, aby walidacja wykonała to samo, bez konieczności uwzględniania w schemacie każdej możliwej właściwości, którą może dostarczyć klient ja z. Czy istnieje standardowy sposób dostarczenia takiego schematu lub zezwolenia na taki ogólny plik XML, który nadal można zweryfikować bez uciekania się do czegoś tak naiwnego (i potencjalnie trudnego do rozwiązania), jak poniżej? <Data type="Job"> <Data name="ID">12345</Data> . . . <Data name="Files"> <Data name="File"> <Data name="Filename">a.jpeg</Data> <Data name="path">obrazy</Data> . . . </Dane> </Dane>


title: Jak wybrać najbardziej odpowiednie technologie do swojego projektu?

text: Projektując system, często trzeba dobrać odpowiednie technologie do zastosowania w każdym module. Jakie parametry należy wziąć pod uwagę przy wyborze technologii/ram? Jak te parametry mogą wpłynąć na jakość projektu, harmonogram, koszt? Czy ktoś może wyjaśnić szczegółowo.


title: Budujesz kompletny program?

text: Czytanie książek, oglądanie filmów i przeglądanie samouczków jest bardzo łatwe. Robienie notatek i faktyczne uczenie się materiału może być nieco trudniejsze, ale nawet wtedy, każdemu z przyzwoitym mózgiem i sporym zainteresowaniem, jest to dość łatwe (nie wspominając o zabawie). Chodzi o to, że tak naprawdę nie przygotowuje cię do napisania pełnego programu lub strony internetowej. Powiedzmy, że jesteście nastolatkami (tylko w liceum, bez prawdziwych (na poziomie uczelni) kursów informatyki lub programowania, i bez doświadczenia w świecie rzeczywistym) i wychodzicie z Grouponem. Albo nawet Mark Zuckerburg, na pewno był geniuszem i był bardzo zdolnym programistą... ale jak? Jak radzisz, aby ludzie, którzy niekoniecznie są nowicjuszami w programowaniu, ale nowi w programowaniu prawdziwych aplikacji i prawdziwi programiści, zajęli się jego tworzeniem? Czym jest „proces rozwoju” – zwłaszcza dla pojedynczych programistów (a może 2-3 nastolatków)? Ponadto, jeśli chodzi o tworzenie stron internetowych, jaki jest proces? Czy coś takiego jak Facebook lub Groupon zostało napisane we frameworku (jak CodeIgniter lub Zend dla PHP)? A może opracowują własne frameworki? Nie pytam jak wpaść na świetny pomysł, ale jak je skutecznie realizować? Czy ktoś ma radę? Przeczytałem kilka książek zarówno o C, jak i C++ (głównie o języku programowania C i języku programowania C++) i studiowałem informatykę AP (jak również przeczytałem kilka dodatkowych książek o Javie i OOP). Przeczytałem też kilka tutoriali na temat PHP (i CodeIgniter) i Pythona. Ale wciąż chodzę do liceum i technicznie nie jestem jeszcze na tyle dorosła, żeby pracować na stażu jeszcze przez kilka miesięcy.


title: Jak zorganizować proces przeglądu kodu

text: Szukam lekkiego procesu przeglądu kodu. Kilka wymagań, recenzent musi być w stanie wykonać recenzję sam w wybranym przez siebie czasie (nie jest związany z check-inami), recenzent musi być w stanie łatwo znaleźć kod docelowy, recenzja musi pozostawić trochę dokument pokazujący, co zostało poddane przeglądowi. Wiem, że są dostępne narzędzia do przeglądu kodu, ale pracuję w bardzo sztywnym środowisku i wprowadzanie nowych narzędzi nie wchodzi w grę. Jednym z pomysłów, o którym myślałem, jest utworzenie nowego tokenu listy zadań programu Visual Studio o nazwie REVIEW i użycie go do oznaczenia kodu, który wymaga przeglądu. Coś w rodzaju // PRZEGLĄD doe_john: Nowa metoda, nie jestem pewien co do wyjątku. Następnie dodamy element roboczy Review w TFS (używamy szablonu CMM). Inną możliwością, którą wolałbym, byłoby, aby programiści utworzyli element roboczy TFS Review i dodali do niego linki do kodu, ale nie wiem, czy jest to możliwe. Oczywiście możesz dodać link do pliku, ale chciałbym mieć link do konkretnej metody. PS. Opublikowane pierwotnie w StackOverflow.


title: Jakie jest wspólne podejście do baz danych szablonów komponentów?

text: **Mój projekt:** mam pracowników, którzy muszą przejść przez listę kontrolną, gdy napotkają kaczkę, kota i człowieka. W naszej firmie mamy określoną liczbę kaczek, kotów i ludzi, którzy wchodzą i wychodzą z naszych drzwi. Kiedy przyjdą, musimy sprawdzić, czy wszystkie te funkcje są obecne. **Funkcje:** ![przykład](http://i.stack.imgur.com/rYyiV.png) **Oto nasz obecny projekt bazy danych:** ![tu wpisz opis obrazu](http:// /i.stack.imgur.com/v4GP5.png) **Aktualne podejście:** 1. Kiedy zwierzę wchodzi do naszego budynku, otrzymujemy jego identyfikator. 2. Ich identyfikator daje nam ich rekord zwierzęcia. 3. Tworzymy nowy rekord "check_in" dla zwierzęcia 4. Pod rekordem check_in używamy szablonu podanego przez związek animal_type->feature_type * Na przykład: Sam kaczka będzie miała nowy check_in utworzony z osobnymi piórami, skrzydłami , dziób, stopy i wpisy check_in_feature. 5. Przechodzimy przez proces i ustawiamy feature_is_present na true lub false dla każdej z funkcji 6. Po zakończeniu sprawdzamy je i wpis check_in jest kompletny **Moje pytanie:** W praktyce ten schemat relacyjny jest bardzo trudny pracować z. Używamy go od lat i jesteśmy stale spowalniani podczas wyszukiwania informacji z powodu dziwnych połączeń, których ten projekt wymaga. Nie mam wątpliwości, że jest to znany problem z bardziej eleganckim rozwiązaniem niż stosowanie tego naiwnego podejścia. Czy ktoś zna lepszy sposób na uporządkowanie tego lub lepsze podejście, które będzie łatwiejsze i wydajniejsze w pracy? EDYCJA: Właśnie zdałem sobie sprawę, że w sekcjach właściwości nawigacji znajdują się artefakty z naszego rzeczywistego systemu, po prostu je zignoruj. Nie chcę odtwarzać obrazów, jeśli mogę tego uniknąć


title: Które książki są dobrymi zasobami do projektowania interfejsów API

text: Szukam książki o tym, jak zaprojektować API usług internetowych. Jestem ograniczony do korzystania z usług sieci Web w stylu RPC. W szczególności szukam wskazówek na temat * [równowagi...] **granularne** _vs_ **usługi kursów** * **wymagane parametry** _vs_ **parametry opcjonalne** * **małe usługi czatu* * _vs_ **usługi z dużymi ładunkami** Zastanawiam się również nad strategiami tworzenia danych referencyjnych i buforowania po stronie konsumenta. Pomocne są nawet takie rzeczy, jak ustalenie racjonalnej konwencji nazewnictwa. Które książki są dobrymi zasobami do projektowania internetowego interfejsu API, który odpowiada na te pytania?