title: Czy wszyscy programiści w zespole powinni mieć taką samą rolę/odpowiedzialność w pisaniu i aktualizowaniu dokumentów projektowych oprogramowania?

text: Kilka dni temu zadałem bardzo podobne pytanie, ale ponieważ przedstawiłem zbyt wiele z obecnej sytuacji mojej firmy, większość odpowiedzi skupiała się całkowicie na czymś, na co nie chciałem odpowiadać. Chciałem więc spróbować jeszcze raz... Biorąc pod uwagę praktycznie każdy zwinny zespół, zawsze masz ludzi z różnorodną a) wiedzą o produkcie b) doświadczeniem w tworzeniu projektów ic) ogólnym poziomem kompetencji. Załóżmy, że bierzesz zwinny zespół i używając powyższych czynników (a), (b) i (c) otrzymujesz ogólny wynik dla każdego inżyniera (tylko ćwiczenie umysłowe). Teraz sortujemy je w porządku rosnącym i otrzymujemy ciągłe widmo. Więc pytanie, które chciałem zadać, brzmi: _Czy każda osoba w tym spektrum powinna mieć taką samą odpowiedzialność, jeśli chodzi o pisanie/aktualizowanie specyfikacji projektowania oprogramowania?_ Nie mówię o wymyślaniu projektowania oprogramowania w zwinnych zespołach, które są zwykle wykonywane przez więcej niż jedną osobę w środowisku bardziej opartym na współpracy. Ale pod koniec dnia ktoś musi wrócić do swojego biurka, otworzyć swój ulubiony (i zatwierdzony przez firmę/zespół) edytor dokumentów i wpisać to wszystko. Powodem, dla którego zadaję to pytanie, jest to, że wydaje się, że ludzie są na wysokim Spectrum ma tendencję do tworzenia dokumentów, które są bardziej czytelne, zwięzłe, ale zawierają dokładnie te informacje, których potrzebujesz w specyfikacji projektu, dzięki czemu przyszli ludzie, którzy ją przeczytają, odniosą znacznie większe korzyści. Ludzie po przeciwnej stronie mają tendencję do tworzenia dokumentów, które nie są tak przydatne ani jasne, a często, nawet po kilku iteracjach recenzji projektu, ich praca nie wydaje się tak pomocna (więc tworzone przez nich specyfikacje stają się pisane tylko wysypisko, którego nikt nie czyta ani nie ufa ze względu na sposób, w jaki są napisane). Nie proponuję, aby zespół Agile był rozdzielony i tylko niektóre osoby miały określone role, które nigdy się nie zmienią. Pytam... 1) Co robisz w swoich zespołach z ludźmi, którzy mają bardzo różne (a)x(b)x(c) wyniki 2) Czy nie ma sensu nie dawać wszystkim równej odpowiedzialności. Zamiast tego przydziel tylko mniejsze (lub żadne) zadania aktualizacji osobom z dolnego końca spektrum. Ale potem pracuj z tymi osobami, identyfikując (a), (b) i (c) czynniki, które musiałyby poprawić, a gdy się poprawią, daj im większą odpowiedzialność. Osobiście nie jestem sprzedawany w taki czy inny sposób, jestem tylko ciekawy, jak radzą sobie z tym inne zespoły.


title: Kiedy NIE należy używać wyrażeń regularnych?

text: Wyrażenia regularne są potężnym narzędziem w arsenale programisty, ale - zdarzają się przypadki, kiedy nie są najlepszym wyborem, a nawet wręcz szkodliwe. Prosty przykład #1 to **parsowanie HTML z regexp** \- znana droga do wielu błędów. Prawdopodobnie przypisuje to również ogólnie analizowanie. Ale czy istnieją inne obszary wyraźnie nie do przejścia dla wyrażeń regularnych? * * * p.s.: " _Pytanie, które zadajesz, wydaje się subiektywne i prawdopodobnie zostanie zamknięte._ " - dlatego chcę podkreślić, że interesują mnie przykłady, w których używanie wyrażeń regularnych sprawia problemy.


title: Potrzebujesz przetworzyć 2 miliony 100 tys. wiadomości na sekundę i skierować je do konkretnego wydarzenia, delegata lub delegata multiemisji

text: Muszę przetwarzać 2 miliony wiadomości na sekundę (być może w konfiguracji skalowalnej w poziomie) i kierować każdą wiadomość do N delegatów lub delegatów multiemisji. **Pytanie** Jak należy ustrukturyzować moją aplikację w języku C#, aby uzyskać najlepszą wydajność podczas odbierania wiadomości i kierowania jej do właściwego delegata? **Dodatkowe szczegóły** Każda wiadomość przychodząca ma następujące właściwości w formacie tablicy JSON: * Klient * Kategoria * ID tematu * DateTime * Data[] Każda wiadomość będzie przetwarzana przez funkcję delagującą, która jest zainteresowana co najmniej jedną z tych nieruchomości. **Wymagane proste przykłady przetwarzania delegatów:** * Funkcja licznika klientów może zliczać liczbę wiadomości przypadających na klienta, * Licznik kategorii może zliczać liczbę wiadomości, które zliczają * Licznik klientów zlicza wiadomości unikalne dla tego klienta.


title: Czy ktoś może polecić standardy kodowania dla SQL?

text: Od dawna mamy standardy kodowania dla naszego kodu .Net i wydaje się, że istnieje kilka renomowanych źródeł pomysłów na ich zastosowanie, które ewoluują w czasie. Chciałbym móc zebrać pewne standardy SQL, które są napisane do użytku przez nasze produkty, ale wydaje się, że nie ma żadnych zasobów dotyczących konsensusu co do tego, co decyduje o dobrze napisanym SQL?


title: Jakie są problemy programisty z pomocnymi komunikatami o błędach?

text: Nadal zdumiewa mnie, że w dzisiejszych czasach produkty, które mają za sobą lata użytkowania, budowane przez zespoły profesjonalistów, **nadal** do dziś – nie dostarczają użytkownikowi pomocnych komunikatów o błędach. W niektórych przypadkach dodanie tylko niewielkiej ilości dodatkowych informacji może zaoszczędzić użytkownikowi wielu godzin kłopotów. Program, który generuje błąd, generował go z jakiegoś powodu. Ma wszystko do swojej dyspozycji, aby jak najlepiej poinformować użytkownika, dlaczego coś się nie udało. A jednak wydaje się, że dostarczanie informacji pomagających użytkownikowi ma niski priorytet. Myślę, że to wielka wada. Jednym z przykładów jest SQL Server. Kiedy próbujesz przywrócić bazę danych, która jest w użyciu, całkiem słusznie ci na to nie pozwoli. SQL Server _wie_ jakie procesy i aplikacje uzyskują do niego dostęp. Dlaczego nie może zawierać informacji o procesach korzystających z bazy danych? Wiem, że nie każdy przekazuje atrybut `Aplicatio_Name` w ciągu połączenia, ale nawet wskazówka na temat maszyny, o której mowa, może być pomocna. Innym kandydatem, również SQL Server (i mySQL), jest piękny komunikat o błędzie „ciąg znaków lub dane binarne, które zostałyby obcięte” i ich odpowiedniki. Często wystarczy przejrzeć wygenerowaną instrukcję SQL, a tabela pokazuje, która kolumna jest winowajcą. Nie zawsze tak jest, a jeśli silnik bazy danych wykrył błąd, dlaczego nie może zaoszczędzić nam tego czasu i po prostu powiedzieć nam, która to cholerna kolumna? Na tym przykładzie można argumentować, że sprawdzanie może spowodować spadek wydajności, co utrudni pisarzowi. Dobra, kupię to. Co powiesz na to, że gdy silnik bazy danych wie, że wystąpił błąd, dokonuje szybkiego porównania po fakcie między wartościami, które miały być przechowywane, a długościami kolumn. Następnie wyświetl to użytkownikowi. Wstrętne adaptery tabel ASP.NET są również winne. Zapytania mogą być wykonywane i można otrzymać komunikat o błędzie informujący, że gdzieś zostało naruszone ograniczenie. Dziękuję za to. Czas porównać mój model danych z bazą danych, ponieważ programiści są zbyt leniwi, aby podać choćby numer wiersza lub przykładowe dane. (Nawiasem mówiąc, nigdy nie użyłbym tej metody dostępu do danych _z wyboru_, to tylko projekt, który odziedziczyłem!). Za każdym razem, gdy zgłaszam wyjątek z mojego kodu C# lub C++, udostępniam użytkownikowi wszystko, co mam pod ręką. Zapadła decyzja o jego wyrzuceniu, więc im więcej informacji mogę podać, tym lepiej. Dlaczego moja funkcja zgłosiła wyjątek? Co zostało przekazane i czego się spodziewano? Zajmuje mi trochę więcej czasu, aby umieścić coś znaczącego w treści wiadomości o wyjątku. Do diabła, to tylko pomaga mi podczas rozwoju, ponieważ wiem, że mój kod rzuca rzeczy, które mają znaczenie. Można argumentować, że skomplikowane komunikaty o wyjątkach nie powinny być wyświetlane użytkownikowi. Chociaż nie zgadzam się z tym, jest to argument, który można łatwo uspokoić, mając inny poziom szczegółowości w zależności od twojej konfiguracji. Nawet wtedy użytkownicy ASP.NET i SQL Server nie są typowymi użytkownikami i woleliby coś pełnego gadatliwości i smacznych informacji, ponieważ mogą szybciej śledzić swoje problemy. Dlaczego programiści uważają, że w dzisiejszych czasach jest w porządku, aby podać minimalną ilość informacji, gdy wystąpi błąd? To 2011 chłopaki, _na_.


title: Sufiks Wyjątek w przypadku wyjątków w java

text: Określanie sufiksu Exception w klasach wyjątków wydaje mi się zapachem kodu (informacja nadmiarowa - reszta nazwy sugeruje stan błędu i dziedziczy po Exception). Wydaje się jednak, że wszyscy to robią i wydaje się, że jest to dobra praktyka. Chcę zrozumieć, dlaczego jest to dobra praktyka. Widziałem już i przeczytałem pytanie, dlaczego wyjątki zwykle mają wyjątek sufiksu w nazwie klasy. Pytanie dotyczy PHP, a odpowiedzi są prawdopodobnie prawidłowe dla Javy. Czy są jakieś inne argumenty, czy naprawdę jest to tak proste, jak ich wyraźne rozróżnienie? Jeśli weźmiemy przykłady z poprzedniego pytania - czy naprawdę mogą istnieć w javie klasy o nazwie `FileNoFound`, które nie są wyjątkiem? Jeśli tak, to czy jest to uzasadnione dodaniem `Exception` ? Patrząc na szybką hierarchię zaćmienia „Wyjątku”, z pewnością zdecydowana większość z nich ma sufiks wyjątku, ale jest kilka wyjątków. `javassist` to przykład biblioteki, która wydaje się mieć kilka wyjątków bez przyrostka — np. `BadByteCode`, `BadHttpRequest` itp. `BouncyCastle` to kolejna biblioteka z wyjątkami, takimi jak `CompileError`, które trochę poszukałem w Google z niewielkimi informacjami na ten temat.


title: Potrzebuję porady przy tworzeniu systemu przesyłania/przechowywania/szyfrowania danych wrażliwych

text: Zostałem zamknięty na SO i kazałem opublikować to tutaj, ponieważ dotyczy to ogólnego projektowania aplikacji, a nie konkretnego kodu. ## Intro Obecnie pracuję nad projektem, który polega na codziennym pobieraniu danych (rekordów aptek) z bazy danych VisualFox Pro i przesyłaniu ich części do witryny WordPress, gdzie klienci apteki mogą je bezpiecznie przeglądać. Potrzebuję porady w zakresie ogólnej metodologii mojego oprogramowania - jestem w stanie go kodować, ale muszę wiedzieć, czy idę w tym kierunku we właściwy sposób. Piszę zarówno oprogramowanie PC (w C#/.NET 4.5), jak i wtyczkę PHP WordPress. (Nie ma większego znaczenia, że jest w WordPressie, rzeczywisty kod będzie uruchamiany osobno). ## Pytanie 1: Szyfrowanie Obecny proces szyfrowania danych po stronie serwera, którego planuję użyć, jest oparty na tym artykule. Podsumowując, opowiada się za szyfrowaniem danych każdego oddzielnego użytkownika asymetrycznie za pomocą własnego klucza publicznego, przechowywanego na serwerze. Klucz prywatny do odszyfrowania tych danych jest następnie sam szyfrowany symetrycznie przy użyciu hasła użytkownika i przechowywany. W ten sposób, nawet w przypadku kradzieży bazy danych, należy złamać hash hasła użytkownika, a nawet wtedy proces musi zostać powtórzony dla danych każdego użytkownika. Jedyną słabością, na którą zwrócił uwagę sam autor, i głównym punktem mojego pytania, jest fakt, że gdy użytkownik jest zalogowany, odszyfrowany klucz jest przechowywany w pamięci sesji. Sposób, w jaki artykuł sugeruje, aby sobie z tym poradzić, polega po prostu na ograniczeniu czasu, w którym użytkownik jest zalogowany. Pomyślałem, że lepszym rozwiązaniem byłoby przechowywanie tego klucza w krótkotrwałym bezpiecznym pliku cookie (oczywiście cały proces odbywa się przez HTTPS) . W ten sposób, jeśli atakujący ma kontrolę nad komputerem użytkownika i może odczytać jego pliki cookie, prawdopodobnie może po prostu zalogować swoje hasło i zalogować się, bez potrzeby kradzieży bazy danych, a nawet jeśli atakujący uzyska dostęp do serwera, nie będzie mógł odszyfrować ruch HTTPS (czy może? jak przechowywać dane - to bardziej problem z wydajnością. Ponieważ każdy użytkownik ma swój własny klucz do szyfrowania, wynika z tego, że rekordy dla każdego użytkownika muszą być przechowywane osobno. Nie wiem, czy powinienem przechowywać „blok” danych dla każdego użytkownika, zawierający zaszyfrowany JSON z tablicą obiektów reprezentujących rekordy, czy powinienem przechowywać rekordy w tabeli z rzeczywistą strukturą danych i szyfrować każde pole danych osobno z kluczem. Skłaniam się ku przechowywaniu danych w jednym bloku - wydaje mi się, że odszyfrowywanie jednego dużego bloku danych na raz jest bardziej wydajne niż być może kilka tysięcy oddzielnych pól. Ponadto, nawet gdybym przechowywał dane we właściwej strukturze, nadal nie byłbym w stanie użyć funkcji WHERE, ORDERBY itp. w MySQL, ponieważ wszystkie dane byłyby BLOBami. **Czy powinienem przechowywać dane jako duży blok na użytkownika, czy podzielony na różne pola?** ## Pytanie 3: Transfer Wyciągam dane z pliku DBF i zasadniczo dokonuję „różnicy”, dzięki czemu porównuję bieżące wyodrębnione dane z danych z ostatniego dnia i przesyłanie tylko bloków użytkowników, którzy się zmienili (nie mogę przesyłać tylko rekordów, ponieważ prawdopodobnie będę przechowywać dane użytkowników w blokach). Załączam również instrukcje „usuwania” dla użytkowników, które zostały usunięte. Dzieje się tak, ponieważ w bazie danych znajdują się setki tysięcy rekordów, łącznie ponad 200 MB, a rozmiar zwiększa się każdego dnia. Moim obecnym planem jest zapisanie wszystkich tych danych do pliku JSON, zgzipowanie go i przesłanie na serwer. Moje pytanie brzmi, jak to zrobić, zapewniając jednocześnie bezpieczeństwo danych? Oczywiście przesyłanie odbywa się za pośrednictwem protokołu HTTPS, a ja mam hasło do interfejsu API, aby zezwalać tylko na autoryzowane przesyłanie, ale moim głównym zmartwieniem jest ochrona danych w przypadku włamania na serwer. Nie chcę, aby osoba atakująca po prostu pobrała plik JSON z serwera podczas jego przetwarzania. Jednym z pomysłów, jaki miałem, było nakłonienie serwera do wysłania mi listy kluczy publicznych dla użytkowników i wykonanie szyfrowania w moim oprogramowaniu przed przesłaniem. Wydaje mi się, że to jedyny sposób ochrony tych danych. Mógłbym zaszyfrować cały plik JSON, być może kluczem API lub specjalnym hasłem, ale to dyskusyjne, jeśli atakujący może po prostu uzyskać dostęp do odszyfrowanego pliku, gdy jest on przetwarzany na serwerze. Czy to dobre rozwiązanie? **Czy powinienem szyfrować dane indywidualnie po stronie klienta, czy istnieje sposób, aby bezpiecznie przenieść je na serwer i tam zaszyfrować?** Z góry dziękuję za wszelkie odpowiedzi, chciałbym usłyszeć od kogoś, kto ma problemy jak to wcześniej. Matt **EDIT: Jestem dość zdecydowany na 1 i 2 - dzięki @Morons. Użyję bezpiecznych plików cookie i będę przechowywać dane w blokach. Moim głównym pytaniem jest teraz pytanie 3, chciałbym uzyskać informacje na ten temat.**


