title: Streszczenie DAL — używać interfejsu z klasą wewnętrzną?

text: Mamy warstwę logiki biznesowej (BLL), która jest ściśle powiązana z naszą warstwą dostępu do danych (DAL). Wywołania wykonujemy w ten sposób: using (FooData data = new FooData()) { data.DoSomething(); } Należy zauważyć, że wszystkie nasze klasy danych są „wewnętrzne” i znajdują się w tym samym zestawie, co klasy logiczne, tak więc tylko LOGIKA LOGICYJNA ma dostęp do DAL. Aby je rozdzielić (aby ułatwić testowanie jednostkowe), jednym z pomysłów jest stworzenie interfejsów IDataClass, takich jak IFooData. Na początku myślałem, że może to być problem, ponieważ będziemy musieli upublicznić nasze klasy danych, aby zaimplementować interfejsy. Ale powinniśmy być w stanie utrzymać klasy danych jako wewnętrzne, nawet jeśli nadal potrzebujemy publicznych metod: public interface IFooData { void DoSomething(); } internal class FooData : IFooData // Zauważ, że klasa jest wewnętrzna { public void DoSomething(); // Metoda jest publiczna, ale to jest w porządku, ponieważ klasa jest wewnętrzna } Więc nawet jeśli metoda jest publiczna, ponieważ sama klasa jest wewnętrzna, nadal powinniśmy zezwalać tylko na nasz dostęp do BLL. Czy jest coś z natury złego w tym podejściu? Czy istnieje lepszy sposób na wyabstrahowanie DAL do testów jednostkowych bez otwierania DAL na świat przez upublicznienie?


title: Jakie są różnice między egzaminami certyfikacyjnymi .NET?

text: Jestem programistą .NET używającym WPF i ASP.NET MVC i miałem nadzieję zdać jakiś egzamin certyfikacyjny. Wydaje się, że są cztery egzaminy, ale nie jestem w stanie zrozumieć, jakie są różnice, nawet w definicjach Microsoftu: * MCPD * MCAD * MCSD * MTA Jak mają się do siebie? Czy istnieje naturalna ścieżka postępu poprzez egzaminy certyfikacyjne? Do jakiej wersji platformy .NET są przeznaczone?


title: Wyjaśnienie dotyczące wzorca strategii

text: Właśnie czytałem kilka podstawowych wzorców projektowych. Czy ktoś mógłby mi powiedzieć, czy termin „wzorzec strategii” ma zastosowanie tylko wtedy, gdy implementujesz całkowicie abstrakcyjny interfejs? A co, gdy twoje dzieci (konkrety?) dziedziczą po klasie nadrzędnej (strategii?) z zaimplementowanymi metodami i kilkoma funkcjami wirtualnymi i/lub abstrakcyjnymi? W przeciwnym razie reszta implementacji, pomysł, że możesz przełączać się między różnymi dziećmi w czasie wykonywania, jest identyczna. Jest to coś, z czym jestem całkiem zaznajomiony, zastanawiałem się, czy nadal nazwiesz to Wzorcem Strategii, czy też termin ten dotyczy tylko korzystania z interfejsu. Przepraszamy, jeśli to pytanie nie jest właściwe! Albo jeśli to tylko szukanie dziury w całym :) Ciągle się uczę i nie jestem pewien, czy wzorce projektowe są dość mocno zdefiniowane w branży, czy po prostu koncepcja, którą można wdrożyć, jak chcesz.


title: Czy istnieje realna zaleta repozytorium generycznego?

text: Czytałem kilka artykułów na temat zalet tworzenia repozytoriów ogólnych dla nowej aplikacji (przykład). Pomysł wydaje się fajny, ponieważ pozwala mi używać tego samego repozytorium do robienia kilku rzeczy dla kilku różnych typów encji jednocześnie: IRepository repo = new EfRepository(); // Normalnie przejdzie przez IOC do konstruktora var c1 = new Country() { Name = "Stany Zjednoczone", CountryCode = "US" }; var c2 = new Country() { Name = "Kanada", CountryCode = "CA" }; var c3 = new Country() { Name = "Meksyk", CountryCode = "MX" }; var p1 = new Prowincja() { Kraj = c1, Nazwa = "Alabama", Skrót = "AL" }; var p2 = new Prowincja() { Kraj = c1, Nazwa = "Alaska", Skrót = "AK" }; var p3 = new Prowincja() { Kraj = c2, Nazwa = "Alberta", Skrót = "AB" }; repozytorium.Dodaj<Kraj>(c1); repozytorium.Dodaj<Kraj>(c2); repozytorium.Dodaj<Kraj>(c3); repozytorium.Dodaj<Prowincja>(p1); repozytorium.Dodaj<Prowincja>(p2); repozytorium.Dodaj<Prowincja>(p3); repo.Zapisz(); Jednak reszta implementacji repozytorium jest w dużym stopniu zależna od Linq: IQueryable<T> Query(); IList<T> Find(Expression<Func<T,bool>> predykat); T Get(Expression<Func<T,bool>> predykat); T First(Expression<Func<T,bool>> predykat); //... i tak dalej Ten wzorzec repozytorium działał fantastycznie dla Entity Framework i prawie oferował mapowanie 1 do 1 metod dostępnych w DbContext/DbSet. Ale biorąc pod uwagę powolną absorpcję Linq w innych technologiach dostępu do danych poza Entity Framework, jaką przewagę zapewnia to nad pracą bezpośrednio z DbContext? Próbowałem napisać wersję repozytorium PetaPoco, ale PetaPoco nie obsługuje wyrażeń Linq, co sprawia, że tworzenie ogólnego interfejsu IRepository jest prawie bezużyteczne, chyba że używasz go tylko do podstawowych funkcji GetAll, GetById, Add, Update, Delete i Save metod i wykorzystać je jako klasę bazową. Następnie musisz stworzyć określone repozytoria z wyspecjalizowanymi metodami, aby obsłużyć wszystkie klauzule "where", które mogłem wcześniej przekazać jako predykat. Czy wzorzec repozytorium ogólnego jest przydatny dla wszystkiego poza Entity Framework? Jeśli nie, dlaczego ktoś miałby go w ogóle używać zamiast pracować bezpośrednio z Entity Framework? * * * Oryginalny link nie odzwierciedla wzorca, którego użyłem w moim przykładowym kodzie. Oto (zaktualizowany link).


title: Czy projektant może rozpocząć projekt open source?

text: Doceniam, że nie możesz rozpocząć projektu open source od samego pomysłu, ale czy wystarczy sam projekt? Czy ktoś kiedykolwiek widział to zrobione, gdy projektant publikuje projekt, a programiści dołączają, aby rozpocząć kodowanie?


title: Wskaźniki C++: liczba poziomów pośrednich

text: Czy w programie C++, który nie zawiera starszego kodu C, istnieją wytyczne dotyczące maksymalnej liczby poziomów pośrednich, które powinny być używane w kodzie źródłowym? Wiem, że w C (w przeciwieństwie do C ++) niektórzy programiści używali wskaźników do wskaźników dla tablicy wielowymiarowej, ale w przypadku tablic istnieją struktury danych w C ++, których można użyć, aby uniknąć wskaźników do wskaźników. Czy użytkownicy, którzy nadal tworzą wskaźniki do wskaźników (lub więcej), próbują używać wskaźników do wskaźników tylko do wydajności ETC. powody? Próbowałem NIE używać niczego więcej niż wskaźnika do wskaźnika, tylko w przypadku, gdy wskaźnik wymagał modyfikacji; czy ktoś ma jakieś inne oficjalne lub nieoficjalne wytyczne lub zasady dotyczące liczby poziomów pośrednich?


title: Projektowanie aplikacji ze współdzieloną bazą danych

text: Mam ogólne pytanie dotyczące projektowania, które odnosi się do aplikacji korporacyjnych, ale myślę, że programiści z innych typów projektów również mogą mieć z tym doświadczenie. Scenariusz jest następujący - masz bazę danych i zamierzasz napisać aplikację, która zapewni dostęp do jej danych. Baza zawiera również dane o kontach użytkowników, ich rolach i uprawnieniach. Problem polega na tym, że inne procesy również uzyskują dostęp do bazy danych i każdy z tych procesów może w dowolnym momencie zmienić dowolne dane (np. usunąć użytkownika). W innych projektach miałem wyłączny dostęp do bazy danych, więc zwykle owinąłem bazę danych warstwą, która uwidaczniała powiązaną funkcjonalność domeny w stylu SOA. Ten wrapper miał bogaty model domeny i mógł wykorzystywać buforowanie danych bazy danych, ponieważ był świadomy wszelkich potencjalnych zmian (poprzez przechwytywanie zdarzeń domeny, CQRS), które mogłyby go zmodyfikować. Ze współdzieloną bazą danych nie wiem jak podejść do projektu. Wyobraź sobie taką sytuację: 1. Żądanie HTTP dociera do Twojej aplikacji i masz je uwierzytelnić. 2. Przeszukujesz bazę danych o zadeklarowane konto użytkownika i jego dane logowania. Jeśli podane poświadczenia są zgodne, nawiązywana jest sesja (np. w ASP.NET do klienta jest wysyłany bezpieczny plik cookie). 3. Ale potem pojawia się kolejne żądanie od tego użytkownika. Problem polega na tym, że zamiast robić coś pożytecznego w tej chwili, wydaje się, że trzeba sprawdzić, czy powiązane konto użytkownika nadal istnieje w bazie danych. Każda informacja może w dowolnym momencie przestać być ważna, ponieważ jakiś inny proces może zmienić bazę danych. Jest to oczywiście bardziej ogólny problem. Dane mogą się zmieniać nie tylko między żądaniami, ale nawet między dwoma oddzielnymi wywołaniami bazy danych. Prostą odpowiedzią jest tutaj użycie blokad/transakcji. Ale prawda jest taka, że wymagałoby to ogromnych zmian w schemacie bazy danych. Na przykład każde konto użytkownika wymagałoby dodatkowej kolumny „InUse” - ale to tylko bardzo prosty scenariusz. Wyobrażam sobie, że trzeba by stworzyć zupełnie nowe stoły. Ponadto transakcje zazwyczaj obejmują wiele żądań HTTP, przez co baza danych byłaby bezużyteczna przez długi czas dla innych użytkowników. Przeczytałem książkę PoEAA i dobrze znam różne techniki synchronizacji. To, czego szukam, to ogólna technika lub metodologia, jak osiągnąć tak zwany „wystarczająco dobry projekt”, który nie wymaga zmian w schemacie bazy danych i może obsłużyć wspomniane sytuacje, w których wszystko może się zmienić między dwoma żądaniami. W tej chwili myślę, że pójdę z następującym podejściem - uwierzytelnię użytkownika. Wtedy **nie** będę wykonywać żadnych dalszych kontroli, aby upewnić się, że nie został on w międzyczasie usunięty. Ale kiedy wykonuję jakąś operację, która opiera się na istnieniu użytkownika, otrzymam wyjątek i wywnioskuję, że użytkownik musiał zostać usunięty. Odpowiedzią będzie wtedy jakiś komunikat o błędzie lub strona błędu. Jestem pewien, że jest to powszechny problem, z którym wielu z Was musiało się zetknąć. Docenię każde rozwiązanie, a nawet odniesienie do jakiejś książki lub papieru. Dziękuję.


title: Jaka jest różnica między modelem kaskadowym z iteracjami a ewolucyjnym modelem tworzenia oprogramowania?

text: Czy ktoś zna różnicę między tymi dwoma? Oba są tworzone metodą iteracyjną - dając kolejne powtórki po każdej iteracji. Obaj mają wstępny pomysł->analiza->(zarys)fazy projektowania.


title: Czy można zepsuć pośrednie zatwierdzenia, o ile końcowy zatwierdzenie w dowolnym wypychaniu działa?

text: **Powiązane:** Czy każdy commit git powinien pozostawić projekt w stanie roboczym? Załóżmy, że lokalnie dokonuję następujących commitów: * Modyfikuję schemat bazy danych, łamiąc działanie aplikacji. * Zaktualizuj aplikację, aby była ponownie zgodna ze schematem bazy danych. Dopóki wypycham oba zatwierdzenia, `master` pozostaje w stanie roboczym. Jednak wersja _historyczna_ jest zepsuta. Zdaję sobie sprawę, że mogę użyć `git rebase -i` do zmiażdżenia zatwierdzeń razem. Jednak wynikowe zatwierdzenie będzie duże i mniej opisowe. Jeśli muszę przeszukać historię zmian, aby dowiedzieć się, dlaczego coś zmieniłem, wolę znaleźć oryginalne zatwierdzenie pokazujące, co zrobiłem i dlaczego. Moje pytania to: * Czy ktoś napotkał trudności z powodu zepsutych _historycznych_ commitów w masterze? * Jeśli tak, czy istnieje _prosty_ sposób na uniknięcie takich trudności, bez odrzucania indywidualnych komunikatów i zmian?


title: Jak wypracować złożony, niesprawdzony zakres?

text: Zakres: jest częścią dużego systemu ERP, który zapewnia konkretne obliczenia. Można o nim myśleć jak o module naliczania wynagrodzeń w CRM. Jednak jest to znacznie więcej zarówno pod względem złożoności, jak i integracji. Dług technologiczny jest więc bardzo duży, ale nie nie do utrzymania. Napisano kilka testów jednostkowych/integracyjnych. Można to przetestować, ale nie zrobiono tego zbyt wiele. Jest to stara część tego systemu ERP (3 lata), z biegiem lat przekształciła się w to, czym jest teraz, i istnieje chęć, aby spróbować ją ukończyć, nawet jeśli będzie to wymagało znacznych wysiłków. Problem: zakres, który zapewnia wiele różnych obliczeń opartych na określonej liście obiektów, a wyniki czasami nie są prawidłowe. Istnieje wiele interesujących (nie tak powszechnych) funkcji dotyczących tego zakresu: * Dynamiczne formuły C# (ładowane do kontekstu, a następnie uwzględniane w obliczeniach) * Wiele raportów wykonujących te same obliczenia, ale na bazie danych * Zakres jest niestabilny i okresowy -intensywny (nowe funkcje i poprawki błędów są dostarczane co miesiąc) Ten zakres ma wiele parametrów wejściowych dla wszystkich zależnych obiektów. Mnożąc wszystkie możliwe wartości parametrów, otrzymujemy 1,62*107 przypadków możliwych wyjść. Nie wszystkie parametry są tak bardzo niepokojące, ale większość z nich tak. Więc wycięcie połowy tej liczby jest czymś wokół praktycznych możliwych otucomów. Ten zakres pochłania dużo czasu i pieniędzy i jest daleki od ukończenia w obecnej formie. Chciałbym wiedzieć, jaki jest ~~srebrny środek~~ najbardziej opłacalnego sposobu na ustabilizowanie i dokończenie lunety do stanu, w którym pojawią się tylko drobne błędy i miłe rzeczy? Przede wszystkim myślałem, że ustanowienie DoD (Definition of Done) byłoby istotną rzeczą do zrobienia. Potem doszedłem do wniosku, że tak duża liczba działających wyjść to połowa tego - wszystko musi być również elastyczne w zakresie interfejsu użytkownika. Czy wystarczy ustalić plan testów, może zrobić kilka testów siłowych? Czy powinienem rozważyć jakiekolwiek wzorce projektowe? Opcje walidacji (takie jak solidna usługa walidacji strony trzeciej itp.)? Czy to wystarczy, czy może mam luki w swojej skromnej wiedzy, które powinienem wypełnić? _Uwaga: aplikacja nie jest czymś, co można by nazwać monolitycznym. Opiera się na wielu różnych usługach, które można łatwo rozszerzyć itp._


