title: Rich Domain Models — jak dokładnie pasuje zachowanie?

text: W debacie na temat modeli domeny Rich vs. Anemic Internet jest pełen porad filozoficznych, ale brakuje autorytatywnych przykładów. Celem tego pytania jest znalezienie ostatecznych wytycznych i konkretnych przykładów właściwych modeli projektowania opartego na domenie. (Idealnie w C#). Na przykład w świecie rzeczywistym ta implementacja DDD wydaje się być błędna: poniższe modele domeny WorkItem to nic innego jak torby właściwości, używane przez Entity Framework dla bazy danych opartej na kodzie. Według Fowlera jest anemiczny. Warstwa WorkItemService jest najwyraźniej powszechnym błędnym postrzeganiem usług domenowych; zawiera wszystkie zachowania / logikę biznesową dla WorkItem. Według Jemelyanova i innych jest to procedura proceduralna. (str. 6) Więc jeśli poniższe jest błędne, jak mogę to naprawić? Zachowanie, tj. _AddStatusUpdate_ lub _Checkout_ , powinno należeć do klasy WorkItem, prawda? Jakie zależności powinien mieć model WorkItem? ![tutaj podaj opis obrazu](http://i.stack.imgur.com/QKWNn.png) public class WorkItemService : IWorkItemService { private IUnitOfWorkFactory _unitOfWorkFactory; //używanie Unity do wstrzykiwania zależności public WorkItemService(IUnitOfWorkFactory unitOfWorkFactory) { _unitOfWorkFactory = unitOfWorkFactory; } public void AddStatusUpdate(int workItemId, int statusId) { using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork<IWorkItemUnitOfWork>()) { var workItemRepo = unitOfWork.WorkItemRepository; var workItemStatusRepo = unitOfWork.WorkItemStatusRepository; var workItem = workItemRepo.Read(wi => wi.Id == workItemId).FirstOrDefault(); if (workItem == null) throw new ArgumentException(string.Format(@"Podany identyfikator WorkItem '{0}' nie jest rozpoznawany", workItemId), "workItemId"); var status = workItemStatusRepo.Read(s => s.Id == statusId).FirstOrDefault(); if (status == null) wyrzuć nowy ArgumentException(string.Format(@"Podany identyfikator stanu '{0}' nie jest rozpoznawany", statusId), "statusId"); WorkItem.StatusHistory.Add(status); WorkItemRepo.Update(workItem); jednostkaPracy.Zapisz(); } } } (Ten przykład został uproszczony, aby był bardziej czytelny. Istnieją inne encje i na przykład AddStatusUpdate ma pewne dodatkowe zachowanie -- IRL faktycznie przyjmuje nazwę kategorii statusu, a jeśli ta kategoria nie istnieje, kategoria jest utworzony.) ## Update @AlexeyZimarev podał poprawną odpowiedź, idealne wideo na ten temat w C# autorstwa Jimmy'ego Bogarda, ale najwyraźniej zostało to przeniesione do komentarza poniżej, ponieważ nie zawierało wystarczającej ilości informacji poza łączem. Mam wstępny szkic moich notatek podsumowujących wideo w mojej odpowiedzi poniżej. Zachęcamy do komentowania odpowiedzi z ewentualnymi poprawkami. Film trwa godzinę, ale bardzo warto go obejrzeć.


title: Czy powinienem się martwić, że nie mogę szybko programować bez Google?

text: > **Możliwy duplikat:** > Google jest dobry czy zły dla programisty? Obecnie studiuję, aby zostać inżynierem oprogramowania, a jedną z głównych zasad, których nas uczono, jest to, jak uczyć się samodzielnie i jak przeszukiwać sieć, gdy mamy wątpliwości. Prowadzi to do proaktywnej postawy – kiedy czegoś potrzebuję, idę po to. Ostatnio zacząłem się zastanawiać, ile rozwoju byłbym w stanie zrobić bez dostępu do Internetu i odpowiedź trochę mnie wkurzyła. Znam koncepcję języków i jak ich używać, ale byłem zdumiony tym, jak „powolne” były rzeczy bez pomocy Google w rozwoju. Większość problemów, które mam, dotyczy określonej składni. Na przykład czytanie i zapisywanie do pliku w Javie. Robiłem to kilkanaście razy w życiu, ale za każdym razem, gdy muszę to zrobić, kończę w google „read file java” i odświeżam pamięć. Całkowicie rozumiem kod i w pełni rozumiem, co robi, ale jestem pewien, że bez Google zajęłoby mi kilka prób, aby kod był poprawny. Czy to normalne? Czy powinienem się martwić i próbować zmienić coś w swoim zachowaniu programistycznym?


title: Prywatne komentarze w git

text: Muszę dodać funkcję do kodu w dużym projekcie, a ze względu na złożoność bardzo pomocne jest dodawanie szczegółowych komentarzy do wielu wierszy, aby śledzić, co się dzieje. Jest to jednak tylko dla mojego zrozumienia i usunę komentarze przed wciśnięciem kodu. Problem polega jednak na tym, że jeśli robię prywatne zatwierdzenia podczas mojego rozwoju, kiedy naciskam na główny serwer, wydaje mi się, że git pokaże wiersze, które skomentowałem, a następnie odkomentowałem (ale nie zmodyfikowałem w inny sposób) jako zmodyfikowane przeze mnie, co "obwiniać" bardziej nieprzejrzyste. Przypuszczam, że jedynym sposobem, aby to zrobić czysto, jest posiadanie 2 prywatnych oddziałów, jednego do rozwoju i jednego do komentowania, czy ktoś może polecić lepszy sposób?


Którą książkę o zarządzaniu poleciłbyś przeczytać nowemu Team Liderowi?


title: Jaka jest korzyść z posiadania kodu źródłowego dla ICS?

text: Ludzie są tak szczęśliwi, że kod źródłowy Ice Cream Sandwich został udostępniony do synchronizacji. Dlaczego to jest fajne?


title: LL (∞) i lewostronna rekurencja

text: Chcę zrozumieć związek między gramatykami LL/LR a problemem lewostronnej rekurencji (na każde pytanie znam częściowo odpowiedź, ale zadaję je, ponieważ nic nie wiem, ponieważ jestem teraz trochę zdezorientowany i wolę pełne odpowiedzi) Jestem zadowolony z syntetycznych lub krótkich i bezpośrednich odpowiedzi (lub po prostu linków rozwiązujących je jednoznacznie): 1. Jakim rodzajem języka bezkontekstowego nie są języki LL(∞)? 2. LL(K) i LL(∞) mają problemy z lewostronną rekurencją? Czy tylko parsery LL(k)? 3. Parser LALR(1) ma problemy z rekurencją lewą lub prawą? Jakie problemy? 4. Tylko w zakresie porównania LL/LALR. Co jest lepsze, Bison (LALR(1)) czy Boost.Spirit (LL(∞))? (Załóżmy, że inne ich cechy są nieistotne w tym pytaniu) 5. Dlaczego GCC używa (ręcznie robionego) parsera LL(∞)? Tylko dla problemu "obsługi-błędu"?


title: Jaka jest definicja „Big Data”?

text: Czy istnieje? Wszystkie definicje, które mogę znaleźć, opisują rozmiar, złożoność / różnorodność lub prędkość danych. Definicja Wikipedii jest jedyną, jaką znalazłem z rzeczywistą liczbą > Rozmiary dużych zbiorów danych to stale zmieniający się cel, począwszy od 2012 r. od kilku > kilkunastu terabajtów do wielu petabajtów danych w jednym zestawie danych. Jest to jednak pozornie sprzeczne z definicją MIKE2.0, o której mowa w następnym akapicie, która wskazuje, że „duże” dane mogą być małe i że 100 000 czujników w samolocie tworzących tylko 3 GB danych można uznać za duże. IBM pomimo stwierdzenia, że: > Big data to coś więcej niż kwestia rozmiaru. podkreślają rozmiar w swojej definicji. O'Reilly również podkreślił „głośność, szybkość i różnorodność”. Choć dobrze wyjaśniona i bardziej dogłębnie, definicja wydaje się być ponownym haszowaniem innych - lub vice versa oczywiście. Myślę, że artykuł Computer Weekly _title_ dość dobrze podsumowuje szereg artykułów "Co to jest big data i jak można to wykorzystać do uzyskania przewagi konkurencyjnej". Ale ZDNet od 2012 roku wygrywa następującymi słowami: > „Big Data” to hasło, które wyrasta z niszy > wysokowydajnych komputerów na rynku IT... Jeśli przyjrzymy się prezentacjom > dziesięciu dostawców technologii, prawdopodobnie pojawi się około piętnastu różnych > definicji. Każda definicja oczywiście > wspiera zapotrzebowanie na produkty i usługi tego dostawcy. Wyobraź sobie, że. Zasadniczo „duże dane” to „duże” w pewien sposób kształt lub forma. Co to jest „duże”? Czy w chwili obecnej jest to wymierne? Jeśli „duży” jest niewymierny, czy istnieje definicja, która nie opiera się wyłącznie na ogólnikach?


title: wartości zwracane przez php

text: Mam aplikację codeigniter i w moim modelu zawsze zwracam true lub false dla wszystkich funkcji, a jeśli mam dane, które trzeba przekazać, ustawiam również właściwość, która zawiera moje dane. Jedynym problemem w moim kontrolerze jest to, że jeśli muszę wywołać 3 lub 4 metody w moim modelu, kod staje się naprawdę powtarzalny. If ( $this->my_model->functionA() ) { $localvar = $this->my_model->data(); } else { show_error("Błąd A"); } If ( $this->my_model->functionB() ) { $localvar = $this->my_model->data(); } else { show_error("Błąd B"); } If ( $this->my_model->functionC() ) { $localvar = $this->my_model->data(); } else { show_error("Błąd C"); } Zastanawiam się, czy zmienić logikę, aby funkcje nie zwracały true, ale zamiast tego zwracały dane ... czy to bardzo upraszcza? Myślę, że nadal potrzebowałbym kodu takiego: If (! $this->my_model->functionA() ) { show_error("Błąd A"); } else { $localvar = $this->my_model->data(); } Czy jest jakiś sposób na połączenie instrukcji przypisania $localvar z instrukcją if? Czy jest na to lepszy sposób?


title: Gdzie znajdę łamigłówki i wyzwania programistyczne?

text: Staram się znaleźć miejsca, w których mógłbym doskonalić swoje rzemiosło poza kontekstem szkoły czy pracy. Czy są dostępne miejsca w Internecie lub książki, w których mogę uzyskać dostęp do listy zagadek programistycznych lub wyzwań?


title: Zamieszanie związane z artykułem hacker-howto

text: Przejrzałem http://www.catb.org/esr/faqs/hacker-howto.html Co rozumiem z artykułu: 1. rozwinięcie postawy hakerskiej. 2. nauczyć się języka programowania (np. python) 3. rozwiązać ciekawe problemy Punkt 3) to miejsce, w którym utknąłem. Gdzie znajdę te interesujące problemy? Jasne, mogę wejść na UVA Online i inne strony, które mają dobry zestaw problemów programistycznych. Ale rozwiązywanie tych problemów lubię po prostu ćwiczenie, dzięki któremu mogę szlifować swoje umiejętności w Pythonie i nauczyć się, jak rozwiązać problem. Chcę zrobić coś prawdziwego/zabawnego problemów, których brakuje powyższym problemom programistycznym. Potrzebuję trochę wskazówek w tej sprawie.


title: Zalecenia dotyczące zabawnych ćwiczeń edukacyjnych

text: > **Możliwe zduplikowanie:** > Gdzie mogę znaleźć łamigłówki i wyzwania programistyczne? Ostatnio w naszym miejscu pracy graliśmy w Design Pattern Poker. Jest to zabawne i naprawdę pomaga uczestnikom zrozumieć wzorce projektowe i wymyślić użyteczny sposób ich zastosowania. Czy ktoś może polecić inne podobne, zabawne gry, które pomogą nam poprawić nasze umiejętności programistyczne?


title: Dobry zbiór krótkich próbek kodu w różnych językach do rozwiązywania problemów programistycznych?

text: Jestem zainteresowany nauką nowych języków programowania i szukaniem zbioru krótkich rozwiązań problemów programistycznych dostarczonych w różnych językach. Optymalny format to: > **Opis problemu** > Język A: .... (rozwiązanie) > Język B: .... (rozwiązanie) itd. Najlepiej bym mógł sortować/filtrować próbki na podstawie języki i paradygmaty programowania. Obecnie używam Project Euler i kilku innych stron do konkursów programistycznych, gdzie najpierw muszę rozwiązać problem samodzielnie, a następnie mogę wybrać przykłady w interesujących mnie językach w wątku na forum dotyczącym tego konkretnego problemu. To jest ok, ale czasami jest to dla mnie trochę za długa droga.


title: Strona do zadań programistycznych

text: > **Możliwy duplikat:** > Zagadki programistyczne To może zabrzmieć szaleńczo, ale czy jest strona, na której możesz wybrać i wybrać zadanie programistyczne dla kogoś? Nieopłacone. W ramach ćwiczeń. Chciałbym mieć kilka prawdziwych wyzwań, które mógłbym zrobić w wolnym czasie.


title: Ćwiczenia dla początkujących programistów

text: Uczę się programować za pomocą książki o Objective-c. Wiem, to nie jest dobry początek, ale i tak. To, co chcę znaleźć, to ćwiczenia, których trudność stopniowo wzrasta, od początkowych typu hello world do dość skomplikowanych, których wykonanie wymaga kilku godzin. Czy jest jakaś strona, która oferuje te ćwiczenia? Niekoniecznie specyficzne dla języka. Widziałem Projekt Euler, ale jest on bardziej oparty na matematyce i nie jestem zbyt dobry z matematyki. Znam pętle, mam trochę wiedzy na temat klas, dziedziczenia. Chcę zrobić coś pożytecznego. Nie rozumiem, od czego zacząć.


title: Wydawać fortunę na certyfikat Scrum Mastera lub trenera Veteran XP?

text: Istnieje bardzo prestiżowa firma, która dostarcza dobrze sprzedane oprogramowanie z zakresu systemów finansowych. Ma ponad 20-letnią historię, zatrudnia około 20 programistów i znacznie większą kadrę menedżerską. Niezadowoleni klienci zgłaszali dziwne błędy i nikt nie ma pojęcia, co jest nie tak, trudny do odczytania kod, a dostosowywanie jest zbyt drogie. Jednym słowem oprogramowanie jest zepsute. Firma zdecydowała się wydać fortunę i znalazła Agile jako środek zaradczy, ale utknęli w tym, czego najbardziej potrzebują. Czy chodzi o proces, programistów, czy jedno i drugie? Wyzwanie dzieli się na następujące opcje: 1. Mogą wynająć certyfikat Scrum Master, aby uczyć ich Scrum. Zapytany o wartość tego działania, SM odpowiedział: „Przygotuję ich do przyjęcia Agile i dopiero wtedy będą mogli przejść na Agile i zapisać produkt”. 2. Równie dobrze mogą wynająć doświadczonego trenera XP. Na to samo pytanie odpowiedział: „Najpilniejszy problem dotyczy programistów, a nie kierownictwa, XP uratuje produkt przed zgnilizną i dopiero wtedy Scrum nabierze sensu”. za chwilę. Bez testów jednostkowych, bez programowania w parach, bez CI (huh? co to jest?) ... masz pomysł. Niektórzy twierdzą, że znacznie lepiej byłoby najpierw ulepszyć swoje programowanie (zatrudnij opcję 2), a następnie przejść do tego procesu. Wielu mówi wręcz przeciwnie. Jakieś spostrzeżenia?


title: Jak przeanalizować nagłówek z dwiema różnymi wersjami [ID3], unikając powielania kodu?

text: Naprawdę mam nadzieję, że przedstawisz mi kilka interesujących punktów widzenia na moją sytuację, ponieważ nie jestem zadowolony z mojego obecnego podejścia. Piszę parser MP3, zaczynając od parsera ID3v2. Obecnie pracuję nad rozszerzonym parsowaniem nagłówka, moim problemem jest to, że opcjonalny nagłówek jest inaczej zdefiniowany w wersji 2.3 i 2.4 tagu. Opcjonalny nagłówek wersji 2.3 jest zdefiniowany w następujący sposób: struct ID3_3_EXTENDED_HEADER{ DWORD dwExtHeaderSize; //Rozszerzony rozmiar nagłówka (z wyłączeniem 6 lub 8 bajtów) WORD wExtFlags; //Rozszerzone flagi nagłówka DWORD dwSizeOfPadding; //Rozmiar dopełnienia (rozmiar tagu bez ramek i nagłówków) }; Podczas gdy wersja 2.4 jest zdefiniowana: struct ID3_4_EXTENDED_HEADER{ DWORD dwExtHeaderSize; //Rozszerzony rozmiar nagłówka (synchsafe int) BYTE bNumberOfFlagBytes; //Liczba bajtów flagi BYTE bFlags; //Flagi }; Jak mogę przeanalizować nagłówek, minimalizując powielanie kodu? Używanie dwóch różnych funkcji do parsowania każdej wersji brzmi gorzej, używanie jednej funkcji z innym przepływem dla każdej okazji jest podobne, jakieś dobre praktyki dla tego rodzaju problemów ? Jakieś wskazówki dotyczące unikania powielania kodu? Każda pomoc byłaby mile widziana.


title: Kiedy myślisz o wydajności? Przed/w trakcie/po faktycznym kodowaniu?

text: Programuję w Javie od dłuższego czasu i zawsze robię bardzo mało "planowania" (jeszcze nie pracowałem nad niczym OGROMNYM, ale duże projekty nie są mi obce) i rozwijam pomysły i poprawiam wydajność kodu tak jak ja iść. Zwykle piszę blok kodu, testuję go, testuję ponownie, próbuję go złamać, a następnie sprawić, by wyglądał ładnie (wizualnie), a potem martwię się o zmodyfikowanie go, aby był bardziej wydajny (jeśli to możliwe). Czy tak myśli/pracuje większość ludzi? Zastanawiam się, czy ktoś inny poświęca czas na dopracowanie swojego kodu po jego zakończeniu lub czy planuje, jak powinien wyglądać i najbardziej wydajną metodę napisania go przed przystąpieniem do kodowania. Staram się dostroić własną wydajność, a słuchanie społeczności da mi szersze pojęcie o tym, jak myślą zarówno profesjonalni, jak i amatorscy programiści.


title: Wewnętrzne elementy platformy .NET: gdzie jest dobre miejsce do nauki „pod maską” w .NET?

text: Będę całkowicie szczery, jednym z powodów, dla których kocham C# i .NET jest to, że przez CAŁĄ moją karierę programistyczną oderwał mnie od dobrze przygotowanych pod maską rzeczy, wierzę, że jako programista .NET nie powinienem wiedzieć mniej więcej. To może wydawać się bluźnierstwem, jeśli powiem, że naprawdę nie obchodzi mnie CLR, CIL, JIT lub MSIL i wszystkie inne wewnętrzne technologie, które do tej pory, szczerze mówiąc, są mniej lub bardziej akronimami, które niewiele znaczą na co dzień problemy, z którymi borykam się jako programista .NET i które rozwiązuję z chlebem powszednim .NET. Moje doświadczenie jest zróżnicowane, jak większość z was z 2 letnim doświadczeniem. Korzystam z platformy .NET od momentu jej uruchomienia, a nawet w czasach, gdy ASP.NET nazywano ASP+. Jeszcze nie spotkałem się z sytuacją, w której wiedza o tym, jak .NET robi to, co robi, zapewnia mi jakąkolwiek praktyczną wartość. W pełni wierzę też, że autorzy .NET bardzo starannie zaplanowali .NET, aby zapewnić ten fantastyczny poziom abstrakcji od konkretnego sprzętu i wersji systemu operacyjnego z tego powodu - po prostu napisz swój kod i bierz się do roboty! Krótko mówiąc: Idę na rozmowę kwalifikacyjną w przyszłym tygodniu i jestem pewien, że pojawią się te teoretyczne pytania, więc chciałbym poświęcić około 4-5 godzin na przestudiowanie wnętrza, abym mógł (z pewnością) spełnić rozmowę kwalifikacyjną test. Czy istnieje dobra książka lub witryna, która szczegółowo opisuje wszystkie elementy wewnętrzne platformy .NET w sposób łatwy do zrozumienia? EDYCJA: Aby trochę wyjaśnić, kiedy odnoszę się do elementów wewnętrznych .net - mam na myśli nie odzwierciedlanie i sprawdzanie kodu frameworka, głównie wiedza o tym, jak kod .net z napisania go kończy się jako wykonywalny kod bajtowy.


title: czy istnieje jakiś związek między punktem fabularnym w dwóch różnych projektach?

text: Załóżmy, że mamy dwa projekty i jeden lub więcej zespołów (jeden zespół realizujący projekty seryjnie lub dwa zespoły wykonujące projekty równolegle). Jeśli zespół A zdecyduje, że zadanie ma 8 punktów narracyjnych, a zespół B zdecyduje, że zadanie w ich projekcie ma również 8 punktów narracyjnych, czy to mówi coś o relacji między tymi dwoma zadaniami? A może nie ma związku między złożonością tych dwóch zadań?


title: projekt na wysokim poziomie silnika układu przeglądarki?

text: Interesuje mnie, w jaki sposób silniki układu przeglądarki, takie jak gecko, webkit i trident, są zaprojektowane z wysokiego poziomu. jakie są kluczowe abstrakcje? jak są ułożone? jakie są wejścia/wyjścia dla różnych abstrakcji? Czy jest jakiś diagram lub artykuł, który wyjaśnia to szczególnie dobrze? Jestem pewien, że implementacje są różne, ale ogólnie jestem ciekaw, jak wszystkie elementy do siebie pasują. Zdaję sobie sprawę, że webkit jest open source i mogę tylko spojrzeć na kod, ale nie wiedziałbym, od czego zacząć.


title: Sprzęganie. Najlepsze praktyki

text: Kontynuując ten wątek zacząłem The Singleton Pattern. To sprawiło, że zacząłem myśleć o tym, jak połączone są moje klasy i jak najlepiej osiągnąć luźne sprzężenie. Proszę pamiętać, że jestem nowym programistą (4 miesiące w mojej pierwszej pracy) i jest to naprawdę pierwsza uwaga, którą się nad tym zastanowiłem i bardzo chcę zrozumieć tę koncepcję. Więc co dokładnie składa się na luźne sprzężenie w porównaniu do ciężkiego sprzężenia? W moim bieżącym (i pierwszym projekcie) pracuję nad projektem wininforms w c#, gdzie sekcja GUI tworzy obiekty i subskrybuje ich zdarzenia, po ich wyzwoleniu GUI tworzy kolejny obiekt (w tym przykładzie datagridview (klasa które stworzyłem, który otacza standardowy widok datagrid i dodaje dodatkową funkcjonalność) i dołącza go do GUI.Czy to złe połączenie czy dobre?Naprawdę nie chcę wchodzić w złe nawyki i zaczynać słabo kodować, dlatego byłbym wdzięczny za twoje odpowiedzi.


title: Co to jest odwrócenie kontroli i kiedy należy jej używać?

text: Projektuję nowy system i chcę wiedzieć, czym jest inwersja sterowania (IOC), a co ważniejsze, kiedy z niego korzystać. Czy trzeba to zaimplementować za pomocą interfejsów, czy można to zrobić za pomocą klas?


title: Brytyjski algorytm sukcesji królewskiej

text: Czytałem o zasadach sukcesji królewskiej monarchii brytyjskiej i pomyślałem, że najłatwiej mogę to zrozumieć za pomocą kodu (lub pseudokodu). Wymyśliłem to (w C# jak pseudo-kodzie): EventHandler CurrentMonarch_Died { CurrentMonarch = SuccessorRootedAt(Person.Electress_Sophia_Of_Hanover); } enum Płeć { Mężczyzna, Kobieta }; // Mężczyzna musi wystąpić przed Kobieta Osoba SuccessorRootedAt(Osoba osoba) { if (person.IsAlive && IsQualified(person.Religion, person.Citizenship)) return osoba; sortedDzieci = osoba.Dzieci.OrderBy(p => p.Płeć).ThenBy(p => p.DataUrodzenia); foreach (dziecko w sortedChildren) { następca = NastępcaRootedAt(dziecko); if (następca != null) zwraca następcę; } zwraca null; }      Czy to jest poprawne?


title: Korzystanie z niewolnej licencji open source

text: Czy są jakieś projekty/produkty, które korzystają z licencji open source, która zasadniczo mówi „bezpłatnie dla małych firm” i „kosztuje pieniądze dla większych firm” oprócz „udostępniaj modyfikacje”? (A czy są jakieś standardowe licencje z takim sformułowaniem?) Gdybym miał wydać projekt na takiej licencji, czy byłby on automatycznie odrzucany przez każdego programistę na świecie, czy też, zakładając, że jest to rzeczywiście użyteczny projekt, czy ma szansę na otrzymanie wkładu od Joe Programmera? Druga część tego pytania może łatwo stać się subiektywna, ale każdy dobrze uargumentowany punkt widzenia będzie wysoko ceniony. Na przykład, czy projekty z podwójną licencją wykonane przez podmioty komercyjne odnoszą sukcesy w społecznościach open source?


title: Jak sprawić, by zasoby programistyczne, wskazówki, narzędzia i fragmenty były zawsze pod ręką i łatwe do znalezienia?

text: W mojej codziennej pracy i w wolnym czasie mam tendencję do odkrywania/uczenia się/znajdowania informacji, które mogą być naprawdę przydatne, jeśli zostaną użyte we właściwym momencie, ale także naprawdę łatwe do zapomnienia i/lub odnalezienia w razie potrzeby. Aby dać ci przykłady, myślę o takich rzeczach jak: * fajne algorytmy lub koncepcje z książki * szalone opcje dla kompilatora * zgrabne narzędzia online, takie jak interpretery/kompilatory. * fragment kodu * dokumentacja różnych języków * porady programistyczne z forum i/lub SE.question * strona ciekawego projektu na github Jak możesz sobie wyobrazić, większość z nich można zapisać jako zakładki, ale nie wszystkie. Ponadto zakładki nie miałyby żadnego wyjaśnienia/dokumentacji/tagowania/ładnego formatowania. W tej chwili myślałem o stworzeniu zwykłej strony HTML lub osobistej wiki, aby wszystko było jakoś zorganizowane. Zastanawiałem się więc, których programistów wsparcia/narzędzi używali, aby tego rodzaju zasoby były pod ręką i łatwe do znalezienia w razie potrzeby i jak je organizowali?


title: Wysyłanie zmian do otwartej strony internetowej

text: Posiadam napisaną przeze mnie aplikację do zarządzania magazynem, która obsługuje grupowanie zamówień do kompletacji, skanowanie towarów do pakowania i dokładność. Częścią tej aplikacji jest Dash lub panel sterowania, z którego pracują różni menedżerowie w magazynie. Pokazuje, kto kompletuje, kto pakuje, kto jest dostępny, ile zamówień jest dostępnych do zgrupowania oraz PACZKĘ innych szczegółów i kontroli. W tej chwili mam wywołanie ajax, które sprawdza znacznik czasu, który jest uruchamiany co około 30 sekund, aby sprawdzić, czy strona powinna zostać zaktualizowana (zmiana dokonana na stacji roboczej innego menedżera). Kierownik robi coś, co powinno być pokazane na wszystkich innych stacjach roboczych, które wyświetlają „kreskówkę”. Może pogrupowali niektóre zamówienia, a dostępne osoby zbierające nie są już dostępne. W tej chwili po wprowadzeniu zmiany aktualizuję znacznik czasu zapisany w bazie danych. Na stronie html znacznik czasu, który był w bazie danych podczas ostatniego ładowania strony, jest zapisywany w ukrytym div. JavaScript pobiera ten znacznik czasu i sprawdza bazę danych w odstępach czasu, jeśli jest inny, jeśli strona jest aktualizowana. Jest to nieco bardziej skomplikowane, ponieważ sekcje strony zmieniają się nie w całości, ale opis podsumowuje proces. To działa, ale mi się to nie podoba. Wymaga trafienia do bazy danych z każdej stacji roboczej co 30 sekund. Wydaje się zbyt skomplikowany. Szukam przemyśleń na temat tego, w jaki sposób mogę popchnąć zmianę w miarę jej występowania i zminimalizować lub wyeliminować niektóre interakcje z bazą danych. Myśli?


title: Dodawanie do przestrzeni nazw System w C#

text: Czy byłoby dopuszczalne dodanie bardzo ogólnych narzędzi lub klas w przestrzeni nazw `System`? Myślę o naprawdę podstawowych rzeczach, takich jak ogólne `EventArgs` (`EventArgs<T>`), Use case: byłyby udostępniane w podstawowej bibliotece firmy (tak, aby można je było ponownie skompilować w nowym projekcie bez zmiana przestrzeni nazw);


title: Dlaczego nie można tworzyć instancji typów za pomocą symboli wieloznacznych w Javie?

text: Próbuję utworzyć wystąpienie LinkedList<?> op = new LinkedList<?>(); Ale pojawia się błąd Nie można utworzyć instancji typu LinkedList<?> Dlaczego nie można utworzyć instancji w Javie?


title: Plusy / minusy między naciskiem na przetwarzanie po stronie klienta lub serwera

text: Dlaczego miałbym chcieć napisać aplikację internetową z dużą ilością przetwarzania po stronie serwera? Dla mnie pisanie programu po stronie klienta jest ogromną zaletą, ponieważ odciąża serwer tak bardzo, jak to możliwe, ponieważ musi tylko wysyłać dane do klienta przy minimalnym przetwarzaniu. Niewiele widzę na temat pisania aplikacji internetowych poza pisaniem po stronie serwera i traktowaniem strony klienta jako _tylko widok_. Dlaczego miałbym kiedykolwiek chcieć to zrobić? Jedyną zaletą, jaką widzę, jest to, że mogę pisać w dowolnym języku (http://www.paulgraham.com/avg.html).


title: Podejście do sesji HTTP lub bazy danych

text: Jestem trochę zdezorientowany, co powinno być moim podejściem, Pracując nad projektem koszyka na zakupy i muszę przechowywać koszyk zakupów w sesji lub w bazie danych, ale nie jestem pewien, które podejście byłoby najlepsze. Oto przypadek użycia 1. Użytkownik jest niezalogowany i dodaje produkt do koszyka (użytkownik anonimowy) 2. Użytkownik jest zalogowany i dodaje produkt do koszyka. Pierwszy przypadek jest dla mnie bardziej zagmatwany, ponieważ może być wiele przypadków, w których użytkownik po prostu odwiedza sklep internetowy i dodaje produkt bez zalogowania się i może być całkiem prawdopodobne, że nie przejdzie procesu kasowego. Ale nadal musimy stworzyć Shopping-Cart dla tego użytkownika, aby stworzyć i zapisać koszyk mam dwie opcje. 1. Podczas dodawania produktu przez użytkownika utwórz koszyk w bazie danych i skojarz ten koszyk z tym użytkownikiem, po jego zalogowaniu się przenieś ten koszyk do zalogowanego użytkownika. 2. Stwórz Koszyk, dodaj do niego produkt i zapisz go do Sesji, po zalogowaniu się utwórz Koszyk w bazie danych i powiąż zalogowanego użytkownika z tym koszykiem z Użytkownikiem. Wiem, że zarówno system oparty na bazie danych, jak i oparty na sesji, może mieć zarówno pozytywne, jak i negatywne aspekty, ale nie jestem pewien, które z nich może być najlepszym podejściem, biorąc pod uwagę następujące punkty: 1. Skalowalność 2. Elastyczność 3. Rozszerzalność 4. Aplikacja powinna dbać o szybkość Szukanie danych wejściowych w tym aspekcie, aby zdecydować o ścieżce.


title: Potrzebujesz pomocy w zrozumieniu „Podpis obrazu dla każdego rodzaju obrazu”

text: Próbuję zaimplementować artykuł zatytułowany Podpis obrazu dla dowolnego rodzaju obrazu, ale mam problem ze zrozumieniem, co oznaczają w tym akapicie: > Dla każdej kolumny obrazu obliczamy sumę wartości bezwzględnych > różnic między sąsiednimi pikselami w tej kolumnie. Obliczamy sumę > wszystkich kolumn i przycinamy obraz w kolumnach 5% i 95%, czyli w kolumnach > w taki sposób, że 5% łącznej sumy różnic leży po obu stronach > przyciętego obrazu. Przycinamy wiersze obrazu w ten sam sposób (używając > sum oryginalnych nieprzyciętych wierszy). Po pierwsze, co oznaczają „suma wartości bezwzględnych różnic między sąsiednimi pikselami w tej kolumnie”? Jeśli zaczniemy od lewego górnego piksela i będziemy pracować w dół (w dół kolumny), możemy obliczyć różnicę między (0,0) a (0,1), ale co z następnym pikselem? Czy mam obliczyć różnicę tylko z pikselem poniżej, czy pikselami po obu stronach, a może nawet z sąsiadami 4 lub 8? A potem, jak rozumiem, sumujemy te różnice dla każdej kolumny tak, że każda kolumna jest zredukowana do jednej liczby? Następnie używamy tych informacji do przycinania _lewej_ i _prawej_ krawędzi zdjęcia, prawda?


title: Jak często robisz notatki i jak jesteś w stanie utrzymać stałą ilość?

text: Robię notatki o funkcjach językowych, szczegółach projektu itp. Zauważyłem, że robię dużo notatek, kiedy zaczynam uczyć się nowego aspektu języka lub zaczynam pracę nad nowym projektem, ale potem, gdy rozmach narasta notatka zrzucania. Często żałuję, że nie robię więcej notatek, ponieważ często znajduję je pomocne kilka miesięcy później, gdy napotykam problem po raz drugi lub gdy chcę przypomnieć sobie jakiś szczegół z przeszłości. Robisz dużo notatek? a jak ty lub nie utrzymujesz ilość notatek, które robisz? Mój problem polega na tym, że kiedy coś robię, robienie notatki jest jak przerwanie; chociaż wiem, że przyda się w przyszłości. Jakieś sugestie?


title: Licencja Apache 2 i biblioteki chronione prawem autorskim

text: Pracuję nad moim pierwszym większym (większym niż wcześniej) projektem na mojej uczelni, który jest kodowany na licencji Apache 2. Oto pytanie: Czy mogę używać materiałów/bibliotek chronionych prawem autorskim (bez ograniczeń i za darmo) w ramach tego projektu? Chcę być konkretny: Biblioteka jest flotą (flotcharts.org) Domyślam się, że tak, ale domysły się nie liczą.


title: Umiejętności C++ wyższe niż umiejętności C?

text: Czuję, że często spotykany C/C++ nie opisuje moich umiejętności w moim CV. Więc zamierzam podzielić to na zaawansowaną wiedzę C++ i przeciętne umiejętności C. Czy uważasz, że jest to mylące dla czytelnika? Mogła pomyśleć: „C jest podzbiorem C++, więc co ten facet próbuje mi powiedzieć?” Cóż, próbuję powiedzieć, że wykonałem kilka projektów w prawdziwym świecie C++, podczas gdy projekty w czystym C były tylko hobby. Czy zgadzasz się, że wykwalifikowany programista C++ niekoniecznie jest wykwalifikowanym facetem od C, czy uważasz, że ta zmiana jest łatwa?


title: Książki o ścieżce kariery programistycznej

text: Czy możesz polecić książki **i inne materiały (wideo)** o tym, jak budować karierę, jakie są ścieżki i drogi w całym obszarze inżynierii oprogramowania? **W czym może ewoluować programista?** Jakaś ścieżka ewolucji od rozwoju? Nie proszę tylko o 2 dobrze znane kierunki: zarządzanie projektami i freelancing, proszę o cały wachlarz możliwości, w których te umiejętności mogą się przydać Nie proszę o rzeczy dotyczące: * frameworków, języków * certyfikatów dla Microsoft, Oracle itp.


title: Czy poleganie na referencjach jest powszechnym procesem, czy powinienem zapamiętywać składnię?

text: > **Możliwe duplikowanie:** > Czy dla programisty ważne jest zapamiętywanie składni języka? Na przykład nie mogłem napisać ciągu połączenia SQL od zera, gdybym próbował. Zawsze albo Google albo kopiuję i wklejam z poprzedniego projektu. Z jakiegoś powodu mnie to niepokoi, ale nie wiem, czy powinno, czy to po prostu nie jest wielka sprawa. Prawdopodobnie są też inni ludzie, którzy mogą odnieść się i pomyśleć o innych przykładach.


title: Jeśli mam dwa konta licencyjne programisty w Apple, czy mogę łatwo przełączać się między nimi w celu tworzenia i publikowania aplikacji?

text: Od czasu premiery iPhone'a interesowałem się rozwojem iPhone'a, jednak mam ograniczony budżet osobisty. Nigdy nie miałem ochoty/mogłem wydać pieniędzy potrzebnych na iPhone'a i Macbooka. Wiem, niektórzy mogą twierdzić, że to nie jest takie drogie, ale jak na hobby nie było warte swojej ceny. Pewnym zrządzeniem losu firma, w której pracuję, chce, abym opracował aplikację na iPhone'a i iPoda. Oznacza to, że dostaję prawie cały sprzęt, na którym chciałbyś rozwijać – niesamowity Macbook, wyświetlacz Thunderbolt, iPhone, iPad, kilka akcesoriów. Krótko mówiąc, to w zasadzie moja „lista życzeń”, o której marzyłem pewnego dnia. W wolnym czasie będę mógł używać sprzętu do tworzenia dowolnego oprogramowania, ale ponieważ mój laptop programistyczny będzie używany głównie do projektów moich firm zatrudniających, potrzebuję pewności, że wszelkie prace, które wykonuję na podstawie mojej własnej licencji programisty, nie wpłyną na moje licencja programisty powiązana z moim kontem służbowym. Czy mogę łatwo przełączać się między dwoma kontami programisty podczas tworzenia i publikowania aplikacji? Co jeśli jedno konto jest standardowe, a drugie to przedsiębiorstwo? Na razie nie mam żadnego sprzętu ani żadnych licencji deweloperskich i pytam z całkowitą ignorancją. Czy mogę to zrobić, czy konta będą się kolidować? **PROSZĘ O AKTUALIZACJĘ/DRUGIĄ OPINIĘ** Dziękujemy **mouviciel** za szybką odpowiedź na to pytanie z prostą odpowiedzią. Jednak pracuję z XCode od dłuższego czasu i mam też doświadczenie w pobieraniu przykładowych projektów i modyfikowaniu ich tak, aby móc je uruchamiać na moim urządzeniu z systemem iOS. To pozwala mi wierzyć, że odpowiedź na moje początkowe pytanie może wymagać dostosowania plików PList i innych ustawień projektu, ale nadal powinna być możliwa bez konieczności tworzenia oddzielnego konta na moim Macbooku. Więc pytam ponownie, czy mogę łatwo przełączać się między dwoma kontami programisty podczas tworzenia i publikowania aplikacji, używając wyłącznie jednego konta na moim Macbooku? Jeśli odpowiedź brzmi: tak (co zakładam, że tak jest), jak mam przedefiniować moje osobiste projekty, które mogą początkowo dziedziczyć ustawienia użytkownika powiązane z moim kontem biznesowym i poświadczeniami?


title: Gdzie możesz znaleźć swoich pierwszych klientów jako freelancer?

text: Chcę zacząć pracować jako freelancer, ale bez względu na to, jak na to patrzę, wydaje się, że to najlepszy sposób na zdobycie klientów i pracę przez większość czasu, musisz już być w grze jako freelancer. Większość freelancerów, z którymi rozmawiałem, przez lata miała tych samych klientów lub zyskała nowych klientów, ponieważ polecili ich zadowoleni klienci. To, co chciałbym wiedzieć od ludzi sukcesu, którzy pracują jako freelancerzy, to jak zacząć robić interesy, kiedy jeszcze nie postawiłeś stopy w freelancerze? Chcę zacząć od małych, tworząc strony internetowe, które nie będą wymagały ode mnie zatrudniania innych osób niż być może projektanta, którego już znam. (Chciałbym również tworzyć aplikacje desktopowe, ale myślę, że powinienem zachować to na później, gdy będę bardziej doświadczony) . Myślałem o zlokalizowanych reklamach Google lub odwiedzaniu firm i spotykaniu się z osobami tam odpowiedzialnymi, ale nie wiedziałbym, jakiego rodzaju firm szukać i czy jest to w ogóle dobry sposób na podejście do tego. Czy ktoś chce podzielić się swoimi osobistymi doświadczeniami/radami dotyczącymi startupów, które mogą pomóc przyszłym freelancerom?


title: Tworzenie strony internetowej dla programu w C++

text: Zastanawiałem się, jaka byłaby najlepsza metoda na stworzenie strony internetowej do współpracy z programem C++ na serwerze. Na początku po prostu myślałem, że po prostu używam wykonywania powłoki z języka po stronie serwera WWW (jak `shell_exec()` w PHP), ale zastanawiałem się, czy istnieje "lepszy" sposób. Może coś bardziej rodzimego, czy z jakiegoś powodu jest to zła praktyka?


title: Algorytm/badania nad wykrywaniem języka tekstu

text: Interesuje mnie znalezienie podejścia, które wykryje, jakim językiem jest ciąg tekstu. Jak tłumaczy Google.


title: Projektowanie oprogramowania .NET i Oracle ODP.NET UDT

text: Pracuję nad nowym wspólnym projektem oprogramowania .NET (głównie) dla aplikacji usług sieci web opartych na WCF z powiązanymi frontendami klienckimi (wszystkie napisane w C#). Do tej pory wybrałem kilka frameworków (NUnit,Autofac/Castle Windsor) jako podstawę dla aplikacji. Teraz robię badania dotyczące abstrakcji db. Rozważam NHibernate (wraz z FluentNHibernate) jako ramy trwałości. Ale są pewne obawy dotyczące NHibernate. Interfejsy baz danych dostarczane przez nasz zespół db dev w dużym stopniu opierają się na procedurach składowanych i często używają obiektów UDT jako parametrów wyjściowych (czasami również kursorów ref). Wiele już istniejących aplikacji korzysta z automatycznie generowanych klas C# UDT. NHibernate wydaje się dobrze współpracować z Oracle (przy odpowiedniej konfiguracji i wykorzystaniu ODP.NET). Zobacz Fluent NHibernate — jak skonfigurować dla Oracle?, Fluent NHibernate — Konfiguracja Oracle Data Provider ODP. Również kursory ref i wywołania procedur składowanych wydają się działać z nhibernate (patrz Wywoływanie procedury składowanej Oracle z procedurami składowanymi nHibernate i Oracle, SYS_REFCURSOR i NHibernate). Czy w tym przypadku należy używać NHibernate (procedury składowane i wyjście kursora UDT/ref)? A może lepiej zachować automatycznie generowane klasy C# UDT i zaimplementować niestandardowe obiekty dostępu do danych? Projekt A (z automatycznie generowanymi klasami UDT): * Tworzenie obiektów biznesowych w modelu domeny (np. `class Product`) * Definiowanie interfejsów niezależnych od bazy danych, np. `IDataAccessProduct`. * Zaimplementuj go w klasach m.in. „OracleDataAccessProduct”, które reprezentują określone obiekty dostępu do danych. Na przykład to wywołanie klas wykonuje mapowanie automatycznie generowanych klas (encji) UDT na obiekty domeny `Product` i odwrotnie. Projekt B (z NHibernate): * Utwórz obiekty biznesowe w modelu domeny (np. klasa encji `Product : IEntity<Product>`.) * Dodaj interfejs IProductRepository dla repozytorium. W modelu domeny. Dodaj `ProductRepository`, który rozszerza np. klasa bazowa `Rhino.Commons.NHRepository`. * Użycie mapowania hibernacji dla obiektów domeny do tabeli db (`Product.hbm.xml`). Więc jaki projekt wolisz?


title: Jakie są różnice między stroną internetową a aplikacją internetową?

text: Jak odróżnić aplikację internetową od stron internetowych? Jest niezależny od języka/platformy.


title: Jaka jest różnica między projektantami stron internetowych a programistami?

text: > **Możliwy duplikat:** > Jakie są granice między odpowiedzialnością projektanta a > programisty? Projektanci stron internetowych i programiści pracują w tym samym projekcie, szukam od godziny i nie mogę znaleźć różnicy? Znalazłem kilka slajdów na Slideshare, które omawiają różnicę, ale chciałbym uzyskać więcej wyjaśnień na ten temat.


title: Jak zaimplementować funkcję rezygnacji z subskrypcji wiadomości tekstowych?

text: Na wielu listach subskrypcji e-mail na dole znajduje się link, który mówi coś w rodzaju: > Jesteś zapisany do naszej listy e-mail jako ty@example.com. Aby się wypisać > kliknij tutaj Jaki jest najlepszy sposób (i czy jest sposób?) na naśladowanie tego podczas wysyłania masowych wiadomości tekstowych przez bramkę SMS?


title: Dzielenie siatki 2D na najbardziej efektywne wyszukiwanie

text: ## Wymagania 1. Mam `Siatkę` o nieograniczonym rozmiarze (nie wiem i nie wiem jaki jest jej rozmiar) 2. Na siatce należy umieścić `Object`, każdy obiekt ma swoją odległość strumienia (w innymi słowy: zakres, domyślnie: 300) i współrzędne 2D (pozycja) 3. Istnieje funkcja `find`, która pobiera współrzędne 2D i zwraca wyświetlany obiekt Wygląda na to, że odpowiedzią na moje pytanie jest R-drzewo wyjaśnienie, jak dokładnie działa algorytm? ## Mój sposób 1. Dzieląc rozmiary komórek na poziomy, poziom 1 to 600x600 (2 razy większy niż domyślna odległość strumienia), poziom 2 to 1200x1200 i tak dalej... (za każdym razem rozmiar komórek jest mnożony przez 2). 2. Powiąż obiekty w odpowiedniej komórce przez pomnożenie odległości strumienia przez 2 i zaokrąglenie do następnej wielokrotności 600, na przykład: odległość strumienia to 450, pomnożenie przez 2 daje 900, zaokrąglenie do następnej wielokrotności 600 daje 1200 3. Przy każdym wstawieniu obiektu sprawdź, do jakich komórek pasuje obiekt i dodaj obiekt do listy obiektów komórek. 4. Gdy zostanie wywołana funkcja `find`, przeszuka tylko komórkę o podanej współrzędnej. [ Załóżmy, że trójkąt jest obiektem ] ![tutaj podaj opis obrazka](http://i.stack.imgur.com/BUWJz.jpg) ## Podobne pytania * Najskuteczniejszy sposób znajdowania obiektów w siatce? (Przyjęta odpowiedź)


title: Czy przejście z jednego języka programowania na inny powoduje utratę doświadczenia?

text: Jeśli pracowałem dla języka programowania X i chcę przełączyć się na Y (z Javy na C++ lub z Javy na Objective-c), czy to powoduje utratę mojego wieloletniego doświadczenia w poprzednich językach (z punktu widzenia firmy)? Na przykład, jeśli byłem Seniorem w X i chcę przenieść się do Y, czy zacznę Juniora od Y czy Seniora? Uważam, że języki to tylko narzędzia, a doświadczenie dotyczy rozwiązywania problemów i sposobu myślenia, ale czy firmy dotyczą?


title: Czy moja asynchroniczna biblioteka zadań powinna po cichu połykać wyjątki?

text: Właśnie dowiedziałem się, że .NET 4.5 wprowadził zmianę w sposobie obsługi wyjątków wewnątrz zadania. Mianowicie są one cicho tłumione. Oficjalne uzasadnienie, dlaczego tak się stało, wydaje się brzmieć „chcieliśmy być bardziej przyjaźni dla niedoświadczonych programistów”: > W .NET 4.5 zadania mają znacznie większe znaczenie niż w .NET > 4, ponieważ są wypiekane w Języki C# i Visual Basic w ramach > nowych funkcji asynchronicznych obsługiwanych przez języki. To w efekcie przenosi Zadania > z domeny doświadczonych programistów do sfery wszystkich. W rezultacie prowadzi to również do nowego zestawu kompromisów dotyczących tego, jak rygorystycznie należy być > w zakresie obsługi wyjątków. (źródło) Nauczyłem się ufać, że wiele decyzji w .NET zostało podjętych przez ludzi, którzy naprawdę wiedzą, co robią i zwykle jest bardzo dobry powód, dla którego decydują. Ale ten mi umyka. Gdybym projektował własną bibliotekę zadań asynchronicznych, jaka jest korzyść z połykania wyjątków, których twórcy frameworka zauważyli, a których ja nie widzę?


title: Programiści i specjaliści od baz danych w firmach opartych na wydajności

text: Czy ktoś tutaj pracuje dla firmy (lub zna kogoś, kto to robi) w dziedzinie programowania lub czegokolwiek związanego z bazami danych i nie ma ustalonych godzin pracy? Gdzie płaci się za wykonanie, a nie za ile godzin siedzisz na krześle w biurze? Każdy projekt/firma, w której pracowałem, zawsze ma ściśle określone godziny podstawowe z „świetną szansą” / oczekiwaniem, że zostanie do czasu wykonania pracy. Czy ten rodzaj elastyczności jest naprawdę możliwy w środowisku grupowym w tych dziedzinach? Czy zapłaciłby za wydajność pracy w firmie w tych dziedzinach? Mając ściśle określone godziny podstawowe, zauważam wiele nieefektywności. W niektóre tygodnie lub dni jest tylko tyle, co można zrobić (z jakiegokolwiek powodu), a jeśli twoja praca jest skończona, nie pomaga moralne zmuszanie kogoś do pozostania przez 8 godzin dziennie lub 40 godzin w tygodniu, jeśli następny w tygodniu mogą być zmuszeni do przepracowania ponad 60 godzin w tygodniu pracy. Wiem, że duża elastyczność może wynikać z pracy samodzielnej lub jako konsultant, więc to pytanie tak naprawdę nie obejmuje tego typu stanowisk.


title: Co mogę zrobić, aby nasz zespół mógł przeprowadzać przeglądy kodu scalających gałęzie na setkach ekranów zawierających różnice z Github?

text: „Recenzja kodu” (aka „recenzja rówieśnicza”) wydaje się naprawdę świetnym pomysłem, więc mój zespół zaczął to ćwiczyć. Przez chwilę działało to dobrze, ale potem współpracownik włączył gałąź i poprosił o sprawdzenie kodu. Kiedy poszedłem przejrzeć jej kod, strona porównania Github miała około 420 tys. pikseli wysokości. Biorąc pod uwagę, że mój ekran ma około 500 pikseli, działa to na 840 ekranów kodu do przejrzenia. Aby przeczytać kod, w pełni go „oszukać” i napisać odpowiednie komentarze, prawdopodobnie potrzebuję średnio jednej minuty na ekran, co daje 14 godzin. Teraz, aby być uczciwym, niektóre biblioteki zostały zaewidencjonowane w tym zatwierdzeniu, więc część tego można pominąć ... ale nawet jeśli biblioteki zajęły 6 godzin, nadal pozostaje mi cały dzień spędzony na przeglądaniu tego scalania. To nie może być najbardziej efektywne wykorzystanie mojego czasu. A to tylko jedno połączenie; bez wątpienia będziemy mieli do przejrzenia również inne duże fuzje w przyszłości. Więc moje pytanie brzmi, co mogę zrobić (zarówno pod względem procedury, jak i wykorzystania narzędzi do recenzowania), aby nasz zespół mógł przeprowadzać przeglądy kodu scalania gałęzi, a jednocześnie nie pochłaniać całych dni na przeglądach?


title: Przesłać problem, żądanie ściągnięcia lub jedno i drugie, aby uzyskać bardzo małą poprawkę?

text: Zrobiłem 4-wierszową poprawkę do drobnego problemu w bibliotece na github. Projekt jest aktywnie utrzymywany ze zmianami co kilka dni. Jaki jest idealny sposób na przesłanie tak małej poprawki? Czy chodzi o rozwidlenie, naprawienie i przesłanie żądania ściągnięcia; zgłosić problem _i_ żądanie ściągnięcia; lub po prostu zgłosić problem z moją poprawką wklejoną? (Albo coś innego?)


title: Czy notacja węgierska jest obejściem dla języków z niewystarczająco ekspresyjnym (np. w stylu Haskella) statycznym pisaniem?

text: ### Edytuj Żeby było jasne, _nie_ mówię o adnotacjach nazw zmiennych typu _data_, ale o informacjach o _znaczeniu_ zmiennej w kontekście programu. Na przykład zmienna może być liczbą całkowitą, zmiennoprzecinkową, podwójną, długą lub cokolwiek innego, ale być może _znaczenie_ zmiennej jest takie, że jest to względna współrzędna x mierzona w calach. To jest rodzaj informacji, o których mówię kodowanie za pomocą notacji węgierskiej (i za pomocą typów Haskell). ### Oryginalne pytanie: W artykule Co słychać w notacji węgierskiej?, Eric Lippert stwierdza, że celem notacji węgierskiej (dobrego rodzaju) jest > rozszerzenie pojęcia „typu”, aby obejmowało informacje semantyczne oraz > reprezentację pamięci Informacja. Prostym przykładem może być poprzedzenie zmiennej, która reprezentuje współrzędną X znakiem „x” i zmiennej, która reprezentuje współrzędną Y, znakiem „y”, niezależnie od tego, czy te zmienne są liczbami całkowitymi, liczbami zmiennoprzecinkowymi czy czymkolwiek innym, tak aby po przypadkowym wpisaniu `xFoo + yBar`, kod wyraźnie wygląda źle. Ale czytałem też o systemie typów Haskella i wydaje się, że w Haskell można osiągnąć to samo (tj. "rozszerzyć koncepcję typu, aby objąć informacje semantyczne"), używając _rzeczywistych typów_, które kompilator sprawdzi dla ciebie. Tak więc w powyższym przykładzie, `xFoo + yBar` w Haskell faktycznie nie skompiluje się, jeśli poprawnie zaprojektujesz swój program, ponieważ zostałyby zadeklarowane jako typy niezgodne. Innymi słowy, wygląda na to, że system typów Haskella skutecznie obsługuje sprawdzanie w czasie kompilacji równoważne notacji węgierskiej. Czy notacja węgierska to tylko pomoc dla języków programowania, których systemy typów nie mogą kodować informacji semantycznych? A może notacja węgierska oferuje coś poza tym, co może zaoferować statyczny system typów, taki jak Haskell? (Oczywiście używam Haskella jako przykładu. Jestem pewien, że istnieją inne języki z podobnie ekspresyjnymi (bogatymi? silnymi?) systemami typów, chociaż nie spotkałem żadnego.)


title: Projektowanie samoopisującego się systemu dokumentów JSON

text: Staram się opracować system dokumentów dla konkretnej domeny, obejmujący proste obiekty (Ludzie, Firmy, Faktury itp.), które również będą w stanie w pełni opisać siebie. Ta umiejętność samoopisu byłaby idealnie rekurencyjna. System dokumentów będzie oparty na JSON, ale uważam, że zasada, o której mowa, ma zastosowanie do każdej notacji strukturalnej. Aby zilustrować, o co mi chodzi, powiedzmy, że mam następujący dokument JSON, który opisuje osobę (firma, faktura itp. są w zasadzie takie same, tylko z różnymi właściwościami): { "Name": "John Doe", "Email" : "john.doe@example.org", "BirthDate": "1976-07-04" } Następnie mam drugi dokument JSON, który opisuje strukturę pierwszego. Nazwijmy to "Metadokumentem poziomu 1": { "Type": "Person", "Properties": { "Name": { "Type": "String", "Required": true }, "Email": { "Type": "String" }, "BirthDate": { "Type": "Date" } } } Byłoby to dość proste, gdyby nie wymaganie, że system powinien również być w stanie w pełni opisać ten metadokument . Mówiąc bardziej ogólnie: szukam sposobu na zdefiniowanie samowystarczalnego „Meta-dokumentu poziomu N”, który byłby w stanie opisać strukturę „metadokumentu poziomu N-1”. **UWAGA** : Chętnie wybrałbym rozwiązanie dla N = 2, ale instynkt podpowiada mi, że prawdziwe rozwiązanie dla N = 2 działałoby również dla każdego N. Teraz, gdy o tym myślę, może to być bardziej zagadka matematyczna niż programowanie. :) Czy to w ogóle możliwe? Jeśli tak, czy możesz podać kilka przykładów? Jeśli nie, jakie mam inne opcje? **EDYCJA: Dołączyłem naiwny przykład tego, jak wyglądałby "Meta-dokument poziomu 2", w oparciu o powyższe:** { "Type": "MetaLevel2", "Properties": { "Properties": { "Typ": "Hash", "Required": true } } } Problem polega na tym, że nie opisuje obiektu, który opisuje szczegóły właściwości (tj. ten z atrybutami "Type" i "Required"). Gdybym miał dołączyć ich opis, musiałbym dodać kolejny atrybut **do tego samego obiektu, który próbuję opisać** : { "Type": "MetaLevel2", "Properties": { "Properties" : { "Type": "Hash", "Required": true, "ValueProperties": { "Type": "String", "Required": "Boolean" } } } } Niestety wrzuca mnie to w problem rekurencji, ponieważ Brakuje mi teraz opisu „ValueProperties”. W rzeczywistości, dla każdego nowego atrybutu, który wynajdę na poziomie N, mam problem z opisaniem go na poziomie N+1 bez wprowadzania kolejnego atrybutu, który wymaga opisu. To, czego szukam, to rozwiązanie, które nie ucierpiałoby na tym problemie. Żeby było jasne: znam XSD, ale nie jestem pewien, jak zastosować jego zasady w moim przypadku. O ile czegoś mi nie brakuje, XSD cierpiałby na ten sam problem rekurencyjny. To daje mi powody, by sądzić, że mam problem z samym podejściem.


title: Co stanowi martwy język programowania?

text: Wyobraź sobie, że zostałeś wybrany koronerem IEEE lub innego organu zarządzającego i musiałeś ogłosić, że język programowania jest martwy. Jakich znaków byś szukał? Czy są jakieś języki zombie, które nie wiedzą, że są już martwe?


title: Zend Framework: Czy powinienem martwić się o szczegóły implementacji MVC?

text: Studiowałem MVC Zend Framework od kilku tygodni i mam z nim naprawdę, naprawdę trudny czas. Jestem nowy w OOP, ale rozumiem OOP w PHP bez większych trudności; Rozumiem, jak korzystać z niektórych pakietów w bibliotece Zend itp. Rozumiem interfejsy, klasy abstrakcyjne, kompozycję itp. itp. itp. Rozumiem MVC na wysokim poziomie, ale czy ktoś wie, czy/gdzie jest zasób który opisuje implementację MVC na poziomie gruntu? A może powinienem po prostu przestać się tym martwić i spróbować początkowo zignorować mechanikę implementacji? Pracowałem nad kilkoma książkami i zasobami online na temat implementacji MVC i wydaje się to niezwykle skomplikowane. (Ponadto wcześniejsze wersje miały różne implementacje, co czyni je nieco bardziej mylącym do zrozumienia). Taktykę, którą staram się obrać, jest tym, co zwykle robię, gdy chcę coś zrozumieć: przechodzę przez to wiersz po wierszu i podążaj za logiką, aż wszystko stanie się jasne. Po wypróbowaniu tego w kółko (i nie zajściu zbyt daleko), zastanawiam się, czy nie robię tego w niewłaściwy sposób. W końcu OOP polega na tym, aby nie martwić się implementacją, prawda? To znaczy, słyszę, jak to mówię i wzdrygam się. Nie lubię nie wiedzieć, co się dzieje, ale wydaje mi się to niezwykle skomplikowane i naprawdę chciałbym przejść do etapu, w którym faktycznie coś tworzę. Z tego, co mogę powiedzieć, Zend jest jednak niesamowicie dobrze pomyślany (być może zbyt dobrze pomyślany, jeśli to ma jakikolwiek sens). Wszystkie i są kropkowane i przekreślone, co bardzo utrudnia przekopywanie się (wiele klas abstrakcyjnych, niektóre interfejsy, obiekty przekazywane tu i tam, itp. -- trudne do naśladowania). Ale książki i witryny, które przejrzałem, nie zawierają szczegółowych informacji o tym, jak działa ten proces, tylko opisy na wysokim poziomie lub są przestarzałe i korzystają z innej implementacji. Wolałbym to zrozumieć na niższym poziomie.


title: Strategie buforowania dla encji i kolekcji

text: Obecnie posiadamy framework aplikacji, w którym automatycznie buforujemy zarówno encje, jak i kolekcje encji w warstwie biznesowej (za pomocą pamięci podręcznej .NET). Tak więc metoda GetWidget(int id) sprawdza pamięć podręczną przy użyciu klucza Widget_Id_{0} przed trafieniem do bazy danych, a metoda GetWidgetsByStatusId(int statusId) sprawdza pamięć podręczną przy użyciu Widgets_Collections_ByStatusId_{0}. Jeśli obiekty nie znajdują się w pamięci podręcznej, są pobierane z bazy danych i dodawane do pamięci podręcznej. To podejście jest oczywiście szybkie w przypadku scenariuszy odczytu i jako podejście zbiorcze jest szybkie do wdrożenia, ale wymaga usunięcia dużej liczby kluczy pamięci podręcznej, gdy operacje CRUD są przeprowadzane na encjach. Oczywiście w miarę dodawania dodatkowych metod wpływa to na wydajność, a korzyści z buforowania maleją. Interesują mnie alternatywne podejścia do obsługi buforowania kolekcji. Wiem, że NHibernate buforuje listę identyfikatorów w kolekcji, a nie rzeczywiste jednostki. Czy jest to podejście, którego próbowali inni ludzie - jakie są zalety i wady? W szczególności poszukuję opcji, które optymalizują wydajność i mogą być wdrażane automatycznie poprzez kod generowany szablonowo (posiadamy własne narzędzie do generowania kodu). Wiem, że niektórzy powiedzą, że buforowanie należy za każdym razem wykonywać ręcznie, aby sprostać potrzebom konkretnej sytuacji, ale ja szukam czegoś, co załatwi nam większość drogi automatycznie.


title: Dwa interfejsy z identycznymi sygnaturami

text: Próbuję stworzyć model gry karcianej, w której karty mają dwa ważne zestawy cech: Pierwszy to efekt. Są to zmiany stanu gry, które zachodzą po zagraniu karty. Interfejs efektu jest następujący: boolean isPlayable(Player p, GameState gs); void play (Player p, GameState gs); I możesz uznać, że karta jest grywalna wtedy i tylko wtedy, gdy możesz pokryć jej koszt i wszystkie jej efekty są grywalne. Tak: // w klasie Card boolean isPlayable(Player p, GameState gs) { if(p.resource < this.cost) return false; for(Effect e : this.effects) { if(!e.isPlayable(p,gs)) return false; } zwróć prawdę; } OK, jak dotąd, całkiem proste. Drugi zestaw cech na karcie to zdolności. Zdolności te to zmiany stanu gry, które możesz aktywować do woli. Kiedy wymyślałem interfejs dla nich, zdałem sobie sprawę, że potrzebują metody określania, czy można je aktywować, czy nie, oraz metody implementacji aktywacji. Okazuje się, że jest to wartość logiczna isActivatable(Player p, GameState gs); void aktywuj (Player p, GameState gs); I zdaję sobie sprawę, że z wyjątkiem nazywania go „aktywuj” zamiast „graj”, „Umiejętność” i „Efekt” mają dokładnie ten sam podpis. * * * Czy to źle mieć wiele interfejsów z identyczną sygnaturą? Czy powinienem po prostu użyć jednego i mieć dwa zestawy tego samego interfejsu? W związku z tym: Ustaw<Efekt> efekty; Ustaw umiejętności<Efekt>; Jeśli tak, to jakie kroki **refaktoryzacji** powinienem podjąć, jeśli staną się one nieidentyczne (ponieważ więcej funkcji zostanie wydanych), szczególnie jeśli są rozbieżne (tj. oboje zyskują coś, czego druga osoba nie powinna, w przeciwieństwie do tylko jednego zyskującego, a drugiego będącego kompletnym podzbiorem)? Szczególnie martwię się, że łączenie ich będzie nie do utrzymania, gdy tylko coś się zmieni. Drobny druk: zdaję sobie sprawę, że to pytanie jest wywoływane przez tworzenie gier, ale czuję, że jest to rodzaj problemu, który może równie łatwo wkraść się w tworzenie gier innych niż gry, szczególnie gdy próbujemy pomieścić modele biznesowe wielu klientów w jednej aplikacji, dzieje się to z prawie każdym projektem, który kiedykolwiek zrobiłem z więcej niż jednym wpływem na biznes... Ponadto, użyte fragmenty to fragmenty Java, ale można to równie łatwo zastosować do wielu języków obiektowych.


title: Co mogą zrobić procs i lambda, czego funkcje nie mogą w ruby?

text: Pracowałem w Rubim od kilku tygodni i doszedłem do tematu proc, lambd i bloków. Po przeczytaniu wielu przykładów z różnych źródeł, nie wiem, jak bardzo różnią się one od małych, wyspecjalizowanych funkcji. Jest całkiem możliwe, że przykłady, które przeczytałem, nie pokazują mocy proców i lambd. def zero_function(x) x = x.to_s if x.length == 1 return x = "0" + x else return x end end zero_lambda = lambda {|x| x = x.to_s if x.length == 1 return x = "0" + x else return x end } zero_proc = Proc.new {|x| x = x.to_s if x.length == 1 stawia x = "0" + x else stawia x end } ustawia zero_function(4) ustawia zero_lambda.call(3) zero_proc.call(2) Ta funkcja, proc i lambda zrób dokładnie to samo, tylko trochę inaczej. Czy jest jakiś powód, aby wybierać jednego, a nie drugiego?


title: Ile czasu poświęcić na szacowanie zadań programistycznych?

text: Na przykład, jeśli podzielę projekt na n oddzielnych produktów pracy (powiedzmy na klasy, funkcje lub komponenty), czy jest czas t taki, że n*t jest odpowiednią ilością czasu do poświęcenia na oszacowanie?


title: Czy lepiej zdefiniować wszystkie trasy w Global.asax niż osobno definiować obszary?

text: Pracuję nad projektem MVC 4, który będzie służył jako warstwa API większej aplikacji. Deweloperzy, którzy byli przede mną, utworzyli oddzielne „Obszary”, aby oddzielić różne żądania API (tj. „Wyszukiwarka”, „Klienci”, „Produkty” itd.). Zauważyłem, że każdy „Obszar” ma osobne klasy rejestracji obszaru, które definiują trasy dla tego obszaru. Jednak zdefiniowane trasy nie są specyficzne dla obszaru (tj. `{kontroler}/{akcja}/{id}` może być zdefiniowana nadmiarowo w kilku obszarach). Moim instynktem byłoby przeniesienie wszystkich tych definicji tras do wspólnego miejsca, takiego jak `Global.asax`, aby uniknąć nadmiarowości i kolizji, ale nie jestem pewien, czy mam rację.


title: Czy funkcje biblioteki C powinny zawsze oczekiwać długości ciągu?

text: Obecnie pracuję nad biblioteką napisaną w C. Wiele funkcji tej biblioteki oczekuje w swoich argumentach ciągu znaków jako `char*` lub `const char*`. Zacząłem od tych funkcji, które zawsze oczekiwały długości ciągu jako `size_t`, więc zakończenie zerowe nie było wymagane. Jednak podczas pisania testów skutkowało to częstym używaniem `strlen()`, jak na przykład: const char* string = "Ugh, strlen jest nudne"; libFunction(ciąg, strlen(ciąg)); Zaufanie użytkownikowi do przekazywania poprawnie zakończonych ciągów doprowadziłoby do mniej bezpiecznego, ale bardziej zwięzłego i (moim zdaniem) czytelnego kodu: libFunction("Mam nadzieję, że jest tam terminator zerowy!"); Więc jaka jest tutaj rozsądna praktyka? Uczynić interfejs API bardziej skomplikowanym w użyciu, ale zmusić użytkownika do zastanowienia się nad swoimi danymi wejściowymi lub udokumentować wymaganie ciągu zakończonego znakiem null i zaufać wywołującemu?


title: Gdzie sprawdzić poprawność reguł modelu domeny, które zależą od zawartości bazy danych?

text: Pracuję nad systemem, który umożliwia administratorom definiowanie formularzy zawierających pola. Zdefiniowane formularze służą następnie do wprowadzania danych do systemu. Czasami formularze są wypełniane przez człowieka za pośrednictwem GUI, czasami formularz jest wypełniany na podstawie wartości zgłoszonych przez inny system. Dla każdego Pola Administrator może zdefiniować Regułę Walidacji, która ogranicza dozwolone wartości dla Pola. Reguły walidacji mogą być dowolne, od „wartość wprowadzona w polu musi być prawda lub fałsz” do „wartość wprowadzona w polu musi istnieć w kolumnie A tabeli B w bazie danych”. Administrator może w każdym czasie zmienić Zasadę Walidacji dla Pola. W tym scenariuszu, które według Ciebie jest najbardziej odpowiednie miejsce do sprawdzenia, czy każde pole jest prawidłowo wypełnione? Obecnie mam na myśli dwa główne podejścia: **Opcja #1: Walidacja w modelu domeny** Każdy obiekt pola zawierałby regułę walidacji określoną przez administratora. Obiekty Field miałyby również odniesienie do IValidator. Gdy podjęta zostanie próba ustawienia wartości pola, Pole przekaże daną wartość i regułę walidacji do IValidatora. Jeśli podana wartość jest nieprawidłowa, zostanie zgłoszony wyjątek ValidationException i odpowiednio obsłużony w interfejsie GUI/interfejsie innego systemu. _Zalety:_ * Silna ochrona przed przypadkowym przypisaniem do pól wartości, które naruszają regułę walidacji _Wady:_ * Warstwa dostępu do danych musi być w stanie ominąć walidację i skonstruować pola, które naruszają obecną regułę walidacji. Pomimo zmiany przez Administratora reguły walidacji dla pola, nadal musimy mieć możliwość konstruowania obiektów pola na podstawie starych danych, np. podczas renderowania formularza, który został wypełniony lata temu. Potencjalnie można to rozwiązać, przechowując aktualną regułę walidacji za każdym razem, gdy przechowujemy pole. * W tym projekcie model pola ma pośrednie połączenie z warstwą dostępu do danych/repozytorium za pośrednictwem IValidatora. Wstrzykiwanie usług/repozytoriów do modeli domen wydaje się ogólnie niemile widziane. **Opcja #2: Walidacja w usłudze** Upewnij się, że wszystkie próby ustawienia wartości pola przechodzą przez usługę, która zapewnia przestrzeganie reguły walidacji. Jeśli reguła walidacji zostanie naruszona, zgłoś ValidationException. Oczywiście warstwa dostępu do danych **nie** korzystałaby z usługi podczas tworzenia obiektów pola, które zostały wcześniej utrwalone w bazie danych. _Zalety:_ * Nie narusza sposobu myślenia „nie wstrzykuj usług/repozytoriów do modeli domen”. * Nie ma potrzeby utrzymywania aktualnej reguły walidacji podczas utrwalania pola. Serwis może po prostu sprawdzić aktualną regułę walidacji dla pola; patrząc na dane historyczne, wartość pola nie ulegnie zmianie. _Wady:_ * Nie ma gwarancji, że cała logika, która powinna używać usługi do ustawiania wartości pola, faktycznie to robi. Widzę to jako główną wadę; wydaje się, że wystarczy, że ktoś napisze „thisField.setValue(thatField.getValue())” i reguła walidacji tego pola może zostać naruszona, nawet jeśli nikt nie będzie mądrzejszy. Potencjalnie można to złagodzić, upewniając się, że wartość pola jest zgodna z regułą walidacji, gdy warstwa dostępu do danych ma utrwalić pole. Obecnie wolę Opcję 1 od Opcji 2, głównie dlatego, że postrzegam to jako logikę biznesową i uważam, że Opcja 2 stwarza większe ryzyko wprowadzenia złych danych do systemu. Którą opcję wolisz, czy też istnieje inny projekt, który pasuje do tego scenariusza lepiej niż dwie opisane opcje? **Edytuj (złożoność walidacji)** Przypadki walidacji, które pojawiły się na razie, są stosunkowo proste; wartość pola musi wynosić np. numeryczną, datą, datą z godziną lub być istniejącą wartością w kolumnie bazy danych. Podejrzewam jednak, że złożoność stopniowo wzrasta z czasem. Na przykład rozwiązanie do walidacji musi być budowane z myślą o internacjonalizacji — takie elementy jak daty mogą być wprowadzane w składni specyficznej dla ustawień regionalnych. Postanowiłem na razie przejść do Opcji nr 1, starając się nie przypisywać zbyt wielu odpowiedzialności do Modelu Domeny. Osoby znajdujące się w podobnej sytuacji mogą również chcieć zapoznać się z powiązanymi pytaniami Walidacja i autoryzacja w architekturze warstwowej oraz Walidacja danych wejściowych - Gdzie? Ile?.


Zamiast bazy danych po prostu serializuję moje dane do formatu JSON, zapisując i ładując je na dysk w razie potrzeby. Całe zarządzanie danymi odbywa się w samym programie, co jest szybsze I prostsze niż przy użyciu zapytań SQL. Z tego powodu nigdy nie rozumiałem, dlaczego bazy danych są w ogóle potrzebne. Dlaczego warto korzystać z bazy danych zamiast po prostu zapisywać dane na dysku?


title: Aplikacja Client Server .NET z komunikatem kolejkowania

text: Jestem nowy, więc wybacz mi, jeśli moje pytanie jest błędne lub cokolwiek, po prostu daj mi alert, a chętnie to naprawię. Ja i mój zespół zamierzamy opracować system, w którym baza danych znajduje się na prywatnym serwerze, a aplikacje są rozprowadzane między klientami w odległej lokalizacji. W rzeczywistości jest to prosta aplikacja CRUD, ale naszym głównym zmartwieniem jest to, jak słabe połączenie internetowe na niektórych zdalnych klientach. Pomyślałem, że spróbuję wysłać wiadomość z kolejki WCF, aby po zerwaniu połączenia mogłem zapisać wiadomość, aby później wysłać ją ponownie, gdy będzie dostępna, ale nie mam na myśli naprawdę jasnego rozwiązania. Obecnie moje rozwiązanie wyglądałoby mniej więcej tak: > **CLIENT** > > **MySolution.sln** > > \-- **MyDataAccess** > > \---- Entities (zawiera moje definicje klas obiektów i właściwości) > > \---- Repozytoria (Obsługuje komunikację z bazą danych) > > \---- Usługi (Obsługuje kolejkę wiadomości do serwera CRUD) > > \-- **MyClassLibraries** (Zawiera zewnętrzne biblioteki DLL) > > \ -- **MyHelper** (Zawiera klasy i funkcje pomocnicze) > > \-- **MyCore** (Główny projekt aplikacji) > > \---- Model > > \---- Widok > > \-- -- ViewModel i dla serwera : > **SERVER** > > \-- **MyBackgroundService** (Odpowiedzialny za pobieranie wiadomości przychodzących i > wykonywanie CRUD do bazy danych) Czy jest lepsze rozwiązanie tego problemu? Nie jestem jeszcze wystarczająco dobry, żeby to zobaczyć. Daj mi znać, jeśli naruszam tutaj niektóre zasady. Twoje zdrowie !


title: Jak przechowywać cotygodniowe okresy czasu w obiektach Java?

text: Mój szkolny klub programistyczny przygotowuje program korepetycji. Mamy 12 korepetytorów, którzy specjalizują się w różnych językach, a każdy z nich jest dostępny przez inny zestaw godzin każdego dnia tygodnia. Chcę skonfigurować interfejs sieciowy, w którym uczniowie będą mogli wybrać język, w którym potrzebują pomocy, a następnie zobaczyć listę godzin, w których każdego dnia dostępny jest nauczyciel w tym języku, który może im pomóc. Moim głównym pytaniem w tym momencie jest to, jak powinienem zabrać się za przechowywanie danych o dostępności korepetytora - czy powinienem używać bazy danych (a jeśli tak, to w jaki sposób), czy po prostu przechowywać dostępność jako pola w obiektach POJO "Nauczyciel". Jeśli to drugie byłoby najlepsze, jakiego typu danych powinienem użyć? Czy mogę je uzyskać, po prostu przechowując je jako ciągi, czy też powinienem używać obiektów Data joda lub java.util? Zadanie, które w tym momencie wydaje mi się szczególnie trudne, to łączenie dostępności wielu korepetytorów w jeden przedział czasowy na każdy dzień – np. jeśli mam jednego korepetytora dostępnego od 10-2 i jednego dostępnego od 12-4, chcę pojedyncza linia z napisem „10-4” do zaprezentowania użytkownikowi. Dopiero zaczynam projektować swoje podejście do tego zadania, więc jestem bardzo otwarty na ogólne sugestie i/lub wytykanie mi nieprzewidzianych problemów. Chciałbym użyć Java JApplet jako mojego interfejsu internetowego.


title: Usługi w warstwie modelowej

text: Rozumiem, że usługi nie powinny mieć logiki stanu ani logiki biznesowej. * Jak możesz wdrożyć usługę taką jak AuthentificationService, biorąc pod uwagę te zasady? * Wszystkie metody w usłudze powinny być statyczne?


title: Czy warto przejść z technologii Microsoft na Linuksa, NodeJS i inne frameworki open source, aby zaoszczędzić pieniądze na start-up?

text: Obecnie angażuję się w startup, jestem jedynym programistą zaangażowanym w tej chwili, a pozostali faceci pozostawiają w tej chwili wszystkie decyzje technologiczne mnie. Na co dzień pracuję w software house, który na co dzień korzysta z technologii Microsoft, korzystamy z .NET, SqlServer, Windows Server itp. Jednak zdaję sobie sprawę, że jako startup musimy obniżyć koszty, a po krótkie spojrzenie na koszt hostingu dla Windows Byłem zszokowany, widząc niektóre ceny serwera dedykowanego. Najtańsze, jakie znalazłem, kosztowało 100 funtów miesięcznie. Ponadto, jeśli firma będzie musiała się skalować w przyszłości i będziemy potrzebować wielu serwerów, możemy skończyć na wydawaniu 10 funtów z tysięcy funtów rocznie na licencje SQL Server / Windows Server itp. Następnie rzuciłem okiem na cenę Hosting Linux dla serwera dedykowanego i zobaczyłem, że cena była znacznie niższa niż hosting Windows. Jedno miejsce oferowało maszynę z 2 rdzeniami za mniej niż 20 funtów miesięcznie. To skłoniło mnie do myślenia, że może najlepszym rozwiązaniem jest open source w Linuksie. Ponieważ piszę dużo JavaScriptu w pracy (w tej chwili pracuję nad jednostronicową aplikacją szkieletową), pomyślałem, że może NodeJS i framework sieciowy, taki jak Express, byłby fajny w użyciu. Wtedy pomyślałem, że zamiast używać SQL, dlaczego nie użyć otwartej bazy danych NoSQL, takiej jak MongoDB, która ma świetne wsparcie dla NodeJS? Moim jedynym zmartwieniem jest to, że część pracy, którą wykona aplikacja, będzie polegała na dynamicznym budowaniu obrazów i różnych innych rzeczy związanych z obrazami, tj. rzeczy, które są dość obciążające procesor - więc myślę o napisaniu czegokolwiek obciążającego procesor w C++ i zużywa go jako moduł w Node. To jest tło - ale czy Linux jest dobrym rozwiązaniem dla: 1. Hostingu strony NodeJS/Express? 2. Kompilowanie modułów węzłów C++? 3. Używasz bazy danych NoSQL, takiej jak MongoDB? A czy warto przejść na te nieznane technologie, aby zaoszczędzić pieniądze? * * * ## AKTUALIZACJA 3 MIESIĄCE Pracowałem nad tym przez ostatnie kilka miesięcy, więc pomyślałem, że dam aktualizację, jeśli ktoś jest zainteresowany. W końcu zdecydowałem się nie używać stosu NodeJS i Linuxa z prostego powodu czasu. Robię ten startup na boku, więc pracuję 9 godzin dziennie, potem wracam do domu i pracuję do późna na startupie. Pracując w ten sposób, muszę oczywiście maksymalnie wykorzystać swój czas, w przeciwnym razie nigdy nie wyślę produktu. Po skorzystaniu z kilku porad w tym wątku złożyłem wniosek o Microsoft BizSpark i zostałem zaakceptowany. Oznacza to, że mam teraz dostęp do licencji Visual Studio, licencji Windows Server itp., a wszystko to za darmo. Co jest niesamowite. Mam nadzieję, że do czasu, gdy będziemy musieli zacząć płacić za wszystko, przekażemy wystarczająco dużo, by nie było to problemem. Nie myśl jednak, że korzystam tylko z technologii Microsoft, ponieważ próbowałem używać rzeczy o otwartym kodzie źródłowym tam, gdzie to możliwe. Głównym miejscem, w którym to zrobiłem, jest moja warstwa danych, w której zdecydowałem się użyć PostgreSQL i MongoDB. Używam również BackboneJS na moim interfejsie. Poniżej znajduje się podsumowanie technologii/frameworków, których aktualnie używam: * Standardowe rzeczy DB: PostreSQL * Logowanie i magazyn danych: MongoDB * ORM: Entity Framework 5 * Podstawowe biblioteki: .NET (C#) * Web Framework: ASP.NET MVC3 * Interfejs użytkownika: silnik widoku Razor / BackboneJS


title: Wstawianie informacji o prawach autorskich

text: Jaki jest najłatwiejszy sposób umieszczania informacji o prawach autorskich w wielu plikach PHP. Nie da się tego zrobić ręcznie.


title: Jakich umiejętności szukałbyś u młodszego programisty offshore?

text: Załóżmy, że musisz przeprowadzić rozmowę kwalifikacyjną z deweloperem na stanowisko (nie starsze). Haczyk polega na tym, że deweloper nie pochodzi z Twojego kraju, a Twoja firma musiałaby zainwestować trochę pieniędzy i czasu, aby sprowadzić go do Twojego kraju. Musisz zrobić wywiad. Jakich umiejętności poszukiwałbyś u takiego kandydata? **Ze względu na kontekst** załóżmy, że jest to stanowisko programisty internetowego lub programisty komputerowego. Z góry dziękuję **EDYTUJ** : To pytanie jest związane z punktem widzenia _developer_, więc w tym przypadku odpowiedzi powinny być zorientowane na pomoc programistom, w których można oczekiwać...


title: Jak mam się uczyć PHP, mając tło w C#.NET?

text: Stworzyłem kilka stron i aplikacji w C#, a ostatnio zajmuję się tworzeniem strony w ASP.NET MVC. Szczerze mówiąc, trochę mnie to wkurzyło, ponieważ czuję, że nie mam żadnej wiedzy. Tak wiele rzeczy działa pod maską w .NET, że po prostu nie jestem w stanie się skoncentrować i zrozumieć, co zostało pozostawione programiście i jak te rzeczy są robione. Teraz pytanie, które skłoniło mnie do napisania tego posta, brzmi: **Jak mam postępować z nauką PHP z bardzo podstawowego punktu widzenia?** Pamiętaj, że nie mam pojęcia o tym języku, po prostu widziałem trochę kodu i słyszałem ludzi mówić.


title: Klasa refaktoryzacji (metody wyodrębniania) w klasach głównych/pomocniczych

text: Mówiąc najprościej, jedna z moich klas c# stała się zbyt duża i obecnie dzielę tę klasę na kilka podklas, grupując metody powiązane semantycznie (w rzeczywistości akcje, które powodują skutki uboczne). Oto przykład: class ViewModel { // wiele właściwości powiązanych z widokiem (wzorzec MVVM) public Property 1 //przypisany do widoku public Property 2 //przypisany do widoku // wiele akcji zawierających kontroler logika widoku //Zmiany funkcji 1 Właściwość 1 -> należy przenieść do klasy MyViewModelHelper Function1() {} To znaczy, gdy tworzę klasę pomocniczą dla viewModel, musi ona otrzymać referencję instancji głównego modelu widoku w swoim konstruktorze, dzięki czemu ma dostęp do właściwości publicznych. Nie chcę, aby widok miał wiedzę o klasach pomocniczych, to znaczy, że model widoku głównego powinien zapewniać wszystkie właściwości... ale funkcje powinny delegować pracę do klas pomocniczych, aby utrzymać klasę viewModel. Czy jest jakiś znany dodatek/narzędzie do Visual Studio, które może to zautomatyzować?


title: Czy ukrywanie informacji to coś więcej niż konwencja?

text: W Javie, C# i wielu innych silnie typizowanych, statycznie sprawdzanych językach przywykliśmy do pisania kodu takiego: public void m1() { ... } protected void m2() { ... } private void m2() { ... } void m2() { ... } Niektóre dynamicznie sprawdzane języki nie dostarczają słów kluczowych wyrażających poziom "prywatności" danego elementu klasy i zamiast tego opierają się na konwencjach kodowania. Python na przykład poprzedza prywatne składowe podkreśleniem: _m(self): pass Można argumentować, że dostarczanie takich słów kluczowych w dynamicznie sprawdzanych językach nie przyniosłoby większego pożytku, ponieważ jest sprawdzane tylko w czasie wykonywania. Jednak nie mogę znaleźć dobrego powodu, aby podawać te słowa kluczowe również w statycznie sprawdzanych językach. Uważam, że wymóg wypełniania kodu dość obszernymi słowami kluczowymi, takimi jak `protected`, jest zarówno denerwujący, jak i rozpraszający. Do tej pory nie byłem w sytuacji, w której błąd kompilatora spowodowany tymi słowami kluczowymi uratowałby mnie przed błędem. Wręcz przeciwnie, byłem w sytuacjach, w których błędnie umieszczony `zabezpieczony` uniemożliwiał mi korzystanie z biblioteki. Mając to na uwadze, moje pytanie brzmi: **Czy ukrywanie informacji jest czymś więcej niż konwencją między programistami używaną do definiowania, co jest częścią oficjalnego interfejsu klasy?** Czy można go użyć do zabezpieczenia tajnego stanu klasy przed atakiem ? Czy refleksja może zastąpić ten mechanizm? Co sprawi, że kompilator **wymusi** ukrywanie informacji?


title: Domyślny stan niewykorzystanej pamięci

text: W urządzeniu wbudowanym, podczas inicjowania lokalizacji pamięci, istnieje jakaś konwencja, która jest praktykowana. Mam na myśli, powiedzmy ustawienie każdego bajtu na zero lub 0xFF lub jakąkolwiek inną wartość.


title: Co sprawia, że jest dobry architekt/manager/lead developer?

text: Jestem głównym programistą w małej firmie programistycznej. W ciągu ostatnich dwóch lat mój zespół rozrósł się z jednego programisty (mnie) do grupy około dziewięciu osób. Większość z nas to bardzo kompetentni, starsi inżynierowie (ponad 20 lat doświadczenia w tworzeniu oprogramowania na osobę), więc na ogół konieczne jest bardzo mało trzymania się za rękę. Używamy Scrum do zarządzania naszymi wysiłkami i zwykle dużo robimy szybko przy minimalnych wymaganiach pisemnych. Wraz z rozwojem zespołu doszedłem do punktu, w którym trudno mi zachować nadzór techniczny nad całym projektem, jednocześnie pisząc znaczne ilości nowego kodu, więc nadszedł czas, abym dostosować swoją rolę. Jak mogę być najbardziej użytecznym dla zespołu, kiedy nie spędzam już większości czasu na rozwoju? **Moim celem jest umożliwienie mojej grupie dalszego rozwoju (tj. zwiększenie prędkości Scrum) poprzez dodanie większej liczby programistów** , więc nie chcę po prostu stać się „policją architektoniczną”, która narzuca zespołowi moją wolę. Innymi słowy, chcę być facetem, który pomaga sprawom działać lepiej/płytniej, a nie być facetem, który spowalnia sprawy, dodając niepotrzebną warstwę biurokracji. Jednak jednym z naszych głównych zagrożeń jest to, że sprawy wymkną się spod kontroli, jeśli dodamy więcej osób bez wystarczającej struktury, aby wszyscy byli na tej samej stronie. Jaki jest najlepszy sposób na osiągnięcie mojego celu?


title: Czy są jakieś wady strategii wersji Major.Minor.YMDD.Build?

text: Staram się wymyślić dobrą strategię wersji, aby dopasować się do naszych konkretnych potrzeb. Zaproponowaliśmy rozwiązanie tego problemu i chciałem zadać to pytanie, aby sprawdzić, czy czyjeś doświadczenie sugeruje unikanie tego lub zmianę w jakikolwiek sposób. Oto nasza propozycja: Wersje wydawane są w tym formacie: MAJOR.MINOR.YMDD.BN. Tutaj jest rozbite: * MAJOR i MINOR są typowe; zwiększymy MINOR, gdy uznamy, że kod i nowe zestawy funkcji to uzasadniają; najprawdopodobniej raz na kilka miesięcy. MAJOR będzie wzrastał ~rocznie. * YMDD: Y będzie ostatnią cyfrą bieżącego roku, więc „1” oznacza rok 2011, „2” oznacza rok 2012 itd. W celu zmniejszenia liczby (na przykład 9 zamiast 09) zostanie użyty miesiąc bez wypełnienia. . DD to oczywiście dzień uzupełniony zerem dla dni poniżej 10. * BN: BN to numer kompilacji i zwiększa się o jeden za każdym razem, gdy dokonamy zmiany w gałęzi kodu reprezentowanej przez kompilację, na przykład: Gdyby stwórz kompilację dzisiaj, naszym wydaniem będzie wersja 5.0.1707.1. Zwolnię do kontroli jakości dzisiaj i za 3 dni kontrola jakości wykryje, że zmiana zepsuła funkcję zapisywania na stronie. Zamiast zmieniać nasz obecny kod rozwojowy, wracam do kodu, którego użyłem do tworzenia wersji 5.0.1707.1, wprowadzam tam poprawkę, a następnie zwiększam część BN wersji, a następnie ponownie wydajem 5.0.1707.2 z powrotem do kontroli jakości. Krótko mówiąc, za każdym razem, gdy wprowadzana jest zmiana w rozgałęzionej wersji, która nie jest aktywną gałęzią deweloperską, użyjemy oryginalnego numeru wersji i zwiększymy tylko część BN (nawet jeśli zmiana nastąpiła 3 dni, 3 tygodnie lub 3 miesiące od pierwsze wydanie tej wersji). Za każdym razem, gdy tworzymy nowe wydanie z naszej gałęzi Active dev, wymyślaliśmy nową wersję opartą na M/D wydania przy użyciu przedstawionej strategii. Robimy to raz na 2-3 tygodnie. Czy są w tym dziury lub pułapki? Jeśli tak, jakie one są? Dzięki **EDYTUJ** Aby wyjaśnić jedną kwestię, że nie wyszło mi zbyt dobrze - październik/listopad/grudzień będzie dwucyfrowy, to tylko rok, który nie będzie. Tak więc 9 września, 10 października, 11 listopada itd.


title: umieszczając moje doświadczenie w programowaniu w moim CV

text: W swoim CV wymieniam siebie jako „7 lat praktycznego doświadczenia w programowaniu w C++”. Aby wyjaśnić, jestem samoukiem programistą C++ z kilkoma kursami uniwersyteckimi dodanymi do mieszanki. Pracowałem nad kilkoma małymi osobistymi projektami i uważam się za bardziej kompetentnego niż absolwent CS bez rzeczywistego doświadczenia w świecie rzeczywistym, chociaż w żadnym wypadku nie jestem ekspertem. Problem polega na tym... Ciągle otrzymuję telefony i e-maile od rekruterów, którzy widzą moje CV na stronach z ofertami pracy, pytają o moje zainteresowanie stanowiskami dla starszych programistów, kontraktami itp., do których czuję, że nie mam wystarczających kwalifikacji. Moje życiorys zawiera tylko 3 lata doświadczenia zawodowego (czyli wszystkie rzeczy związane z IT), więc kiedy pytają o moje wcześniejsze doświadczenie w C++, muszę wyjaśnić, że była to praca osobista, a nie zawodowa. Naprawdę chciałbym pracować jako programista, ale nie chcę zostać zatrudniony do czegoś, z czym nie mogę sobie poradzić, ani nie chcę przedstawiać się w złym świetle, próbując pokazać swoje mocne strony. Celowo wybrałem sformułowanie „praktyczne”, aby sugerować, że nie jest profesjonalne. Jak powinienem wyrazić moje doświadczenie C++ w moim CV, aby lepiej je wyjaśnić?


title: Czy XML, HTML/CSS, XSL są analogiczne do modelu, widoku, kontrolera?

text: Od jakiegoś czasu w projektach osobistych używam XSL do konwersji moich surowych danych XML na przyjazny dla człowieka HTML/CSS (w prostych projektach nie mam JavaScript, więc dla uproszczenia zostawmy to poza równaniem). Teraz próbuję zrozumieć wzorzec architektoniczny MVC (nie jest to moje pierwsze doświadczenie z nim, ale przejście od zrozumienia go w zasadzie do zrozumienia go wymaga trochę pracy) i zastanawiam się, czy istnieje analogia między tymi dwoma . * **XML** : model danych; nie ma złożoności/logiki pełnowymiarowego komponentu modelu, ale intencja wydaje się podobna * **XSL** : konwertuje surowe dane do przeglądania — wygląda jak kontroler * **HTML/CSS** (renderowane): widoczne dane wyjściowe Czy ta analogia pasuje? Co w nim pasuje, a co nie? (Przypuszczam, że jedną z różnic jest to, że w moim przykładzie nie otrzymuję żadnych danych wejściowych z powrotem z widoku — tylko produkuję dane wyjściowe).


title: Czy JPA zastąpiło CMP?

text: Bez wątpienia zbyt głupie prawo :) Natrafiłem na to na wikipedii > Java Persistence API zastępuje rozwiązanie trwałości EJB 2.0 CMP > (Container Managed Persistence). Rozumiem, że CMP nadal istnieje, tj. Pooling, transakcje itp. Można to zrobić za pośrednictwem CMP, gdzie JPA jest dla mnie ORM. Nie sądziłem, że są nawet to samo. Pomyślałem, że CMP VS JTA może mieć sens, ale oczywiście nie. Wiem, jak daleko jestem, ale dlatego tu jestem, może niektórzy pomogą mi spojrzeć na sprawy z innej perspektywy.


title: Czy obecne dowody potwierdzają przyjęcie kontekstowych modeli danych zamiast kanonicznych?

text: Idea „kanoniczna” jest wszechobecna w oprogramowaniu; wzorce, takie jak model kanoniczny, schemat kanoniczny, model danych kanonicznych i tak dalej, wydają się pojawiać w fazie rozwoju. Podobnie jak wielu programistów, często bezkrytycznie podążałem za konwencjonalną mądrością, że _potrzebujesz_ modelu kanonicznego, w przeciwnym razie staniesz w obliczu kombinatorycznej eksplozji maperów i tłumaczy. A przynajmniej robiłem to kilka lat temu, kiedy po raz pierwszy przeczytałem nieco niesławny głos EF w sprawie braku zaufania: > Hipotezy, które kiedyś wspierały poszukiwanie kanonicznych modeli danych > nie zawierały i nie mogły zawierać czynniki, które zostaną odkryte po > wdrożeniu pomysłu w życie. Przez lata prób i błędów odkryliśmy, że > używanie oddzielnych modeli dla każdego indywidualnego kontekstu, w którym może być używany model danych kanonicznych > jest najmniej złożonym podejściem, jest najmniej kosztownym podejściem i tym, które prowadzi do większej konserwowalność i > rozszerzalność aplikacji i punktów końcowych przy użyciu modeli kontekstowych, oraz > jest to podejście, które nie zachęca do entropii oprogramowania, jak robią to modele kanoniczne. Esej nie przedstawia żadnych dowodów na poparcie swoich twierdzeń, ale sprawił, że zakwestionowałem podejście CDM wystarczająco długo, aby wypróbować alternatywę, a powstałe oprogramowanie nie eksplodowało ani dosłownie, ani w przenośni. Ale to nie znaczy wiele w odosobnieniu; Mogłem mieć po prostu szczęście. Zastanawiam się więc, czy przeprowadzono jakieś poważne badania nad praktycznymi, długoterminowymi skutkami posiadania modelu kanonicznego w porównaniu z modelami kontekstowymi w systemie oprogramowania lub architekturze? Lub, jeśli jest zbyt wcześnie, by o to pytać, niech jacyś programiści/architekci napiszą o osobistych doświadczeniach przechodzenia z CDM na niezależne modele kontekstowe lub odwrotnie, i jakie były praktyczne skutki dla takich rzeczy, jak produktywność, złożoność lub niezawodność? A co z różnicami na różnych poziomach, tj. używanie tego samego modelu w jednej aplikacji vs. używanie go w systemie aplikacji lub w całym przedsiębiorstwie? (Proszę tylko o fakty; historie wojenne są mile widziane, ale bez spekulacji.)


title: Pliki metadanych Pythona i organizacja projektu

text: Mam projekt w Pythonie, w którym mam serwer. Serwer może mieć wiele różnych usług, ale nie wiem, co to jest, dopóki go nie uruchomię. Chcę, aby przeszukał dostępne pliki wtyczek, aby dowiedzieć się, jakie usługi są dostępne. W tej chwili robię to, po prostu mając pliki metadanych jako kod źródłowy Pythona i ładując go za pomocą imp.load_source. Moje pytanie brzmi, gdzie mam przechowywać te pliki metadanych? Pliki metadanych muszą zawierać informacje wskazujące na pliki w systemie plików. Na przykład jednym z programów potrzebnych do uruchomienia usługi jest program Java. Mam plik jar i sam go kompiluję, ale kiedy pracuję nad projektem, skompilowany plik trafia do katalogu build. Kiedy będę chciał zainstalować to na komputerze, będę musiał przechowywać pliki w innym miejscu. Chcę zachować oddzielny katalog źródłowy i katalog kompilacji (ponieważ ułatwia to czyste polecenie). Jaka jest standardowa praktyka, aby poradzić sobie z potrzebą plików metadanych i gdzie się znajdują? EDYCJA: Staram się kierować zarówno systemy Windows, jak i Linux (i mam nadzieję, że również systemy Mac, ale to mniej ważne). W przypadku Linuksa najważniejsze są główne dystrybucje (takie jak Fedora i Debian) i, miejmy nadzieję, inne (chociaż zależy to od tego, czy inni próbują go używać w dowolnej dystrybucji, ponieważ nie mogę przetestować ich wszystkich i będę testować tylko na Fedorze i Debianie ).


title: Renderowanie 3d chmury punktów z tablicy 2d x,y,z z teksturą

text: Potrzebujesz wskazówek dotyczących wyświetlania chmury punktów w 3D przy użyciu OpenGL w c++ (vs2008). Jestem zupełnie nowy w OpenGL i próbuję wyświetlić chmurę punktów 3D z teksturą. Mam 3 tablice 2D (każda tego samego rozmiaru 1024x512) reprezentujące x,y,z każdego punktu. Myślę, że jestem na dobrej drodze z glBegin(GL_POLYGON); for(int i=0; i<1024; i++) { for(int j=0; j<512; j++) { glVertex3f(x[i][j], y[i][j], z[i] [j]); } } glEnd(); Teraz to ładuje wszystkie wierzchołki w buforze (chyba), ale od tego momentu nie jestem pewien, jak postępować. Albo całkowicie się mylę. Następnie mam inną tablicę 2D (o tym samym rozmiarze), która zawiera dane kolorów (wartości od 0-255), których chcę użyć jako tekstury w chmurze punktów 3D i na wyświetlaczu. Rozumiem, że dla niektórych może to być bardzo podstawowa implementacja OpenGL, ale dla mnie jest to ogromna krzywa uczenia się. Tak więc wszelkie wskazówki, szturchnięcie lub kopnięcie we właściwym kierunku będą mile widziane.


title: Czy zadaniem programisty jest sugerowanie wymagań IT?

text: Jestem jedynym programistą pracującym nad aplikacją webową, która dobiega końca. Teraz zamierzamy zrobić to na żywo za może kilka miesięcy. Jest to aplikacja internetowa dla firmy spoza branży IT. Chociaż mają własny wewnętrzny zespół IT, zapytali mnie, jakie będą wymagania sprzętowe dla serwerów na żywo, np. RAM, 32-bitowy lub 64-bitowy. Czy wewnętrzny zespół IT nie powinien tego robić, czy ponieważ jestem jedyną osobą pracującą nad projektem, to moim obowiązkiem jest poinformowanie ich o konkretnych wymaganiach sprzętowych, które mogą mieć wpływ na wydajność projektu? Powodem, dla którego zadaję to pytanie, jest to, że wcześniej tego nie robiłem. Cały czas otrzymywałem serwer i prosiłem o wdrażanie na nim aplikacji. Nigdy nie przejmowałem się konfiguracją serwera itp.


title: Porada: Jak przekonać mojego świeżo upieczonego lidera zespołu do pisania kodu od zera

text: Pracuję w dość znanym MNC, a moduł, w którym pracuję, został przypisany do nowego "leada". Baza kodu jest dość duża (~130K lub więcej, z wzajemnymi zależnościami od innych modułów), ale stabilna - niektóre części z biegiem lat urosły brzydko, ale są w stanie roboczym. (Nasze produkty działają na nich od lat, nawet nowe). Problem polega na tym, że nasz lider chce przepisać kod _od zera_ , aby uwzględnić „drobniejszą szczegółowość i proaktywny projekt”. Wiem, że to niezbyt dobry pomysł, ale jak przekonać go / resztę zespołu (którzy są znacznie starsi ode mnie pod względem lat doświadczenia), nie brzmiąc zbyt pedantycznie (nie powinieneś przepisać , ponieważ Joel i inni mają jasne artykuły zabraniające tego)? Mam dobre stosunki robocze z zainteresowaną osobą i nie chcę ich zrujnować, ale też nie chcę być stroną decyzji, która z pewnością będzie nękać nas przez następne lata !! Jakieś sugestie dotyczące łagodniejszego, ale skutecznego podejścia? Nawet relacje o tym, jak sobie poradziłeś z taką sytuacją, bardzo by mi pomogły! EDYCJA: Baza kodu, o której mówię, nie jest produktem/GUI, ale na poziomie jądra ze wszystkimi krytycznymi funkcjami naszego produktu. Mam nadzieję, że teraz wiesz, dlaczego brzmię tak niespokojnie !!


title: Więcej obowiązków zawodowych, ale wciąż na poziomie podstawowym?

text: Obecnie pracuję dla dużej firmy produkcyjnej, która ma różne poziomy wynagrodzenia. W ciągu ostatnich 4 lat włożyłem sporo czasu i wysiłku w swoją pracę i udało mi się wywrzeć na tyle znaczący wpływ, że przenieśli mnie do nowego oddziału firmy, aby rozpocząć własną gałąź rozwoju oprogramowania dedykowaną służąc naszym międzynarodowym interesom. Wymagało to mnóstwa podróży i pracy w nocy ze względu na różnice w strefach czasowych. Chociaż jest to świetna okazja i brzmi imponująco dla moich przyjaciół/rodziny, nadal pracuję na najniższym możliwym poziomie wynagrodzenia. Zakładałem, że wraz ze wszystkimi dodatkowymi obowiązkami zawodowymi dostanę też jakiś awans. Czy to powszechne? Czy muszę mówić, aby uzyskać awans? Czy w ogóle na to zasługuję? Czy powinienem po prostu przeczekać? Zgubiłem się...


Właśnie rozmawiałem z przyjacielem. Powiedział, że w jego firmie osoby odpowiedzialne za kontrolę jakości dostają wyższą pensję niż deweloperzy, która średnio jest 2 razy wyższa. Jestem dość zaskoczony, bo myślałem, że osoby z QA dostaną niższą pensję niż deweloperzy (średnio). (prawdziwe wyznanie: moja firma nie ma działu QA) Więc, jaka jest pensja twojej firmy z QA w porównaniu do dewelopera? Czy to rozsądne, żeby dział QA dostawał wyższą średnią pensję niż dział rozwoju?


title: Rozpoczęcie drugiego stopnia licencjackiego

text: ## Trochę tła Zacząłem programować, gdy miałem około 10 lat i od tamtej pory naprawdę to pokochałem. W tym roku ukończyłem przeciętny uniwersytet z dyplomem CS w Europie Wschodniej, a dwa miesiące później dostałem ofertę pracy w Google w Mountain View jako inżynier oprogramowania. ## Problem jest z moim wykształceniem - kiedy przeszłam przez dowolny program nauczania z 10 najlepszych uniwersytetów w USA (wielu moich współpracowników pochodzi z takich uczelni) i obejrzałam niektóre z dostępnych online wykładów wideo z tych uczelni uczelniach i zadaniach, które ich studenci mieli podczas studiów, zauważyłem, że moja uczelnia nawet nie zbliża się do ich poziomu. Po prostu czuję, że marnuję czas na mojej uczelni, gdy widzę, że inni mają nieporównywalnie lepszy trening z CS. Powiedziałbym, że kursy na mojej uczelni pokrywały co najwyżej 30% tego, co robiła 10 najlepszych uczelni – pomimo posiadania identycznych zajęć. Po prostu mają lepszych nauczycieli, lepszy program nauczania, trudniejsze projekty, lepsze zasoby i zagłębiają się. Teraz czuję się całkiem komfortowo z rozwiązywaniem problemów algorytmicznych, ogólnie z programowaniem, ale wciąż - za każdym razem, gdy patrzę na którykolwiek z kursów licencjackich na tych uniwersytetach, znajduję wiele niuansów, które nie zostały uwzględnione na moich zajęciach. Niektóre z nich są znaczące, inne mniej. ## Pytanie Teraz będąc w USA, będąc w stanie finansowym i prawnym stać na opłacenie studiów licencjackich CS - czy warto iść na jeden z 10 najlepszych uniwersytetów w USA i ukończyć drugi stopień licencjata CS, aby wypełnić luki, które pozostały mój pierwszy stopień?


title: Dlaczego ochrona przed iniekcją SQL nie ma wysokiego priorytetu?

text: Na Stack Overflow widzę dużo kodu PHP w pytaniach i odpowiedziach, które zawierają zapytania MySQL, które są bardzo podatne na ataki SQL injection, mimo że podstawowe obejścia są powszechnie dostępne od ponad dekady. Czy istnieje powód, dla którego tego typu fragmenty kodu są nadal używane?


title: Javascript MVC w zasadzie

text: Załóżmy, że chcę zaimplementować `MVC` w JavaScript. Nie pytam o frameworki MVC. Pytam jak to zbudować _w zasadzie_. Rozważmy stronę wyszukiwania w witrynie e-commerce, która działa w następujący sposób: * Użytkownik wybiera produkt i jego atrybuty i naciska przycisk „szukaj”. * Aplikacja wysyła zapytanie do serwera, otrzymuje listę produktów. * Aplikacja wyświetla listę na stronie internetowej. Myślę, że _Model_ przechowuje `Query` i listę obiektów `Product` i "publikuje" takie zdarzenia jak "zapytanie zaktualizowane", "zaktualizowana lista produktów" itp. _Model_ nie jest świadomy DOM i serwera, ani kursu. _View_ przechowuje całe drzewo DOM i „subskrybuje” zdarzenia _Model_ w celu aktualizacji DOM. Poza tym "publikuje" takie zdarzenia jak "użytkownik wybrał produkt", "użytkownik nacisnął przycisk wyszukiwania" itp. _Kontroler_ nie przechowuje żadnych danych. "Subskrybuje" zdarzenia _View_, wywołuje serwer i aktualizuje _Model_. Czy ma sens?


title: projektowanie aplikacji na dużą skalę w języku niskiego poziomu

text: Od jakiegoś czasu uczę się C, ale nadal nie rozumiem projektowania dużych programów w C (duża aplikacja, taka jak jądro Linuksa). Przechodząc z Javy, gdzie masz zajęcia, trudno jest zrozumieć, jak zaprojektować dużą aplikację w C. Jakie porady/linki mogą doradzić ludzie od przejścia z języka wysokiego poziomu do projektowania aplikacji w języku niskiego poziomu, takim jak C?


title: Pytanie dotyczące praw autorskich dotyczące tworzenia podobnej aplikacji

text: Klient chce, żebym zbudował wtyczkę Wordpress podobną do aplikacji na Windows Phones. Chociaż aplikacja, którą zbuduję, będzie się różnić pod wieloma względami (np. Interfejs użytkownika, logo, grafika i kilka innych funkcji), ale podstawowe funkcje będą podobne do aplikacji obecnie dostępnej na Windows Phone. Robię to jako niezależny projekt. Chciałbym wiedzieć, kiedy skończę tworzenie i wyślę pliki do klienta, a także w przypadku, gdy pierwotny właściciel aplikacji na platformie Windows wyjdzie i powie, że wtyczka Wordpress ma wiele funkcji z ich aplikacji. Kto miałby kłopoty? Czy może wnieść sprawę przeciwko mnie, czy tylko mój klient zostanie pociągnięty do odpowiedzialności, ponieważ będzie właścicielem wszystkich praw po tym, jak wyślę mu akta i dokona płatności. Aktualizacja : dziękuję za wszystkie uwagi i pomoc. Bardzo doceniane. Aby wyjaśnić niektóre z postawionych pytań: 1. Tak, jest to projekt pracy na zlecenie. 2. Umowa freelancera mówi, że wszystkie prawa i pliki, w tym kod źródłowy, muszą zostać przeniesione na klienta po dokonaniu płatności, a następnie jest on właścicielem całego kodu i aplikacji. 3. Aplikacja, która ma zostać stworzona, jest aplikacją użytkową, ale nie jestem pewien, jak powszechna jest tego rodzaju aplikacja i czy naprawdę mogę ją odnieść do przykładu aplikacji księgowej. 4. Piszę własny kod, nie mam dostępu do oryginalnego źródła aplikacji


title: View wywołuje metodę konstruktora w modelu zamiast przekazywania modelu do metody kontrolera

text: Problem polega na tym, że właściwość UserTypes (używana do wypełniania listy rozwijanej w widoku AddUser) nie jest zachowywana po POSTback formularza. **Oto mój AddUserModel:** (który dziedziczy po EditUserModel, który nie ma właściwości dla UserTypes/UserTypesSelectList - prawdopodobnie część problemu?) public class AddUserModel : EditUserModel { public AddUserModel() : this(new Dictionary<string, string>()) { } public AddUserModel(Dictionary<string,string> userTypes) { UserTypes= userTypes; } //properties etc public Dictionary<string, string> UserTypes{ get; zestaw prywatny; } public SelectList UserTypesList { get { return new SelectList(UserTypes, "klucz", "wartość"); } } } **Widok ma następujące**, ale najpierw wywołuje konstruktor bez parametrów w powyższym kodzie zamiast metody AddUser() w kontrolerze: using (Html.BeginForm<MyController>(c => c.AddUser() Model) Widzę podczas debugowania, że dzieje się tak, ponieważ metoda konstruktora bez parametrów w AddUserModel jest wywoływana jako pierwsza zamiast wywoływanej metody kontrolera (co tworzy instancję pustego AddUserModel).Znalazłem to pytanie na tej stronie, ale nadal nie rozumiem .Debugowanie pokazuje, że po POSTback formularza AddUserModel nie zawiera danych, ale EditUserModel zawiera dane (z wyjątkiem danych UserType, ponieważ nie ma do tego właściwości) Czy modele Add i Edit powinny mieć te same właściwości? tj. UserTypes i UserTypesSelectList?Czy jest coś, czego mi brakuje, jeśli chodzi o to, jak modele dziedziczą po sobie i odnoszą się do widoków?**Edytuj** Po odrobinie badań i podjęciu decyzji o użyciu wspólnego model udało mi się naprawić ww. Proszę zapoznać się z moją odpowiedzią, aby uzyskać więcej informacji.