title: Rygorystyczna definicja cukru syntaktycznego?

text: Wygląda na to, że w świętych wojnach językowych ludzie nieustannie oczerniają każdą cechę, której nie uważają za szczególnie użyteczną, jako „tylko cukier składniowy”. W tych debatach granica między „prawdziwymi cechami” a „cukrem składniowym” zaciera się. Jak myślisz, jaka jest rozsądna i jednoznaczna definicja cukru składniowego, która pozwala uniknąć zdefiniowania go jako jakiejkolwiek funkcji, której mówca/pisarz nie uważa za przydatną?


title: Jak obsługiwać komputer bez systemu operacyjnego?

text: Jak korzystać z komputera, gdy nie ma systemu operacyjnego? Jakich narzędzi lub wiedzy potrzebuję, aby to zrobić? Czy muszę podawać wszystkie polecenia w postaci binarnej, aby korzystać z zasobów sprzętowych komputera, takich jak monitor?


title: Jakie aspekty projektu należy poruszyć przedstawiając go w rozmowie kwalifikacyjnej?

text: Od kilku lat pracuję jako programista .Net. Nie mam doświadczenia w prezentowaniu projektów, ale mam rozmowę kwalifikacyjną i będę musiała przedstawić projekty, nad którymi pracowałem w przeszłości. Ile/jakiego rodzaju szczegółów technicznych należy uwzględnić? Jakie inne aspekty projektu należy uwzględnić?


title: BASE_DIR/URL z ukośnikiem czy bez?

text: Kiedy masz stałe lub zmienne basedir/url, czy umieszczasz końcowy ukośnik? Teoretycznie myślę, że ostatecznie powinno, ponieważ /ścieżka/do/katalogu/ jest katalogiem, podczas gdy z /ścieżką/do/katalogu, jeśli się nie mylę, serwer sprawdza, czy istnieje plik o nazwie „katalog”, a następnie dodaje końcowy cięcie dla ciebie. Myślę jednak, że `$my_url = BASE_URL . '/mój/katalog/'` wygląda lepiej niż to: `$my_url = BASE_URL . 'mój/katalog/'` Jeszcze lepiej, to: `<img src="<?php echo BASE_URL; ?>/mój/katalog/">` wygląda dla mnie o wiele bardziej czytelnie niż `<img src="<? php echo BASE_URL; ?>moj/katalog">`. Oczywiście mogą to być osobiste preferencje i w porządku, o ile jest się konsekwentnym, ale co jest najczęstsze? Jakie podejście wolisz? Każda opinia jest doceniana.


title: Czy firmy faktycznie wysyłają swoich programistów na wydarzenia za granicą?

text: Patrzyłam na konferencje DevConnections i lamentowałam, że jedna w Wielkiej Brytanii została odwołana, bo absolutnie nie ma mowy, żebym pojechała na inne, co dało mi do myślenia: **Czy jakieś firmy wysyłają swoich programistów na konferencje za granicą A może to tylko utopijny ideał, którego irracjonalnie zazdroszczę?**


title: Semantyka modelowania UML

text: W dzisiejszym wykładzie na temat technik modelowania w odniesieniu do MDD przy użyciu UML wykładowca stwierdził, że absolutnie konieczne jest podanie (ewentualnie) tekstowego opisu semantyki każdego tworzonego diagramu. Moim zdaniem nie jest konieczne opisywanie semantyki elementów diagramu, które są już ustandaryzowane przez UML. Widzę, że rozszerzenie standardowego UML o stereotypy/oznaczone wartości z jakiegokolwiek powodu jest całkowicie właściwe. W przeciwieństwie do tego uważam, że normalizacja w zwykłym przypadku ma na celu umożliwienie ludziom rozumowania i mówienia o diagramach bez konieczności każdorazowego wyjaśniania semantyki. Jedynym warunkiem wstępnym jest oczywiście to, że wszystkie opierają się na tej samej specyfikacji UML. Inną kwestią dotyczącą MDD jest to, że używanie od czasu do czasu różnej semantyki dla tego samego rodzaju diagramu utrudnia ostatecznie generowanie kodu i automatyczną transformację modelu. 1. Czy mam rację z tym poglądem? 2. Czy istnieją pewne nieodłączne niejasności interpretacyjne w UML, aby uczynić go bardziej ogólnym użytecznym?


title: Przygotowanie się do wyzwań związanych z kodem

text: Zaledwie kilka dni temu odkryłem Codility i spróbowałem ich wyzwań. I muszę powiedzieć. Dostałem tyłek podany mi na talerzu. Nie wiem, na czym polega problem, ale wylizuję swoje rany i poczekam, aż wyjdzie rozwiązanie i porównam je z moimi. W międzyczasie chcę przygotować się na kolejne wyzwanie, więc czytam ich poprzednie wpisy na blogu i widzę, jak rozwiązać ich poprzednie problemy. Jest wiele nowych rzeczy, o których nie słyszałem (drzewa kartezjańskie, różne algorytmy sortowania itp.) Jak więc przygotować się na takie wyzwania (zwłaszcza złożoność czasowa i przestrzenna O(x)). Co powinienem przeczytać, aby przygotować się do takiego zadania?


title: W jaki sposób moduły powinny uzyskiwać dostęp do danych poza ich zakresem?

text: Często spotykam się z tym samym problemem. Najpierw tworzę przestrzeń nazw, a następnie dodaję moduły do tej przestrzeni nazw. W takim razie problem, z którym zawsze się spotykam, to jak najlepiej zainicjować aplikację? Oczywiście każdy moduł ma swoją własną procedurę uruchamiania, więc czy te dane (w niektórych przypadkach nie kod, tylko lista elementów do uruchomienia) powinny pozostać w module? Lub czy powinna istnieć procedura startowa w globalnej przestrzeni nazw, która zawiera dane startowe dla WSZYSTKICH modułów. Jaki jest bardziej solidny sposób zorganizowania tej sytuacji? Czy niektóre rzeczy należy scentralizować, czy też należy ściśle przestrzegać modułów zawierających wszystko o sobie? Chociaż są to ogólne pytania dotyczące architektury, odpowiedzi skoncentrowane na JavaScript byłyby naprawdę mile widziane!


title: Implementacja komunikacji między pakietami (Java)

