title: Najlepszy sposób na powiadomienie klienta w czasie rzeczywistym o zakończeniu jego kolejki (np. zadania SQS)?

text: **Aktualny scenariusz** Nasza aplikacja umożliwia użytkownikom przesyłanie (Amazon S3) i zarządzanie plikami za pośrednictwem naszego interfejsu. Obecnie użytkownicy ci mogą pobierać pliki bezpośrednio z S3/Cloudfront za pośrednictwem naszej aplikacji. **Dodawanie funkcji Zip** Chcielibyśmy dodać do systemu funkcję, która pozwala użytkownikom wybierać wiele plików jednocześnie i pobierać je jako plik zip. Chcielibyśmy, aby proces działał w czasie rzeczywistym, aby po kliknięciu przez użytkownika przycisku w celu pobrania pliku zip system przetwarzał żądanie, kompilował plik zip i zwracał go użytkownikowi końcowemu. Gdy proces jest uruchomiony, fronton poinformuje użytkownika, że jego żądanie jest przetwarzane, a po jego zakończeniu poprosi go o pobranie pliku. **Proponowana strategia** Nasza aplikacja jest oparta na chmurze AWS, więc moim pierwszym odruchem jest użycie Amazon SQS (ale jestem otwarty na inne sugestie) do zbudowania systemu kolejek do obsługi tych żądań. Przepływ działałby w następujący sposób: 1. Użytkownik wybiera pliki i żąda utworzenia pliku zip. 2. Front-end wysyła żądanie do SQS z plikami do skompresowania i miejscem docelowym (na S3), w którym zostanie zapisany końcowy plik zip. 3. Pracownik kolejki używa długiego odpytywania w celu sprawdzenia nowych zadań SQS. Po znalezieniu zadania pracownik pobiera pliki z S3, skompresuje je i zwraca gotowy plik zip do określonej lokalizacji w S3. 4. Teraz, gdy kolejka zakończyła przetwarzanie, powiadom klienta, że jego zadanie zostało wykonane, a plik jest gotowy do pobrania. **Najlepszy sposób na wykonanie kroku 4?** Ten proces wydaje się być solidnym podejściem i wszystko ma sens aż do kroku 4. Zmagamy się z najlepszym sposobem powiadamiania użytkownika końcowego w czasie rzeczywistym, że jego praca została zakończona a ich plik jest gotowy do pobrania. Z moich badań widziałem trzy sposoby, które ludzie sugerują: 1. Użyj pub/sub, aby utworzyć gniazdo dla zadania i zwróć odpowiedź po zakończeniu. * Ze wszystkiego, co przeczytałem, nie jest najlepszą praktyką (a czasami nie jest możliwe) tworzenie dużej liczby otwartych gniazd/kanałów pub/sub. Ponadto, w jaki sposób SQS powiadamia otwarte gniazdo, że zadanie zostało ukończone? Ten artykuł dotyczący Amazon SNS początkowo wyglądał obiecująco, ale wydaje się, że najlepszym rozwiązaniem jest użycie jednego tematu SNS dla całej kolejki, a nie jednego tematu SNS na zadanie. Wydaje się to świetnym podejściem, gdybyśmy po prostu chcieli wysłać e-mail do użytkownika, informując go, że jego praca się zakończyła. Jednak chcę mieć możliwość aktualizacji interfejsu użytkownika w przeglądarce internetowej. 2. Ciągłe odpytywanie przez serwer frontonu gotowego pliku zip na S3. * Jeśli istnieją tysiące jednoczesnych zadań, spowoduje to powstanie tysięcy żądań. Takie podejście nie wydaje się zbyt skalowalne i może potencjalnie kosztować dodatkowe wywołania S3 api. 3. Pozostaw otwarte, długotrwałe żądanie * Ze względu na fakt, że jeśli w kolejce jest wiele zadań, czas potrzebny na dostarczenie odpowiedzi może spowodować przekroczenie limitu czasu żądania. Ponadto powoduje to duże obciążenie/zmarnowanie zasobów na frontowym serwerze sieciowym. Ponownie, niezbyt skalowalny. **Moje pytanie** Biorąc pod uwagę punkty, o których wspomniałem powyżej, jaki jest najlepszy sposób na powiadomienie klienta front-endu, że jego kolejka zadań zakończyła się i plik jest gotowy do pobrania? Świetnym przykładem tego, co próbuję zrobić, jest YouTube. Gdy przesyłasz film do YouTube, ich kolejka przetwarza Twój film, a po jej zakończeniu powiadamia Cię, że przetwarzanie filmu zostało zakończone. Próbuję powtórzyć tę samą koncepcję, z wyjątkiem tego, że w moim scenariuszu chcę tylko, aby klient wiedział, kiedy plik zip został przygotowany i przesłany do S3. Znam rozwiązania teoretyczne, więc proszę o konkrety. Jestem otwarty na wszelkie sugestie, niezależnie od tego, czy korzystają z SQS, czy którejkolwiek z wymienionych przeze mnie technologii/metodologii. Wskazywanie na jakiekolwiek przykłady kodu tego typu w świecie rzeczywistym byłoby dużym bonusem. Z góry dziękujemy za wspaniałą pomoc!


title: Przykład wyjaśniania pojęć obiektowych

text: Jakie są _dobre_ przykłady ilustrujące koncepcje programowania obiektowego? Mówię o przykładowych klasach, klasach, które miałyby dziedziczenie, nadpisywanie itp. Jedyne, o czym przychodzi mi do głowy, to zwierzęta. Podstawowa klasa `Animal` z `Cow`, która ma inną metodę `makeCry` lub coś w tym rodzaju. To jest do bani. Czego używacie?


title: Jaka jest relacja między Dynamic Language Runtime a C# 4.0?

text: Powiedzmy, że chciałem stworzyć kompilator/interpreter języka dynamicznego, być może interpreter schematów, na platformie .NET, która istnieje dzisiaj. Czy lepiej byłoby użyć Dynamic Language Runtime (DLR) lub użyć C# 4.0 do zaimplementowania dynamicznych funkcji mojego języka? Czy potrzebuję obu? Wiem, że wykonano inne prace w tej dziedzinie, w szczególności z IronScheme i IronPython. Oba te języki używają DLR; Uważam, że IronPython używa najnowszej wersji DLR (która ma około roku), podczas gdy IronScheme używa wczesnej, mocno zmodyfikowanej wersji wczesnej wersji DLR. Ale C# 4.0 nie był dostępny podczas tworzenia tych kompilatorów. Widziałem pracę Roba Conery z Massive, używając dynamicznych funkcji C# 4.0; to robi wrażenie. Ale czy C# wytrzymałby na pełną skalę wysiłek kompilatora/interpretera języka dynamicznego? Czy w DLR są funkcje, których brakuje w C#, czy też DLR został zasadniczo wdrożony do C# 4.0? Czy pominąłbym jakieś ważne funkcje DLR, gdybym używał wyłącznie C# 4.0?


title: Jak zaprojektować skalowalny system powiadomień?

text: Muszę napisać menedżera systemu powiadomień. Oto moje wymagania: muszę być w stanie wysłać powiadomienie na różne platformy, które mogą być zupełnie inne (na przykład muszę być w stanie wysłać SMS lub e-mail). Czasami powiadomienie może być takie samo dla wszystkich odbiorców dla danej platformy, ale czasami może to być powiadomienie na odbiorców (lub kilku) na platformę. Każde powiadomienie może zawierać ładunek specyficzny dla platformy (na przykład wiadomość MMS może zawierać dźwięk lub obraz). System musi być **skalowalny** , muszę mieć możliwość wysyłania bardzo dużej ilości powiadomień bez awarii aplikacji lub serwera. Jest to proces dwuetapowy, najpierw klient może wpisać wiadomość i wybrać platformę do wysłania, a powiadomienie (powiadomienia) powinno zostać utworzone do przetworzenia w czasie rzeczywistym albo później. Następnie system musi wysłać powiadomienie do dostawcy platformy. * * * Na razie mam kilka, ale nie wiem, jak będzie skalowalny i czy jest to dobry projekt. Pomyślałem o następujących obiektach (w pseudojęzyku): ogólny obiekt `Notification`: class Notification { String $message; Ładunek $ładunek; Kolekcja<Odbiorca> $recipients; } Problem z następującymi obiektami polega na tym, że mam 1.000.000 odbiorców? Nawet jeśli obiekt `Recipient` jest bardzo mały, zajmie zbyt dużo pamięci. Mógłbym również utworzyć jedno Powiadomienie na odbiorcę, ale niektórzy dostawcy platform wymagają ode mnie wysłania go zbiorczo, co oznacza, że muszę zdefiniować jedno Powiadomienie z kilkoma Odbiorcami. Każde utworzone powiadomienie może być przechowywane w trwałym magazynie, takim jak DB lub Redis. Czy dobrze byłoby zagregować to później, aby upewnić się, że jest skalowalne? W drugim kroku muszę przetworzyć to powiadomienie. Ale jak mogę odróżnić powiadomienie do odpowiedniego dostawcy platformy? Czy powinienem użyć obiektu takiego jak „MMSNotification” rozszerzającego „powiadomienie abstrakcyjne”? lub coś w stylu `Notification.setType('MMS')`? Aby umożliwić przetwarzanie wielu powiadomień w tym samym czasie, myślę, że system kolejki wiadomości, taki jak RabbitMQ, może być właściwym narzędziem. Czy to jest? Umożliwiłoby mi to ustawianie wielu powiadomień w kolejce i kilku pracowników do wyskakujących powiadomień i ich przetwarzania. Ale co, jeśli muszę grupować odbiorców, jak pokazano powyżej? Następnie wyobrażam sobie obiekt `NotificationProcessor`, do którego mógłbym dodać `NotificationHandler`, każdy `NotificationHandler` byłby odpowiedzialny za połączenie dostawcy platformy i wykonanie powiadomienia. Mogę również użyć `EventManager`, aby umożliwić zachowanie wtyczek. Jakieś opinie lub pomysły? Dzięki za poświęcenie czasu. Uwaga: _Jestem przyzwyczajony do pracy w PHP i prawdopodobnie jest to język, który wybieram._ * * * **Edytuj** _(zgodnie z odpowiedzią morphunreal)_ * Ile wiadomości na sekundę wysyłasz (Definiuj bieżący/ poziomy początkowe, zdefiniuj maksymalny poziom, który system powinien obsłużyć przed przeprojektowaniem) * Jakie ograniczenia sprzętowe ma system (pamięć, procesor itp. dostępne dla systemu) * Jak będzie skalować sprzęt (tj. dodanie większej liczby serwerów, przetwarzanie w chmurze itp) * * * * Jakie języki/systemy będą generować powiadomienia? Jestem sam, jestem odpowiedzialny za tworzenie powiadomień programowo, ale zbudowane z interfejsu użytkownika. * Czy generator zna odbiorców wiadomości (?) czy są oni dostarczani w inny sposób (np. reguły biznesowe dla niektórych typów alertów trafiają do określonych odbiorców) Powinno być możliwe utworzenie powiadomienia dla określonych odbiorców, grupy odbiorców (np. za pomocą systemu tagów) lub dla całej platformy. * Czy istnieją zasady biznesowe dotyczące dodawania potwierdzeń CC/UDW/odczytu Tak. Zauważ, że jest to naprawdę specyficzne dla platformy, a odczyt lub cc nie są dostępne na wszystkich platformach. * Czy generator zna typ wiadomości, którą wysyła (np. SMS/e-mail) czy też bazuje na odbiorcy. Opiera się na odbiorcy, jednak ponieważ odbiorca jest powiązany z platformą, a platformy mają inny sposób obsługi danych, interfejs użytkownika prawdopodobnie będzie specyficzny dla platformy, aby umożliwić konfigurowanie obrazów, dźwięku lub czegoś podobnego. * Czy generator wymaga potwierdzenia wysyłania/odbierania/odczytu wiadomości (asynchroniczne vs wysyłanie synchroniczne) Cóż, system powinien być podatny na błędy, ale chcielibyśmy obsłużyć błąd w celu zdefiniowania zestawu reguł, na przykład jeśli serwer jest nieosiągalny , powiadomienie powinno zostać ponownie umieszczone w kolejce do dalszego przetwarzania, ale jeśli powiadomienie jest nieprawidłowe (lub zostało zdefiniowane przez dostawcę platformy), nie powinno być ponownie umieszczone w kolejce, ale zgłoszone. * Czy istnieją wymagania dotyczące przechowywania historii źródeł/odbiorców wiadomości (jak długo?) Tak, prawdopodobnie będziemy chcieli tworzyć statystyki i raportować. * Zdefiniuj punkty końcowe powiadomień * * * * Jakie usługi są używane do wysyłania wiadomości? Zależy, niektóre są klasycznymi usługami internetowymi REST, inne to jakiś egzotyczny protokół, tak naprawdę zależy to od dostawcy. * Jakie informacje zwrotne/potwierdzenia są przesyłane (synchronizacja/asynchronizacja) Zależy, niektóre są synchroniczne i odpowiadają z błędem, podczas gdy inne trzeba później pobrać, aby sprawdzić, czy nie występują błędy. * Czy prawdopodobne jest dodanie nowych punktów końcowych [nawet jeśli tak, to czy w ogóle trzeba to wyabstrahować] Tak, w rzeczywistości nasza aplikacja się rozwija i prawdopodobnie chcemy mieć możliwość dodania nowego dostawcy, ale jest to stosunek czegoś jak 1 lub 2 rocznie.


title: Pracodawcy i własność intelektualna

