title: W kolekcji pamięci vs baza danych vs poszczególne klasy dla rzadko zmienianych obiektów

text: Mam aplikację ASP.NET, która umieszcza użytkowników przez szereg formularzy w kreatorze, takim jak moda i umożliwia im wypełnianie pól w formularzu. W kodzie te formularze i pola są reprezentowane jako obiekty „Krok”, z kolekcją obiektów „Pole” jako właściwości. Obecnie mam tylko jedną klasę Step, a każdy pojedynczy krok jest instancją tej klasy z ustawionymi różnymi właściwościami identyfikującymi, w tym kolekcją pól. Obiekty kroków są utrwalane w bazie danych i ładowane za pomocą ORM. Zwróć uwagę, że te obiekty „Krok” nie są w rzeczywistości odpowiedzialne za śledzenie postępu określonego użytkownika, są to tylko szablony opisujące właściwości kroku, takie jak nazwa, nazwa wyświetlana, kolejność kroków itp. Postęp jest śledzony za pomocą serii „Krok elementu” obiekty, które zasadniczo łączą jeden z tych szablonów „Krok” z konkretnym „Projektem”. „ItemSteps” przechowuje informacje o tym, które kroki zostały zakończone, zablokowane, pominięte itp. Jednak te obiekty kroków i powiązane obiekty pól nie są przeznaczone do konfigurowania przez użytkowników końcowych. Większość zmian w obiektach prawdopodobnie spowoduje uszkodzenie aplikacji bez odpowiednich zmian w kodzie. Biorąc to wszystko pod uwagę, widzę 3 możliwe rzeczy, które mogę zrobić. 1. Przeniesienie kroków i pól z bazy danych do jakiegoś zbioru pamięci. Moim podstawowym procesem myślowym jest posiadanie statycznej kolekcji zawierającej wszystkie kroki, która będzie ukryta za moją istniejącą logiką dostępu do danych. 2. Utwórz nową klasę dla każdego kroku i odpowiednio zdefiniuj metody równości, tak aby dwa obiekty kroków tej samej klasy były uważane za równe. Następnie zamiast pytać o moje repozytorium w pamięci lub ORM, wszystko, co muszę zrobić, to utworzyć nową instancję odpowiedniej klasy kroku. Jedyną wadą jest to, że muszę znaleźć sposób na utrwalenie relacji między „ItemStep” w bazie danych a klasą „Step”, z którą należy utworzyć instancję. 3. Nic nie rób i zachowuj wszystko tak, jak jest. Rysunek 1 lub 2 spowoduje poprawę wydajności, ponieważ będzie to mniej podróży do bazy danych i usprawnią proces zmian aplikacji, ponieważ nie będę musiał się martwić aktualizacją bazy danych. I albo 1, albo 2 mogą również ułatwić zbudowanie bogatego modelu dziedziczenia wokół kroków i przeniesienie logiki na samą klasę kroków, zamiast na miejsce, w którym obecnie się znajduje, w moich prezenterach. Co byś polecił z tych trzech możliwych rozwiązań?


title: Pomóż zrozumieć skrypty po stronie serwera

text: O ile rozumiem, w dzisiejszych czasach istnieją zasadniczo 3 opcje wykonywania skryptów po stronie serwera: 1. Używanie języków skryptowych, które mogą być bezpośrednio interpretowane/wykonywane przez serwer sieciowy (np. PHP i ASP), gdzie skrypty są interpretowane/ wykonywane w locie (tj. gdy przychodzą żądania HTTP), dane wyjściowe są osadzane na stronach HTML, a następnie odsyłane do klienta. 2. Używając dowolnego języka (np. C, C++, PERL, Python) system operacyjny serwera jest w stanie wykonać (za pomocą interpretera lub już skompilowanego pliku wykonywalnego), a następnie użyć CGI do komunikacji między serwerem sieciowym a system operacyjny. Dane wyjściowe skryptów trafiają za pośrednictwem CGI na serwer w postaci kompletnych stron HTML, a następnie są odsyłane do klienta. 3. Używanie Javy na serwerze, który może obsługiwać serwlety/JSP, co jest praktycznie tym samym pomysłem, co opcja 1 powyżej, z wyjątkiem używania Javy zamiast PHP/ASP. **Pytania** : 1. Czy moje rozumienie jest na dobrej drodze, czy coś poszło nie tak? 2. Czy ASP i PHP to jedyne języki, które mogą być interpretowane i wykonywane bezpośrednio przez serwer WWW? 3. Gdzie Ruby wypada w powyższej klasyfikacji? Czy może być interpretowany/wykonywany przez serwery takie jak PHP? Czy może komunikuje się przez CGI? 4. Czy skrypty po stronie serwera za pośrednictwem CGI stają się przestarzałe, czy wcale?


title: Gdzie umieścić przykładowe dane w strukturze projektu

text: Pracuję nad projektem Scala i chcę zawrzeć w projekcie jakieś przykładowe dane. W szczególności mój projekt Scala zawiera kod, który wykonuje różne zadania przetwarzania języka naturalnego na danych tekstowych. Chcę dołączyć przykładowy zestaw plików tekstowych, których użytkownik może użyć do przetestowania programu gdzieś w strukturze projektu. W tej chwili umieszczam te przykładowe dane w folderze zasobów (głównie dlatego, że jest to jedyna lokalizacja w projekcie, z której wiem, jak czytać). Ale zastanawiałem się, czy to najlepsza lokalizacja? Ogólnie rzecz biorąc, jaka jest najlepsza praktyka w zakresie umieszczania przykładowych danych w projekcie? Alternatywnie, czy lepszym pomysłem byłoby po prostu podanie tych danych osobno (tj. poza projektem)?


title: Oddzielenie architektury

text: Skonfigurowałem mój projekt ASP.NET MVC w następujący sposób: Warstwa prezentacji: ViewModels, Views, Pewna logika do obsługi odpowiedzi usługi Logika biznesowa / Warstwa usług: Usługi, które działają z danymi z warstwy bazy danych lub prezentacji. (Modele domeny to jednostki EF) Warstwa dostępu do bazy danych: Entity Framework. zgodnie z http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/advanced-entity-framework-scenarios-for-an-mvc-web-application#repo repozytorium/ wzór jednostki pracy nie jest już potrzebny w przypadku EF6. A praca z ASP.NET Identity tworzenie interfejsu dla DbContext jest trudna, dzięki czemu wszystkie usługi są ściśle powiązane z ApplicationDbContext. Czy to w porządku? w scenariuszu, w którym musisz zmienić bazę danych na NoSQL, musiałbyś zmienić cały kod usług zamiast tylko „oprogramowania pośredniego”. Mile widziane są również wszelkie uwagi dotyczące architektury. Staram się znaleźć dobre stanowisko do tworzenia aplikacji.


title: Kiedy należy łączyć i rozdzielać historyjki użytkownika?

text: Jako projekt szkolny wprowadzamy nasz początkowy zestaw historyjek użytkowników. Czy historyjka użytkownika powinna rejestrować oryginalny pomysł użytkownika, bez łączenia ich lub rozdzielania? Na przykład Jan dodał, że „Chcę publikować pytania wielokrotnego wyboru”, a Mike dodał, że „Oprócz wielu pytań, chcę publikować pytania typu prawda/fałsz”. David dodał, że „Chcę pole z potwierdzeniem, zanim dodam pytania”. Czy zostawiasz te 3 historyjki użytkowników bez zmian, czy chcesz połączyć Johna i Mike'a jako „Chcę publikować pytania wielokrotnego wyboru i pytania typu prawda/fałsz”. a w tej nowej historii użytkownika szczegół, taki jak „pokaż pole uformowania przed kliknięciem przycisku dodawania”? Co wybierasz?


title: Jak przekonwertować ten rekurencyjny problem na iteracyjny? Algorytm upraszczania linii nie działa z powodu osiągnięcia maksymalnej głębokości rekurencji

text: Implementuję algorytm Douglas, Peucker's Line Simplification w Pythonie. Zacząłem od tej realizacji. Jednak nie działa w Pythonie z powodu trafienia Maksymalna głębokość rekurencji. Jak mogę przekonwertować ten algorytm na iteracyjny? Nie jestem w stanie wyobrazić sobie tego problemu w ujęciu iteracyjnym. Oczekuję, że otrzymam podejście/wskazówkę, której można użyć zamiast rzeczywistego kodu. Czy można użyć wewnętrznego stosu, aby rozwiązać problem przepełnienia stosu (lub uniknąć maksymalnej głębokości rekurencji)? **Aktualizacja:** znaleziono iteracyjną implementację algorytmu tutaj.


title: Jak nadążyć za najnowszymi technologiami?

text: Pracuję jako Software Developer dla Financial Company i używamy standardowego stosu Java/Java EE z bazą danych Oracle jako backend i używamy frameworka Spring/Hibernate z JBOSS Application Server. Jest to więc w zasadzie standardowy stos i jest to przestarzała aplikacja. Teraz czytam blogi na Infoq.com i korporacyjne blogi inżynieryjne i widzę, jak ludzie wypróbowują nowe technologie, takie jak NoSQL (Mongodb, Cassandra), Cloud Computing (AWS), Big Data (Hadoop i powiązany z nim ekosystem) oraz frameworki obliczeniowe ( Zookeeper, oparta na klastrach cassandra ... mongodb ... konfiguracja hadoop !!!), ale nie mogę użyć tych technologii w moim obecnym projekcie, ponieważ jest to przestarzała aplikacja i nie ma zakresu ani grzebania w podstawowych komponentach. Więc moje pytanie brzmi: 1. Jak mogę się uczyć i przyswajać te wszystkie nowe technologie? 2. Jakie podejście powinienem przyjąć? (Dużo czytam z Infoq i HighScalability o różnych architekturach, ale nigdy nie mam doświadczenia, w którym migruję całą moją aplikację do instancji ec2 i analizuję, jakie są korzyści z tego, lub jakie wszystkie scenariusze powinniśmy wziąć pod uwagę przy tego rodzaju projekcie) Dowolne myśli?


title: Modułowa konstrukcja systemu generowania danych