text: Robię projekt z 5 opakowań. Pakiety mogą komunikować się ze sobą, wysyłając komunikaty do centralnego MessageQueue w pakiecie Main, a MessageQueue zajmuje się wszystkimi komunikatami. (por.: http://en.wikipedia.org/wiki/Java_Message_Service) Po dostarczeniu tego obrazu: ![Diagram](http://i.stack.imgur.com/u26Bo.gif) pakiety byłyby klientami ( zarówno wydawca, jak i subskrybent) i MessageQueue byłyby tematem. Wdrażam teraz MessageQueue (czyli temat na powyższym obrazku), a pakiety mogą już subskrybować wiadomości, a pakiety mogą również publikować wiadomość. Publikowanie wiadomości to po prostu dodanie wiadomości do kolejki 'wewnątrz' MessageQueue. Tak więc w danym momencie podczas wykonywania może być 0, 1 lub więcej komunikatów w MessageQueue i teraz muszę się upewnić, że MessageQueue przetwarza wszystkie te komunikaty poprawnie (i w odpowiedniej kolejności). Sposób na zrobienie tego może wyglądać tak: public class MessageQueue { public MessageQueue(){ //inicjowanie itd. processMessages(); } private void processMessages(){ while(/*program działa*/){ if(queue.isNotEmpty()){ /*przetwórz pierwszą wiadomość w kolejce*/ } } } Jednak uważam, że to nie jest świetny projekt i jest czasami określany jako _zajęty oczekiwaniem_? Jak mogę podejść do tego w lepszy sposób (bez korzystania z żadnych standardowych interfejsów API)? Chciałbym również przeprosić, że obraz nie jest osadzony, ale potrzebuję 10 punktów reputacji, zanim będę mógł to zrobić. Jeśli ktoś o większej reputacji mógłby edytować mój post tak, aby obraz został osadzony, byłbym bardzo wdzięczny.


title: Używanie aplikacji WPF zamiast WinRT dla tabletu Windows 8 Pro: dobry czy zły pomysł?

text: Nasza firma rozważa napisanie linii aplikacji biznesowej na tablety, która umożliwiłaby użytkownikom dróg i kadrze kierowniczej dostęp do naszych danych. Będzie to używane głównie w przypadku pulpitów nawigacyjnych, raportów i niektórych danych wejściowych do formularzy: dość typowy scenariusz. Nasze inne aplikacje są budowane w .Net (WinForms) z wieloma powiązanymi bibliotekami klas DLL (dla warstwy dostępu do danych, logiki biznesowej itp.), wydaje się naturalne, że chcesz użyć do tego systemu Windows 8. Jestem raczej zniechęcony Windows RT, ponieważ nie implementuje całego .Net Framework i wydaje się dość ograniczający, więc raczej rozważamy tablety z systemem Windows 8 Pro niż te z WinRT. Jednak chcemy płynnego i przyjemnego korzystania z tabletu i nie sądzę, aby WinForms był do tego świetny, ponieważ nie został stworzony do obsługi dotykowej. Moje pytanie brzmi, czy WPF byłby do tego dobry? Widzę, że są dostawcy interfejsów użytkownika sprzedający zestawy sterowania dotykowego, ale zastanawiam się, czy doświadczenie „dotyku” w WPF jest równoważne z znalezionymi aplikacjami WinRT/Metro? Prawdopodobnie można by na to odpowiedzieć, bawiąc się tabletem, ale niestety nie mam go w tej chwili i nie mogę uzyskać budżetu na zakup, dopóki tego nie rozliczę.


title: Jak korzystać z internetowego interfejsu API innej firmy

text: Próbuję zrozumieć koncepcję korzystania z internetowego interfejsu API innej firmy. Z tego, co do tej pory rozumiem, webowy interfejs API wygląda jak zwykłe adresy URL z pewnymi parametrami itp. Czy program kliencki będzie musiał pobrać i zainstalować dowolny pakiet/pakunek itp. ze strony internetowej/serwera itp., dostarczając interfejsy API i dołączyć go do swojego produktu, czy też nie jest potrzebne do pobrania od usługodawcy. program kliencki po prostu używa adresów URL internetowego interfejsu API (tak jak robimy to w przeglądarce) Jakie są powszechnie używane warianty? Czy sprowadza się to do tego, ile chcemy zrobić po stronie klienta, a ile po stronie serwera? na przykład niepobieranie niczego od dostawcy usług internetowego interfejsu API oznacza, że wszystko dzieje się po stronie dostawcy internetowego interfejsu API.


title: Jaki jest odpowiedni okres wypowiedzenia dla programisty?

text: Firma, w której pracuję, prosi mnie o przedłużenie okresu wypowiedzenia. Nie jestem wprost przeciwny (w rzeczywistości jest to w pewnym sensie pochlebne), ale sprawiło, że zacząłem się zastanawiać, jaki może być typowy okres wypowiedzenia dla programisty C#?


title: Jak używać Git z ASP MVC Code-First Entity Framework

text: **TLDR:** Jaki jest efektywny sposób używania Git do obsługi EF z kodem ASP MVC? Jakie pliki należy uwzględnić w programie NuGet? Jakie pliki należy pominąć? Mamy projekt **ASP MVC oparty na pierwszym kodzie Entity Framework**, który tworzymy jako projekt szkolny. Do wersjonowania używamy **Git to Bit Bucket**. Podstawowy przepływ pracy związany z dodaniem funkcji lub kodu modernizacji polega na utworzeniu gałęzi z gałęzi _Dev_, zatwierdzeniu nowej gałęzi do czasu zakończenia i wykonaniu wstępnych testów, a następnie scaleniu/wyciągnięciu żądania z powrotem do gałęzi _Dev_. Napotkaliśmy problemy z przerywaniem konfiguracji projektu, gdy użytkownik próbuje scalić zmiany w swojej gałęzi przed ponownym połączeniem z _Dev_. Niektóre pytania to: **Co powinno znaleźć się w repozytorium Git w przypadku pakietów NuGet?** Istnieją pliki, które wydają się aktualizować za każdym razem, zmuszając Git do przechodzenia przez wszystkie z nich podczas zatwierdzania. **Czy Entity Framework powinien być uwzględniony w repozytorium?** Mamy migracje, ale wydaje się, że psują się za każdym razem, gdy ktoś ściąga zmiany na swój komputer. **Czy istnieje dobry sposób, aby Git obsługiwał pliki projektu Visual Studio (.csproj)?** Mieliśmy koszmar scalania dotyczący plików projektów, gdy jeden programista pobrał zmiany z _Dev_ przed próbą odesłania. W naszym .gitIgnore użyliśmy ASP i dodaliśmy kilka własnych. Jego kopia znajduje się na Pastebin.com. Ponadto, jeśli chodzi o przerażające manipulowanie plikami projektu, zajrzeliśmy na StackOverflow i zobaczyliśmy to: .NET + Git: jak radzę sobie z plikami Visual Studio?. Czy to rozwiązałoby problem z plikami projektu programu Visual Studio?


title: Wzorce do cofania w aplikacjach dla wielu użytkowników na danych relacyjnych

text: Chcę zbudować aplikację internetową, która umożliwi wielu użytkownikom wspólne wypełnianie zawartości dość konwencjonalnej relacyjnej bazy danych. (Baza danych będzie miała ustalony schemat, który jest znany z góry). Widzę, jak zdefiniować schemat dla niezbędnych typów obiektów, relacji i ograniczeń kluczy obcych (elementy, elementy jako członkowie kategorii, połączenia między elementami itp.). Podstawowe operacje CRUD służące do tworzenia instancji i modyfikowania obiektów nie stanowią problemu. Ale w celu zapewnienia odporności na wandalizm i błędy, mogę przewidzieć, że konieczne będzie posiadanie funkcji cofania/wycofywania, aby użytkownicy na poziomie moderatora mogli cofać zmiany wprowadzone przez innych użytkowników. Mam problem ze znalezieniem odpowiedniego podejścia do dwóch kluczowych wymagań funkcjonalnych: 1. Przechwycenie wszystkich zmian w bazie danych, które wynikają z początkowego żądania użytkownika. Na przykład istnieje relacja wiele-do-wielu między elementami i kategoriami. Dlatego też, jeśli kategoria zostanie usunięta (wyzwolona przez użytkownika przesyłającego formularz HTML), wszystkie rekordy relacji kategoria-element odpowiadające tej kategorii zostaną usunięte z powodu ograniczeń integralności referencyjnej relacji wiele-do-wielu. Jak mogę nagrać wszystkie kaskadowe konsekwencje pierwszej operacji, aby później można ją było całkowicie cofnąć? 2. Jak mogę wyizolować operacje cofania, aby można było cofnąć złe działanie jednego użytkownika bez konieczności wycofywania wszystkich korzystnych zmian, które zostały wprowadzone przez innych użytkowników, między złym działaniem a recenzją moderatora? Wzorce cofania, które widziałem opisane (np. wzorzec "Polecenie") zakładają, że istnieje stos poleceń, a operacje cofania są zawsze stosowane w ściśle odwrotnej kolejności do początkowej aplikacji (brak obsługi cofania poza kolejnością). Czy istnieją jakieś standardowe wzorce obsługi funkcji cofania w relacyjnych bazach danych, które pomogłyby osiągnąć te dwa cele? W tej chwili szukam ogólnych algorytmów i wzorców, które pomogą rozwiązać powyższe problemy, a nie szczegółów specyficznych dla platformy.


title: Jaka jest różnica między typami osobowości a dziedziczeniem cech w Scali?

text: Podczas wyszukiwania w Google pojawia się wiele odpowiedzi na ten temat. Jednak nie wydaje mi się, żeby którykolwiek z nich dobrze ilustrował różnicę między tymi dwiema funkcjami. Więc chciałbym spróbować jeszcze raz, konkretnie... **Co można zrobić z autotypami, a nie z dziedziczeniem, i vice-versa?** Dla mnie powinno być coś wymiernego, fizycznego różnica między nimi, w przeciwnym razie są tylko nominalnie różne. Jeśli Cecha A rozszerza B lub autotypy B, czy obie te cechy nie ilustrują, że bycie B jest wymogiem? Gdzie jest różnica?


title: Jak śledzisz błędy w swoich osobistych projektach?

text: Próbuję zdecydować, czy muszę ponownie ocenić proces śledzenia defektów w moich domowych projektach. Przez ostatnie kilka lat tak naprawdę śledzę defekty za pomocą znaczników `TODO` w kodzie i śledzę je w określonym widoku (używam Eclipse, który ma przyzwoity system tagowania). Niestety zaczynam się zastanawiać, czy ten system jest niezrównoważony. Znalezione defekty są zazwyczaj związane z fragmentem kodu, nad którym pracuję; błędy, które nie są od razu zrozumiane, bywają zapominane lub ignorowane. Napisałem podanie do żony, która od prawie 9 miesięcy ma poważną wadę i zapominam ją naprawić. Jakiego mechanizmu używasz do śledzenia defektów w swoich osobistych projektach? Czy masz określony system lub proces ustalania priorytetów i zarządzania nimi?


title: Dlaczego instrukcje w wielu językach programowania są kończone średnikami?

text: Czy istnieje powód, dla którego jako terminator linii wybrano średnik zamiast innego symbolu? Chcę poznać historię tej decyzji i mam nadzieję, że odpowiedzi doprowadzą do spostrzeżeń, które mogą wpłynąć na przyszłe decyzje.


title: Optymalny sposób na zaimplementowanie tej konkretnej tabeli odnośników w C#?

text: Chcę utworzyć tabelę przeglądową dla tych danych: „Zmienne wejściowe” (używane do „wyszukiwania”) to 4 różne duble, z których każda może przyjąć 1 z 200 liczb (liczby w zakresie od 1-1000, ale są tylko 200 możliwych liczb, z których każda może być (te 200 możliwych liczb, z których każda może być, jest mi znana)) wszystkie podwaja są 2 miejsca po przecinku. Jeśli którykolwiek z czterech zostanie zmieniony, zmieni się nieznacznie zmienne wyjściowe. Istnieje również 1 liczba całkowita (tak naprawdę enum), która może przyjąć wartość od 1-5. Na 3 zmiennych wejściowych istnieje warunek, który (1/x + 1/y + 1/z musi być mniejszy niż 1,02). Czy można to wykorzystać w algorytmie mieszającym? "Zmienne wyjściowe" (co jest zwracane) to ~30 podwojeń (przeważnie 2 miejsca po przecinku, ale jedna ma 10 miejsc po przecinku). (zostanie zapakowany w obiekt) w zakresie od 1 do 1000 (2 miejsca po przecinku). Spodziewam się, że będzie około 150 milionów płyt. Czy powinienem użyć dużego słownika i załadować go do pamięci, a następnie uruchomić program? Czy baza danych i LINQ byłyby najlepsze? Czy mogę w jakiś sposób użyć drzew lub haszowania, aby to przyspieszyć? Nigdy wcześniej nie musiałem robić tak dużego LUT, gdzie prędkość jest głównym czynnikiem. **Wyjaśnienie:** Ze względu na warunek, że (1/x + 1/y + 1/z musi być mniejsze niż 1,02, patrz wyżej) istnieje tylko ~150 milionów kombinacji zmiennych wejściowych. Nie ~(200)^4. **Aktualizacja:** Przyjrzałem się niektórym statystykom (minimum i maksimum obserwowanych wartości i odkryłem pewne zależności) dla moich zmiennych wejściowych i stwierdziłem, że jeśli nazwiemy 4 podwójne wartości wejściowe A, B, C, D: `A i B każda ma ~200 możliwych wartości, C ma ~50 możliwych wartości, a D ma ~120 możliwych wartości` Istnieje kilka relacji, które oznaczają, że istnieje tylko ~27 milionów kombinacji, a nie ~150 milionów, o których początkowo myślałem . Tak więc na PLP będzie około 27 milionów rekordów. Zdecydowanie istnieje również związek, którego nie byłem w stanie rozgryźć pomiędzy (A, B, C) i D, który również zmniejszy liczbę kombinacji. Czy optymalnie byłoby uruchomić LUT z pamięci RAM teraz, gdy zmniejszyłem liczbę wpisów ze 150 do 27 milionów (i prawdopodobnie mniej)? Teraz, gdy jest już 27 milionów, czy przechowywanie ich jako int przez pomnożenie ich przez 100 (2 miejsca po przecinku) nadal byłoby optymalne? Jak sugerował DocBrown, powinienem przechowywać podwajania jako liczby całkowite (pomnożyć przez 100, ponieważ mają 2 miejsca po przecinku), a następnie połączyć 5 różnych liczb całkowitych (4 podwoje (patrz wyżej) i 1 wyliczenie (wartość: 1-5)) w klucz dla Politechniki Lubelskiej. Jak to zrobić tak, że będę miał unikalną wartość dla każdej kombinacji moich 5 zmiennych wejściowych (5 cali) ORAZ ta metoda jest otwarta na rozwinięcie każdej ze zmiennych wejściowych, tj. Czy muszę rozwinąć kombinacje podwójnego C do 70 zamiast 50 będę potrzebować unikalnych wartości kluczy dla nowych wpisów, które są wynikiem rozszerzonej liczby całkowitych kombinacji zmiennych wejściowych.


title: Jaki jest najlepszy sposób na WSTAWIENIE dużego zestawu danych do bazy danych MySQL (lub ogólnie dowolnej bazy danych)

text: W ramach projektu PHP muszę wstawić wiersz do bazy danych MySQL. Oczywiście jestem do tego przyzwyczajony, ale wymagało to wstawienia w 90 kolumnach w jednym zapytaniu. Wynikowe zapytanie wygląda okropnie i monolitycznie (zwłaszcza wstawiając moje zmienne PHP jako wartości): INSERT INTO mytable (column1, colum2, ..., column90) VALUES ('value1', 'value2', ..., 'value90') i martwię się, że nie zajmę się tym we właściwy sposób. Zajęło mi też dużo czasu (nudne) samo wpisanie wszystkiego, a testowanie pisania kodu testowego będzie równie żmudne, jak się obawiam. Jak profesjonaliści podchodzą do szybkiego pisania i testowania tych zapytań? Czy mogę przyspieszyć ten proces?


title: Analiza zależności dla testów

text: Google zbudował system testowy, który może wywnioskować, które testy należy uruchomić po zmianie. Własnymi słowami: > ... zbudowaliśmy system ciągłej integracji, który wykorzystuje analizę zależności > do określenia wszystkich testów, na które zmiana ma wpływ przechodni, a następnie uruchamia tylko > te testy dla każdej zmiany. > > ... > > ![tutaj wpisz opis obrazka](http://i.stack.imgur.com/wVwpL.png) Zainspirowany tym, stworzyłem narzędzie dla Pythona, które również wykorzystuje analizę zależności do wykrywania testy muszą zostać uruchomione. Różnica polega na tym, że nie jest powiązany z systemem CI. Jest przeznaczony do uruchamiania lokalnie i szuka zmian w plikach od czasu ostatniego przejścia testów, zamiast patrzeć na zatwierdzenia w systemie kontroli wersji. Visual Studio 2010 ma funkcję o nazwie „Analiza wpływu testów”, która „informuje programistę, jakie testy powinni uruchomić, aby zweryfikować wprowadzane zmiany w kodzie”. Moje pytanie brzmi: czy istnieje nazwa dla tego podejścia? Wydaje mi się, że przeczytałem gdzieś, że nazywa się to „Testowaniem przyrostowym”, ale nie mogę już znaleźć odniesienia.


title: Masters vs. PhD - długi

text: Mam 21 lat i jestem studentem pierwszego roku studiów magisterskich na kierunku informatyka. To, czy kontynuować doktorat, czy nie, dręczyło mnie od kilku miesięcy. Nie mogę przestać o tym myśleć i jestem bardzo rozdarty w tej sprawie. Przeczytałem http://www.cs.unc.edu/~azuma/hitch4.html i wiele, wiele innych artykułów dotyczących mistrzów i doktorantów w sieci. Niestety jeszcze nie doszedłem do wniosku. Miałem nadzieję, że mogę opublikować tutaj moje pomysły dotyczące problemu w nadziei, że 1) uzyskam dodatkowy wgląd w problem i 2) upewnię się, że moje założenia są poprawne. Mam nadzieję, że ludzie, którzy mają doświadczenie w danej dziedzinie, powiedzą mi, jeśli się mylę, więc nie podejmuję decyzji na podstawie fałszywych pomysłów. Dobra, żeby pozbyć się tego tematu - pieniądze. Pieniądze nie są dla mnie najważniejszą rzeczą, ale nadal są ważne. Zawsze moim celem było zrobienie 6 figurek, ale zdaję sobie sprawę, że w obu przypadkach zajmie mi to dużo czasu. Według większości internetowych witryn obliczających wynagrodzenia, średnia początkowa pensja inżyniera oprogramowania wynosi ~60-70 tys. Program doktorancki tutaj trwa 5 lat, więc to około 300 tysięcy, które tracę, nie wchodząc na rynek pracy z mistrzami. W moim życiu miałem tylko ~1k na raz, więc 300k to coś, czego nie jestem w stanie dokładnie sobie wyobrazić. Wiem, że oczywiście nie miałbym tego wszystkiego na raz, ale świadomość, że będę zarabiał, jest dla mnie trochę szalona. Czuję, że do czasu, gdy skończę 30 lat, będę żył całkiem wygodnie (ale ryzykuję, że zbyt szybko będę zbyt zadowolony). Zdecydowanie chciałbym mieć co najmniej kilka lat mojej dwudziestki, aby spędzić z takimi pieniędzmi, zanim będę miał rodzinę, na którą mógłbym to wszystko wydać. Nie dorastałem zbyt stabilnie finansowo, więc fajnie byłoby po prostu wydać trochę pieniędzy… kupić fajny samochód, kupić nową gitarę lub dwie, zjeść dobre jedzenie i po prostu czuć się komfortowo finansowo. Zawsze czułem, że zasłużyłem na zarobienie dobrych pieniędzy w moim życiu, nawet jako dziecko dorastające, i po prostu chcę, aby to stało się rzeczywistością. Wiem, że obie ścieżki, które obiorę, przyniosą dobre pieniądze do czasu, gdy skończę około 40-45 lat, ale wydaje mi się, że po prostu mam dość nie zarabiania pieniędzy i zaczynam się niecierpliwić. Jednak wielkim pomysłem, który popycha mnie w kierunku doktoratu, jest to, że czuję, że ścieżka magisterska da mi poczucie wyprzedania, jeśli będę miał możliwość rozwiązywania prawdziwych pytań w świecie informatyki. (dość proste - nie ma zbyt wiele do omówienia, ale to wielka sprawa) Teraz przejdźmy do innych aspektów decyzji. Początkowo zająłem się informatyką z powodu programowania. Zacząłem w liceum i bardzo szybko wiedziałem, że to jest to, co chcę robić w karierze. Czuję, że zdobycie tytułu magistra i bycie inżynierem oprogramowania w branży daje mi znacznie więcej czasu na programowanie w mojej karierze. Wydaje mi się, że podczas badań poświęciłbym więcej czasu na czytanie, pisanie, staranie się o stypendium itp. niż na kodowanie. Facet, z którym pracuję w laboratorium, niedawno opublikował artykuł. Pokazał mi to i byłem tym zszokowany. Pierwsze dwie strony były zaśmiecone równaniami i wzorami. Potem następna strona, mniej więcej, była poprzedzona kolejnymi równaniami i wzorami, które wyprowadził z poprzednich. To była jego praca - przełamując i tworząc wszystkie te formuły ruchu ramion robota. I kiedy czytam artykuły z informatyki, wszystkie wydają się podążać tym wzorem. Zawsze wyobrażałem sobie, że koduję cały dzień… nie udowadniając równań i rzeczy tego rodzaju. Wiem, że to tylko jedna część badań w dziedzinie informatyki, ale ta część mnie nudzi. Kilka wad z każdej strony – doktorat – nie lubię pisać ani nie czuję się tak świetny w pisaniu technicznym. Ilekroć jestem w grupie, aby coś zrobić, zawsze jestem tym, który wykonuje większość pracy, a następnie przekazuję to członkom mojego zespołu, aby napisali raport. Prezentacja jest jednak inna – nie mam nic przeciwko prezentacji, o ile dobrze rozumiem to, co prezentuję. Ale pisanie prac wydaje mi się takim obowiązkiem. Z tego powodu wyrażenie „opublikuj lub zgiń” naprawdę odciąga mnie od badań. Kolejna zła rzecz - czuję, że gdybym robił badania, większość z nich byłaby zrobiona sama. Najlepiej pracuję w małych grupach. Lubię mieć przynajmniej jedną osobę, od której mogę odrzucać pomysły podczas burzy mózgów. Idea bycia częścią jakiejś małej elitarnej grupy w celu budowania rzeczy brzmi dla mnie idealnie. Tak więc możliwość pracy w małych grupach przez większość mojej kariery to zdecydowany plus. Nie wydaje mi się, żebym mógł to zrobić, prowadząc badania. Mistrzowie - dużo czytam w Internecie, że większość ludzi przychodzi jako inżynierowie i ostatecznie przechodzi na stanowiska kierownicze. Na razie nie widzę, żebym chciał być częścią managementu. Powiedzmy, że moja firma chciała stworzyć jakiś nowy produkt lub system – o wiele więcej dumy, radości i ogólnej satysfakcji sprawiało mi stwierdzenie „zrobiłem to” zamiast „zarządzałem grupą ludzi, którzy to zrobili”. Chcę być dużą częścią procesu rozwoju. Chcę tworzyć rzeczy. Myślę, że byłoby wspaniale być bardziej wyspecjalizowanym niż inni ludzie. Wolałbym wiedzieć wszystko o czymś niż coś o wszystkim. Zawsze taki byłem - byłem świetnym miotaczem podczas moich lat baseballu, ale nie tak dobry we wszystkim innym, świetny na niektórych zajęciach w szkole, ale nie tak dobry na innych itp. Pomyśleć, że moja kariera będzie taka sama brzmi dla mnie dobrze. Zdobycie doktoratu wskazałoby mi ten kierunek. Byłoby wspaniale być kimś, na kogo ludzie patrzą i przychodzą prosić o pomoc, ponieważ są tak ważnym czynnikiem w bardzo specyficznej dziedzinie, takiej jak sztuczne sieci neuronowe lub zrobotyzowana percepcja dotykowa. Z tego, co zbieram na temat branży oprogramowania, specjalizacja może być bardzo zła ze względu na szybkość nowej technologii. Jeśli chodzi o zatrudnienie, mam dość konserwatywne poglądy. Nie chcę zmieniać firmy co 5 lat. Może wszyscy tego sobie życzą, ale chciałbym być po prostu ważną osobą w jednej firmie przez 10+ (może 20-25+, jeśli mam szczęście!) lat, gdyby warunki pracy były do przyjęcia. Czuję, że jest to bardziej możliwe jako doktor, będąc profesorem lub badaczem. Im więcej czytam o ludziach z branży oprogramowania, tym bardziej wydaje się, że większość inżynierów oprogramowania przeskakuje od firmy do firmy w szybkim tempie. Niektórzy nawet pracują jak wynajęta broń od projektu do projektu, czego W OGÓLE NIE chcę. Ale znalezienie miejsca do tworzenia świetnego i ważnego oprogramowania byłoby wspaniałe, gdyby rzeczywiście miało to miejsce w prawdziwym świecie. Jestem bardzo konkurencyjną osobą. Lubię rywalizację. Naprawdę nie wiem dlaczego, ale zawsze taki byłem, nawet jako dziecko dorastając. Konkurencja zawsze dawała mi powód, żeby co wieczór ćwiczyć trochę więcej, zawsze przesuwać swoje granice itp. Wydaje mi się, że w świecie badań nie ma konkurencji. Wygląda na to, że wszyscy są bardzo zrelaksowani, dopóki prowadzone są badania. Jedyna konkurencja polega na tym, że ktoś bada to samo, co ty i ktokolwiek inny może najpierw skończyć i opublikować (ale wszyscy wydają się uważać, aby sprawdzić tę okoliczność). Jedyną widoczną dla mnie konkurencją jest tylko z samym sobą i własną dyscypliną. Podoba mi się pomysł, że w branży istnieje prawdziwa konkurencja między firmami, aby wypuścić najlepszy produkt lub wyjść z biznesu. Czuję, że to ciągle pchałoby mnie do bycia lepszym w tym, co robię. Jedną rzeczą, która naprawdę popycha mnie w kierunku doktoratu, jest żywotność rzeczy, które tworzysz. Czuję, że jeśli stworzysz coś naprawdę innowacyjnego w branży… po prostu jakąś naprawdę świetną nową aplikację lub system… okres trwałości wynosi około 5-10 lat, zanim ktoś zrobi to szybciej i wydajniej. Ale dzięki pracy badawczej możesz stworzyć pomysł lub algorytm, który przetrwa dziesięciolecia. Na przykład algorytm wyszukiwania A* został opisany w 1968 roku i jest nadal powszechnie stosowany. To dla mnie niesamowite. Jak powiedział Palahniuk: „Celem nie jest żyć wiecznie, ale stworzyć coś, co będzie”. Przede wszystkim chcę zrobić coś, co ma znaczenie. Chcę, aby moja praca pomagała i rozwijała społeczeństwo. Poważnie, jeśli utknę w programowaniu GUI na następne 40 lat… mogę strzelić sobie w twarz. Ale z drugiej strony nienawidzę pomysłu, że mniej niż 1% populacji zetknie się z moją pracą, a jeszcze mniej zrozumie jej znaczenie. Więc jeśli coś, co powiedziałem, jest nieprawdziwe, poinformuj mnie o tym. Jeśli uważasz, że wychodzę na magistra lub doktora, poinformuj mnie. Jeśli chcesz udzielić mi dodatkowego wglądu lub uzupełnić poczynione przeze mnie kwestie, zrób to. Dziękuję bardzo każdemu za wszelką pomoc.


title: Lista kontrolna do rozpoczęcia projektu open-source

text: Rozpoczęcie projektu open-source to nie tylko wrzucenie kodu źródłowego do jakiegoś publicznego repozytorium, a następnie bycie z tego zadowolonym. Powinieneś mieć dokumentację techniczną (oprócz użytkownika), informacje o tym, jak wnieść swój wkład itp. Co byś na niej zamieścił, tworząc listę kontrolną dotyczącą ważnych rzeczy do zrobienia?


title: Książki eksploracji danych

text: Jestem pasjonatem _eksploracji danych_ , przeczytałem kilka książek, takich jak _Programming Collective Intelligence_ , i chciałbym poznać więcej dobrych **książek** , szczególnie praktycznych, **o _eksploracji danych_** w połączeniu z _AI_. Wszelkie wskazówki również będą mile widziane. Dziękuję.


title: Jak NSObject może zawierać NSString, jeśli NSString jest NSObject?

text: Jak NSObject może zawierać NSString, jeśli NSString jest NSObject /* NSObject.h Copyright (c) 1994-2012, Apple Inc. Wszelkie prawa zastrzeżone. */ (NSString *)opis; NSObject ma właściwość o nazwie „description”, która jest NSString, ale czy NSString nie jest NSObject? Jak to działa?


title: Jak używać określonego nagłówka żądania

text: Uczę się jak pracować z XMLHttpRequests. Wiem, że request.setRequestHeader() jest ważnym czynnikiem. Po prostu nie rozumiem dlaczego. Zajęło mi to trochę czasu, ale przynajmniej znalazłem listę nagłówków tu i tutaj, ale nadal nie rozumiem, co robi każdy z nich i jaka wartość jest z nimi związana. Czy istnieje źródło, które daje przykład i wyjaśnia, do czego służą?


title: Iteracyjnie poprawiać architekturę i jakość oprogramowania w zwinnym procesie?

text: Lub ujmując to w inny sposób, jak zapewnić, że architektura lub jakość nie ucierpią, robiąc zwinne. Niektóre z zrozumienia obsługi architektury w agile są poniżej (ogólnie dotyczy to również testowania) *** Twórz architekturę, dopóki ryzyko nie spadnie z twojego radaru * minimalny projekt z góry, abyś nie zapłacił strasznej ceny za rozsądne żądania zmian. * architektura/infrastruktura „wystarczy” dla każdej funkcji/wymagania** (powyższe zostały znalezione podczas wyszukiwania innych powiązanych pytań StackOverflow) * * * **hipotetyczny przykład/scenariusz** jest taki, że istnieje wymóg opracowania przetwarzania zamówienia moduł w istniejącym systemie. Poniższe wytyczne są negocjowane i uzgadniane. 1. Architektura modułu powinna być w stanie obsłużyć przetworzenie 10 zamówień w ciągu minuty. 2. Czas wprowadzenia na rynek to 4 tygodnie, planowanie odbywa się na 2 sprinty po 2 tygodnie. 3. Firma jest usatysfakcjonowana przeciętnymi oczekiwaniami dotyczącymi wydajności. Po dostarczeniu modułu, powiedzmy, że wymagane są następujące ulepszenia/zmiany. * Popraw przetwarzanie do 15 zamówień na minutę. * Popraw wydajność o 25%. * Czas wprowadzenia na rynek to 2 tygodnie. Zakładając więc, że przyjdą dalsze wymagania ze strony klienta/firmy, które są mile widziane, ale w przyszłości, w miarę trwania iteracji, architektura musi zostać przebudowana, a testowanie jakości modułu również stanie się bardziej czasochłonne. * * * _I powyższe nie jest szczęśliwym wynikiem, ponieważ szacunki rosną i istnieje zrozumiała niemożność szybkiego spełnienia dalszych oczekiwań lub wymagań. Nawet jeśli można to zrobić w określonych ramach czasowych z wystarczającą jakością, po prostu żałuj, że nie mogliśmy zrobić czegoś z tym dobrze wcześniej i nie stawić czoła tej sytuacji w tym momencie. idealny, ale nie to było celem i celem. Nacisk kładziony jest zawsze na Time to market, a także na sprostaniu oczekiwaniom biznesu/klientów w określonych ramach czasowych. Niestety na dłuższą metę ma to wpływ na rozwój._ **Co można zrobić, aby uniknąć wspomnianej pułapki w tym przykładzie, w iteracyjnym ulepszaniu architektury lub procesie testowania?**


title: Porównanie z zewnętrznym centrum deweloperskim

text: Jesteśmy częścią firmy programistycznej, która została właśnie przejęta przez większą. Ta firma ma duże centrum rozwoju w Indiach; mamy siedzibę w Europie. Nie wiemy jeszcze, co stanie się z naszymi projektami, może zostaną zlecone na zewnątrz, a może nie, ale chcę wiedzieć, czy możemy konkurować z indyjskim programistą pod względem wynagrodzenia. Wiem, że jest tu wiele czynników, nie tylko kwestia wynagrodzenia, ale chcę tylko zorientować się, jaka jest różnica. Czy ktoś może wymienić pensje (w euro lub dolarach) i związane z nimi lata doświadczenia. Znalazłem trochę informacji w sieci, ale nie są one tak świeże. Z góry dziękuję!


title: Czy programiści powinni być właścicielami serwerów kompilacji?

text: Serwer budujący w naszej firmie jest do bani. Agenty kompilacji (jest ich tuzin, każdy jest oddzielną maszyną wirtualną i najwyraźniej wszyscy żyją na własnym serwerze ESX) są WOLNE. Interfejs sieciowy jest WOLNY i działa na maszynie wirtualnej z systemem Windows, także na ESX. Wszystko jest WOLNO, WOLNO, WOLNO. Przesyłanie artefaktów czasami kończy się niepowodzeniem z nieznanych przyczyn. Czasami interfejs sieciowy zgłasza w interfejsie użytkownika, że zabrakło mu pamięci i blokuje się, a następnie ulega awarii. Wygląda na to, że dział IT uruchamia go ponownie przynajmniej raz dziennie. Dzisiaj wycofują niewielką aktualizację, ponieważ spowodowała problemy. Obecnie IT jest właścicielem sprzętu, na którym działają serwery kompilacji i nie mamy na to żadnego wglądu. Mamy kontrolę administracyjną nad oprogramowaniem. My (twórcy) ciągle na to narzekamy, ale wydaje się, że nic się nie poprawia. Czy deweloperzy powinni posiadać serwer(y) kompilacji? IT tak naprawdę nie ma takiej motywacji, aby uczynić je niezawodnymi i szybkimi, jak robią to programiści. Aby IT rozwiązało problemy, musimy złożyć skargę do naszych menedżerów, a następnie muszą porozmawiać ze swoimi menedżerami, którzy następnie powiedzą działowi IT, aby to naprawił. Możemy zgłaszać problemy bezpośrednio do działu IT, ale wydaje się, że to nie działa, aby rozwiązać problem, ponieważ dział IT ma wiele innych rzeczy, którymi muszą się zająć. Ponadto programiści są tymi, którzy faktycznie korzystają z systemu kompilacji i prawdopodobnie są z nim znacznie bardziej zaznajomieni niż IT. Jak to działa w innych firmach? Jesteśmy firmą około 150 osobową. Więc prawdopodobnie połowa z tego to inżynieria, ale jedna trzecia to prawdopodobnie sprzęt, więc mamy może około 40 programistów.


title: Prawidłowy sposób na cofnięcie kilku ostatnich zatwierdzeń git, w tym scalenie?

text: Mój zespół pracuje z gitem po raz pierwszy i naprawdę nawalił naszego pilota git z powodu naszego braku doświadczenia. Staram się pomóc edukować ich w zakresie git, aby rozwiązać problem na dłuższą metę, ale w międzyczasie dokonane zmiany są całkowicie błędne. W ogóle nie osiągnęliśmy dużego postępu i nie widzę wartości w utrzymywaniu tych zatwierdzeń, kiedy mogą one powodować zamieszanie/dodatkowe problemy w dalszej kolejności. Ostatnim zatwierdzeniem było połączenie gałęzi master z drugą gałęzią, którą przypadkowo utworzył jeden z członków zespołu. Jeśli spróbuję cofnąć, git stwierdza, że muszę użyć flagi -m, ale nie jestem pewien, czy powinienem cofać, czy próbować zmienić bazę w tym przypadku, ani jak bym to zrobił, biorąc pod uwagę strukturę poprzedniej pary zatwierdzeń. Jaki jest najlepszy sposób rozwiązania tego problemu i jak mam to zrobić?


title: Wielkość projektu a wielkość zespołu

text: W nocy jestem niezależnym programistą stron internetowych/projektantem/twórcą aplikacji na iPhone'a (za dnia informatyk) i jestem zainteresowany stworzeniem portalu społecznościowego, który ma zostać upubliczniony (jak Facebook, trzymamy kciuki za pół miliarda użytkowników). Ale obawiam się, że nie poradzę sobie z tym sam, będąc w stanie poświęcić temu tylko weekendy/wieczory. Sklasyfikowałbym się jako średniozaawansowany programista, ale w żadnym wypadku nie napisałem czegoś na tak dużą skalę jak społeczność internetowa. Kiedy projekt staje się zbyt duży dla jednej osoby, a kiedy bierzesz w łeb i zatrudniasz kogoś / współpracujesz z innym web developerem?


title: Czy to dobre zadanie dla uczenia maszynowego – grupowanie fragmentów DNA na podstawie sekwencji?

text: Powiedzmy, że mam listę 50 sekwencji DNA o tej samej długości (6, 8 lub 16 pz/znaków). Chcę je pogrupować w zestawy, powiedzmy, 5 lub 6 sekwencji na zestaw. Mam kilka kryteriów, które muszą być spełnione na podstawie sekwencji: 1) muszą być co najmniej trzy niezgodności (różne znaki), ACGTAC ACTTAT ma 2 niezgodności - pozycje 3 i 6 , więc nie spełnia kryteriów 2) jeśli mówimy, że A i C są czerwone C i T są zielone (kolory laserowe na maszynach sekwencjonujących), wtedy musimy mieć zielony i czerwony laser w każdej pozycji. ACACTG AATGAC CCATGC jest równoważne (r jest CZERWONE, g jest zielone) RRRRGG RRGGRR RRRGGG Tak więc ostatnie cztery pozycje odpowiadają kryteriom (w każdej pozycji mamy czerwony i zielony), ale pierwsze dwie pozycje są wszystkie czerwone, więc to zestaw nie spełniałby kryteriów. Próbowałem brutalnego wymuszania tego i to działa, ale gdy rozmiar zestawu jest wystarczająco duży, liczba kombinacji potrzebnych do sprawdzenia staje się ogromna. Czy byłoby to zatem odpowiednie zadanie dla niektórych algorytmów „uczenia maszynowego”. Czy jest jakiś rodzaj algorytmu/procesu, na który powinienem zwrócić szczególną uwagę? (Właśnie rozpocząłem kurs Coursera, ale omawiane właśnie problemy to regresja liniowa, która wydaje się być inną klasą problemów).