text: Słyszałem o firmach, które wymagają od swoich programistów podpisania umów, które mówią, że _dowolny_ kod opracowany przez tego programistę, gdy są tam zatrudnieni, należy do firmy. Jestem bardzo nieswojo z tego rodzaju umową. Jak powszechna jest ta praktyka?


title: Co sprawiło, że jQuery jest tak popularne? Jakie są oferty, których nie oferują inne biblioteki JavaScript?

text: Według W3Tech, ten link, ten link, ten link i wiele innych źródeł, jQuery naprawdę staje się tym, czego doświadczyła IE w świecie przeglądarek internetowych (zdobywając ponad 80% rynku na jakiś czas). Nie mam wiedzy na temat innych bibliotek JavaScript, takich jak MooTools, YUI itp., ponieważ kiedy zaczynałem tworzenie stron internetowych, jQuery był już na czele i wybrałem go. Czy inne biblioteki są naprawdę takie okropne, czy może brakuje im czegoś, co ma wyłącznie jQuery? Jaki jest powód tego ogromnego udziału w rynku?


title: Radzenie sobie z „brudnym” klientem Ruby on Rails

text: Około miesiąc temu musiałem opuścić startup z powodu braku funduszy. Zasadniczo ten klient chciał, aby aplikacja umożliwiała wykonawcom tworzenie, aktualizowanie, odczytywanie i usuwanie znaków towarowych. Proste rzeczy, prawda? Nie całkiem. Więc dzisiaj otrzymałem telefon od tego samego klienta, który twierdził, że rozmawiał z „ktoś, kto tworzy z głównym zespołem Ruby on Rails” i twierdził, że „programista” powiedział, że mój kod jest „śmieci” i że nie ma kontrolerów i modele i że jest po prostu automatycznie generowany kod ROR (zakładałem, że miał na myśli „rusztowanie”). To nie tylko automatycznie generowany kod „ROR”. Więc klient chce teraz odzyskać swoje pieniądze i nie chce mi płacić pieniędzy, które jest mi winien. Jeden z kontrolerów to po prostu proste tworzenie, pokazywanie, usuwanie, aktualizacja i dołączyłem akcję „mapa” do przeglądania znaków placów (jest to aplikacja dla wykonawców/właścicieli domów – kod był dzień po opracowaniu, ale to jest tylko jeden kontroler z reszty aplikacji i jest częścią jedynego zatwierdzenia, które mogłem pobrać.Reszta kodu została od tego czasu usunięta, gdy mój dysk twardy uległ awarii, więc nie mam pełnej kopii aplikacji sam bankomat). Muszę również powiedzieć, że twierdzi, że „inni programiści go oszukali i odeszli”, w co teraz nie wierzę. Wierzę, że odeszli, bo to wykorzystywali. Czy jestem w błędzie? Szczerze nie wiem co tu robić. Czy jest to przypadek nietechnicznego klienta, który oczekuje „więcej linijek kodu” dla swojej dość prostej/małej aplikacji? Co mogłem dodać, aby zadowolić tego klienta? Uwielbiam uczyć się na swoich błędach, ale szczerze mówiąc, nie sądzę, żebym ich popełniła.


title: OCCI dla aplikacji innych niż web

text: Piszę aplikację nie-webową (napisaną w java), która będzie alokować zasoby w chmurze. Chcę, aby był kompatybilny z jak największą liczbą dostawców. Czy mądrze jest używać interfejsu OCCI? Czy będzie to zbyt skomplikowane?


title: Co mam zrobić, gdy znajdę poufne informacje w kontroli wersji?

text: Dzisiaj znalazłem coś, co wyglądało na hasło mojego przełożonego w jakimś kodzie w kontroli wersji. Hasło jest do bazy danych. Jest bardzo doświadczony i wyjaśnił wcześniej, jak uniknąć posiadania haseł w kodzie źródłowym. Jak mam sobie poradzić z tą sytuacją? Czy istnieją najlepsze praktyki dotyczące zachowywania dowodów na lukę w zabezpieczeniach, czy też powinienem usuwać takie dane, gdy tylko je zobaczę? Nawet jeśli usunę dane z bieżącej wersji, nadal istnieje historia wersji. Czy zamiast tego powinienem powiadomić mojego przełożonego?


title: Wykorzystanie C++/Java do tworzenia oprogramowania i jego sprzedaży

text: Wiem, że to pytanie zostało już tutaj zadane, a także wiem, że ta strona jest przeznaczona tylko do pytań dotyczących programowania, ale proszę zrób wyjątek, ponieważ żaden z postów, które natknąłem się na tej stronie lub innych, nie odpowiedział na to pytanie poprawnie (jest zbyt wiele ifs). Planuję opracować program, który zamierzam później sprzedawać. Próbuję zdecydować się na język kodowania i zawęziłem się do C++ lub Javy. Przejrzałem licencje GPL v2 i v3 używane dla GCC i OpenJDK GNU (tak, rozumiem trochę legalnych rzeczy, ale oczywiście nie wszystkie). Ale jest jeden punkt, w którym **wszyscy** są niejasni (to powinna być jedna z pierwszych odpowiedzi, IMO): jeśli stworzę program w C++/Java i skompiluję go za pomocą kompilatora GCC lub kompilatora OpenJDK, czy mogę sprzedać go bez konieczności umieszczania mojego programu na GPL? O ile wiem, mam pełne prawa do przypisywania dowolnej licencji do mojego programu, ale jest pewien haczyk: w licencji jest napisane, że nie powinienem linkować do żadnej biblioteki objętej GPL. Jeśli tak, będę musiał wydać swój program na licencji GPL. Teraz nie wiem, co w C++/Java jest uważane za bibliotekę, więc jeśli używam normalnych rzeczy w C++ (iostream, lista, mapa itp.) lub normalnych klas/interfejsów Java dostępnych jako część standardowego JDK 6 dystrybucji (String, List, Map itp.), czy stanowi to „połączenie z bibliotekami”?


title: Regularne kodowanie dojo

text: Czy uważasz za rozsądne regularne ćwiczenie kodowania dojo? Rozumiem, że dojo może być dobrym punktem wyjścia do zapoznania kogoś z pewnym podejściem, ale jaki jest sens regularnego tworzenia podobnych dojo? Mamy więc obecnie dwa zespoły, które pracują nad prawdziwym projektem napisanym w TDD. Jeden zespół chce regularnie pracować nad dojo zorientowanymi na TDD, a inny woli ćwiczyć to tylko na prawdziwych zadaniach. Kto ma rację?


title: Własność zadań w Wordpress - CSS - Projektant czy programista?

text: Mamy spór o to, kto jest właścicielem jakich zadań, jeśli chodzi o CSS w naszej aktywnej witrynie. Nasz projektant twierdzi, że nie jest odpowiedzialny za logowanie się do wordpress i modyfikowanie css lub używanie ftp do jakichkolwiek zmian, ponieważ to nie jest jego opis stanowiska, podczas gdy programista twierdzi, że skoro jest css, to należy do projektanta i że ma aktualizować zmiany na serwerze, a następnie porównaj i popraw dane wyjściowe. Chciałbym, aby doświadczeni ludzie pracujący w środowisku rozwoju zawodowego rzucili światło na ten scenariusz. Nie jestem pewien, czy to jest właściwe miejsce, aby zadać to pytanie, czy istnieje osobne forum na pytania dotyczące rozwoju biznesu lub zarządzania projektami?


title: Jak należy ustrukturyzować aplikację C#, która odczytuje i zapisuje dane binarne?

text: Muszę czytać i pisać binarne "fragmenty" o wielkości około 1 MB każdy. Dane mogą mieć postać strumienia lub zapisanego w pamięci `byte[]`. Normalnie użyłbym `Struct` ze stałym układem, ale jest kilka właściwości tych danych binarnych, które to utrudniają: 1. Bajt 4 opisuje „wersję” porcji 2. Bajt 5 zaczyna się albo jako tablica zmienna pod-fragmentów lub jako czytelny dla człowieka obiekt typu blob 3. Każdy pod-fragment ma swoją wersję i zawiera w sobie zmienną tablicę danych. 4. Endianowość danych jest niespójna Jak powinienem ustrukturyzować program, który musi obsługiwać dane binarne w tym formacie?


title: Co deweloperzy powinni przetestować przed przesłaniem swojej pracy testerom?

text: Czy istnieje lista kontrolna, którą programista musi przejrzeć przed przekazaniem swojej pracy testerom? Na jakie warunki/przypadki deweloper musi zwrócić uwagę?


title: Zależności MEF i cyrkularne w MonoDevelop / VS

text: (Myślę, że opisany poniżej problem dotyczy również VS, chociaż testowałem go tylko w MD) Mam pewne problemy z zależnościami kołowymi. Wiem, że to zła praktyka i należy ich unikać. W ostatnich wydaniach MonoDevelop nie można nawet tworzyć zależności cyklicznych. Jednak nie mogę znaleźć łatwego wyjścia w następującym scenariuszu: Aplikacja A używa zarządzanej struktury rozszerzalności (MEF) do dynamicznego dodawania funkcji za pośrednictwem wtyczek, które mogą być opracowywane przez strony trzecie i są ładowane po prostu przez umieszczenie .Dll do folderu bin/ (DirectoryCatalog w kategoriach MEF). Ponieważ jestem programistą aplikacji A, wraz z aplikacją dostarczam kilka domyślnych wtyczek. Wtyczki mogą dostarczać DUŻO funkcji rozszerzających Aplikację A, więc mam każdą wtyczkę w nowym projekcie .csproj. Aby opracować wtyczkę, jeden (ja lub inna osoba trzecia) musi zaimplementować klasę, która implementuje interfejs. Interfejs, nazwijmy go interfejsem A, jest zdefiniowany w aplikacji A i zawiera mniej niż 50 linii kodu. W związku z tym wtyczka A wymaga aplikacji A jako zależności, ponieważ interfejs A jest zdefiniowany w zestawie aplikacji A. Ponieważ chcę używać wtyczki A w mojej aplikacji A, dodaję ją również jako odniesienie. I voila, istnieje powiązanie między tymi dwoma. Wymyśliłem rozwiązania, ale nie jestem z nich zadowolony: 1) Utwórz osobny projekt i umieść w nim TYLKO plik interfejsu. Nie podoba mi się to, ponieważ nie widzę 50-liniowego pliku .cs jako oddzielnego projektu i uważam to za „nadmierną modularyzację” 2) W ogóle nie odwołuj się do wtyczki w aplikacji A (jest to możliwe, ponieważ aplikacja A używa tylko interfejsu A - rzeczywista instancja klasy jest ładowana przez MEF). To jednak sprawia mi pewne kłopoty: nie mogę pracować na Aplikacji A i łatwo przejść do kodu Wtyczki A, aby coś naprawić. lub dodać funkcję, którą często robię - ponieważ ładuję podstawową funkcjonalność do wtyczek (jednym z głównych celów MEF jest umożliwienie modularyzacji). Mógłbym jednak uruchomić drugą instancję VS / MD. Ale to się pogarsza, im więcej wtyczek dodam, skończę z otwartymi 10 instancjami IDE - wątpię, aby jakakolwiek maszyna sobie z tym poradziła. Czy ktoś ma jakieś zalecenie, jak to właściwie zorganizować?


title: Najlepsze praktyki dotyczące współdzielonych plików w wielu urządzeniach do testów jednostkowych

text: Zastanawiałem się, jaka jest ogólna najlepsza praktyka, gdy masz wiele urządzeń do testów jednostkowych testujących różne rzeczy, które używają tych samych ścieżek plików. Moje pliki testowe znajdują się w drzewie katalogów z określonymi regułami, więc obecnie ponownie używam makr katalogów w każdym pliku, tj. #define TYPE1FILE "Type1Files/" #define TYPE2FILE "Type2Files/" #define GENERIC_FILE "generic/" #define SPECIAL_FILE "special/ " #define BAR1 PLIK1 TYPU GENERIC_FILE "/foo.txt" #define BAR2 PLIK TYPU1 SPECIAL_FILE "/foo2.txt" #define BAR3 PLIK TYPU2 OGÓLNY PLIK "/foo.txt" #define BAR4 PLIK TYPU2 SPECIAL_FILE "/foo2.txt jest uruchamiany" spowodować duplikację w wielu plikach, ponieważ wiele urządzeń testowych użyje tego samego: #define BAR1 TYPE1FILE GENERIC_FILE "/foo.txt", jeśli oba używają tego samego pliku. Wydaje się również, że lepiej dać im pewien zakres, używając zmiennych wewnątrz urządzenia lub przynajmniej w pliku. Lubię widzieć listę plików używanych w każdym teście, ale rozważam również przeniesienie wszystkich definicji BAR do współdzielonego pliku nagłówkowego. Nie przepadam za tym pomysłem, ponieważ będzie to gigantyczna lista plików bez żadnego wskazania, co jest używane gdzie. Ponadto bardziej łączy ze sobą przypadki testowe. Czy ktoś ma jakieś sugestie?


title: Jak w moim interfejsie API uprawnień mam obsługiwać obiekty, które nie istnieją?