title: Jaki jest wzorzec architektoniczny: sondy zbierające dane przesyłają znormalizowane dane do centralnego serwera w celu monitorowania

text: Próbuję znaleźć nazwę dla tego wzorca architektonicznego, który widziałem już w wielu miejscach: Poller - (jest ich kilka) * Są to albo wtyczki albo usługi działające tam samodzielnie * komunikują się z różnego rodzaju urządzeniami zbierającymi dane i przesyłanie tych danych do usługi centralnej w znormalizowanej formie. * każdy odpytujący wie, jak komunikować się z konkretnym urządzeniem, * zbiera stan urządzenia, ale nie działa na nim, po prostu go przekazuje. Serwer centralny * Odbiera znormalizowane dane, zapisuje je w magazynie kluczy/wartości. * Okresowo (lub przez jakiś wyzwalacz) ocenia warunki, które odnoszą się do danych. Warunki powodują wykonanie pewnych działań (takich jak rejestracja zdarzenia lub wysłanie wiadomości do operatora)


title: Jak są wywoływane wykresy specyfikacji podobne do „Json.org” i jak mogę je wygenerować?

text: Na stronie http://www.json.org Douglas Crockford pokazuje specyfikacje formatu JSON na dwa interesujące sposoby: W prawej kolumnie wymienia specyfikację tekstową, która wygląda jak listing YACC lub LEX. W głównej części strony głównej umieścił kilka obrazów, które dają nam prosty sposób wizualnego zrozumienia prawidłowych sekwencji tworzących ciąg JSON. Te obrazy wyglądają jak opis ścieżki, którą podążałby automat skończony podczas parsowania ciągu JSON. Jakie są nazwy (jeśli w ogóle) tego formatu aukcji i tego rodzaju grafiki? Czy istnieje oprogramowanie, które renderuje plik źródłowy zawierający specyfikację do tego rodzaju obrazów?


title: Projektuj wzorce, aby uniknąć zerwania SRP podczas wykonywania intensywnego rejestrowania danych

text: Klasa, która wykonuje zarówno obliczenia, jak i rejestrowanie danych, wydaje się mieć co najmniej dwa obowiązki. Biorąc pod uwagę system, dla którego specyfikacje wymagają intensywnego rejestrowania danych, jakiego rodzaju wzorce projektowe lub wzorce architektoniczne można zastosować, aby uniknąć nadużywania wszystkich klas wywołaniami rejestrowania za każdym razem, gdy coś obliczają? Można użyć wzorca dekoratora (np. „Interpolator” przyporządkowany do „LoggingInterpolator”), ale wydaje się, że doprowadziłoby to do sytuacji mało pożądanej, w której prawie każda główna klasa musiałaby być ozdobiona logowaniem.


title: Obsługa limitu czasu w aplikacji sieciowej

text: Jak mogę obsłużyć limity czasu w aplikacji sieciowej. Implementuję system provisioningu na serwerze linuksowym, kod jest ogromny więc zamierzam umieścić algorytm, działa tak 1. Odczytaj komendy provisioningowe z pliku 2. Prześlij na inny serwer używając TCP 3. Zapisz żądanie w hashu. 4. Odbierz odpowiedź, a następnie 1. jeśli otrzymałeś pomyślną odpowiedź, usuń żądanie z hash 2. jeśli otrzymałeś nieudaną odpowiedź, ponów wiadomość Problem, w którym teraz się znajduję, polega na tym, że program nie otrzymał odpowiedzi z powodu przekroczenia limitu czasu, a następnie żądanie będzie oczekiwało na odpowiedź w nieskończoność i nie będzie ponawiane. I pamiętaj, że będę wysyłać setki poleceń i muszę monitorować wszystkie polecenia limitu czasu. Próbowałem użyć timera, ale to nie pomogło, ponieważ skończę z tak wieloma licznikami czasu oczekiwania i nie jestem pewien, czy jest to dobry sposób na zrobienie tego. Pytanie brzmi, jak mogę zapisać wiadomość w jakiejś strukturze danych i sprawdzić, czy usunąć ją lub ponowić później, gdy nie ma odpowiedzi z drugiego końca? Zwróć uwagę, że jestem gotów zmienić algorytm na wszystko, co sugerujesz, co mogłoby poradzić sobie z przekroczeniem limitu czasu.


title: Tymczasowa zmiana kodu w Git

text: Mój program współdziała z inną aplikacją za pośrednictwem komunikacji przez gniazdo. Obecna publiczna wersja tej aplikacji nie obsługuje konkretnego polecenia, podczas gdy najnowsza magistrala tak. Aby być kompatybilnym z obecnym wydaniem publicznym, wystarczy przepisać kilka linijek kodu. Od chwili obecnej rozwój musi być kontynuowany z tym _zmienionym kodem_ , ale w przyszłości należy ponownie użyć oryginalnego kodu. Czy za pomocą Git można dokonać częściowej zmiany w pliku tymczasowym? Mógłbym na przykład stworzyć gałąź i dalej rozwijać się w tej gałęzi. Jednak gdy scalę gałąź z masterem, chcę, aby _zmieniony kod_ wspomniany powyżej został przywrócony do jego _oryginalnego kodu_. _Uwaga_ : Doskonale zdaję sobie sprawę, że mogłem rozróżnić wersje oprogramowania, jednak zmiany mają również wpływ na pliki zasobów GUI, na które nie mogę wpływać z kodu innego niż po prostu załadowanie innego pliku zasobów.


title: Czy powinienem używać bloków inicjujących w Javie?

text: Niedawno natknąłem się na konstrukcję Java, której nigdy wcześniej nie widziałem i zastanawiałem się, czy powinienem jej użyć. Wydaje się, że nazywa się to blokami inicjalizacji. public class Test { public Test() { /* pierwszy konstruktor */ } public Test(String s) { /* drugi konstruktor */ } { doStuff(); } } Blok kodu zostanie skopiowany do każdego konstruktora, tzn. jeśli masz wiele konstruktorów, nie musisz przepisywać kodu. Widzę jednak trzy główne wady używania tej składni: 1. Jest to jeden z nielicznych przypadków w Javie, w których kolejność kodu jest ważna, ponieważ można zdefiniować wiele bloków kodu i będą one wykonywane w kolejności, w jakiej zostały napisane . Wydaje mi się to szkodliwe, ponieważ zwykła zmiana kolejności bloków kodu faktycznie zmieni kod. 2. Nie widzę żadnych korzyści z jego używania. W większości przypadków konstruktory będą wywoływać się nawzajem z pewnymi wstępnie zdefiniowanymi wartościami. Nawet jeśli tak nie jest, kod można po prostu umieścić w prywatnej metodzie i wywołać z każdego konstruktora. 3. Zmniejsza czytelność, ponieważ możesz umieścić blok na końcu klasy, a konstruktor jest zwykle na początku klasy. Spojrzenie na zupełnie inną część pliku kodu jest dość sprzeczne z intuicją, jeśli nie spodziewasz się, że będzie to konieczne. Jeśli moje powyższe stwierdzenia są prawdziwe, dlaczego (i kiedy) wprowadzono tę konstrukcję językową? Czy istnieją uzasadnione przypadki użycia?


title: Jaki jest najlepszy sposób na zaprojektowanie witryny internetowej, aby była wysoce skalowalna?

text: W przypadku witryn, które muszą być wysoce skalowalne, takich jak sieci społecznościowe, takie jak Facebook, jaki jest najlepszy sposób zaprojektowania witryny? 1. Czy powinienem mieć serwis internetowy, do którego strona pyta, aby uzyskać potrzebne dane? lub 2. Czy witryna powinna bezpośrednio przeszukiwać bazy danych? (można to zrobić za pomocą wbudowanych konstrukcji językowych do automatycznego wypełniania tabel itp.). Myślę, że usługa sieciowa jest lepszym projektem, ponieważ zapewnia scentralizowany dostęp do danych, a rzeczy takie jak buforowanie i tym podobne stają się znacznie łatwiejsze do kontrolowania, ale co myślą inni?


title: Dlaczego mielibyśmy używać języków niskiego poziomu, jeśli język wysokiego poziomu, taki jak python, może zrobić prawie wszystko?

text: Wiem, że python nie nadaje się do takich rzeczy jak mikrokontrolery, tworzenie sterowników itp., ale poza tym możesz zrobić wszystko za pomocą pythona, firmy utknęły z optymalizacją prędkości dla systemu w czasie rzeczywistym, ale zapominają o innych czynnikach, z których możesz po prostu uaktualnić swój sprzęt jeśli chodzi o szybkość, aby dopasować swój program w pythonie, jeśli myślisz, ile pieniędzy może mieć firma na utrzymanie systemu napisanego w C, porównanie jest takie: na przykład: 10 programistów do utrzymania systemu napisanego w C i tylko jeden programista, który utrzymuje system napisany w pythonie, dzięki pythonowi możesz kupić lepszy sprzęt pasujący do twojego programu python, myślę, że języki niskiego poziomu mają tendencję do zwiększania kosztów, ponieważ programiści nie są tak tani niż aktualizacja sprzętu, to jest mój punkt, ** dlaczego system powinien być napisany w c zamiast w Pythonie **?


title: Jakie są Twoje pierwsze trzy kroki, gdy po raz pierwszy pojawia się problem z oprogramowaniem?

text: Jestem ciekaw, jakie kroki podejmuje umysł programisty, gdy po raz pierwszy napotyka problem, który ma rozwiązać. Jak zaczynasz to rozumować? Jakie są pierwsze pytania, które sobie zadajesz? Ok, pozwólcie, że uczynię to bardziej konkretnym dla tych z was, którzy uważają, że pytanie jest zbyt niejasne lub całkowicie zależne od sytuacji. Wybierz **dowolne** z poniższych wymagań i głośno przemyśl swoje pierwsze przeczucia/wrażenia/skłonności do rozwiązania tego problemu. 1) zbuduj prosty edytor tekstu z mniej więcej taką samą funkcjonalnością jak MS Word Pad 2) zaprojektuj jednoosobową grę karcianą (np. Pasjans) 3) zbuduj kalkulator naukowy 4) Dowolny wybrany przez ciebie problem o podobnej skali/złożoności jak powyższe trzy


title: Systemy uwierzytelniania — oddzielne dla zarządzania?

text: **Edytuj** : Przyznaję, że nie jestem pewien, kiedy po raz pierwszy napisałem pytanie. Przypuszczam, że sam nie byłem pewien problemu, komentarze i odpowiedzi udzielone do tej pory pomogły mi skoncentrować się na problemie, dziękuję wszystkim zaangażowanym. Ta zmiana jest całkowitym przepisaniem pytania. **Końcowy komentarz redakcyjny** Na dynamicznej stronie mamy dwa systemy - zarządzania treścią oraz interfejs użytkownika (trywialny). Próbujemy zdecydować, czy te dwa systemy powinny mieć oddzielne systemy uwierzytelniania (będąc dwoma systemami, może to zwiększyć bezpieczeństwo [lub nie - @GlenH7?]), każdy z własną hierarchią uprawnień itp. A może lepiej mieć jeden system (w końcu to ta sama baza danych... plus łatwiejsza konserwacja) i baw się tylko z uprawnieniami (regularne, jumbo, power, super nova, admin, Q)?


title: Czy dobrą praktyką programistyczną jest posiadanie klasy z kilkoma plikami .h?

text: Przypuszczam, że klasa ma kilka różnych interfejsów. Niektóre pokazuje jakiejś klasie, inne pokazuje innym klasom. Czy jest ku temu jakiś dobry powód? Jedną rzeczą, o której mogę pomyśleć, jest jeden .h na klasę, interfejs byłby publiczny lub prywatny. A co, jeśli chcę, aby jakiś interfejs był dostępny dla klasy niektórych znajomych, a inny naprawdę publiczny? Przykład: @interface listNewController:BadgerStandardViewViewController <UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,NSFetchedResultsControllerDelegate,UIScrollViewDelegate,UIGestureRecognizerDelegate> { } @property (nonatomicler)Controller IBOutlet NSFetch @property (nieatomowe) IBOutlet UITextField *searchBar1; @property (nieatomowe) IBOutlet UITableView *tableViewA; + (listNewController *) singleton; //Aby uzyskać łatwiejszy dostęp -(unieważnij)collapseAll; -(void)TitleViewClicked:(TitleView *)TitleView; -(NSUInteger) countOfEachSection:(NSInteger)sekcja; @end Wiele z tych właściwości i funkcji publicznych jest wywoływanych tylko przez jedną inną klasę. Zastanawiam się, dlaczego muszę udostępnić je wielu klasom. Nawiasem mówiąc, jest w Objective-c Co masz na myśli? Interfejs jest interfejsem. W C++ możesz zadeklarować niektóre klasy jako "przyjaciół". W Objective-c nie możesz myśleć. Zasadniczo chcę to naśladować. Moi znajomi mają dostęp do niektórych członków, którzy nie są dostępni zbyt publicznie.


title: Wzorzec projektowy dla serwera, gdzie aplikacja jest jednostronicową RIA