title: Wiosenny szablon JDBC bez DAO?

text: Jestem raczej nowy w pisaniu aplikacji współpracujących z bazami danych i jestem ciekawy projektu, nad którym pracuję. Muszę napisać bardzo prostą aplikację internetową, która będzie wyświetlać dane metryczne na podstawie kilku różnych zapytań (prawdopodobnie nie ponad 15) do różnych tabel bazy danych. Opierając się na moich własnych badaniach, Spring JDBC Template wydawał się dobrą technologią, z której można skorzystać, biorąc pod uwagę dość uproszczoną naturę mojego projektu. Każdy przykład, który widzę, aby go użyć, wydaje się obejmować użycie wzorca DAO. Wyszedłem z założenia, że użycie wzorca DAO nie będzie konieczne do tego, co robię, ale w przykładach wydaje się to niezwykle wszechobecne, więc może się mylę. Jakie kryteria zostaną użyte do oceny, czy powinienem wdrożyć wzorzec DAO z szablonem Spring JDBC dla mojego projektu?


title: Przejście z webforms, framework VS 2008, 3.5 do "następnego poziomu" w oparciu o moje cele

text: Muszę dokonać kilku wyborów, tworząc kilka firmowych stron internetowych, które będą działać przez następne dwa, trzy lata. Obecnie uruchamiam ASP.NET 3.5 z Visual Studio 2008. Programuję raczej z grubsza w WebForms, ponieważ to jest to, czego się nauczyłem i z którym jestem najbardziej produktywny. Nie używam członkostwa ani żadnych innych frameworków w moich projektach. Używam prostej klasy, która utrzymuje kilka kluczy sesji dla każdego użytkownika w oparciu o podstawowe tabele bazy danych dla użytkowników i ról. (Mam około 3000 użytkowników). Do tej pory utrzymywałem proste dane, używając ADO.NET przeciwko SQL Server i klasy dostępu do danych (około 2000, wiem) do tworzenia moich witryn. Moje pytania są następujące: 1. W jakich warunkach lepiej byłoby przejść do MVC? 2. W jakich warunkach uważam, że LINQ i ORM są lepszym sposobem niż standardowy ADO.NET? 3. Czy w moim obecnym stanie rozwoju odniosę korzyści z przejścia ze Studio 2008 do Studio 2010?