text: Elgg projektuje API uprawnień luźno wokół modelu Activity Streams. Interfejs API użytkownika może wyglądać (w przybliżeniu) tak: function elgg_can($capability, $subject = null, $object = null, $target = null) { ... } * `$capability` to string * `$subject` to obiekt użytkownika * `$object` to obiekt, na którym działa * `$target` to kontekst, w którym akcja miałaby miejsce Np. Czy obecny użytkownik może edytować tytuł obiektu? if (elgg_can('edit title', $currentUser, $someObject)) { ... } Chciałbym poznać dobry sposób obsługi **pytania o pozwolenie na tworzenie obiektów**. Jeśli obiekt jeszcze nie istnieje, to system uprawnień nie może nic o nim wiedzieć, więc pojawia się problem z jajkiem kurzym z kilkoma oczywistymi rozwiązaniami: 1. Zezwól na przekazywanie ciągu znaków zamiast $object (np. TypeName ). 2. Umieść metadane o obiekcie w $capability. Np. `elgg_can("utwórz obiekt strony", $bieżący użytkownik, null, $grupa)`. 3. Poproś użytkownika API, aby utworzył obiekt, a następnie przekazał go do API, aby zdecydować, czy powinien on nadal istnieć. Czy brakuje mi innego oczywistego rozwiązania? Czy istnieją modele uprawnień podobne do tego (które można rozsądnie nazwać udanymi), które to obsługują?


title: Czym jest wolumen w zakresie baz danych?

text: Czytałam tekst. Stwierdzono: „Prezentacja informacji musi być zgodna z potrzebami czasu odpowiedzi systemów. Czas odpowiedzi powinien być na tyle krótki, aby informacja nie straciła na swojej świeżości i wartości, ale powinien być wystarczająco długi, aby zmniejszyć objętość (i koszty) i ujawnić ważne trendy, które sygnalizują potrzebę działania” Co oznacza w tym głośność? Proszę o pomoc. Dziękuję


title: Problemy z licencją Cover Flow?

text: Chcę zaimplementować efekt Cover Flow w mojej komercyjnej aplikacji w systemie Windows. Czy są jakieś problemy z licencją? Bo myślę, że został opatentowany przez Apple.


title: Czy powinienem zawracać sobie głowę próbami wymyślenia dla nich nazw?

text: Gdybyś natknął się na taki kod w swoich podróżach, czy te krótkie nazwy niepokoiłyby cię? let setPropertyAssignment = parser { let! a = setIdentifierName let! b = nazwawłaściwości niech! c = openParenthesis let! d = propertySetParameterList pozwól! e = closeParenthesis let! f = openCurlyBracket let! g = functionBody niech! h = closeCurlyBracket return Node(NodeType.PropertyAssignment, [a;b;c;d;e;f;g;h]) } Oto największy parser w projekcie: let iterationStatement = parser { let! a = doKeyWord niech! b = instrukcja niech! c = whileKeyWord niech! d = openParenthesis let! e = wyrażenie niech! f = closeParenthesis let! g = instrukcjaTerminator niech symbole = [a; b; c; d; mi; f; g] return Node(NodeType.IterationStatement, symbole) } +++ parser { let! a = whileKeyWord niech! b = openParenthesis let! c = wyrażenie niech! d = closeParenthesis let! e = instrukcja niech symbole = [a; b; c; d; e] return Node(NodeType.IterationStatement, symbole) } +++ parser { let! a = forKeyWord niech! b = openParenthesis let! c = możeJedno wyrażenie NoIn let! d = niech średnik! e = może Jedno wyrażenie niech! f = niech średnik! g = może Jedno wyrażenie niech! h = closeParenthesis let! i = instrukcja let symboli = [a;b] @ c @ [d] @ e @ [f] @ g @ [h;i] return Node(NodeType.IterationStatement, symbols) } +++ parser { let! a = forKeyWord niech! b = openParenthesis let! c = varKeyWord niech! d = zmiennaDeclarationListNoIn let! e = średnik niech! f = może Jedno wyrażenie niech! g = średnik niech! h = może Jedno wyrażenie niech! i = closeParenthesis let! j = instrukcja let symboli = [a;b;c;d;e] @ f @ [g] @ h @ [i;j] return Node(NodeType.IterationStatement, symbols) } +++ parser { let! a = forKeyWord niech! b = openParenthesis let! c = leftHandSideExpression let! d = inKeyWord niech! e = wyrażenie niech! f = closeParenthesis let! g = instrukcja let symboli = [a;b;c;d;e;f;g] return Node(NodeType.IterationStatement, symbole) } +++ parser { let! a = forKeyWord niech! b = openParenthesis let! a = varKeyWord niech! c = zmiennaDeklaracjaNieWpuszczaj! a = inKeyWord niech! c = wyrażenie niech! d = closeParenthesis let! e = instrukcja niech symbole = [a; b; c; d; e] return Node(NodeType.IterationStatement, symbole) }


title: Rozwój frontendu, od czego zacząć?

text: Od lat utknąłem na backendzie, pracując nad usługami internetowymi, bazami danych, SDK, API i całym tym jazzem, więc jest to obszar, który dobrze rozumiem, ale absolutnie nie mam pojęcia, jak frontend Pracuje. Jakie jest dobre miejsce na rozpoczęcie dla takiej małpy backendowej jak ja, która chce poznać najlepsze praktyki, najnowsze technologie i filozofię stojącą za nowoczesnym projektowaniem stron internetowych i ich interakcją z serwerem? Chcę być fajny jak wszystkie inne dzieciaki javascript. Dziękuję!


title: Potrzebujesz prostego, kompaktowego programu do wykonywania kilku poleceń

text: (W systemie Windows 7 64 bit)... Szukam programu, czegoś podobnego do domyślnego Terminala Windows, co muszę zrobić to: Załadować tekst z podanego adresu URL, podzielić kod na dwie zmienne, a następnie wywołać proste polecenie systemu Windows oparte na tych dwóch zmiennych. Obecnie robię to z PHP ... <?php $my_vars = file_get_contents('http://site.com/data.txt'); lista($zmienna1, $zmienna2) = rozbij($moje_zmienne); exec("moje polecenie $zmienna1 $zmienna2"); ?> To działa dobrze, ale nie lubię instalować PHP w systemie Windows dla czegoś tak prostego jak to. Szukam bardziej kompaktowego pliku, który może być uruchomiony z wiersza poleceń i nie ma wielu dodatkowych plików ani zależności, potrzebuję go również do uruchomienia na 2-3 komputerach.


title: Pracujesz nad wieloma rzeczami w pracy?

text: Byłem ciekaw, czy żonglowanie 2-3 projektami na raz jest dobrą czy powszechną praktyką, czy nie. Mówiąc 2-3 projekty mam na myśli: 1\. 1 projekt główny, 2\. 1 projekt z drobnymi ulepszeniami/zmianami i 3\. 1 projekt, który pojawia się czasami w celu naprawienia błędów Zasadniczo, ogólnie pracuję nad 2 projektami równolegle, a czasami trzeci przychodzi z trywialną poprawką. Czy to problem? Albo powinienem uczyć się pracować nad wieloma projektami w dowolnym momencie. Osobiście uważam, że ten styl pracy może mieć wpływ na to, jak szczegółowo i dogłębnie myślisz o projekcie.


title: Jak zastosować IoC (lub coś podobnego) do stałej?