text: Więc używam Node i ExtJS po stronie serwera/klienta z szacunkiem. Używając ExtJS, przenoszę dużo logiki prezentacji po stronie klienta. Tak więc coś takiego jak MVC nie miałoby sensu po stronie serwera, ponieważ logika widoku jest po stronie klienta. W tym momencie mój serwer Node odpowiada zasadniczo za: * Działanie jako proxy do trwałej pamięci masowej (MongoDB) dla sklepów ExtJS * Weryfikacja/sesja użytkownika za pomocą Windows Active Directory * Podłączanie do istniejącej infrastruktury przedsiębiorstwa (bazy danych, Salesforce.com itp.) . Cóż, wiem, że wzorce projektowe nie są ostateczne, a dostosowanie się do wzorca projektowego może w niektórych przypadkach utrudnić postęp, ale ogólnie jestem stosunkowo nowy w programowaniu sieciowym. Na początku chciałbym użyć wzoru, aby nie podejmować żadnych poważnych decyzji architektonicznych, które będą mnie prześladować przez resztę projektu. Czy istnieje wzór dopasowany do moich potrzeb, na którym mogłabym się oprzeć?


title: rzutowanie w stylu c lub rzutowanie w stylu c++

text: Więc czego używasz? int anInt = (int)aFloat; lub int anInt = static_cast<int>(aFloat); // i jego bracia I, co ważniejsze, dlaczego?


title: Czy nawigacja między więcej niż jedną klasą to zła praktyka?

text: Mam następującą klasę z następującą funkcją (niektóre szczegóły implementacji zostały pominięte): public class TitleScreen : GameScreen { public Texture2D titleScreen; public override void Draw (GameTime gameTime) { ScreenManager.SpriteBatch.Draw (titleScreen, nowy Rectangle (0, 0, ScreenManager.Game.Window.ClientBounds.Width, ScreenManager.Game.Window.ClientBounds.Height), Color.White); } } Ta klasa jest powiązana z klasą „ScreenManager”, która jest powiązana z grą, która jest powiązana z oknem. Jak widać, poruszam się po kilku klasach, aby uzyskać granice Okna, aby móc je narysować. Moje pytanie brzmi: czy to zła praktyka? Czy łączę klasę TitleScreen z Game i Window? Czy byłoby lepiej zaimplementować w ScreenManagerze funkcję zwracającą szerokość i wysokość okna?


title: Kiedy możesz nazwać siebie dobrym językiem X?

text: To wraca do rozmowy, którą odbyłem z moją dziewczyną. Próbowałem jej powiedzieć, że po prostu nie czuję się wystarczająco dobrze w moim języku programowania (C++), by nazywać siebie dobrym. Zapytała mnie wtedy: „Kiedy uważasz się za wystarczająco dobrego?” To ciekawe pytanie. Nie wiedziałem, co jej powiedzieć. Więc proszę cię. W przypadku dowolnego języka programowania, frameworka itp., kiedy dojdziesz do punktu, w którym usiadłeś, spójrz na to, co zrobiłeś i powiedz: „Hej, naprawdę jestem w tym całkiem dobry”. Jak definiujesz „dobry”, aby szczerze powiedzieć innym: „Tak, jestem dobry w X”. Dodatkowo, czy dochodzisz do tych wniosków porównując to, co mogą zrobić inni? **Dodatkowe informacje** Przeczytałem artykuł kanoniczny o tym, jak potrzeba dziesięciu tysięcy godzin, zanim staniesz się ekspertem w tej dziedzinie. (Rekwizyty dla każdego, kto wie, jak nazywa się ta gazeta) Czytałem też różne artykuły z Coding Horror o przeprowadzaniu wywiadów z ludźmi. Mówiono, że niektórzy ludzie „nie mogą funkcjonować poza ramami”. Mogą więc być „dobre” dla tego frameworka, ale nie inaczej w języku. Czy to prawda?


title: Wyliczanie z FlagsAttribute lub IEnumerable<Enum>/ISet<T>

text: Jakie jest obecnie akceptowane najlepsze rozwiązanie pod względem użycia wyliczenia w języku C#, bitowego [Flags] Enum (w porównaniu przy użyciu | i &) lub elementu IEnumerable wartości wyliczenia? Myślę zarówno z perspektywy zwięzłości kodu, jak i perspektywy konserwacji. Jedyną wadą korzystania z podejścia Flags, o którym mogę pomyśleć, jest niemożność wyliczenia wartości bez wykonywania odwrotnego wyliczenia: var possibleValues = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>(); var applyValues = possibleValues.Where(x => (containerClass.EnumProperty & x) == x); Podczas gdy oczywiście IEnumerable jest łatwiejszy do zapytania. EDYCJA: Jak svick słusznie zauważył, IEnumerable byłby prawdopodobnie niewłaściwą kolekcją do użycia, ISet może być lepszym przykładem.


title: Typy funkcji PHP

text: Próbuję znaleźć sposób na klasyfikację różnych typów funkcji PHP. Na przykład fopen, fwrite, fclose i tak dalej są częścią IO, a funkcje MySQL i klasa MySQLi są przeznaczone do rzeczy związanych z mysql, ale coś bardziej automatycznego zastanawiało się, czy istnieje jakiś rodzaj mapowania klas funkcji w PHP


title: Jak nazywa się ta metodologia rozwoju?

text: Przypominam sobie metodologię, która kładła nacisk na krótkie i liczne funkcje. Powiedział, że jeśli część kodu może być w ogóle oddzielona, to powinno być, nawet jeśli wynikowe funkcje są używane tylko raz. Niektórzy twierdzą, że to zbyt daleko idące SUCHE i że ten rodzaj obsesyjnej refaktoryzacji przynosi efekt przeciwny do zamierzonego. Czy ktoś wie, jak można by to nazwać? Nie sądzę, żeby w nazwie było _refaktoryzacja_.


title: Czy obiekt Animal powinien być abstrakcyjny, czy powinien umożliwiać tworzenie instancji w celu reprezentowania „ogólnego” wystąpienia?

text: Po krótkiej dyskusji w komentarzach tutaj zacząłem się zastanawiać, czy klasa bazowa, taka jak `Animal` w tradycyjnym przykładzie OOP, powinna być oznaczona jako abstrakcyjna, czy nie. Osobiście uważam, że powinno: nie ma czegoś takiego jak „zwierzę”, jest to po prostu termin grupujący pewne podtypy na podstawie tego, czym one są. Każde wystąpienie „zwierzęcia” powinno być podtypem, konkretnym przykładem. Komentarz, który nastąpił po tym, brzmiał: Z całą pewnością istnieje coś takiego jak zwierzę. A może nalegałbyś, aby > Pies został podzielony na Affenpinscher, Irish Wolfhound, SiberianHusky, > EnglishSetter i 600 innych ras? co jest uczciwą uwagą, ale różni się od pierwotnej sytuacji, w której była hierarchia ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/keWQL.png) I nie ma podklas `Psa` na pierwszym miejscu. Gdyby tak było, tak, `Pies` powinien być abstrakcyjny, ponieważ drzewo zawiera bardziej specyficzne liście dla tego konkretnego typu. Mogę tylko założyć, że powodem, dla którego nie chciałbyś uczynić go określonym podtypem, jest to, że po prostu go nie znasz. Zamiast tego dodałbym "domyślną" implementację psa, aby to uwzględnić, dzięki czemu mogę zachować abstrakcyjną klasę `Dog`, aby nie było żadnych niejasności: jesteś zmuszony albo utworzyć konkretnego psa, albo wskazać, że jesteś nie znam typu. Co więcej, pozwala również na tworzenie "abstrakcyjnych" metod, które każdy pies powinien zaimplementować dla siebie, ponieważ są one specyficzne dla typu psa. Używając klasy nieabstrakcyjnej, nie możesz tego zrobić i będziesz musiał pamiętać o przesłonięciu każdej metody w podklasach. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/UXPFM.png) W powyższym drzewie utworzyłbym abstrakty `Pies`, `Mammal` i `Animal` i pozwoliłbym na utworzenie instancji pozostałych . Pytanie sprowadza się do tego: **czy powinieneś być w stanie stworzyć instancję klasy, która istnieje, aby wskazać podgatunek, czy też powinieneś odroczyć tworzenie takiego "ogólnego" obiektu na podtyp?**


title: Klauzula kontraktowa dotycząca ergonomii/zapobiegania urazom

text: Jestem pewien, że wielu programistów stanęło przed takim scenariuszem: obecnie negocjujesz nowe stanowisko w firmie i przeglądasz całą listę (wynagrodzenie, dodatki, benefity itp.), ale _zawsze_ czegoś brakuje. W ciągu 8 lat mojej pracy zawodowej ani razu nie widziałem klauzuli dotyczącej ergonomii czy zapobiegania urazom. Mam na myśli zapewnienie ergonomicznego fotela, klawiatury, a nawet podstawki pod Twój LCD. Mam złą górną część pleców i szyi, które muszę co tydzień odwiedzać u kręgarza. Zawsze upewniam się, że w kontrakcie jest co najmniej dobry plan chiropraktyki, ale to tylko naprawia powierzchnię problemu. Mój kręgarz mówi mi, że moja szyja się prostuje (nie jest dobrze) i że powinienem zapobiegać złej ergonomii w miejscu pracy, aby temu zapobiec. Jestem w takim punkcie mojej kariery, że jestem bardzo poszukiwany i sam mogę stawiać rozsądne wymagania. Poprosiłem w przeszłości kilka firm o lepsze krzesło (Herman Miller, Humanscale itp.) lub klawiaturę (Microsoft Ergonomic) lub nawet stojak LCD, z którego normalnie się śmieję. Nie ma wątpliwości, że ten zawód rujnuje mi kark/plecy, ale życzę powodzenia w próbach narzucenia tego konkretnej (a nawet zbiorowej) firmie za brak ergonomii. Moje pytanie brzmi, jak podchodzisz do tematu? Czy ktoś odniósł sukces w przeszłości? Czy robisz na umowie czy czekasz, aż będziesz w firmie, wtedy zapytaj? W jaki sposób upewniasz się, że firma trzyma koniec umowy? Wszelkie sugestie i opinie byłyby bardzo mile widziane.


title: Czy baza danych NoSQL byłaby bardziej wydajna niż relacyjna baza danych do przechowywania obiektów JSON?

text: Używam biblioteki, która zwraca obiekt JSON (jako ciąg, ale myślę, że to standard) i chciałbym przechowywać zawartość tego obiektu w lokalnej bazie danych. Jestem dość świeży, jeśli chodzi o kontakt z DB, ale potrafię się odnaleźć. Do przechowywania danych używałem bazy danych MySQL, ale wymagało to użycia metod wyodrębniania pól surowego obiektu oraz krojenia i krojenia. Zastanawiam się, czy wydajniej byłoby użyć rozwiązania NoSQL do przechowywania danych, ponieważ są one już w odpowiedniej formie.


title: Czy interfejsy i sygnatury metod są chronione prawami autorskimi?

text: Na przykład, czy jest to naruszenie praw autorskich, jeśli napiszę klasę o nazwie Random z dokładnie tym samym podpisem celu i metody, co klasa Microsoft .Net System.Random? Czy ma znaczenie, w jakim języku jest napisany? W tym przypadku chcę napisać klasę Random do użytku w ActionScript, w której brakuje wbudowanej, zaszczepionej klasy PRNG. Jeśli ktoś ma dobre linki lub sugestie referencyjne, które pomogą zrozumieć, jakie aspekty oprogramowania są chronione, to też świetnie. I tak, wiem, że to nie jest miejsce na „prawdziwe” porady prawne. Jeśli ktoś pójdzie do sądu, wskazując na publiczne forum dyskusyjne jako pierwszeństwo – wstydź się tego.


title: Konieczność nauki rozszerzenia języka haskell do produkcji

text: Podstawowy język Haskella jest naprawdę prosty. Wychodząc z tła OO, główną trudnością jest przystosowanie się do czysto funkcjonalnego paradygmatu. Ucząc się "podstawowego" Haskella, zawsze uważałem rozszerzenia języka za zabawki dla ludzi korzystających z CS lub jako eksperymenty z przyszłymi wersjami języka (jak `from future import ???` w pythonie). Jednak kiedy zacząłem patrzeć na frameworki internetowe, takie jak Yesod, stwierdziłem, że wiele plików źródłowych wymaga od 3 do 4 rozszerzeń. Niektóre wyglądają dość prosto (StringOverload). Inne są naprawdę onieśmielające (GADT, Type Fmillies, Template Haskell). Ich dokumentacja zawiera linki do prac naukowych, co jest przerażające dla kogoś, kto spodziewa się nauczyć „tylko” nowej biblioteki. Czy konieczne jest nauczenie się rozszerzeń językowych GHC, aby być produktywnym w Haskell? Gdybyś miał zatrudnić programistę Haskell do aplikacji produkcyjnej, poprosiłbyś o taką wiedzę?


title: Czy produkt tworzony przez programistów to dobra rzecz?

text: Pracuję w firmie, w której CEO zarządza zespołem produktowym, który makiety funkcji i rzuca na kolana programistów, aby następnie je wdrożyć. Oczywiście jest pewna iteracja, opinie deweloperów są szanowane. Ale zastanawiam się, jak skuteczny jest ten proces. Jason Calacanis właśnie napisał: > Doktryna Zuckerberga: Deweloperzy projektują produkty ze znacznie > większą szybkością i funkcjonalnością w porównaniu do menedżerów produktu i projektantów, > przewyższają potencjalne błędy i wady. > > ... > > Wtedy naprawdę do mnie dotarło: Startupy zorientowane na programistów zawsze produkują produkt > szybciej. > > To ma sens: nasi nietechniczni ludzie prowadzą dyskusje i debaty, podczas gdy Zuckerberg koduje swój następny film. Dlatego nikt > nie był w stanie nadążyć za Facebookiem! > > Podczas gdy MySpacers debatowali nad iteracją swojego produktu, Facebook po prostu > próbował różnych rzeczy. Czy to faktycznie działa lepiej w praktyce?


title: Uruchamianie tylko niektórych testów po zmianie kodu

text: Uruchomienie kompilacji może zająć dużo czasu. Po co przeprowadzać wszystkie testy, skoro dana zmiana prawdopodobnie może złamać tylko niektóre z nich? Powinieneś być w stanie zbudować wykres zależności całego kodu, który każdy test mógłby ewentualnie uruchomić, a następnie uniknąć uruchamiania testów, na które nie można wpłynąć. Czy jest coś, co to robi?


title: MVC to architektura GUI czy architektura GUI i domeny?

text: Fowler odnosi się do MVC jako architektury GUI: > Istnieje wiele różnych sposobów na zorganizowanie kodu dla bogatego **klienta > systemu**. Tutaj omawiam wybór tych, które moim zdaniem miały > największy wpływ i przedstawiam ich związek z wzorcami. Jeśli MVC jest architekturą GUI, to powiedz, że M w MVC to reguły biznesowe lub domena nie jest zła?


title: Ukrywanie złożoności za pomocą funkcji podrzędnych