title: Algorytm Floyda

text: Czy jest możliwe (spodziewane), że dana osoba (nigdy wcześniej nie widziała) algorytmu, jeśli zostanie zapytana podczas rozmowy kwalifikacyjnej? Jakie inne problemy mają równie ciekawe rozwiązania? Edycja: Ze względu na zamieszanie rzeczywistego algorytmu, o którym mówię, jest to algorytm znajdowania cykli Floyda, czyli algorytm żółwia i zająca.


title: Jak doświadczyć stopniowego doskonalenia wiedzy, gdy początkujący zajmuje się programowaniem pielęgnacyjnym .NET?

text: Swoją karierę jako programista rozpocząłem około 6 miesięcy temu. To moja pierwsza praca i jestem jedynym programistą w tej firmie. Wiedzę .NET zdobyłem poprzez samodzielną naukę, a także poprzez realizację projektów uniwersyteckich. Nasze systemy mają stare podstawy oparte na wcześniejszej wersji .NET i zaczynam czuć, że nie poprawiam się, ponieważ jestem tutaj programistą utrzymania ruchu. Wszystko jest stare, a mój menedżer tak naprawdę nie podejmuje żadnych szans na stopniowe ulepszanie oprogramowania. Jaka jest Twoja opinia? Co powinienem zrobić? Jestem nowicjuszem i ciężko pracuję, aby znaleźć swoją drogę. Nie ma innego programisty, nawet starszego, który mógłby mi tu pomóc. Potrzebuję twojej rady w mojej sytuacji. I ostatnia rzecz, czy mogę dostać nową pracę z programowaniem konserwacji? Chodzi mi o to, czy menedżerowie nie mówią, że nie masz doświadczenia w tworzeniu nowego oprogramowania od podstaw? Czuję się zbędny, co mam zrobić?


title: Czy istnieją pewne korzyści między pracą w firmie z branży IT a pracą w dziale IT firmy z innej branży?

text: Jestem studentem inżynierii oprogramowania i jestem w trakcie dokonywania wyborów zawodowych. Muszę zrozumieć, jakie są główne różnice w dwóch powyższych scenariuszach. Każdy, kto ma doświadczenie w obu, wgląd od ciebie byłby naprawdę pomocny. Z góry dziękuję.


title: Wybór stawki pobieranej od klienta za szkolenie programisty

text: Zostaliśmy postawieni w trochę trudnej sytuacji i staram się znaleźć najlepszy sposób radzenia sobie z tym i jak za to zapłacić. Stworzyliśmy dla klienta niestandardową aplikację internetową i utrzymuję ją przez ostatnie 1,5 roku. Kilka tygodni temu wysłali e-maila z informacją, że zatrudnili programistę i chcieliby zająć się projektem we własnym zakresie. (Nic wcześniej nie wspomniano o zabraniu go do domu.) Byłem oczywiście zaskoczony, ponieważ spodziewałem się, że będę pracował nad projektem przez kolejny rok lub dłużej. Spotkałem się z deweloperem tydzień temu i omówiłem podstawy serwisu. Po mojej ofercie (w tym sugestii innej stawki) i e-mailu uzupełniającym, zapytali mnie, czy byłbym skłonny przeprowadzić szkolenie na temat dalszego rozwoju aplikacji przy użyciu obecnie używanych bibliotek/technik. (Programista ma doświadczenie z językiem, ale nie z bibliotekami.) Zastanawiam się, ile powinienem pobierać za szkolenie 1 na 1 dostosowane specjalnie do witryny i bibliotek (bibliotek wielokrotnego użytku)? Myślę, że szkolenie trwałoby od 3 do 6 godzin, w zależności od poziomu umiejętności programisty. Oto moje trudności w wymyśleniu stawki: * Stracimy dziesiątki tysięcy dolarów, nie mając już klienta i projektu (nie wspominając o przyszłych możliwościach). Więc po części chciałbym zastąpić część tego dochodu szkoleniem. * Zasadniczo szkolę kogoś, aby robił to, co robimy i daję mu możliwość konkurowania z nami. Są dość dużą firmą, która ma możliwość bezpośredniego konkurowania z naszą firmą, chociaż nie jest prawdopodobne, że nasze dwie firmy będą bezpośrednią konkurencją. * Spędziliśmy lata ucząc się bibliotek (50% zewnętrznych i 50% naszych) oraz technologii, za którą nie zapłaciliśmy bezpośrednio. * Nie jestem pewien, jaki jest obszar treningu, szczególnie w przypadku treningu 1 na 1. * Chcę postępować właściwie, ponieważ istnieje niewielka możliwość wpłynięcia na inne relacje biznesowe. Moją pierwszą myślą było naliczenie czegoś około 5-krotności stawki, którą obecnie pobieramy, ale mam wrażenie, że pomyślą, że to wysoka cena. (Nie przejmujemy się zbytnio zdobyciem kontraktu na przeprowadzenie szkolenia, ale byłaby to wyjątkowa okazja, w której moglibyśmy się również uczyć.) Dziękujemy za sugestie i pomysły. Wiem, że to trochę subiektywne pytanie, ale szukam tylko sugestii lub czegoś, o czym nie myślę.


title: Czy źle jest nie tworzyć dokumentacji Javadoc dla mojego kodu?

text: W swojej pracy dużo programuję w Javie (jestem stażystą) i zastanawiałem się, czy generalnie regułą jest tworzenie javadoc do mojego kodu. Zwykle i tak dokumentuję każdą metodę i klasę, ale trudno jest mi trzymać się składni Javadoc (zapisując zmienne i dane wyjściowe, aby parser mógł wygenerować html). Spojrzałem na wiele programów w C, a nawet C++ i podoba mi się sposób, w jaki są one komentowane. Czy źle jest nie dostarczać javadoc z moim kodem?


title: Dlaczego Caja nie jest popularna?

text: Google wypuścił Caja około 2008 r. (Możliwość JavaScript). Nadal jest to głównie język laboratoryjny. Ale XSS i inne ataki zostałyby powstrzymane, gdyby nastąpiła powszechna integracja Caja.


title: Jak i kiedy prawidłowo używać testów UNIT

text: Jestem programistą iOS. Przeczytałem o testowaniu jednostkowym i o tym, jak jest on używany do testowania określonych fragmentów kodu. Bardzo szybki przykład dotyczy przetwarzania danych JSON na bazę danych. Test jednostkowy odczytuje plik z pakietu projektu i wykonuje metodę odpowiedzialną za przetwarzanie danych JSON. Ale nie rozumiem, jak to się różni od rzeczywistego uruchamiania aplikacji i testowania na serwerze. Więc moje pytanie może być nieco ogólne, ale szczerze mówiąc nie rozumiem właściwego wykorzystania testów jednostkowych, ani nawet tego, jak jest to przydatne; Mam nadzieję, że doświadczeni programiści, którzy surfują po StackOverflow, mogą mi pomóc. Wszelaka pomoc jest bardzo doceniana!


title: Ile historyjek użytkownika na osobę należy ukończyć w sprintu?

text: Po prostu natknąłem się na tę liczbę i zastanawiałem się, czy istnieje inne dobrze znane źródło, które pomogłoby potwierdzić te liczby: > Na podstawie danych, które przeanalizowałem na temat pomyślnie ukończonych sprintów, ustaliłem, że > zespół powinien średnio około 1 do 1-1/2 historyjek użytkownika (rzeczywiście, pozycje zaległości produktu > dowolnego rodzaju) na osobę na sprint. ŹRÓDŁO: Blog Mike'a Cohna na temat „Czy codzienny standup powinien być rozgrywany indywidualnie czy historia po historii?”


title: Responsywne projektowanie a oddzielne aplikacje/widoki