text: Mam następującą klasę z następującymi członkami: public class RegistrationPresenter : EPiPresenter<IRegistrationView, LoginPage>, IDisposable { prywatny ciąg statyczny tylko do odczytu [] DefaultUserRoles = { AppRoles.RegisteredRole, AppRoles.EveryoneRole, AppRoles.ManagerUserRole }; prywatny nawigator INavigator tylko do odczytu; prywatny tylko do odczytu ISpanishProvincesHelper spanishProvincesHelper; prywatny tylko do odczytu IContentHelper contentHelper; prywatny tylko do odczytu IUserDataHelper userDataHelper; public RegistrationPresenter(IRegistrationView view, LoginPage page, INavigator navigator, ISpanishProvincesHelper spanishProvincesHelper, IContentHelper contentHelper, IUserDataHelper userDataHelper) : base(view, page) { .... } Udało mi się powiązać wszystkich członków kontenera tylko do odczytu (za pomocą elementu IoC Ninject w moim przypadku), z wyjątkiem statycznego ciągu [], którego nie wiem, jak to zrobić. Które podejście powinienem wybrać lub jak mogę zastosować IoC do wartości DefaultUserRoles, aby móc je zakpić podczas testowania jednostkowego?


title: Jak rozwiązać fundamentalny spór dotyczący przechowywania danych w chmurze?

text: Pracuję dla firmy, która niedawno zatrudniła mnie do stworzenia nowej wersji istniejącego oprogramowania, które ma już ponad 12 lat. Nowe oprogramowanie jest kompletną przeróbką starego i chcą, aby było znacznie bardziej „online” niż poprzednia wersja. Jestem jednym z dwóch programistów, drugi pracuje w firmie od ponad 20 lat i jest bliski emerytury. Problem, z którym się zmagam, polega na tym, że prawie każdy pomysł, który sugeruję, nie jest zgodny z tym, co on myśli, po prostu zostaje zestrzelony, zignorowany i zapomniany. Do tej pory wiele się poślizgnęło; nic zbyt krytycznego i rzeczy, które można później zmienić, jeśli zajdzie taka potrzeba. Jednak jesteśmy teraz w temacie przechowywania danych, które muszą być dostępne dla wszystkich klientów; chce korzystać z SQL Azure i przechowywać jak najwięcej danych w obiektach blob z ciągiem xaml, a następnie użyć DevForce IdeaBlade do wygenerowania całego kodu zaplecza. Nie jestem przekonany, myślę, że jeśli używamy rozwiązania do przechowywania SQL, powinniśmy używać tabel relacyjnych baz danych, które są znormalizowane itp. LUB nie powinniśmy w ogóle używać SQL, a być może użyć innej metody, która pozwala przechowywanie obiektów C# bezpośrednio? Co myślicie? EDYCJA: Ok, więc aby dać ludziom trochę więcej informacji, program można uznać za rodzaj aplikacji podobnej do Photoshopa, ale skierowanej na określony rynek. Użytkownicy mają dostęp do biblioteki szablonów „tła”, do których mogą następnie dodawać tekst, obrazy itp. Przeglądając bibliotekę szablonów, będą mogli filtrować je według typu, koloru itp.


title: ColdFusion 9 — Korzystanie z zakresu LOKALNEGO

text: Zaczynam używać zakresu LOKALNEGO w ColdFusion 9. Staram się rozgryźć, kiedy go używać, a kiedy NIE. Czy możesz mi powiedzieć, jakie są zalety/wady korzystania z zakresu LOKALNEGO? Czy LOCAL powinien być używany na każdej stronie, czy tylko w funkcjach? KTÓRE NALEŻY UŻYĆ? <cfset ImageHeight = 36> <cfset ImageWidth = 42> <cfoutput>  </cfoutput> LUB <cfset LOCAL.ImageHeight = 36> < cfset LOCAL.ImageWidth = 42> <cfoutput>  </cfoutput>


title: Co powinienem wziąć pod uwagę podczas konwersji z ASCII na Unicode?

text: Na przykład, gdybym miał tylko znaki ASCII, a potem przełączyłem się na Unicode, teraz muszę wziąć pod uwagę znaki specjalne i większe ciągi lub znaki. Co jeszcze w tych kwestiach powinienem wziąć pod uwagę? Zakładam, że ciąg Unicode zawiera również znaki specjalne, ale poza tym, czego mi brakuje?


title: Najlepsze praktyki dotyczące reprezentowania SQL w kodzie źródłowym programu

text: W przypadku wykonywania instrukcji SQL z programu, jaka jest najlepsza praktyka przechowywania tekstu instrukcji? Najczęściej jest to ciąg tylko do odczytu, w pliku źródłowym, w którym jest wykonywany. Myślę, że lepszym rozwiązaniem byłoby posiadanie oddzielnego pliku tekstowego zawierającego wszystkie instrukcje SQL, które są następnie wczytywane do obiektu słownika, w którym znajduje się klucz cel tego oświadczenia. Instrukcje mogą być następnie wykonywane przy użyciu ich klucza, oddzielając implementację bazy danych od programu i umożliwiając ponowne użycie instrukcji między obiektami programu. Czy to jest wydajne? Czy jest lepszy sposób? Dziękuję Ci!


title: Standardy kodowania C#” Używaj dyrektywy const tylko na stałych naturalnych

text: Widziałem te 2 wytyczne w standardzie kodowania c# i nie jestem pewien, co oznacza druga. 1. Z wyjątkiem zera i jedynki, nigdy nie koduj na stałe wartości liczbowej; zawsze deklaruj stałą. 2. Używaj dyrektywy const tylko na stałych naturalnych, takich jak liczba dni tygodnia. Jaka jest definicja stałych naturalnych i jeśli liczba nie jest stałą naturalną biorąc pod uwagę pierwszą regułę, jak można zadeklarować stałą w c# bez dyrektywy const? Jak więc druga reguła nie jest sprzeczna z pierwszą regułą dla stałych nienaturalnych? Zobacz http://www.scribd.com/doc/10731655/IDesign-C-Coding-Standard-232 dla odniesienia.


title: Porady dla początkujących programistów

text: Jestem początkującym w tworzeniu oprogramowania. Zauważyłem, że kiedy próbuję nauczyć się jednej technologii, powiedzmy .NET, tracę kontrolę nad innymi, np. Javą. Pomyślałem, że lepiej byłoby skoncentrować się na jednej technologii, Javie lub .NET, aby dokonać znaczącego postępu i być ekspertem, ponieważ mogą to być wiele szczegółów, które można zignorować, zmieniając się między technologiami. Czy moja decyzja jest słuszna? Czy eksperci wybierają takie podejście? **Aktualizacja:** Czy powinienem kontynuować karierę, znając jedną technologię, czy nie?


title: Radzenie sobie z problemami stanu w programowaniu funkcjonalnym

text: Nauczyłem się programować głównie z punktu widzenia OOP (jak większość z nas, jestem pewien), ale spędziłem dużo czasu próbując nauczyć się rozwiązywać problemy w sposób funkcjonalny. Dobrze rozumiem, jak rozwiązywać problemy obliczeniowe z FP, ale jeśli chodzi o bardziej skomplikowane problemy, zawsze wracam do potrzeb zmiennych obiektów. Na przykład, jeśli piszę symulator cząstek, będę chciał zaktualizować „obiekty” cząstek ze zmienną pozycją. W jaki sposób z natury „stanowe” problemy są zazwyczaj rozwiązywane przy użyciu technik programowania funkcjonalnego?


title: Twoje przemyślenia na temat najlepszych praktyk w zakresie obliczeń naukowych?

text: Niedawna praca Wilsona i in. (2014) wskazała 24 najlepsze praktyki programowania naukowego. Warto zajrzeć. Chciałbym usłyszeć opinie na temat tych punktów od doświadczonych programistów zajmujących się naukową analizą danych. Rady autorów brzmią dobrze, ale czy uważasz, że są one pomocne i praktyczne? Jak przyznają, wprowadzenie ich wszystkich może zająć sporo czasu i wysiłku. Na przykład umieszczanie asercji i wdrażanie testów jednostkowych z pewnością wymaga dodatkowego kodowania. Niemniej jednak, czy uważasz, że naukowcy (np. biolodzy), którzy nie mieli przeszkolenia w zakresie kodowania, powinni generalnie przestrzegać tych zasad? Jeśli niektórych z nich jest za dużo, do jakiego momentu powinniśmy iść i przestać w zależności od czego? > Wilson G, Aruliah DA, Brown CT, Chue Hong NP, Davis M, Guy RT, Haddock SHD, > Huff KD, Mitchell IM, Plumbley MD, Waugh B, White EP, Wilson P (2014) ** Najlepsze > Praktyki dla Informatyka naukowa**. _PLoS Biol_ 12:e1001745. > > > http://www.plosbiology.org/article/info%3Adoi%2F10.1371%2Fjournal.pbio.1001745 > > **Ramka 1. Podsumowanie najlepszych praktyk** > > 1. Pisz programy dla ludzi, nie komputery. > > (a) Program nie powinien wymagać od czytelników przechowywania w pamięci więcej niż kilku faktów naraz. > > (b) Spraw, aby nazwy były spójne, wyróżniające i znaczące. > > (c) Ujednolicenie stylu i formatowania kodu. > > 2. Niech komputer wykona pracę. > > (a) Spraw, aby komputer powtarzał zadania. > > (b) Zapisz ostatnie polecenia w pliku do ponownego wykorzystania. > > (c) Użyj narzędzia do budowania, aby zautomatyzować przepływy pracy. > > 3. Dokonuj stopniowych zmian. > > (a) Praca małymi krokami z częstą informacją zwrotną i korektą kursu. > > (b) Korzystaj z systemu kontroli wersji. > > (c) Umieść wszystko, co zostało stworzone ręcznie, w kontroli wersji. > > 4. Nie powtarzaj siebie (lub innych). > > (a) Każda część danych musi mieć jedną autorytatywną reprezentację > w systemie. > > (b) Modularyzuj kod zamiast kopiowania i wklejania. > > (c) Ponowne użycie kodu zamiast przepisywania go. > > 5. Planuj błędy. > > (a) Dodaj asercje do programów, aby sprawdzić ich działanie. > > (b) Korzystaj z gotowej biblioteki testów jednostkowych. > > (c) Zamień błędy w przypadki testowe. > > (d) Użyj symbolicznego debuggera. > > 6. Optymalizuj oprogramowanie tylko wtedy, gdy działa poprawnie. > > (a) Użyj profilera do identyfikacji wąskich gardeł. > > (b) Napisz kod w możliwie najwyższym języku. > > 7. Projekt i cel dokumentu, a nie mechanika. > > (a) Interfejsy dokumentów i przyczyny, a nie implementacje. > > (b) Refaktoryzacja kodu zamiast wyjaśniania, jak to działa. > > (c) Osadź dokumentację oprogramowania w tym oprogramowaniu. > > 8. Współpraca. > > (a) Użyj przeglądu kodu przed scaleniem. > > (b) Stosuj programowanie w parach, gdy chcesz poznać kogoś nowego i > gdy rozwiązujesz szczególnie trudne problemy. > > (c) Użyj narzędzia do śledzenia problemów. >> Jestem stosunkowo nowy w poważnym programowaniu do naukowej analizy danych. Kiedy w zeszłym roku próbowałem napisać kod do pilotowych analiz niektórych moich danych, napotkałem ogromną ilość błędów zarówno w moim kodzie, jak i danych. Błędy i błędy były wokół mnie przez cały czas, ale tym razem było to nieco przytłaczające. W końcu udało mi się schrupać liczby, ale myślałem, że nie dam rady dłużej znosić tego bałaganu. Należy podjąć pewne działania. Bez wyrafinowanego przewodnika, takiego jak powyższy artykuł, od tego czasu zacząłem przyjmować "defensywny styl" programowania. Książka zatytułowana „Sztuka Czytelnego Kodu” bardzo mi pomogła. Wdrożyłem skrupulatne walidacje danych wejściowych i/lub asercje dla każdej funkcji, zmieniłem nazwy wielu zmiennych i funkcji dla lepszej czytelności i wyodrębniłem wiele bitów jako funkcje wielokrotnego użytku. Niedawno wprowadziłem `Git` i `SourceTree` do kontroli wersji. W tej chwili, ponieważ moi współpracownicy są znacznie bardziej niechętni tym problemom, nie wprowadzono praktyk współpracy ( **8a,b,c)**. Właściwie, jak przyznali autorzy, ponieważ wprowadzenie wszystkich tych praktyk wymaga czasu i wysiłku, generalnie może być trudno przekonać niechętnych współpracowników do ich przestrzegania. Myślę, że pytam o opinie, ponieważ wciąż cierpię na wiele błędów, pomimo całego mojego wysiłku w wielu z tych praktyk. Naprawa błędów może być lub powinna być szybsza niż wcześniej, ale tak naprawdę nie mogłem zmierzyć poprawy. Co więcej, większość mojego czasu poświęciłem obronie, co oznacza, że obecnie nie robiłem zbyt wielu analiz danych (przestępstw). Gdzie jest punkt, na którym powinienem się zatrzymać, jeśli chodzi o produktywność? Wdrożyłem już: **1a,b,c, 2a, 3a,b,c, 4b,c, 5a,d, 6a,b, 7a,7b** Zaraz wybiorę: * *5b,c** Jeszcze nie: **2b,c, 4a, 7c, 8a,b,c** (tak naprawdę nie widziałem korzyści z używania `GNU make` ( **2c** ) do moich celów Czy ktoś mógłby mi powiedzieć, jak pomaga mi to w pracy z MATLABem?)


title: Dlaczego powinienem używać node.js jako serwera http?

text: Wiem, czym jest node.js i co robi. To, co naprawdę chcę wiedzieć, to jak działa jako serwer http? Serwer taki jak Apache otrzymuje żądanie, rozwidla proces, przydziela pamięć do procesu, obsługuje żądanie i zwalnia proces po jego zakończeniu. Jeśli otrzymujemy jednocześnie tysiące żądań http, apache czeka, aż kolejka procesów zwolni proces. W jaki sposób node.js z pojedynczym środowiskiem wątkowym obsługuje tak wiele żądań http. Wszystkie przychodzące żądania otrzymują własną pętlę zdarzeń. Wszystkie te pętle zdarzeń współdzielą tę samą pamięć. W jaki sposób używanie node.js do obsługi milionów żądań http jest bardziej skalowalne niż używanie apache?


title: Co stanowi autorstwo dokumentacji oprogramowania?

text: W nauce wystarczy intelektualny wkład w projekt, aby ktoś był autorem dokumentu. Podczas pisania dokumentacji oprogramowania oznaczałoby to, że prawie wszyscy zaangażowani w tworzenie oprogramowania byliby uwzględnieni jako współautorzy. Inaczej niż w nauce, dziwne wydaje się umieszczanie nazwisk osób, które w rzeczywistości nie pracują nad dokumentem. Jednym z powodów jest to, że dokumentacja stale się rozwija i jestem zainteresowany upewnieniem się, że współautorzy regularnie przeglądają aktualny stan dokumentu. **pytanie:** Czy przy pisaniu dokumentacji istnieją wytyczne dla kogo, poza osobami bezpośrednio współtworzącymi dokument, należy uznać za autora? _wyjaśnienie:_ Piszę dokumentację o tym, jak korzystać z oprogramowania i bazy danych open source zbudowanej przez i dla naukowców. Ponieważ ten projekt reprezentuje większość skumulowanego doświadczenia naszego zespołu w tworzeniu oprogramowania, nie mamy istniejących zasad dotyczących autorstwa dokumentacji (w przeciwieństwie do artykułów z czasopism).


title: Najlepszy sposób na przechowywanie danych między lokalnymi i zdalnymi bazami danych sql

text: Więc mam to, co wydaje się częstym pytaniem, na które nie mogę znaleźć odpowiedzi. Próbuję znaleźć ** jaka jest "najlepsza praktyka" jak zaprojektować bazę danych, która przechowuje dane lokalnie, a następnie synchronizuje te dane ze zdalną bazą danych, która jest współużytkowana przez wielu klientów**. Aby było bardziej jasne, ta zdalna baza danych miałaby wielu klientów, którzy z niej korzystają. Na przykład, gdybym miał aplikację komputerową, która przechowywała listy rzeczy do zrobienia (w SQL), które zawierały poszczególne elementy. Następnie chcę mieć możliwość wysłania tych danych do usługi sieciowej, która miała „główną” kopię wszystkich różnych informacji o klientach. **Nie martwię się problemami z synchronizacją tak bardzo, jak tylko próbuję przemyśleć rzeczywistą architekturę tabel klienta i tabel usług internetowych** Oto przykład, jak o tym myślałem: **Baza danych klientów* * list --list_client_id (klucz podstawowy, auto-inkrementacja) --list_name list_item --list_item_client_id (klucz podstawowy, auto-inkrementacja) --list_id --list_item_text **Web Based Master Database** _(Współdzielona przez wielu klientów)_ list --list_master_id --list_client_id (klucz podstawowy, autoinkrementacja) --list_name --user_id list_item --list_item_master_id (klucz podstawowy, autoinkrementacja) --list_item_remote_id --list_id --list_item_text --user_id klient może tworzyć listy rzeczy do zrobienia z elementami i synchronizować je z usługą sieciową w dowolnym momencie (tzn. jeśli utraci połączenie danych i nie będzie w stanie wysłać informacji do późniejszego t nieczynne). Usługa sieciowa zarejestrowałaby rekordy z identyfikatorami klientów jako tylko dodatkowe pola. W ten sposób klient może powiedzieć „zaktualizuj listę numer 4 pod nową nazwą”, a serwer traktuje to jako „zaktualizuj listę nr 4 użytkownika 12 pod nową nazwą”.


title: Integracja RabbitMQ i Microsoft Service Bus

text: Korzystamy lokalnie z Microsoft Service Bus (AMQP 1.0) i jesteśmy z tego całkiem zadowoleni. Niedawno rozpoczęliśmy współpracę z dostawcą, który używa RabbitMQ (AMQP 0.9.1) jako brokera komunikatów. Jak powinniśmy się integrować, aby móc odbierać ich wydarzenia? Moglibyśmy ujawnić punkty końcowe HTTP na naszej magistrali lub nawet napisać interfejs API, który mógłby wykonywać „tłumaczenia”, ale wydaje się to sprzeczne z intuicją i kłopotliwe. Nie chciałbym w ogóle instalować Rabbita w moim środowisku.


title: Algorytm klastrowania, który nie wymaga wstępnego określenia liczby wymaganych klastrów

text: Mam zestaw zapytań użytkowników z wyszukiwarki, który chcę pogrupować. Jedynym algorytmem grupowania, z jakim się dotychczas spotkałem, jest algorytm grupowania K-średnich, który wymaga zdefiniowania liczby klastrów z góry. Ale w tym przypadku nie wiem, ile klastrów istnieje w danych. Czy istnieje algorytm grupowania, który wykonuje grupowanie bez wstępnego określenia liczby klastrów?


title: Szukasz algorytmu kafelkowania mapy drzewa

text: Poszukuję algorytmu do konwersji drzewa danych na dwuwymiarowy widok mapy drzewa. http://en.wikipedia.org/wiki/Treemapping Mogę samodzielnie kolorować i rysować, ale gdyby był jakiś algorytm, taki jak: xy-withweight = treemapMyData(treedata) gdzie xy jest listą elementów danych : "x" = x punkt prawego dolnego rogu "y" = y punkt prawego dolnego rogu "waga" = może być użyte do oznaczenia koloru


title: DDD - Reguła biznesowa zależna od usługi

text: Nie rozumiem, czy domena jest wymagana do uzyskania dostępu do usługi zewnętrznej w pewnym stanie jej cyklu życia. Zasada biznesowa jest następująca: > Jeśli pracownik akceptuje aplikację JobApplication osoby poszukującej pracy, to pracownik > musi utworzyć spotkanie i przesłać je pocztą elektroniczną do osoby poszukującej pracy. Moje obecne rozwiązania to: 1 - Pozostaw odpowiedzialność za wysyłkę do klasy JobApplication domeny JobApplication { public function makeAppointment(IMailService $mailService, IMailGenerator $mailGen, \DateTime $time, Address $address = null) { $employer = $this->getVacancy ()->getEmployer(); $to->akceptuj(); $appointment = new Spotkanie($employer, $this->applicant, 'Zaproszenie na rozmowę kwalifikacyjną - '.$employer, $time, $address ?: $employer->getAddress() ); $mailService->send( $appointment->getJobSeeker()->getMail(), $appointment->getTitle(), $mailGen->generateAppointmentMail($appointment) ); zwróć $spotkanie; } } Czuję się trochę niezręcznie w związku z tą opcją, ponieważ pozostawia encję JobApplication zależną od usług pocztowych. 2 - Utwórz nową klasę AppointmentService AppointmentService { private $mailService; prywatny $mailGen; funkcja publiczna __construct(IMailService $mailService, IMailGenerator $mailGen) { $this->mailService = $mailService; $this->mailGen = $mailGen; } funkcja publiczna makeAppointmentFromJobApplication(JobApplication $application, \DateTime $time, Address $address = null) { $jobApplication->accept(); $appointment = new Appointment($application->getCompany(), $application->getApplicant(), 'Zaproszenie na rozmowę kwalifikacyjną - '.$application->getCompany(), $time, $address ?: $application->getCompany() ->pobierzAdres() ); $mailService->send( $appointment->getJobSeeker()->getMail(), $appointment->getTitle(), $mailGen->generateAppointmentMail($appointment) ); zwróć $spotkanie; } } Ta opcja jest fajna, ponieważ muszę tylko wstrzyknąć AppointmentService do kontrolera, ale pozostawia anemiczną klasę Appointment. Kiedyś przeczytałem, aby nigdy nie opuszczać swojej domeny, aby być zależnym od usług domenowych, w przeciwnym razie jest w porządku. Ale niektóre reguły biznesowe wymagają usług, które istniały poza zakresem domeny. Czy są inne opcje? **Aktualizacja - 1** Trzecia opcja wyglądałaby tak: class Employer { public function acceptApplication(JobApplication $application) { if($application->isRejected()) throw new \Exception('Nie można umówić się na odrzuconą aplikację' ); $application->setAccepted(); } funkcja publiczna makeAppointment(IAppointmentService $appointmentService, JobApplication $application, \DateTime $time, Address $address = null) { if(!$application->isAccepted()) $this->acceptApplication($application); return $appointmentService->makeAppointment($this, $application->getApplicant(), $time, $address ?: $this->getAddress()); } } class AppointmentService { private $mailService; prywatny $mailGenerator; public function makeAppointment(Employer $company, JobSeeker $jobSeeker, \DateTime $time, Address $address = null) { $appointment = new Appointment($company, $jobSeeker, 'Zaproszenie na rozmowę kwalifikacyjną - '.$application->getCompany(), $czas, $adres ); $this->mailSpotkanie($spotkanie); zwróć $spotkanie; } private function mailAppointment(Spotkanie $appointment) { return $mailService->send($appointment->getJobSeeker, $appointment->getTitle, $mailGenerator->generateApplicationAppointment()); } }


title: Jak najskuteczniej debugować kod?

text: Błędy wkradające się do kodu można zminimalizować, ale nie całkowicie wyeliminować, tak jak jest napisane - programiści to, choć wielu by się nie zgodziło, tylko ludzie. Kiedy wykryjemy błąd w naszym kodzie, co możemy zrobić, aby go wyeliminować? Jak powinniśmy do tego podejść, aby jak najefektywniej wykorzystać nasz cenny czas i pozwolić nam spędzać mniej czasu na szukaniu go, a więcej na kodowaniu? A czego powinniśmy unikać podczas debugowania? Zauważ tutaj, że nie mówimy o _zapobieganiu_ błędom; mówimy o tym, co zrobić, gdy pojawiają się błędy _do_. Wiem, że jest to szeroka dziedzina, która może w dużym stopniu zależeć od języka, platformy i narzędzi. Jeśli tak, staraj się uwzględniać odpowiedzi, takie jak sposób myślenia i ogólne metody.


title: Czy współczesne języki OO mogą konkurować z wydajnością sklepu tablicowego C++?

text: Właśnie zauważyłem, że każdy nowoczesny język programowania OO, który przynajmniej trochę znam (czyli w zasadzie tylko Java, C# i D) dopuszcza tablice kowariantne. Oznacza to, że tablica ciągów jest tablicą obiektów: Object[] arr = new String[2]; // Java, C# i D pozwalają, aby tablice kowariantne były dziurą w statycznym systemie typów. Sprawiają, że możliwe są błędy typu, których nie można wykryć w czasie kompilacji, więc każdy zapis do tablicy musi być sprawdzany w czasie wykonywania: arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException To wydaje się być strasznym spadkiem wydajności, jeśli robię wiele sklepów z tablicami. C++ nie ma tablic kowariantnych, więc nie ma potrzeby przeprowadzania takiego sprawdzania w czasie wykonywania, co oznacza brak spadku wydajności. Czy przeprowadzono jakąkolwiek analizę w celu zmniejszenia liczby koniecznych sprawdzeń w czasie wykonywania? Na przykład, jeśli powiem: arr[1] = arr[0]; można by argumentować, że sklep nie może zawieść. Jestem pewien, że istnieje wiele innych możliwych optymalizacji, o których nie pomyślałem. Czy współczesne kompilatory rzeczywiście wykonują tego rodzaju optymalizacje, czy też muszę pogodzić się z faktem, że na przykład Quicksort zawsze wykonuje O(n log n) niepotrzebne sprawdzanie czasu wykonywania? Czy współczesne języki OO mogą uniknąć narzutu związanego z obsługą tablic współwariantowych?


title: Kompleksowy system zarządzania wiedzą z CRM..napisany wewnętrznie

text: Wszyscy słyszeliśmy o Salesforce, SugarCRM i podobnych systemach, takich jak ten. Niestety w moim miejscu pracy poproszono nas o napisanie podobnego systemu (a nie o licencję lub zakup). Zasadniczo baza danych jest dość duża. Pomyśl o modułach takich jak: Grupy korporacyjne, klienci, programy, projekty, podprojekty i zarządzanie problemami. Mówiąc prościej, grupa korporacyjna ma od jednego do wielu klientów. Program zawiera jeden lub więcej projektów. Projekt ma co najmniej jeden podprojekt. A problem można utworzyć w wielu podprojektach. Oczywiście system jest nieco bardziej złożony, ale zamiast wymieniać każdy moduł, myślę, że najlepiej jest zachować prostotę. W każdym razie system w obecnym stanie ma tylko dwa zasoby, aby nad nim pracować (w zasadzie musimy to wszystko zrobić: CSS, baza danych, jquery, asp.net i C#). Zaczęliśmy dobrze od zdefiniowania strony głównej i stopki interfejsu użytkownika, tak aby można było je ponownie wykorzystać na wszystkich naszych stronach. Teraz nadchodzi najtrudniejsza część. System będzie miał około 4 tys. użytkowników końcowych, z czego 5-10% będzie jednocześnie użytkownikami. Zastanawiamy się, czy ma sens buforowanie danych z naszej bazy danych (na przykład przez 5-10 minut), a nie ciągłe uderzanie w naszą bazę danych. Powodem jest to, że niektóre z tych stron mogą mieć 5-10 filtrów wyszukiwania powiązanych ze stroną. Wyobraź sobie za każdym razem, gdy dokonujesz wyboru z pola wyszukiwania, ile trafień w bazie danych. Również niektóre z tych pól wyszukiwania układają się kaskadowo, więc wybranie na przykład początkowego menu rozwijanego może kaskadowo ustawić kilka pól rozwijanych pod nimi. Czy buforowanie jest złe, ponieważ nie znajduję zbyt wielu artykułów na temat tego, czy jest to dobry pomysł, czy nie. Pamiętaj, że system jest podobny do systemu CRM, w którym zarządzamy naszymi różnymi klientami, projektami, podprojektami, problemami itp.


title: Jak zidentyfikować potencjał do zostania programistą?

text: Jest mnóstwo informacji na temat zatrudniania kogoś, kto już jest programistą. (Lub twierdzi, że jest jednym z nich). Ale co z identyfikacją kogoś, kto ma _potencjał_ do zostania programistą, z niewielką lub żadną wiedzą? Poza oczywistymi rzeczami, których należy szukać (mądry, załatwia sprawy), czy są jakieś pytania do rozmowy kwalifikacyjnej i/lub testy, aby ustalić, czy ktoś ma potencjał, aby zostać programistą? Uwaga: nie pytam, jak powiedzieć, czy **ja** mogę nauczyć się programowania, ale jak powiedzieć, że ktoś inny jest do tego odpowiedni. **AKTUALIZACJA:** Aby zawęzić pytanie, zadaję: Czy w ogóle można z góry ustalić, czy można nauczyć się programowania? b. Jeśli tak, jak dokładnie można to ustalić? c. Jakie są dobre pytania do testów/wywiadów, aby ocenić czyjeś potencjalne zdolności? Mówię o _konkretnych_ przykładach pytań, a nie o ogólnych wskazówkach.


title: Dlaczego jest tak wiele języków programowania? Dlaczego wciąż powstają nowe języki?

text: Dlaczego jest tak wiele języków programowania? A co skłania kogoś do tworzenia języków programowania, mimo że inne języki już istnieją?


title: Czy można dzwonić do usług zewnętrznych lub bazy danych wewnątrz podmiotu?

text: Mam "silnik logiczny", który wykonuje zestaw kroków skonfigurowanych przez użytkownika. Te kroki są zapisywane w bazie danych jako encje „Krok”. Silnik pobiera pierwszy krok, a następnie wykonuje kroki, dopóki nie będzie więcej kroków do wykonania: public void Execute(details, data, Step firstStep) { var step = firstStep; while (null != krok) { krok = krok.Wykonaj(szczegóły, dane); } } Różne typy kroków są wyrażane jako klasy pochodne. Każdy z nich musi zaimplementować metodę Execute. Parametry danych i szczegółów są używane przez ten krok do wykonania pewnej logiki. O ile silnik logiczny wie, po prostu wykonuje krok po kroku bez żadnej wiedzy, co te kroki robią. **Problem:** niektóre kroki wymagają dostępu do usług zewnętrznych w celu uzyskania danych, a może nawet tej samej lub innej bazy danych, w której przechowywane są rzeczywiste encje kroku. Informacje są **zazwyczaj** wykorzystywane w innych krokach. Można powiedzieć, że niektóre kroki służą tylko do ładowania danych z zewnętrznych źródeł/bazy danych, a inne wykorzystują te dane do podejmowania decyzji. Ta separacja jest wykonywana po to, abyśmy mogli korzystać z różnych źródeł danych (o ile produkują one dla nas ten sam rodzaj danych wyjściowych) bez konieczności pisania dodatkowego kodu. Czy istnieje lepszy sposób na obsługę tego typu domeny? Jeśli oddzielę rzeczywisty krok i logikę (tj. ładowanie danych z usługi zewnętrznej lub z bazy danych), to cały mój model domeny (kroki) nie ma żadnej logiki. Najprawdopodobniej miałbym coś takiego: var handler = słownik[krok]; handler.Execute(krok, szczegóły, dane); **Teraz logika i wszelkie zewnętrzne zależności znajdują się w obiekcie obsługi, ale rzeczywisty obiekt domeny (krok) jest tylko fikcyjnym miejscem na informacje.** To też nie brzmi dobrze.


title: Jak zaprojektować warstwę modelu bez ORM i kiedy należy jej użyć?

text: Jestem programistą PHP, który zaczynał od CodeIgniter. W nim projektowanie modeli było łatwe: wydawało się, że każda metoda zdefiniowana w modelach jest odpowiednikiem metod statycznych w normalnym, zorientowanym na obiekt środowisku. Wypróbowałem FuelPHP, który ma wbudowany aktywny styl ORM, oraz PHP ActiveRecord do użycia z CodeIgniterem. Zauważyłem, że tworzenie modeli z ORM jest łatwe i nauczyłem mnie najlepszych praktyk podczas projektowania modeli. Jednak nie podobało mi się, że byłem przywiązany do konkretnej implementacji ORM, a gdy stawałem się coraz lepszy z SQL, pomyślałem, że ORM są nieco ciężkie w porównaniu z tym, jak szybko mogłem pobierać rzeczy za pomocą SQL. Ale kiedy próbuję projektować modele od podstaw bez ORM, gubię się: system ORM z jedną klasą na tabelę i zapytaniami z gorliwym ładowaniem ma sens i wydaje się, że jest wart osiągnięcia wydajności za korzystanie z ORM. W jakich sytuacjach powinienem unikać korzystania z ORM? Jak projektować modele bez użycia ORM, aby móc bezpośrednio używać SQL?


title: Co należy wziąć pod uwagę przy zapraszaniu i ograniczaniu użytkowników do witryny w wersji beta

text: Jakie są najlepsze praktyki projektowania przepływu pracy w celu zapraszania użytkowników do witryny w wersji beta? Nie dotyczy to żadnego konkretnego języka programowania. 2 główne wymagania to 1. Zainteresowany użytkownik może poprosić o zaproszenie za pomocą swojego adresu e-mail 2. Zarejestrowany użytkownik może zaprosić innych za pośrednictwem poczty elektronicznej (a może mediów społecznościowych?). Moje przemyślenia: 1. W przypadku nr 1 podczas przesyłania wygeneruj odwracalny hash wiadomości e-mail i sygnaturę czasową zgłoszenia. 2. Następnie wyślij e-mail z hashem jako parametrem zapytania. Gdy ktoś kliknie adres URL, kontroler/router powinien odszyfrować skrót i zweryfikować znacznik czasu. Jeśli jest prawidłowy, sprawdź, czy użytkownik już istnieje, w przeciwnym razie przejdź do strony rejestracji z wypełnionym (lub zamrożonym) polem identyfikatora e-mail i zezwól użytkownikowi na wprowadzenie i potwierdzenie hasła oraz innych szczegółów. 3. Jeśli znacznik czasu wygasł, wyślij kolejną wiadomość e-mail do tego samego użytkownika z nowym hashem. 4. Przypadek#2 powinien być dokładnie podobny, ale zamiast zainteresowanego użytkownika istniejący użytkownik wypełnia formularz zaproszenia, a e-mail wysłany do zainteresowanego użytkownika będzie zawierał adres e-mail lub nazwę istniejącego użytkownika. Czy w tym podejściu są jakieś obawy dotyczące bezpieczeństwa? Czy są jakieś podejścia, które zapewniłyby lepszy UX?


title: Jak mogę poinformować o ryzyku zmiany oprogramowania dostawcy?

text: W miejscu, w którym pracuję, mamy poważny problem, a nazywa się on „dostosowywanie”. Mamy stary (10+ lat) system oprogramowania dostawcy, który nasze działy IT i księgowe wcześniej _pokochały_ dostosowywać. Gdzieś po drodze to oprogramowanie zaczęło się bardzo zawadzać. Następnie zostałem zatrudniony po większości dostosowań. Prawie każdy problem, jaki znalazłem w systemie, wynika bezpośrednio z dostosowania; wszystko, co zmieniamy, grozi złamaniem krytycznego dla biznesu oprogramowania finansowego. Jednak dział księgowości wciąż sugeruje zmiany (ponieważ zawsze mówiliśmy tak!) i wydaje się, że nie ma szacunku dla tego, jak duże mogą być zmiany. Niektóre zmiany nie powodują problemów; formularze można (i mają być) dostosowywane w oprogramowaniu dostawcy, możemy poruszać się po polach formularzy, usuwać je itp. Ale w przypadku każdego takiego nieszkodliwego dostosowania sugerują również zmiany, takie jak procedury składowane i wyzwalacze, aby manipulować danymi w bazie danych dla aplikacji dostawcy. Niedawno (ledwo) zmusiłem ich do zaprzestania prób importowania klientów z jednego programu dostawcy do innego, ponieważ informacje były całkowicie niezgodne. Mój problem z rozwiązaniem tego problemu polega na tym, że system nie działał po stronie użytkownika; zadanie było bardziej skomplikowane, niż im się wydawało, więc zrezygnowali. Niezależnie od tego, jak łatwe jest zadanie po stronie użytkownika, operacja, której chcieli, nie powinna zostać wykonana. **Jak mogę zakomunikować, że zmiana sposobu działania tego systemu wiąże się z ryzykiem, szczególnie gdy w grę wchodzi ważność danych?** Jestem nowym (6-miesięcznym) pracownikiem i stało się to status quo, ale zagraża to ważności naszych finansów dane i nasze umowy serwisowe — gdy wsparcie dostawcy usłyszy, że „X został dostosowany”, daje im to powód, aby nas nie wspierać lub powiedzieć nam, że to nasza wina.


title: Jaka jest najbardziej wydajna metoda konwertowania starszego kodu AutoLISP na C#?

text: Zajmuję się projektem, który działa głównie w programie AutoCAD do projektowania i produkcji prefabrykowanych elementów budowlanych, takich jak więźby dachowe. Jednym z naszych celów jest przeprojektowanie programu napisanego w LISP-ie służącego do projektowania wiązarów dachowych. Mamy przepisać kod LISP w C# i stopniowo wdrażać go do bieżących bibliotek, które utworzyli. Mój problem polega na tym, że otrzymałem zadanie zbudowania podstawowego konwertera LISP na C#. Po kilku badaniach (ponieważ wyniki Google szybko pokazują, że coś takiego nie jest łatwo dostępne), doszedłem do pytania, który sposób konwersji tego starszego kodu byłby bardziej wydajny. Czy lepiej byłoby analizować i przepisywać fragmenty kodu LISP w C#, czy też powinienem kontynuować opracowywanie podstawowego konwertera kodu AutoLISP?


title: Używać ILmerge dla bibliotek NuGet?

text: Tworzę bibliotekę open source C# (http://github.com/eteeselink/fakethat jeśli musisz). Jak jest modne w dzisiejszych czasach, planuję rozpowszechniać to za pośrednictwem NuGet. Moja biblioteka zależy od innej biblioteki (Castle.Core). Przed dniami NuGet używałbym narzędzia, takiego jak ILMerge, aby scalić moją bibliotekę i Castle.Core w jeden zestaw, dzięki czemu dystrybucja jest prostsza. To znacznie zwiększa rozmiar mojego zestawu (z 50kb do 450kb), ale to tylko jedna biblioteka DLL, co jest przydatne dla użytkowników. Teraz, gdy istnieje NuGet, mogę po prostu dodać Castle.Core jako zależność, a NuGet rozwiąże to dla moich użytkowników. Ma to kilka zalet: * Jest prostsze i mniej podatne na błędy * Jeśli moi użytkownicy korzystają z innej biblioteki zależnej od Castle.Core, oszczędzamy miejsce na dysku * W jakiś sposób wydaje się to bardziej "uczciwe" - cała ciężka praca jest wykonywana przez Castle.Core, wszystko co dodałem to ładne API. Istnieje jednak kilka wad: * Jeśli Castle.Core w jakiś sposób zostanie usunięty z NuGet, moja biblioteka przestanie działać * Jeśli ktoś nadal chce używać mojej biblioteki bez NuGet, jest to większy problem, ponieważ należy skopiować wiele bibliotek DLL * Jeśli programista przejrzy listę odniesień do projektów, zobaczy dziwne odniesienie „Castle.Core”, którego dodania nigdy nie pamięta. To może być mylące. Co byś zrobił?


title: Używanie przechwytywania danych zmian serwera SQL z często zmieniającym się schematem

text: Zastanawiamy się nad włączeniem przechwytywania danych zmian serwera SQL dla nowego podsystemu, który budujemy. Nie dzieje się tak naprawdę dlatego, że tego potrzebujemy, ale naciska się na nas, aby mieć pełną identyfikowalność historii, a CDC ładnie rozwiązałoby ten wymóg przy minimalnym wysiłku naszych części. Stosujemy zwinny proces rozwoju, co w tym przypadku oznacza, że często wprowadzamy zmiany w schemacie bazy danych, m.in. dodawanie nowych kolumn, przenoszenie danych do innych kolumn itp. Przeprowadziliśmy mały test, w którym utworzyliśmy tabelę, włączyliśmy CDC dla tej tabeli, a następnie dodaliśmy nową kolumnę do tabeli. Zmiany w nowej kolumnie nie są rejestrowane w tabeli CDC. Czy istnieje mechanizm aktualizacji tabeli CDC do nowego schematu i czy istnieją najlepsze rozwiązania dotyczące postępowania z przechwyconymi danymi podczas migracji schematu bazy danych?


title: Funkcje testów jednostkowych, które mają parametry klas, w których kod źródłowy jest niedostępny

text: W związku z tym pytaniem mam inne pytanie dotyczące funkcji testowania jednostkowego w klasach narzędziowych: Załóżmy, że masz sygnatury funkcji w następujący sposób: funkcja public void doSomething(InternalClass obj, InternalElement element) gdzie InternalClass i InternalElement są klasami, których kod źródłowy nie jest dostępny , ponieważ są ukryte w API. Dodatkowo doSomething działa tylko na obiektach i elemencie. Myślałem o mockowaniu tych klas, ale ta opcja nie jest możliwa ze względu na to, że w ogóle nie implementują interfejsu, który mógłbym wykorzystać do moich klas Mocking. Muszę jednak wypełnić obj zdefiniowanymi danymi, aby przetestować doSomething. Jak rozwiązać ten problem?


title: Lazy loading, jeśli kolekcja miałaby jakieś wpisy

text: Często widzę klasy modeli z takimi właściwościami: public IList<Note> Uwagi { get; ustawić; } public bool HasNotes { get; ustawić; } Gdzie lista jest inicjowana leniwie, ale właściwość boolean jest ładowana bezpośrednio. Ma to tę zaletę, że ładowana jest tylko liczba, gdy kolekcja nie jest potrzebna, ale zastrzeżeniem jest to, że zawsze obliczana jest wartość właściwości logicznej. To skłoniło mnie do myślenia i wymyśliłem takie rozwiązanie: public IList<Note> Notes { get; ustawić; } public bool HasNotes { get { if (Notes != null) return Notes.Any(); else // oblicz (np. istnieje sql) } } W ten sposób obliczenia zostaną wykonane tylko wtedy, gdy kolekcja nie zostanie załadowana. Czy to byłoby dobre podejście? Czy istnieją już inne, nieznane mi najlepsze praktyki?


title: Google Analytics z wieloma środowiskami

text: Planujemy korzystać z Google Analytics w naszej organizacji i odpowiadam za jego konfigurację. Zastanawiałem się, jak radzić sobie z wieloma środowiskami. Na pewno nie chcemy zbierać danych podczas rozwoju i kontroli jakości (a może zbierać dane na inne konto analityczne), ale chcemy, gdy witryna trafi do produkcji (oczywiście). * Jak radzisz sobie z wieloma środowiskami i Google Analytics ? * Czy zakładasz wiele kont dla Google Analytics i używasz jednego z nich w zależności od środowiska ? Używamy ASP.NET 2.0, jeśli ma to znaczenie.


title: Nadawanie zmiennym wartości domyślnych a traktowanie dostępu do niezdefiniowanej zmiennej jako błędu

text: Mając do czynienia z kilkoma językami skryptowymi i będąc trochę lingwistą, wydaje się, że istnieje sposób na podzielenie dynamicznie typowanych języków na dwie grupy: języki, które przypisują zmiennym wartość domyślną, oraz języki, które traktują dostęp do dotychczas nieużywanych zmienna błąd. Rozważmy na przykład następujący kod: print(hi) * W Lua wypisuje `nil` * W PHP (ze średnikiem i `$`) nic nie wypisuje * W Perlu (ze średnikiem i `$`) niczego nie wypisuje (ale użycie `say` daje błąd) Jednak * W Pythonie zgłasza `NameError` * W Ruby zgłasza `NameError` (wygląda na to, że Ruby oderwał dla niego nazwę Pythona) * W JavaScript wyświetla a `ReferenceError` * W Lispie pojawia się jakiś rodzaj błędu, który prowadzi mnie do debuggera (teraz dopiero się uczę Lispa, więc nie wiem, jak to nazwać) Dodatkowo, te języki zachowują się inaczej podczas indeksowania mapy haszowania, podobna operacja i znowu dzielą się na dwa obozy (a kiedy mówię 'nic' mam na myśli reprezentację niczego w języku): * Lua nic nie zwraca * PHP nic nie zwraca * Ruby nic nie zwraca * Perl nic nie zwraca * Lisp nic nie zwraca * Javascript nic nie zwraca Ale * Python zgłasza `KeyError` Zastanawiam się więc, jakie są zalety komparatywne i Wadą języka jest to, że dostęp do niezdefiniowanej zmiennej jest błędem lub po prostu zwraca wartość domyślną, a także decyzje, które skłoniłyby projektanta języka do wybrania jednej lub drugiej ścieżki.


title: Co Ruby zrobił dobrze (a może to były Railsy)?

text: Większość języków programowania ma pewne decyzje projektowe, które wpływają na ich użycie i zastosowanie. Na przykład: * Python skupiał się na łatwości konserwacji/czytelności kodu, a wcięcia były częścią samego języka. * Intencją Javy było, aby międzyplatformowy OOP był "łatwiejszy" i "bardziej przyjazny" niż C++ * Objective-C został zbudowany jako wrapper OO wokół C, nie znając w tym czasie przyszłości C++ * Erlang jest zaprojektowany dla systemów wysoce odpornych na błędy i współbieżnych * PHP przeznaczony do obsługi dynamicznego tworzenia stron internetowych * CoffeeScript zaprojektowany do eksponowania _dobrych części_ JavaScript i dodawania cukru składniowego OOP i ukrywania niuansów (globalnych itp.) JS 'za kulisami' itp. Każdy język programowania próbował wykorzystać i wykorzystać szczególną niszę IMHO. Powyższe są moimi poglądami na to, jakie były fundamentalne zasady języków programowania i które rządziły ich ewolucją i powszechną przyswajalnością. Oczywiście jest ich o wiele więcej, ale ta lista ma jedynie służyć jako przykład. Trudno mi jednak zrozumieć podstawowe zasady, na których opiera się Ruby i jego rosnącą popularność. Jakie były podstawowe zasady Ruby, które sprawiają, że jest dziś popularny? A może jest to geniusz jednego człowieka, który zaprojektował framework Rails? Jeśli to drugie to to, że Ruby sprawił, że projektowanie Railsów było lepsze/łatwiejsze/szybsze? W jakim sensie? Najczęściej przytaczanym powodem według jego twórcy jest „…chciałem zabawnego słabo napisanego języka programowania” – nie widzę tego jako powodu do tworzenia zupełnie nowego języka programowania! Programowanie jest czystą zabawą IMHO, niezależnie od języka (każdy język ma jakieś złe części, ale albo się z nim obchodzi, albo z nim żyje). Więc jaka nisza wykorzystała (lub robi) Ruby, która nie jest wykorzystywana przez obecne języki? Jaka jest „mocna strona” (USP) Rubiego, która doprowadziła do jego powszechnej adaptacji? Co zrobił Ruby, czego wcześniej nie robiono (albo było to bardzo trudne)? Nie jestem programistą Rubinowym, ale po prostu Rubinowym noobem i stąd zamieszanie. **Zastrzeżenie** : To NIE jest wojna ogniowa i nie szukam odpowiedzi typu Ruby vs Programming. Szukam decyzji projektowych, na których opiera się Ruby, które doprowadziły do powszechnego przyjęcia. Jaką niszę spełnia Ruby, aby stać się popularnym, czy jest to wyłącznie przypisywane Railsom?


title: Jaki jest najskuteczniejszy sposób zaproszenia „znajomego” z Facebooka do korzystania z aplikacji?

text: Próbuję zdecydować między: * używaniem niezdarnych okienek z zaproszeniami na Facebooku, które są bardzo kłopotliwe w użyciu (niezbyt konfigurowalne), ale wyzwalają powiadomienia. * Korzystanie z interfejsu API, aby umożliwić użytkownikom zapraszanie 2 lub 3 znajomych zgodnie z pewnymi kryteriami (powiedzmy, że ta sama lokalizacja). Przez zaproszenie mam na myśli pisanie na tablicy znajomego użytkownika. Rozumiem, że nie spowoduje to wyzwolenia powiadomienia na Facebooku, a docelowy znajomy może nawet go w ogóle nie zobaczyć, wszystko wisi na Facebooku (nieznane) zasady dotyczące tego, co pokazuje, a co nie na kanale użytkownika. Idealnie chciałbym wysyłać e-maile, ale facebook api, co zrozumiałe, nie udostępnia adresów e-mail. Nawiasem mówiąc, quora oferuje zaproszenia dla znajomych z Facebooka, co skutkuje wysyłaniem e-maili. Wygląda na to, że quora ma być może uprzywilejowany dostęp do interfejsu API Facebooka (moje przypuszczenie)


title: Jak zdefiniować współdzielone encje tekstowe w plikach XHTML?

text: Mam dokument XHTML, który definiuje kilka jednostek tekstowych w swoim wewnętrznym DTD. Chcę, aby te encje były dostępne w innych dokumentach XHTML bez konieczności wycinania i wklejania wszędzie wewnętrznego DTD. Odpowiedź, która wydaje się pojawiać w przypadku innych plików XML (nie konkretnie XHTML) – na przykład tutaj: http://stackoverflow.com/questions/13567930/how-to-use-multiple-dtd-files-in- a-single-xul \-- sugeruje, że plik XHTML, który chcę napisać, wyglądałby mniej więcej tak: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C //DTD XHTML 1.1//PL" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [ <!ENTITY % mydtd SYSTEM "x.ent"> % mydtd; ]> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"> <head> <title>Przykład</title> </head> <body> <p> "&x; &y;”</p> </body> </html> ... gdzie plik x.ent ma następującą zawartość: <!ENTITY x "Hello"> <!ENTITY y "world!"> Ale nie. W każdym razie nie pokazuje tego, czego oczekuję w żadnej z przeglądarek, z którymi muszę pracować. Spodziewam się zobaczyć "Witaj świecie!" ujęte w podwójne cudzysłowy z lewej i prawej strony. Ale Firefox mówi, że „ jest niezdefiniowaną jednostką, a Opera wyświetla dosłownie tekst między <p> i </p> (wyświetlając znak & zamiast cudzysłowu). Próbowałem również wstawić publiczny DTD w moim wewnętrznym DTD, więc: <!DOCTYPE html [ <!ENTITY % publicdtd PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/ TR/xhtml11/DTD/xhtml11.dtd"> %publicdtd; <!ENTITY % mydtd SYSTEM "x.dtd"> % mydtd; ]> Następnie Firefox narzekał, że &x; był niezdefiniowanym bytem. Opera wyświetliła oczekiwane przeze mnie cudzysłowy, ale nadal wyświetlała &x; i &y; dosłownie; nie cześć, nie ma świata. Myślałem, że x.ent nie potrzebuje znacznika XML, ale ktoś umieścił go w swoim przykładzie pliku definicji encji, więc spróbowałem. To też nie zadziałało. Czy jest jakiś powód, dla którego to nie działa w XHTML? A może to wada obu tych przeglądarek? A może istnieje inny sposób udostępniania encji w wielu plikach? Niestety potrzebuję czegoś, co działa w tych dwóch przeglądarkach, albo równie dobrze mogę tego w ogóle nie robić. Ale jeśli jest to wada w DTD XHTML 1.1, mogę użyć innej wersji.


title: Porównywanie wartości bezwzględnych przy określaniu przejścia przez zero w obrazie 2D

text: Próbuję zaimplementować algorytm znajdowania przejścia przez zero (sprawdź, czy znaki wszystkich wpisów wokół interesującego nas wpisu nie są takie same) w dwuwymiarowej macierzy, w ramach implementacji filtra wykrywania krawędzi Laplace'a Gaussa dla klasy, rozumiem wszystko do kroku 3 na stronie 25 tego pliku PDF. Dlaczego muszę porównywać wartości bezwzględne moich sąsiednich wpisów? Nie wydaje mi się to logiczne. Jeśli mam macierz, która wygląda tak: [1 1 -2], [2 -4 -1], [1 -2 -2] Dlaczego wartość -4 nie jest prawidłowym przejściem przez zero?


title: Jak powinienem wymawiać :: i -> w PHP?

text: Kiedy czytam komuś te wiersze na głos: $controller->process(); Menedżer Użytkowników::getInstance(); Jak należy wymawiać `->` i `::`? Czytanie samych postaci jest kłopotliwe i nie znam dla nich żadnych pseudonimów. Będąc programistą, który jest przyzwyczajony do składni w stylu C, chciałbym powiedzieć „kropka”, ale chciałbym coś, co jest łatwe do powiedzenia _i_ ludzie mogą łatwo zrozumieć. Dobrze byłoby również wiedzieć, czy istnieją jakieś wymowy, które stały się de facto standardami wśród zespołów programistów.


title: Czy refleksja powinna być częścią projektu?

text: Obecnie projektuję dość duży program, który będzie obejmował symulację modeli matematyczno-fizycznych i zbieranie danych (nie zaimplementowałem jeszcze żadnego kodu). Jednym z głównych problemów, z jakimi się borykam, jest łatwe przekazywanie danych bez konieczności posiadania wielu kopii danych (które mogą być przestarzałe i nadmiarowe). Początkowo myślałem o tym, aby każdy z obiektów modelu implementował funkcję, która zwraca strukturę danych zawierającą kopie ich danych, a następnie zbiera wszystkie te struktury danych razem i przekazuje je. Wymagałoby to jednak dużo kopiowania, a dane nie byłyby już mapowane na rzeczywisty obiekt. (Pomysł na strukturę danych, który miałem, obejmowałby użycie trie, aby dane były ładne i hierarchiczne, a wyszukiwania można łatwo wykonać za pomocą ciągu) Więc teraz pomyślałem, że zamiast projektować program, aby używał struktury danych do przekazywania danych, program po prostu przekaże model, a następnie dane mogą zostać wyodrębnione z refleksją. Pozwoliłoby to uniknąć nadmiarowości, a przekazywane dane będą zawsze aktualne. Problem polega na tym, że potrzebuję również tego programu, aby był szybki (ma miękkie ograniczenia w czasie rzeczywistym) i nie jestem pewien co do wpływu odbicia na wydajność. A refleksja wydaje się trochę brzydka. Ale jednocześnie ludzie mówią, że wczesna optymalizacja nigdy nie jest dobrym pomysłem, więc jestem tutaj na granicy. Czy powinienem więc zaprojektować program tak, aby wykorzystywał refleksję, a jeśli tak, to jak obficie? A może powinienem starać się unikać refleksji podczas projektowania?


title: Jak najlepiej powstrzymać nieudolnych, nietechnicznych menedżerów i nadal wykonywać dobrą pracę?

text: To pytanie może być uznane za subiektywne (otrzymałem ostrzeżenie) i zostać zamknięte, ale zaryzykuję, ponieważ potrzebuję dobrych rad/doświadczenia w tej sprawie. Przeczytałem następujące informacje na stronie „O” Fog Creek Software, firmie, którą założył Joel Spolsky i której jest dyrektorem generalnym: > W 2000 roku założyciele Fog Creek, Joel Spolsky i Michael > Pryor, mieli problem ze znalezieniem miejsce pracy, w którym programiści mieli > przyzwoite warunki pracy i mieli możliwość wykonywania świetnej pracy, > bez nieudolnych, nietechnicznych menedżerów wchodzących w drogę. Każda firma high-tech > twierdziła, że chce świetnych programistów, ale nie wkładałaby pieniędzy > tam, gdzie była ich buzia. > > Zaczęło się od środowiska fizycznego (z dziesiątkami boksów zapchanych > w hałaśliwym, ciemnym pomieszczeniu, gdzie sprzedawcy krzycząc przez telefon uniemożliwiają > programistom skoncentrowanie się). Ale poszło znacznie głębiej niż > to. Menedżerowie, przerażeni zmianami, traktowali każdy nowy pomysł jako dziwaczny wirus > do poddania kwarantannie. Młodsi menedżerowie z kompleksem Napoleona nalegali, aby wszystko robić dokładnie po swojemu, albo zostaniesz zwolniony. Korporacyjna Policja Meblowa wiła się > w agonii, gdy ktoś przykleił w ich boksie plakat filmowy. > Dezorganizacja była tak powszechna, że nawet gdyby pomysły były dobre, nie dałoby się z nich zrobić produktu. Niedoświadczeni menedżerowie > ćwiczyli zarządzanie „uderz i uciekaj”, wydając surowe polecenia > dokładnie, jak robić rzeczy, nie czekając w pobliżu, aby zobaczyć farsowe rezultaty swoich nakazów. > > A co najgorsze, osoby odpowiedzialne za studia MBA uważały, że kodowanie jest funkcją wsparcia, w zasadzie wymyślną formą pisania na klawiaturze. **_Bardzo prosta prawda_** o większości dzisiejszych dużych firm programistycznych! **Niestety** nie każdy programista jest tak „odważny” (lub „szczęśliwy”, że mogę powiedzieć?) jak Joel Spolsky! Więc moje pytanie brzmi: **Jak najlepiej pracować z takimi menedżerami, trzymać ich z daleka i nadal wykonywać świetną pracę?**


title: Jestem zagubiony w mojej pracy. Co powinienem zrobić?

text: Około 8 miesięcy temu zostałem zatrudniony jako jedyny programista w małej firmie do realizacji pewnego projektu. Chociaż od czasu do czasu pojawiają się inne małe projekty, spędziłem około 95% mojego czasu w ciągu ostatnich 7 miesięcy pracując nad tym projektem. W takim tempie, w jakim zmierzam, myślę, że minie co najmniej półtora roku, zanim skończę z tym, co wszyscy mieliśmy nadzieję, że zostanie osiągnięte w ciągu dwóch lub trzech miesięcy. Wydaje się, że mój szef zdaje sobie z tego sprawę; byłoby niemożliwe, aby nie opierał się na tym, co do tej pory widział. Jednym z powodów, dla których projekt trwa tak długo, jest to, że ciągle pojawiają się problemy. Ten projekt dotyczy milionów rekordów przechowywanych w dziesiątkach różnych tabel. Chociaż jestem tak samo kompetentny, jak każdy, jeśli chodzi o bazy danych, w żadnym wypadku nie jestem ekspertem od baz danych ani DBA, więc nie mogę patrzeć i powolnego zapytania od razu powiedzieć: „O tak, potrzebuje indeksu na X, Y i Z, musimy podzielić tę tabelę na fragmenty i dostosować ustawienie max_foo w konfiguracji”. Zajmuje mi czas, aby dowiedzieć się, co się dzieje. Do tej pory rozwiązałem prawie każdy znaczący problem z wydajnością, na jaki się natknąłem, ale jest wiele unikalnych wyzwań i nie mogę stać się ekspertem z dnia na dzień. A problemy z wydajnością, które nie były „warte” rozwiązania – ponieważ zajęłoby mi trzy dni, aby coś działało choć odrobinę szybciej – napełniają mój dzień tymi wszystkimi irytującymi oczekiwaniem, w których mnie zatrzymują przez 30 sekund, ale to nie jest tak, że mogę w tym czasie zrobić 30 sekund sensownego kodowania gdzieś indziej. Możliwe, że jest to projekt, który naprawdę zasługuje na zespół 3 programistów i DBA. Może być też tak, że lepszy lub bardziej doświadczony programista poradziłby sobie z tym projektem samodzielnie w rozsądnym czasie, ale moje obecne umiejętności po prostu nie są w stanie sprostać zadaniu. W każdym razie czuję, że jestem w drodze. Wiem, że mogę _ostatecznie_ ukończyć projekt, ale może to zająć absurdalnie dużo czasu. To także dość samotne i zniechęcające do samodzielnej pracy nad gigantycznym projektem, bez nikogo innego, z kim można by o tym porozmawiać. Jestem pewien, że przynajmniej niektórzy inni programiści wiedzą, o co mi chodzi. Nie ma powodu, aby ktokolwiek inny w firmie troszczył się choć odrobinę o tajniki systemu i nie ma powodu, aby jakikolwiek programista spoza firmy przejmował się projektem. Izolacja połączona z wolnym tempem to prawdziwy zabójca motywacji. Jakakolwiek rada?


title: Co jest takiego trudnego we wskaźnikach/rekursji?

text: W niebezpieczeństwach szkół Java Joel omawia swoje doświadczenia w Penn i trudności z „błędami segmentacji”. Mówi > [segfaulty są trudne, dopóki nie] „weź głęboki oddech i naprawdę spróbuj > zmusić swój umysł do pracy na dwóch różnych poziomach abstrakcji > jednocześnie”. Biorąc pod uwagę listę najczęstszych przyczyn segfaultów, nie rozumiem, jak musimy pracować na 2 poziomach abstrakcji. Z jakiegoś powodu Joel uważa te koncepcje za kluczowe dla zdolności programistów do abstrahowania. Nie chcę zbyt wiele zakładać. Więc co jest takiego trudnego we wskaźnikach/rekursji? Przykłady byłyby miłe.


title: JSON lub XML do parsowania dla Google Map API

text: Czy ktoś może mi pomóc znaleźć łatwy sposób na przeanalizowanie XML? Mam aplikację na iOS 7 korzystającą z Google Map API. Próbowałem się tego nauczyć na własną rękę. Staram się stworzyć aplikację korzystającą z usług internetowych takich jak Google Map. Te usługi internetowe używają żądań HTTP do określonych adresów URL, przekazując parametry adresu URL jako argumenty do usług. Ogólnie rzecz biorąc, te usługi zwracają dane w żądaniu HTTP jako JSON lub XML w celu przeanalizowania i/lub przetworzenia przez moją aplikację. Doceniłbym to.


title: Ścieżka zasobów RESTful API dla zasobu o złożonej relacji?

text: W moim RESTful API mam użytkowników, aplikacje i tokeny. Aplikacja ma właściciela, którym jest użytkownik. Token jest powiązany zarówno z aplikacją, jak i użytkownikiem. Użytkownik ma zarówno reprezentację publiczną, jak i prywatną: * `GET /user` \- Pobranie bieżącego uwierzytelnionego użytkownika * `GET /users/:user` \- Pobranie podanego użytkownika Aplikacja ma reprezentację publiczną: * `GET /applications/:id ` \- Pobierz daną aplikację Token jest powiązany zarówno z użytkownikiem, jak iz aplikacją. Token **nigdy** nie jest publiczny: * `GET /user/tokens/:id` \- Pobranie podanego tokena użytkownika Podobnie aplikacje użytkownika można zobaczyć w następujący sposób: * `GET /user/applications` \- Pobieranie zbiór aktualnych uwierzytelnionych aplikacji użytkowników. * * * Jaka powinna być ścieżka zasobu w takiej sytuacji, gdybym chciał uzyskać wszystkie tokeny obecnych użytkowników dla danej aplikacji? Kilka rzeczy, które brałem pod uwagę: * `GET /user/tokens/application/:appId` \- Czułem, że może to być źle przedstawione. Jak by to czytało? Aplikacja tokenów obecnych użytkowników? Tak naprawdę jest to: tokeny obecnych użytkowników _do_ aplikacji. * `GET /user/applications/:id/tokens` \- Czułem, że może to oznaczać, że jeśli posiadasz aplikację, będziesz mógł zobaczyć tokeny wszystkich użytkowników korzystających z aplikacji, co oczywiście nie jest zamierzoną funkcjonalnością, lub reprezentacja. * `GET /applications/:id/tokens` \- Poczułem, że jest to problematyczne w sposób podobny do powyższego.


title: Szyfrowanie haseł w pliku konfiguracyjnym?

text: Zastanawiałem się, czy ma sens szyfrowanie haseł do usług zewnętrznych przechowywanych w moim pliku konfiguracyjnym za pomocą algorytmu szyfrowania symetrycznego? Z jednej strony myślę, że jeśli ktoś uzyska dostęp do pliku konfiguracyjnego, prawdopodobnie uzyska również dostęp do kodu i stosunkowo łatwo będzie odszyfrować hasła... z drugiej strony nie czuję się komfortowo, aby przechowywać hasła w zwykły tekst. Jakie jest Twoje zdanie na ten temat? Czy istnieją jakieś „najlepsze praktyki”?


title: wykonanie pełnego wyszukiwania permutacyjnego i zamiany na łańcuchu

text: Piszę aplikację, która robi coś w rodzaju narzędzia generatora tablic niestandardowych (licencji), gdzie jeśli poproszę o "robin" płyty, zasugeruje, że spróbuję: * r0bin * rob1n * r0b1n Czy są jakieś opublikowane algorytmy, które mogą to zrobić ? Musi być w stanie obsłużyć zamianę pojedynczych liter na wielokrotności, np. m z rn i vice-versa i nie przewraca się, jeśli zastępuje i na l, a następnie sprawdza l i zastępuje je z powrotem na i. Lista tego, co zostanie zamienione na to, co zostanie wprowadzone przez użytkownika, ale nie spodziewam się ogromnej listy, być może co najwyżej 10 par. Zaimplementuję to w Ruby lub Pythonie, ale powinienem być w stanie przekonwertować kod z dowolnego innego języka.


title: czy Oracle ADF Mobile jest bezpłatny? i jaki jest jego zakres użytkowania?

text: Chciałbym wiedzieć, czy Oracle ADF Mobile jest darmowy dla kogoś, kto nie ma (drogiej) licencji ADF, i czy potrzebuję Weblogic, jeśli chcę rozmawiać z backendem (usługą sieciową)? A co z zakresem użytkowania? Czy ADF Mobile nadaje się do gier?


title: Opublikuj oprogramowanie z prawem autorskim i licencją

text: Właśnie przeczytałem trochę artykułów o publikowaniu oprogramowania iw tej chwili osobiście opracowuję losową aplikację metero. Artykuły sugerowały, że oprogramowanie powinno mieć witrynę wydawcy. Ale co muszę umieścić na stronie wydawcy, aby zachować moje prawa autorskie? Czy to po prostu po prostu „Designed/Developed @ 2012 By King Chan” na dole strony i oprogramowania i czy to wystarczy? A może muszę nawet napisać długi akapit licencji/umowy, o którym mówi, że użytkownik, który pobiera/korzysta z oprogramowania, nie może skopiować ikony/funkcji itp.? (Sprawy Apple i Samsung sprawiają, że martwię się teraz o CopyRight....)


title: Aplikacje klastrowe i niestandardowe

text: Powiedzmy, że mamy konfigurację środowiska klastrowego. Mamy klaster SQL Server (nie wiem dokładnie, jak to się robi, ale powiedzmy, że zostało to zrobione ze względu na argument). Teraz, jeśli witryna internetowa lub aplikacja próbuje uzyskać dostęp do tej bazy danych w celu odczytu/zapisu (powiedzmy, że aplikacja ASP.NET lub aplikacja C# WinForm) i w tym czasie SQL przestaje działać — przełączenie awaryjne klastrowania może zająć kilka minut aby przełączyć się na inny węzeł. Co się dzieje w tym czasie? Myślę, że przekroczy limit czasu/nie będzie można się połączyć. ALE czy istnieje sposób na umieszczenie żądania w jakimś potoku, więc po utworzeniu kopii zapasowej / przełączeniu węzła klastra będzie on działał normalnie?


title: Dokumentowanie efektu std::move

text: W miarę jak mój zespół dąży do przyjęcia nowych funkcji w C++11, zmagam się z tym, jak zrobić w kodzie efekty uboczne `std::move`. Problem polega na tym, że obiekt, który został przeniesiony w inne miejsce, nie powinien być już używany po tym punkcie. Wszystko, co mogę wymyślić, to komentarz: std::string x = Func(); Inne(x); // x jest zombie. Oczywiście jest to podatne na błędy i nie poradzi sobie z przypadkami, w których głębszy kod może nieświadomie wykonać `std::move`. Czy ktoś jeszcze zajmował się tym problemem? Mam wrażenie, że diagnozowanie użycia obiektów zombie może być tak samo uciążliwe, jak śledzenie wycieków lub uszkodzenia sterty.


title: Jeśli zaimplementuję usługę internetową, w jaki sposób odpowiem na żądania POST za pomocą JSON?

text: Muszę stworzyć dość skomplikowany system dla mojej pracy dyplomowej. Logicznie będzie składał się z następujących komponentów: 1. Baza danych 2. Serwis WWW 3. Zarządzanie z interfejsem WWW 4. Aplikacja kliencka na iOS, która będzie korzystała z serwisu WWW Postanowiłem zaimplementować wszystkie trzy pierwsze komponenty pod .NET. Najpierw stworzę bazę danych w zależności od obciążenia informacjami - to jasne. Ale potem potrzebuję usługi sieciowej, która zwróci dane w formacie JSON do wykorzystania przez klientów iOS - to oczywiste i nie jest trudne do zaimplementowania. Do tego użyję technologii WCF. Teraz mam pytanie, jeśli zaimplementuję usługę internetową, w jaki sposób będę mógł odpowiadać na żądania POST za pomocą JSON? Prawdopodobnie dotyczy to WCF JSON lub czegoś pokrewnego? Ale potrzebuję również niektórych stron internetowych jako części administratora, więc czy ta aplikacja internetowa będzie w stanie korzystać również z moich scentralizowanych usług internetowych, czy też powinienem ją opracować osobno? Chcę tylko, aby moja usługa sieciowa działała jak zestaw kontrolerów. Jest tu powiązane pytanie, ale to nie do końca odzwierciedla moje pytanie.


title: Jakie są ograniczenia korzystania z OS X, jeśli chodzi o kompilowanie i uruchamianie narzędzi i skryptów opartych na CLI, które zostały napisane z myślą o Linuksie?

text: Od czasu do czasu uruchamiam małe skrypty naukowe i narzędzia C na OS X. W przypadku narzędzi C po prostu pobieram źródła i kompiluję przy użyciu dostarczonego pliku Makefile. Zwykle nie mam problemów z używaniem narzędzi. Jednak wiedząc, że te narzędzia były pisane przez większość czasu pod Linuksem, zastanawiam się, czy różnice w architekturze (Linux jest oparty na Systemie V, OS X jest oparty na BSD) będą stanowić problem.


title: Czy legalne jest używanie ikony/pliku graficznego znalezionego w Internecie do wykorzystania w projekcie oprogramowania?

text: Na przykład jak ta strona z ikonami: http://www.iconspedia.com/ Jest tam dużo ikonki (po prostu nie umiem sobie rysować, nie jestem w tym dobry.....), zastanawiam się, czy czy mogę ich używać w moim projekcie oprogramowania? Czy rodzaj projektu będzie miał znaczenie? tj. aplikacja typu open source, aplikacja komercyjna, bezpłatna aplikacja do pobrania?


title: Jak skutecznie testować kod i funkcjonalność podczas pracy jako freelancer?

text: Pracuję jako niezależny programista. Trudno mi przetestować funkcjonalność funkcji i kod testowy. Ponieważ projekt staje się skomplikowany, tracę koncentrację, przez co każda funkcja jest częściowo rozwijana. Chcę wiedzieć, jak pisać przypadki testowe, zarządzać płynnym przepływem pracy i efektywnie obsługiwać funkcje, pozostając skoncentrowanym?


title: Co rozumie się przez opracowanie oświadczenia deklaracyjnego?

text: Intuicyjnie rozumiem „opracowanie” i mam bardzo łagodny pomysł. Ale chcę dokładnie wiedzieć, co to jest opracowanie deklaracji? Natknąłem się na to słowo w tym kontekście: > Dynamiczne powiązania pamięci masowej stosu są tworzone dla zmiennych, gdy ich > deklaracje są opracowywane. Cytat pochodzi z "Koncepcji języków programowania" Roberta Sebesty.


title: W jaki sposób dynamiczne powiązanie magazynu niejawnego sterty i powiązanie typu dynamicznego są podobne?

text: "Concepts of Programming languages" Roberta Sebesty mówi -> **Niejawne powiązanie pamięci sterty z dynamiką:** > > Niejawne zmienne sterty dynamiczne są powiązane z pamięcią sterty tylko wtedy, gdy mają przypisane wartości. > Jest podobny do wiązania typu dynamicznego. Czy ktoś może wyjaśnić podobieństwo odpowiednimi przykładami. Rozumiem znaczenie obu fraz, ale jestem amatorem, jeśli chodzi o dogłębne szczegóły.


title: Autouzupełnianie lub Zasugeruj

text: W jaki sposób Google lub amazon wdrażają automatyczną sugestię w swoim polu wyszukiwania. Szukam najczęściej używanego algorytmu ze stosem technologicznym. PS: Przeszukałem internet i znalazłem to i to i wiele innych. Ale bardziej interesuje mnie nie to, co robią, ale jak to robią. Baza danych NoSQL do przechowywania faz? czy jest posortowany lub zahaszowany według słów kluczowych? Przeformułujmy więc pytanie: Biorąc pod uwagę listę różnych wyszukiwań ignorujących personalizację, lokalizację geograficzną itp., Jak tak dobrze je przechowują, zarządzają i sugerują.


title: Czy programowanie jako zawód to wyścig na dno?

text: Wydaje mi się, że branża programistyczna jest w wyścigu na dno. Jeśli weźmiemy pod uwagę praktyki: 1. Nie poświęcanie czasu na wdrażanie najlepszych praktyk 2. Wykorzystywanie kodu innych ludzi tak dużo, jak to możliwe (kod niestandardowy jako zobowiązanie) 3. Używanie języków coraz wyższego poziomu w celu poprawy produktywności 4. Narzędzia programistyczne oparte na GUI " które znacznie upraszczają "programowanie" i nie wymagają od ludzi zrozumienia tajników kodu. Te rzeczy sugerują dla mnie, że jesteśmy w wyścigu, aby stać się jak każdy inny pracownik biurowy. W interesie pracodawcy jest, aby rzeczy nie wymagały umiejętności (łatwiejsze do wymiany), aby rzeczy były wstępnie zbudowane (mniej czasu na projekt). Chodzi mi o to, że a) czy istnieje rozbieżność między umiejętnościami a interesami ekonomicznymi pracodawcy? oraz b) jeśli tak, w jaki sposób można to złagodzić, aby egzekwować standardy zawodowe?