text: Staram się wymyślić najrozsądniejszy sposób zaprojektowania architektury systemu generowania danych w kilku krokach. Dane w systemie przechodzą kilka transformacji, które można podzielić na osobne kroki (z punktu widzenia logiki biznesowej). Chciałbym, aby system zachował tę modułową konstrukcję, w taki sposób, aby każdy moduł stanowił krok w transformacji danych. Wejście modułu powinno być wyjściem poprzedniego modułu. 1. Jakie są dobre sposoby na zorganizowanie tego przepływu? 2. Jak moduły powinny się ze sobą komunikować? 3. Skąd na każdym kroku powinno pochodzić wejście, a gdzie wyjście? 4. Czy dobrym pomysłem jest wykorzystanie bazy danych jako źródła i celu zużycia/generowania danych dla każdego modułu? 5. Czy moduły powinny być budowane jako osobne skrypty/pliki wykonywalne, które tylko bezpośrednio komunikują się z bazą danych? **Edytuj:** System będzie wdrażany przez kilka osób. Każdemu programiście zostanie przydzielony moduł. Chciałbym, aby architektura uprościła przepływ pracy, umożliwiając każdemu programiście niezależną pracę; i rób założenia tylko na temat danych, które zużywa ich konkretny moduł. **Edytuj 2** : Relacja modułów jest przedstawiona poniżej. Moduły są reprezentowane jako niebieskie pola. Niektóre moduły zależą od danych generowanych przez inne moduły (czarne strzałki). Niektóre moduły wymagają utrwalania danych w bazie danych (szare strzałki przerywane). ![Przepływ modułów](http://i.stack.imgur.com/WWzee.jpg)


title: Jak mogę przeprowadzić migrację z Excel VBA z ADO do C++ z OCCI?

text: Jestem zatrudniony jako programista, ale jedyne dostępne mi narzędzia do tworzenia aplikacji to Access i Excel (tj. VBA). Na szczęście mam dobry dostęp do naszej bazy danych Oracle, ale wymagało to trochę perswazji! Minęło trochę czasu, ale umiem pisać dobre, aczkolwiek waniliowe C (między innymi mniej istotnymi rzeczami) i znam model OOP. Problem, z którym się zetknąłem, polega na tym, że VBA z ADO nie jest wystarczająco solidny, aby zaspokoić moje potrzeby. Więc moje pytanie brzmi: jak realistyczna byłaby migracja z tego środowiska do C++ (powiedzmy, używając Visual C++) z interfejsem wywołań Oracle C++, biorąc pod uwagę moje doświadczenie? Czy krzywa uczenia się (C++, w którym krótko się bawiłem, OCCI i ostatecznie kodowanie GUI systemu Windows) byłaby zbyt stroma, aby ją uzasadnić? To znaczy, czy mógłbym nauczyć się tego w pracy do poziomu produkcyjnego w krótkim czasie?


title: Jak oszacować długość projektu na podstawie innego projektu?

text: Zastanawiałem się, czy istnieją modele szacowania projektów, które wykorzystują wyniki poprzednich projektów. Na przykład wyobraź sobie, że chcę stworzyć aplikację na telefon w oparciu o aplikację internetową, którą ukończyłem w zeszłym miesiącu. Powiedzmy, że aplikacja internetowa zajęła 1000 godzin, ale nie wiem nic o programowaniu mobilnym. Jeśli chcesz dodać do równania kolejną liczbę, możesz powiedzieć, że 50% funkcji zaimplementowanych w aplikacji internetowej będzie musiało zostać zaimplementowanych w aplikacji mobilnej. Gdzie w ogóle zacząłbym szacować nowy projekt? Z góry dziękuję.


title: Czy branża „modelowa” jest powszechną praktyką?

text: Pomyślałem tylko, że dobrze byłoby mieć dedykowaną gałąź kontroli wersji dla wszystkich zmian w schemacie bazy danych i chciałem wiedzieć, czy ktoś inny robi to samo i jakie są wyniki. Załóżmy, że pracujesz z: 1. Modelem/dokumentacją schematu (jakiś plik, w którym wizualnie modelujesz bazę danych w celu wygenerowania źródła schematu, powiedzmy MySQL Workbench, z plikiem .mwb, który jest binarny) 2. Źródłem schematu (.sql 3. Generowanie kodu opartego na schemacie Normalnie pracowaliśmy z gałęziami cech, więc dokonywaliśmy zmian w plikach modeli (specyficznych dla bazy danych), a następnie musieliśmy ponownie generować punkty 2 i 3, zajmując się możliwymi konflikty (lub nawet przepisywanie kodu). Teraz powiedz, że przepływ pracy przebiega tak samo, jak poprzednia numeracja elementów. Dzięki gałęzi modelu nie musisz uzgadniać modelu schematu z plikami binarnymi w innych gałęziach funkcji ani ponownie generować źródła schematu i ponownie generować kod (który może zawierać kod ludzki na wierzchu). To ma dla mnie tyle sensu, że wydaje mi się dziwne, że nie widziałem tego wcześniej jako powszechną praktykę. **Edytuj** : liczę na to, że scalenia gałęzi będą asercjami dla modelu pasującego do kodu. Używam DVCS, więc nie boję się długotrwałych gałęzi lub strasznie wyglądających połączeń. Zajmuję się również rozgałęzieniem funkcji.


title: Czy to zły pomysł, aby odejść od składni selektora CSS w silniku selektora JavaScript?

text: Projektuję silnik selektora JavaScript i obecnie skupiam się na parsowaniu ciągu selektora. W szczególności kombinatory. Znane mi kombinatory CSS3 to: * `>` (dzieci) * `spacja` (potomkowie) * `+` (następne rodzeństwo) * `~` (wszystkie następne rodzeństwo) są stosowane). Jednak teraz zdaję sobie sprawę (teraz, kiedy dokładniej badam ten paradygmat), że wydaje się to nieco ograniczające w ustawieniach JavaScript. Poniżej stworzyłem alternatywną listę kombinatorów. Chciałbym wiedzieć: 1. Czy któryś z obecnych silników selektorów odbiega od standardowych metod wyboru CSS? (Jestem zaznajomiony z Sizzle i Sly, ale żaden z pozostałych) 2. Czy widzisz jakiś powód, dla którego którykolwiek z wymienionych przeze mnie kombinatorów nie działałby dobrze? 3. Czy uważasz, że posiadanie większej liczby opcji ciągów selektorów (więcej kombinatorów, więcej filtrów itp.) jest korzystne, czy jest to tylko marnotrawstwo/dezorientacja/głupie/itd.? Z góry dziękuję wszystkim za przemyślenia! * `>` (dzieci) * `>>` (potomkowie) (również spacja nadal działa) * `+` (następne rodzeństwo) * `++` (wszystkie następne rodzeństwo) (także, tylda nadal działa) * `-` (poprzednie rodzeństwo) * `--` (wszystkie poprzednie rodzeństwo) * `*` (poprzednie i następne rodzeństwo) * `**` (całe rodzeństwo) * `^` (rodzic) Przykład 1: `div ^ span ` \- pobierz wszystkie span z dzieckiem div Przykład 2: `div ** span` \- pobierz wszystkie span rodzeństwa div Przykład 3: `.lastListItem -- li` \- wszystkie li przed li z klasą `.lastListItem ` Przykład 4: `#rzecz ^ div ** .error` \- wszystkie elementy z klasą `.error`, które są rodzeństwem rodzica #rzeczy (zakładając, że rodzic #rzecz jest div) p.s. Aha, pomyślałem też o postaci zastępczej, która mogłaby zastąpić każdy prosty selektor. Przykład 4 może wyglądać tak (z podkreśleniem jako symbolem zastępczym): Przykład 4 alt: `#thing ^ _ ** .error` \- wszystkie elementy z klasą ".error", które są rodzeństwem rodzica #thing (nie ma znaczenie, jakiego rodzaju element jest rodzicem #rzeczy)


title: Rozwiązywanie problemu ostatniej mili w inżynierii oprogramowania

text: Im więcej piszę kodu, tym bardziej zdaję sobie sprawę, że pisanie kodu nie jest trudną częścią. Najtrudniejszą częścią jest upewnienie się, że wszystkie zależności są w porządku, nie ma zakodowanych na stałe ścieżek, że nie mam dziwnych ukrytych zależności bibliotek, że jest dokumentacja, jak to zrobić i uruchomić itp. Narzędzia takie jak włóczęga, rake, chef-solo i fpm zdecydowanie pomagają mi w niektórych z tych problemów, ale prawie zawsze jest coś, co przeoczam, a kiedy przychodzi czas na wdrożenie kodu, prawie zawsze coś idzie nie tak. Jestem też trochę zniechęcony tym, jak mało większości programistów zależy na tym, aby ich kod był łatwy do wdrożenia. Jak więc ludzie zazwyczaj rozwiązują problem ostatniej mili? Jak możesz upewnić się, że Twój kod jest możliwy do wdrożenia przy jak najmniejszym zamieszaniu?


title: Jaki jest zalecany wzorzec planowania punktów końcowych REST dla przewidywanych zmian

text: Próba zaprojektowania interfejsu API dla aplikacji zewnętrznych z przewidywaniem zmian nie jest łatwa, ale odrobina przemyśleń z góry może ułatwić późniejsze życie. Próbuję ustanowić schemat, który będzie obsługiwał przyszłe zmiany, zachowując zgodność wsteczną, pozostawiając poprzednie programy obsługi wersji. Podstawowym problemem związanym z tym artykułem jest to, jaki wzorzec należy zastosować dla wszystkich zdefiniowanych punktów końcowych dla danego produktu/firmy. ## Schemat podstawowy Biorąc pod uwagę podstawowy szablon adresu URL `https://rest.product.com/` wymyśliłem, że wszystkie usługi znajdują się w `/api` wraz z `/auth` i innymi punktami końcowymi nie opartymi na odpoczynku, takimi jak ` /dok. Dlatego mogę ustalić podstawowe punkty końcowe w następujący sposób: https://rest.product.com/api/... https://rest.product.com/auth/login https://rest.product.com/auth/ wyloguj https://rest.product.com/doc/... ## Punkty końcowe usługi Teraz dla samych punktów końcowych. Troska o „POST”, „GET”, „DELETE” nie jest głównym celem tego artykułu i dotyczy samych tych działań. Punkty końcowe można podzielić na przestrzenie nazw i akcje. Każda akcja musi również prezentować się w sposób wspierający fundamentalne zmiany typu zwracanego lub wymaganych parametrów. Korzystając z hipotetycznej usługi czatu, w której zarejestrowani użytkownicy mogą wysyłać wiadomości, możemy mieć następujące punkty końcowe: https://rest.product.com/api/messages/list/{user} https://rest.product.com/api/messages /send Teraz, aby dodać obsługę wersji dla przyszłych zmian API, które mogą być zepsute. Możemy dodać sygnaturę wersji po `/api/` lub po `/messages/`. Biorąc pod uwagę punkt końcowy `send`, moglibyśmy mieć następujące dla v1. https://rest.product.com/api/v1/messages/send https://rest.product.com/api/messages/v1/send Więc moje pierwsze pytanie brzmi, jakie jest zalecane miejsce na identyfikator wersji? ## Zarządzanie kodem kontrolera Więc teraz ustaliliśmy, że musimy wspierać wcześniejsze wersje, musimy w ten sposób w jakiś sposób obsłużyć kod dla każdej z nowych wersji, który może z czasem przestać działać. Zakładając, że piszemy punkty końcowe w Javie, możemy zarządzać tym za pomocą pakietów. pakiet com.product.messages.v1; publiczny interfejs MessageController { void send(); Wiadomość[] lista(); } Ma to tę zaletę, że cały kod został oddzielony przez przestrzenie nazw, gdzie każda zmiana przerywająca oznaczałaby, że nowa kopia punktów końcowych usługi. Wadą tego jest to, że cały kod musi zostać skopiowany, a poprawki błędów, które mają zostać zastosowane do nowych i wcześniejszych wersji, muszą zostać zastosowane/przetestowane dla każdej kopii. Innym podejściem jest utworzenie programów obsługi dla każdego punktu końcowego. pakiet com.product.messages; public class MessageServiceImpl { public void send(String version) { getMessageSender(version).send(); } // Załóżmy, że mamy listę nadawców w kolejności od najnowszych do najstarszych. private MessageSender getMessageSender(String version) { for (MessageSender s : senders) { if (s.supportsVersion(wersja)) { return s; } } } } To teraz izoluje wersjonowanie dla każdego samego punktu końcowego i sprawia, że poprawki błędów są kompatybilne z portem wstecznym, w większości przypadków trzeba je zastosować tylko raz, ale oznacza to, że musimy wykonać trochę więcej pracy dla każdego punktu końcowego, aby obsłużyć ten. Mam więc moje drugie pytanie „Jak najlepiej zaprojektować kod usługi REST do obsługi wcześniejszych wersji”.


title: Jaka licencja na FOSS, który sprzedawałby pakiety na Maca i Windowsa, ale rozdawałby je na Linuksie?

text: Kod powinien pozostać tak otwarty, jak to tylko możliwe, ale planuję sprzedawać go na Windows i Mac oraz tworzyć darmowe rmp/deb. Czy licencja ma znaczenie? Wydaje mi się, że po prostu sprzedaję tutaj usługę kompilacji i dystrybucji oprogramowania.


title: Różnica między specyfikacją funkcjonalną a techniczną

text: Piszę specyfikację projektu i zmagam się z oddzieleniem specyfikacji funkcjonalnej od specyfikacji technicznej (patrz http://www.joelonsoftware.com/articles/fog0000000035.html). Na przykład próbuję określić zachowanie, gdy użytkownik żąda listy obiektów Foo, na których ma widoczność. Czy w specyfikacji funkcjonalnej powinienem opisać co dokładnie jest zwracane (tj. strukturę obiektu Foo) czy po prostu system zwraca ich listę, a następnie umieszczać szczegóły obiektu Foo w specyfikacji technicznej? Projekt jest przeznaczony dla interfejsu API na wypadek, gdyby miało to jakiekolwiek znaczenie. Nie mogę znaleźć wielu przykładów na to, jak napisana jest taka specyfikacja API.


title: Niewirusowa licencja open source, ale z klauzulą o ujawnieniu źródła?

text: Szukam licencji (na bibliotekę C), która zasadniczo mówi: „Redystrybucji w formie binarnej musi towarzyszyć kod źródłowy Większej Pracy (Mój kod + Twój kod)”, tj. L = M + Y, z ' +' oznacza tu na przykład łączenie statyczne / łączenie dynamiczne. Poza tym nie może być więcej ograniczeń. Jeśli wybiorę swoją licencję 'X' jako: * GPL - kod źródłowy Larger Work, zarówno M, jak i Y, również musi być licencjonowany w całości na licencji GPL. * LGPL - Mój kod nadal jest LGPL, Twój kod może być przechowywany w zamkniętym kodzie źródłowym, jeśli zajdzie taka potrzeba. * BSD - kod źródłowy ani M ani Y nie musi być ujawniany. Dla jasności, plik binarny musi być objęty licencją 'X', ale kod źródłowy Większej Pracy musi być _dostępny_ \-- na dowolnej licencji, jakiej chce Autor Większej Pracy, nie musi być ograniczony do 'X'. LGPL zbliża się, ale nie nakazuje dostępności źródła Twojego kodu. Przykładowy przypadek użycia: Autor Większej Pracy _musi_ przekazać odbiorcy cały swój kod źródłowy (zarówno M, jak i Y), ale może poprosić odbiorcę o podpisanie ograniczającej modyfikacji NDA Y, ale odbiorca może studiować Y. W skrócie, „X” nie powinien mieć cech dziedzicznych (takich jak *GPL), ale dostępność kodu źródłowego powinna być wymagana. Czy istnieje taka „niewirusowa” licencja FOSS? Z góry dziękuję ! PS: Najpierw zadałem to pytanie na StackOverflow, ktoś tam zasugerował, żebym je zamieścił na tej stronie. To pytanie zostało tam zamknięte jako nie na temat i usunąłem je z SO.


title: Warstwa usług - jak szeroka powinna być i czy powinna być używana również z aplikacji lokalnej?

text: **Tło:** Potrzebuję zbudować aplikację desktopową z kilkoma operacjami (CRUD i więcej) (=winforms), muszę stworzyć inną aplikację, która ponownie wykorzysta niektóre funkcje głównej aplikacji (=webforms) . Używam warstwy usług do ponownego wykorzystania moich funkcji. Usługa wywołuje funkcje na warstwie BL (popraw mnie, jeśli robię to źle). więc mój pulpit ma 4 projekty - DAL, BL, UI, WEBSERVICES. **Dylemat (prosty, ale potrzebuję jeszcze kilku bardziej doświadczonych opinii):** 1. W moim głównym interfejsie użytkownika winforma - powinienem wywołać funkcje z BL - bl.getcustomers(), czy zrobić to podobnie jak to nazywam w formularzu webowym i wywołać funkcje z serwisu - webservices.getcustomers? 2. Czy powinienem utworzyć usługę dla każdej funkcji w BL, nawet jeśli potrzebuję niektórych funkcji tylko w jednym interfejsie użytkownika? na przykład - czy powinienem tworzyć usługi dla wszystkich operacji CRUD, mimo że muszę ponownie użyć tylko operacji aktualizacji w formularzu internetowym? _TWOJA POMOC JEST BARDZO CENIONA_


title: Udzielenie pracodawcy pełnomocnictwa do uzyskania Twoich wynalazków

text: Czy to normalne/tylko, że firma programistyczna prosi o pełnomocnictwo, aby zapewnić, że uzyska patenty na wszystko, co wymyślisz, gdy jesteś zatrudniony jako programista? **Aktualizacja:** W moim przypadku wróciłem do pracodawcy. Powiedzieli mi, że nie są zainteresowani wykorzystaniem moich wynalazków, które nie są związane z domeną, która nie została wynaleziona w godzinach pracy, przy użyciu zasobów firmy. Firma zachęca do wkładu open source i nie będzie się w tym ingerować. Przeanalizowałem dalej umowę i w momencie, w którym termin „wynalazki” jest zdefiniowany w sensie prawnym, stwierdziłem, że wynalazki w kontekście tej umowy to tylko te, które zostały opracowane przy użyciu zasobów firmy w czasie firmy. Pełnomocnictwo pozwala firmie zapewnić, że mogą uzyskać mój podpis (lub jego odpowiednik pod moją nieobecność) w przypadku wszelkich wynalazków, które mogą chcieć opatentować.


title: Jak komunikować się w firmie, co jest stale wdrażane

text: Pracuję dla małej firmy programistycznej, w sumie 20 osób w całej firmie, 3 w fazie rozwoju. Przyjęliśmy CD dla naszych zobowiązań do bagażnika i działa świetnie, od strony zarządzania kodem i czasu pracy. Jednak – nasi pracownicy pomocy technicznej i dział marketingu skarżą się, że nie czują, że mają wystarczająco dużo czasu na wprowadzenie nowych funkcji i powiadomień o poprawkach błędów, które mogą zmienić zachowanie. Częścią tego, dlaczego kochamy system CD, jest to, że jesteśmy w fazie rozwoju, jest szybki, naprawiamy błąd, dodajemy szybką funkcję, zamykamy Bugz i przechodzimy z naszym dniem do następnego elementu. Wszyscy członkowie naszej firmy są teraz na HipChat przez cały czas, a gdy nastąpi wdrożenie, wiadomość jest wysyłana do pokoju, w którym znajdują się wszyscy członkowie firmy, informując ich, co zostało właśnie wdrożone (pokazuje tylko komunikaty o zatwierdzeniu z napiwku do ostatniego zarejestrowanego wdrożenia). Pracujemy również nad tym, aby upewnić się, że kiedy wprowadzamy zmianę, która modyfikuje interfejs użytkownika lub zachowanie publiczne, publikujemy zrzut ekranu w pokoju Wszystkie firmy i wyjaśniamy, na czym polega zmiana zachowania, szukając odpowiedzi lub wątpliwości. Często odpowiedzią jest milczenie. Czasami jest to kilka drobnych pytań, ale nic, co mogłoby powstrzymać wdrożenie. Zastanawia mnie, w jaki sposób inni użytkownicy metody CD radzą sobie z powiadomieniami o nowych funkcjach i zmianach w obszarach firmy, które nie są w fazie rozwoju - i ostatecznie trafiają do klientów na świecie? Dzięki, Franciszku


title: Więc Singletony są złe, to co?

text: Ostatnio dużo dyskutowano na temat problemów z używaniem (i nadużywaniem) Singletonów. Byłem jedną z tych osób na wcześniejszym etapie mojej kariery. Widzę teraz, na czym polega problem, a jednak wciąż jest wiele przypadków, w których nie widzę dobrej alternatywy – i niewiele z dyskusji na temat singletonów naprawdę ją zapewnia. Oto prawdziwy przykład z dużego, niedawnego projektu, w który byłem zaangażowany: Aplikacja była grubym klientem z wieloma oddzielnymi ekranami i komponentami, który wykorzystuje ogromne ilości danych ze stanu serwera, który nie jest zbyt często aktualizowany. Dane te były w zasadzie buforowane w obiekcie "menedżera" Singletona - przerażającym "stanie globalnym". Pomysł polegał na tym, aby mieć to jedno miejsce w aplikacji, które przechowuje i synchronizuje dane, a następnie wszelkie nowe ekrany, które są otwierane, mogą po prostu odpytywać o większość potrzebnych danych, bez konieczności powtarzania żądań o różne dane pomocnicze z serwera. Ciągłe wysyłanie żądań do serwera zabierałoby zbyt dużą przepustowość – i mówię o tysiącach dolarów dodatkowych rachunków za Internet tygodniowo, więc było to nie do przyjęcia. Czy istnieje inne podejście, które mogłoby być tutaj odpowiednie niż posiadanie tego rodzaju globalnego obiektu pamięci podręcznej menedżera danych? Ten obiekt nie musi oczywiście być oficjalnie „Singletonem”, ale koncepcyjnie ma sens bycie nim. Jaka jest tutaj ładna, czysta alternatywa?


title: Jak ocenić jakość kodu, gdy nie znasz języka?

text: Hipotetycznie, gdybym miał przeprowadzić wywiad z kimś na nowe stanowisko programisty PHP, gdy mam doświadczenie w .NET, jak mogę ustalić, czy próbka kodu, którą mi dostarczyli, jest wydajna i dobrej jakości? Innymi słowy, jaki jest najlepszy sposób oceny kodu programisty, jeśli nie znasz języka?


title: Czy istnieje nazwa tego użycia wzorca projektowego State?

text: Chcę sprawdzić, czy istnieje szczególna nazwa dla tego stylu programowania określonego rodzaju zachowania w programie. Wspomniany program działa w czasie rzeczywistym, w pętli aktualizacji, a program używa wzorca projektowego State, aby wykonać pewną pracę, ale jest to specyficzny sposób, w jaki wykonuje pracę, o której chcę wiedzieć. Oto jak jest używany. - Skonstruowany obiekt Foo z konkretnym obiektem StateA - Pierwsza pętla działa --- Funkcja Foo.Run wywołuje StateA.Bar --- w StateA.Bar zastępuje stan Foo na StateB - Druga pętla działa --- Foo.Run wywołuje StateB .Bar - Trzecia pętla działa --- Foo.Run wywołuje StateB.Bar - Czwarta pętla --- itd. Krótko mówiąc, `Foo` nie ma wyraźnej funkcji `Initialize`. Będzie miał po prostu `Run`, ale `Run` zrobi coś unikatowego w pierwszej klatce aby zainicjalizowaćcoś dla `Foo` a następnie zastąpićto inną akcją, która będzie powtarzana we wszystkich następnych ramkach- więc nie ma potrzeby sprawdzania jeśli `Foo` jest już zainicjowane. To tylko akcja „naciśnij start i ruszaj”. Jak nazwałbyś wdrożenie tego typu zachowań?


title: Najlepsza metoda organizowania/zarządzania zależnościami w VCS w ramach dużego rozwiązania

text: Prosty scenariusz: * 2 projekty są pod kontrolą wersji * Aplikacja * Test(y) * Znaczna liczba meldunków jest wykonywana codziennie w aplikacji. * CI buduje i uruchamia całą automatyzację co noc. Aby pisać i/lub uruchamiać testy, musisz mieć skompilowaną aplikację (do odwoływania się do zestawów instrumentalnych). Teraz uznaj, że aplikacja jest **ogromna** , tak że jej kompilacja jest niemożliwa w czasie (cały dzień na kompilację). Oczywistym efektem ubocznym jest to, że po wykonaniu kompilacji lokalnie, jest ona natychmiast niezgodna z najnowszą. Na przykład: gdybym miał zsynchronizować się z najnowszymi i otworzyć jeden z projektów testowych, nie zbudowałbym go lokalnie, dopóki nie zbudowałbym aplikacji. To samo dotyczy synchronizacji z inną gałęzią/kompilacją/tagiem. Tak więc, aby w ogóle zacząć działać, muszę poczekać dzień, aby zbudować aplikację lokalnie, aby można było załadować zestawy - a wtedy te zestawy nie byłyby najnowsze. Jak zorganizować repozytorium lub (najlepiej) środowisko programistyczne tak, aby można było stale opracowywać testy względem aktualnej kompilacji lub określonej konkretnej kompilacji, jednocześnie minimalizując budowanie aplikacji tak bardzo, jak to możliwe?


title: Porównanie plików FTP

text: Czy istnieją jakieś programy FTP, które również porównują pliki, abym mógł wybrać pliki lokalne i zdalne i zobaczyć, co faktycznie się zmieniło? Nie znalazłem żadnego, kiedy googlowałem. Ale wydaje mi się, że nie jest to bardzo zaawansowany przypadek użycia. Z pewnością wielu innych poczułoby taką potrzebę… prawda?


title: Jaki jest sens linku rel="self" w REST API?

text: Często widzę następujące w dokumentach HTML <link rel="self" href="http://example.com/something"> lub tak w linku JSON: { rel="self", href="http:// example.com/something" } lub w XML <atom:link rel="self" href="http://example.com/something" /> Miałem więc kilka pytań: 1. Dlaczego dołączać ten link? Jakie to daje korzyści? (Proszę powiedzieć, że jest ku temu powód i nie jest to tylko talizman „dobrej praktyki”) 2. Jak powinienem wykorzystać ten link u moich klientów? Jaki jest przypadek użycia tego linku? 3. Kiedy _nie powinienem_ używać tego linku? Kiedy nie ma sensu go uwzględniać?


title: Czy wzmianka o moim blogu w moim CV jest pomocna czy szkodliwa w poszukiwaniu pracy?

text: Mam bloga, którego używam głównie do zapisywania rozwiązań problemów, na które miałem problemy ze znalezieniem odpowiedzi. Głównie problemy polegające na tym, że dokument online, który wygooglowałem, zawierał zbyt wiele informacji, a odpowiedź na moje pytanie znalazłem na piątej stronie mojego trzeciego trafienia w Google. (Albo jeśli zadałem pytanie tutaj, albo nie otrzymałem odpowiedzi, albo zostałem zaatakowany za zadanie pytania, na które „odpowiedź można łatwo wygooglować”). Często zaglądam na ten blog, aby przypomnieć sobie, w jaki sposób rozwiązał problem i otrzymuje przyzwoitą liczbę trafień od innych. W każdym razie zastanawiałem się, czy wspomnienie o tym blogu w moim CV pomogłoby, czy zaszkodziłoby mi w poszukiwaniu pracy? Tematy są na całej mapie. Mam nadzieję, że pokazuje to, że * jestem osobą, która znajduje rozwiązania problemów * używałem w swojej pracy wielu różnych technologii * nie boję się podjąć wyzwania z czymś tak prostym? * Dlaczego ta osoba zawraca sobie głowę blogowaniem tych rzeczy?


title: Wybierasz framework do tworzenia stron internetowych?

text: Dotarłem więc do punktu, w którym chcę rozpocząć tworzenie strony internetowej. Pierwotnie planowałem zbudować wspomnianą stronę używając PHP i CodeIgnitera, znam oba, ale prawdę mówiąc, nie przepadam za nimi. Uważam, że po prostu robią się dość niechlujne, CodeIgniter trochę pomaga, ale bez względu na wszystko, wydaje się, że większość PHP jest bardziej zaciemniona niż powinna. W każdym razie doszedłem do punktu, w którym chcę używać Pythona lub Rubiego. Jestem zaznajomiony z obydwoma, choć bardziej z Pythonem, ale nigdy nie robiłem w nich żadnego tworzenia stron internetowych. Poświęcę niezbędny czas, aby nauczyć się frameworków (i pogłębić moją wiedzę w wybranym przeze mnie języku), ale muszę wybrać jeden. Nie lubię żadnego języka bardziej niż drugiego, oba mają swoje zalety... Jednakże, ponieważ nigdy nie tworzyłem stron internetowych w żadnym z języków, miałem nadzieję, że możecie mi dać kilka wskazówek. Jakie są dostępne frameworki dla każdego języka? Co polecasz i dlaczego? Uwaga: przyglądałem się przede wszystkim Railsom i Django - ale nadal jestem otwarty na innych. Szukam takiego, który będzie działał tylko dla jednego (a może dwóch) programistów. Musi być dość łatwy do nauczenia (ale poświęcę trochę czasu, aby się tego nauczyć). Ponadto chciałbym, aby łatwo obsługiwał czysty kod i zwinny rozwój.


title: Kto może nazywać się programistą interfejsu użytkownika?

text: **Kto może nazywać siebie programistą interfejsu użytkownika, nie będąc pozerem?** Zauważyłem, że ludzie nazywają siebie programistami interfejsu użytkownika, co ja zaklasyfikowałbym jako projektanci stron internetowych. Nie pukam, chciałbym tylko wiedzieć _kto jest prawdziwym interesem_.


title: Czy *każdy* projekt korzysta z pisemnych specyfikacji?

text: Wiem, że to terytorium świętej wojny, więc proszę przeczytaj pytanie do końca, zanim odpowiesz. W wielu przypadkach pisemne specyfikacje mają sens. Na przykład, jeśli jesteś wykonawcą i chcesz otrzymać zapłatę, potrzebujesz pisemnej specyfikacji. Jeśli pracujesz w 20-osobowym zespole, potrzebujesz pisemnej specyfikacji. Jeśli piszesz kompilator lub interpreter języka programowania (i nie jest to perl), zwykle piszesz formalną specyfikację. Nie wątpię, że jest znacznie więcej przypadków, w których spisane specyfikacje są naprawdę dobrym pomysłem. Po prostu uważam, że są przypadki, w których pisanie specyfikacji przynosi tak niewiele korzyści, że nie przewyższają one kosztów ich napisania i utrzymania. **EDYTUJ:** Zbliżone głosy mówią, że „trudno powiedzieć, o co tu pytamy”, więc wyjaśnię: Przydatność pisemnych, szczegółowych specyfikacji jest często uznawana za dogmat. (Jeśli chcesz przykładów, spójrz na komentarze.) Ale nie widzę ich zastosowania do rodzaju rozwoju, który robię. **Pytanie tutaj brzmi: w jaki sposób mogą mi pomóc pisemne specyfikacje?** Informacje dodatkowe: pracuję dla małej firmy, która opracowuje oprogramowanie dla rynku pionowego. Jeśli nasz produkt jest łatwiejszy w obsłudze i ma lepszą wydajność niż konkurencja, to się sprzedaje. Jeśli jest trudniejszy w użyciu, nawet jeśli zachowuje się w 100% zgodnie ze specyfikacją, nie sprzedaje się. Nie ma więc żadnych „sił zewnętrznych” za posiadanie spisanych specyfikacji. Przewaga musiałaby być gdzieś w procesie rozwoju. Teraz widzę, jak _zamrożone_ specyfikacje ułatwiłyby życie programistom. Ale nigdy nie będziemy mieli zamrożonych specyfikacji. Jeśli w połowie rozwoju zauważymy, że funkcja X nie jest intuicyjna w użyciu w sposób, w jaki została określona, możemy wybrać tylko między zmianą specyfikacji a opracowaniem produktu, który nie będzie się sprzedawał. Zapewne teraz zapytasz: Skąd wiesz, kiedy skończysz? Cóż, stale ulepszamy nasz produkt. Konkurencja robi to samo. Więc (miejmy nadzieję) nigdy nie skończyliśmy. Ciągle ulepszamy oprogramowanie, a kiedy osiągniemy punkt, w którym korzyści z ulepszeń, które dodaliśmy od ostatniego wydania, przewyższają koszty aktualizacji, tworzymy nowe wydanie, które jest następnie testowane, lokalizowane, dokumentowane i wdrażane. Oznacza to również, że rzadko występuje presja harmonogramu. Nikt nie musi robić nadgodzin, żeby dotrzymać terminu. Jeśli funkcja nie zostanie ukończona do czasu, gdy chcemy wydać następną wersję, po prostu przejdzie do następnej wersji. Następne pytanie może brzmieć: Skąd twoi programiści wiedzą, co mają zaimplementować? Odpowiedź brzmi: mają dużą wiedzę domenową. Znają biznes klienta wystarczająco dobrze, więc ogólny opis funkcji (lub nawet samego problemu, który klient potrzebuje rozwiązać) wystarczy, aby ją wdrożyć. Jeśli nie jest to jasne, deweloper tworzy kilka fałszywych ekranów, aby uzyskać informacje zwrotne od marketingu/zarządu lub klientów, ale nie jest to ani trochę zbliżone do poziomu szczegółowości rzeczywistych specyfikacji. Może to być nieefektywne dla większych zespołów, ale dla małego zespołu o niskiej rotacji działa całkiem dobrze. Dodatkową korzyścią jest to, że dany programista często wymyśla lepsze rozwiązanie niż osoba pisząca specyfikacje. To pytanie jest już bardzo długie, ale pozwólcie, że omówię ostatnią kwestię: testowanie. Jak powiedziałem na początku, jeśli nasze oprogramowanie zachowuje się w 100% tak, jak mówi specyfikacja, nadal może być gówniane. W rzeczywistości, jeśli jest to tak nieintuicyjne, że potrzebujesz specyfikacji, aby wiedzieć, jak ją przetestować, prawdopodobnie jest to bzdura. Ma sens mieć stałe, pisemne testy niektórych podstawowych funkcji i błędów regresji, ale znowu nie jest to nawet w pobliżu pełnej pisemnej specyfikacji tego, jak oprogramowanie powinno się zachowywać, kiedy. Główny test to: przekazać oprogramowanie użytkownikowi, który jeszcze go nie zna, i powiedzieć mu, aby korzystał z nowej funkcji X. Jeśli potrafi wymyślić, jak z niego korzystać i działa, to działa.


title: Czy wzorzec Fabryka abstrakcyjna może być traktowany jako przypadek polimorfizmu?

text: Szukałem wzorca/rozwiązania, które pozwala mi wywołać metodę jako wyjątek środowiska uruchomieniowego w grupie różnych metod bez użycia odbicia. Niedawno dowiedziałem się o wzorcu Fabryki Abstrakcyjnej. Dla mnie wygląda to tak bardzo jak polimorfizm i pomyślałem, że może to być przypadek polimorfizmu, ale bez superklasy `GUIFactory`, jak widać na przykładzie powyższego linku. Czy mam rację w tym założeniu?


title: Powielanie logiki kontroli dostępu do widoku w zapytaniach do bazy danych i komponencie aplikacji

text: Nasza aplikacja internetowa posiada złożony system kontroli dostępu, który obejmuje uprawnienia oparte na rolach i na poziomie obiektu. W warstwie logiki biznesowej jest to realizowane przez komponent, który uzyskuje (i buforuje) wszystkie niezbędne dane za pomocą zapytania wsadowego oraz oblicza typ i poziom dostępu użytkownika do dowolnego obiektu w systemie. (Przyszłą optymalizacją będzie warunkowe przetwarzanie wsadowe na podstawie danych, których potrzebujemy dla konkretnego żądania). Jednak logika uprawnień **widok** w tym komponencie jest powielana w innych miejscach w zapytaniach do bazy danych. (Musimy ukryć dane na ekranach z listami, których użytkownik nie ma uprawnień do przeglądania.) **Jak możemy zmniejszyć lub wyeliminować powielanie logiki między komponentem kontroli dostępu do aplikacji a zapytaniami do naszej bazy danych?** Przychodzą mi na myśl dwa podejścia . Jestem pewien, że są inni. * Sprawdź uprawnienia do wyświetlania w aplikacji dla każdego wiersza, który wraca z serwera za pomocą zapytań z ekranów aukcji. * Przenieś więcej logiki kontroli dostępu do zapisanej funkcji, którą można wywołać z zapytań, a także z kodu aplikacji. _Odpowiedzi powinny bronić zalet proponowanej metody przed innymi metodami. Na przykład, jeśli moje drugie sugerowane podejście jest pożądane, dlaczego? Jeśli zasugerowałeś trzecie podejście, dlaczego wygrywa ono z obydwoma moimi podejściami?_


title: Skąd taka popularność w Pythonie?

text: Poza tym, że denerwuję się białymi znakami jako składnią, nie jestem hejterem, po prostu nie fascynuje mnie Python. Doceniam poezję Perla i zaprogramowałem piękne serwisy internetowe w bash & korn oraz shebang `gnuplot`. Piszę dokumenty w troffie i nie przeszkadza mi REXX. Nie uważałem tcl za bardziej przydatne lata temu, ale **co jest największym smrodem w Pythonie**? Widzę oferty pracy i wielu kandydatów jako nagrodę i trofeum w swoich życiorysach. * * * Chyba w rzeczywistości staram się osobiście sprzedać na tym, po prostu nie mogę znaleźć powodu.


title: Algorytm losowego parowania

text: Jeśli masz listę elementów i chcesz losowo sparować ze sobą elementy na liście, jakiego rodzaju algorytmu użyjesz do tego, aby elementy można było dopasować tylko do jednego innego elementu.


title: Dlaczego firma powinna wybrać VB.NET zamiast C#

text: > **Possible Duplicate:** > Debata VB.Net vs C# Czy są jakieś powody, dla których firma powinna wybrać VB.NET zamiast C#? Pracuję dla firmy tworzącej oprogramowanie medyczne i kilka lat temu przeszłam z VB6 na VB.NET. Były dwa powody, aby przejść na VB.NET, ale nie na C# w tym momencie: 1. VB.NET jest bardziej podobny do VB6 i powinien ułatwić programistom przejście do świata .NET 2. VB.NET miał lepsze obsługa COM niż C# Pierwszy powód nie jest poważny, ponieważ VB6 i VB.NET to dwa różne światy i nie ma znaczącej różnicy między przełączaniem się z VB6 na VB.NET lub C#. Drugi powód nie jest aktualny po wydaniu C# 4. Nasza firma ostatecznie przeszła na C# (i tak, mamy teraz moduły w VB6, VB.NET i C#; a nawet niektóre moduły w C++), ponieważ: 1\. Łatwiej jest znaleźć programistów w C# 2\. Świat .NET jest zorientowany na C#: Visual Studio lepiej współpracuje z C#, Resharper ma lepsze wsparcie dla C# itp. Jestem tylko ciekaw, czy są jeszcze jakieś powody, dla których firma wybiera VB.NET zamiast C#.


title: Używamy subversion - Czy mimo to powinniśmy umieszczać komentarze w moim kodzie?

text: Na spotkaniu wspomniałem o irytacji, że zmiany w kodzie nie były komentowane w samym kodzie. Używamy SVN (Subversion) do kontroli źródeł i zostało mi przekazane, że możesz po prostu wejść do SVN, sprawdzić historię i zobaczyć zmiany. Moje pytanie brzmi, czy to najlepsze praktyki? Wydaje mi się, że łatwiej jest umieścić komentarz w samym kodzie z odniesieniem do defektu/historii użytkownika (używamy Rally/Agile) **AND** w nagłówku svn, gdy sprawdzasz zmiany. Moi szefowie wydają się uważać, że umieszczanie tego kodu jest niepotrzebne, a ja powiedziałem im, że całkowicie nie zgadzam się z tą praktyką. Zawsze uczono mnie, że komentarze w kodzie nigdy nie są złe. To nie jest mój pierwszy koncert. Byłem jeszcze bardziej załamany, kiedy powiedział mi, że jego szef jest znany z wyrywania komentarzy z jakiegoś kodu. Po tym, jak przestałem pić, chciałem... zwymiotować. Co myślisz o komentarzach w kodzie w porównaniu z komentarzami w kontroli źródła i co robisz jako najlepsze praktyki?


title: Co zrobić, gdy testy TDD ujawnią nową funkcjonalność, która jest potrzebna, która również wymaga testów?

text: Co robisz, kiedy piszesz test i dochodzisz do momentu, w którym musisz go zaliczyć i zdajesz sobie sprawę, że potrzebujesz dodatkowej funkcjonalności, którą należy rozdzielić na własną funkcję? Ta nowa funkcja również musi zostać przetestowana, ale cykl TDD mówi, aby test zakończył się niepowodzeniem, aby przeszedł, a następnie zrefaktoryzuj. Jeśli jestem na etapie, na którym próbuję zaliczyć test, nie powinienem zaczynać kolejnego nieudanego testu, aby przetestować nową funkcjonalność, którą muszę zaimplementować. Na przykład piszę klasę punktów, która ma funkcję **WillCollideWith( _LineSegment_ )**: public class Point { // Point data and constructor ... public bool CollidesWithLine(LineSegment lineSegment) { Vector PointEndOfMovement = new Vector(Position .X + Prędkość.X, Pozycja.Y + Prędkość.Y); LineSegment pointPath = new LineSegment(Position, PointEndOfMovement); if (lineSegment.Intersects(pointPath)) zwraca true; zwróć fałsz; } } Pisałem test dla **CollidesWithLine**, kiedy zdałem sobie sprawę, że potrzebuję funkcji **LineSegment.Intersects(_LineSegment_)**. Ale czy powinienem po prostu przerwać to, co robię w cyklu testowym, aby przejść do tworzenia tej nowej funkcji? To wydaje się łamać zasadę „czerwony, zielony, refaktor”. Czy powinienem po prostu napisać kod, który wykryje, że lineSegments przecinają się wewnątrz funkcji **CollidesWithLine** i zrefaktoryzować go po uruchomieniu? To zadziała w tym przypadku, ponieważ mogę uzyskać dostęp do danych z **LineSegment** , ale co w przypadku, gdy tego rodzaju dane są prywatne?


title: Czy nowe pokolenie programistów ma błędne pojęcie o wzorcach projektowych?

text: Z biegiem lat zauważyłem zmianę nastawienia do wzorców projektowych, szczególnie wśród wschodzącej generacji programistów. Wydaje się, że w dzisiejszych czasach panuje przekonanie, że wzorce projektowe są srebrnymi kulami, które natychmiast leczą każdy problem, rozpowszechniającą się ideą, że rozwój jako inżynier oprogramowania oznacza po prostu uczenie się i stosowanie coraz większej liczby wzorców. W obliczu problemu programiści nie dążą już do prawdziwego zrozumienia problemu i zaprojektowania rozwiązania - zamiast tego po prostu wybierają wzorzec projektowy, który wydaje się pasować, i próbują go brutalnie wymusić. Dowodem na to jest wiele, wiele pytań na Stack Overflow, które zaczynają się od frazy _"jakiego wzorca powinienem użyć, aby..."_. Należę do nieco bardziej dojrzałej kategorii programistów (5-10 lat doświadczenia) i mam zupełnie inny punkt widzenia na wzorce - po prostu jako narzędzie komunikacji w celu zwiększenia przejrzystości. Uważam, że taka perspektywa wzorców projektowych będących klockami lego (zbieranymi jak karty pokemonów) jest trochę niepokojąca. Czy programiści stracą tę postawę, gdy zdobędą większe doświadczenie w inżynierii oprogramowania? A może te koncepcje mogą pokierować kierunkiem naszego rzemiosła w nadchodzących latach? Czy starsze pokolenie programistów miało podobne obawy co do nas? (być może o projekcie OO lub podobnym...). jeśli tak, to jak nam się udało?


title: Co to za architektura?

text: Obejrzałem filmy Force.com, fascynuje mnie sposób, w jaki pozwala on dodawać niestandardowe pola do formularzy, tworzyć nowe formularze, z walidacjami wbudowanymi przez samo oznaczenie jako wymagany rodzaj, wszystko w locie. Próbuję zaimplementować to samo podejście do mojej aplikacji Java. 1. Które z frameworków Java wspierają ten rodzaj szybkiego rozwoju. 2. Czy mamy nazwę dla tego rodzaju podejścia architektonicznego? W przypadku, gdy muszę udostępnić tę funkcję w locie, jakie rzeczy muszę zadbać o wdrożenie. Zasadniczo nie wiem, co to za podejście znane jako google i znajdź. Proszę o wszelkie referencje. Dziękuję. _Edytuj: Oto jest @barjak:http://www.youtube.com/watch?v=QkRbzd3vxHU#t=0m18s_


title: Pomoc w zapewnieniu sensowności testów jednostkowych

text: Właśnie napisałem test jednostkowy dla tej funkcji, który przechodzi przez zbiór dat i ustawia właściwości równe true lub false w zależności od tego, czy są przed czy po dacie porównania: public void CheckHistory(int months) { var datazakończenia = DateTime.Today.AddMonths(miesiące); Dictionary<Order, bool> orders = new Dictionary<Order, bool>(); foreach (var kvp in this.Orders) { if (kvp.Key.Date >= endDate) { orders.Add(kvp.Key, true); } else { orders.Add(kvp.Key, false); } } this.OrderHistories = zamówienia; } Oto test, który napisałem: public void Assert_CheckHistory_SelectsCorrectDates() { MyViewModel vm = GetVmWithMockRepository(); vm.OrderHistories = new Dictionary<OrderHistory, bool>(); OrderHistory ohOld = nowa OrderHistory(); ohOld.MailingDate = DateTime.Today.AddMonths(-12); vm.OrderHistories.Add(ohOld, false); OrderHistory ohNew = nowa OrderHistory(); ohNew.MailingDate = DateTime.Today.AddMonths(-3); vm.OrderHistories.Add(ohNew, false); vm.CheckOrderHist(-6); int selectedOrders = vm.OrderHistories.Where(o => o.Value == true).Count(); Assert.AreEqual(1, selectedOrders, "Nieoczekiwana liczba wybranych historii zamówień"); } Nie ma nic złego. Test przechodzi i wszystko jest w porządku ze światem. Jednak prześladuje mnie dokuczliwe uczucie, że tak naprawdę nie testuję niczego użytecznego, a po prostu piszę testy ze względu na to. Rozumiem to _dużo_. Pełzająca paranoja, że testy, które piszę, są niekompletne w tym sensie, że chociaż obejmują wiersze kodu w funkcji docelowej, tak naprawdę nie wyłapują żadnych prawdopodobnych problemów i dlatego są tylko narzutem na konserwację. Czy ten przykładowy test jest wart zachodu? Czy nawet źle zaprojektowany test jest wart zachodu niż żaden test? A przede wszystkim, czy istnieją jakieś zasady, które pomogą programistom określić, czy dany test jest przydatny, czy też nie, albo pokierują ich w konstruowaniu przydatnych testów w przyszłości? Żeby było jasne, dodaję testy do istniejącej aplikacji. Przejście na pierwszy test w prawdziwym stylu TDD nie jest możliwe.


title: Organizacja projektu

text: Rozmawiałem z kolegą na temat najlepszego sposobu na zorganizowanie projektu (C#) po tym, jak zreorganizował projekt, nad którym pracowałem, od czegoś, co wyglądało tak: ![Połączony](http://i.stack. imgur.com/h50vX.png) Do czegoś, co wygląda tak: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/6Gh2J.png) Mam tendencję do kołysania się w kierunku kilku dużych projektów, ponieważ sprzeciwiam się wielu mniejszym projektom, ale jestem otwarty na nowe pomysły i bardzo bym chciał mieć w tym względzie jakiś wkład. Czy ktoś ma doświadczenie z którymkolwiek z tych podejść, albo naprawdę działa, albo całkowicie rozpada się kilka lat później?


title: Czy „zespół chirurgiczny” Freda Brooksa skutecznie radzi sobie z czynnikiem autobusowym?

text: Mój zespół 4 doświadczonych programistów pracuje nad dużą, modułową aplikacją Windows (ok. 200 KLoC). Skupiłem się na podstawowym kodzie od początku projektu (3 lata temu) i stopniowo przesunąłem się na stanowisko pół-lidera, choć nie jestem kierownikiem zespołu. Nasza obecna iteracja to odświeżenie interfejsu użytkownika o wysokim priorytecie na żądanie wyższego kierownictwa, obejmujące około 15 zmian w podstawowej bazie kodu. Zapytany przez kierownika, oszacowałem, że każda z 15 zmian zajmie mi **dokończenie** mniej niż cztery godziny, czyli łącznie mniej niż 7 dni roboczych. Następnie zgłosiłem się na ochotnika do wykonania pracy. Zamiast tego menedżer postanowił równomiernie podzielić wszystkie 15 zadań między wszystkich czterech programistów. W ciągu trzech dni, odkąd zaczęliśmy pracę, zaobserwowałem dwie rzeczy: 1. Inni niedoświadczeni członkowie zespołu wykonali po około 1 lub mniej zadania. 2. **Prawo Brooka** w akcji: około połowy czasu poświęciłem na udzielanie pomocy (próbując pouczyć ich w zakresie korzystania z komponentów). W rezultacie sam ukończyłem tylko 2 zadania, zamiast oczekiwanych 5 lub 6. Zwróciłem się do mojego przełożonego z obawą, że się spóźniamy i ponownie zaproponowałem wykonanie pozostałych zadań. Moja prośba została uprzejmie odrzucona, a podane powody, aby podzielić obciążenie równo, były dwojakie: 1. Ograniczenie **współczynnika ciężarówek/autobusów** \- rozwijanie tych umiejętności przez innych programistów, tak aby w przyszłości każda praca mogła być dane każdemu, nie tylko mnie. 2. Aby wyeliminować „wąskie gardło” (ja) i szybciej wykonać pracę. Żeby było jasne, nie mam problemów z: a) inwestowaniem czasu w nauczanie, b) ludźmi dotykającymi mojego kodu, czy c) bezpieczeństwem pracy. W rzeczywistości regularnie sugeruję kierownikowi zespołu, aby szkolił innych programistów w pewnych aspektach podstawowego kodu, aby zmniejszyć ryzyko. W tej iteracji mamy również duży zbiór poprawek błędów o wysokim priorytecie, więc wydaje się, że większy postęp można by osiągnąć, gdyby obciążenie zostało rozłożone. W Mitycznym-człowieku-miesiącu Brooks sugeruje **„Zespół Chirurgiczny”**, w którym każdy zespół składa się z kierownika + podprzewodnika (kierownika i mnie) oraz kilku pomniejszych ról. Czuję, że naturalnie wpadamy w tę organizację, ale mój menedżer działa przeciwko temu. Czuję, że czynnik autobusowy jest już załatwiony (menedżer jest dobrze zorientowany w rdzeniu kodu), a wąskie gardło w rzeczywistości nie istnieje (zaangażowanie większej liczby programistów nie przyspieszy pracy). Myślę, że pod tym względem Zespół Chirurgiczny to Dobra Rzecz. To są moje uczucia, ale nie jestem doświadczonym menedżerem, ani nie mieliśmy do czynienia z czynnikiem autobusowym (pukanie do drewna). ** Czy Brooks miał rację? Czy pracowałeś w „Zespołu Chirurgicznym”, gdzie w grę wchodził czynnik autobusowy? Czy istnieją lepsze techniki zarządzania dystrybucją wiedzy specjalistycznej?** Podobne pytania: * Jak zwiększyć współczynnik magistrali i jednocześnie się specjalizować? * Zawsze utrzymywanie 2 osób jako ekspertów w każdym kawałku kodu


title: Jaki aspekt normalnych form naruszają tabele jednostka-atrybut-wartość, jeśli w ogóle?

text: Nie pytam, czy stoły EAV są dobre czy złe. Zastanawiam się, czy uważa się je za „znormalizowane”, a jeśli nie, to dlaczego? Jeśli nie są znormalizowane, jaką normalną formę naruszają i dlaczego?


title: Czy jako programista jesteś zawodowo zobowiązany do oferowania stałego wsparcia po odejściu z firmy?

text: Miałem kilka prac programistycznych w przeszłości, gdzie byłem jedynym programistą pracującym nad projektem. Po moim odejściu zazwyczaj otrzymuję kilka e-maili tygodniowo od tych firm, zwykle od programistów, którzy mnie tam zamienili. Te e-maile zwykle proszą o szczegóły dotyczące tego, jak wszystko działa i jak najlepiej zaimplementować funkcję x opartą na istniejącym systemie. Zwykle jestem uprzejmy i pomocny, ale tego rodzaju komunikaty naprawdę zaczynają pochłaniać mój czas, sprawiając, że każda praca, którą pracuję, ma inny ciężar wokół kostki. Nie wspominając o projektach, które zdecydowałem się zostawić za sobą nie bez powodu. Moje pytanie brzmi, czy profesjonalnie byłoby „w porządku” powiedzieć im, że po prostu nie zamierzam już dłużej oferować wsparcia, odmawiać i odpowiadać na pytania? NB. Żadna z tych firm nie płaci mi żadnych prowizji, a zapytania to często nieformalne pytania ze strony programistów, a nie kierownictwa.


title: Model danych do utrwalania zapytań do bazy danych

text: Zostałem poproszony o zbudowanie czegoś, co jest zasadniczo konstruktorem zapytań dla aplikacji raportującej. Różnorodność obiektów do zapytania, potencjalne modyfikatory, liczba warunków itp., które należy zgłosić, sprawiły, że doszedłem do wniosku, że konstruktor zapytań byłby najlepszym sposobem na wykonanie tego zadania. Próbuję zdecydować, jaki model danych ma wspierać przechowywanie parametrów zapytania. Widziałem modele w tym pytaniu SO, a także w tym samouczku. Ale ponieważ wybór dobrego modelu z góry wydaje się szczególnie ważny, będę naprawdę wdzięczny za każdy wkład. Oto moje obecne podejście... proszę o krytykę, ponieważ wiem, że nie jest zbyt dobre. **Query** * QueryID * QueryName, QueryDescription, itp **Entity** \- _ie Dog, Planet, Employee_ * EntityID * EntityName, EntityDescription, itp **AttributeType** \- _ie INTEGER, DECIMAL, FLOAT_ * AttributeTypeID * AttributeTypeName, AttributeTypeDescription itp. **BinaryOperator** \- _ie =, <, IS_ * BinaryOperatorID * BinaryOperatorName, BinaryOperatorDescription itp. **AttributeTypeToBinaryOperator** \- _ie (INTEGER, >), (BOOLEAN, IS)_ * AttributeTypeID **EntityAttribute** * EntityAttributeID * EntityID * AttributeTypeID * EntityAttributeName, EntityAttributeDescription, itp **EntityAttributeCondition** \- _ie Dog.Breed = 'jamnik'_ * ConditionID * EntityAttributeID * - EntityAttributeCondition** \- _ie Dog.Breed = 'jamnik'_ * ConditionID * EntityAttributeID * - **EntityAttributeCondition** \- _ie Dog.Breed = 'jamnik'_ * ConditionID * EntityAttributeID * - EntityAttributeConditionGroup** \- _ie (a AND b)_ * ConditionGroupID * LeftConditionID * RightConditionID * LogicalOperatorEnum - _ie AND, OR, XOR_ **EntityAttributeConditionGroupToGroup** \- _ie (a AND b) OR (c OR d)_ * IDGrupy LewegoWarunku * IDGrupyPrawegoWarunku * LogicalOperatorEnum


title: Czym jest kontroler w Django MVC?

text: Nauka Django MVC i sposób, w jaki o tym myślałem, to: **Modele** to tabele bazy danych reprezentowane w Django jako klasy Pythona. **Widoki** to kod HTML zwracany z funkcji w views.py. **Kontrolery** to same funkcje w views.py wywoływane z żądania HTTP. Jednak przeczytałem na Wikipedii (w momencie pisania): > ... dyspozytor adresów URL oparty na wyrażeniach regularnych ("Kontroler"). Myślałem, że mapowanie adresów URL na funkcje routingu, a nie kontrolera. Ale może się mylę - chyba mam swoje pomysły, bo to ASP MVC to funkcje obsługujące żądania zawarte są w klasach o nazwie Contollers...


title: Nie rozumiem określonego punktu w Zasadach Manifestu Agile

text: Czytałem Zasady Manifestu Agile. Wszystko wydaje się jasne i rozsądne, z wyjątkiem jednego punktu: > Prostota – sztuka maksymalizacji ilości niewykonanej pracy – jest niezbędna. Nie rozumiem tego. Czy to oznacza, że praca, która nie została wykonana, powinna być jakoś przesadzona? Jeśli tak, to nie ma to sensu.


title: Jakość kodu Java w metodach wywołujących metody

text: Obecnie pracuję z "interesującą" bazą kodu i widzę w kodzie następujący typ rzeczy. public Object doCoś() { Object obj = new Object(); // Zrób coś z obiektem obj = doSomthingElse(obj); zwróć obj; } Zawsze czuję, patrząc na ten rodzaj kodu, że jest nieco niepoprawne, aby obiekt był przekazywany do metody jako parametr, ale także ustawiał obiekt zwracany przez metodę na tę samą zmienną, która odwoływała się do przekazanego obiektu. Zwykle zrobiłbym coś takiego jak poniżej, gdzie tworzę nową zmienną, aby uniknąć nieporozumień. public Object doCoś() { Object obj = new Object(); // Zrób coś z obiektem Object anotherObj = doSomthingElse(obj); zwróć innyObiekt; } Czy mylę się, myśląc, że drugi fragment kodu jest bardziej czytelny/poprawny?


title: Dlaczego programowanie funkcjonalne nie jest bardziej popularne w branży? Czy to się teraz przyjęło?

text: Podczas moich czterech lat na uniwersytecie używaliśmy dużo programowania funkcjonalnego w kilku językach programowania funkcjonalnego. Ale używałem również dużo programowania obiektowego i faktycznie używam języków zorientowanych obiektowo, kiedy robię własny mały projekt, aby przygotować się do mojej pierwszej pracy. Ale często żałuję, że przy tych projektach nie koduję w funkcjonalnym języku programowania. Jednak szukając pracy, bardzo rzadko spotyka się pracę, w której wymagana jest znajomość funkcjonalnego języka programowania. Dlaczego w branży nie stosuje się bardziej funkcjonalnych języków programowania? W dzisiejszych czasach jest sporo nowości na temat funkcjonalnych języków programowania, więc zastanawiam się, czy programowanie funkcjonalne jest teraz w branży?


title: JavaScript i zmiana paradygmatu w programowaniu internetowym

text: Jeśli moja pamięć dobrze mi służy, był czas, kiedy używanie JavaScript do tworzenia stron internetowych było bardzo mile widziane, ponieważ między innymi było to troską o prywatność i bezpieczeństwo użytkowników, a niektórzy ludzie po prostu go wyłączyli. W dzisiejszych czasach prawie nie można zobaczyć dużej witryny internetowej, która nie używa JavaScript, a wiele witryn przestanie działać całkowicie bez JS, do diabła z wdziękiem degradacji. Albo to, albo użyteczność będzie poważnie zagrożona, jak w witrynach SE. Co zmieniło się od tamtego czasu do teraz, co sprawiło, że JavaScript jest praktycznie wszechobecny w tworzeniu stron internetowych? A może moje twierdzenie, że JS był skrzywiony na wytwór mojej wyobraźni i zawsze tak było?


title: Jak przeprowadzić test jednostkowy starszego kodu Visual Basic 6?

text: Zajmuję się programowaniem starszego oprogramowania w Visual Basic 6.0. Jak mogę to przetestować jednostkowo?


title: Czy narzędzia RAD są warte zachodu?

text: Od wielu lat korzystam z narzędzi RAD do tworzenia okien i stron internetowych (głównie Infragistics). Niezmiennie znajduję się w sytuacji, w której bardzo trudno jest mi zorientować się, co się dzieje, ponieważ te kontrolki mają warstwę po warstwie pośredniości i abstrakcji. Dotyczy to wszelkiego rodzaju narzędzi RAD, w tym paneli aktualizacji AJAX, siatek AJAX itp. Nie raz zadawałem sobie pytanie "Czy to jest warte zachodu?" Mimo wszystkich kłopotów i czasu, jaki poświęcam na debugowanie, co często jest błędami lub dziwactwami w tych kontrolkach, czy lepiej byłoby po prostu zakodować własny AJAX? Zakodować własną dodatkową funkcjonalność zamiast używać tych narzędzi RAD? Inny problem z nimi polega na tym, że nie jesteśmy zaznajomieni z technologią, której używają, na przykład nigdy nie robiłem własnego AJAX, ponieważ zawsze miałem panele aktualizacji itp. Ale wyobrażam sobie, że byłoby to przydatne. Jakie jest twoje zdanie? Uwaga: Proszę, nie mów tylko: „Powinieneś wypróbować narzędzia XYZ RAD zamiast Infragistics… są lepsze”. To nie jest debata na temat samego narzędzia RAD. To pytanie dotyczy ogólnie narzędzi RAD, a nie zalet tego, o którym wspomniałem w moim pytaniu.


title: Język wszechobecny - konflikt między poprawnością a użytecznością

text: Kluczową częścią Domain Driven Design jest konsekwentne stosowanie wszechobecnego języka w całym systemie - w rozmowach, kodzie, schemacie bazy danych, interfejsie użytkownika, testach itp. Jestem zaangażowany w projekt, w którym istnieje dobrze ugruntowany język domeny już zdefiniowane przez międzynarodową organizację normalizacyjną. Jednak praca, którą wykonujemy, dotyczy publicznej witryny internetowej, a „prawidłowe” terminy dotyczące domeny niekoniecznie odzwierciedlają sposób, w jaki ludzie zwykle je używają i rozumieją. Kompromis, z którego obecnie korzystamy, polega na używaniu wszędzie „oficjalnych” terminów, z wyjątkiem naszych kryteriów akceptacji, które odnoszą się do komponentów interfejsu użytkownika, w których używamy nieformalnych nazw. Czy to wydaje się rozsądne podejście?


title: Jak mogę używać testów jednostkowych i TDD do testowania aplikacji, która opiera się głównie na operacjach CRUD na bazie danych?

text: W pracy jeden z moich projektów polega głównie na pobieraniu danych przekazanych od klienta zewnętrznego i utrwalaniu ich w bazie danych. Jest to aplikacja korporacyjna Java wykorzystująca JPA, a większość naszej logiki opiera się na operacjach CRUD. Większość naszych błędów w taki czy inny sposób dotyczy JPA. * Przykład 1: Jeśli klikniesz dwukrotnie przycisk Zapisz, JPA może spróbować wstawić tę samą jednostkę do bazy danych po raz drugi, powodując naruszenie klucza podstawowego. * Przykład 2: Pobierasz podmiot z bazy danych, edytujesz go i próbujesz zaktualizować jego dane. JPA może próbować utworzyć nową instancję zamiast aktualizować starą. Często rozwiązanie wymaga dodania/usunięcia/zmiany adnotacji JPA. Innym razem ma to związek z modyfikacją logiki DAO. **Nie wiem, jak zdobyć zaufanie do naszego kodu za pomocą testów jednostkowych i TDD. Nie jestem pewien, czy to dlatego, że testy jednostkowe i TDD nie pasują, czy też źle podchodzę do problemu.** Testy jednostkowe wydają się być złym dopasowaniem, ponieważ mogę wykryć te problemy tylko w czasie wykonywania i muszę wdrożyć na serwer aplikacji, aby odtworzyć problemy. Zwykle należy zaangażować bazę danych, co moim zdaniem wykracza poza definicję testu jednostkowego: są to testy integracyjne. TDD wydaje się być złym wyborem, ponieważ pętla sprzężenia zwrotnego wdrażania i testowania jest tak wolna, że czyni mnie bardzo nieproduktywnym. Pętla sprzężenia zwrotnego z wdrażaniem i testowaniem zajmuje ponad 3 minuty i to tylko wtedy, gdy uruchamiam testy konkretnie na temat kodu, który piszę. Przeprowadzenie wszystkich testów integracyjnych zajmuje ponad 30 minut. Poza tą formą jest kod i zawsze testuję go, kiedy tylko mogę. Ale większość naszych błędów i największe ubytki czasu zawsze dotyczą JPA lub bazy danych. * * * Jest jeszcze jedno podobne pytanie, ale gdybym zastosował się do rady, opakowałbym najbardziej niestabilną część mojego kodu (JPA) i testowałby wszystko oprócz tego. W kontekście mojego pytania byłbym w tej samej złej sytuacji. Jaki jest następny krok po owinięciu JPA? IMO to pytanie jest (być może) krokiem do odpowiedzi na moje pytanie, ale nie odpowiedzią na nie.


title: Wzór dla aplikacji do eksploracji danych SQL

text: Mamy aplikację, która służy do eksploracji danych w naszej bazie danych klientów. Typowe zastosowania obejmują uzyskiwanie listy klientów i ich adresów e-mail, generowanie raportów o transakcjach użytkowników między określonymi datami i zwracanie klientów, którzy mieszkają w określonym obszarze. Wymagania funkcjonalne wysokiego poziomu to: 1. Każde zapytanie eksploracji danych musi być w stanie wyeksportować do programu Excel. 2. Parametry muszą być obsługiwane (abyśmy mogli filtrować wyniki itp.). 3. Inne aplikacje musiałyby mieć dostęp do tych zapytań, a także ich wyników. Zostało to zaimplementowane w następujący sposób: * Dla każdego zapytania SQL tworzona jest funkcja bazy danych. * Istnieje również tabela zawierająca szczegóły każdej funkcji oraz wymagane parametry i ich typy. * Istnieje interfejs sieciowy, w którym są utrzymywane zapytania SQL, które można uruchamiać i eksportować. * Istnieje usługa internetowa, której inne aplikacje mogą używać do uruchamiania zapytań. Metoda uruchamiania zapytania zwraca zestaw danych i pobiera parametry oraz ich wartości w formacie XML. Nasze obecne rozwiązanie działa, ale są pewne problemy z utrzymaniem setek funkcji DB (czy konieczne byłoby użycie funkcji - czy nie moglibyśmy po prostu przechowywać SQL w tabelach?). Mam również pewne obawy dotyczące wstrzykiwania SQL, ponieważ nasz interfejs w zasadzie pozwala użytkownikom na wprowadzanie dowolnego kodu SQL. Czy ktoś musiał opracować coś podobnego i jakie podejście zastosowałeś? Jakie było twoje uzasadnienie zastosowania takiego podejścia?


title: Plagiat HTML/CSS

text: Mam tutaj problem. Klient poprosił mnie o skopiowanie dokładnej strony i chociaż staram się go przekonać do nowego projektu, nie akceptuje tego. Tak bardzo kocha ten projekt (na marginesie, jest okropny i przestarzały, ale nie powiedziałbym mu tego!). Minęło kilka tygodni, odkąd o tym dyskutujemy i nie wiem, co robić. Czy masz podobne doświadczenia? Nie chcę stracić klienta, dobrze płaci, a jego praca jest naprawdę łatwa. Jednocześnie nie chcę składać podpisu na cudzej pracy. Jakieś sugestie? Podobne doświadczenia? Dziękuję Ci!


title: Wiek wzorców projektowych

text: Kiedy powstały te wzorce projektowe? Baling, Builder, Delegacja, Fasada, Memento. Szukałem przez wiele dni w sieci, więc jeśli ktoś wskaże mi proste wyszukiwanie w Google, mogę się zastrzelić. Prawdziwe pytanie, jakie mam, to tylko to, które jest najstarsze, a które najmłodsze, więc konkretne daty dla każdego z nich nie są ważne. Dowiedziałem się już, że wzór Balking powstał w 2002 roku.


title: Czy freelancerzy mogą poprosić swojego klienta o sponsorowanie iPada na potrzeby projektu?

text: Wykonuję niezależne projekty internetowe dla klienta. Klient poprosił mnie o zakup iPada do celów testowych. Czy powinienem go poprosić o iPada? W przeciwnym razie nie potrzebuję iPada. Czy etyczne jest proszenie o sponsorowanie, kiedy otrzymujesz zapłatę za projekty? Czy powinienem to wypróbować?


title: Jak nazwać problem spowodowany wadą projektową?

text: Czy istnieje terminologia dotycząca problemu spowodowanego wcześniejszą błędną decyzją? Na przykład budujesz własny framework z wadliwym projektem MVC. To z kolei prowadzi do dziwnych sytuacji podczas routingu żądań. Następnie osoba pyta, jak rozwiązać ten drugi problem, podczas gdy faktycznym problemem jest zła konstrukcja frameworka. Próbowałem przeszukać kilka opisów, ale ponieważ szukam słowa, ciężko znaleźć coś odpowiedniego. To nie jest jeden z tych antywzorców


title: Jak przetestować szybkość renderowania mojego rozwiązania w przeglądarce internetowej?

text: Ok, muszę przetestować szybkość mojego rozwiązania w przeglądarce internetowej, ale mam pewne problemy, są 2 wersje rozwiązania webowego, oryginalna na serwerze A i "stała" na serwerze B .Mam VS2010 Ultimate, więc mogę wykonać test sieci web i obciążenia na rozwiązaniu B, ale nie mogę załadować rozwiązania A na moim IDE. Próbowałem użyć fiddle2 i jmeter, ale podali mi tylko czasy żądania i odpowiedzi przeglądarek z serwerem, chcę również czas potrzebny przeglądarce na wyrenderowanie całej strony. Może niewłaściwie używam niektórych z tych narzędzi... Nie wiem, czy to może być przydatne, ale: * Rozwiązanie A jest na VB 6.0 * Rozwiązanie B jest na VB.Net Z góry dziękuję!


title: Język specyficzny dla domeny do wyszukiwania/przetwarzania tekstu?

text: Pracuję dla organizacji, która dużo pracuje z danymi rządowymi. Mamy kilka różnych projektów, w których wydzieliliśmy typowe operacje wyszukiwania/manipulacji tekstem w biblioteki wielokrotnego użytku, takie jak standaryzacja sposobu wyświetlania nazwisk polityków (np. przekształcenie „MCDONALD, BOB (R-VA)” na „ Bob McDonald (R-VA)”) lub znajdowanie cytatów prawnych w tekście (np. znajdowanie odniesienia do (np. znajdowanie wystąpień rzeczy takich jak „1 U.S.C. 7” w tekście, określanie, że jest to cytat z Kodeksu USA i zwracanie struktury, która mówi, że odnosi się do sekcji 1 tytułu 7). Są to stosunkowo proste operacje i wielu współpracowników w naszej przestrzeni chciałoby z nich korzystać, ale ostatecznie musimy wybrać język, w którym mają zostać zaimplementowane (pierwszy jest w Pythonie; ten ostatni, Javascript), a my zamrażamy potencjalnych konsumentów/współtwórców, którzy pracują w różnych językach i nie chcą uciekać się do hacków, takich jak wyrzucanie do procesu węzła, aby obsłużyć ich tekst.Wszystko to wydaje się wstydem, ponieważ to, co wyrażamy, jest takie proste i oug ht, można by pomyśleć, być całkiem łatwym do udostępnienia. Idealny byłby mały DSL, który mógłby wyrazić kilka podstawowych operacji przetwarzania tekstu: wyszukiwanie/zastępowanie wyrażeń regularnych, kilka operacji przetwarzania list, takich jak mapowanie i filtrowanie, oraz możliwość przechowywania danych w strukturach danych typu JSON (mapy i list) oraz mechanizm, który albo przetłumaczy to DSL, albo pozwoli na jego wykorzystanie z rzeczywistych języków wyższego poziomu, z którymi my i nasi współpracownicy chcemy pracować (Python, JS, Ruby i PHP są prawdopodobnie głównymi). Czy istnieje coś takiego? Zastanawiałem się nad zbudowaniem takiego sam... może deklaratywną rzeczą na szczycie czegoś takiego jak YAML, może maleńkim podzbiorem Scheme lub Lua, a może czymś całkowicie wymyślonym do tego celu. Ale najpierw chciałem zobaczyć, czy coś już tam jest.


title: Jak testować kod jednostkowy, który ma mieć różne wyniki na różnych platformach?

text: Zauważyłem zduplikowany kod w bazie kodu, nad którym pracuję, który dołączył nazwę pliku do ścieżki katalogu, więc zdecydowałem się przerobić go na własną metodę. Aplikacja, nad którą pracuję, nie jest jednak dobrze przetestowana; Dopiero dwa dni temu przygotowałem pierwsze testy jednostkowe, więc bardzo zależy mi na tym, aby testować jak najwięcej kodu za każdym razem, gdy go dotknę. Zacząłem więc pisać taki test jednostkowy (pseudokod): Directory directory("a") Expect(directory.prependPathToFilename("b")).toBeEqualTo("a/b") Jednak potem przypomniałem sobie, że aplikacja jest wieloplatformowy. Więc pomyślałem o tym: Directory directory("a") String separator = "/" if (platforma to *nix) else "\" Expect(directory.prependPathToFilename("b")).toBeEqualTo("a" + separator + „b”) Ale przypomniałem sobie, że Roy Osherove powiedział w sekcji 7.1.2 („Unikanie logiki w testach”) _Sztuki testowania jednostkowego_ (178): > logika, której nie powinno tam być: > > * Instrukcje `switch`, `if` lub `else` > > * pętle `foreach`, `for` lub `while` > > > > Test zawierający logikę jest zwykle testowanie więcej niż jednej rzeczy na raz, > co nie jest zalecane, ponieważ test jest mniej czytelny i bardziej delikatny. > Ale logika testów dodaje również złożoności, która może zawierać ukryty błąd. Teraz nie wygląda na to, że w tym przypadku testuję więcej niż jedną rzecz na raz. Czy byłby to przypadek akceptowalnego bloku logicznego w teście? Czy istnieje wzorzec do czystego testowania zachowań/wyników, które _oczekuje się_ różnić na różnych platformach?


title: Jaki język programowania i framework najlepiej obsługuje zwinne tworzenie stron internetowych?

text: Jeśli chciałbym szybko założyć nowoczesną stronę internetową, jaki język programowania + framework najlepiej to obsługuje? Np. krótki i łatwy do zrozumienia kod dla początkującego oraz framework z obsługą nowoczesnych funkcji. Pomijając moją obecną wiedzę, bardziej interesują mnie możliwości języków programowania internetowego i frameworków. Niektóre wymagania: * Czytelne identyfikatory URI: http://example.com/category/id/page-title podobne do adresów URL tutaj na programistach. * ORM. Framework, który ma dobrą obsługę baz danych i zapewnia ORM lub może bazę danych NoSQL. * Dobre wsparcie dla RESTful WebServices. * Dobre wsparcie dla testów i testów jednostkowych, aby upewnić się, że witryna działa zgodnie z planem. * Najlepiej witryna gotowa do skalowania z rosnącą liczbą użytkowników.


title: powrót do programowania w c# po zabawie w świecie niezwiązanym z technologią

text: Jaki jest najlepszy sposób, aby wrócić i być na bieżąco z najnowszymi informacjami dotyczącymi C#3/4? Mam książkę Jona Skeeta


title: Czy firmy powinny rozważyć pracowników zdalnych, czy trzymać się pracowników lokalnych?

text: Elitarni programiści mogą być 10 razy bardziej produktywni niż przeciętny programista. Najwyraźniej łatwiej jest znaleźć elitarnego programistę na całym świecie niż na firmowym podwórku. Jeśli firma nie znajduje się w centrum programowania, czy powinna rozważyć zatrudnienie osób pracujących z domu?


title: Utrzymywanie historii SVN dla pliku, gdy łączenie jest wykonywane z gałęzi dev do trunk?

text: W moim org używamy SVN do kontroli wersji. Tak więc dla każdej kompilacji (wykonanej okresowo) łączymy kod z gałęzi deweloperskiej do trunka (wszyscy programiści meldują się w tej gałęzi). Więc kiedy chcemy mieć nową gałąź powiedzmy dla nowego wydania, tworzymy z pnia wykonując kopię svn. Teraz w nowej gałęzi mamy _historię tylko z pnia_, a nie z _poprzednich gałęzi rozwojowych_. Czy istnieje sposób na zachowanie historii, gdy łączenie odbywa się z gałęzi dev do trunk? **Aktualizacja:** Przez historię miałem na myśli historię wersji każdego pliku. Kto go stworzył i kto go edytuje. Niestety obecnie używamy svn 1.6


title: Czy na MVC kilka widoków może mieć ten sam kontroler, czy jeden widok musi mieć jeden unikalny kontroler?

text: Mam kilka pytań podczas projektowania architektury projektu wokół MVC. (Jest to projekt C++/Marmalade SDK, nie używam żadnego konkretnego frameworka MVC, tworzę jeden.) W kilku artykułach (jak w oryginalnym artykule Steve'a Burbeka) Ciągle czytam koncepcję "triady MVC", która mnie ogłupia ponieważ wziąłem tę koncepcję raczej dosłownie. Kiedy czytałem to po raz pierwszy, wyglądało na to, że aplikacja jest zbudowana wokół jednostek "triady MVC" - po jednej dla każdego elementu interfejsu użytkownika, jak przypuszczałem - ale uważam, że jest to raczej nieelastyczne i myślę, że nie tak miał być używany MVC. Następnie, badając dalej problem, znalazłem kilka przykładów ścisłego sprzężenia kontrolera i widoku, a mianowicie relacji 1-do-1 - TextEditView ma TextEditController. Ale kiedy wrócę do mojego projektu, okaże się, że przydatne może być posiadanie jednego kontrolera (według „jednostki logicznej”, np. AddElementController) i kilku widoków dla tego konkretnego kontrolera. Wyraźnie myślę o czymś takim jak AddElementController, który powinien mieć jakiś interfejs użytkownika karty. Czy powinienem mieć AddElementController, który ma AddElementTabView i kilka AddImageView, AddSoundView itp. dla kart? A może powinienem mieć inny „kontroler podrzędny” dla każdego widoku karty? Podsumowując, w odniesieniu do wzorca MVC (nie do konkretnego zrozumienia/wdrożenia tego wzorca w ramach X), czy poprawne jest posiadanie kilku widoków dla kontrolera, czy też każdy widok powinien mieć swój konkretny kontroler? Ponadto, czy prawidłowe jest przechowywanie niektórych informacji o stanie w kontrolerze, czy powinien on być bezstanowy (co oznacza, że stan powinien być umieszczony w jakimś modelu stanu poza domeną)? Z góry dziękuję wszystkim.


title: Dobra architektura dla informacji o użytkownikach w osobnych bazach danych?

text: Muszę napisać interfejs API, aby połączyć się z istniejącą bazą danych SQL. Interfejs API zostanie napisany w ASP.Net MVC3. Niewielki problem polega na tym, że istniejący użytkownicy systemu mogą mieć nazwę użytkownika w wielu bazach danych. Każda firma korzystająca z produktu otrzymuje zupełnie nową instancję bazy danych, ale z biegiem lat (system działa od 10 lat) jest sporo użytkowników (setki), którzy mają wiele nazw użytkowników w wielu „firmach” (rzeczy uległy fragmentacji oczywiście i czasami jedna firma ma 5 „projektów”, z których każdy ma własną bazę danych). Krótko mówiąc, muszę mieć jeden ujednolicony login użytkownika, który umożliwi istniejącym użytkownikom dostęp do ich informacji we wszystkich ich projektach. Jedyne, o czym myślę, to przechowywanie kilku parametrów połączenia, ale wydaje mi się to naprawdę złym pomysłem. Będę miał nową bazę danych, która będzie zawierała informacje o "ujednoliconym użytkowniku"... czy ktoś może zasugerować solidną architekturę systemu, która poradzi sobie z taką konfiguracją?


title: Kiedy (wymusić) linting w projekcie oprogramowania?

text: Kieruję nowym zespołem programistów pracujących nad projektem oprogramowania, który wykorzystuje ciągłą integrację (circleci) z całkiem rozbudowanym pakietem testów jednostkowych/integracyjnych/akceptacyjnych busterjs. Nasz projekt jest napisany głównie w oparciu o coffeescript i staram się wykorzystywać coffeescript-linter, aby zapewnić wszystkim, którzy pracują z naszą bazą kodu, spójny i zorganizowany kod. Moje pytanie brzmi, czy ktoś ma jakieś przemyślenia na temat tego, kiedy/czy/jak wymusić linting? Czy powinienem zintegrować linting z testami wykonywanymi przez circleci przed wdrożeniem? Inną myślą, którą miałem, było napisanie prostego skryptu powłoki, który łączy git-push i narzędzie linting w jednym kroku, a następnie włącza go do projektu i pozwala wszystkim z niego korzystać. Jestem całkiem nowy w zarządzaniu zespołami programistów, więc opinie innych są bardzo mile widziane. EDYCJA: W ciągu ostatnich 3 sekund właśnie przyszło mi do głowy, że git-haki są prawdopodobnie do tego idealne. W szczególności git-hook przy zatwierdzeniu.


title: Kto powinien rejestrować detektory wejścia: kontroler czy widok? (MVC)

text: Używam zestawu SDK (C++) (Marmalade) i kompiluję projekt wokół wzorca MVC. W mojej aplikacji detektory danych wejściowych użytkownika mogą być rejestrowane na niektórych elementach interfejsu użytkownika/widgetach/itp., zapewniając odpowiednią funkcję wywołania zwrotnego (zgodnie z MVC powinna być metodą kontrolera, prawda?). W tym scenariuszu, kto powinien zarejestrować te detektory: * Kontroler? (musi mieć dostęp do elementów interfejsu widoku, mniej oddzielenia sterowania od prezentacji) * Czy widok? (bezpośredni dostęp do elementów UI, ale musi mieć odniesienie do kontrolera, czy to nie jest nieprawidłowe w MVC?) Myślę, że między tymi dwoma, myślę, że to drugie ma więcej sensu i lepiej rozdziela obawy, ale obawiam się, że przeoczyłem jakiś problem z tym projektem. Z góry dziękuję.


title: Pierwszeństwo operatorów

text: int x=2,y; y= x++ + x-- - ++x; printf("%d",y); Kiedy kompilowałem przy użyciu Turbo C++, otrzymałem 3 jako wyjście. W przypadku kompilatora GCC otrzymałem 1 jako wyjście. Dlaczego wyniki są różne?


title: Co zrobić, gdy klient ma nierealistyczne oczekiwania?

text: Przez ostatnie pół roku pracowałem nad projektem u klienta, ponieważ wymagali poufności danych i nie chcieli, abyśmy pracowali we własnym biurze. Kiedy pojawiłem się sam na tej stronie klienta, powiedziano mi, że muszę ukończyć projekt za dwa miesiące. Ponieważ klient nie jest firmą programistyczną i ze względu na różne zasady, zajęło mi około 20-25 dni, abym mógł zainstalować na moim komputerze takie rzeczy, jak eclipse, tomcat itp. Nawet po opóźnieniu w konfiguracji środowiska, wciąż oczekiwali, że ukończę projekt w tym samym dwumiesięcznym okresie. Nie dali mi żadnych dokumentów dotyczących wymagań, ale ponieważ pracuję u klienta, regularnie spotykaliśmy się w celu omówienia wymagań. Po sześciu miesiącach aplikacja wciąż nie jest ukończona i wszyscy mnie obwiniają, ale nie zdają sobie sprawy, że dodaliśmy znacznie więcej funkcji niż te, o których mówiliśmy na kilku pierwszych spotkaniach. W tym okresie wiele rzeczy musiałem przerobić, m.in. podziel formularz na dwie sekcje; kilka tygodni później proszą mnie o ponowne połączenie tych dwóch form, ponieważ jest to mylące, i tak dalej. Zakres aplikacji rośnie z dnia na dzień, ale nadal uważają, że to dwumiesięczny projekt, który się opóźnił. Kiedy powiedziałem im, że zakres się zwiększył, pytają, dlaczego nie zapytałem o wymagania na początku. Pracuję już 11-12 godzin dziennie i podróżuję 3-4 godziny, a teraz oczekują, że przyjadę również w soboty. Tutaj muszę zrobić wszystko: wziąć wymagania, projektować, kodować i testować. Proszę o poradę, co zrobić w takim przypadku? Dodatkowe szczegóły: Mieliśmy listę wyników, ale dodali do niej jeszcze kilka rzeczy, mówiąc, że są one również ważne. Zmienili także kilka rezultatów. Nie mają nawet swojego serwera UAT, testują na mojej maszynie deweloperskiej za pośrednictwem adresu IP.


title: Jak zaprojektować klienta JavaFX z serwerem JEE. jaki jest możliwy projekt?

text: Używam JavaFX jako cienkiego klienta jako technologii widoku. Projektowanie jest jak... * Po stronie klienta:=> (Widok) JavaFX z walidacjami po stronie klienta * Po stronie serwera:=> (Kontroler i model) Walidacje po stronie serwera Serwlety, WebServices, EJB, JPA. W przyszłości może pojawić się potrzeba HTML5. Wybrałem ten projekt, aby aplikacja mogła się skalować i spełniać przyszłe potrzeby. Mam formularz z pewnymi danymi, które należy przesłać, a jego wartości są walidowane po stronie klienta, tak jak robi się to w HTML z JavaScript. Ale po walidacji, jak mogę przesłać moje wartości formularza faktycznie pary nazwa/wartość po stronie serwera, na którym odbywa się rzeczywista działalność. Do pobierania danych z serwera do klienta usługi sieciowe są dobrym wyborem. Jak przesłać dane od klienta do serwera po przesłaniu formularza. Więc pytanie brzmi: - Czy istnieje jakiś odpowiednik html w JavaFX `<form action='server/AuthenticateServlet'></html>`, czy należy to zrobić za pomocą HttpClient jak api? Czytałem o frameworku CaptainCasa, ale jest to bardzo cienki klient. Przy każdej zmianie widoku łączy się z serwerem, który niepotrzebnie obciąża sieć i nie może zapewnić dobrej wydajności przy wolnych połączeniach. Wiele rzeczy można zrobić na stronie klienta. Nie chcę jakiegoś javascript jak przetwarzanie po stronie klienta. Tyle że nie znalazłem żadnego frameworka ani wzorca projektowego pasującego do tego problemu. Jakieś inne sposoby na osiągnięcie tego???


title: Jak mogę poprawić przepływ pracy?

text: Dlatego sam projektuję i tworzę strony internetowe, głównie w WordPressie. Gdy jestem zadowolony z witryny na moim lokalnym serwerze, przesyłam ją wraz z bazą danych na serwer sieciowy i pozwalam klientowi na dokonywanie wszelkich zmian w witrynie. Kiedy potrzebuje mnie do wprowadzenia zmian w kodzie lub zapleczu WP, zwykle od tego momentu pracuję na zdalnej wersji witryny, co jest dość powolnym procesem w porównaniu do pracy lokalnej. Domyślam się, że pytam, czy istnieje sposób na pracę nad lokalną wersją witryny, która synchronizuje wszelkie zmiany wprowadzone do zdalnej wersji witryny? Czy ta kontrola wersji jest przypadkiem? Oto mój typowy przepływ pracy: * Skonfiguruj lokalną bazę danych * Koduj lokalną witrynę WordPress * Eksportuj lokalną bazę danych * Importuj lokalną bazę danych na zdalny serwer * Prześlij wszystkie pliki na zdalny serwer * Kontynuuj zdalne wprowadzanie zmian po uruchomieniu Czy jest jakiś sposób na ulepszenie mojego aktualny przepływ pracy?


title: Kariera w rozwoju SQL Server

text: Jestem nowicjuszem i rozpocząłem karierę jako „asystent analityka danych” w jednym z renomowanych MNC. W tej chwili pracuję na serwerze microsoft sql w celu odpytywania bazy danych za pomocą T-SQL, a także pracuję nad usługami SSRS (SQL Server Reporting Services). Chcę poznać przyszły zakres tych technologii. Czekam na twoje odpowiedzi


title: Czy tak się dzieje w Common Lisp?

text: Z książki Steve'a Yegge'a "Lisp nie jest akceptowalnym Lispem": Lisp ma małą składnię i czasami pojawia się jako, na przykład, '(foo) jest rozwijane jako (cytat foo), zwykle wtedy, gdy najmniej się tego spodziewasz. O czym on mówi, gdy w niektórych sytuacjach `'(foo)` jest rozwijane do `(quote foo)`? (W przeciwieństwie, jak sądzę, do `(cytat (foo))`).


title: Kiedy multimetody są przydatne w praktyce?

text: Common Lisp Object System (CLOS) obsługuje wielokrotne wysyłanie (wiele metod). Kiedy jest to przydatna funkcja w praktyce? Nie szukam tylko przykładu hipotetycznej funkcjonalności, która byłaby łatwiejsza do zaimplementowania przy wielokrotnej wysyłce [1]. Szukam przykładów, w których jest to przydatne w prawdziwym oprogramowaniu, dla dowolnej wartości rzeczywistej, co oznacza, że zostanie napisane dla czegoś innego niż tylko przykład. [1] Czy w samouczkach programowania przykłady są wymyślane częściej niż nie?


title: Jak mamy postępować z wieloma żądaniami raportów transakcji?

text: Rozwijamy system dla rynku detalicznego, a jego funkcje umożliwią klientom (a właściwie klubom konsumenckim) przejrzenie wszystkich transakcji dokonywanych przez klientów końcowych. Jednym ze sposobów uzyskania tych informacji będzie interfejs API. Pomysł polega na tym, że będą prośby o raporty z datą początkową i końcową, a odpowiedź będzie zawierała wszystkie transakcje między tymi datami. Martwimy się, że niektóre raporty będą bardzo duże, a niektórzy klienci będą wielokrotnie żądać raportów, w tym przypadku DB i CPU będą bardzo przeciążone. Ten sam serwer, który będzie obsługiwał te żądania, zajmie się również faktycznymi transakcjami detalicznymi (otrzymywanymi przez własne urządzenia) oraz aplikacją internetową. Nie jesteśmy pewni, jak ograniczyć żądania raportów z interfejsu API, aby nie wpłynęły one zbytnio na system. **Więc jak powinniśmy sobie poradzić z tym scenariuszem? jakieś myśli?** EDIT: żeby było jasne: Kiedy wspomniałem o zastrzeżonych urządzeniach, miałem na myśli urządzenia "On-Location", które są używane podczas sprzedaży z klientami końcowymi, oznacza to, że te żądania nie powinny się opóźniać, a to jest głównym problemem. **Jeszcze jedno pytanie: niektórzy tutaj sugerowali użycie wątków z priorytetami, tj. - nadanie niższego priorytetu wątkom pobierającym raporty, czy to dobry pomysł?**


title: Czym jest Rainbow (nie CMS)

text: Czytałem ten doskonały artykuł na blogu dotyczący przyspieszenia strony z odznakami, a w ostatnim komentarzu autor Waffles (znany również jako Sam Saffron) wspomina o tych narzędziach: > Dapper i kilka niestandardowych pomocników, takich jak rainbow, sql builder itp. Dapper i sql builder były łatwe aby spojrzeć w górę, ale tęcza wciąż wskazuje mi CMS, czy ktoś może wskazać mi prawdziwe źródło? Dziękuję. _Oczywiście architektura tych stron [SE] jest super fajna i bardzo szybka, więc nie ma komentarzy na ten temat, dzięki._


title: Wzór obserwatora dla nieprzewidywalnego czasu obserwacji

text: Mam sytuację, w której przedmioty powstają w nieprzewidywalnych momentach. Niektóre z tych obiektów powstają przed ważnym wydarzeniem, inne po. Jeśli zdarzenie już się wydarzyło, sprawiam, że obiekt natychmiast wykonuje rzeczy. Jeśli zdarzenie ma się zbliżać, każę obiektowi obserwować to zdarzenie. Po wyzwoleniu zdarzenia obiekt zostaje powiadomiony i wykonuje ten sam kod. if (subject.eventAlreadyHappened()) { obserwator.executeStuff(); } else { temat.subskrybuj(obserwator); } Czy istnieje inny wzorzec projektowy, który można zawinąć lub nawet zastąpić ten wzorzec obserwatora? Myślę, że dla mnie wygląda to trochę brudno.


title: Jakie są różnice między programowaniem aspektowym, przedmiotowym i zorientowanym na role?

text: Wiem, że jest wiele artykułów opisujących te trzy paradygmaty, ale szukam schematycznych wyjaśnień. Jest tutaj kilka bardzo dobrych opisów programowania aspektowego, więc zadaję to pytanie w nadziei uzyskania wysokiej jakości odpowiedzi, do których ludzie w Stack Overflow są przyzwyczajeni.


title: Co się stanie, jeśli członek zespołu zacznie wymieniać napięte terminy, kierownictwo jest zadowolone, a programiści wiedzą, że będą pracować w nadgodzinach?

text: Członek zespołu zaczyna wymieniać dość agresywne terminy (dla projektu, nad którym wszyscy pracują) -- coś, co należy zrobić dobrze, może zająć od 4 do 5 dni, a on wymienia to jako 2 do 3 dni. Zarówno kierownik programu, jak i dyrektor generalny są szczęśliwi, ponieważ oznacza to, że ludzie będą pracować w godzinach nadliczbowych, a w rezultacie pensje są niższe, a cel szybciej osiągany itp. Ludzie się wypalają i nie jest to tak długotrwale trwałe. Czy istnieją dobre sposoby radzenia sobie z tym? Mogę porozmawiać z kierownictwem, ale na pewno jest to konflikt interesów, ponieważ chcą, aby ludzie pracowali w nadgodzinach, a ludzie nie chcą zawsze pracować w nadgodzinach. (chyba że powiesz im sprint przez 2 miesiące, a my damy Ci 2 tygodnie dodatkowego urlopu). Jeśli wystarczająca liczba współpracowników twierdzi, że to nie jest dobre, możemy powiedzieć kierownictwu, ale niektórzy współpracownicy nie dbają o jakość tak bardzo (jeśli krótszy czas po prostu poświęca jakość), a niektórzy współpracownicy również lubią zadowalać kierownictwo, a pozostali mogą nie chcą narobić hałasu, aby zasugerować, że nie chcą ciężko pracować. Jakie są dobre sposoby radzenia sobie z tym?


title: Czy wzór obserwatora może być reprezentowany przez samochody i sygnalizację świetlną?

text: Chciałem zweryfikować z wami wszystkimi, czy mam poprawną analogię do wzorca obserwatora. Scenariusz jest następujący: Rozważmy, że na skrzyżowaniu znajduje się sygnalizacja świetlna z odpowiednio czerwonymi, żółtymi i zielonymi światłami. Na posterunku sygnalizacji drogowej stoją pojazdy. Gdy świeci na czerwono, pojazdy zatrzymują się, gdy świeci na zielono, pojazdy ruszają. W przypadku, gdy jest żółty, kierowca musi zdecydować, czy jechać, czy się zatrzymać, w zależności od tego, czy przekroczył linię zatrzymania, czy nie. Jednocześnie istnieją pojazdy, którym nie zależy na sygnale. Zrobiliby, jak chcą. Podobieństwa polegają na tym, że obiektem jest Traffic Signal, który powiadamia o swoich stanach poprzez świecenie odpowiednich świateł. Ci, którzy na niego patrzą i podążają za sygnałem, to ci, którzy go subskrybują i zachowują się zgodnie ze stanem podmiotu. Ci, którym to nie zależy, są jakby wypisani z sygnalizacji drogowej. Proszę powiedz mi, czy uważasz, że to poprawna analogia, czy nie?


title: Czy dążenie do elegancji nie przynosi efektu przeciwnego do zamierzonego?

text: Zadawano wiele pytań o naturę eleganckiego kodu i projektu, ale wydaje się, że _elegancja to dobra rzecz_. Dlatego dopuszczalne, a nawet pożądane jest włożenie dodatkowego wysiłku w tworzenie eleganckich rozwiązań. **Ale czy naprawdę warto?** Nie pytam co jest eleganckie; nie pytam też o dobry kod. Zakładam, że „znasz to, kiedy to widzisz”, i można to również niejasno scharakteryzować, sprawdzając, czy nie ma już nic do odebrania, w tym sensie, że model mentalny, który masz w umyśle, wyraża się bezpośrednio i nie zasłania się w wybrany przez Ciebie język (język programowania, projektowanie obiektowe, schemat relacyjny itp.), bez rozpraszania uwagi. Jednak konsekwencją tego jest to, że elegancja jest zawsze względna (i w pewnym sensie subiektywna); zależy to od tego, na czym Twoim zdaniem jest problem i jak powinno wyglądać rozwiązanie. Problem oczywiście polega na tym, że zarówno domena problemowa, jak i Twoje rozumienie jej stale się zmienia (dodatkowo rozwija się Twoja wiedza na temat języka/wzorców/narzędzi programowania, ale nie o to mi się głównie chodzi). Oznacza to, że aby zachować elegancję projektu, musisz stale go przemyśleć, gdy problem/zrozumienie go ewoluuje. W praktyce oznaczałoby to niemal niekończącą się refaktoryzację. Co więcej, nawet twierdzę, że dążenie do opracowania eleganckich rozwiązań z konieczności cierpi z powodu konserwacji. Najbardziej eleganckie rozwiązania są najściślej związane z dziedziną problemu, bo gdyby nie były, to można by z tego wynieść, a więc nie byłyby już najbardziej eleganckie. Jeśli w twoim rozwiązaniu jest coś obfitego, możesz je uprościć i uczynić bardziej eleganckim, usuwając tę obfitą część, prawda? Ale czasami, gdy masz naprawdę elegancki projekt i musisz wprowadzić zmianę, najpierw musisz „rozkręcić” swoje rozwiązanie, aby w ogóle móc dokonać nieprzewidzianej (jak większość z nich) zmiany . Jednak zasada otwarte/zamknięte stanowi, że nie powinno to być konieczne. Więc innym bardziej konkretnym sformułowaniem pytania jest: **Czy do pewnego stopnia elegancja i zasada otwarcia/zamknięcia nie są ze sobą sprzeczne?** Co o tym sądzisz?


title: Znajdowanie plików nagłówkowych

text: Kompilator C lub C++ szuka plików nagłówkowych przy użyciu ścisłego zestawu reguł: względem katalogu pliku dołączanego (jeśli użyto "", a następnie wzdłuż określonej i domyślnej ścieżki dołączania, nie powiedzie się, jeśli nadal nie zostanie znaleziony. Narzędzie pomocnicze, takie jak analizator kodu (nad którym obecnie pracuję) ma inne wymagania: może z wielu powodów nie mieć zalet konfiguracji wykonywanej przez złożony proces kompilacji i musi jak najlepiej wykorzystać to, co to jest dane. Innymi słowy, może znaleźć plik nagłówkowy nieobecny w znanych ścieżkach dołączania i musi zrobić wszystko, aby znaleźć sam plik. Zastanawiam się obecnie nad zastosowaniem następującego algorytmu: 1. Uruchom w katalogu z plikiem dołączającym. 2. Czy plik nagłówkowy znajduje się w bieżącym katalogu lub jego podkatalogu? Jeśli tak, gotowe. 3. Jeśli jesteśmy w katalogu głównym, plik nie znajduje się na tym komputerze, więc go pomiń. W przeciwnym razie przejdź do nadrzędnego katalogu bieżącego i przejdź do kroku 2. Czy to najlepszy algorytm do użycia? W szczególności, czy ktoś zna przypadki, w których inny algorytm działałby lepiej?


title: Zamieszanie w moim stanie „Jeśli inaczej”, „inaczej, jeśli”. w C#

text: Mam trzy kolumny w następujący sposób: * Miesiąc * Technika * Koło Zgodnie z tą kolumną muszę pobrać dane. W kolumnie Miesiąc dane są następujące: styczeń, luty, marzec... i tak dalej. W kolumnie Tech dane to: Gsmnqi, Gsmboi... i tak dalej. W kolumnie Circle dane to: Ap, Kol, Mumbai... i tak dalej. Chcę udowodnić cztery warunki w następujący sposób: 1. jeśli wybiorę miesiąc, zostaną pobrane dane związane z miesiącem, technologia i krąg nie zostaną wybrane. 2. jeśli wybiorę miesiąc i technologię, pobierze dane związane z miesiącem i technologią, koło nie zostanie wybrane. 3. jeśli wybiorę miesiąc i koło, pobierze dane związane z miesiącem i kołem, Tech nie zostanie wybrany. 4. jeśli wybiorę miesiąc, technologię i okrąg, zostaną pobrane dane dotyczące miesiąca, technologii i kręgu. Ale mój warunek nie działa, poważnie się mylę jeśli, inaczej i jeśli dla tych czterech warunków. if (nqiSqiEntity.Month != string.Empty) { query.AppendLine("select * from K2_NQISQI with (nolock) gdzie MONTH = '" + nqiSqiEntity.Month + "' order by id asc"); } else if (nqiSqiEntity.Month != string.Empty && nqiSqiEntity.Tech != string.Empty) { query.AppendLine("select * from K2_NQISQI with (nolock) gdzie MONTH = '" + nqiSqiEntity.Month + "' i ' = '" + nqiSqiEntity.Tech + "' kolejność według id asc"); } else if (nqiSqiEntity.Month != string.Empty && nqiSqiEntity.Circle != string.Empty) { query.AppendLine("select * from K2_NQISQI with (nolock) gdzie MONTH = '" + nqiSqiEntity.Month + "' i CI = '" + nqiSqiEntity.Circle + "' kolejność według id asc"); } else { query.AppendLine("select * z K2_NQISQI with (nolock) gdzie MONTH = '" + nqiSqiEntity.Month + "' i CIRCLE = '" + nqiSqiEntity.Circle + "' and TECH '" + nqiSqiEntity.Tech + " ' porządek według id asc"); } W warunku zamiast `string.Empty` muszę podać wartość lub muszę sprawdzić, czy wartość jest obecna, wtedy powinien zostać wykonany tylko warunek. Uprzejmie proszę o pomoc w zrozumieniu tego kodu.


title: Czego używać do prostych gier międzyplatformowych zamiast Flasha?

text: Krótko mówiąc, dla prostych gier: 1. Czy Flash nadal jest dobrym rozwiązaniem dla klientów PC opartych na przeglądarce? Wciąż ma ponad 90% penetracji. 2. Jaka jest dobra alternatywa dla urządzeń mobilnych? Czy HTML5 + JavaScript **to najlepszy wybór na komórki? A może trzeba nauczyć się nowego języka ojczystego dla każdej platformy docelowej? (Android, Apple, Windows Phone)... Jeśli chcesz więcej informacji: Jest więcej blogów o oficjalnym upadku mobilnego Flasha, niż mogę zliczyć, wraz z niekończącymi się bezużytecznymi i jadowitymi komentarzami. Właściwie staram się zrobić coś praktycznego: zbudować proste gry, które można obsługiwać na wielu platformach. Kilka miesięcy temu wrzuciłem 1100 dolarów na CS5.5 Web i wchodzę do Flasha. Porażka. Moje pytanie do osób, które faktycznie tworzą proste gry i aplikacje: Z jakiej platformy powinienem korzystać? Czy Flash nadal jest rozsądną platformą dla użytkowników komputerów z dostępem do Internetu? Załóżmy na przykład, że buduję prostą grę zręcznościową, która chciałabym służyć użytkownikom mobilnym jako aplikacja, a użytkownikom komputerów PC jako gra przeglądarkowa. Czy powinienem nadal inwestować czas i wysiłek w naukę i programowanie we Flashu dla użytkowników komputerów PC, jednocześnie budując kod równoległy w innym języku dla użytkowników mobilnych? Moje gry są na tyle proste, że utrzymywanie równoległych zestawów kodów byłoby denerwujące, ale nie niewyobrażalne.


title: Jaki jest sens dodawania obsługi identyfikatorów Unicode do różnych implementacji językowych?

text: Osobiście uważam, że odczytywanie kodu pełnego identyfikatorów Unicode jest mylące. Moim zdaniem uniemożliwia to również łatwe utrzymanie kodu. Nie wspominając o wysiłku, jaki wymagał od autorów różnych tłumaczy, aby wdrożyć takie wsparcie. Ciągle też zauważam brak (lub obecność) obsługi identyfikatorów Unicode na listach (wad) różnych implementacji językowych (jakby to naprawdę miało znaczenie). Nie rozumiem: po co tyle uwagi?


title: Programowanie bez komputera

text: > **Możliwy duplikat:** > Nauka programowania bez komputera Mam trochę doświadczenia w programowaniu (6 miesięcy) i niedługo wyjeżdżam na 2 miesięczną wycieczkę, gdzie będę bez komputera, ale z dużą ilością wolnego czasu . Czy istnieje sposób na dalsze programowanie (lub naukę programowania) nawet bez komputera? Czy należy czytać książki niezależne od języka, takie jak Code Complete lub PragProg?