title: Obliczone wartości i proste odczyty — dokuczliwy ból dla moich projektów opartych na domenie!

text: Problem, z którym stale się borykam, polega na tym, jak radzić sobie z obliczonymi wartościami opartymi na logice domeny, a jednocześnie wydajnie pracować z magazynem danych. Przykład: Zwracam listę Produktów z mojego repozytorium za pośrednictwem usługi. Ta lista jest ograniczona informacjami o paginacji z żądania DTO wysłanego przez klienta. Ponadto DTO określa parametr sortowania (wyliczenie przyjazne dla klienta). W prostym scenariuszu wszystko działa świetnie: usługa wysyła do repozytorium wyrażenia stronicowania i sortowania, a repozytorium wysyła wydajne zapytanie do bazy danych. Wszystko to jednak się psuje, gdy muszę sortować wartości wygenerowane w pamięci z mojego modelu domeny. Na przykład klasa Product ma metodę IsExpired(), która zwraca wartość logiczną opartą na logice biznesowej. Teraz nie mogę sortować i stronicować na poziomie repozytorium -- wszystko zostałoby zrobione w pamięci (nieefektywne), a moja usługa musiałaby znać zawiłości, kiedy przekazać te parametry do repozytorium, a kiedy wykonać sortowanie/stronicowanie samo. Jedynym wzorcem, który wydaje mi się sensowny, jest przechowywanie stanu encji w bazie danych (ustaw IsExpired() pole tylko do odczytu i zaktualizuj je za pomocą logiki domeny przed zapisaniem). Jeśli rozdzielę tę logikę na osobne repozytorium "odczytaj model/dto" i "raportowanie", robię mój model bardziej anemiczny niż bym chciał. BTW, każdy przykład, jaki widziałem dla takich obliczeń, naprawdę wydaje się opierać na przetwarzaniu w pamięci i ukrywaniu faktu, że jest znacznie mniej wydajny na dłuższą metę. Może przedwcześnie optymalizuję, ale to mi nie pasuje. Chciałbym usłyszeć, jak inni sobie z tym poradzili, ponieważ jestem pewien, że jest to powszechne w prawie projektach z udziałem DDD.


title: Interfejs sieciowy z FastCGI czy bezpośrednim HTTP?

text: Załóżmy, że chcę (na początku dla zabawy) pobawić się jakimś nowym pomysłem na DSL (język specyficzny dla domeny). I naprawdę chcę, aby jego użytkownicy (prawdopodobnie tylko ja na początku) wchodzili w interakcję przez interfejs sieciowy. Prawdopodobnie zaimplementuję to w C++ (prawdopodobnie przy użyciu LLVM). Czy powinienem używać biblioteki serwera HTTP (takiej jak libonion lub microhttpd), aby rozmawiać bezpośrednio z HTTP, czy powinienem używać FastCGI? Mógłbym również użyć bibliotek wykonujących zarówno cppcms, jak i wt... W szczególności zauważam, że kilka ostatnich frameworków internetowych (Opa, Ocsigen, ...) nie ma żadnego interfejsu FastCGI, a tylko jeden HTTP .... (ale Wygląda na to, że Ur/Web ma jedno i drugie) Więc mam wrażenie, że FastCGI naprawdę wyszedł z mody... Jakieś opinie na ten temat? Czy znasz ostatnio rozpoczęty projekt używający FastCGI? (a co z SCGI?)


title: Czy istnieje lepszy sposób obsługi logiki kontroli dostępu zamiast korzystania z interfejsu użytkownika?

text: Przez większość mojego doświadczenia deweloperskiego nigdy nie miałem do czynienia z dużą różnorodnością architektur kontroli dostępu. Wszystkie były całkiem proste: Grupa [Utwórz, Aktualizuj, Usuń] - Użytkownik 1 - Użytkownik 2 Grupa [Aktualizacja, Usuń] - Użytkownik 2 Co, pod każdym względem, działa dobrze. Problem, jaki mam, to faktyczna jego realizacja. Wszystkie rozwiązania, nad którymi pracowałem, albo przyznają/odmawiają widoczności linku menu, albo wyłączają przycisk itp. Wszystko to jest kontrolowane przez najwyższą warstwę aplikacji, niezależnie od tego, czy jest to interfejs użytkownika WebApp, czy WinForms. Jestem na wczesnym etapie projektowania dość dużego systemu WinForms, więc od samego początku chciałbym uzyskać architekturę bezpieczeństwa. Chociaż nie wyobrażam sobie, żebym odchodził od wizualnego ograniczania użytkownikowi wykonywania pewnych czynności (poprzez wyłączenie ograniczonych kontroli itp.), jestem pewien, że dostępne są lepsze rozwiązania niż wykonywanie większości pracy w interfejsie użytkownika. Jak rozumiem (a te mogą być ograniczone moją ignorancją), oto moje opcje: * Umieść logikę, aby zwrócić i zweryfikować prawa użytkownika w warstwie biznesowej * W zdarzeniu form_load pobierz te reguły i włącz/wyłącz elementy interfejsu użytkownika * Pozostaw elementy UI bez zmian i zatrzymaj operację z poziomu warstwy biznesowej, jeśli użytkownik nie ma uprawnień do akcji (brudne!) Z pewnością muszą istnieć bardziej eleganckie rozwiązania niż to. Czy ktoś mógłby mi podać alternatywy lub ulepszenia wyżej wymienionych pomysłów? Czy myślę o tym niepoprawnie? Czy powinienem ponownie ocenić projekt mojej bazy danych, gdy jestem przy tym?


title: Czy pozostanie na tym stanowisku wpłynie negatywnie na moją karierę?

text: Pracuję w małej firmie programistycznej, której właścicielami są również menedżerowie. Obawiam się, że wszelki postęp technologiczny spotyka się z całkowitą pogardą ze strony kierownictwa. Niektóre z komentarzy są następujące: * LINQ, nHibernate i ORM to zła praktyka programistyczna, nigdy ich nie użyjemy. * Większość dużych aplikacji jest nadal napisana w VB6. * Sieć to tylko strata czasu, nie jest przeznaczona do zastosowań. Za każdym razem, gdy wypuszczana jest nowa wersja oprogramowania deweloperskiego, muszę godzinami wysłuchiwać narzekań kierownictwa. Technologie takie jak WPF, WCF, MVC i Entity są całkowicie ignorowane. Wszystko to powiedziawszy, nie jest to okropne miejsce do pracy, płaca jest średnia i jest blisko domu. Obawiam się, że chociaż technicznie korzystamy z najnowszej wersji .NET, prawie nie korzystamy z najnowszych technologii, równie dobrze możemy używać .NET 1. Jeśli zdecyduję się na przeprowadzkę, czy to „doświadczenie” ograniczy moją karierę mądry? Jestem tu już od kilku lat. EDIT: Jestem naprawdę wdzięczny za znakomitą odpowiedź. Szczerze myślę, że zrobienie ruchu może być w moim własnym interesie.


title: Wiele możliwych widoków jsp dla żądania

text: Chcę zaoferować użytkownikowi sposób na zmianę wyglądu pojedynczej strony w oparciu o wstępnie zdefiniowane pliki jsps. tzn. co najmniej dwa pliki JSP zawierają podobne informacje i są wspierane przez metodę jednego kontrolera. Kontroler zdecyduje, który widok zwrócić. 1. Czy istnieje wspólny sposób na osiągnięcie tego? W tej chwili mam kilka ekranów administracyjnych, na których kontroluję listę możliwych widoków. Użytkownik może następnie wybrać, który z nich chce zobaczyć z listy rozwijanej. Moim obecnym problemem jest to, że nie wiem, jak potwierdzić (na ekranie administratora), czy widok jest prawidłowy. 2. Czy istnieje sposób, aby poprosić wiosnę o wszystkie możliwe widoki, abym mógł je filtrować i ponownie wysłać listę rozwijaną na ekranie administratora zamiast wolnego pola tekstowego? Jeśli nie, to czy można zapytać wiosnę, czy jeden pogląd jest słuszny? Wszystkie te widoki będą znajdować się we wspólnym katalogu, więc prawdopodobnie byłoby możliwe skanowanie rekurencyjne od tego miejsca i zbudowanie listy możliwych widoków. Wykracza to poza zwykłą zmianę CSS, ponieważ zawartość strony może być inna, mimo że jest wspierana przez ten sam model.


title: Książki i opowiadania o kulturze programowania, szczególnie w latach 80./początku 90.