text: Prowadzę dyskusję na temat stylu kodu i zaczyna brzmieć jak „kwestia gustu”. Mocno wierzę, że jest inaczej, więc piszę to, aby uzyskać twoją opinię i wyciągnąć wnioski z twoich argumentów za i przeciw. Problem polega na ukrywaniu złożoności przez zastąpienie kilku wierszy kodu metodą. Ta dyskusja nie jest związana z funkcjami wielokrotnego użytku i staram się przedstawić argument za prostą organizacją kodu, a nie za rozłożeniem na czynniki wspólnej funkcjonalności. Tak więc weźmy ten przykład w luźnej javie: public void zakup(Klient klienta, pozycje Set<Item>, magazyn magazynowy){ int credit = customer.getCredit(); Zamówienie intCena; for(Item item: items){ orderPrice+=items.getPrice(); } if(cena zamówienia + klient.getPendingPayments() > klient.getCredit()) { magazyn.reserveStock(items); transportCenter.allocateTransport(); klient.rachunek (przedmioty, cena zamówienia); } } W przeciwieństwie do tego: public boolean isCreditOk(Customer customer, Set<Item> items){ int credit = customer.getCredit(); Zamówienie intCena; for(Item item: items){ orderPrice+=items.getPrice(); } return cena zamówienia + klient.getPendingPayments() > klient.getCredit(); } public void zakup(Klient, Set<Item> items, Warehouse Warehouse){ if(isCreditOk(customer, items)){ warehouse.reserveStock(items); transportCenter.allocateTransport(); klient.rachunek (przedmioty, cena zamówienia); } } Cała dyskusja teraz brzmi: czy stworzyłbyś metodę `isCreditOk`, czy pozostawiłbyś ją w trybie inline? Kiedy robisz jedno lub drugie? czy to zależy, w ogólnym przypadku, od: * długości funkcji do wyodrębnienia * liczby pod-funkcji i podfunkcji, które otrzymaCreditOk, będzie miało ponieważ ułatwia to odczytanie kodu (moim zdaniem). Czy mogę prosić o komentarze? Dziękuję! Uwaga: Odkryłem, że to pytanie jest powiązane: Czy istnieje coś takiego jak posiadanie zbyt wielu prywatnych funkcji/metod?


title: Czy czynniki takie jak obsługa technologii Intellisense i silne typowanie są wystarczające, aby uzasadnić użycie „Modelu domeny anemicznej”?