text: Jestem zaangażowany w projekt przebudowy istniejącej witryny. Zespół projektantów dostarczył nam - Zespołowi Inżynierów - cztery oddzielne prototypy HTML/CSS pokazujące, jak powinna wyglądać strona: * W przeglądarce na pulpicie. * Na urządzeniu stołowym podobny, ale uproszczony projekt widoku pulpitu * Zaawansowany technologicznie smartfon, projekt jest podobny do aplikacji mobilnej i bardzo różni się od projektów pulpitu i tabletu. Ponadto jest tam pokazywanych mniej treści. * Low-End Smartphone, uproszczona wersja wcześniejszego projektu, ale nadal bardzo podobna. Moim pierwszym impulsem było zbudowanie jednego prototypu HTML/CSS przy użyciu Responsive Web Design i połączenie prototypów wykonanych przez zespół projektowy, ale teraz mam pewne obawy: * Łączenie odmiennych prototypów może dać kod niskiej jakości. * Być może wysyłamy kod/pliki na niektóre urządzenia mobilne, których nie potrzebują. * Musimy poradzić sobie z sytuacją, w której - na przykład - jakaś opcja musi być obecna w tabletach, ale musi być ukryta w smartfonie. Używanie CSS do ukrywania może być marnowaniem przepustowości, więc być może potrzebny jest jakiś kod po stronie serwera. Z tego powodu rozważano pomysł zbudowania dwóch różnych aplikacji internetowych - lub jeszcze lepiej, obsługi dwóch widoków w tej samej aplikacji internetowej przy użyciu jakiegoś frameworka po stronie serwera, takiego jak Spring Mobile\-. Nie jestem ekspertem od Responsive Design, więc nie chcę wiedzieć, jakie jest najlepsze podejście w tej sytuacji lub standardowy sposób rozwiązania tego problemu. **PS:** Jeśli warto powiedzieć, buduję portal przy użyciu WebSphere Portal jako kontenera portletów i buduję portlety przy użyciu Spring Portlet MVC.


title: Stwórz zautomatyzowany program do codziennego sprawdzania strony

text: Czy można stworzyć zautomatyzowany program, który będzie codziennie odwiedzał stronę internetową? Chciałbym, aby działał w tle (najlepiej niewidocznie), gdy mój komputer się ładuje, mam połączenie z Internetem i przechodzę do określonej strony internetowej. Myślę, że byłoby to całkiem proste, ale nie jestem pewien, jakiego języka bym używał ani co to zrobić. Czy to możliwe i jakimi środkami mógłbym to zrobić? **Edycja na podstawie poniższych komentarzy** Jedyną funkcjonalnością, jaką program będzie potrzebował, jest 1. sprawdzenie, czy jest zalogowany i 2. zalogowanie się, jeśli nie jest. Używałbym tylko systemu Windows. Interesuje mnie używanie istniejących programów lub samodzielne tworzenie programu (dla doświadczenia). Jestem noobem, jeśli chodzi o używanie systemów operacyjnych i programowania maszynowego (jestem web guy). Zasadniczo pomyślałem, że fajnie byłoby stworzyć i dobrą praktyką, aby nauczyć się więcej programowania systemu operacyjnego/offline. lub o określonej godzinie, jeśli był włączony, ale jakoś sprawdź, czy był uruchamiany wcześniej w ciągu dnia


title: Czy klasa Factory nadal jest klasą Factory, jeśli zwracane przez nią obiekty już istnieją?