text: Spodobało mi się wiele książek (beletrystycznych i non-fiction) o kulturze hakerskiej i prowadzeniu firmy programistycznej w latach 80-tych i 90-tych. Z jakiegoś powodu wtedy wszystko wydawało się o wiele bardziej ekscytujące. Przykładami są: * Microserfs (Douglas Coupland) * Przypadkowe imperia (Robert X. Cringely * Prawie doskonały (W.E. Peterson, online!) * Koderzy w pracy (Peter Seibel) Dziś jestem przedsiębiorcą i programistą. Byłem młodym geekiem hackującym DOS TSR i kodującym GWBasic / QBasic.W latach 90. byłem studentem CS, doświadczałem rozkwitu Internetu na całym świecie.Kiedy czytanie tych książek prowadzenie biznesu oprogramowania wydawało mi się o wiele przyjemniejsze niż obecnie. Kiedyś rzeczy były o wiele prostsze, możliwości wydawały się być wszędzie, a start-upy wydawały się pracować z dużo bardziej realnymi problemami (wynajdywanie arkuszy kalkulacyjnych, pisanie edytorów tekstu w asemblerze na 6 różnych platformach) niż wszystkie nasze obecne zabawki społecznościowe web 2.0. podzielasz te uczucia? Czy ktoś ma jakieś dobre (osobiste) historie z tamtych czasów lub zna inne dobre książki do przeczytania?


title: Modyfikacja kodu źródłowego i zgodność z GPLv3

text: Załóżmy, że plik źródłowy A zawiera następującą informację licencyjną: „Ten kod jest objęty prawami autorskimi 1234 autorstwa XYZ. Może być swobodnie rozpowszechniany w całości pod warunkiem, że ta uwaga o prawach autorskich nie zostanie usunięta”. Czy mogę połączyć go z projektem B opublikowanym na licencji GPL w wersji 3? W szczególności, czy zabrania tego brak pozwolenia na modyfikację pliku źródłowego A („redystrybuowanego w całości”)?


title: Czy istnieje dobry powód, aby nie wyświetlać użytkownikom komunikatów o błędach?

text: Wygląda na to, że system Windows 8 zdecydował się na ciche zamykanie aplikacji, które źle się zachowują, nie ma komunikatu informującego użytkownika, że stało się coś złego, ani informacji o tym, dlaczego aplikacja została zamknięta. Słyszałem pocztą pantoflową, że pracownicy Microsoft są zmęczeni klientami obwiniającymi ich o awarie i że wierzą, że wyświetlając błąd użytkownikowi, użytkownik oskarży Microsoft o awarię, a nie programistę aplikacji. Niezależnie od tego, czy to prawda, czy nie, czy wyświetlanie komunikatów o błędach nie jest dobrym pomysłem? Myślałem, że komunikaty o błędach przynajmniej dają użytkownikom coś do wykorzystania, gdy szukają pomocy w Internecie lub rozmawiają z obsługą klienta. Jaki jest możliwy dobry powód cichego zawieszania się i niewyświetlania komunikatu o błędzie?


title: Korzystanie z niezmodyfikowanej biblioteki AGPLv3 lib - czy ja też jestem AGPL?

text: Czytałem więc AGPL i oto moje zrozumienie (nie jestem prawnikiem i nie staram się patrzeć na to przez pryzmat „Ponieważ CHCĘ, żeby to było „wolne”, dlatego tak jest. ". W moim przypadku rozważam użycie itext, biblioteki AGPL, do złamania otwartych plików PDF i wyodrębnienia tekstu - to wszystko. Będzie wewnętrzna aplikacja komputerowa i zaproponowałem użycie mojego kodu do ekstrakcji (który używa itext dll) w witrynie, aby przyspieszyć ten proces dla osób na górze, które od lat robią to ręcznie. Zgodnie z definicjami: * „program” oznacza bibliotekę itext, będącą dziełem chronionym prawem autorskim. * „modyfikuj” lub „ na podstawie” oznacza wersję programu, która różni się od oryginału. Nie dotyczy, ponieważ nie modyfikuję kodu. * „dzieło objęte” oznacza oryginalną lub zmodyfikowaną wersję oryginalnego dzieła. W moim przypadku byłoby to oryginalna praca. * "propaguj" i "przekaż" oznaczają kopiowanie lub rozpowszechnianie programu (biblioteka itext, w moim przypadku skompilowana jako dll), w wh Ich przypadku, jak rozumiem, należy udostępnić źródło opisywanego utworu. Nie dotyczy to używania w firmach (ponieważ firma może wymagać od pracowników, aby nie kopiowali i nie rozpowszechniali oprogramowania). Jednak użycie w sieciach publicznych może być rozważane na sekundę13, chociaż użytkownicy sieci nie będą wchodzić w interakcje z samym programem ani z jego wynikami. * „interaktywny interfejs użytkownika”... do tej pory nie widziałem żadnego w bibliotece, ale jest to prawdopodobnie najmniej jasne z definicji, ponieważ wspomina o „pracy”, a biblioteki (w tym przypadku praca) generalnie nie t interakcji z użytkownikami. Jeśli potrzebuję, mogę gdzieś zamieścić wzmiankę, nie ma sprawy. Tak więc, zgodnie z moją interpretacją definicji, opisana praca jest kodem itext, którego używam. Kod, który piszę osobno, nie jest oparty ani modyfikowany na kodzie itext, a zatem może być licencjonowany w dowolny sposób, w tym mocno go blokować lub publikować otwarcie na moim ulubionym forum. Dopóki nie modyfikuję ani nie włączam kodu AGPL chronionego prawem autorskim bezpośrednio do mojego kodu, nic nie widzę w tej licencji, co uniemożliwiłoby mi połączenie z oryginalną wersją, którą pobrałem. Być może będę musiał jedynie podać źródło wersji opisywanej pracy. Więc odłóżmy emocje na bok i skupienie się wyłącznie na legalności, co powiecie? Myślę, że z FAQ FSF jasno wynika, że wewnętrzne użycie korporacyjne oznacza, że mogę robić prawie wszystko, co mi się podoba, i żadne źródło nie musi być rozpowszechniane poza organizację. Moim jedynym problemem jest stworzenie aplikacji internetowej, która z kolei wykonuje połączenia do biblioteki itext. Co muszę w tym przypadku zrobić? Uważam, że wystarczy podać link lub lokalizację, aby pobrać kod itext. Inna opcja, co by było, gdybym stworzył mały, osobny, samodzielny program i strona internetowa wywoływała go za pomocą standardowego mechanizmu „uruchamiania”? Reszta istniejącej strony internetowej nie powinna nagle podlegać AGPL, nawet jeśli moja część ekstraktora tekstu tak, prawda?


title: zobacz co robi ARC?

text: Jeśli dobrze rozumiem, wszystko, co robi ARC, to automatyczne dodawanie instrukcji zarządzania pamięcią, takich jak `retain` i `autorelease` w odpowiednich miejscach w programie. Czy istnieje sposób, aby zobaczyć wszystkie instrukcje zarządzania pamięcią, które ARC automatycznie dodaje do programu?


title: Jedna baza kodu - wiele usług hostowanych (podobnie jak usługa w stylu basecamp) - struktura planowania

text: Zbudowaliśmy usługę (opartą na PHP) dla klienta i teraz zamierzamy zaoferować ją innym klientom jako usługę hostowaną. W tym przykładzie pomyśl o tym jak o hostowanej usłudze forum, w której klient rejestruje się w naszej witrynie i otrzymuje subdomenę lub może korzystać z własnej domeny, a kod pobiera domenę i porównuje ją z użytkownikami „master” tabeli, a następnie w razie potrzeby ładuje zawartość. Staram się wypracować najlepszy sposób obsługi wielu klientów. W tej chwili myślę tylko o dwóch opcjach, które by zadziałały: * **Opcja 1** - Mieć 1 zestaw tabel w bazie danych, ale na każdej tabeli mieć kolumnę o nazwie 'siteid' - oznaczałoby to, że każde zapytanie musi sprawdzać Identyfikator witryny. To skutecznie działałoby tylko z 1 bazą kodu i 1 bazą danych. * **Opcja 2** – Posiadaj jedną główną bazę danych ze wszystkimi podstawowymi danymi, takimi jak dane klienta i jego domena. Następnie, gdy system sprawdza domenę, pobiera szczegóły bazy danych klientów (nazwa użytkownika/hasło/nazwa bazy danych) z tabeli i ładuje drugą bazę danych. Problemem jest tutaj bezpieczeństwo szczegółów serwera mysql, jednak ma to tę zaletę, że uruchamiają własną bazę danych zamiast ją udostępniać. Którą opcję lepiej bym tutaj wybrał i dlaczego? Idealnie chciałbym, aby przekonwertowanie „samodzielnego” skryptu na „wielodomenowy” był dość łatwy, ponieważ mamy napięty termin.


title: Refaktoryzacja działającego systemu, który jest ściśle powiązany z niewłaściwymi modelami danych i logiką biznesową we front-endzie

text: # Scenariusz To był projekt, który kiedyś musiałem prowadzić. Po przeczytaniu _Working Effectively with Legacy Code_ zacząłem zastanawiać się, jak zrefaktoryzować ten system w środowisku na żywo, _gdybym musiał (na szczęście nie zrobiłem tego)._ System był przestarzałym systemem bez dokumentacji i bardzo ściśle powiązanym. Relacje bazy danych były nieprawidłowo modelowane — tj. obiekty, które miały być typu „wiele do jednego”, były mapowane jako jeden do jednego. Użycie „duplikacji” umożliwiło tworzenie relacji „pseudo-wielu-do-jednego”. Logika biznesowa była przechowywana jako JavaScript wyłącznie na froncie. Dane były ściśle powiązane z danymi prezentacji. Na przykład obiekt Pytanie nie mógłby istnieć bez obiektu komórki tabeli. Baza danych miała wywołanie tabeli „TableCell” do przechowywania wbudowanego CSS dla każdej komórki, która została zmapowana jeden do jednego z obiektem „Pytanie”. System był straszliwym bałaganem i ostatecznie doprowadził do utraty danych i całkowitego przepisania w końcu. Łącznie projekt liczył około 350 tys. LOC. Na marginesie, powodem, dla którego system został napisany od nowa (lub wymagał refaktoryzacji) było to, że miał być udostępniony w Internecie, ale byliśmy w stanie zmodyfikować logikę biznesową za pomocą Debugera Chrome, aby podnieść role, wstrzyknąć kod, i wykonywać wszelkiego rodzaju niepożądane funkcje. ## Pytanie W książce wykorzystano przykłady, w których logika została umieszczona na środkowym poziomie. Co się jednak stanie, gdy logika biznesowa zostanie umieszczona we front-endzie? Z mojego punktu widzenia proces refaktoryzacji musiałby przebiegać w ten sposób: 1. Refaktoryzuj front-end JavaScript, aby zrozumieć logikę biznesową 2. Refaktoryzuj warstwę środkową, aby uwzględnić walidację 3. Refaktoryzuj bazę danych, aby oddzielić modele danych 4. Przeprowadź migrację danych 5. Refaktoryzuj warstwę środkową, aby rozdzielić modele danych 6. Refaktoryzuj front-end, aby odzwierciedlić zmiany w modelach danych. Czytałem Techniki ponownego rozkładu śmieci i utrzymania zdrowego rozsądku? i jest to pomocne, ale nie dotyczy kolejności, w jakiej powinna nastąpić refaktoryzacja dla tego konkretnego scenariusza. Wydaje się, że ten proces dodaje dużo nadmiarowości, ponieważ front-end i warstwa środkowa są dwukrotnie refaktoryzowane w systemie live. * Jaki jest bardziej wydajny sposób na refaktoryzację takiego systemu przy jednoczesnym utrzymaniu go w działaniu?


title: Obsługa wielu typów pakietów w Javie 8

text: Mam implementację serwera gier opartą na Netty, która obsługuje 40 lub więcej odrębnych pakietów z własną strukturą serializacji, dla zwięzłości będę nazywać je `FooPacket`, `BarPacket`, ... Te typy pakietów zostały przypisane kolejno po sobie numerycznie „typy pakietów”, które są bajtami bez znaku. Na przykład `FooPacket` jest typu 0x01, `BarPacket` jest typu 0x02, itd... Wszystkie te pakiety rozszerzają klasę abstrakcyjną `MyGameNetworkPacket`. Moje obecne podejście do Netty polega na użyciu początkowej warstwy dekodowania do konwersji strumienia TCP na serię nieprzeanalizowanych obiektów pakietów, które są zdefiniowane jako składające się z typu pakietu, długości i bufora zawierającego rzeczywistą zawartość pakietu. (nie jest wykonywane wypełnianie bajtów). Następnie przesyłam ten pakiet w dół potoku do jednego z kilku "procesorów deserializacji", z których każdy obsługuje zestaw typów pakietów, które są ze sobą semantycznie powiązane (na przykład jeden taki procesor może obsługiwać komunikaty o stanie połączenia, podczas gdy inny może obsługiwać pakiety związane z pewnym aspektem samej gry). Zgodnie z projektem użycia MessageToMessageDecoder firmy Netty, mój dekoder jest zaimplementowany jako: protected void decode (ChannelHandlerContext ctx, UnparsedPacket msg, List<Object> out) wyrzuca wyjątek { switch (msg.command) { case FooPacket.COMMAND_ID: FooPacket fooPacket = new FooPacket (wiadomość.ramka); out.add(fooPacket); przerwanie; case BarPacket.COMMAND_ID: BarPacket barPacket = nowy BarPacket(msg.frame); out.add(barPacket); przerwanie; } } Po ustaleniu struktury, mogę ją łatwo utworzyć za pomocą generatora kodu. Dodatkowo nadpisuję opcję `public boolean acceptInboundMessage(Object)`, aby określić, czy ten dekoder powinien obsługiwać nieprzeanalizowany pakiet. Osiąga to trochę tego, co wydaje się być dla mnie zapachem kodu, więc szukałem alternatywnych rozwiązań, takich jak: * Posiadanie tablicy, której (klucze całkowite) mapują się na wartości lambdy, która pobiera RawPacket i zwraca przeanalizowany pakiet. Wydaje się, że jest to nieco dziwny sposób użycia tablicy i wymaga ręcznego utrzymania definicji tej tablicy, tak aby jej mapowanie elementów indeksu dokładnie odpowiadało rzeczywistemu typowi pakietu do mapowania struktury pakietów, które jest już używane. * Posiadanie struktury mapy, która robi to samo, co tablica. Podobne pułapki, ale nieco łatwiejsze do utrzymania. Czy są to bardziej nowatorskie sposoby podejścia do tego, o których jeszcze nie pomyślałem?


title: Jak utworzyć test jednostkowy wydajności aplikacji?

text: To, czego chcę, to automatyczne uruchamianie metod do testowania wydajności aplikacji. Podobnie jak testy jednostkowe, ale w celu oceny wydajności i tworzenia raportów, jeśli to możliwe. Czy są jakieś ramy lub narzędzia, aby to osiągnąć?


title: Korzystanie z pliku Mockito.reset

text: Właśnie przeczytałem wiele argumentów przeciwko używaniu `Mockito.reset` i nie mam z tego większego sensu. Innymi słowy, ogólnie się zgadzam, ale zawsze jest przypadek, w którym użycie `resetu` jest przydatne lub wręcz konieczne. Rażąco uproszczona, moja testowana klasa jest hermetyzowaną mapą, taką jak class Handler { private final Map<String, String> map; public void handle(RequestResponse rr) { if (rr.isPut()) { map.put(rr.key(), rr.value()); rr.response("OK"); } else { rr.response(map.get(rr.key()); } } } Aby to przetestować, wyśmiewam `RequestResponse` i robię coś takiego jak when(rr.isPut()).thenReturn(true); when( rr.key()).thenReturn("klucz"); when(rr.value()).thenReturn("wartość"); handler.handle(rr); Verify(rr).response("OK"); reset (rr); when(rr.isPut()).thenReturn(false); when(rr.key()).thenReturn("klucz"); handler.handle(rr); Verify(rr).response("wartość "); reset(rr); when(rr.isPut()).thenReturn(false); when(rr.key()).thenReturn("innyKlucz"); handler.handle(rr);weryfikuj(rr). response(null);Widzę, że testuję trzy rzeczy na raz: * właściwa odpowiedź po "put" * właściwa wartość zwrócona z get z tym samym kluczem * `null` zwrócona z get z innym kluczem Potrafię sobie wyobrazić powody do oddzielić dwa ostatnie testy. Jednak oba potrzebują pierwszego, a ja nadal potrzebuję „resetu” pomiędzy? Czy nie? ### Update In th W międzyczasie testowana klasa stała się nieco bardziej skomplikowana i potrzeba `resetu` większa. Jest to rodzaj maszyny stanów, a test wygląda tak: * powtórz następujące kroki w różnych ścieżkach * spróbuj niedozwolonego kroku i oczekuj wyjątku * spróbuj innego niedozwolonego kroku i oczekuj wyjątku * wykonaj prawidłowy krok i sprawdź dane wyjściowe Potrzebuję tylko dwóch metod , jeden weryfikuje wyjątek dla nielegalnego kroku, a drugi weryfikuje poprawność danych wyjściowych dla legalnego kroku. Wykonywanie niedozwolonego kroku nie może zmienić stanu, więc można go bezpiecznie pomieszać. Rozważmy ten przykład: Jeśli jedyną poprawną sekwencją wejściową było „A, B, C” (trzy kroki), a odpowiednimi wyjściami były „a, b , c`, to test wygląda tak: checkException("B") checkException("C") checkOutput("A", "a") checkException("A") checkException("C") checkOutput("B", " b") checkException("A") checkException("B") checkOutput("C", "c") checkException("A") checkException("B") checkException("C") przechodzi przez całą ścieżkę i weryfikuje wszystko. Osiągnięcie tego samego wymagałoby wielu „normalnych” testów weryfikujących jeden warunek, prawda?


title: Podstawowe pytanie z operatorem logicznym

text: #include <stdio.h> int main() { int k=5; if(++k < 5 && k++ / 5 || ++k <= 8) { printf("%d",k); } zwróć 0; } Dlaczego na wyjściu jest 7, a nie 8?(Jestem początkującym programistą, więc proszę o wyrozumiałość.)


title: Prosta metoda niezawodnego wykrywania kodu w tekście?

text: Gmail ma tę funkcję, dzięki której ostrzeże Cię, jeśli spróbujesz wysłać wiadomość e-mail, że _uważa_, że może mieć załącznik. ![Czy chodziło Ci o załączenie plików?](http://i.stack.imgur.com/sHTG9.png) Ponieważ GMail wykrył ciąg `zobacz załączony` w wiadomości e-mail, ale bez faktycznego załącznika, ostrzega mnie okno dialogowe OK / Anuluj po kliknięciu przycisku Wyślij. Mamy podobny problem na Stack Overflow. To znaczy, gdy użytkownik wprowadzi post taki jak ten: moim problemem jest zmiana bazy danych, ale nie chcę tworzyć nowego połączenia. przykład: DataSet dsMasterInfo = new DataSet(); Baza danych db = DatabaseFactory.CreateDatabase("Ciąg połączenia"); DbCommand dbCommand = db.GetStoredProcCommand("uspGetMasterName"); **Ten użytkownik nie sformatował swojego kodu jako _code!_** Oznacza to, że nie wykonał wcięcia o 4 spacje na Markdown ani nie użył przycisku kodu (lub skrótu klawiaturowego `ctrl`+`k`), który to robi dla nich. W ten sposób nasz system gromadzi wiele zmian, w których ludzie muszą ręcznie sformatować kod dla osób, które w jakiś sposób nie są w stanie tego rozgryźć. Prowadzi to do wielu bólów brzucha. Kilkakrotnie ulepszyliśmy pomoc w edytorze, ale po dojechaniu do domu użytkownika i naciśnięciu odpowiednich przycisków na klawiaturze nie wiemy, co dalej. Dlatego rozważamy ostrzeżenie w stylu Google Gmail: > Czy chodziło Ci o wysłanie kodu? > > Napisałeś rzeczy, które naszym zdaniem wyglądają jak kod, ale nie sformatowałeś ich jako > kodu przez wcięcie 4 spacji, używając przycisku kodu na pasku narzędzi lub polecenia formatowania kodu `ctrl`+`k` > kodu. Jednak przedstawienie tego ostrzeżenia wymaga od nas **wykrycia obecności w pytaniu tego, co uważamy za niesformatowany kod**. Jaki jest prosty, częściowo niezawodny sposób na zrobienie tego? * Na przecenę kod jest zawsze wcięty o 4 spacje lub w obrębie znaków wstecznych, więc wszystko, co jest poprawnie sformatowane, może zostać natychmiast odrzucone z czeku. * To jest tylko _ostrzeżenie_ i dotyczy tylko użytkowników o niskiej reputacji zadających swoje pierwsze pytania (lub udzielających pierwszych odpowiedzi), więc niektóre fałszywe alarmy są w porządku, o ile ich wartość wynosi około 5% lub mniej. * Pytania dotyczące Stack Overflow mogą być w _dowolnym_ języku, chociaż możemy realistycznie ograniczyć nasze sprawdzanie do, powiedzmy, „wielkiej dziesiątki” języków. Na stronie tagów, która byłaby C#, Java, PHP, JavaScript, Objective-C, C, C++, Python, Ruby. * Użyj zrzutu danych Creative Commons Stack Overflow, aby sprawdzić swoje potencjalne rozwiązanie (lub po prostu wybierz kilka pytań z 10 najpopularniejszych tagów w Stack Overflow) i zobacz, jak to działa. * Pseudokod jest w porządku, ale używamy c#, jeśli chcesz być wyjątkowo przyjazny. * Im prostsze, tym lepiej (o ile działa). POCAŁUNEK! Jeśli Twoje rozwiązanie wymaga od nas próby kompilacji postów w 10 różnych kompilatorach lub armii ludzi do ręcznego uczenia silnika wnioskowania bayesowskiego, to… nie do końca o to nam chodziło.


title: Problem licencyjny dla algorytmów RSA i Rijndael

text: Używam .Net do budowy komercyjnej aplikacji, czyli bezpiecznej aplikacji do czatu. Ta aplikacja korzysta z algorytmów RSA i Rijndael. Czy potrzebujemy licencji na używanie algorytmów RSA i Rijndael w produkcie komercyjnym?


title: Jak projektujesz kod?

text: Mimo że pracuję jako programista, nigdy nie byłem na niego szkolony. Wszystko, co wiem, jest samoukiem. W ramach mojego ciągłego procesu samodoskonalenia chcę rozwijać lepsze nawyki/techniki. Zastanawiam się, jak większość z was projektuje swój kod, zanim faktycznie zaczniecie kodować? W tej chwili piszę pusty program z komentarzami wszystkich moich metod i zmiennych oraz pseudokodem zamiast bloków logicznych. Czy macie inne sztuczki/techniki, którymi możecie się podzielić? Obecnie większość mojej pracy dotyczy programowania JavaScript po stronie klienta, ale oczywiście te techniki powinny być globalne.


title: Przejście na kierowanie zespołem

text: Szukam przykładów doświadczeń osób, które przeszły od programisty do lidera zespołu. Chciałbym poznać powody, dla których ludzie to zrobili. W szczególności są to pytania i obawy, które krążą w mojej głowie. * Czy miałeś zanikającą chęć pisania kodu, ale wciąż silną chęć tworzenia programów? * Czy zdajesz sobie sprawę, że jesteś bardziej człowiekiem i mógłbyś lepiej wykorzystać swoje umiejętności komunikacyjne? * Czy to dlatego, że zostałeś poproszony przez kierownictwo i pomyślałeś, dlaczego nie? * Za pieniądze? * Jak wyglądały pierwsze kilka miesięcy po przeprowadzce? * Czy wpłynęło to na relacje z kolegami?


title: OSS - Wtyczki GPL v3 w kodzie innym niż copyleft.

text: Pracuję nad oprogramowaniem do modyfikacji plików zasobów gry i planuję wydać je w otwartym kodzie źródłowym. Nie mam nic przeciwko wypuszczaniu mojego kodu pod gpl v3. Obawiam się jednak, że zniechęciłoby to innych do pisania rozszerzeń do mojego oprogramowania, ponieważ inni proponowali to - społeczność, z którą pracuję, bardzo boi się pijawek open source, a w rezultacie większość popularnych wydanych projektów to zamknięte źródła. W związku z tym czułbym się bardziej komfortowo z czymś takim jak BSD lub MIT. Baza kodu jest niezwykle modułowa, a jedno okno może składać się z produktów końcowych wielu różnych wtyczek. Jedna wtyczka, z którą pracuję, to praca (na licencji gpl v3) osoby, z którą się komunikowałem, która była entuzjastycznie nastawiona do korzystania z jego oprogramowania. Ponieważ jedna inna osoba przyczyniła się do powstania tego oprogramowania, nie sądzę, że może po prostu udostępnić mi swoje źródło na innej licencji. W przyszłości chciałbym mieć więcej wtyczek do różnych rzeczy, które byłyby trudne do ręcznego zaimplementowania (ponieważ wymagałoby to dużej ilości inżynierii wstecznej). Tl;dr: Ponieważ jestem w dobrych stosunkach z tymi ludźmi, czy jest jakiś sposób, abym mógł używać ich kodu jako wtyczek? Miałbym pozwolenie, ale problemem byłoby licencjonowanie, ponieważ inni wnieśli swój wkład do baz kodu. Jeśli tak, czy byłoby w porządku, gdybym rozpowszechniał ich wtyczki z moim zbudowanym oprogramowaniem (w folderze wtyczek)? Co powiesz na umieszczenie ich w repozytorium kodu i rozwiązaniu Visual Studio? Wszelkie inne porady byłyby mile widziane. Dziękuję!


title: Ciągła poprawa wyników zespołu

text: Posiadam własną firmę zajmującą się serwisem oprogramowania DIGICORP i kieruję zespołem 10 programistów. Całkowita wielkość firmy to około 50 osób. Jesteśmy czwórką przyjaciół, którzy rozpoczęli to przedsięwzięcie od 2004 roku. W zeszłym roku przeczytaliśmy książki Getting Real i Rework od założycieli 37signals. Uważnie śledziliśmy to, co zrobił Zappos, zaczęliśmy bardziej koncentrować się na dostarczaniu wysokiej jakości usług i budowaniu wspaniałego środowiska w firmie. To bardzo się zmieniło w sposobie, w jaki prowadziliśmy interesy. Udało nam się zbudować przyjazną kulturę. Dbamy również o to, aby zespół nie miał problemów z infrastrukturą. Nieustannie realizujemy innowacyjne eventy, aby mieć pewność, że zespół ma coraz więcej powodów do pracy w firmie. Zaczęliśmy wprowadzać następujące zmiany w naszych decyzjach biznesowych * Ograniczona liczebność zespołu * Nie rzucanie większej ilości czasu na problem (unikanie nocnych pobytów i pracy w weekendy) * 5 dni i 8 godzin efektywnej pracy Mamy do czynienia głównie z dwoma problemami. * Okazuje się, że dzisiejsze wyniki były mniejsze niż w przeszłości. To nie jest tylko obserwacja, niektórzy z naszych starych pracowników rozmawiają z nami w cztery oczy i również zadają to samo pytanie. * Niedawno odkryliśmy, że w przyjaznej kulturze przez większość czasu zaczynamy pokazywać lepszą stronę pracy, w ten sposób coraz trudniej jest teraz komuś upomnieć, gdy się pomyli. Również z tego powodu wszyscy w firmie mają poczucie, że wytwarzają największą wydajność. A więc odpowiedzi, której szukam : * Jak możemy poprawić kulturę, aby wszyscy w zespole regularnie poprawiali wyniki, a ich 8 godzin stawało się coraz bardziej wartościowe?


title: Wybór technologii do opracowania aplikacji wieloplatformowej

text: Posiadam aplikację biznesową WinForms napisaną w C#. To, co chciałbym zrobić, to przeprojektować go, aby spełniał podejście wieloplatformowe. Myślałem o architekturze obejmującej serwer aplikacji (wykonujący całą logikę i wykonujący operacje na bazie danych) oraz po stronie cienkiego klienta działającego na systemach Windows i Mac OS, a także Android, iPhone lub po prostu w przeglądarce internetowej. Wersja dla systemu Windows powinna również mieć możliwość korzystania z metod z niektórych bibliotek DLL. Rozwiązaniem, które przychodzi mi do głowy, jest klient stacjonarny opracowany z myślą o Silverlight (dla użytkowników Windows i Mac OS). Web part oparty na ASP.NET byłby przystosowany do urządzeń mobilnych. Wszystkie korzystałyby z usług WebServices dostarczanych przez serwer WCF działający w trybie Mono. Co myślisz o tym podejściu? Dlaczego to jest dobre, a dlaczego, jeśli nie? Wiem, że wszystkie te platformy znajdują się w zasięgu Adobe AIR, ale wybór tego spowoduje porzucenie całego istniejącego kodu i wiedzy zespołu programistów na temat .NET. Dziękuję za każdą wskazówkę.


title: Jeśli użytkownik odmówi „kontynuować?” monit, jaki kod wyjścia powinien zostać zwrócony?

text: W skryptach opartych na terminalu (Shell, Bash, Python itp.), jeśli zapytasz użytkownika _"Czy chcesz kontynuować?"_ i użytkownik wybierze _"Nie"_ , jaki kod wyjścia powinien zwrócić skrypt? Z jednej strony skrypt wykonywany zgodnie z oczekiwaniami użytkownika (użytkownik chciał zakończyć, więc zakończył), więc powinien dawać kod zakończenia `0`. Z drugiej strony skrypt nie był w stanie wykonać swojego głównego zadania, którym powinien być niezerowy kod wyjścia.


title: Wiele aplikacji w jednym rozwiązaniu Visual Studio

text: Pracuję dla firmy, która chce umieścić wszystkie swoje aplikacje .Net (aplikacje internetowe, aplikacje Windows i aplikacje konsolowe) w jednym rozwiązaniu Visual Studio. Szukam doświadczenia od programistów, którzy albo w ten sposób konstruują własne aplikacje, albo pracują w firmie, która to robi. Czy to dobry pomysł? * Jakie są zalety i wady umieszczania wszystkich aplikacji w jednym rozwiązaniu, zamiast oddzielnych rozwiązań dla każdej aplikacji? * Jak szybki jest program Visual Studio z rozwiązaniem obejmującym ponad 20 projektów? * A jak stabilny jest plik rozwiązania przy współbieżnym rozwoju kontrolowanym przez źródło?


title: Odkrywanie funkcjonalności z równoległej hierarchii klas

text: Mam abstrakcyjne drzewo składni, które chcę skompilować do różnych reprezentacji. Teraz walczę o uporządkowanie klas w taki sposób, aby można było łatwo dodawać nowe reprezentacje. Najłatwiej to osiągnąć, dodając metodę dla każdej reprezentacji, np. „kompilacja_do_foo”, „kompilacja_do_paska”. Dodatkowe reprezentacje można dodać przez łatanie małp. Problem polega na tym, że implementacje kompilacji są rozsiane po całym świecie i narusza to zasadę pojedynczej odpowiedzialności. Zaletą jest możliwość dziedziczenia kompilacji. Teraz mógłbym również zdefiniować funkcję kompilacji zawierającą gigantyczny przełącznik, który wysyła na typ argumentu. Traci to jednak zalety polimorfizmu i utrudnia dziedziczenie zachowania kompilacji. To nie jest realna opcja. Ciekawym rozwiązaniem byłaby fabryka abstrakcyjna: ![Fabryka abstrakcyjna](http://i.stack.imgur.com/Lhciy.png) Ten projekt wygląda dość obiecująco, ale ma pewne wady: * Hierarchia węzłów AST nie może być rozszerzona bez rozszerzania również `AbstractCompiler`, a z kolei wszystkich konkretnych kompilatorów i ich równoległych hierarchii konkretnych węzłów. * Informacje o podtypach węzłów AST są rozpowszechniane w całym systemie. musi być określony pomiędzy `AbstractNode` w celu współdzielenia zachowania (będę używał ról), pomiędzy `ConcreteNode` w celu współdzielenia implementacji `compile` i przynajmniej w `AbstractCompiler`, aby zapewnić domyślne implementacje (np. `metoda NodeA() { return Node() }`). Można to częściowo rozwiązać za pomocą metaprogramowania. * Kiedy AST jest budowane, można skompilować tylko do _jednej_ reprezentacji. Jeśli chcę mieć wiele wyjść, muszę przebudować AST za pomocą innego `ConcreteCompiler`. Idealnie, jako parametr do metody `compile` przekażę po prostu konkretną instancję kompilatora: ![Idealny diagram klas](http://i.stack.imgur.com/pRbBz.png) … ale nie mam pojęcia jak metoda `compile` mogłaby uzyskać rzeczywistą implementację z równoległej hierarchii klas (bez ponownego użycia gigantycznego przełącznika na typie węzła). Badałem również wzorzec Bridge, ale rozwiązanie nie wydaje się pasować do mojego problemu bez stworzenia tysiąca małych mostków. Uważnie przeczytałem poprzednie pytanie: „Projektowanie solidnej architektury dla wielu typów eksportu?”. Kluczową różnicą jest to, że dane wejściowe (w tym: równoważne, samodzielne reprezentacje danych) są teraz hierarchicznymi węzłami AST, więc dziedziczenie między implementacjami kompilacji jest kluczowe. System zostanie zaimplementowany w Perlu, więc nie ograniczam się do klasycznego OOP, ale mogę również używać metaprogramowania, ról (czyli cech) i programowania funkcjonalnego. czego mi brakuje? Czy istnieje architektura, której mógłbym użyć do eleganckiej struktury tego systemu? Jak sprawić, by odpowiednia klasa z równoległej hierarchii klas była wykrywalna w klasach węzłów, bez poświęcania polimorfizmu?


title: Jak mogę oddzielić interfejs użytkownika od logiki biznesowej, zachowując przy tym wydajność?

text: Powiedzmy, że chcę pokazać formularz, który reprezentuje 10 różnych obiektów na liście rozwijanej. Na przykład chcę, aby użytkownik wybrał jednego hamburgera z 10 różnych, które zawierają pomidory. Ponieważ chcę oddzielić interfejs użytkownika i logikę, musiałbym przekazać formularzowi ciąg znaków reprezentujący hamburgery, aby wyświetlić je na polu combobox. W przeciwnym razie interfejs użytkownika musiałby zagłębić się w pola obiektów. Następnie użytkownik wybierał hamburgera z combobox i przesyłał go z powrotem do kontrolera. Teraz kontroler musiałby ponownie znaleźć wspomnianego hamburgera na podstawie reprezentacji ciągu używanej przez formularz (może identyfikator?). Czy to nie jest niewiarygodnie nieefektywne? Miałeś już przedmioty, z których chciałeś wybrać. Jeśli wysłałeś do formularza całe obiekty, a następnie zwróciłeś określony obiekt, nie musiałbyś szukać go później, ponieważ formularz zwrócił już referencję do tego obiektu. Co więcej, jeśli się mylę i faktycznie powinieneś wysłać cały obiekt do formularza, jak mogę odizolować UI od logiki?


title: Czy to zły projekt? Jak można to ulepszyć?

text: Jakiś czas temu napisałem poniższe informacje, ale ostatnio doszedłem do przeglądu i teraz uważam, że nie jest to dobry projekt. Projekt jest dla rodzaju modułowej warstwy bazy danych przy użyciu Entity Framework 4. Istnieje pojedynczy obiekt bazy danych, który ładuje (leniwie) konteksty struktury encji z zewnętrznych bibliotek w określonej lokalizacji, a wystąpienia załadowanych kontekstów są przechowywane w tabeli skrótów swoją nazwę (np. „ContentMgmtContext”). Cały kontakt z bazą danych w tym systemie odbywa się za pośrednictwem procedur składowanych. Aby wykonać wywołanie do bazy danych, podpis metody zapytania wygląda tak: List<TReturn> Query<TReturn>(string Context, string Procedure, TransactionScope Scope, List<ObjectParameter> QueryParameters) Ta modularność jest czymś, co lubię. Istnieje jednak jedna istotna wada tego podejścia: `gdy korzysta się z warstwy bazy danych, używany przez nią kod musi mieć odniesienie do biblioteki, w której przechowywany jest kontekst, aby uzyskać dostęp do typów zwracanych przez procedury składowane za pośrednictwem Entity Framework.` W modelu obiekty z warstwy bazy danych są tłumaczone na nowe obiekty, z których korzysta widok i kontroler. Myślę, że to zły projekt, ale jak mogę go ulepszyć? Rozważałem dodanie pustego interfejsu, takiego jak `IStoredProecedureObject`, aby nadać każdemu typowi danych zwracanemu przez procedurę składowaną wspólny typ podstawowy, jednak wydaje się, że jest to udaremniane przez Entity Framework. Za każdym razem, gdy plik `.edmx` jest rekompilowany, kod jest generowany od nowa, a wszelkie dodatki usuwane. Czy jest jakiś sposób, aby temu zapobiec? Jak mogę ulepszyć ten projekt? Co (jeszcze) jest z nim nie tak? Czy jestem na dobrej drodze?


title: Czy papierowe certyfikaty mają znaczenie?

text: Zadaję to pytanie, ponieważ firma Oracle postanowiła nie dawać papierowych certyfikatów dla wszystkich certyfikatów firmy Sun. Czy to dobrze czy źle? a czy jakiś pracodawca prosi o sam certyfikat?


title: Do tworzenia oprogramowania używam IDE (Eclipse). Dlaczego powinienem przełączyć się na vima lub emacsa?

text: Moja codzienna praca to java/web developer. Używam Eclipse od ~5 lat. Myślę, że jest doskonały i używam również Webstorm do javascript i html/jsp. Czasami muszę ssh do serwera i bawić się plikami konfiguracyjnymi; do tego używam vi i to mnie boli. Muszę otworzyć stronę z listą składni/poleceń: _naciśnij Escape, potem gwiazdkę, odwróć się trzy razy, a tekst zostanie wpisany dwie linie nad kursorem_. To dla mnie takie **nieintuicyjne** i wyobrażam sobie każdego, kto dorastał w późnych latach osiemdziesiątych dziewięćdziesiątych. Oto główne powody, dla których uważam, że Eclipse jest genialne (i zakładam inne IDE) i nie przełączam się na emacs i/lub vim. * Podświetlanie błędów bez konieczności ponownej kompilacji projektu. * Asystent kodu. * Refaktoryzacja. * Hierarchia zaproszeń otwierających/Deklaracja otwarcia. * W pełni zintegrowany z kontrolą źródła. * Debuger jest wliczony w cenę. * dostępność wtyczek innych firm - np. findbugs/checkstyle. Jednym z argumentów, które słyszę, jest to, że za pomocą emacs/vim możesz tworzyć własne wtyczki - dobrze, ale możesz to zrobić również w zaćmieniu. Ale nie musisz, bo wszystko już tam jest! To tak, jakby powiedzieć kup ten w połowie zbudowany samochód, resztę możesz zbudować sam. Dlaczego ludzie używają emacs/vim ? Czy osoby, które z niego korzystają, faktycznie pracują nad złożonymi projektami obiektowymi w dużych organizacjach? **Jakie są powody przejścia na vim/emacs. Jak wzrosłaby moja produktywność, gdybym się zmienił?**


title: Jak zaimplementować „kolejkowanie” zatwierdzenia na moich obiektach?

text: Mam listę obiektów, które będą musiały przejść przez proces zatwierdzania. Jestem ciekaw, czy najlepiej byłoby po prostu dodać do mojego obiektu jakieś właściwości, takie jak `ApprovedBy` i `ApprovedOn`. Inną opcją jest utworzenie klasy `ObjectApproval`, która zawiera te informacje, a także inne informacje, które muszą być przechowywane. Gdybym potrzebował listy obiektów, które nadal wymagały zatwierdzenia, mógłbym po prostu zapytać o wartość null `ApprovedBy` w pierwszym scenariuszu. W drugim scenariuszu musiałbym utrzymywać dokładną listę elementów `ObjectApproval`. Następną rzeczą jest, jeśli potrzebuję wieloetapowego procesu zatwierdzania? W tym przypadku myślę, że lepiej byłoby utworzyć typ „ObjectApproval”, aby śledzić wszystkie skomplikowane szczegóły, i mógłbym po prostu zapytać o „ObjectApproval.Step” (lub coś podobnego), aby znaleźć elementy, których potrzebuje określony użytkownik do zatwierdzenia na podstawie ich roli. Jakieś przemyślenia na ten temat? A może wzorce projektowe do polecenia?


title: Jakie jest najlepsze rozwiązanie dla statycznej alokacji pamięci?

text: Pracuję nad przetwarzaniem obrazu i muszę używać dużych obrazów w krytycznym systemie. Dobrą praktyką w przypadku krytycznych systemów jest unikanie dynamicznej alokacji pamięci, ale jaki jest projekt/zalecenia dotyczące statycznej alokacji pamięci? Jeśli wykonamy statyczną alokację dużej macierzy, otrzymamy przepełnienie stosu. klasa test { public: test(){}; ~test(){}; prywatne: float m_bigMatrix[3000000]; }; Aby rozwiązać ten problem, możemy zdefiniować macierz jako statyczną, ale wtedy ta macierz będzie taka sama dla wszystkich instancji tej klasy. zmiennoprzecinkowa statyczna m_bigMatrix[3000000]; Innym rozwiązaniem jest posiadanie obiektu statycznego. próba statyczna t; Mam rozwiązanie z innego forum, na którym zasugerowano, że najlepszym podejściem byłoby użycie klasy specyficznej dla zarządzania pamięcią. Wszystkie instancje klasy są statyczne i są używane przez inne klasy w całym kodzie. Oto niechlujna wersja tego rozwiązania (to tylko przykład): class MemManager { public: MemManager(){ m_counter = 0u; } ~MemManager(){ printf("Poza MemManagerem nbr %d\n", m_counter); } uint16_t getCounter() { return m_counter; } uint16_t getData(uint32_t poz) { return m_data[pos]; } void setCounter(uint16_t val) { m_counter = val; } void setData(uint16_t val, uint32_t poz) { m_data[pos] = val; } prywatne: statyczna const uint32_t MEM_SIZE_DATA = 100000000u; uint16_t m_counter; uint16_t m_data[MEM_SIZE_DATA]; chroniony: }; klasa MemUser { public: MemUser() { m_memManager = NULL; } ~MemUser(){ printf("Poza MemUser\n"); } void init(MemManager& memManager) { m_memManager = &memManager; }; uint16_t getCounter() { return m_memManager->getCounter(); } uint16_t getData(uint32_t poz) { return m_memManager->getData(poz); } void setCounter(uint16_t val) { m_memManager->setCounter(val); } void setData(uint16_t val, uint32_t poz) { m_memManager->setData(val, poz); } prywatne: MemManager *m_memManager; chroniony: }; int main() { statyczny MemManager mManager; mManager.setCounter(1); { Użytkownik Użytkownika mUżytkownik; mUżytkownik.init(mManager); printf("Zamknij zakres\n"); } for(uint8_t i = 1u; i<5u; i++) { static MemManager mManager2; printf("Zauważ, że mManager2 to to samo: %d\n", mManager2.getCounter()); mManager2.setCounter(i); } printf("Zakończ proces\n"); zwróć 0; } Czy to prawda? Jakie jest najlepsze rozwiązanie?


title: Kiedy java zmieni się na adresowanie 64-bitowe i jak możemy się tam dostać szybciej?

text: Mając teraz do pracy z dużymi plikami, chciałbym wiedzieć, kiedy biblioteki java zaczną przestawiać się na długie indeksowanie w swoich metodach. Od Inputstreams read(byte[] b, int off, int len) - zabawne jest też długi skip(long) - przez MappedByteBuffer do podstawowego indeksowania tablic i list, wszystko jest adresowane jako int. Czy istnieje oficjalny plan rozbudowy bibliotek? Czy istnieją inicjatywy, które wywierają nacisk na wyrocznię w celu ulepszenia bibliotek, jeśli nie ma jeszcze oficjalnego planu?


title: Nauczyć się języka oddolnego czy odgórnego?

text: Rozpoczynając pierwszy projekt w nowym języku, masz zasadniczo dwa podejścia do nauki. Albo robisz szybkie wyszukiwanie w Google, zbierasz najpopularniejsze frameworki i biblioteki i przechodzisz od ich samouczków do tego, co chcesz osiągnąć (z góry na dół). Lub zaczynasz od podstaw języka i biblioteki standardowej, a następnie zamieniasz własne proste komponenty na bardziej zaawansowane komponenty innych firm, gdy już wiesz, czego szukasz (oddolne). Teraz mam zamiar rozpocząć swój pierwszy poważny projekt JavaScript. Prawdopodobnie jest tyle samo wiedzy o języku, co o jQuery, ExtJS i whathaveyou, a ja staram się zdecydować, na czym się skupić.


title: Licencjonowanie aplikacji komputerowej opartej na sieci Web?

text: Stworzyłem aplikację desktopową (winoms) używając C#.net 3.5, aplikacja jest aplikacją SEO, więc musi być podłączona do internetu, zaimplementowałem prostą procedurę licencjonowania, w której za każdym razem, gdy aplikacja jest uruchamiana, wysyła zapytanie do sieci usługa na moim serwerze z kluczem i hashem maszyny do sprawdzenia. Ale ostatnio zauważyłem, że niektórzy „crackerzy” wyłączyli weryfikację licencji (po prostu usunęli wiersze kodu, które to robią) aplikacji, którą zaciemniłem, i smutne jest to, że sprzedają ją za jedyne 10% tego, za co sprzedaję, nawet nie zadali sobie trudu, aby usunąć adres mojej strony internetowej i dane firmy z pola „O”. Aplikacja ma funkcję automatycznej aktualizacji, którą tak zwani crackerzy celowo zostawili ją w wersji crackowanej. Właśnie próbowałem znaleźć wyjście z tego, mogę wydać aktualizację i wyłączyć wszystkie wersje, które są przyniesione z crackerów, ale bez odpowiedniej licencji ponownie się zepsuje i następnym razem nie mam gwarancji, że zachowają funkcję automatycznej aktualizacji.


title: Ile jest za dużo interfejsów w klasie?

text: Prawdopodobnie uznałbym, że posiadanie klasy, która implementuje 23 interfejsy, jest zapachem kodu lub nawet antywzorcem. Jeśli rzeczywiście jest to antywzór, jak byś go nazwał? A może po prostu nie przestrzega zasady pojedynczej odpowiedzialności?


title: Czy mogę zmienić pierwszeństwo i asocjatywność operatorów w C++?

text: Jak mówi tytuł, uważam, że przydatna jest możliwość przeciążania operatorów. Czy można również zmienić sposób analizowania operatorów, określając pierwszeństwo i asocjatywność zastąpionych operatorów?


title: Kiedy używać event.initMouseEvent do symulowania kliknięć myszą?

text: Zastanawiam się, czy istnieją łagodne przypadki użycia do symulowania kliknięć myszą za pomocą zdarzenia.initMouseEvent. Odkryłem, że jest on używany do tworzenia reklam typu pop-under w następujący sposób: var e = document.createEvent('MouseEvents'); e.initMouseEvent('klik', prawda, prawda, okno, 0, 0, 0, 0, 0, prawda, fałsz, fałsz, prawda, 0, null); a.wysyłkiZdarzenie(e); Ten kod symuluje kliknięcie otwierającego się okna przeglądarki, aby wymusić nowo otwarte okno pod nim. Zło. Zastanawiam się nad po prostu zapobieganiem wszystkim symulowanym kliknięciom we własnej przeglądarce za pomocą rozszerzenia przeglądarki, ale zastanawiam się, czy mógłbym w tym czasie zepsuć przydatne strony internetowe i zachowanie. Dlatego zastanawiam się, jakie sytuacje usprawiedliwiają symulowanie kliknięć myszką i czy są duże serwisy, które używają tego w niezły sposób.


title: Algorytm do analizy i przewidywania

text: Mam zestaw danych, powiedzmy pytanie, główną kategorię pytania, obserwujących główną kategorię, kategorie powiązane z pytaniami, obserwujący każdy z powiązanych kategorii, czy otrzymałem odpowiedź w ciągu 24 godzin [tak/nie] Teraz muszę przeanalizować bazę danych z tysiącami zestawów danych, takich jak podane powyżej i przewidzieć, czy nowe zadane pytanie (ze wszystkimi szczegółami, takimi jak główna kategoria, obserwujący... itd.) dostanie odpowiedź w ciągu 24 godzin, czy nie? Nie mam pojęcia, który algorytm będzie bardziej odpowiedni do rozwiązania tego rodzaju problemu.


title: Jak wypracować postawę wobec podstaw abstrakcji?

text: Wiem, że to głównie pytanie psychologiczne, ale jakie praktyki istnieją dla programistów, aby poprawić _poczucie_ **rozpoznawania podstawowych pojęć** w domenie i _nawyk_ do **definiowania prostych wyrażeń wielokrotnego użytku** dla nich zamiast powielania ich definicji w całym kodzie? Nie mówię o trudnych do nauczenia narzędziach do abstrakcji, ale o trywialnych, niezbędnych, takich jak stałe i funkcje, które ma każdy język programowania. Na przykład, jeśli ktoś ma za zadanie zmienić wiele literałów napisowych w kodzie poprzez dodanie do nich prefiksu, zamiast `"FooBar"` powinien napisać (pseudokod): def prefix = "Foo" prefix + "Bar" Lub jeśli istnieje specyficzna dla domeny właściwość pochodna pewnego typu encji do obliczenia, wprowadź funkcję dla tej, która wyraźnie odzwierciedla naturę tej właściwości pochodnej: def boolean isRight(Foo foo) = foo.bar.length > 0 Problem jest że nawet bardziej doświadczeni programiści czasami nie robią tego z wielu możliwych przyczyn (spotkanie z nowym językiem programowania, presją czasu itp.). Czy znasz jakieś dobre, pełne szacunku sposoby komunikowania się z kolegami (nie studentami), aby podejście to stało się bardziej instynktowne?


title: Przeciążanie operatorów - C++

text: Eksperymentowałem z nowymi przeciążonymi operatorami, stworzyłem jeden operator void i drugi, który zwraca coś, gdy zostanie wywołany: #include <iostream> struct chichachicha{ int operator()(){ return 25; }; }; struct boomboom{ void operator()() { std::cout << "Cześć ludzie!" << std::endl; }; }; int main(){ chichachicha objC; int f = objC(); std::cout << f << std::endl; boomboom objB; objB(); powrót(0); } Czy to najlepszy sposób na napisanie kodu, który to robi? Jak mogę napisać operator, który może być wywołany z dowolnego miejsca w kodzie bez tworzenia instancji powiązanej struktury, który zwraca `void`/nothing i wyświetla tylko ciąg tekstu? Nie rozważam metod statycznych, tylko operatorów.


title: Jestem menedżerem. Jak poprawić relacje w pracy i komunikację z programistami?

text: Najpierw trochę tła. Jestem kierownikiem projektu w średniej wielkości firmie. Zaczynałem jako specjalność CS i miałem trochę kontaktu z programowaniem, ale po kilku miesiącach wiedziałem, że to nie moja ścieżka, więc przerzuciłem się na zarządzanie. Okazało się to dobrą decyzją i po ukończeniu studiów pracowałem (już od 5 lat) w zarządzaniu oprogramowaniem w różnych firmach. Ostatnio mieliśmy bardzo bolesny projekt. To było najgorsze z najgorszych, z wieloma błędami zarówno po naszej stronie, jak i po stronie klientów i ledwo kończyło się bez strat. Doprowadziło to do wielu frustrujących sytuacji, z których jedna nasiliła się do tego stopnia, że jeden z naszych starszych programistów opuścił firmę po głośnej kłótni z nami (zarządem). To była dla mnie czerwona flaga: zrobiłem coś strasznie złego. _(dla przypomnienia, kłótnia dotyczyła kilku błędnych szacunków czasu)_ Szukałem odpowiedzi w wielu miejscach i znajomy skierował mnie na tę stronę. Jest tu wiele pytań dotyczących frustracji związanych z zarządzaniem. Rozumiem, że ogólne złe doświadczenia prowadzą do ogólnej niechęci do „tych facetów w garniturach”. Jestem tym facetem w garniturze. Może na to nie wygląda, ale chcę tylko udanego projektu, a przy ograniczonych zasobach podejmuje bolesne decyzje. To moja praca. Jedną z rzeczy, na które narzekał wspomniany starszy programista, był sprzęt do pracy. Szczerze mówiąc, nie miałem pojęcia, że komputery, które mieliśmy, nie nadają się do pracy. Po tym pytałem wielu programistów i ogólny konsensus był taki, że potrzebujemy lepszych maszyn. Naprawiłem to od tego czasu, ale oczywiście istniała ogromna luka komunikacyjna między mną a programistami. Niektórzy z najbardziej błyskotliwych programistów są najbardziej nieśmiałymi i cichymi ludźmi. Wiem o tym i nigdy nie było z tym problemu podczas rozmowy kwalifikacyjnej. Ludzie są różni i mają mocne strony w różnych dziedzinach. Przypadek słabych komputerów jest tylko jednym z wielu, które skłoniły mnie do myślenia, że istnieje problem z komunikacją. Jak mogę poprawić komunikację z programistami, nie onieśmielając i nie powtarzając? Mam nadzieję, że ludzie nie narzekają na dobre rzeczy. Jeśli kochasz swoje miejsce pracy i kochasz (lub przynajmniej _lubisz_ :)) swojego menedżera, proszę opowiedz mi o nich. Co oni robią dobrze? Podobnie, jeśli go nienawidzisz, opisz szczegółowo, dlaczego. Szukam odpowiedzi na temat poprawy komunikacji, ponieważ myślę, że to mój problem, ale mogę się mylić.


title: Implementacja podpisanych cyfrowo danych w aplikacji internetowej

text: Dobrze rozumiem PKI z koncepcyjnego punktu widzenia - tj. klucze prywatne/publiczne - matematyka za nimi stojąca, użycie hash i szyfrowania do podpisania certyfikatu, cyfrowe podpisywanie transakcji lub dokumentów itp. Pracowałem również nad projektami, w których openssl C biblioteki były używane z certyfikatami do zabezpieczania komunikacji i uwierzytelniania. Jestem również bardzo zaznajomiony z narzędziami wiersza poleceń openssl. Jednak mam bardzo małe doświadczenie z internetowymi projektami PKI i dlatego staram się zaprojektować i zakodować w tym celu osobisty projekt. ## Wymagania (To jest projekt edukacyjny – nigdy nie będzie używany w banku) To jest strona internetowa banku. Wszyscy użytkownicy bankowości internetowej mogą używać dowolnego certyfikatu podpisującego wydanego przez kilka znanych urzędów certyfikacji (verisign, Thawte, entrust itp.). Bank nie ponosi odpowiedzialności za uzyskanie certyfikatów dla użytkownika. Użytkownik loguje się na stronie banku za pomocą swojego identyfikatora użytkownika/hasła itp. Ma dostęp do większości części swojego konta. Jednak gdy użytkownik chce wykonać transakcję – np. przelać pieniądze na inny rachunek – bank chce, aby transakcja została podpisana certyfikatem. ## Projekt Gdy użytkownik wybierze opcję "Przelew" - na stronie pojawi się formularz, w którym znajdują się 3 wpisy - konto "Przelew na", Kwota transakcji oraz sposób wyboru certyfikatu do wykonania podpisu cyfrowego i wykonaj podpisywanie. Łączę numer konta „Przelew na” i kwotę plus jeden raz i jest to ciąg znaków, który zostanie podpisany i przesłany do zaplecza. Dużo szukałem, ale nie byłem w stanie dowiedzieć się, jak osiągnąć - pozwolić użytkownikowi wybrać certyfikat - wykonać podpisywanie. Wiem, jak użytkownik może dodawać certyfikaty do swojego osobistego Truststore w systemie Windows. Ale jak mam poprosić przeglądarkę, aby pokazała mu certyfikaty do wyboru? Jak to się robi podpisywanie - naprawdę nie chcę pisać kodu kryptograficznego w JavaScript!!! Czy alternatywą jest ActiveX lub aplet Java? Czy jest lepszy sposób? Czy istnieje sposób, aby poprosić przeglądarkę o użycie certyfikatu i wykonanie podpisu? Na razie nie zdecydowałem się na platformę/framework/język - więc to pytanie jest raczej ogólne. Dużo szukałem tego rodzaju informacji bez powodzenia - wszystko, co otrzymuję, to samouczki dotyczące podpisywania cyfrowego, samouczki dotyczące włączania PKI w Apache itp. Jeśli ktoś uważa, że moje podejście jest złe i jest lepszy sposób na podpisywanie cyfrowe w aplikacji internetowej - zachęcamy również do sugerowania tych alternatyw.


title: Programowanie GUI z QT dla OpenGL/C++/MAC

text: Jestem kompletnym nowicjuszem biorąc pod uwagę QT. Czy powiedziałbyś, że jest to godne polecenia. Chciałbym zbudować GUI dla mojego programu. Potrzebuję około 10 przycisków.(Może więcej) Przydałoby się też mieć regulator do wyboru koloru jak w photoshopie. Czy trudno to zrozumieć, jeśli masz już średniozaawansowany poziom w c++ i opengl. Jakie książki poleciłbyś? Czy istnieje wiele różnic między Windows a Mac, ponieważ wydaje się, że książek na okna jest znacznie więcej. Co jeszcze można zrobić z QT oprócz GUI-Development. Z góry dziękuję...


title: Oglądanie zmian/dodatków/usuwania plików, ale z myślą o częściowym transferze

text: Chciałbym monitorować system plików w Pythonie, aby moja aplikacja była ostrzegana o dodaniu nowego pliku, usunięciu pliku lub zmianie pliku. Po wykryciu pliku aplikacja rozpoczyna wyodrębnianie zawartych danych za pomocą różnych wtyczek. Problem polega na tym, że mam do czynienia z dużymi plikami i gdy użytkownik zacznie kopiować plik z zewnątrz do obserwowanego katalogu, zostanie on wykryty, ale będzie wyglądał na uszkodzony. Sprawdzanie rozmiaru pliku między wywołaniami jest potencjalnie dobrą strategią, ale ignoruje fakt, że inne generatory pliku (takie jak wget) mogą mieć długie przerwy, gdy rozmiar pliku nie zmienia się, a mimo to nie jest ukończony. Nie mam też kontroli nad formatem pobieranego pliku, więc nie mogę sprawdzić znaku końca pliku, ponieważ nie może go tam być. Czy istnieje sposób na wiele platform (lub inne, specyficzne dla platformy sposoby dla systemu Linux i Windows), aby rozwiązać ten problem? Czy mogę jakoś sprawdzić, czy plik jest aktualnie otwarty? Jak ten problem jest rozwiązany w innym oprogramowaniu?


title: W jaki sposób obsługiwany jest przełącznik/sprawa, aby uniknąć porównań z wartościami wielkości liter?

text: Czytałem w wielu odpowiedziach, że zmiana / przypadek pozwala uniknąć „niepotrzebnych” porównań, ale nigdy nie nauczyłem się tego na studiach i jestem trochę zakłopotany tym, jak program zorientuje się, do którego przypadku przeskoczyć bez robienia porównania. Oczywiście w przypadku `int switchVar=3; switch (switchVar) { case 0: ... case 1: ... case 2: ... case 3: ... case n: ... }`, byłoby to całkiem proste, ponieważ mogłoby po prostu utworzyć tablica wskaźników, które wskazują na początek bloku kodu każdego przypadku, i po prostu zrobi coś w stylu `instructionPointer = switchJumpTable[switchVar];`. Jednak to się psuje, gdybyś miał zrobić switch/case na łańcuchu, np. `char switchVar[]="Północ"; instrukcjaPointer = jumpTable[switchVar];` gdzie próba uzyskania dostępu do indeksu "North" tablicy spowodowałaby błąd (lub gdyby kompilator zezwolił na to za kulisami, nadal nie widzę, jak uniknąłby porównań podczas konwersji znaku array do liczby całkowitej, aby uzyskać dostęp do tablicy.) Mogę wymyślić jeden sposób na obejście niepotrzebnych porównań, ale nie byłoby to strasznie wydajne, więc jestem trochę ciekawy, jak to się robi nie wyobrażaj sobie, że kompilatory używają metody, którą mam na myśli.


title: Czy powinniśmy przestać próbować robić agile, jeśli kontrola jakości potrwa 12 tygodni?

text: Ktoś w mojej firmie niedawno zaproponował zmiany w naszym podstawowym produkcie, które zdaniem naszych menedżerów powinny wywołać to, co myślę, że moja firma uważa za pełny cykl kontroli jakości (tj. testowanie całego pakietu produktów od podstaw). Najwyraźniej nasza kontrola jakości zajmuje 12 tygodni, aby wykonać pełny cykl kontroli jakości naszego produktu. Mój problem z tym polega na tym, że staramy się rozwijać Agile (choć moim zdaniem w większości na wpół ocenione). Zrobimy cały zestaw sprintów, a potem zrobimy wydanie, które, jak sądzę, zajmie nam całe wieki. Pytanie brzmi naprawdę, jeśli nasza kontrola jakości zajmie 12 tygodni, aby wykonać swoją pracę, czy nie powinniśmy po prostu zrezygnować z prób Agile? Po co, do diabła, próbować robić Agile w takiej sytuacji?


title: Jaki jest *poprawny* termin dla programu korzystającego z wielu rdzeni procesora sprzętowego?

text: Chcę powiedzieć, że mój program jest w stanie podzielić część pracy na wiele rdzeni procesora w jednym systemie. Jaki jest na to prosty termin? Nie jest wielowątkowy, ponieważ nie oznacza to automatycznie, że wątki działają równolegle. Nie jest wieloprocesowy, ponieważ wieloprocesowość wydaje się być właściwością systemu komputerowego, a nie programu. „zdolne do równoległego działania” wydaje się zbyt rozwlekłe, a przy całym zamieszaniu terminologicznym nie jestem nawet pewien, czy jest trafny. Czy jest na to prosty termin? Edycja: Framework paralelizacji używany przez mój program implementuje równoległość poprzez rozwidlenie wielu procesów i komunikowanie się między nimi. Edycja 2: Znalazłem następujący artykuł w Wikipedii na temat współbieżności: "Programowanie współbieżne jest zwykle uważane za bardziej ogólne niż programowanie równoległe ..." Na tej podstawie zarówno "współbieżne", jak i "równoległe" są trafnymi opisami mojego programu, z „równoległy” jest tym bardziej precyzyjnym. Zdaję sobie jednak sprawę, że Wikipedia, jak każda encyklopedia, jest odpowiednia do uzyskania ogólnego zarysu tematu, ale może nie być najlepszym źródłem do rozwiązania takich subtelności. Byłbym więc wdzięczny, gdyby ktoś mógł przytoczyć bardziej autorytatywne źródło pokazujące różnicę między tymi dwoma lub czy naprawdę istnieje różnica.


title: PDF na doxygen - jak to zrobić?

text: Mam duży plik PDF z dokumentacją do projektu i muszę go renderować do doxygen (więc weź każdą funkcję z pliku pdf i zapisz ją w doxygen). Jakieś sugestie, jak zrobić to szybko i skutecznie (poza robieniem tego ręcznie)?


title: Synchronicznie zapisz plik

text: Wdrażam serwer w C do projektu kursu. Serwer powinien obsługiwać więcej niż jednego klienta jednocześnie. Opis projektu stwierdza, że `fork()` powinien być używany do obsługi więcej niż jednego klienta. Każde dziecko powinno coś napisać do wspólnego pliku. Jak sobie z tym poradzić synchronicznie? Czy istnieje mechanizm podobny do Javy, w którym tylko jeden wątek może jednocześnie korzystać z funkcji?


title: Jak przyporządkować członków i ich obowiązki do organizacji?

text: Pracuję nad projektem Django, który śledzi działania związane ze sztuką, i utknąłem w części dotyczącej zasobów ludzkich. (kod poniżej) Mam klasę `Ensemble`, która tworzy podklasy `Organization`. „Organizacja” ma tylko jedno ważne pole, „nazwa”. `Ensemble` ma inne pole, `players` (relacja wiele do wielu). Gracz to „Wykonawca”, który ma dwa pola kluczy obcych, „indywidualny” i „instrument”. Pomysł polega na tym, że wykonawcą jest każda osoba grająca na konkretnym instrumencie, więc na przykład mogę być jedną osobą, która może być dwoma wykonawcami: jeden na gitarze, drugi na basie. Problem polega na tym, że nie wszystkie „organizacje” są tak czyste jak ta. Niektóre „Organizacje” będą miały tancerzy, na przykład (zespół taneczny) oraz dowolną liczbę ogólnych „Jednostek”, które wykonują dowolną liczbę określonych zadań, które nie są śledzone jako konkretna klasa (np. „Wykonawca”). Więc na początku pomyślałem, że najlepiej będzie po prostu zmapować jednostki indywidualne do organizacji poprzez relację wiele do wielu, utworzyć klasę Job mapującą jednostki do klasy JobCode (która może obejmować wiersz z czymś w rodzaju „wykonawca”), ale to nie działa dobrze, jeśli na przykład chcesz śledzić _na którym_ instrumencie wykonawca gra dla tego konkretnego zespołu, lub jeśli gra na wielu instrumentach, chciałbym móc zrób to wyraźnie. Dlatego relacja `Ensemble::players` miała dla mnie sens. Wygląda więc na to, że mam klasę „Organizacja”, która nigdy nie będzie czymś więcej niż abstrakcją, ale nadal muszę być w stanie śledzić, jaki rodzaj pracy „jednostka” wykonuje dla „Organizacji”. „Zespół” ma sens tylko w przypadku mapowania „Wykonawców” do „Organizacji”, ale co z „Nauczycielem” w „Szkole”? Znowu chciałbym móc jasno powiedzieć, że fagocista uczy fagotu w szkole, a nie klarnetu (chociaż mogą grać na obu). Więc nie mogę po prostu zmapować „Indywiduum” do organizacji „Szkoła”, prawda? Wydaje się również, że byłby to powszechny problem. Czy istnieje konwencjonalny sposób radzenia sobie z tego rodzaju relacjami? Co jest najskuteczniejsze? **Code:** class Individual(models.Model): nazwisko = modele.CharField(max_length=255) name = modele.CharField(max_length=255) prefiks = modele.ForeignKey(Prefiks, blank=True, null=True) sufiks = modele.ManyToManyField(Suffix, blank=True) date_of_birth = modele.DateField(null=True, blank=True) phone_numbers = modele.ManyToManyField(PhoneNumber, blank=True) adresy = modele.ManyToManyField=True(Adres) user = models.OneToOneField(User, blank=True, null=True) class Performer(models.Model): indywidualny = modele.ForeignKey(Individual) instrument = models.ForeignKey(Instrument) class Organization(models.Model): name = models.CharField(max_length=255) found = models.DateField() tags = TaggableManager(blank=True) media = models.ManyToManyField(Upload, blank=True) class Ensemble(Organizacja): playery = models.ManyToManyField(Pe reformator)


title: Stworzenie efektywnej strony internetowej i dokumentacji biblioteki C++

text: Tworzenie biblioteki C++ oznacza również dokumentowanie jej, aby inni mogli z niej korzystać, a dokumentacja może się znacznie różnić pod względem jakości. **Jak powinna być skonstruowana strona internetowa biblioteki C++, aby była najbardziej efektywna?** Określiłbym „najskuteczniejszą” jako podzieloną na trzy konkretne grupy interesariuszy biblioteki, z których każda powinna być w stanie znaleźć i dowiedzieć się, co muszą uczestniczyć i korzystać z biblioteki: 1. Nowi użytkownicy potrzebują doskonałego, łatwego wprowadzenia, pobierania, konfiguracji i dokumentacji, która wyraźnie przechodzi z jednego kroku do następnego. 2. Doświadczeni użytkownicy potrzebują solidnych referencji z szybkim dostępem do potrzebnych im szczegółów i jasnymi informacjami o nowych aktualizacjach. 3. Nowi współpracownicy potrzebują przewodnika obejmującego kroki, które muszą podjąć, aby umieścić swój wkład w bibliotece. Chciałbym wymyślić, jak sprawić, by każdy był bardzo zadowolony z tego, co widzi i używa. To pytanie jest rodzajem skrzyżowania profesjonalnego programowania z doświadczeniem użytkownika. W przypadku konkretnych przykładów Boost jest jedną z najlepszych kolekcji bibliotek, ale początkowa instalacja, dokumentacja referencyjna i zastanawianie się, jak się przyczynić, mogą być nieco mylące. Z drugiej strony uważam, że cppreference.com i dokumentacja SGI STL są bardzo przejrzyste i przydatne z objaśnieniami, linkami i przykładami. Chociaż przykłady są tylko opiniami, a inne mogą się różnić, pomaga to nadać kontekst pytaniu, które zadaję.


title: Jakie są alternatywne modele oprogramowania do zdalnego pulpitu?

text: Razem ze współpracownikiem próbowaliśmy przeprowadzić burzę mózgów i wymienić różne sposoby, w jakie twórca aplikacji może napisać program umożliwiający użytkownikowi na jednym komputerze zdalne uruchamianie na innym komputerze podczas wyświetlania na własnym komputerze. Zasugerowała, że wszystkie możliwości można podzielić tylko na trzy kategorie: * oprogramowanie do zdalnego pulpitu * usługa hostowana * urządzenie Myślę, że rozumiem, jak programista aplikacji może podejść do tego przy użyciu pierwszego modelu (na przykład pisząc aplikację, która korzysta z usługi na serwerze za pośrednictwem protokołu.) Nie jestem pewien, w jaki sposób drugi model byłby inny niż pierwszy i nie rozumiem, co w tym przypadku oznaczałby termin „urządzenie”. Chciałbym wiedzieć, jak programista aplikacji powinien porównać te alternatywy podczas projektowania strategii dla nowej aplikacji - która będzie używana zdalnie?


title: Użyć konstruktora czy metody ustawiającej?

text: Pracuję nad kodem UI, w którym mam klasę `Action`, coś takiego - public class MyAction extends Action { public MyAction() { setText("My Action Text"); setToolTip("Podpowiedź Mojego narzędzia akcji"); setImage("Jakiś obraz"); } } Kiedy ta klasa Action została stworzona, założono, że klasa `Action` nie będzie konfigurowalna (w pewnym sensie - jej tekst, podpowiedź lub obraz nie zostaną zmienione nigdzie w kodzie). Ostatnio, teraz musimy zmienić tekst akcji w pewnym miejscu w kodzie. Zasugerowałem więc mojemu współpracownikowi, aby usunął zakodowany tekst akcji z konstruktora i zaakceptował go jako argument, tak aby wszyscy byli zmuszeni przekazać tekst akcji. Coś takiego jak ten kod poniżej - public class MyAction extends Action { public MyAction(String actionText) { setText(actionText); setTooltip("Podpowiedź narzędzia Moja akcja"); setImage("Mój obraz"); } } Uważa jednak, że skoro metoda `setText()` należy do klasy bazowej, może być elastycznie używana do przekazywania tekstu akcji wszędzie tam, gdzie tworzona jest instancja akcji. W ten sposób nie ma potrzeby zmiany istniejącej klasy `MyAction`. Więc jego kod wyglądałby mniej więcej tak. Akcja MyAction = nowa MyAction(); //spowoduje to utworzenie instancji akcji z zakodowanym tekstem action.setText("Użytkownik wymagał nowego tekstu akcji"); //nadpisz istniejący tekst. Nie jestem pewien, czy jest to właściwy sposób na rozwiązanie problemu. Myślę, że w powyższym przypadku użytkownik i tak zmieni tekst, więc dlaczego nie wymusić na nim konstruowania akcji? Jedyną korzyścią, jaką widzę w oryginalnym kodzie, jest to, że użytkownik może stworzyć klasę Action bez zbytniego myślenia o ustawianiu tekstu.


title: Który z nich jest lepszy do czatu offline przy użyciu JMS — RabbitMQ lub ActiveMQ?

text: Dużo pracowałem nad Java Standard Edition; a teraz jestem nowicjuszem w Java Enterprise Edition. Obecnie pracuję nad modułem czatu offline aplikacji Enterprise przy użyciu Spring MVC. Teraz pomyliłem się w wyborze RabbitMQ lub ActiveMQ? Czy ktoś może mi zasugerować, który z nich jest lepszy do czatu offline. Z góry dziękuję


title: Czy każdy członek zespołu scrumowego powinien być uniwersalny?

text: Mamy zespół scrum, w którym jest 5 programistów, 2 testerów automatycznych, 1 testera ręcznego. Nasze zadania są całkowicie niezależne. Czy nie powinno być 8 osób, każdy powinien umieć wykonać każde zadanie: napisać kod, napisać do niego testy, czasem ręcznie coś przetestować?


title: Jak poprawnie udzielić sublicencji na bibliotekę objętą licencją MIT?

text: Jak poprawnie udzielić sublicencji na bibliotekę objętą licencją MIT. Korzystam i rozbudowuję bibliotekę. Licencja MIT stanowi, że mogę udzielać sublicencji na bibliotekę. Czy mogę po prostu stwierdzić: <Biblioteka oprogramowania> jest chroniona prawami autorskimi <pierwotny autor> i jest objęta licencją MIT. <oryginalna licencja> Rozszerzenia do <Biblioteka oprogramowania> są objęte prawami autorskimi <me> i podlegają licencji GPL lub licencji komercyjnej, jeśli dotyczy. <GPL, czyli licencja komercyjna>


title: Uczestnicy retrospektywy Agile

text: Kim powinni być uczestnicy retrospektywy? Czy będą to tylko członkowie zespołu, czy menedżer produktu, wszyscy interesariusze i zależne zespoły również będą uczestniczyć. Uważam, że tylko zespół powinien się spotykać, aby dyskutować na retrospektywie, inaczej wszyscy członkowie zespołu się nie otworzą. Ale jeden z menedżerów nalega, aby uwzględnić również wszystkich interesariuszy.


title: Co to jest prototyp oprogramowania?

text: Rozumiem, że ta strona jest przeznaczona dla programistów i muszę zadać konkretne pytanie dotyczące kodowania. Robię dyplom inżyniera oprogramowania i zostałem poproszony o odniesienie się do co najmniej 7 książek w mojej definicji prototypowania. Najlepiej zapytać tutaj, ponieważ większość z was prawdopodobnie czytała książki na ten temat i byłaby w stanie mi je polecić. Nie mam nic przeciwko kupowaniu ich od Amazona, więc jeśli mógłbyś dla mnie kilka książek, które definiują prototypowanie lub prototyp, naprawdę bym to docenił.


title: pomylenie tych dwóch terminów sieciowych: szybkość transmisji a prędkość propagacji

text: Przeczytałem to w drugim wydaniu _TCP/IP PROTOCOL SUITE_, napisanym przez Behrouza A. Forouzana i Sophię Chung Fegan. > W tradycyjnym Ethernecie minimalna długość ramki to 520 bitów, prędkość transmisji to 10 Mb/s, prędkość propagacji jest prawie prędkość światła, a domena kolizyjna ma prawie 2500 metrów. Czym więc jest **szybkość transmisji** i **szybkość propagacji**? Dlaczego nie są takie same?


title: Który język jest najlepszy dla OpenGL?

text: Mam następującą listę języków: * C++ * C# * VB.Net * D * Delphi * Euphoria * GLUT * Java * Power Basic * Python * REALbasic * Visual Basic Chciałbym wiedzieć, co ludzie uważają za: 1. Najlepsze ( _najwydajniejszy_ ) język do pracy z OpenGL? 2. Najłatwiejszy język do pracy z OpenGL?


title: Jaka jest struktura zespołu opracowującego grę komputerową?

text: Chciałem zapytać, czy istnieje typowa struktura zespołu rozwijającego grę komputerową, a jeśli tak, to jakie są konkretne role członków zespołu. Ponadto, jaka jest wielkość takiego zespołu (pod względem rzędu wielkości, 5-10? 10-100? więcej?). Czy jest jakaś literatura na ten temat?


title: Co oznacza XXX w komentarzu?

text: Co ludzie zazwyczaj mają na myśli, gdy widzisz „XXX” w komentarzu. Od czasu do czasu widzę taki komentarz: # XXX - Ten widżet powinien naprawdę utrudnić działanie. Oczywiście, mogę powiedzieć, co oznacza ten komentarz, ale co ogólnie oznacza XXX? Czy mówi „To jest hack”, czy może „Może powinniśmy wrócić do tego później”? A może mówi coś zupełnie innego?


title: Mądrość korzystania z kodu open source w komercyjnym oprogramowaniu

text: Szukam przy użyciu kodu open source w mojej aplikacji sieci web ASP.NET (w szczególności dapper). Kierownictwo nie jest fanem, ponieważ open source jest postrzegane jako ryzyko, które dotknęło nas wcześniej. Najwyraźniej poprzedni programiści musieli przepisywać rzeczy po tym, jak komponenty open-source zawiodły. Zalety wydają się być następujące: * Dla mnie robi wiele rzeczy, które w innym przypadku wymagałyby albo dużej ilości standardowego kodu, albo zalecanego przez Microsoft, ale wolniejszego rozwiązania (Entity Framework). Minusy: * Jest na tyle złożony, że gdyby nagle zawiódł w produkcji, ciężko byłoby mi to naprawić. Jest jednak używany w witrynie o znacznie większym natężeniu ruchu niż moja, więc nie sądzę, że będzie to część projektu o wysokim ryzyku. Jaki jest tutaj konsensus? Czy nierozsądne jest używanie w moim projekcie kodu open source, którego nie znam/rozumiem tak dobrze, jak robię własny kod?


title: Naruszasz zasadę segregacji interfejsów?

text: Obecnie mam interfejs o nazwie `InternalEntityIdTransformer`, który ma metodę `getInternalId`, która podana identyfikatorowi zewnętrznemu zwraca odpowiedni identyfikator wewnętrzny. Teraz pracuję nad funkcjonalnością, która będzie musiała wykonać odwrotną transformację i przejść od identyfikatora wewnętrznego do identyfikatora zewnętrznego. Czy dodanie metody `getExternalId` do tego `InternalEntityIdTransformer` jest poważnym naruszeniem dostawcy usług internetowych? (Wszystkie miejsca, które obecnie używają tego interfejsu, potrzebują tylko `getInternalId` i nie będą się przejmować `getExternalId` w żadnym momencie.) A jeśli tak, to czy jest to szczególnie szkodliwe? Czy powinienem mieć tutaj dwa dedykowane interfejsy? Używany język to Java, PHP lub C#.


title: Czy dobrym pomysłem jest pisanie nazw zmiennych, które pasują do terminów specyficznych dla aplikacji?

text: Powiedzmy, że piszę aplikację typu Facebook. Piszę kod jak poniżej $this->get_user_friends(); potem następnego ranka szef mówi, że nie chcemy już dzwonić do znajomych znajomych, nazwiemy ich Pal. Następnie wszystkie szablony są zmieniane, ale co z powyższym kodem? Po 2 latach, kiedy jakiś programista będzie musiał się tym zająć, prawdopodobnie się pomyli, prawda? Co naprawdę robicie?


title: Czas życia iteratora C++ i wykrywanie unieważnień

text: W oparciu o to, co jest uważane za idiomatyczne w C++11: * czy iterator do niestandardowego kontenera powinien przetrwać zniszczenie samego kontenera? * czy powinno być możliwe wykrycie, kiedy iterator zostanie unieważniony? * czy powyższe jest uzależnione od „kompilacji debugowania” w praktyce? **Szczegóły** : Ostatnio odświeżyłem swój C++ i uczę się C++11. W ramach tego pisałem idiomatyczny wrapper wokół biblioteki uriparser. Częścią tego jest zawijanie połączonej listy reprezentacji przeanalizowanych składników ścieżki. Szukam porady na temat tego, co jest idiomatyczne dla kontenerów. Jedną z rzeczy, która mnie martwi, pochodzącą ostatnio z języków zbieranych ze śmieciami, jest zapewnienie, że losowe obiekty nie znikną po prostu na użytkownikach, jeśli popełnią błąd co do długości życia. Aby to uwzględnić, zarówno kontener `PathList`, jak i jego iteratory przechowują `shared_ptr` do rzeczywistego wewnętrznego obiektu stanu. Gwarantuje to, że dopóki istnieje _cokolwiek_ wskazującego na te dane, tak samo będzie z danymi. Jednak patrząc na STL (i _mnóstwo_ poszukiwań), nie wygląda na to, że kontenery C++ to gwarantują. Mam to straszne podejrzenie, że oczekuje się, że po prostu zniszczą pojemniki, unieważniając wszystkie iteratory wraz z tym. `std::vector` z pewnością wydaje się, że iteratory są unieważniane i nadal (niepoprawnie) działają. Chcę wiedzieć: czego oczekuje się od "dobrego"/idiomatycznego kodu C++11? Biorąc pod uwagę błyszczące nowe inteligentne wskaźniki, wydaje się dziwne, że STL pozwala łatwo zdmuchnąć nogi przez przypadkowe wyciekanie iteratora. Czy używanie `shared_ptr` do danych kopii zapasowej jest niepotrzebną nieefektywnością, dobrym pomysłem na debugowanie, czy czymś, czego STL po prostu nie robi? (Mam nadzieję, że uziemienie tego do "idiomatycznego C++11" pozwoli uniknąć zarzutów o subiektywność...)


title: Wyjaśnienie definicji głównego programisty

text: Od ponad 5 lat pracuję nad aplikacją internetową opartą na PHP i MySQL. Rozpocząłem swoją karierę jako stażysta i przeszedłem przez Jr Developera i Software Developera do Senior Software Engineer (Team Lead) i tym właśnie jestem w dzisiejszych czasach. Patrzyłem na link na Wikipedii dotyczący tego, kto jest głównym programistą. Link zawiera następujące informacje: > Główny programista jest inżynierem oprogramowania odpowiedzialnym za co najmniej jeden > projekt oprogramowania. Alternatywne tytuły to kierownik ds. rozwoju, kierownik techniczny, > starszy inżynier oprogramowania, kierownik ds. projektowania oprogramowania (kierownik SDE), kierownik ds. oprogramowania > kierownik lub starszy programista aplikacji. W przypadku wkładu głównie w rolę > projektowania oprogramowania dla przedsiębiorstw wysokiego poziomu, często używany jest tytuł Architekta Oprogramowania (lub > podobny). Wszystkie te tytuły mogą mieć różne znaczenia > w zależności od kontekstu. Moje obecne obowiązki zawodowe są mniej więcej jak _Kierownik ds. Rozwoju_ i do pewnego stopnia blisko _Architekta Oprogramowania_, ponieważ zwykle projektuję podstawową strukturę nowych produktów i zarządzam 2-3 projektami jednocześnie, pomagając innym zespołom w zakresie projektowania strukturalnego ich projektów. Zwykle jestem pod telefonem z klientami wraz z kierownikami projektów. Koduję przez większość czasu, gdy mój zespół gdzieś utknął, jest przeciążony pracą, integruje jakieś zewnętrzne API itp. Czy to, co robię, kwalifikuje się do tytułu **Kierownika ds. Rozwoju** zgodnie z moimi powyższymi opisami stanowisk?


title: Dlaczego w niektórych językach pływaki są nazywane „liczbami rzeczywistymi”?

text: Niektóre języki programowania, zwłaszcza Pascal, mają typ liczb zwany „prawdziwymi”. Jednak z matematycznego punktu widzenia te typy nie są prawdziwe. Aby były „prawdziwe”, te typy muszą być w stanie reprezentować **dowolną** liczbę rzeczywistą. Jednak liczby rzeczywiste, takie jak 1/3 i niewymierne, nie mogą być reprezentowane w postaci zmiennoprzecinkowej. Dlaczego więc niektóre języki programowania nazywają te typy „prawdziwymi”?


title: C#/.Net/rozmowa o programowaniu

text: Ostatnio zdecydowaliśmy się w naszej firmie na comiesięczną 30-60 minutową rozmowę na temat związany z programowaniem w C#/.Net lub cokolwiek innego, co uczyni nas lepszymi w naszej pracy. Obecnie programujemy w C# 3.0 z .NET 3.5 w VS 2008. Próbowałem więc wymyślić temat do rozmowy (coś, co nie jest zbyt trywialne, ale nadal można zastosować jako przewodnik dla lepszego programowania , a nie tylko doraźne rozwiązanie konkretnego problemu), ale nic nie przyszło mi do głowy. Z przyjemnością usłyszę o takich tematach, które pasują do moich potrzeb. Zapraszam do opracowania lub podania referencji do dowolnego źródła, które może pomóc :)


title: praktyki projektowe dla warstwy biznesowej przy wspieraniu wersjonowania API

text: Czy istnieje jakiś wzorzec projektowy lub praktyka zalecana dla warstwy biznesowej, gdy mamy do czynienia z wieloma wersjami API. Na przykład mam coś takiego. http://site.com/blogs/v1/?count=10 która wywołuje metodę obiektu biznesowego GetAllBlogs(int count) w celu uzyskania informacji http://site.com/blogs/v2/?blog_count=20 która wywołuje metodę obiektu biznesowego GetAllBlogs_v2(int blogCounts) Ponieważ nazwa parametru została zmieniona, stworzyłem kolejną metodę biznesową dla wersji 2. To tylko jeden przykład, ale może mieć inne istotne zmiany, dla których wymagałby stworzenia innej metody obsługującej obie wersje. Czy istnieje jakiś wzorzec projektowy lub najlepsza praktyka dla warstwy dostępu do biznesu/danych, którą powinienem przestrzegać podczas obsługi wersjonowania API?


title: Jakie są dobre słowa na określenie wielokrotności?

text: W bazach danych możesz zająć około jednego do wielu. Oznacza to, że jest jedna rzecz, która odwzorowuje zero lub więcej innych. W takim stylu szukam słów, które definiują minimalną/maksymalną ilość rzeczy. Do tej pory mam: min max jeden 1 1 wiele 0 nieskończony opcjonalny 0 1 ??? 1 nieskończoność Czy istnieje jedno słowo pasujące do „???” znaczy więcej niż jeden? Czy masz lepsze alternatywy dla „opcjonalnego”? Zastanawiam się, czy istnieją jakieś konwencjonalne nazwy dla tych pojęć?


title: Czy 25% dla mnie jako jedynego autora to dobry interes?

text: To moja pierwsza negocjacja kontraktu. Napisałem więc program, który obsługuje sprzęt produkowany przez firmę. (Wsparcie jest ważne i większość klientów je kupi, ale oprogramowanie jest ostatecznie opcjonalne.) Będzie sprzedawany za około 2 000 USD za licencję, a oni sprzedają 70-80 systemów sprzętowych rocznie. Rynek to badania biomedyczne, czyli klientami są indywidualne laboratoria badawcze na uczelniach i w szpitalach. Firma będzie hostować oprogramowanie (oczywiście) i będzie to część ich oferty marketingowej. Mówią mi, że typowy jest podział 75-25%. Naprawdę? Jak wam to pachnie? Z jakimi liczbami pracowałeś? Edycja: trochę więcej informacji. Napisałem wersję tego programu o otwartym kodzie źródłowym, która wyszła około roku. Umowa polega na napisaniu skomercjalizowanej wersji (w zasadzie więcej funkcji), którą im dałbym. Zapłacą mi trochę pieniędzy z góry, potem zapłacą mi 100% brutto do określonej kwoty (niskie sześciocyfrowe), a potem 75/25% ich/mnie na zawsze. Będą mieli wszelkie prawa i nie będę mógł zbudować kolejnego produktu w tej kategorii, dopóki będę z nimi związany.


title: Czy istnieje wzorzec projektowy lub technika w Coldufsion/Java do serializacji obiektów w różny sposób w zależności od życzeń klienta?

text: Posiadam dane dostępne w postaci Structs i Arrays. Potrzebuję porady dotyczącej wzorców projektowych, które mogę wykorzystać do modelowania tej sytuacji w odpowiednich komponentach Coldfusion. Oto definicja danych Mam obiekty takie jak * Hotel * Apartament * Autobus Każdy obiekt ma swoje atrybuty i obrazy. Obrazy mają również różne typy, takie jak miniatury, galeria itp. Atrybuty mogą być proste lub złożone Proste Atrybuty, takie jak: nazwa, kod, id itp. A złożone atrybuty są same w sobie obiektami, które mają swoje własne Atrybuty i Obrazy. Druga część to Klienci. Nasi klienci otrzymują te obiekty w postaci plików eksportu XML. Każdy klient ma swoje własne wymagania. Na przykład niektórzy chcą jednego rodzaju atrybutów, a inni chcą innych atrybutów. Niektórzy chcą, aby wyeksportować jeden typ obrazów, a niektórzy chcą, aby wyeksportowano wszystkie typy obrazów.


title: Ciągła integracja „platformy”?

text: Zgromadziliśmy dużą bazę kodu z projektami, które są dość dobrze udokumentowane, z których wiele nie jest aktywnie używanych, ale w razie potrzeby chcemy móc szybko zacząć używać ich ponownie. Jaki jest najlepszy sposób automatycznego upewnienia się, że te projekty pozostają w stanie roboczym po uaktualnieniu zależności wspierających różne projekty? Te zależności są zwykle duże, open-source i zewnętrzne, takie jak OpenCV i FFMPEG. Pomiędzy kolejnymi wersjami oferują Ostrzeżenia podczas kompilacji o użyciu niedawno przestarzałych funkcji; przeskocz więcej niż kilka wersji, a aktualizacja staje się znacznie trudniejszym zadaniem.


title: Wielkie wyzwania związane z przetwarzaniem obrazów medycznych online

text: Obecnie pracuję nad moją pracą magisterską i szukam wielkiego wyzwania związanego z przetwarzaniem obrazów medycznych online. Znam już tę stronę, ale potrzebuję wyzwania, które zawiera zestaw danych mikroskopowych, takich jak komórki, chromosomy, bakterie, wirusy itp. Z celem klasyfikacji lub rozpoznania. Jak kariotypowanie. Może ktoś pracuje w tej dziedzinie lub jego uczelnia rzuciła wyzwanie czego szukam i może mi pomóc.


title: Wychodząc z QA, jak można zdobyć tę pierwszą pracę deweloperską?

text: Pracuję w QA od 10 lat, próbując zająć się rozwojem około 5 z nich. Brałem udział w zajęciach z C++, Java i C#. Udało mi się napisać kilka narzędzi i testów jednostkowych w C# w mojej obecnej pracy i (według wszystkich kont) wykonałem dobrą robotę. Jednak 8 miesięcy temu mój pracodawca zlecił mi zadanie utworzenia nowej grupy QA. Teraz przeprowadzam ręczne testowanie i wdrażanie bez obietnicy powrotu do rozwoju. Przejrzałem tablice z ofertami pracy i jest wiele ofert pracy dla programistów internetowych, więc co jeszcze mogę zrobić, aby je zdobyć? Kupiłem kilka książek o Ruby on Rails, nad którymi planuję pracować na Macu w domu, ale nie jestem pewien, czy pracodawcy byliby zainteresowani czymkolwiek innym niż komercyjnym tworzeniem stron internetowych. Czy masz jakieś sugestie, w jaki sposób mogę wykorzystać swoje doświadczenie, aby dostać pracę jako młodszy programista? Mam na myśli taki, który pociąga za sobą programowanie; posty, które widziałem dla młodszych programistów, sprowadzają się do wykonywania wszystkich podstawowych prac poza kodowaniem. Powinni nazywać ich po prostu „Sekretarzami Technicznymi”.


title: Organizowanie klas z wieloma właściwościami, które trzeba iterować

text: Czasami, gdy pracuję z klasą (zwykle taką, która reprezentuje model bazy danych), będę miał na niej około 15 różnych właściwości, zwykle różnych typów. Są to właściwości, które również muszą być dostępne dla użytkowników, więc każda właściwość będzie zazwyczaj wymagała jakiejś funkcji, takiej jak T getPropertyName(); setPropertyName(wartość T); Ale jest też dla mnie niezwykle cenna możliwość iteracji przez każdą właściwość **w określonej kolejności** (chociaż przypuszczam, że „wartość” może wynikać z lenistwa polegającego na tym, że nie trzeba wpisywać każdej z nich osobno). Czy jest jakiś logiczny sposób na skonfigurowanie tej klasy, abym mógł iterować przez nią w tej kolejności? A może jestem bezradny dla organizacji i powinienem wrócić do podstaw posiadania 15 zmiennych prywatnych oraz 15 „getterów” i „setterów”? Na marginesie, obecnie pracuję z Androidem i Javą, więc odpowiedzi odnoszące się konkretnie do tego byłyby najbardziej pomocne, ale widząc, jak często spotykam się z tym w innych językach, każde rozwiązanie byłoby idealne. **Edycja:** Myślałem o użyciu czegoś podobnego do pakietu z listą kluczy, ale nie wiem, na ile to naprawdę byłoby skuteczne.


title: Sposób na zwrócenie wielu wartości zwracanych z metody: umieść metodę wewnątrz klasy reprezentującej zwracaną wartość. Czy to dobry projekt?

text: Muszę zwrócić 2 wartości z metody. Moje podejście jest następujące: 1. stwórz klasę wewnętrzną z 2 polami, które będą używane do przechowywania tych 2 wartości 2. umieść metodę wewnątrz tej klasy 3. stwórz instancję klasy i wywołaj metodę. Jedyną rzeczą, która zostanie zmieniona w metodzie jest to, że na końcu przypisze te 2 wartości do pól instancji. Następnie mogę zająć się tymi wartościami, odwołując się do pól tego obiektu. Czy to dobry projekt i dlaczego?


title: Jak transfery danych różnią się na smartfonach: iPhone vs. Android vs. Windows Phone

text: Interesuje mnie, w jaki sposób każdy smartfon może obsługiwać transfer danych w aplikacji innej firmy. Interesuje mnie projektowanie aplikacji, które umożliwiają klientom aktualizowanie, przesyłanie, pobieranie itp. danych ze smartfona na komputer osobisty i odwrotnie. (Poczynając od tekstu, przez XML, po relacyjną bazę danych) Mam tylko doświadczenie z iPodem Touch i jedną konkretną aplikacją, która utrzymywała wszystkie dane na serwerze online, więc aby zaktualizować dane na komputerze lub iPhonie, trzeba było przejść do trybu online, czy są na to inne sposoby? Jak Bluetooth, bezprzewodowa sieć LAN, USB itp.? Uważam, że Apple ma pewne zasady w tym zakresie, aby kontrolować App Store i poszczególne iPhone'y. Przypuszczam, że każda firma ma określoną politykę dotyczącą tego, w jaki sposób aplikacja może przesyłać dane do innego systemu, czy ktoś dobrze to rozumie? Dziękuję Ci.


title: Nowicjusz szukający porady na temat programowania w ogóle

text: Potrzebuję, aby niektórzy z was pamiętali czasy, kiedy mogliście być kiepscy w programowaniu... Pracuję w nowej pracy (jako programista) od kilku miesięcy, minął okres próbny. Masz bardzo małe doświadczenie w programowaniu (tylko C++) i obecnie pracuję z asp.net MVC i silverlight. Jest więc strona internetowa, nad którą firma pracowała i łączę się z wysiłkiem, aby ją ulepszyć, naprawić błędy itp. Problem w tym - poznanie systemu/strony, która już została wykonana, poprzez visual studio. ZAWSZE czuję się OGROMNIE przytłoczony, nigdy nie wiedząc, na którą część tej linii powinienem spojrzeć i ogólnie mam wiele problemów z uzyskaniem pełnego obrazu. Samo studio wizualne jest czymś, z czym trudno mi się uporać, nie mówiąc już o frameworku asp.net. Odnoszę wrażenie, że ponieważ moi współpracownicy mają większe doświadczenie ode mnie, dostają wszystkie dobre prace, a ja mam gówno do roboty – rzeczy, które nawet mgliście nie są programowaniem. Oznacza to, że uczą się/tworzą więcej, a ja uczę się/tworzę prawie nic. Staję się zdemoralizowany i zbyt przerażony, żeby cokolwiek powiedzieć. Nie jestem głupi, przeczytałem i przećwiczyłem wiele podstawowych koncepcji programowania... Po prostu cholernie się boję tego cholernego frameworka. Patrzę na to i po prostu czuję się sparaliżowany. W rezultacie ciągle zadaję pytania starszemu weteranowi, a on zaczyna się irytować i woli dawać mi łatwe/bezmyślne/nieprogramujące prace, aby nie tracić czasu na pomaganie mi. Potem, kiedy czegoś nie rozumiem, waham się, czy powinnam go jeszcze zapytać, i zastanawiam się, czy byłaby to strata czasu. Jestem typem osoby, która odbiera rzeczy powoli, ale z dużą dbałością o szczegóły. Myślę jednak, że ta pierwsza sprawia, że wyglądam na niekompetentną. Ktokolwiek dotrze tam, skąd pochodzę, proszę powiedz coś pomocnego....Boję się, że stracę pracę za kilka miesięcy lub coś...


title: Osadzać Pythona w Lua?

text: Znalazłem wiele rzeczy na temat osadzania Lua w Pythonie, ale zastanawiałem się, czy można osadzić Pythona w Lua? Szukałem przez chwilę i nie mogłem nic znaleźć, więc może część społeczności StackExchange wie. To nic wielkiego, jeśli _nie_ jest_ możliwe, ale jeśli jest, to może być naprawdę świetne dla gry Lua, nad którą obecnie pracuję, używając LÖVE. Dziękuję! :)


title: Technologia/Programowanie list mailingowych Jak zarządzasz?

text: Powiadomienia e-mail, aktualizacje bloga/forum, subskrypcje dyskusji ogólne e-maile o aktualizacjach oprogramowania/technologii, które często subskrybujemy. Czy rzeczywiście je czytasz? lub udaj się bezpośrednio do źródła, gdy znajdziesz czas. Często możemy otrzymać pocztę programistów wypełnioną mnóstwem nieprzeczytanych listów subskrypcyjnych z technologii, nad którymi wcześniej obserwowali lub pracowali lub rzeczy, które chcieliby śledzić. Osobiście mam kilka aktualizacji, które chciałbym przeczytać, ale ciągle unikam i trzymam je na później, a na koniec je usuwam, starając się zachować czystość w pudełku. Nasuwa się kilka pytań na ten temat * Czy przechowujesz taką pocztę na oddzielnych kontach? * Czy czytasz całą subskrybowaną pocztę? * Czy kiedykolwiek anulujesz subskrypcję takich e-maili, jeśli ich nie czytasz? * Jak bardzo cenisz te e-maile. * Wreszcie, czy utrzymujesz swoje pudełko w czystości? chcą sobie z tym poradzić w lepszy sposób.


title: Statyczne i dynamiczne języki programowania

text: Ktoś, kto dopiero zaczynał programować, zapytał mnie o zalety różnych podejść do języków programowania. Na przykład niektóre pozwalają programiście pominąć deklaracje zmiennych i po prostu z nich korzystać (jak PHP). Inne wymagają deklaracji, ale niekoniecznie z typem. A inne wymagają pełnej deklaracji zmiennej (łącznie z jej typem). Jaka jest więc zaleta każdego podejścia? Dlaczego lepiej (nie) deklarować zmiennej i/lub jej typu? Te, które moim zdaniem nie wymagają typu, pozwalają programiście na większą wydajność. Możesz po prostu wziąć zmienną i użyć jej, zamiast zastanawiać się, jaki może mieć typ w chwili, gdy jej potrzebujesz. I potencjalnie możesz później zmienić jego typ. Ale czy jest w tym coś więcej?


title: Usunięcie bazy danych w Grails jest zbyt łatwe. Jak zapobiegać przypadkowym upadkom?

text: Właśnie upuściłem produkcyjną bazę danych. Stało się tak, ponieważ użyłem dbCreate = "create" zamiast "update" w DataSource.groovy. Zmieniałem niektóre modele domen i chciałem zaktualizować bazę danych. Wartość dbCreate była pustym ciągiem ("") i przypadkowo zmieniłem ją na "create" zamiast "aktualizacji". Jak mogę temu zapobiec w przyszłości (mądrze lub ogólnie)?


title: IOC w czasie kompilacji

text: Czy ktoś rozpoczął projekt, aby zrobić IOC w czasie kompilacji (prawdopodobnie przy użyciu Roslyn lub Linq MethodInfo emit)? Moje doświadczenie z kontenerami IOC do tej pory było świetne, z kilkoma drobnymi problemami 1. Wiele kontenerów IOC uruchamia się powoli, ponieważ większość logiki rozwiązywania występuje tutaj 2. Często trudno jest zapewnić, że rozdzielczość jest możliwa, ponieważ kompilacja nie zapewnia już, że konstruktor można nazwać 3. Często kontenery IOC dodają niewielki narzut do środowiska wykonawczego (niektóre nie są nawet małe, często te, które uruchamiają się szybko, działają powoli) Wydaje mi się, że idealnym rozwiązaniem byłoby dodaj krok kompilacji do łańcucha kompilacji, który dodaje klasę Factory zamiast IOC. Czy ktoś to zrobił wcześniej? Jeśli nie, dlaczego nie?


title: Jaki jest sens przekazywania parametru przez odwołanie w C#?

text: > **Możliwy duplikat:** > Dlaczego obiekty są przekazywane przez referencję? Czy C# nie wysyła samych obiektów? Więc jeśli nie jest to jakiś rodzaj funkcji wymiany dla zmiennych wpisanych prymitywnie - dlaczego miałbym wysłać obiekt przez referencję?


title: Jakie było najgorsze doświadczenie z klientem/użytkownikiem?

text: Jako programista musisz w jakiś sposób komunikować się ze swoimi użytkownikami/klientami, aby zarówno rozwijać, jak i wspierać oprogramowanie, za które płacą. > Jakie było najgorsze doświadczenie z tych interakcji? Czego nauczyłeś się z tego doświadczenia? Dlaczego taka sytuacja się wydarzyła? Jak możesz tego uniknąć w przyszłości? Interesują mnie również najlepsze doświadczenia, jakie masz, i dlaczego różniły się od najgorszych. i jak możesz je odtworzyć.


title: Najlepsze praktyki dotyczące rejestrowania i śledzenia w .NET

text: Dużo czytałem o śledzeniu i rejestrowaniu, próbując znaleźć jakąś złotą zasadę dla najlepszych praktyk w tej sprawie, ale nie ma żadnej. Ludzie mówią, że dobrzy programiści tworzą dobre śledzenie, ale ujmując to w ten sposób, musi to wynikać z doświadczenia. Czytałem też podobne pytania tutaj i przez internet i nie są to te same pytania, o które pytam, albo nie mam satysfakcjonującej odpowiedzi, być może dlatego, że w pytaniach brakuje szczegółów. Tak więc ludzie mówią, że śledzenie powinno w pewnym sensie powielać doświadczenie debugowania aplikacji w przypadkach, gdy nie można dołączyć debugera. Powinien zapewniać wystarczający kontekst, aby można było zobaczyć, która ścieżka jest wybierana w każdym punkcie kontrolnym w aplikacji. Idąc głębiej, można nawet odróżnić śledzenie od rejestrowania zdarzeń, ponieważ „rejestrowanie zdarzeń różni się od śledzenia tym, że rejestruje główne stany, a nie szczegółowy przepływ sterowania”. Teraz powiedzmy, że chcę wykonać śledzenie i rejestrowanie przy użyciu tylko standardowych klas .NET, tych w przestrzeni nazw `System.Diagnostics`. Uznałem, że klasa TraceSource jest lepsza do zadania niż statyczna klasa Trace, ponieważ chcę rozróżnić poziomy śledzenia i korzystając z klasy TraceSource mogę przekazać parametr informujący o typie zdarzenia, natomiast korzystając z klasy Trace muszę używać „Trace.WriteLineIf”, a następnie weryfikuj takie rzeczy jak „SourceSwitch.TraceInformation” i „SourceSwitch.TraceErrors”, a nie ma nawet właściwości takich jak „TraceVerbose” lub „TraceStart”. Mając to wszystko na uwadze, czy dobrym rozwiązaniem byłoby wykonanie następujących czynności: * Śledzenie zdarzenia „Start” podczas uruchamiania metody, które powinno reprezentować pojedynczą operację logiczną lub potok, wraz z ciągiem reprezentującym przekazywane wartości parametrów w metodzie. * Śledź zdarzenie „Informacje” podczas wstawiania elementu do bazy danych. * Śledź zdarzenie „Informacje”, gdy wybierasz tę lub inną ścieżkę w ważnym oświadczeniu „jeśli/w przeciwnym razie”. * Śledź „Krytyczny” lub „Błąd” w bloku catch w zależności od pogody jest to błąd, który można naprawić. * Śledź zdarzenie „Stop” po zakończeniu wykonywania metody. A także wyjaśnij, kiedy najlepiej śledzić typy zdarzeń Verbose i Warning. Jeśli masz przykłady kodu z ładnym śledzeniem/logowaniem i chcesz się nimi podzielić, to byłoby świetnie. **Uwaga:** Znalazłem tutaj kilka dobrych informacji, ale nadal nie to, czego szukam: http://msdn.microsoft.com/en-us/magazine/ff714589.aspx Z góry dziękuję!