text: Łatwo zaakceptować, że obiekty powinny być używane we wszystkich warstwach z wyjątkiem warstwy wyznaczonej jako warstwa danych. Jednak równie łatwo jest stworzyć „anemiczny model domeny”, który jest po prostu obiektową reprezentacją danych bez rzeczywistej funkcjonalności ( http://martinfowler.com/bliki/AnemicDomainModel.html ). Jednak korzystanie z obiektów w ten sposób przynosi korzyści takim czynnikom, jak obsługa Intellisense, silne typowanie, czytelność, wykrywalność itp. Czy te czynniki są silnymi argumentami za anemicznym modelem domeny?


title: Algorytm implementacji QoS

text: Pracuję nad aplikacją obsługującą routing IP i QoS. Dzisiaj mamy zaimplementowany QoS, z 3 priorytetami (niski, normalny i wysoki) i dla każdego poziomu tworzymy Kolejkę i jak tylko pakiety są w kolejce, wysyłamy je dalej w sposób FIFO (planista spędza 60% czasu z wysoką kolejką, 30% czasu z normalną i 10% z niską kolejką). Działa, ale jako FIFO ma pewne wady, takie jak: * Agresywny ruch wypełni kolejkę i wszystkie inne przepływy o tym samym priorytecie zostaną zablokowane * przy dużym użyciu, TCP zwolni, a UDP będzie zalewał naszą kolejkę. Oznacza to, że ostatecznie przepływy UDP będą miały lepsze priorytety niż przepływy TCP Myślałem o tym, jak to ulepszyć i moim pomysłem jest zaimplementowanie SFQ z następującym algorytmem: * utrzymuj wysoki, normalny, niski, ale nie tylko 3 kolejki, ale jedna na (widoczny) protokół * Scheduler nadal spędza 60% czasu na wysokich kolejkach, 30% czasu na normalnych i 10% na niskich kolejkach. Ale teraz robi round-robin między kolejkami o tym samym priorytecie. Wybrana Kolejka nadal będzie przekazywać pakiety w sposób FIFO. wady tej implementacji: * jest droższe dla procesora Czy czegoś mi brakuje? Jakieś rekomendacje?


title: Ile czasu mogę poświęcić na naukę w pracy?

text: Jako programista pracuję już od około 2 lat. Wydaje się oczywiste, że w dziedzinie tak szybko rozwijającej się, jak tworzenie oprogramowania, trzeba poświęcać czas na naukę nowych technologii, frameworków itp. Zawsze myślałem, że mogę przyjąć za pewnik, że jeśli muszę się czegoś nauczyć, aby rozwiązać problem w pracy , mogę poświęcić potrzebne godziny na naukę również w pracy. Jednak dyskutowałem na ten temat z różnymi kolegami i mieliśmy bardzo różne opinie, najwyraźniej na rozpiętości dwóch skrajności: > Twój pracodawca płaci ci za wiedzę. Zostałeś zatrudniony za posiadanie wiedzy > w dziedzinie wiedzy wymaganej do wykonywania tej pracy, a jeśli ta dziedzina > wyłania się tak, że musisz zdobyć więcej wiedzy, to naturalne, że robisz to > w wolnym czasie. A druga skrajność to > Cokolwiek czyni mnie bardziej produktywnym w pracy na dłuższą metę, warto poświęcać > czas w pracy, ponieważ pracodawca w końcu na tym skorzysta. > Dotyczy to oczywiście nauki nowych technik, ale także m.in. > nauka VIM, aby być szybszym itp. Ale nawet dyskutując o tym, jak długo spędzać czas z chłopakami, którzy mają tendencję do drugiej skrajności, mieliśmy bardzo różne opinie, od „godziny od czasu do czasu jest w porządku” do „ jak długo to trwa". Czy Twoje miejsce pracy zachęca do uczenia się nowych umiejętności, a jeśli tak, jakie procesy mają do tego zachęcać? Ile czasu spędzasz na uczeniu się nowych rzeczy (a nie na pisaniu kodu produkcyjnego) w ciągu dnia jako programista?


title: Konwencja Java dla if/else if order

text: Mam strukturę if/else if, która w niektórych przypadkach nic nie robi. Z kodu, który widziałem w swojej karierze, „pusta” sprawa jest zwykle pomijana. Ale kiedy pisałem swój kod, po prostu nie wydaje mi się właściwe, aby pominąć ten przypadek, ale pokazać go jako prawdziwy przypadek, który po prostu nic nie robi. Na przykład w przypadku, gdy coś jest robione, gdy liczba jest mniejsza niż 5 i większa niż 10, ale nic nie jest robione pomiędzy: int a = 4 if(a < 5) { zrób coś } else if(a >=5 && a <= 10) { // nic nie rób } else if(a > 10) { rób coś innego } Powodem, dla którego pomyślałem, że jest to lepsza opcja, jest to, że: 1. Tak myślałem o problemie w moim umyśle. 2. To pokazuje czytelnikowi kodu, że pomyślałem o wszystkich możliwościach i nie zapomniałem żadnej przez pomyłkę. Zastanawiałem się więc, czy ta konwencja jest akceptowana przez społeczność programistów, czy też jest unikana.


title: Jaka jest akceptowana najlepsza praktyka konwersji typów Java?

text: Jaka jest aktualna najlepsza praktyka dla wszystkich konwersji typów niezbędnych w aplikacji internetowej Java? Na przykład `HttpServletRequest.getParameters(...)` zwraca `String[]`, ale Hibernate nie zezwala na użycie `String[]` w klauzuli IN dla kolumny numerycznej. Dlatego muszę przekonwertować `String[]` na `Long[]` poprzez `Long.valueOf()`. Jak najlepiej sobie z tym poradzić, poza przepisywaniem w innym języku? Czy ludzie po prostu tworzą klasę pełną małych, statycznych metod, aby to zrobić?


title: Czy liczba całkowita jest zbyt często używana jako typ danych?

text: Czy większość programistów aplikacji używa liczb całkowitych ze znakiem w miejscach, w których naprawdę mają na celu użycie liczb całkowitych bez znaku? Robię to cały czas, tak jak moi współpracownicy. Nie widziałem wielu innych rozbudowanych baz kodu (innych niż Delphi VCL), a przykłady w Internecie zwykle używają liczb całkowitych. Podczas gdy programiści VCL używają własnych typów danych (co byłoby najbardziej nieleniwym sposobem deklarowania zmiennych). Coś wydaje się trochę straszne w kodzie takim jak ten TStuffRec = record recordID : Integer; identyfikator rzeczy : liczba całkowita; otherThingID : liczba całkowita; koniec; kiedy może być napisany jako TStuffRec = record ID rekordu : Cardinal; identyfikator rzeczy : kardynał; otherThingID : kardynał; koniec; Funkcjonalnie te rekordy prawie zawsze działają tak samo (i miejmy nadzieję, że będą działać tak samo nawet w 64-bitowym Delphi). Ale bardzo duże liczby będą miały problemy z konwersją. Ale są też wady używania niepodpisanych int. Wynika to głównie z tego, jak irytujące jest mieszanie tych dwóch. Prawdziwe pytanie brzmi, czy jest to rzecz, o której myśli się lub jest uwzględniana w najlepszych praktykach? Czy zwykle zależy to tylko od dewelopera?


title: Jakie jest najlepsze podejście do rozwiązania problemu metody fabrycznej, która musi być instancją?

text: Muszę dodać nową funkcjonalność w projekcie spuścizny usługi sieciowej i zastanawiam się, jakie jest najlepsze podejście do konkretnej sytuacji. Usługa sieciowa jest prosta: odbiera plik XML, unmarshalling, generuje obiekty odpowiedzi, marshalling iw końcu wysyła odpowiedź w postaci pliku XML. Na każdy odebrany plik XML usługa sieciowa zawsze odpowiada tą samą strukturą XML. Co muszę zrobić, to wygenerować inny plik XML zgodnie z otrzymanym XML. Mam więc klasę kontrolera, która ma wszystkie operacje rozmieszczania/odprowadzania, ale ta klasa kontrolera musi być instancją. W zależności od otrzymanego XML potrzebuję kilku metod marshallingu lub innych. Próbując dokonać kilku zmian w starszym źródle, jakie jest najlepsze podejście? Moje pierwsze podejście polegało na wykonaniu wzorca metody fabrycznej z klasą kontrolera, ale ta klasa musi być instancją. W miarę możliwości chcę zachować następującą strukturę: classController.doMarshalling(); Myślę, że ten jest trochę śmierdzący: if(XMLReceived.isTypeOne()) classController.doMarshallingOne(); else if(XMLReceived.isTypeTwo()) classController.doMarshallingTwo(); else if(XMLReceived.isTypeThree()) classController.doMarshallingThree(); inaczej, jeśli ... mam nadzieję, że moje pytanie zostało dobrze zrozumiane


title: Dlaczego wiele starszych artykułów o algorytmach odwołuje się do implementacji na PDP-10 lub PDP-11?

text: Weźmy na przykład oryginalny papier Boyer-Moore. Wydaje się, że za każdym razem, gdy szukam algorytmu, artykuł, do którego się odwołuję, mówi o specyfikach implementacji na PDP-10 lub PDP-11. Wiem, że kiedyś były to popularne maszyny, ale nie tak popularne, aby tłumaczyć dużą liczbę referencji, które widzę. Czy istnieje konkretny powód, dla którego te maszyny były używane jako przykłady w artykułach dotyczących algorytmów?


title: Czy muszę udostępnić kod źródłowy zmodyfikowanej aplikacji AGPL, jeśli aplikacja jest dostępna wyłącznie w mojej prywatnej sieci LAN?

text: Mam grę sieciową na licencji AGPL, którą zmodyfikowałem do swoich potrzeb. Teoretycznie chcę obciążać ludzi za granie w tę grę przez sieć lokalną, która jest skonfigurowana w prywatnym przedsiębiorstwie, do którego jestem właścicielem całej lokalnej infrastruktury sieciowej, w tym serwera i stacji do gier. czy nadal będę musiał udostępnić kod źródłowy tym osobom?


title: Jak mogę zaimplementować modułową funkcję „zapisz” w grze?

text: Muszę zaimplementować metodę zapisu mojej gry w taki sposób, aby zmienić nośnik pamięci przy zmianie tylko jednej zmiennej. Najlepiej byłoby użyć interfejsu do wyznaczenia wymaganych sygnatur metod i zaimplementować ten interfejs z inną konkretną klasą dla każdego medium. Na przykład jeden dla bazy danych, jeden dla xml, prawdopodobnie jeden dla obiektów serializowanych. Jak dokładnie zainicjować funkcję zapisu? Na przykład, jeśli mam klasę typu Persistence o nazwie PersistToXML, która jest inicjowana do jakiejś zmiennej gdzieś po uruchomieniu gry, jak najlepiej ją zaimplementować, aby móc w razie potrzeby zapisać moje odpowiednie obiekty? Waham się przed użyciem Singletona ze względu na wszystkie złe recenzje, które o nim czytałem, i tak naprawdę nie chcę przekazywać tego obiektu każdej klasie, na wypadek, gdybym musiał coś zapisać.


title: Jakiej „konwencji nazewnictwa wersji” używasz?

text: Czy różne konwencje nazewnictwa wersji są odpowiednie dla różnych projektów? Czego używasz i dlaczego? Osobiście wolę numer kompilacji w postaci szesnastkowej (np. 11BCF), należy go bardzo regularnie zwiększać. A potem dla klientów prosty 3-cyfrowy numer wersji, czyli 1.1.3. 1.2.3 (11BCF) <- Numer kompilacji, powinien odpowiadać rewizji w kontroli źródła ^ ^ ^ | | | | | +--- Drobne błędy, błędy ortograficzne itp. | +----- Drobne funkcje, główne poprawki błędów itp. +---------- Główna wersja, zmiany UX, zmiany formatu plików itp.


title: Jak wersjonujesz swoje pliki (numery wersji)

text: Zastanawiam się, jak decydujesz o numerze wersji swoich aplikacji, czy naprawdę zapisujesz wszystkie wprowadzone zmiany (w dzienniku zmian)? Następnie w jaki sposób zdecydujesz, jak zwiększyć numer wersji. np. +0.0.1 za każdą poprawkę błędu czy coś, +0.1 za każdą nową wersję funkcji? a może dołączasz wiele zmian do +0.1 swojego numeru wersji?


title: Kiedy zmienisz numer wersji głównej/pobocznej/poprawki?

text: > **Możliwy duplikat:** > Jakiej „konwencji nazewnictwa wersji” używasz? Czy zmieniacie numery wersji głównej/pobocznej/poprawki tuż przed wydaniem, czy zaraz po? Przykład: Właśnie wydałeś 1.0.0 światu (huzzah!). Ale czekaj, nie świętuj za dużo. 1.1.0 wychodzi za sześć tygodni! Więc naprawiasz błąd i robisz nową kompilację. **Jak się nazywa ta kompilacja?** 1.1.0.0 lub 1.0.0.xxxy (gdzie xxxy to numer kompilacji zwiększony o 1.0.0)? Pamiętaj, że w wersji 1.1.0 możesz mieć 100 funkcji i błędów. Warto więc nazwać go 1.0.0.xxxy, ponieważ nie zbliżasz się do 1.1.0. Ale z drugiej strony inny programista może pracować nad 2.0.0, w którym to przypadku twoja kompilacja może nosić nazwę 1.1.0.0 i jego 2.0.0.0 zamiast odpowiednio 1.0.0.xxxy i 1.0.0.xxxz.


title: Jaka jest Twoja strategia wersjonowania aplikacji?

text: Chciałbym poznać opinie społeczności SO na temat najlepszej strategii wersjonowania aplikacji. Moje pytania: 1. Jak śledzić numer wersji swojej aplikacji? Czy masz formalną definicję tego, co reprezentuje każda liczba/znak w tej wersji? 2. Co oznaczają różne liczby/ciągi w wersji aplikacji dla Twojej aplikacji? 3. Czy używasz w swoich aplikacjach jakiegokolwiek automatycznego systemu aktualizacji (np. czegoś takiego jak Sparkle) i jak dobrze się dla Ciebie zachowuje? 4. Czy masz oddzielną procedurę aktualizacji dla beta-testerów lub testerów przedpremierowych swojej aplikacji?


title: [RRRR].[MM].[DD].[hh][mm] kontra [główne].[pomniejsze].[wersja]

text: > **Możliwy duplikat:** > Jakiej „konwencji nazewnictwa wersji” używasz? Obecnie debatuję między tradycyjną konwencją wersjonowania „[główna].[poboczna].[wersja]” a moją własną, niemal kapryśną, „[RRRR].[MM].[DD].[hh][mm]” dla nowy projekt, który zaczynam. Rozumiem, że `[główna].[poważna].[wersja]` jest prawdopodobnie najpopularniejszą metodą wersjonowania na świecie i jest rzeczywiście całkiem prosta i rozsądna, z wyjątkiem tego, że określenie, które zmiany zasługują na etykietę „główna”, „drobna” a nawet "rewizja" może być... **subiektywna**. System wersjonowania oparty na _timestamp_ jest czysto niesubiektywny i gwarantuje unikalność. Którą wybralibyście do swojego projektu i dlaczego?


title: Rekomendacja książki wyjaśniającej usługi sieciowe w java

text: Jestem nowy w usługach internetowych. Od 3 lat zajmuję się aplikacjami webowymi w języku Java. Czy istnieją książki, które jasno wyjaśniają podstawy usług internetowych. Przeczytałem Uruchamianie usług internetowych Java i czuję się zagubiony, ale nie znalazłem tam odpowiedniej rekomendacji książki.


title: Czy składnia JavaScript jest taka sama we wszystkich przeglądarkach?

text: Jeśli chodzi o interakcję z DOM, różne przeglądarki będą oferować metody - i wyniki - które różnią się między sobą w pewnym lub innym stopniu. Ale co z samym JavaScriptem? Czy wszystkie przeglądarki (lub platformy, np. Adobe Reader) implementują tę samą składnię i zachowanie? Aspekty, które szczególnie mnie martwią, to obsługa funkcji/obiektów oraz operacje arytmetyczne.


title: Rozważasz JCR jako rozwiązanie NoSQL?

text: Oceniam niektóre rozwiązania NoSQL dla mojego projektu i JCR pojawiło się podczas moich poszukiwań jako magazynu dokumentów. Ale wydaje się, że jest to niejasna nisza, która nie miała takiego wpływu, na jaki liczyli jego projektanci. Interesuje mnie ta technologia, ale jak dotąd nie ma zbyt wielu zasobów, aby pokazać jej potencjał (jest trochę informacji na stronie Jackrabbit, ale poza tym, informacje są bardzo skąpe). Mam nadzieję, że ktoś ze społeczności SE może podzielić się swoimi doświadczeniami z tą technologią. Jakie są jego zalety/wady? W jakich sytuacjach ta technologia sprawdza się najlepiej?


title: Webowy CMS typu Open Source do pisania i zarządzania dokumentacją API

text: To jest pytanie, które było już wcześniej zadawane (np. Jak zarządzać dokumentacją projektu open source). Jednak moje pytanie jest trochę inne, ponieważ: * Nie tworzymy oprogramowania open source, ale oprogramowanie zastrzeżone * Dokumentacja musi być napisana ręcznie, ponieważ nie chcemy publikować faktycznej dokumentacji API oprogramowania, a jedynie publiczną Dokumentacja API * Chcę, aby programiści i kierownicy projektów wspólnie pisali dokumentację Oczywiście wiki są rozwiązaniem, ale są bardzo ogólne. Szukam bardziej specjalistycznego narzędzia do tej pracy. Rozejrzałem się i znalazłem kilka, takich jak Adobe Robohelp, rozwiązania SaaS i tym podobne, ale chciałbym wiedzieć, czy istnieje jakieś oprogramowanie open source do tego celu. **Czy znasz jakiś internetowy CMS typu Open Source do pisania i zarządzania dokumentacją API i oprogramowania?**


title: Budowanie aplikacji nadmiarowej/rozproszonej

text: To bardziej pytanie typu „wskaż mi właściwy kierunek”. Mój trzyosobowy zespół i ja zbudowaliśmy hostowaną aplikację internetową, która kolejkuje i kieruje żądania czatu klientów do dostępnych agentów obsługi klienta (robi też inne rzeczy, ale jest to wystarczające tło, aby zilustrować problem). Podstawową architekturą deweloperską jest dziś: * jednostronicowy interfejs sieciowy ajax (ASP.NET MVC) z ruchomymi oknami czatu (pomyśl Gmail) * usługa backendu Windows do kolejkowania i kierowania żądań czatu * ta usługa również rejestruje czaty, oblicza usługę poziomy itp. * produkt serwerowy Comet, który kieruje dane między interfejsem internetowym a usługą systemu Windows zaplecza * pomaga nam to również wykryć, którzy agenci są nadal połączeni (online) A nasza dzisiejsza architektura sprzętowa to: * 2 serwery do obsługi części interfejsu internetowego aplikacji * system równoważenia obciążenia do kierowania żądań do 2 różnych serwerów aplikacji internetowych * trzeci serwer do hostowania bazy danych SQL Server i usługi systemu Windows zaplecza odpowiedzialnej za kolejkowanie / dostarczanie czatów ![wstaw opis obrazu tutaj](http:// i.stack.imgur.com/AoSk5.png) W obecnej sytuacji jeden z serwerów aplikacji internetowych może ulec awarii i wszystko będzie w porządku. Gdyby jednak coś się stało z serwerem SQL Server / Windows Service, zostalibyśmy oberwani. Moje pytanie — jak mogę sprawić, by ta logika usługi backendu systemu Windows mogła być rozłożona na wiele komputerów (rozproszona)? Usługa Windows została napisana w celu akceptowania żądań z serwera Comet, sprawdzania dostępnych agentów i kierowania czatu do tych agentów. Jak mogę sprawić, by to było bardziej rozpowszechnione? Jak mogę sprawić, aby praca zaplecza systemu Windows mogła być rozłożona na wiele komputerów w celu zapewnienia nadmiarowości i czasu pracy bez przestojów? Czy będę musiał przepisać go z myślą o przetwarzaniu rozproszonym? Powinienem również zauważyć, że hostuję to wszystko na instancjach Rackspace Cloud - więc może jest to coś, o co powinienem się mniej martwić? Z góry dziękuję za wszelką pomoc!


title: Kiedy należy używać bazy danych dokumentu, a kiedy relacyjnej lub graficznej?

text: Na potrzeby dyskusji rozważmy scenariusz FourSquare. ## Scenariusz Jednostki: * Użytkownicy * Miejsca Relacje: * Zameldowania: użytkownicy <-> miejsca, od wielu do wielu * Przyjaciele: użytkownicy <-> użytkownicy, od wielu do wielu ## Projekt bazy danych Najprawdopodobniej będą zawierały błędy, proszę je wskazać . ### Tabele RDBMS: * Użytkownicy * Miejsca * Checkins (skrzyżowanie) * Przyjaciele (skrzyżowanie) Plusy: * WPR: spójność, dostępność Wady: * WPR: tolerancja partycji, aka sharding * schematy = nieelastyczna struktura * słaba replikacja? ### Obiekty wykresu: * Użytkownicy * Miejsca Krawędzie: * Znajomi: Użytkownik <-> Użytkownik * Zameldowania: Użytkownik -> Miejsca * zawiera znacznik czasu Plusy: * CAP: spójność, dostępność? * nieschematyczne, łatwo modyfikowalne obiekty i krawędzie * zapytania przemierzające wykresy, na przykład: * grupowanie * znajdowanie grup znajomych * znajdowanie restauracji lubianych przez podobne osoby * inne popularne/użyteczne zapytania? Minusy: * CAP: tolerancja partycji? ### Dokument / Obiekt 3 oddzielne bazy danych? * Użytkownicy * lista znajomych * Checkins * znacznik czasu * użytkownik * miejsce * Miejsca Plusy: * CAP: dostępność, tolerancja partycji * obiekty bez schematu, łatwo modyfikowalne Minusy: * CAP: spójność ## Pytania Dla przypomnienia, w końcu użyli MongoDB. Oprócz tych wszystkich znaków zapytania powyżej: 1. Nie jestem pewien, jak zaimplementować bazę dokumentów. 2. W jaki sposób bazy danych dokumentów uzyskują tolerancję partycji? 3. Aby uzyskać meldunki pojedynczego użytkownika, zakładam, że operacja przeanalizuje wszystkie meldunki i przefiltruje metadane pod kątem nazwy użytkownika (mapa + filtr). Wydajność parsowania ponad 1 000 000 dokumentów dla każdego użytkownika byłaby strasznie słaba. Zakładam, że to nie jest prawidłowe zachowanie? 4. Jakie są inne zalety / wady?


title: Dlaczego miałbyś chcieć używać tablicy lub skrótu jako klucza mieszającego w ruby?

text: używam **Ruby 1.9.3** Doszedłem do wniosku, że możesz użyć `tablicy` lub `hash` jako klucza mieszającego w ruby: h = Hash.new h[Array.new] = "Dlaczego? " h[Array.new] # Dane wyjściowe: "Dlaczego?" h[Hash.new] = "To nie ma sensu" h[Hash.new] # Dane wyjściowe: "To nie ma sensu" Ale obiekt działa inaczej... h[Object.new] = "LOL" h[Object.new] # Wyjście: "nil" Ale to działa zgodnie z oczekiwaniami: o = Obiekt.new h[o] = "LMAO" h[o] # Wyjście: "LMAO" Próbowałem tego: o = Obiekt.new # Dane wyjściowe: #<Obiekt:0x2c78c10> h["#<Obiekt:0x2c78c10>"] # Dane wyjściowe: nil Próbowałem w **Pythonie** i **PHP** i zgłasza błąd. Jestem po prostu ciekaw, jak to działa i dlaczego miałbyś używać `tablicy` lub `hash` jako klucza mieszającego w ruby? Dziękuję.


title: Bezpieczne wątkowo programowanie GUI

text: Od kilku lat z rozmachem programuję Javę i zawsze akceptowałem, że interakcje GUI muszą mieć miejsce w wątku Event Dispatch. Niedawno zacząłem używać GTK+ w aplikacjach C i nie byłem zaskoczony, gdy odkryłem, że interakcje GUI muszą być wywoływane na gtk_main. Podobnie spojrzałem na SWT, aby zobaczyć, w jaki sposób różni się od Swinga i zobaczyć, czy warto go używać, i ponownie znalazłem pomysł wątku UI i jestem pewien, że te 3 nie są jedynymi zestawami narzędzi do korzystania z tego modelu. Zastanawiałem się, czy istnieje powód tego projektu, tj. Jaki jest powód trzymania modyfikacji UI izolowanych do jednego wątku. Rozumiem, dlaczego niektóre modyfikacje mogą powodować problemy (np. modyfikowanie listy podczas jej rysowania), ale nie widzę, dlaczego obawy te przechodzą na użytkownika API. Czy istnieje limit nałożony przez system operacyjny? Czy istnieje dobry powód, dla którego te obawy nie są „ukryte” (tj. jakaś forma synchronizacji, która jest niewidoczna dla użytkownika)? Czy istnieje jakiś (nawet czysto koncepcyjny) sposób tworzenia biblioteki graficznej bezpiecznej dla wątków, czy może jest to rzeczywiście niemożliwe? Znalazłem ten http://blogs.operationaldynamics.com/andrew/software/gnome-desktop/gtk-thread-awareness, który wydaje się opisywać GTK inaczej niż to rozumiałem (chociaż moje rozumienie było takie samo jak wielu ludzi) różni się to od innych zestawów narzędzi? Czy można to zaimplementować w Swingu (ponieważ model EDT w rzeczywistości nie uniemożliwia dostępu z innych wątków, często prowadzi to do wyjątków)


title: Dlaczego nie wszyscy jeszcze pracujemy nad rozwojem opartym na modelach?

text: Jestem prawdziwym zwolennikiem Model Driven Development, myślę, że ma on możliwość zwiększenia produktywności, jakości i przewidywalności. Patrząc na MetaEdit, wyniki są niesamowite. Mendix w Holandii rozwija się bardzo szybko i osiąga świetne wyniki. Wiem również, że jest wiele problemów * wersjonowanie generatorów, szablonów i frameworka * projekty, które po prostu nie są odpowiednie dla rozwoju opartego na modelu (za mało powtórzeń) * wyższe ryzyko (gdy pierwszy projekt się nie powiedzie, masz mniej wyników niż ty miałby z bardziej tradycyjnym rozwojem) * itp. Jednak nadal te problemy wydają się możliwe do rozwiązania, a korzyści powinny przeważać nad wymaganym wysiłkiem. **Pytanie** : Jakie są Twoim zdaniem największe problemy, które sprawiają, że nawet nie zastanawiasz się nad rozwojem opartym na modelach? Chcę wykorzystać te odpowiedzi nie tylko dla własnego zrozumienia, ale także jako możliwe źródło dla serii wewnętrznych artykułów, które planuję napisać.


title: Czy istnieje kanoniczna książka o tworzeniu wysoce interaktywnych stron internetowych (np. typu "Flash") z wykorzystaniem HTML5/CSS3/JS/jQuery?

text: Znam już niektóre podstawy tych technologii, ale w większości ograniczają się one do bardziej statycznych witryn. Używanie elementów semantycznych HTML5, gradientów CSS3, cieni, `@font-face` itp. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje dotyczące tworzenia wysoce interaktywnych stron internetowych HTML5/CSS3/JS/jQuery? Co w tej książce czyni ją wyjątkową?


title: odpowiedzialność za przechowywanie

text: Kolega i ja zastanawialiśmy się, gdzie umieścić odpowiedzialność obiektu za przechowywanie się na dysku w naszym własnym formacie pliku. Zasadniczo są dwie możliwości: 1. object.store(file) 2. fileformatWriter.store(object) Pierwsza z nich przekazuje odpowiedzialność za serializację na dysku do samego obiektu. Jest to podobne do podejścia stosowanego przez python pickle. Druga grupuje odpowiedzialność za reprezentację na obiekcie zapisującym format pliku. Obiekt danych jest zwykłym kontenerem danych (ewentualnie z dodatkowymi metodami, które nie są istotne dla przechowywania). Zgodziliśmy się na drugą metodologię, ponieważ centralizuje ona logikę pisania z danych ogólnych. Mamy również przypadki obiektów implementujących złożoną logikę, które muszą przechowywać informacje, gdy logika jest w toku. W takich przypadkach obiekt fileformatwriter można przekazać i użyć jako delegata, wywołując na nim operacje magazynu. W przypadku pierwszego wzorca złożony obiekt logiczny zamiast tego zaakceptowałby surowy plik i zaimplementował samą logikę pisania. Pierwsza metoda ma jednak tę zaletę, że obiekt potrafi sam pisać i czytać z dowolnego zawierającego go pliku, co również może być wygodne. Chciałbym poznać Twoją opinię przed rozpoczęciem dość złożonej refaktoryzacji.


title: Czy lepiej załadować klasę metodami, czy rozszerzyć funkcjonalność składową w lokalnej podklasie?

text: Który ci się bardziej podoba? Klasa #1: public class SearchClass { public SearchClass (string ProgramName) { /* Przeszukuje obiekty LocalFile, obsługuje wyjątki i umieszcza wyniki w m_Results. */ } Data Godzina Czas wykonania; bool OperacjaSukces; Lista chroniona<PlikLokalny> m_Results; public ReadOnlyCollection<LocalFile> Results { get { return new ReadOnlyCollection<LocalFile>(m_Results); } } #region Filtry wyników public DateTime OldestFileModified { get { /* Robi to, co mówi. */ } } public ReadOnlyCollection<LocalFile> ResultsWithoutProcessFiles() { return new ReadOnlyCollection<LocalFile> ((od x w m_Results gdzie x.FileTypeID != FileTypeIDs.ProcessFile select x).ToList()); } #endregion } Lub class #2: public class SearchClass { public SearchClass (string ProgramName) { /* Przeszukuje obiekty LocalFile, obsługuje wyjątki i umieszcza wyniki w m_Results. */ } Data Godzina Czas wykonania; bool OperacjaSukces; Lista chroniona<PlikLokalny> m_Results; public ReadOnlyCollection<LocalFile> Results { get { return new ReadOnlyCollection<LocalFile>(m_Results); } } public class SearchResults : ReadOnlyCollection<LocalFile> { public SearchResults(IList<LocalFile> iList) : base(iList) { } #region Filtry wyników public DateTime OldestFileModified { get { /* Robi to, co mówi. */ } } public ReadOnlyCollection<LocalFile> ResultsWithoutProcessFiles() { return new ReadOnlyCollection<LocalFile> ((od xw tym gdzie x.FileTypeID != FileTypeIDs.ProcessFile select x).ToList()); } #endregion } } ... z sugestią, że OperationSuccessful towarzyszy szereg bardziej interesujących właściwości dotyczących przebiegu operacji, a OldestFileModified i ResultsWithoutProcessFiles() mają również kilka innych rodzeństwa w sekcji Filtry wyników.


title: co programista powinien wiedzieć/adresować, aby tworzyć komercyjne aplikacje na Androida?

text: Rozwój Androida i urządzeń mobilnych to ekscytujący obszar rozwoju. Ponieważ jest to nowa dyscyplina, czego można by oczekiwać od programisty Androida, który zbuduje komercyjnie solidne aplikacje pod względem umiejętności? Problemem, który ja i, jak sądzę, wielu innych „noobów” w tej technologii chciałoby się poznać, są obszary umiejętności technicznych i przejścia do wymaganych zaawansowanych tematów, które wykraczają poza same podstawy dostarczane przez Google. Jest wiele informacji, które są całkiem przydatne, ale nie są zorganizowane w kategorie dyscypliny ani porządku. **Aktualizacja** : spójrz na to w ten sposób. Jeśli jesteś starszym programistą i chciałbyś, aby kolega współpracował z Androidem w konkretnym projekcie (według własnego uznania w przypadku tego pytania), co byś zrobił?


title: Jak można zintegrować CAPTCHA ze społecznością?

text: Planuję na tworzenie **funkcji prostej dyskusji** dla struktury sieci web, którą tworzę. Powinno: * zezwalać na anonimowe publikowanie * blokować boty spamujące Oczywistą odpowiedzią jest użycie ogólnej wtyczki " **captcha** ", jednak myślę, że są tutaj **możliwości twórcze**, które chciałbym zbadać, m.in. pytania typu: * (prosta matematyka) co to jest cztery + trzy? **___** * (popkultura) kto śpiewa jak dziewica? **___** * (historia) nazwisko pierwszego prezydenta USA: **___ __** * (zdjęcia) [zdjęcie Obamy], kto to jest?: **___ ___** * (kontekstowo) jaki był rok założył nasze stowarzyszenie? **___ __** * (firma) nazwisko naszego dyrektora personalnego: **___ ___** * (aktualne wydarzenia) kraj, który obalił Muburaka: **___** Captcha faktycznie mogła być używana do **uczenia ludzi o społeczności** , informacje, które musieli wyszukać itp. Mogą też być **zbierane od użytkowników** społeczności, a te, które zostały zatwierdzone i wykorzystane, dawały im punkty reputacji. **Jak najlepiej zaprojektować CAPTCHA tak, aby nie tylko blokowała spamerów, ale także pomagała odzwierciedlać wiedzę społeczności?**


title: Zrobiłem gadżet okienny dla lokalnej firmy tramwajowej bez prośby. Co teraz?

text: Jestem zbyt leniwy, żeby patrzeć na pdf/tablicę, kiedy jest następny tramwaj, więc zrobiłem widżet w systemie Windows, który zawsze mówi mi, kiedy jest następny. Możesz dodawać, edytować i usuwać tramwaje do oglądania. Nie pracuję dla tej firmy, ale starałem się, aby było to jak najbardziej profesjonalne, a nawet wrzuciłem logo firmy do widgetu. Wierzę, że inne osoby również mogłyby z tego skorzystać i chciałbym to wysłać do firmy. Jak najlepiej to wysłać? Czy powinienem wysłać zdjęcia, film wyjaśniający widżet, sam widżet? Nie sądzę, żeby mi za to zapłacili, ani tego nie oczekuję, ale z chęcią zrobię tam staż, jeśli będzie wolne miejsce. Mogłem zobaczyć, jak opracowuję aplikację na iPhone'a/Androida dla firmy, widząc, że jedyną rzeczą, jaką robi ta aplikacja, jest sprzedaż biletów i jestem pewien, że inni ludzie chcieliby zobaczyć na swoim telefonie, kiedy odjeżdża następny pociąg. Nawet jeśli nie mają dostępnego stażu, nadal uważam, że jest całkiem fajnie, jeśli udostępnili go na swojej stronie internetowej i jakoś dostałem za to kredyty. Myślę, że to całkiem fajna rzecz mieć w CV. Ale nie byłbym zainteresowany, gdyby wydali to po prostu bez żadnych napisów. Co myślicie? Nawiasem mówiąc, dostępnych jest tylko kilka pociągów i stacji, ponieważ nie mam ich bazy danych, a teraz muszę ręcznie wprowadzić rozkład jazdy. Ale jest to bardzo łatwe do dodania/zmiany, gdy już to zapewnią. PS: Widząc, że jest to porada zawodowa, ogólnie mówiąc, pytanie brzmi: jak wysłać oprogramowanie, które nie było wymagane, ale mogłoby być przydatne do firmy? PS2: Przykro mi, że nie mogłem wymyślić krótkiego, zwięzłego tytułu!


title: Utwórz kategorię Cel-C, aby kierować metodami w zależności od określonego typu

text: W przypadku jednego projektu musiałem znaleźć rozwiązanie, aby uniknąć takiego kodu: if ([self.desiredColor isEqualToString:@"Red"]) [self constructRedMenu]; else if ([self.desiredColor isEqualToString:@"Niebieski"]) [self constructBlueMenu]; Postanowiłem więc stworzyć kategorię NSObject. Kod open-source można znaleźć tutaj: https://github.com/JeanLebrument/NSObject-MethodCallDependingType Ale na iOS rozwijam się dopiero od kilku miesięcy i chciałbym zasięgnąć opinii bardziej doświadczonych programistów iOS. Czy istnieje jakiekolwiek ryzyko dla stabilności aplikacji korzystającej z tej kategorii? Wszelkie konstruktywne uwagi lub opinie są mile widziane! Edytuj : Zmień przykład użycia tej kategorii w tym poście i na GitHub.


title: Uwierzytelnianie internetowe Kerberos

text: Stworzyłem wewnętrzną, jednostronicową aplikację webową (unix, apache i postgresql) chronioną prostą stroną logowania. Obecnie użytkownicy mają własną rolę logowania z hasłem. To zaczyna być kłopotliwe z kilku powodów: 1. Użytkownicy mają wiele haseł (dla mojej aplikacji internetowej i Active Directory sieć firmowa to Windows). 2. Przechowywanie informacji o użytkowniku w dwóch różnych miejscach (chciałby scentralizować). Przyglądałem się Kerberos do rzeczy, skonfigurowałem KDC i mogę połączyć się z bazą danych przez uwierzytelnianie GSSAPI (tylko w wierszu poleceń). Z tego, co rozumiem, powinienem móc korzystać z własnego KDC, które będzie integrować się z Active Directory. Mój problem, nad którym obecnie pracuję, to uwierzytelnianie aplikacji internetowych za pośrednictwem protokołu Kerberos: Jeśli użytkownik jest w sieci — jak mogę uzyskać/zweryfikować dane uwierzytelniające protokołu Kerberos? Czy mogę przechowywać dane uwierzytelniające w pliku cookie? Czy muszę uciekać się do używania OAuth, Webauth lub czegoś podobnego? Aby wyjaśnić, co chcę zrobić, to: Jeśli użytkownik nie ma prawidłowych poświadczeń, daj mu stronę logowania, aby uzyskać poświadczenia (przez kinit, ale jak przez przeglądarkę?) i zwrócić prawidłowe poświadczenia. (jak mogę przechowywać poświadczenia w przeglądarce, czy mogę utworzyć plik cookie z poświadczeń Kerberos?). Wygooglowałem i przeczytałem kilka plików PDF i zasobów internetowych, ale niestety żaden z nich nie był w stanie go ogłupić na tyle, abym mógł dobrze zrozumieć, jak przeprowadzić uwierzytelnianie sieciowe Kerberos. Jeśli nie zauważyłeś, jestem zdezorientowany, jak wszystko poskładać i doceniłbym koncepcyjny przegląd tego, jak wszystko do siebie pasuje.


title: Czy świeżo upieczeni absolwenci powinni dołączać do startupów z myślą o przyszłości?

text: W przyszłym roku skończę szkołę, a jazda na kampusie zapewniła mi kilka miejsc pracy w tak zwanych „dużych” firmach. Ale niedawno trafiłam do startupu, bo bardzo podobały mi się ich projekty i obecnie pracuję z nimi jako stażystka (choć pracuję z domu, utrzymując tam kontakt z moim mentorem). Podoba mi się sposób, w jaki pracują i oferują mi stanowisko inżyniera oprogramowania z niezłym pakietem wynagrodzenia. Ale pytanie brzmi, czy jeśli dołączę do tego startupu jako moja pierwsza praca, czy powinienem zdecydować się na zmianę, zostanę zaakceptowany w którejkolwiek z „dużych” firm? Jestem pewien, że wielu z Was musiało mieć do czynienia z taką sytuacją zarówno z perspektywy osoby poszukującej pracy, jak i pracodawcy.


title: Jak nauka assemblera pomaga w programowaniu?

text: Programuję w językach wyższego poziomu (Python, C#, VBA, VB.NET) od około 10 lat i zupełnie nie rozumiem, co się dzieje "pod maską". Zastanawiam się, jakie są korzyści z nauki asemblera i jak to pomoże mi jako programiście? Czy możesz podać mi zasób, który pokaże mi dokładnie związek między tym, co piszę w kodzie wyższego poziomu, a tym, co dzieje się w asemblerze?


title: Czy jest jakaś korzyść z uczenia się kodu maszynowego?

text: Pracuję głównie w Pythonie i Ruby, ale ostatnio postanowiłem nauczyć się trochę C, więc lepiej wyczuwam, jak _właściwie_ działa komputer. Zastanawiałem się, czy można pójść o krok dalej. Czy ktoś uczy się już kodu maszynowego (w jakimkolwiek C jest skompilowany)? Czy skorzystałbym na poświęceniu trochę czasu na naukę?


title: Freelancer.com — masz jakieś opinie?

text: Czy ktoś kiedykolwiek próbował Freelancer.com (dawniej GetAFreelancer.com)? Czy ktoś ma jakieś opinie/opinie na stronie? Chciałbym rozpocząć kilka projektów jako freelancer, ale naprawdę chciałbym uzyskać kilka opinii na stronie, aby zacząć.


title: Jaki jest dobry sposób na przedstawienie (programowo) wykresów/sieci?

text: Stworzyłem więc ten program zajmujący się miastami i łączącymi je drogami i zastanawiam się, czy ktoś mógłby wskazać mi sposób na graficzne przedstawienie tej „sieci” (w 3 lub 2D). Może to być albo określony, przyjazny dla programowania format pliku (który mógłbym łatwo wygenerować programowo), albo interfejs API lub biblioteka określonego języka dla takiej reprezentacji. Moja obecna praca jest w Javie, ale jeśli jest rozwiązanie w innym języku, to nie jest problem.


title: Dobry projekt dla klasy z podobnymi konstruktorami

text: Czytałem to pytanie i pomyślałem, że poczyniłem dobre uwagi, ale większość rozwiązań polegała na zmianie nazwy jednej z metod. Dokonuję refaktoryzacji źle napisanego kodu i spotkałem się z taką sytuacją: public class Entity { public Entity(String uniqueIdentifier, boolean isSerialNumber) { if (isSerialNumber) { this.serialNumber = uniqueIdentifier; //Wyszukaj inne dane } else { this.primaryKey = uniqueIdentifier; // Wyszukaj inne dane za pomocą innego zapytania } } } Oczywistą wadą projektu jest to, że ktoś potrzebował dwóch różnych sposobów stworzenia obiektu, ale nie mógł przeciążyć konstruktora, ponieważ oba identyfikatory były tego samego typu (`String`). W ten sposób dodali flagę, aby odróżnić. **Więc moje pytanie brzmi:** kiedy pojawia się taka sytuacja, jakie są dobre projekty do rozróżnienia między tymi dwoma sposobami tworzenia instancji obiektu? **Moje pierwsze przemyślenia** 1. Możesz stworzyć dwie różne metody statyczne, aby stworzyć swój obiekt. Nazwy metod mogą być różne. Jest to słabe, ponieważ metody statyczne nie są dziedziczone. 2. Możesz tworzyć różne obiekty, aby wymusić różne typy (np. utworzyć klasę `PrimaryKey` i `SerialNumber`). Podoba mi się to, ponieważ wydaje się, że jest to lepszy projekt, ale jest to również trudne do refaktoryzacji, jeśli „numer seryjny” jest „ciągiem” wszędzie indziej.


title: Czy ktoś może polecić dobry zasób do znalezienia szkolenia SQL Server?

text: Szkolenie na miejscu lub poza nim (bez szkolenia internetowego). Googlowałem, ale znalazłem tylko kilka firm. Byłoby miło znaleźć coś, co oferuje recenzje różnych firm oferujących szkolenia... Powiązane z Czy ktoś może polecić dobrą firmę, która prowadzi szkolenia dotyczące SQL Server?


title: Jak uniknąć ogólnych nazw klas abstrakcyjnych?

text: Ogólnie rzecz biorąc, dobrze jest unikać słów takich jak „obsługa” lub „proces” jako części nazw procedur i nazw klas, chyba że masz do czynienia z (np.) uchwytami plików lub (np.) procesami uniksowymi. Jednak klasy abstrakcyjne często tak naprawdę nie wiedzą, co zrobią z czymś poza, powiedzmy, przetworzeniem tego. W mojej obecnej sytuacji mam "EmailProcessor", który loguje się do skrzynki odbiorczej użytkownika i przetwarza z niej wiadomości. Nie jest dla mnie jasne, jak nadać temu dokładniejszą nazwę, chociaż zauważyłem, że pojawia się następująca kwestia stylu: * lepiej traktować klasy pochodne jako klientów i nazwać klasę bazową według części implementowanej przez nią funkcjonalności? Nadaje mu więcej znaczenia, ale narusza is-a. Np. EmailAcquirer byłaby rozsądną nazwą, ponieważ jest pozyskiwana dla klasy pochodnej, ale klasa pochodna nie będzie pozyskiwać dla nikogo. * Lub po prostu bardzo niejasna nazwa, ponieważ kto wie, co zrobią klasy pochodne. Jednak „Procesor” jest nadal zbyt ogólny, ponieważ wykonuje wiele istotnych operacji, takich jak logowanie i używanie IMAP. Jakieś wyjście z tego dylematu? Problem jest bardziej widoczny w przypadku metod abstrakcyjnych, w których tak naprawdę nie można odpowiedzieć na pytanie „co to robi?” ponieważ odpowiedź brzmi po prostu „co klient chce”.


title: Gdzie szukać ambitnej pracy w miłej atmosferze?

text: Jestem programistą w jednej z największych firm technologicznych. Lubię tę pracę z wielu powodów: * wykonuję ciekawą pracę nad fajnym produktem * rozwiązuję trudne problemy i wykorzystuję wiele umiejętności na wysokim poziomie (ilościowe, kreatywne, pisania, prezentowania) * dobrze się opłaca Problem w tym, że czuję Potrzebuję bardziej zrelaksowanej atmosfery (krótsze godziny, mniejsza presja na wydajność i większa elastyczność), aby zwolnić czas na inne zajęcia i zmniejszyć stres. Idealna byłaby praca, która trwa około 30-35 godzin tygodniowo, gdzie istnieje elastyczność, aby pracować mniej więcej w danym tygodniu. **Czy ktoś może zasugerować, gdzie szukać takiej pracy, w której nie musiałbym poświęcać zbyt wiele z powyższych punktów?** (Oczywiście musiałbym poświęcić wynagrodzenie.) Mój pracodawca generalnie nie oferuje pracy w niepełnym wymiarze godzin zatrudnienie. Najbliżej przychodzi mi do głowy, kiedy odbywałem letnie praktyki na wydziale CS mojej uczelni. Praca była bardzo wymagająca intelektualnie, ale jeśli musiałam wrócić do domu kilka godzin wcześniej lub uzyskać elastyczność w terminie, nikt nie mrugnął okiem. Chciałbym jednak dowiedzieć się, czy istnieją alternatywy dla akademii, ponieważ z tego, co widzę, zarobki są gigantycznym spadkiem w stosunku do tego, co obecnie zarabiam. Wcześniej pracowałem jako freelancer, ale lubię to jako pracownik dużej firmy, załatwiając wiele rzeczy (np. benefity i gwarantowane stabilne zatrudnienie).


title: Jaki jest najlepszy język programowania do pomiaru czasu działania krypto?

text: Próbuję zmierzyć czas działania innego algorytmu kryptograficznego. np. ile czasu zajmuje zaszyfrowanie/odszyfrowanie bloku zwykłego tekstu. Czy mogę zapytać, czy `C` z `OpenSSL` jest najlepszym PL do tego?


title: Jak powinienem zachowywać się jako programista w projekcie zmierzającym do niepowodzenia?

text: Jestem programistą w 5-osobowym zespole i wierzę, że nasz projekt zmierza ku katastrofie. Za chwilę opiszę dlaczego, ale moje pytanie brzmi: jak mam się zachowywać? Termin upływa za 1,5 miesiąca i czuję, że bez względu na to, co zrobimy, ten projekt się nie powiedzie. Uważam, że powinniśmy po prostu zakończyć projekt i przestać marnować czas, ale politycznie uważam, że nasz menedżer nie jest w stanie tego zrobić. Co powinienem zrobić w takim przypadku? Czy powinienem włożyć dodatkowy wysiłek, czy po prostu spokojnie? A co mam powiedzieć kierownikowi? Powody, dla których ten projekt zmierza do niepowodzenia: * Wraz ze zbliżającym się terminem realizacji wiele niezbędnych funkcji nie zostało ukończonych * Aplikacja jest niestabilna i bardzo trudna w użyciu * System jest bardzo zawiły, kod bardzo trudny do zrozumienia, bardzo trudny do zmiany - Model danych jest zbyt napędzany przez złożoną relacyjną bazę danych (100+ tabel) * Niejasne przywództwo; menedżer reaguje na nowe informacje z dużymi zmianami * Prawie brak testów automatycznych lub testów jednostkowych * W dużej mierze zależy od innych systemów, ale jeszcze nie ma testów integracyjnych W rzeczywistości odziedziczyliśmy ten projekt (wraz z bałaganem) około 1-2 miesięcy temu od innego zespołu deweloperskiego pod tym samym menedżerem, który pracował nad nim od kilku miesięcy.


title: Jaka jest formalna nazwa tego diagramu?

text: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/FmuRO.gif) Chciałbym też wiedzieć, jak je narysować.


title: Wybór typu zmiennych indeksowych

text: Używamy typu Integer reprezentującego zmienne indeksowe przez większość czasu. Ale w niektórych sytuacjach jesteśmy zmuszeni wybrać std::vector<int> vec; .... for(int i = 0; i < vec.size(); ++i) .... Spowoduje to, że kompilator wyświetli ostrzeżenie, że mieszane użycie zmiennych ze znakiem/bez znaku. jeśli ustawię zmienną indeks jako `for(size_t i = 0; i <vec.size();i++)` (lub `unsigned int` ) rozwiąże problemy. Jeśli chodzi o użycie typów okien, większość interfejsów API systemu Windows ma do czynienia z DWORD (który typedef-ed jako unsigned long). Więc kiedy użyję podobnej iteracji, ponownie spowoduje to samo ostrzeżenie. Teraz, jeśli przepiszę to jako DWORD dwCount; .... for(DWORD i = 0; i < dwCount; ++i) .... Uważam to za nieco dziwne. To może być problem z percepcją. Zgadzam się, że powinniśmy używać tego samego typu zmiennej indeksu, aby uniknąć problemów z zakresem, które mogą wystąpić ze zmiennymi indeksu. Na przykład jeśli używamy _int64 i64Count; // .... for(_int64 i = 0; i < i64Count; ++i) .... Ale w przypadku DWORD lub liczb całkowitych bez znaku, czy są jakieś problemy z przepisaniem go na for(int i = 0 ;(size_t)i <vec.size();++i) Jak większość ludzi pracuje z podobnymi problemami?


title: Wiele połączeń lub proste czytelne wywołania bazy danych

text: Ciekawe, co myślą o tym inni programiści. Natknąłem się na dość paskudne złączenia sql, jak wszyscy, jestem tego pewien. Wolałbym wykonywać więcej wywołań baz danych ze względu na czytelność i prostotę, niż mieć duże instrukcje SQL do utrzymania; około 3 - 4 sprzężenia. Jeśli chodzi o argument wydajności, zrezygnuję z trochę wydajności dla czytelności. Na przykład: wykonaj pierwsze wywołanie, przefiltruj dane, a następnie przeprowadź zapytanie do drugiej tabeli itd. Jaka jest twoja preferencja?


title: Czy boli uczyć się kawałków wielu języków programowania?

text: Karierę programistyczną rozpocząłem w BASIC w 9 klasie. Nauczyłem się trochę BASICa, pisząc proste programy do dodawania, odejmowania i drukowania. Potem poszedłem na uniwersytet i studiowałem informatykę komputerową i inżynierię systemów. Na pierwszym roku uczono mnie C i mam nad nim dobrą kontrolę. Następnie nauczyłem się C++ na drugim roku. To po prostu nauczyło mnie trochę wiedzy o OOP. Teraz zajmuję się PHP (wraz z HTML). Nie opanowałem C++, BASICa ani PHP. Planuję teraz przejść na rozwój mobilny. Ale czuję, że nie omówiłem wszystkiego w językach, których się nauczyłem. Czy to naprawdę ma znaczenie?


title: Jaki jest odpowiednik samouczka Rails 3 Michaela Hartla w systemie iOS?

text: Jestem początkującym programistą i czytałem samouczek Ruby on Rails 3 Michaela Hartla. Bardzo podoba mi się ta książka. Łatwo to śledzić i nie zakładam, że wiem zbyt wiele. Chciałbym również nauczyć się kodować aplikacje na iOS (zarówno na iPhone'a, jak i iPada) i będę wdzięczny za wszelkie rekomendacje dotyczące książek lub kursów, które mogą mi w tym pomóc. Z góry dziękuję za pomoc! Eddie


title: Wykorzystanie urządzeń prywatnych vs firmowych do rozwoju w pracy

text: Jestem zatrudniony w firmie zajmującej się tworzeniem aplikacji mobilnych od 4 miesięcy jako programista Android. To moja pierwsza praca jako programista. Obecnie do programowania używam moich dwóch prywatnych urządzeń z Androidem. Czy to powszechna praktyka, że programiści używają własnych urządzeń sprzętowych do programowania w firmach zajmujących się programowaniem mobilnym, czy też powinienem prosić o urządzenia firmowe?


title: Wniesienie swojej poprzedniej własności intelektualnej do pracodawcy

text: Załóżmy, że w wolnym czasie rozwijałem bibliotekę X przed podpisaniem umowy lub zatrudnieniem w firmie A. Następnie podpisuję umowę z firmą A i rozpoczynam pracę. Okazuje się, że biblioteka X będzie niezwykle użyteczna i zaoszczędzi firmie mnóstwo czasu i pieniędzy. Jaka jest standardowa praktyka branżowa w tym obszarze, jeśli chodzi o wprowadzanie tego kodeksu do firmy? Czy byłoby możliwe licencjonowanie biblioteki X firmie A?


title: Czy wiadomość e-mail może istnieć w wielu skrzynkach wiadomości?

text: Jestem w trakcie pisania stosu serwera pocztowego i jest to dość krytyczna decyzja projektowa dotycząca tego, czy unikalna wiadomość może pojawić się w więcej niż jednym polu wiadomości. Proste przypadki są łatwe do podjęcia decyzji (np. wiadomość oczywiście nie może istnieć w skrzynce "Odebrane" i "Kosz"), ale bardziej subtelne sytuacje, takie jak przebywanie w skrzynkach "Praca" i "Kosz", jest trochę trudniejsze. A więc: * Czy łatwiej jest założyć, że klienci nie zauważą, że unikatowa wiadomość pojawi się w więcej niż jednej skrzynce pocztowej, i wpadną w szał. * Lub użyj tagowania i umieść wiadomość tylko w głównych skrzynkach pocztowych i użyj tagowania do identyfikacji innych atrybutów. W klientach, które nie obsługują tagów (całkiem sporo), fałszuj unikalność wiadomości (nie jest to trudne po stronie serwera) i wyświetlaj tagi tak, jakbyśmy byli ich własną skrzynką pocztową * A może to grzech kardynalny mieć wiadomość w wielu skrzynki pocztowe w pierwszej kolejności. W szczególności szukam możliwie najszerszego rozwiązania przyjaznego dla klienta, ponieważ tworzę serwer niezależny od klienta. Unikalna wiadomość = Unikalny identyfikator na serwerze (zwykle alfanumeryczny), wszystkie inne nagłówki i komponenty treści mogą przez dziwny zbieg okoliczności lub przez dwukrotne naciśnięcie wyślij w krótkim odstępie czasu zostać zduplikowane. Gdybym miał sfałszować identyfikator, byłby to tylko kontakt z klientem, zostałby ponownie połączony z oryginałem na serwerze w celu dokonania jakichkolwiek zmian. **Edytowane dla jasności**


title: Strukturyzacja pliku wejściowego

text: Jestem w trakcie konstruowania małego programu do przeprowadzenia analizy hydraulicznej przepływu rur. Tak jak to sobie wyobrażam, program odczyta plik wejściowy, zapamiętuje w odpowiedni sposób parametry wejściowe, operuje na nich i na koniec wyprowadza wyniki. Zmagam się z tym, jak uporządkować plik wejściowy w rozsądny sposób; to znaczy w taki sposób, że człowiek może go łatwo napisać, a maszyna może go łatwo przeanalizować. Przykładowy plik wejściowy udostępniony mi dla podobnego programu to po prostu strumień liczb oddzielonych przecinkami, które same w sobie nie mają większego sensu, więc takiego scenariusza staram się uniknąć. Chociaż podaję szczegóły mojego konkretnego problemu, bardziej interesują mnie ogólne strategie strukturyzacji plików wejściowych. Czy strumień wartości oddzielonych przecinkami jest moim najlepszym wyborem? Czy lepiej byłoby użyć jakiejś struktury klucz:wartość? Niewiele o tym wiem, więc jakakolwiek pomoc prawdopodobnie postawi mnie na lepszej drodze niż teraz.


title: Czy należy komentować inaczej w językach funkcjonalnych?

text: Dopiero zaczynam pracę z programowaniem funkcjonalnym i zastanawiam się nad poprawnym sposobem komentowania mojego kodu. Komentowanie krótkiej funkcji wydaje się trochę zbędne, ponieważ imiona i podpisy powinny już powiedzieć wszystko, co musisz wiedzieć. Komentowanie większych funkcji również wydaje się nieco zbędne, ponieważ generalnie składają się one z mniejszych funkcji samoopisowych. Jaki jest prawidłowy sposób komentowania programu funkcjonalnego? Czy powinienem zastosować to samo podejście, co w programowaniu iteracyjnym?


title: Dlaczego usuwanie refaktoryzacji metod/pól/funkcji nie istnieje w środowisku Eclipse?

text: Operacja w interfejsie jest przestarzała, więc postanowiłem ją usunąć. Wydaje się, że nie ma automatycznego wsparcia dla takiego „refaktoryzacji” w Eclipse. Dla mnie jest to operacja refaktoryzacji, ponieważ zachowanie kodu zostanie zachowane, ponieważ nikt (testy, interfejs klienta) nie zauważy, że operacja została usunięta. W Eclipse, w kodzie Java, na metodzie w interfejsie mam następujące opcje: zmień nazwę, przenieś, zmień sygnaturę metody, inline, wyodrębnij interfejs, wyodrębnij superklasę, użyj supertypu, jeśli to możliwe, podciągnij, wciśnij, wprowadź parametr obiektu, wprowadzić pośredniość, wygenerować zadeklarowany typ. Czy istnieje powód, dla którego nie istnieje refaktoryzacja metody/pola/funkcji usuwania?


title: Jak skonfigurować proste ustawienia AI gry za pomocą jtable

text: Zajmuję się tworzeniem aplikacji, która posiada metody tego rodzaju: attackIfIsFar(); chrońJeżeliJestBlisko(); pomocPo śmierci(); helpBeforeAttackOf(); itd. Inicjalizacja mojej aplikacji dla n graczy jest podobna do player1.attackIfIsFar(player2); player2.protectIfIsNear(player4); player3.helpAfterDeadOf(gracz1); player4.helpBeforeAttackOf(player3); itp. Nie wiem jak skonfigurować jtable, który pozwoli mi ustawić odpowiednik tego bloku kodu Innymi słowy potrzebuję po prostu sposobu na utworzenie jtable z 3 kolumnami i n wierszami, w których mogę ustawić kolumna 1 i 3, gracz, a w środkowej kolumnie jedna z dostępnych metod, które każdy gracz w kolumnie 1 musi zastosować wobec każdego gracza w kolumnie 3


title: W którym momencie powinieneś przełączyć się na kompilację wydania?

text: Jedną z praktyk określonych w Continuous Delivery Jez Humble jest to, że należy zbudować jeden pakiet, a następnie wydać go w każdym środowisku, w którym wdrażasz, tak aby wdrożenie i same artefakty były wielokrotnie testowane przed przejściem do produkcji. W pełni popieram ten pomysł. Z drugiej strony kompilacje w trybie debugowania, które dają ślady stosu z numerami wierszy, są niezwykle przydatne w środowiskach testowych, podobnie jak możliwość zdalnego debugowania. Ale chcesz wysłać kompilację wydania do produkcji. Tak więc, w przypadku osób przestrzegających pierwszej zasady, w którym momencie przechodzisz z debugowania do kompilacji wydań? Czy przed pierwszym wdrożeniem w środowisku testowym warto ponieść koszt utraty trybu debugowania, aby zapewnić wczesne testowanie rzeczywistego kandydata do wydania? A może budujesz ponownie w pewnym momencie procesu promocji, myśląc, że zaufasz procesowi budowania, a nie oprogramowaniu? A może po prostu wkręcasz to wszystko i wdrażasz wersje debugowania do produkcji? Uwaga: wiem, że tak naprawdę nie dotyczy to języków interpretowanych, ponieważ zwykle można przełączyć przełącznik w konfiguracji, zamiast robić to w czasie kompilacji.


title: Aplikacja komputerowa oparta na Mapach Google

text: Chcę zbudować aplikację komputerową z osadzonymi mapami Google. Ta aplikacja powinna mieć wątek do odczytywania danych współrzędnych online mikrofonu USB do użycia. Ta aplikacja przeniesie znaczniki mapy Google do ich nowych lokalizacji na podstawie danych pobranych z połączeń online przy każdym odświeżeniu. O ile wiem, gmaps ma API javascript, więc pierwszym pomysłem w moim umyśle było osadzenie tego widoku mapy w aplecie java. Więc aplikacja będzie działać w przeglądarce. Nie jestem pewien, czy to zadziała. Czy macie jakieś pojęcie o tym lub o innych radach, które możecie mieć?


title: Stowarzyszenia modelarskie

text: Pracuję nad fazą projektowania projektu składania papieru. Mam w tym kilka pytań. Część opisu problemu mówi: „Sieć internetowa może zawierać jedną lub więcej wstążek. Może również zawierać grupę wstążek złożonych razem”. Jak modelujesz to stowarzyszenie? Znalazłem dwa rozwiązania i) Utrzymuj dwie asocjacje, jedną między siecią a wstążką, a drugą między wstążką a klasą Group. W ten sposób sieć zawiera tylko wstążki, a podczas przetwarzania wstążek trzeba będzie sprawdzić, czy jest częścią grupy. Zwróć uwagę, że zachowanie wstążki ulegnie zmianie, jeśli jest ona częścią grupy ii) Wprowadź nową klasę o nazwie Childelemnt i skojarz ją z siecią. Zarówno Wstążka, jak i Grupa będą współdzielić interfejs elementu podrzędnego. Jak myślisz, który z nich jest lepszy? Jeśli masz inne rozwiązanie, daj mi znać. Z góry dziękuję wszystkim, Pradeep


title: Korzystanie z metody SetProperty, aby zapobiec przypadkowym zmianom właściwości

text: Czy dobrą/złą praktyką jest wykonanie następujących czynności: public class MyClass { public MyType MyProperty { get; zestaw prywatny; } public void SetMyProperty(MyType myProperty) { MyProperty = myProperty; } } Moim zamiarem jest zapobieganie przypadkowej zmianie `MyProperty` poza klasą. W razie potrzeby można to jednak zmienić. Ponadto, jeśli `MyType` jest typem referencyjnym, wówczas `private set` zapobiegnie, na przykład: instanceOfMyClass.MyProperty.SomeField = 2; Innymi słowy, czy „MyProperty” i wszyscy jej członkowie będą tylko do odczytu, czy tylko odwołanie do „MyProperty”? Przepraszam, jeśli wydaje się to nieinteligentne pytanie; Obawiam się, że jestem początkujący.


title: Idealna sekwencja do nauki języka programowania?

text: Co myślisz? Jaka jest idealna sekwencja uczenia się języka programowania, która obejmie większość najczęściej używanych obecnie języków i paradygmatów, a także pomoże zrozumieć wspólne podstawy, pomysły i praktyki programowania? Możesz nawet zaproponować sekwencję uczenia się dla paradygmatów, a nie języków. Uwaga : To jest port pytania, które zadałem w stackoverflow i zostało zamknięte z powodu subiektywnego i kłótliwego.


title: Jak IntelliJ jest lepszy niż Eclipse?

text: Wiem, że były pytania typu Jaki jest twój ulubiony edytor/IDE?, ale żadne z nich nie odpowiedziało na to pytanie: Po co wydawać pieniądze na **IntelliJ**, gdy **Eclipse** jest bezpłatne? Osobiście jestem wielkim fanem IntelliJ, ale tak naprawdę nie próbowałem Eclipse. Użyłem IntelliJ do projektów, które były Java, JSP, HTML/CSS, Javascript, PHP i Actionscript, a najnowsza wersja, 9, była doskonała dla nich wszystkich. Wielu współpracowników w przeszłości mówiło mi, że uważają, że Eclipse jest „w zasadzie taki sam” jak IntelliJ, ale aby temu zaprzeczyć, od czasu do czasu siedziałem za programistą korzystającym z Eclipse, który wydawał się porównywalnie nieefektywny (aby osiągnąć mniej więcej to samo zadanie) i nie doświadczyłem tego z IntelliJ. Mogą być na równi **funkcja po funkcji**, ale funkcje mogą zostać zrujnowane przez słabe wrażenia użytkownika i zastanawiam się, czy to możliwe, że IntelliJ jest łatwiejszy do zdobycia i odkrywania funkcji oszczędzających czas. Użytkownicy, którzy już znają Eclipse, oprócz rzeczywistych kosztów IntelliJ, dochodzą również koszty czasu spędzonego na nauce nowej aplikacji. Eclipse ma wielu użytkowników, którzy po prostu nie chcą wydawać 250 USD na IDE. Jeśli IntelliJ naprawdę mógłby pomóc mojemu zespołowi w zwiększeniu produktywności, jak mógłbym go im sprzedać? Dla tych użytkowników, którzy wypróbowali oba, byłbym bardzo zainteresowany konkretnymi zaletami lub wadami.


title: Co się stało ze współbieżnym C?

text: Niedawno sprawdziłem fantastyczną książkę z mojej biblioteki uniwersyteckiej. Jest trochę stary, jak na rok 1989, ale język, który opisuje, brzmi całkiem ładnie. I nawet jeśli wkrótce nie będę go używał, chciałem dokładniej zbadać ich paradygmat. Więc spróbowałem wiki Concurrent c. nic. Naprawdę nie mogę znaleźć żadnych odniesień do tego w Internecie. wyszukiwanie „Concurrent c” w większości kieruje do tej jednej książki. (Przepełnienie stosu nie ma nawet jednego odniesienia.) Czy ktoś wie, gdzie mogę znaleźć historię tego języka programowania lub innych zasobów?


title: Jak nazywa się ten szczególny rodzaj nadinżynierii?

text: W obliczu (nawet małego) projektu, popadam w następującą złą praktykę. Myślę o strukturze problemu. Następnie tworzę kilka klas bazowych, czerpię z nich, a następnie czerpię z tych moich rzeczywistych klas użytecznych. Prawie nigdy nie mam szansy na napisanie kodu wewnątrz tych klas bazowych, są one po prostu zbyt szerokie dla konkretnego problemu, który rozwiązuję. Problem nie ogranicza się do dziedziczenia. Jeśli muszę zrobić coś bardzo prostego, tworzę klasę do tego, następnie klasę do przechowywania instancji "wykonawcy", a następnie Managera do ... wywoływania metod wewnątrz opakowania "wykonawcy". IMHO jest to inna forma, która bezpośrednio łamie YAGNI, ponieważ nie buduję niepotrzebnych funkcji dla użytkownika końcowego. Jaki termin najlepiej opisuje ten anty-ojciec? Jakieś wskazówki, jak zmienić proces projektowania, aby tego uniknąć?


title: Fabryka tablic obiektów w pytonie

text: Ok, tytuł może być trochę mylący. Mam klasę `Window`, która rysuje widżety wewnątrz siebie w konstruktorze. Wszystkie widżety są tego samego typu. Przekazuję więc listę słowników, która zawiera parametry dla każdego widżetu. Działa to całkiem ładnie, ale obawiam się, że interfejs do rozmówców jest zaciemniony. Oznacza to, że aby użyć `Window`, należy przestudiować klasę, skonstruować poprawną listę słowników, a następnie wywołać konstruktor z tylko jednym parametrem - widgets_params. Czy to dobry czy zły projekt? Jakie alternatywy zapewnia składnia Pythona?


title: Czy rozwój Clojure musi być open-source?

text: To pytanie można uogólnić na dowolny język, w którym rozwój języka jest potencjalnie open-source, ale najbardziej interesuje mnie Clojure. Jeśli Clojure (jako język) jest open-source, licencjonowane przez Publiczną Licencję Eclipse, która zgodnie z tym projektem pobocznym GitHub wymaga prac pochodnych w celu ujawnienia źródła, czy każda aplikacja napisana _w_ Clojure musi być rozpowszechniana ze źródłem? A może tylko projekty w języku pochodnym (np. Kontynuacja lub coś takiego) muszą ujawniać źródło? A może mam gdzieś tam wadliwe główne założenie?


title: Jaki jest zwykły lub akceptowany koszt umowy wsparcia dla oprogramowania niestandardowego?

text: Jaki jest standard branżowy lub ogólnie akceptowany koszt wsparcia i utrzymania oprogramowania w przypadku niestandardowego oprogramowania opartego na sieci Web? Czy jest to zwykle wyrażane jako % pierwotnego kosztu opracowania, a jeśli tak, jaka jest zwykła kwota %?


title: Od czego zacząć podczas samodzielnego tworzenia aplikacji internetowej

text: Przydzielono mi wewnętrzną aplikację internetową, która jest w zasadzie systemem zarządzania pracownikami i projektami. Jestem zdezorientowany co do tego, od czego naprawdę powinienem zacząć to zadanie (mam na myśli, że jestem swoim własnym kierownikiem ds. rozwoju i naprawdę nie mam doświadczenia w tworzeniu samego projektu) i mam nadzieję, że możecie podzielić się swoim doświadczenia, kiedy otrzymałeś zadanie/projekt do samodzielnego zbudowania. Dziękuję