text: Nie mogę się zdecydować, jak nazwać moją klasę. Do tej pory nazwałem to fabryką, ale nie jestem pewien. Oto klasa. Jak widać, istnieje, aby zwrócić konkretny typ interfejsu (`ResolveRegistrationIssue`) na podstawie argumentu dostarczonego do metody pobierającej (`ResolutionFamilyEnum`): @SuppressWarnings("serial") @ManagedBean(name = "resolveIssuesFactory" ) @ViewScoped public class ResolveIssuesFactory implementuje Serializable { @ManagedProperty(value = "#{resolvePrimaryIssuesFactory}") private ResolvePrimaryIssuesBean resolvePrimaryIssuesBean; @ManagedProperty(value = "#{resolveSecondaryIssuesBean }") private ResolveSecondaryIssuesBean resolveSecondaryIssuesBean ; @ManagedProperty(value = "#{resolveTertaryIssuesBean }") private ResolveTertaryIssuesBean resolveTertaryIssuesBean ; public ResolveRegistrationIssue getResolutionBean( ResolutionFamilyEnum familyEnum) { //null safety if(null ==familyEnum) { throw new IllegalArgumentException("Rodzina, która określa używany fasoli rozdzielczości, nie może mieć wartości null."); } if (familyEnum.equals(ResolutionFamilyEnum .PRIMARY)) { return resolvePrimaryIssuesBean; } else if (familyEnum.equals(ResolutionFamilyEnum .SECONDARY)) { return resolveSecondaryIssuesBean; } else if (familyEnum.equals(ResolutionFamilyEnum .TERTERY)) { return resolveTertaryIssuesBean; } else { throw new IllegalArgumentException("Nie można określić poprawnego komponentu problemu z rozwiązaniem dla podanej rodziny."); } } Teraz rozumiem, że klasa Factory akceptuje argumenty, które definiują podmiot, który ma być **opracowany**, a następnie **dostarczony** (zwrócony). Jednak w moim przypadku moje encje są już rozwinięte, ponieważ są referencjami EJB. Tak więc ta metoda tylko je dostarcza. Czy to nadal fabryka?


title: Jak mogę "sprawdzić" kod C++?

text: Dla porównania, jestem programistą JavaScript uczącym się C++. Przeglądarka jest dość potężnym debuggerem i mogę łatwo umieścić punkt przerwania w moim kodzie, najechać kursorem na zmienną lub wyrażenie i uzyskać wartość tego wyrażenia. Czy jest to w ogóle możliwe w C++, czy jestem w zupełnie innym świecie? Zaczynam pisać trochę kodu C++ na kurs online, a debugowanie za pomocą Code::Blocks daje mi bardzo niejasne informacje. Na przykład widzę takie rzeczy: „0x8049bc3 push ebp” w oknie „zegarki”. Nawet jeśli napiszę coś w stylu `int foo = 3;`, nie znalazłem sposobu, aby powiedzieć, że `foo` to 3, kiedy przechodzę przez mój kod. Czy czegoś mi brakuje?


title: Wydanie licencji Spring Data Neo4j?

text: Jeśli używam Spring Data Neo4j do tworzenia oprogramowania i chcę je opublikować do użytku komercyjnego z opłatami, czy istnieje problem z licencją? Ankietuję wiele postów dotyczących wydania licencji Neo4j i Spring Data Neo4j. Wygląda na to, że Neo4j ma dwie wersje, odpowiednio społecznościową i korporacyjną. Wersja Community to GPL-3.0, a wersja Enterprise to AGPL-3.0. Spring Data Neo4j to Apache License 2.0. Rola spring data neo4j w moim oprogramowaniu: 1. To tylko część mojego oprogramowania zajmująca się przechowywaniem relacji i wyszukiwaniem danych. 2.Połączę go z MongoDB lub DB2.


title: Tworzenie stron internetowych w C++ dla REST API

text: Od dawna jestem programistą C#, najbardziej skoncentrowanym na ASP MVC. Dwa lata temu, zasadniczo ze względu na niższe koszty i łatwość wdrożenia/zarządzania, zacząłem migrować moje projekty do linuxa, używając Node.js do obsługi HTML i Mono dla wszystkich operacji backendowych. Komunikują się ze sobą za pomocą HTTP REST API. Ponieważ moje umiejętności w Linuksie coraz bardziej się poprawiały, uważam, że ta kombinacja Node.js/Mono jest trochę dziwna. Mono to świetna rzecz, ale od czasu do czasu pojawiają się problemy, bardziej związane z samą implementacją niż z językiem. Teraz mam około trzech tygodni wolnego czasu pomiędzy projektami i chciałbym zagłębić się w C++ jako mój backend. Próbowałem trochę Pythona i bardzo mi się podobał, ale wymagam jak najszybszych odpowiedzi, dlatego C++ do mnie trafił. Java nie wchodzi w grę, ponieważ chociaż sam język jest dość zbliżony do C#, ma wiele rzeczy, z którymi naprawdę nie chciałbym zawracać sobie głowy (Maven, żeby wymienić jednego) i na koniec dnia, które zmniejszyłyby moje produktywności, przynajmniej gdy stanę się bardziej wydajny w Javie (samo skonfigurowanie Eclipse dla samouczka Jersey zajęło mi około 2 godzin!). Naprawdę nie potrzebuję niczego wymyślnego, ponieważ wszystko, co node.js dla mnie robi, to obsługa html/css/javascript, kilka powiadomień w czasie rzeczywistym (socket.io) i to wszystko. Moje backendy to więcej czytania z tabel, złożona transformacja SQL i walidacja danych wysyłanych przez klienta. Silnik szablonów, którego używam, to Jade, który jest fajny, ponieważ piszę mniej, ale nie miałbym nic przeciwko przełączeniu się na zwykły HTML. 99% pracy w moich projektach odbywa się za pomocą Angular.js za pośrednictwem wywołań JSON. Większość z nich to aplikacje jednostronicowe z dużą ilością logiki na kliencie i zużywające REST API. Naprawdę chciałbym wyciąć wszystkie zależności Mono/.NET i rozwijać coś bardziej natywnego dla Linuksa. Jednocześnie chciałbym pożegnać się również z Node.js w zamian za jeden backend do obsługi mojego API i statycznych stron HTML. Jeśli byłeś tu wcześniej, daj mi znać, jakie są obecne wybory i cokolwiek, co mogłoby mi pomóc w tym eksperymencie. Z góry bardzo dziękuję za poświęcenie czasu na przeczytanie moich obaw. EDIT: Zapomniałem wspomnieć, że czytałem o projekcie Casablanca. Wygląda obiecująco, ale znowu należy do Microsoftu pod okładkami białego open source, właśnie tego ostatnio unikałem.


title: Czy istnieje jakiś szczególny powód do używania list nad kolejkami w funkcjonalnych językach programowania?

text: Większość funkcjonalnych języków programowania, takich jak Scheme i Haskell, używa list jako głównej struktury danych. Kolejki są identyczne z listami, z wyjątkiem tego, że dołączanie na końcu - a nie na początku - ma stały czas. Każdy algorytm, który jest napisany elegancko przy użyciu list z `head` i `tail` może być elegancko napisany przy użyciu kolejek z `init` i `last`. Biorąc pod uwagę, że dołączanie na końcu jest bardziej powszechne niż odwrotnie, myślę, że kolejki są bardziej naturalne niż listy. Czy jest jakiś powód, dla którego zawsze preferowano listy?


title: Wykorzystanie narzędzia profilującego do pomocy w analizie algorytmu brute force w Javie

text: Zostałem poproszony o sprofilowanie (przy użyciu jakiegoś narzędzia, np. YourKit lub JVisualVM) kilku wdrożeń Problemu Traveling Salesman (znalezienie minimalnej ścieżki, która odwiedza wszystkie podane miasta), w kontekście absolwenta Algorytm Analysis and Design kurs. Biorąc pod uwagę podejście brute force algorytmu, zastanawiam się jednak, jak najlepiej wykorzystać narzędzia (na przykład JVisualVM) do analizy złożoności przestrzennej i czasowej algorytmu. Jeśli się nie mylę, algorytm ma złożoność przestrzenną O(n), ponieważ w zasadzie rośnie liniowo wraz z liczbą miast, podczas gdy w złożoności czasowej jest O(n!). Matematyka nie jest tutaj problemem. Po krótkiej zabawie obydwoma wymienionymi narzędziami, mam trudności ze zrozumieniem, w jaki sposób mogą one być przydatne w moim problemie. Jasne, że widzę, które metody są używane najczęściej i jaki % czasu jest używany w każdej z nich, a także jaki jest rzeczywisty ślad pamięci, więc można to wszystko traktować jako wskazówki, gdzie zoptymalizować. Ale poza tym i innym niż zobaczenie procentu procesora, który jest faktycznie używany (lub dostępów IO, które nigdy nie występują w tym programie), nie widzę, jak mogę faktycznie dowiedzieć się czegoś o algorytmie za pomocą tych narzędzi niż matematyka, o której mowa wcześniej, nie. Jakie powinny być moje główne obawy podczas korzystania z profilerów do analizy algorytmów? Ponadto w moim programie umieściłem podstawowe możliwości rejestracji czasu. Może mógłbym użyć narzędzi do profilowania, aby lepiej wykonać tę pracę? Dziękuję


title: Czy istnieje źródło do rozpoczęcia programowania nieporozumień uczniów?

text: Wielu programistów, których zadaniem jest nauczanie początkującej klasy programowania, zapomniało o wielu rzeczach, o których nie wiedzieli lub nie wiedzieliby wcześniej, zanim nauczyli się programować. Istnieje wiele sposobów na niezrozumienie tematu. Ale niektóre wydają się pojawiać bardzo często wśród studentów, bez względu na to, jakiego języka programowania lub podręcznika używa się na początku. Odpowiedź na to pytanie zawiera kilka nieporozumień lub braku koncepcji, które wydają się pojawiać częściej podczas nauczania programowania osób, które nie mają żadnego doświadczenia w programowaniu: Jaki jest najlepszy sposób nauczania początkujących? (takie jak niejasność co do różnicy między środowiskiem, w którym program jest pisany, a gdy jest uruchamiany, że (podstawowy blok) kod programu jest wykonywany sekwencyjnie, różnica między zmienną a jej zawartością itp.) Innym przykładem są pytania z nowego programiści, którzy po prostu zakładają, że zwykłe zmienne (w C, Pythonie itp.) mogą dokładnie reprezentować wspólne ułamki (1/100 części). Czy istnieje lista online lub książka, która obejmuje te koncepcje, których należy nauczać poza składnią i semantyką wybranego języka programowania i IDE?


title: Projektowanie struktury danych usługi pamięci masowej dla modeli rozdzielonych współdzielących te same dane

text: Z pewnością większość z Was pamięta aplikację Norton Commander, w której podobne (czasem te same) dane są wyświetlane w oddzielnych widokach oddzielonych od siebie. Buduję aplikację internetową, która działa zgodnie z tą samą zasadą. Ilość danych jest zbyt duża, aby można je było pobrać/wyświetlić w całości na stronie, a potencjalnie nakładające się podzbiory danych muszą być wyświetlane w osobnych widokach. Moja architektura wygląda tak: > > ┌──────── EventBus ────────┐ > │ │ │ > │ StorageService │ > │ ╱ ╲ > PresenterLeft┤ ├PresenterRight > ╱ ╲ ╲ ╱ Dowiedz się więcej > ViewLeft ModelLeft ModelRight ViewRight > Aplikacja tworzy obu prezenterów i przekazuje im instancje EventBus i StorageService. Prezenterzy z kolei tworzą swoje modele i widoki. Usługa StorageService jest przekazywana do modeli. Komunikacja między prezenterami odbywa się za pośrednictwem EventBus. W tym scenariuszu lewa strona nie ma świadomości prawej strony, jednak modele powinny posiadać te same informacje bez konieczności wykonywania podwójnej podróży w obie strony na serwer. W tym celu korzystam z StorageService. Modele implementują metodę `model.fetch()`, która pyta pamięć o dane. Jeśli te same dane zostały wcześniej zażądane, pamięć po prostu zwróci je, zachowując się jak pamięć podręczna w pamięci. Tu pojawia się właściwe pytanie. **W powyższym kontekście, jak zaprojektować strukturę danych dla _sieciowo wydajnej_ usługi przechowywania danych dla następującego przypadku użycia:** 1. Żądanie modelu po lewej `GET /files?limit=100` 2. Żądanie modelu po prawej `GET /files?limit=110` (ale tak naprawdę potrzebuję tylko ostatnich 10) Spróbowałem: * przechowywać żądania zgłoszone przez modele * dla każdego dodatkowego żądania, postaraj się rozgryźć żądanie diff * wykonaj żądanie porównania ( np. `GET /files?offset=100&limit=10`) * przechowuj pobrane elementy w `{"files": {"id1": item1, ..., "id110": item110}}` Niestety powyższe kroki nie' t pomóc, ponieważ nie ma związku między adresem URL a identyfikatorami. Kiedy model żąda następnego zestawu wartości, nigdy nie wiem, czy faktycznie znajdują się one w pamięci podręcznej. Oczywiście mógłbym użyć strategii buforowania w pamięci pod adresem URL, ale wtedy miałbym zduplikowane wpisy w pamięci podręcznej, czego chciałbym uniknąć. Jakie są Twoje myśli? Czuję się, jakbym tutaj na nowo wymyślał koło. Czy istnieje lepsza/prostsza/powszechnie akceptowana metoda? Być może moja architektura jest wadliwa...


title: Błąd raz na jakiś czas, ale wysoki priorytet

text: Pracuję nad projektem CNC (komputerowe sterowanie numeryczne), który wycina kształty w metalu za pomocą lasera. Teraz mój problem polega na tym, że od czasu do czasu (1-2 razy w 20 nieparzystych dni) cięcie idzie źle lub nie, zgodnie z ustawieniami. Ale to powoduje stratę, więc klient nie jest z tego zadowolony. Próbowałem znaleźć przyczynę tego przez 1. Włączając pliki dziennika 2. Debugowanie 3. Powtarzając to samo środowisko. Ale to się nie powtórzy. Wstrzymanie i kontynuacja operacji sprawi, że będzie ona działać płynnie bez ponownego pojawiania się błędu. Jak poradzić sobie z tym problemem? Czy powinienem to określić jako problem sprzętowy?


title: Wiele instrukcji var w JavaScript

text: Pisanie pojedynczej deklaracji var na funkcję jest uważane za dobre ze względu na czytelność i łatwość konserwacji. Ale kiedy przejrzałem niektóre standardowe biblioteki, ich wersja deweloperska nie przestrzega tego ściśle. Na przykład kod podkreślenia zawiera wiele instrukcji var w wielu funkcjach, które są losowo rozkładane i deklarowane zgodnie z wymaganiami. Czy jest jakiś powód, by nie przestrzegać zasady jednej var?


title: Pytanie o klauzulę o braku rekomendacji na licencji BSD

text: Tworzę niewolną bibliotekę i chcę w niej używać Bcrypt.Net. Klauzula, o której mowa: * Ani nazwa BCrypt.Net, ani nazwiska jej współpracowników nie mogą być używane do promowania lub promowania produktów wywodzących się z tego oprogramowania bez uprzedniej pisemnej zgody. W jakim stopniu oznacza to, że nie mogę używać nazwy Bcrypt.Net? Na przykład, czy mogę powiedzieć „jedyna biblioteka uwierzytelniania ASP.Net zdolna do korzystania z Bcrypt” lub czy mogę nawet dołączyć „obsługuje Bcrypt do haszowania hasła” w materiałach promocyjnych? Uwaga: w rzeczywistości nie modyfikuję żadnego kodu Bcrypt.Net


title: Gdzie umieścić komentarze, deklarację klasy lub konstruktora?

text: Gdzie dla danej klasy powinny trafić komentarze dotyczące celu zajęć? /// <summary> /// <----------------- opisz klasę tutaj (1)? /// </summary> public class Message { ... //członkowie klasy tutaj ... /// <summary> /// <--------------- lub tutaj ( 2)? /// </summary> public Message() { } } Jeśli skorzystam z pierwszej opcji, cel klasy jest bardzo łatwy do odnalezienia po otwarciu pliku, znajduje się on w tym samym miejscu, mniej więcej w tym samym wierszu. Kiedy masz dużo zajęć, jest to łatwiejsze dla oczu. Nie musisz przewijać składowych, aby znaleźć konstruktor. Jeśli skorzystam z drugiej opcji, otrzymuję Intellisense podczas tworzenia obiektu klasy, podając jego przeznaczenie i wyjaśniając parametry, co jest bardzo miłe. Z tego, co mogę powiedzieć, nie mogę uzyskać obu korzyści, stosując tylko jedną metodę. Jedyne rozwiązanie, jakie przychodzi mi do głowy, to umieszczenie tego samego komentarza w obu miejscach, ale to tylko powielanie informacji i nie podoba mi się to.


title: Czy Scala można uznać za funkcjonalny nadzbiór Javy?

text: Pomijając różnice w składni, czy Scala można uznać za nadzbiór Javy, który dodaje paradygmat funkcjonalny do paradygmatu obiektowego? A może są jakieś główne funkcje w Javie, dla których nie ma bezpośredniego odpowiednika w Scali? Z głównymi funkcjami mam na myśli konstrukcje programowe, które zmusiłyby mnie do ciężkiego przepisania/restrukturyzacji mojego kodu, np. gdybym musiał przeportować program Java do Scali. Czy mogę oczekiwać, że mając dany program w Javie, będę mógł przenieść go do Scali niemal wiersz po wierszu?


title: Jak przygotować się, aby inni mogli dodawać języki?

text: Widząc, jak wiele produktów open source oferuje tłumaczenia w wielu językach, zdecydowałem, że zaprojektuję swoją aplikację zgodnie z tym wymogiem. Obecnie posiadam aplikację niszową, która ma pozytywne recenzje - w języku angielskim. Jeśli chciałem poszerzyć grono odbiorców, aby umożliwić użytkownikom posługującym się innymi językami, muszę znaleźć tłumaczy, którzy również programują. Nie o to chodzi w tym pytaniu. Jaka jest standardowa technika umożliwiająca Joe Developerowi, który mówi po angielsku i francusku, dodanie języka francuskiego do całego tekstu i jak mam pozwolić mu na przesyłanie zmian? Czy osobny plik tekstowy/językowy jest właściwą drogą?


title: Gdyby ktoś tworzył oprogramowanie zdolne do wyświetlania treści w dowolnym języku pisanym, co musiałby wziąć pod uwagę?

text: Wiem, że musiałbyś użyć Unicode. I że japoński jest czytany w pionie i odwrotnie niż angielski. Jakie są niektóre rzeczy, które należy wziąć pod uwagę?


title: Spotkanie Scrum – radzenie sobie z ostatnim pytaniem

text: Podczas 5/15 minutowego spotkania scrumowego zadawane są 3 pytania. W przypadku ostatniego pytania „jakie przeszkody stają ci na drodze” Jeśli programista ma problemy - xyz będzie miał problemy, prawdopodobnie przeciągnie to spotkanie po 15 minutach i może przejść do godzinnej dyskusji. Czy zadaniem scrum masterów jest pomoc temu użytkownikowi, czy jest coś, co powstrzyma to przed dłużej niż 15 minutami. Myśli?


title: Różnica między złożonością a gwarancją wydajności

text: Jestem trochę zdezorientowany gwarancją wydajności i złożonością sortowania selekcji. Sprawdziłem przez internet i złożoność sortowania wyboru wynosi O(n^2). To O (n ^ 2) jest pod względem złożoności czasowej, mam rację? A co z gwarancją wydajności? Czy w moim przypadku gwarancja wykonania jest mierzona pod względem wymiany, czy też złożoności czasowej? Jeśli gwarancja wydajności dotyczy zamiany, więc najlepszym przypadkiem zamiany jest zero swapów (tablica jest już posortowana), a najgorszym przypadkiem zamiany jest krok n-1? Gwarancja wykonania jest wtedy równa (n-1)/0=nieokreślona, czy mam rację? Proszę mnie poprawić, jeśli się mylę... czy gwarancja wydajności dotyczy czasu pracy? Wtedy gwarancja wykonania wyniesie (n-1)/(n-1) = 1? Czy ktoś może wyjaśnić moje wątpliwości?


title: Czy Business Intelligence (BI) to odpowiedni tytuł zawodowy?

text: W mojej firmie istnieje dział o nazwie Business Intelligence (BI). Najczęściej budują raporty i konfigurują SSRS, SSIS i powiązane technologie Microsoft. Większość z nich ledwo rozumie SQL (mimo że przez cały dzień pracują z bazami danych), a mniej wie cokolwiek o pisaniu oprogramowania. W innych firmach BI miało niewiele wspólnego z IT. Jestem ciekaw, czy moja obecna firma po prostu źle etykietuje/nie rozumie, co robią ci ludzie. A może właśnie o to chodzi w BI? Jeśli nie są prawdziwymi BI, czy ktoś wie, jaka jest właściwa nazwa ich stanowiska? Będzie to pomocne przy próbach zatrudnienia nowych osób, abyśmy nie tracili czasu.


title: Czy jednostki powinny być dostępne ze wszystkich warstw aplikacji?

text: Googluję ten numer od tygodni, ale nie mogę znaleźć dobrej dyskusji. Sprowadza się to do tego: Skoro encje POCO używane w dbContext są w rzeczywistości definicją bazy danych, to czy nie powinny być ograniczone do warstwy dostępu do danych i nie powinny być widoczne poza nią? Z drugiej strony: wygodnie jest ukryć niektóre encje POCO w ViewModels. dzięki czemu zmienione właściwości można łatwo przekazać z powrotem do warstwy dostępu do danych. Znajduję wiele przykładów Entities, które trafiają do interfejsu użytkownika, ale także wiele przykładów, w których AutoMapper jest używany do mapowania właściwości ViewModel na Entity. Czy ktoś może wskazać mi dobre przykłady pracy lub dyskusje, które mogą pomóc mi dokonać świadomego wyboru?


title: Kiedy warto zastąpić działający dojrzały kod frameworkami+wzorami?

text: Obawiam się, że frameworki w wielu przypadkach stały się modą lub trendem i są nadużywane. Pod wieloma względami ludzie poświęcają szybkość tylko dlatego, że chcą nadążyć za każdą pojedynczą biblioteką, która się pojawia. Jestem za bardziej konserwatywnym podejściem, które wykorzystuje nowe biblioteki i frameworki tylko wtedy, gdy ma to absolutnie sens. Powiązane: Kiedy NIE używać frameworka **Przypadek** Mamy servlet Tomcat6, który jest rozwijany od 2008 roku i za którym stoi wiele godzin pracy. Kod jest bardzo dojrzały, ale nie wykorzystuje żadnych frameworków. Nowy członek zespołu uwielbia używać frameworków i wzorców do wszystkiego. Oprócz zamiłowania do frameworków, uwielbiają także najnowsze wydania, a nawet zaproponowali migrację z Tomcat6 na coś nowszego (JBOSS,GLASSFISH lub TOMCAT8). Nigdy nie przeniosłbym podstawowej usługi produkcyjnej do kontenera/serwera/serwera internetowego, który właśnie wyszedł. Nie przeciwko refaktoryzacji kodu, aby utrzymać go w czystości! Jestem przeciwny dodawaniu frameworków i wzorców, które dodają opóźnienia do kodu produkcyjnego obsługującego tysiące żądań na sekundę. **Serializacja do strumienia (JSON/XML) przy zachowaniu kompatybilności wstecznej** Gdy nadejdzie żądanie, tworzymy zarówno dokumenty XML, jak i JSON zawierające dane związane z parametrami żądania. Ponieważ zachowujemy kompatybilność wsteczną dla starszych klientów, zmiany nie mogą powodować przerwania starszego wsparcia. Ponieważ obsługujemy również zarówno JSON, jak i XML, korzystamy z bibliotek Jackson, ale także KXML. Dla obu formatów mamy 2 różne metody serializacji, które używają **strumieniowego API**. Poza tym, że jest szybszy, uważam również, że jest DUŻO bardziej elastyczny w utrzymaniu kompatybilności wstecznej. Lubię używać systemu w wersji Major i Minor. Wszystkie drobne zmiany w zapleczu, które powodują zmiany w serializowanym dokumencie, dodaję za pomocą instrukcji IF w metodzie serializacji. Po wprowadzeniu kilku zmian (ponad 1 rok) dodajemy nową metodę serializacji. Tak więc wszystkie żądania określające wersję od 1.00 do 1.99 są wysyłane do serializeJSON1. Wszystkie żądania używające wersji 2 do 2.99 są wysyłane do serializeJSON2. Słyszałem argument, że powinniśmy używać ADNOTACJE i MAPA do obiektów. Uważam to za bardzo niesmaczne, ponieważ czytałem, że transmisja strumieniowa jest najszybsza. Strumieniowy interfejs API umożliwia wprowadzanie niezbędnych zmian w locie, podczas gdy MAPOWANIE wymagałoby przechowywania wielu wersji tych samych danych jako różnych obiektów lub przeskakiwania przez inne obręcze. output.startTag(null, TagTag.PRODUCT); output.startTag(null, TagTag.ID); wyjście.tekst(ID); output.endTag(null, TagTag.ID); output.startTag(null, TagTable.DESCRIPTION); if (locale != null && Translations.containsKey(locale) && wersja >= 1) output.text(this.DescriptionURL + "/" + locale); else output.text(this.DescriptionURL); output.endTag(null, TagTable.LONGDESCRIPTION); if (wersja >= 1 && wersja < 1,5) { output.startTag(null, TagTable.POPULARITY); output.text(String.valueOf((int) this.pop)); output.endTag(null, TagTable.POPULARITY); } else if (wersja >= 1.5) { output.startTag(null, TagTable.RATING); output.text(String.valueOf((int) this.rating)); output.endTag(null, TagTable.RATING); } W konkretnych 3 przypadkach powyżej naprawdę nie widzę sensu zastępowania działającego dojrzałego kodu frameworkami/libami/wzorcami, które mogą zwiększyć obciążenie i kosztować dodatkowy czas programowania. Kiedy więc warto zastąpić działający dojrzały kod frameworkami+wzorami? Uwagi? **Aktualizacja: Niektóre testy porównawcze** W przypadku pierwszych dwóch przykładów zamieszczonych wcześniej, użycie REST i HASHMAP nie powoduje zbyt dużej różnicy w wydajności, ale sprawia, że kod jest bardziej czytelny. Teraz bardziej interesująca kwestia dotycząca serializacji w przypadku użycia w hotspocie. Ponieważ serwlet, o którym mowa, miał zbyt dużo innego kodu, stworzyłem zabawkowy przykład, aby przetestować strumieniowanie vs mapowanie. Kod jest dostępny pod adresem: http://stackoverflow.com/questions/21781540/ Jak najbardziej przetestuj go, zmień, uruchom. Bardzo interesujące jest to, że optymalizator Just in time w javie sprawia, że różnica z czasem staje się nieistotna. Oto jak zmienia się procent między mapowaniem a przesyłaniem strumieniowym, im więcej jest iteracji. Mapowanie strumienia iter 0 36,71% 63,29% 20 44,75% 55,25% 40 45,65% 54,35% 60 45,95% 54,05% 80 46,24% 53,76% 100 47 ,09% 52,91% 120 47,09% 52,91% 140 47,37% 52,63% 160 47,64% 52,36% 180 47,92% 52,08% 200 47,64% 52, 36% 220 47,92% 52,08% 240 47,92% 52,08% 260 47,92% 52,08% 280 48,19% 51,81% 300 48,45% 51,55% 320 48, 45% 51,55% 340 48,45% 51,55% 360 48,45% 51,55% 380 48,45% 51,55% 400 48,45% 51,55% 1000 48,72% 51,28 % 2000 49,24% 50,76% 3000 49,24% 50,76% 4000 49,49% 50,51% 5000 49,75% 50,25% 6000 49,75% 50,25% 7000 49,75 % 50,25% 8000 49,75% 50,25% 9000 49,75% 50,25% Ja też ponownie przebiegłem jeszcze raz mam pierwsze 20 iteracji bardziej szczegółowo: 0 39,76% 60,24% 1 41, 18% 58,82% 2 40,83% 59,17% 3 40,12% 59,88% 4 40,48% 59,52% 5 40,83% 59,17% 6 40,83% 59,17% 7 40,83% 59,17% 8 40,48% 59,52% 9 40,12% 59,88% 10 41,52% 58,48% 11 42,53% 57,47% 12 42,86% 57,14% 13 42,86% 57,14% 14 43,18% 56 0,82% 15 43,50% 56,50% 16 43,50% 56,50% 17 43,82% 56,18% 18 43,82% 56,18% 19 43,82% 56,18% 20 44 ,75% 55,25% Po 10 000 iteracji (lub 1000 razy wywołaniu kodu generowania JSON) oto zrzut ekranu z profilowania VisualVM (plik NPS migawki visualVM): ![tu wstaw opis obrazu](http://i.stack.imgur .com/gjl61.png) Tak więc, jeśli to zachowanie optymalizacyjne utrzymuje się również w serwletach Tomcata, oznacza to, że naprawdę **nie ma sensu używać mapowania** (i wielu innych wygodnych funkcji/bibliotek, ponieważ JVN będzie czas). **Wnioski** Na podstawie odpowiedzi/komentarzy myślę, że ostatecznie na to, czy przepisać działający kod produkcyjny, mają wpływ wymagania biznesowe i konkretna analiza kosztów i korzyści dla każdego projektu. Na podstawie benchmarkingu okazuje się, że unikanie niektórych bibliotek/frameworków może nie mieć znaczenia na dłuższą metę ze względu na optymalizacje JIT JVM. **Aktualizacja: po pozostawieniu kodu działającego całą noc** ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/7ESGK.png) Po 275 137 iteracjach i około 30 000 MS: Mapowanie - 19,80% Streaming - 80,20% Naprawdę zastanawiam się, jakie optymalizacje JIT mają tutaj miejsce i czy zachowanie to ma miejsce w przypadku serwletu.


title: wyliczenie dla typów referencyjnych Java

text: Potrzebuję prostego enum deklarującego typy referencyjne Java, takie jak: public enum ReferenceType { SILNE, MIĘKKIE, SŁABY, PHANTOM; } Czy takie `enum` istnieje gdzieś w Java API lub w ogólnej bibliotece narzędziowej, takiej jak Guava ? Nie udało mi się go znaleźć w żadnym miejscu, chociaż znalazłem projekty stron trzecich, które to deklarują (np. google-guice: RefrenceType). Po prostu staram się unikać zanieczyszczania mojego projektu głupimi klasami/wyliczeniami, które mogą istnieć gdzie indziej. **UPDATE** Odkryłem, że Guava faktycznie to miała, ale porzucili to: http://tinyurl.com/ndaqpet


title: DB Design: Jak połączyć pojedynczą kolumnę z kolekcją encji

text: Mam pytanie dotyczące projektowania db, które, jestem pewien, zostało dość obszernie omówione, ale nie mogę już znaleźć dobrej odpowiedzi. Problem polega na tym, jak skutecznie połączyć jeden kurs szkolny ze zbiorem podręczników, kurs może mieć 0 książek, a może mieć 10. Problem polega na tym, że wiele kursów może również korzystać z tego samego podręcznika. Moją pierwszą myślą było włączenie podręcznikowych tabel PK jako FK do tabeli kursów. Następnie tabela kursów ma złożony kod PK składający się z identyfikatora kursu i identyfikatora podręcznika. Problem z tym podejściem polega na tym, że tabela kursów może potencjalnie mieć wiele kolumn, a następnie powtarzam cały wiersz kursu dla każdego dodanego podręcznika, oprócz tego, że muszę ustawić fałszywy textbook_id dla kursów, które nie mają podręcznika. **kursy** * id_kursu * nazwa_kursu * FK id_podręcznika * PK(id_kursu, id_podręcznika) **podręcznik** * id_podręcznika * nazwa_podręcznika Moją kolejną myślą było stworzenie tabeli z 10 kolumnami na podręczniki, której użyję do połączenia kursu do wszystkich podręczników. Ale nie jestem pewien, czy istnieje lepsze podejście (w rezultacie zajmę mniej miejsca), kiedy myślę o tym, myślę, że w pierwszej kolejności nie miałbym kolumn textbook1, textbook2 w tabeli kursów. **kursy** * PK identyfikator_kursu * nazwa_kursu * FK identyfikatory_podręczników ** FK podręczniki** * FK identyfikator_kursu * FK podręcznik_1 * FK podręcznik_2 * FK podręcznik_3 * FK podręcznik_4 **podręcznik** * isbn * nazwa_podręcznika Trochę tła, używając MySql, Hibernate ORM i napisanie osobnego indeksatora wyszukiwania. Czy ktoś ma jakieś sugestie dotyczące lepszego podejścia lub przemyślenia, które z tych dwóch podejść jest lepsze? Z góry dziękuję za pomoc


title: Jak zakończyć moją zależność od .NET?

text: Zajmuję się tworzeniem aplikacji Windows GUI od wielu lat i wskoczyłem do .NET na początku 2005 roku. .NET jest bez wątpienia niezwykłą platformą i nadal jej używam, ale dzięki różnorodności technologii nie chcę pozostać poświęcony temu obozowi. Chcę nauczyć się nowych języków, w których mogę tworzyć aplikacje GUI. Uczę się Rubiego i właśnie zainstalowałem Pythona. Czytałem o WxRuby, frameworku do tworzenia aplikacji Windows GUI. w rubinach. Szukam podobnego frameworka dla Pythona. Poza tym chcę wiedzieć, który język jest bardziej odpowiedni dla aplikacji GUI na poziomie produkcyjnym. Wątpię, czy Ruby jest bardziej skoncentrowany na platformie internetowej z jej przepychem, Ruby on Rails. Wiem, że może nie dostanę tych bogatych klas .NET i imponującego IDE Visual Studio, ale nadal chcę podążać mniej uczęszczaną drogą. Nie chcę iść z IronPythonem i IronRuby, jednak jakiś czas później mogę zanurzyć ręce, aby je zbadać.


title: Dlaczego użytkownicy Gita twierdzą, że Subversion nie posiada całego kodu źródłowego lokalnie?

text: Zajmuję się tylko tym, co przeczytałem na SO, więc wybacz mi, ale wszystko, co czytam, mówi, że jedną z głównych zalet Git nad Subversion jest to, że Git udostępnia cały kod źródłowy deweloperowi lokalnie, nie musząc nic robić serwer. Z moim ograniczonym użyciem SVN i TortoiseSVN, miałem cały kod źródłowy, a przynajmniej myślałem, że mam. Na przykład mam stronę internetową. Przesyłam go do SVN. Nadal prowadzę swoją witrynę lokalnie, prawda? Jeśli ktoś zgłosi zmianę, a ja nie mam połączenia, nie ma znaczenia, czy mam Gita, czy nie, dopóki nie połączę się ponownie z serwerem. Nie rozumiem. Nie proszę o powtórkę jednego z drugim, z wyjątkiem tego jednego punktu.


title: Klauzula „Dane wrażliwe” w Umowie klienta Bitbucket

text: Używam Bitbucket w kilku projektach, ale od 28 kwietnia 2014 r. zastąpią oni swoją Umowę użytkownika końcowego nową Umową z klientem. Nowa umowa wspomina w 7.7.2: " _Nie będziesz przesyłać do Usług Hostowanych ... żadnych informacji umożliwiających identyfikację użytkownika_ " Jeden z moich projektów wyraźnie zawiera takie informacje, a teraz próbuję dowiedzieć się, co zrobić. Oto trzy możliwe opcje, które mógłbym wymyślić: 1. Mogę zachować wszystkie istniejące projekty i kontynuować z nimi pracę, o ile żadna nowa łatka nie zawiera wrażliwych danych. To przy założeniu, że to, co do tej pory zrobiłem, było zgodne z obecną umową, a nowa umowa dotyczy tylko informacji przekazanych po 28 kwietnia. 2. Muszę usunąć ten konkretny projekt, ale pozostałe mogę zachować. Wydaje się to prawdopodobne, jeśli 7.4 w nowej umowie oznacza, że wszelkie dane, które zostały przesłane do "Usług hostowanych" będą traktowane jednakowo, niezależnie od tego, na podstawie której umowy zostały przesłane: _" **Twoje dane** " oznacza dowolne dane, treści, kodu, wideo, obrazów lub innych materiałów dowolnego typu, które przesyłasz, przesyłasz lub w inny sposób przesyłasz do lub za pośrednictwem Usług hostowanych._ 3. Muszę rozwiązać umowę, a tym samym usunąć moje konto i wszystkie moje projekty. Jest to możliwa interpretacja, jeśli kontynuacja 7.4, dotycząca prawa firmy do _"zbierania, używania, kopiowania, przechowywania, przesyłania, modyfikowania i tworzenia prac pochodnych na podstawie Twoich Danych"_ oznacza, że mogą one nadal robić, co chcą, nawet z danymi, które zostały przesłane zgodnie z warunkami starszej umowy i od tego czasu zostały usunięte.


title: Kto ma prawo do kodu pochodzącego z wkładów w projekt open source?

text: Jeśli ktoś rozpocznie projekt open source (na przykład z licencją GPL), w którym ludzie będą wnosić wkład, to kto będzie właścicielem tych wkładów na poziomie całego projektu? Czy nowy kod stanie się własnością oryginalnego autora, czy też współtwórcy będą również autorami? Kto ma prawo do trwającego projektu? Na przykład kto ma prawo wydać kod w drugiej licencji? Tylko oryginalny autor? Czy współtwórcy mogą zrobić to samo, czy też muszą podjąć wspólną decyzję z pierwotnym autorem i wszystkimi współtwórcami?


title: Prawa autorskie dla aplikacji

text: W mojej aplikacji, którą zamierzam wydać, użyłem kilku zajęć innych firm, które można znaleźć za darmo w Internecie. Sprawdziłem wszystkie licencje przed użyciem kodu i każda z nich powiedziała, że mogę użyć kodu komercyjnie. Więc teraz martwię się o to, czy muszę przypisać autorstwo gdzieś w mojej aplikacji twórcy tej klasy? Planuję też, aby moja aplikacja była bezpłatna, ale jeśli w przyszłości będę za nią pobierać opłaty, czy to coś zmieni? Najpopularniejsza licencja, jaką widzę w Licencji MIT: > Niniejszym udziela się nieodpłatnie każdej osobie otrzymującej kopię > tego oprogramowania i powiązanych plików dokumentacji ("Oprogramowanie") na > korzystanie z Oprogramowania bez ograniczeń , w tym bez ograniczeń > prawa do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania sublicencji i/lub > sprzedawania kopii Oprogramowania oraz zezwalania na to osobom, którym Oprogramowanie jest > dostarczone, z zastrzeżeniem następujące warunki: Powyższa informacja o > prawach autorskich i niniejsza informacja o pozwoleniu będą zawarte we wszystkich kopiach lub > istotnych częściach Oprogramowania. OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, > BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB DOROZUMIANYCH, W TYM MIĘDZY INNYMI > GWARANCJI WARTOŚCI HANDLOWEJ, PRZYDATNOŚCI DO OKREŚLONEGO CELU ORAZ > NIENARUSZANIA PRAW. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY W CZYNNOŚCI > UMOWY, CZYNNEJ LUB INNEJ, WYNIKAJĄCEJ Z OPROGRAMOWANIA LUB W ZWIĄZKU Z INNYMI REALIZACJE W OPROGRAMOWANIU. Częścią, co do której nie jestem pewien, jest: > Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu powinny być dołączone do > wszystkich kopii lub istotnych części Oprogramowania. Czy wystarczy, aby ta licencja znajdowała się na początku pliku klasy osadzonego w pliku binarnym, czy też muszę sprawić, by była ona dosłownie dostępna dla użytkownika? Oczywiście nie proszę o fachową poradę prawną, ale każda pomoc byłaby mile widziana.