title: Pracujesz w zespołach? jak podzielić zadania programistyczne? Czy specjalizacja jest koniecznością?

text: Obecnie jestem programistą specjalizującym się w javascript (głównie jquery) i css. Innymi słowy. Moja główna praca jest zawsze wykonywana po stronie klienta. Jednak znam podstawowe rzeczy o mysql i PHP. Niedawno mój przyjaciel, który ma bardzo małą wiedzę na temat PHP (nie jest programistą, ale chce nim zostać) powiedział mi, że chciałby wspólnie rozpocząć projekt. Powiedziałem mu, że podoba mi się projekt, więc zaczęliśmy dzielić „zadania”. Pomyślałem, że najlepiej by było, gdyby specjalizował się w projektowaniu i zarządzaniu bazami danych (SQL), a także w PHP, więc byłbym silny „po stronie klienta”, a on byłby silny „po stronie serwera”. Mam jednak wiele obaw związanych z tym podejściem. Co byś zrobił? To nie tak, że chcę całą pracę dla siebie, bo chociaż mam dużo większe doświadczenie, ten gość ma sporo rozumu i wkrótce się wszystkiego nauczy. Dlatego pomyślałem, że powinien nauczyć się SQL. Jak podzieliłbyś zadania? Obawiam się też, ile pracy będziemy mieli, ponieważ ten projekt bardzo korzysta z AJAX. Każda pomoc lub rada jest mile widziana.


title: Jakie dobre pytania (i dobre/złe odpowiedzi) należy zadać podczas rozmowy kwalifikacyjnej, aby ocenić kompetencje firmy/zespołu?

text: > **Możliwy duplikat:** > Jakie pytania zadajesz na temat firmy przed podjęciem decyzji o pracy w niej? Jestem już zaznajomiony z testem Joela, ale z mojego doświadczenia wynika, że niektóre z pytań mają odpowiedzi „masowane”, aby firma wydawała się lepsza niż jest. Miałem w przeszłości kilka zadań, które na przykład twierdziły, że mają proces kontroli jakości i przeprowadzają testy jednostkowe, a tak naprawdę mieli na myśli: „Programiści testują aplikację i testują za pomocą debugera oraz metodą prób i błędów ."; powiedzieli, że używają SVN, ale po prostu wrzucili wszystko do jednego gigantycznego repozytorium i nie mieli pojęcia o rozgałęzianiu/scalaniu ani niczego bardziej skomplikowanego niż aktualizowanie i zatwierdzanie; powiedzieli, że mogą budować w jednym kroku, a tak naprawdę mają na myśli „jeden krok”, aby ręcznie skopiować dziesiątki plików z komputera programisty na działający serwer. Jak właściwie oceniać środowisko firmy, aby upewnić się, że jest to dobrze rozwinięta firma i nie trzymać się robienia rzeczy w określony sposób, ponieważ robili to od lat i nie są świadomi zmian? Prawie nigdy nie możesz poprosić o wyświetlenie ich kodu źródłowego, więc utkniesz, próbując dowiedzieć się, czy odpowiedź ankietera jest dokładna, czy też BS, aby firma wyglądała na dobrą. Oprócz testu Joela, jakie są inne dobre pytania, aby uzyskać właściwe wyczucie firmy, a co ważniejsze, jakie są dobre i złe odpowiedzi, które mogą wskazywać na dobrą lub złą firmę? Mam na myśli coś takiego (proszę za dobrą monetę, tylko tyle mogłem wymyślić w krótkim czasie): _Pytanie:_ W jaki sposób zespół programistów stosuje zasady SOLID i odwrócenie kontroli w swoim kodzie? _Dobra odpowiedź:_ Stosujemy się do SOLID wszędzie tam, gdzie to możliwe; używamy TDD, więc zmusza nas to do pisania abstrakcyjnego, testowalnego kodu. Używamy Ninject do naszego kontenera IoC, ponieważ jest on dość łatwy w konfiguracji – to było to lub StructureMap, ale uważam, że Ninject jest nieco bardziej intuicyjny, a kto nie lubi ninja? Nie jesteś piratem, prawda? _Zła odpowiedź:_ Nasz kod jest całkiem bezpieczny, tak. A co to za inwersja kontroli? Nigdy wcześniej o tym nie słyszałem. Widzisz, co tam zrobiłem. „Dobra” odpowiedź opiera się na faktach i ma trochę humoru „w tłumie”; zła odpowiedź wskazuje na całkowitą ignorancję pytania - niekoniecznie złą rzeczą, jeśli przeprowadzasz wywiad na stanowisko kierownika/dyrektora, ale straszną odpowiedź i ogromną czerwoną flagę, jeśli przeprowadzasz wywiad jako programista i rozmawiasz ze starszym programistą lub menedżer! Moim największym problemem w tej chwili jest to, że potrafię przyjąć ogólną odpowiedź i ocenić, czy jest to dobra czy zła odpowiedź; najczęściej jest to zły rodzaj i czuję się sfrustrowany prawie od pierwszego dnia w nowej pracy. Przypuszczam, że mógłbym upuścić nazwę, jeśli zapytam o konkretne rzeczy (np. „Czy piszesz testy jednostkowe?”, a jeśli odpowiedź brzmi tak, zapytaj, czy używają NUnit, MbUnit lub czegoś innego; jeśli wspominają o dostępie do danych, zapytaj, czy używają czysty ORM, taki jak NHibernate lub coś bardziej połączonego, jak EF lub Linq), ale czy istnieje inny sposób, by nie być zdecydowanym, aby faktycznie przeprowadzić rozmowę kwalifikacyjną na temat rzeczy (co prawie na pewno spowoduje nie dostanie pracy, ale jeśli pomijają to pytanie, prawdopodobnie nie praca, której chcę).


title: Języki w życiorysie: Czy lepiej wstawić „C/C++” czy „C, C++”?

text: Za kilka tygodni kończę szkołę, a moje CV (zgodnie z oczekiwaniami) zawiera listę języków, z którymi miałem do czynienia. Wcześniej umieściłem **"C/C++"** , jednak wtedy nie miałem _tak_ dużego doświadczenia z tymi dwoma językami jak teraz. Teraz, kiedy formalnie nauczyłem się tych dwóch języków, stało się oczywiste dla mnie (i każdego, kto naprawdę je zna), że są one jednocześnie podobne, a jednocześnie zupełnie niepodobne. Oczywiście, większość kodu C jest kompilowalnym kodem C++, ale składnia i włączanie funkcji bibliotecznych są w dużej mierze tam, gdzie te podobieństwa się kończą. W większości nietrywialnych problemów istnieje prawdopodobieństwo, że pożądane rozwiązanie C++ będzie inne niż pożądane rozwiązanie C. ### Moje pytanie: Czy rekruterzy zwrócą uwagę na to, czy umieścisz **"C/C++"** zamiast **"C, C++"**? Czy przyjmą brak wiedzy na temat działania z powodu włączenia pierwszej formy, czy może zobaczą włączenie drugiej formy jako potencjalnego „wznowienia beefer” (wymieniając je jako 2 języki zamiast „jednego”) ? Co więcej, w przypadku stanowisk, do których aplikowałeś, a które były szczególnie zainteresowane tymi dwoma językami, czy proces rozmowy kwalifikacyjnej zawierał pytania o różnice między programowaniem w C i C++ (a więc o rzeczywiste techniki programowania, a nie tylko o dodatkowe paradygmaty w tym drugim) )?


title: Czy to dobry wzór, że żaden przedmiot nie powinien wiedzieć więcej niż to, co powinien wiedzieć?

text: Wdrażam klasę kontrolera do zarządzania widokiem. Mam klasę programu do przesyłania plików, Grabber, która może komunikować się na dwa sposoby: 1) Zaoferuj kontrolerowi pewnego rodzaju powiadomienie o rozpoczęciu i zakończeniu przesyłania 2) Podaj właściwość Grabbera, która wskazuje prawdę lub fałsz, jeśli przesyłanie zostało zakończone Obawiam się, że przy opcji 2) wprowadzam zależność między kontrolerem a Grabberem. Jaki jest tu lepszy projekt?


title: Jeśli OWIN jest używany na komputerach PC i Mac (mono), to jaka jest abstrakcja dla oświadczeń i uwierzytelniania?

text: Jeśli implementacja OWIN na komputerze PC to Katana, a OWIN nie definiuje abstrakcji uwierzytelniania (lub autoryzacji)*, to: * Jaka jest abstrakcja uwierzytelniania (pliki cookie, formularze, OAuth, SAML itp.)? *Pochodzi z MSFT Jabbr Room na SignalR i OWIN


title: Kolejność poziomów posortowane drzewo binarne z drzewa binarnego

text: Załóżmy, że mamy drzewo binarne. Struktura węzłów drzewa ma postać węzła struktury { int val ; węzeł struktury *w lewo , *w prawo ; } Teraz musimy posortować drzewo w kolejności poziomów. Na przykład załóżmy, że mamy oryginalne drzewo takie jak to root = 6 root->left = 1 root->right = 9 root->left->left = 8 root->right->right = 2 Następnie po zastosowaniu sortowania według kolejności poziomów , naszym drzewem będzie root = 1 root->left = 2 root->right = 6 root->left->left = 8 root->right->right = 9 Jednym ze sposobów rozwiązania tego problemu jest po prostu wzięcie wszystkich wartości w tablicę i zastosować dowolny ze standardowych algorytmów sortowania, a następnie umieścić wartości z powrotem w drzewie w kolejności przechodzenia przez poziomy. To rozwiązanie nie jest efektywne zarówno pod względem przestrzeni, jak i czasu. Jakiego algorytmu mogę użyć, aby zmniejszyć operacje i zużycie pamięci z proponowanego planu? Czy istnieje bardziej wydajny algorytm, aby to zrobić bez użycia posortowanej tablicy? **Sortowanie według kolejności poziomów :** Sortowanie według kolejności poziomów oznacza, że jeśli wykonujesz przechodzenie według kolejności poziomów w drzewie, powinieneś otrzymać posortowaną sekwencję nie malejącą . **Ograniczenie :** Kształt drzewa nie powinien się zmieniać tzn. jeśli w oryginalnym drzewie lewe dziecko korzenia nie ma odpowiedniego dziecka (jak w moim przykładzie) to po posortowaniu też nie powinno mieć właściwego dziecka .


title: Jaki jest najlepszy sposób na wprowadzenie stworzonego przez Ciebie oprogramowania?

text: Jak najlepiej przedstawić światu aplikacje tworzone przez programistów? W przypadku aplikacji mobilnych masz różne rynki, ale co z aplikacjami niemobilnymi? Mogą to być aplikacje internetowe lub aplikacje komputerowe. Wprowadzenie = dystrybucja wśród użytkowników końcowych oraz popularyzacja wśród społeczności programistów. Oczywiście wydawane oprogramowanie ma na celu konkretną grupę odbiorców (tj. witrynę internetową opartą na społeczności lub aplikację opartą na użytkownikach w porównaniu z narzędziem, z którego mogliby korzystać programiści).


title: Czy obietnice są odpowiednie dla komunikacji ze sterownikiem modelu?

text: Mam aplikację Express zbudowaną z generatora pełnego stosu Yeoman Angular, aby zbudować interfejs API do wysyłania JSON do Angular. Próbuję wypracować najlepszy sposób przekazania informacji z mojego modelu do kontrolera, w kontrolerze może nastąpić dalsze przetwarzanie. Obecnie korzystam z obietnic. Czuję się nieswojo, że mój model zwraca obietnicę kontrolerowi. Czy powinienem? Obecnie mój Model wygląda tak: function returnCountries(lim, offset) { var obietnica = new Promise(function(resolve, remove) { //SQL to tylko przykład connection.query('SELECT * FROM countries LIMIT 1', function( błąd, wynik) { return resolve(result); }); }) return obietnica } function returnCountry(countryID) { //jeszcze nie zaimplementowane } module.exports = { "returnCountries": returnCountries, "returnCountry": returnCountry } I kontroler wygląda tak: var Country = require('./country.model'); // Pobierz listę krajów exports.index = function(req, res) { Country.returnCountries().then(function(countries){ return res.json(200, countries); })


title: Czy ktoś przygwoździł zarządzanie zależnościami?

text: Do instalacji oprogramowania używałem różnych narzędzi do zarządzania zależnościami: homebrew, cabal, rubygems itp. Niezmiennie, pomimo czyichś prostych instrukcji dotyczących instalacji pakietu, zdarzają się sytuacje, kiedy menedżer pakietów nie rozwiązuje zależności i instalacja kończy się niepowodzeniem . To jest bardziej powszechne niż powinno być. I frustrujące! W końcu próbujesz rozwiązać problem z procesem instalacji, co moim zdaniem jest czymś, czego użytkownicy (nawet jeśli są programistami) nie powinni robić. To jeden z powodów, dla których ludzie powalają Linuksa (który uwielbiam!) w porównaniu do Windowsa: instalacje mogą wiązać się z komplikacjami. Użytkownicy systemu Windows nie mają za zadanie kompilowania kodu źródłowego. Czy ktoś zna narzędzie do zarządzania zależnościami (lub strategie zarządzania zależnościami), które odniosło szczególny sukces w eliminowaniu wstrząsów związanych z instalacjami? Oczywiście niektórzy menedżerowie pakietów muszą być lepsi od innych. Czy też pozostaje to nierozwiązanym problemem?


title: Czy jest coś przełomowego w NoSQL?

text: Jestem bardzo solidnym facetem od relacyjnej bazy danych i rozumiem całą drogę do trzeciej formy normalnej, doceniam algebraiczne korzenie teorii mnogości SQL i prawdopodobnie potrafię relacjonalizować złamane serce (lub nie). Nie wymyśliłem struktury relacyjnej bazy danych NA wieczory randkowe z moją żoną, ale myślałem o projektach relacyjnych baz danych NA wieczorach randkowych z moją żoną. Teraz słyszę o NoSQL i badam go. Przechodząc do sedna, czy jest coś w NoSQL, co jest przełomowe, matematycznie nowatorskie, albo podejście typu „hej, tak naprawdę nie musisz organizować swoich danych w sposób relacyjny, to jest o wiele łatwiejsze”? Czy NoSQL jest jak super powłoka dla struktury danych? Moim zdaniem dane muszą ostatecznie mieć strukturę, aby można je było pobrać, a pobieranie musi być zdefiniowane w jakimś języku.


title: Cechy, dziedziczenie i interfejsy w Groovy, kiedy ich używać?

text: Uczę się groovy i właśnie dowiedziałem się o nowej funkcji dodanej w wersji 2.3, którą jest dodanie _Cechów_. Teraz wydaje mi się, że cechy pozwalają zrobić w zasadzie wszystko, co może zrobić superklasa i interfejs. Czy dodanie cech do Groovy sprawia, że dziedziczenie i interfejsy stają się przestarzałe? A jeśli nie, to jaki jest najlepszy czas na wykorzystanie każdego z tych mechanizmów?


title: Czy istnieją jakieś ograniczenia idealistycznej aplikacji internetowej HTML5?

text: Załóżmy, że następujące dwa założenia są prawdziwe. * Cała Twoja baza użytkowników ma dostęp szerokopasmowy _wszędzie_ * Istnieje wyimaginowana przeglądarka X, która implementuje całą roboczą specyfikację grup HTML5 i WHATWG, spójnie i wszyscy użytkownicy korzystają z przeglądarki X. Jakie są _wewnętrzne_ ograniczenia komercyjnej publicznej aplikacji internetowej HTML5, którą stosujemy potrzebujesz komercyjnych publicznych aplikacji desktopowych? Interesują mnie ograniczenia aplikacji internetowych bez wtyczek, które nie polegają na mostkach Flash/Java/SilverLight/etc w celu uzyskania dodatkowych funkcji ani nie polegają na wtyczkach przeglądarki w celu uzyskania dodatkowych funkcji. **Możliwe ograniczenia, które nie mają zastosowania:** * Bazy danych? Mamy WebSQL i indexedDB. * Plik IO? Mamy API plików HTML5, które wykonuje zarówno czytanie, jak i pisanie. * Prędkość? Dzięki niedawnemu wyścigowi silników JavaScript przeglądarka nie jest już wolna. Natywny C++ jest tylko 3 razy szybszy niż silnik V8 chrome. * Narzędzia programistyczne? Sieć dojrzała i dostępna jest cała gama narzędzi, których jest zbyt wiele, by je wymieniać. * Zamknięte źródło? Tak, cały kod jest open source. Jest to miecz obosieczny i istnieje wiele opinii na temat korzystania z zamkniętego lub otwartego kodu źródłowego. Osobiście uważam, że zalety otwartego kodu źródłowego przeważają nad wadami. * JavaScript/HTML5? Argumenty w stylu „Osobiście uważam, że HTML5 i EcmaScript to okropne platformy programistyczne” nie liczą się. **Znane ograniczenia:** * Krytyczny kod czasu rzeczywistego / bezpieczeństwa (ściśle tajne) nie należy do sieci i nie może. Musi być napisany w niskopoziomowym, wysoce kontrolowanym języku, takim jak C lub C++. * Każde narzędzie, które musi komunikować się z zewnętrznym sprzętem innej firmy podłączonym do twojego komputera, będzie miało trudności z komunikowaniem się z twoją aplikacją internetową. Istnieje również cały zestaw programów, które nie należą do sieci. Systemy operacyjne, sterowniki, oprogramowanie serwerowe, API niskiego poziomu. Zdaję sobie z tego sprawę, ale nie klasyfikuję ich jako „komercyjne publiczne” aplikacje, to rodzaj oprogramowania, które można preinstalować na komputerach. Na marginesie wiem, że te dwa założenia są strasznie nierealne, ale możemy je osiągnąć za 5/10/20/30 lat. Interesuje mnie rodzaj aplikacji i cechy aplikacji, które sprawiają, że są one _całkowicie niekompatybilne_ z siecią. **Motywacja:** * Aplikacje Google * Microsoft Office365 * Lista aplikacji internetowych * Adobe Aviary **Punkt:** Biorąc pod uwagę zestaw problemów, w których aplikacja desktopowa jest poprawnym rozwiązaniem. * Dlaczego aplikacja internetowa nie jest prawidłowym rozwiązaniem? * Jak mogę określić, czy mogę użyć aplikacji internetowej jako rozwiązania. Próbowałem usunąć główne problemy z aplikacjami internetowymi (łącze internetowe i obsługa przeglądarek) poprzez zapewnienie, że nie istnieją. Co więcej, aplikacje offline HTML5 i Modernizr są na dobrej drodze do rozwiązania obu tych problemów. Jakie są inne trudności z tworzeniem aplikacji internetowych?


title: W jaki sposób testowanie wydajności jest zintegrowane z cyklem życia produktu?

text: Czy przeprowadzasz testy wydajności w powtarzalny i zautomatyzowany sposób? Czy uruchamiasz go jako część kompilacji CI? Jakich narzędzi używasz? Jak dostrzegasz zmiany w trendach? Szukam poradników i opisów działających konfiguracji do kompleksowych automatycznych metod testowania wydajności.


title: Z jakich powodów powinienem zachować czystość sekcji "używanie" w C#?

text: Kiedyś, kiedy refaktoryzowałem mój kod, przeszedłem IDE do sekcji **using** mojej klasy C# i wyczyściłem _nieużywane przestrzenie nazw_ i _duplikaty przestrzeni nazw_ i posortowałem je wszystkie. Moja para (programowanie w parach) zapytała mnie o powód. Nie miałem pojęcia, dlaczego to zrobiłem. Zrobiłem to z przyzwyczajenia, aby cały mój kod był czysty i uporządkowany. To znaczy, powiedziałem mu, że posiadanie czystszego kodu jest ogólnie dobrym pomysłem, ale oczywiście ten powód nie był dobrym usprawiedliwieniem, ponieważ nawet nie zawracam sobie głowy spędzaniem czasu w sekcji **używanie** żadnego Strona kodowa C#. Ponieważ wiele razy przenosisz klasę lub enum (lub typ w ogóle) z jednej przestrzeni nazw do innej przestrzeni nazw, a to dodaje nowe instrukcje using do twojego kodu (albo ręcznie, przechodząc w górę okna kodu i samodzielnie pisząc instrukcję, lub przez edytor za pomocą kombinacji Alt+Ctrl+F10), a ponieważ te nowe **instrukcje using** zostałyby dodane na końcu **using section** , co sprawia, że nie są one sortowane alfabetycznie, a kompilator nigdy nie skarży się na żadne z tych problemów, dlaczego powinniśmy dbać o czystość i porządek w tej sekcji? Jakie możemy mieć powody?


title: Jakie jest twoje podejście do programowania wieloparadygmatycznego?

text: Niedawno uczyłem się Ruby i miałem następujące doświadczenie. Napisałem małe narzędzie zawierające około 200 linijek kodu i jako niedoświadczony programista Rubiego użyłem kilku pętli do zbudowania tablic z innych tablic. Np. gs = ... # Jakaś tablica danych wejściowych. l = gs.size i = 0 r = Array.new while (i < l) do if (cond(gs[i])) r.push(gs[i]) end i = i + 1 end # r zawiera wynik teraz. Potem odkryłem, że mogę to zrobić w stylu funkcjonalnym: gs = ... # Jakaś tablica r = gs.select { |g| cond(g) } # r zawiera teraz wynik. Więc natychmiast zastąpiłem większość moich pętli w kodzie konstrukcjami takimi jak each, select, take_while, drop_while i tak dalej. Postanowiłem używać funkcjonalnego stylu w Ruby, kiedy tylko jest to możliwe i staram się unikać stylu imperatywnego. Jako inny przykład, w C++ mam tendencję do używania klas i metod wszędzie i używam funkcji tylko do małych zadań użytkowych, które są prywatne dla implementacji jakiejś klasy. Więc mam tendencję do myślenia obiektowego podczas pracy w C++ i prawie całkowicie unikam stylu proceduralnego. Ogólnie rzecz biorąc, pracując nad danym projektem w danym języku, wybieram jeden paradygmat i trzymam się go w całym projekcie: uważam, że dzięki temu mój kod jest bardziej jednolity, łatwiejszy do odczytania i debugowania, co, IMO, jest bardzo ważne, szczególnie dla kodu produkcyjnego. Często jednak myślę, że może powinienem więcej zgłębić i wypróbować różne możliwości, jakie daje język, m.in. stosuj różne paradygmaty i wypróbuj różne rozwiązania. Dla mnie wiąże się to z pewnym obciążeniem zarówno podczas kodowania (czy powinienem uczynić to proceduralnym lub obiektowym? imperatywem czy funkcjonalnym?), Jak i podczas przeglądania lub debugowania kodu (co chciałem tutaj zrobić?) Ze względu na zwiększoną złożoność. Więc moje pytanie brzmi: czy masz tendencję do wybierania preferowanego paradygmatu programowania podczas kodowania i trzymania się go, czy też masz tendencję do eksplorowania więcej i mieszania różnych paradygmatów? Jeśli mieszasz różne paradygmaty, czy masz wrażenie, że jest jakiś narzut, jeśli chodzi o szybkość pisania i debugowania kodu (zwiększona złożoność, przełączanie między różnymi nastawieniami), czy jest to tylko kwestia nauczenia się, jak to zrobić, a następnie możesz być nawet bardziej produktywny? A może mieszasz różne paradygmaty w bardziej ustrukturyzowany sposób, np. stosujesz każdy paradygmat do określonej klasy problemów (np. funkcjonalne dla zapytań, zorientowane obiektowo dla aspektów architektonicznych itd.)?


Czy wszystkie języki skryptowe są pisane dynamicznie? Używam TCL. Jest to język skryptowy i nie wymusza ani nie zezwala na delarację typów zmiennych. Zamiast tego jest to język dynamicznie typowany z kaczym pisaniem. Interpreter przyjmuje typ zmiennej zgodnie z przypisaną jej wartością. Naprawdę chciałbym wiedzieć, czy istnieją języki skryptowe, które są ściśle/mocno typowane.


title: Pomóż mi wybrać licencję Open-Source

text: Zrobiłem więc dużo pracy z otwartym kodem źródłowym. Wydałem wiele projektów, z których większość została objęta licencją GPL, LGPL lub BSD. Teraz mam nowy projekt (bibliotekę wdrożeniową) i nie mogę znaleźć licencji spełniającej moje potrzeby (chociaż wierzę, że może istnieć, stąd to pytanie). To jest lista rzeczy, których szukam w licencji. 1. Odpowiedni kredyt udzielony za WSZYSTKIE użytkowanie lub prace pochodne. 2. Brak gwarancji wyrażonej lub dorozumianej. 3. Biblioteka może być swobodnie używana w KAŻDYM innym produkcie open-source/free-software (niezależnie od licencji, GPL, BSD, EPL itp.). 4. Biblioteka może być wykorzystywana w produktach o zamkniętym kodzie źródłowym/komercyjnym WYŁĄCZNIE ZA PISEMNĄ ZGODA. GPL - dla mnie oczywiście bezużyteczna, ponieważ całkowicie wyklucza jakiekolwiek użycie zamkniętego źródła, naruszając wymóg (4). BSD/LGPL/MIT - Nie będą działać, ponieważ nie wymagałyby uzyskania mojej zgody przez programistów z zamkniętym kodem źródłowym, naruszając wymóg (4). Gdyby nie to, BSD (w szczególności FreeBSD) wyglądałoby tutaj dobrym wyborem. EPL/MPL — również nie będzie działać, ponieważ kod nie mógł zostać połączony z kodem GPL, co narusza wymóg (3). Jestem też prawie pewien, że zezwalają na komercyjne prace bez pytania o pozwolenie, więc nie spełniają też (4). Możliwe jest licencjonowanie podwójne, ale w takim przypadku jaka kombinacja spełniłaby wszystkie cztery wymagania? Zasadniczo chcę BSD bez użycia komercyjnego, plus opcję użycia w komercyjnym/zamkniętym źródle, o ile programista ma moją pisemną zgodę. EDIT: W tej chwili myślisz o licencjonowaniu wielokrotnym na licencji GPL/LGPL plus coś innego do celów komercyjnych?


title: Jak zmienić kod w czasie wykonywania w interpreterze?

text: Czytając różnicę między kompilatorem a interpreterem, znalazłem następujące różnice w stosunku do Internetu. Zalety korzystania z kompilatora: * Ponieważ kompilator konwertuje program na kod natywny maszyny docelowej (kod obiektowy), można oczekiwać szybszej wydajności. * Istnieje możliwość optymalizacji kodu. Zalety korzystania z tłumacza: * Proces realizacji można wykonać jednoetapowo. Nie ma potrzeby etapu kompilacji. * Zmiana kodów możliwa w czasie pracy. * Naprawdę przydatne do debugowania kodów (ponieważ wykonanie kodu źródłowego może być analizowane w IDE) * Ułatwia interaktywne tworzenie kodu. W przypadku interpretera, jako interpreter stwierdza się "istnieje możliwość zmiany kodu", aw przypadku kompilatora "optymalizacja kodu będzie" Czy ktoś może wyjaśnić te 2 punkty?


title: Zaćmienie kontra Aptana

text: Wiem, że Eclipse jest uniwersalnym IDE i dostępnych jest wiele wtyczek do jego skalowania. Jaka jest różnica między: oryginalnym środowiskiem Eclipse IDE, Aptana i NetBeans. Zajrzałem do Wikipedii i dowiedziałem się, że dwa ostatnie pochodzą z głównego Eclipse. Zwłaszcza w przypadku Aptany, jaka była potrzeba odtworzenia nowego wariantu, który zbytnio przypomina jego bazowe IDE? Jeśli preferujesz samo Eclipse, co czyni go wyjątkowym w porównaniu z pozostałymi dwoma.


title: Jak zawrzeć dokumentację implementacji i użytkowania w jednym pliku?

text: Istnieją dwa rodzaje dokumentacji. Jeden typ, **Dokumentacja implementacji** , zawiera informacje o konkretnej implementacji konstrukcji (np. Klasa, Metoda itp.). Jest skierowany do przyszłego mnie, opiekuna, debuggera i tak dalej. Jest też **Dokumentacja użytkowania**, zawierająca informacje o tym, jak korzystać z dostarczonego API. Nie zawiera informacji o konkretnej implementacji i jest skierowany do użytkowników api. Jak umieścić oba w jednym pliku? (Czy mogę umieścić oba w jednym pliku? A jeśli nie, jaki typ należy do pliku źródłowego?) Czy istnieją specjalne techniki, wykorzystujące java-doc i/lub najlepsze praktyki?


title: Jakie możliwości kariery mają programiści z dyplomem informatyki?

text: Mam nadchodzące wykłady na lokalnym uniwersytecie i będę przemawiał do studentów na 102 kursach informatyki. Będąc bardziej kursem wprowadzającym, będą kierunki comp sci, a także niektóre kierunki hybrydowe business/comp sci, a także kierunki matematyczne i fizyczne. Jest to jedna z tych rzeczy typu „zobacz kogoś z prawdziwego świata ze swoim stopniem naukowym”. Tematem, o który pyta profesor, jest to, jakie możliwości zawodowe ma student, który ma za sobą kilka kursów programowania. Teraz mój stopień był licencjatem w Comp Sci i całe moje doświadczenie (5 lat poza szkołą) dotyczyło tego, co ogólnie nazwalibyście „światem biznesu” (pierwsza praca była dla firmy konsultingowej, moja obecna praca jest dla firmy w dystrybucji). Miałem nadzieję, że uzyskam opinie z zewnątrz, żebym nie tylko czerpał z własnego doświadczenia dla tych studentów. Jakie możliwości mają studenci, którzy mają pewien stopień naukowy i umiejętność programowania/rozwoju oprogramowania poza światem biznesu? (tj. prace badawcze i grantowe, wojskowe/rządowe itp.) W jaki sposób umiejętności nabyte na kursach programowania mogą pomóc ci poza tworzeniem oprogramowania? (Możliwość lepszej komunikacji z personelem IT to coś, o czym pomyślałem) Wszelkie inne korzyści, o których możesz pomyśleć, byłyby mile widziane! Dziękuję!


title: Wpisz sparametryzowane metody, aby uniknąć rzutowania

text: W bibliotece, którą rozwijam, mam metodę fabryki, która wygląda trochę tak: public <T> T instantiate(Type targetType) { return ...; } Używam metody sparametryzowanej typu, aby uniknąć konieczności rzutowania przez użytkowników mojej biblioteki za każdym razem, gdy ją wywołają (tak by było, gdybym wybrał zwracanie `Object`). Czy jest jakiś powód, dla którego nie jest to ** dobry wybór projektu?. Nie podoba mi się, że programista może wywołać moją metodę, taką jak: String s = instantiate(Integer.class); Co jest wyraźnie błędne. Niestety metoda wymaga typu, a nie klasy, w przeciwnym razie mógłbym napisać coś takiego: public <T> T instantiate(Class<T> targetClass) { return ...; }


title: Zapisywanie wielu kopii jednego obrazu w różnych rozmiarach

text: Tworzę program do przechowywania plików, który będzie również wyświetlał obrazy w galeriach zdjęć użytkownikom, którzy je prześlą. Zastanawiałem się, czy ktoś mógłby mi pomóc. Mój plan był taki, że gdyby obraz był szerszy niż 500px, zmieniłbym go na szerokość 500px (galeria i do użytku mobilnego) i szerokość 250px (użycie miniatur). Nie mam z tym poważnego doświadczenia, więc zastanawiałem się, czy ktoś mógłby mi pomóc. Ile różnych wersji jednego obrazu powinienem przechowywać i w jakich rozmiarach. Dziękuję


title: Czy narzucenie tego samego formatu kodu dla wszystkich programistów to dobry pomysł?

text: Rozważamy narzucenie jednego standardowego formatu kodu w naszym projekcie (automatyczne formatowanie z akcjami zapisu w Eclipse). Powodem jest to, że obecnie istnieje duża różnica w formatach kodu używanych przez kilku (>10) programistów, co utrudnia jednemu programiście pracę nad kodem innego programisty. Ten sam plik Java czasami używa 3 różnych formatów. Więc uważam, że przewaga jest oczywista (czytelność => produktywność), ale czy dobrym pomysłem byłoby narzucenie tego? A jeśli nie, to dlaczego? **AKTUALIZACJA** Wszyscy korzystamy z Eclipse i wszyscy znają plan. Istnieje już format kodu używany przez większość, ale nie jest on wymuszany, ponieważ niektórzy wolą trzymać się własnego formatu kodu. Z powyższych powodów niektórzy woleliby to egzekwować.


title: Kiedy należy, a kiedy nie należy używać słowa kluczowego „nowy”?

text: Obejrzałem prezentację Google Tech Talk na temat testów jednostkowych, wygłoszoną przez Misko Hevery'ego, który powiedział, aby unikać używania słowa kluczowego `new` w kodzie logiki biznesowej. Napisałem program i ostatecznie użyłem tu i ówdzie słowa kluczowego `new`, ale służyły one głównie do tworzenia instancji obiektów, które przechowują dane (tj. nie miały żadnych funkcji ani metod). Zastanawiam się, czy zrobiłem coś złego, kiedy użyłem słowa kluczowego new dla mojego programu. A gdzie możemy złamać tę „zasadę”?


title: Zewnętrzna platforma do rozwiązywania problemów ze wzrostem kodu

text: Obecnie pracuję nad projektem i są pewne problemy z „rozrostem kodu”, które wymagają rozwiązania. Termin nie jest bardzo odległy i wskazane byłoby pozostanie w wyznaczonym terminie. Mimo to kod wymaga pewnej restrukturyzacji i tutaj pojawia się pytanie. Czy powinniśmy spróbować użyć nowego frameworka do rozwiązania obecnego problemu, czy nie. Mój kolega jest bardzo otwarty na zewnętrzne frameworki i oferuje restrukturyzację kodu poprzez znalezienie istniejącej biblioteki na wzór WTL/boost/TinyXML/ATL. Z drugiej strony jestem bardzo ostrożny wobec nowych frameworków dla istniejących baz kodu. Językiem jest C++ i mam spore doświadczenie, w którym biblioteki takie jak MFC odpalają ogromnym miotaczem ognia. Nie mówię, że moja droga jest właściwa, ponieważ sądzę, że prawda jest gdzieś pomiędzy, ale muszę zdecydować, jak postępować. Termin jest bardzo bliski, a zmiany dotkną dużej części kodu, warstwy logiki aplikacji. Restrukturyzacja istniejącej bazy kodu wymagałaby spokojnego myślenia i dodatkowego kodowania. Ale kod nie jest typu TDWTF, raczej przekroczył pierwotne wymagania i potrzebuje nowych ubrań. Aplikacja jest mocno asynchroniczna i używa wielu wątków, więc nie jest to trywialny rodzaj. Czy ktoś może mi powiedzieć, jaka jest ogólna zasada, gdy trzeba zdecydować, czy użyć gotowego koła, czy wymyślić nowe? Jakie byłyby kryteria akceptacji nowego kodu?


Pracuję nad projektem Arduino przy użyciu Uno. Projekt zawiera znaczną ilość kodu. Chciałbym stworzyć bibliotekę i być może później ją udostępnię. Jakimi wytycznymi powinienem się kierować podczas projektowania biblioteki?


title: Deweloper .Net próbuje nauczyć się ruby on rails

text: Jestem programistą .NET i właśnie w ten weekend miałem okazję zagrać z Ruby on Rails. W .NET oddzielamy warstwy aplikacji tworząc osobne projekty bibliotek klas. Czy z punktu widzenia wzorca projektowego musimy to robić również w Railsach, czy jest to tylko jeden cały projekt ze wszystkim, co się w nim znajduje?


title: Jeśli chodzi o rynek pracy, czy coraz więcej firm przechodzi na NoSQL?

text: Wiem, że NoSQL nie jest aż tak dojrzały, ale minął około roku, odkąd nadążałem za nowościami. Czy to wciąż „przyszłość”, czy firmy zmierzają w tym kierunku, czy nadal tkwią w krainie relacji? Oczywiście każdy ma swoje zalety i wady, a wiele firm ma oprogramowanie oparte na tradycyjnym RDMS, ale czy ogólny kierunek zmierza w kierunku rozwiązania NoSQL? A co z Pracami? Mam doświadczenie z C++/Java i zawsze interesowałem się bazami danych, skończyłem studia dopiero około 9 miesięcy temu z moim licencjatem. w Comp Science i jest to coś, czym chciałbym się zająć (jednak mam wiedzę tylko na temat tradycyjnego RDMS). Jaka byłaby najmądrzejsza rzecz, na której mógłbym się teraz skoncentrować?


title: Sugestie dotyczące uruchomienia kodu śledzenia wiązki elektronów o otwartym kodzie źródłowym

text: Zajmuję się fizyką akceleratorów i promieniowaniem synchrotronowym. Elektrony o wysokiej energii krążące w dużych pierścieniach magnesów wytwarzają promieniowanie rentgenowskie, które jest wykorzystywane w różnych dziedzinach nauki. Prowadzenie i ulepszanie tych obiektów wymaga kontrolowania i modelowania wiązki elektronów krążącej w pierścieniu. Kod do modelowania tego w zasadzie wymaga śledzenia elektronów przez elementy (coś, co nazywa się integratorem symplektycznym), a następnie obliczenia różnych parametrów związanych z tym ruchem. Problem z tymi kodami polega na tym, że każdy zakład ma swoje własne (może 4-5 różnych kodów, niektóre z wieloma wersjami). W zasadzie kod nie jest tak skomplikowany. A jako projekt modelarski można by pomyśleć, że ma on jakieś ogólne zainteresowanie. Któż nie chciałby mieć możliwości stworzenia toru w kosmosie z magnesów i obserwowania krążących elektronów? Istnieje kod oparty na Matlab, który to robi, zwany Accelerator Toolbox, ale twórca kodu nie jest już w tej dziedzinie. Umieściłem kod w Sourceforge pod nazwą atcollab. Podstawowym zasobem jest zestaw integratorów symplektycznych napisanych w języku C. Są one następnie kompilowane w kod mex i łączone przez Matlab. Użyteczne było umieszczenie kodu na Sourceforge w celu wymiany kodu, ale społeczność użytkowników jest dość mała i większość z nich jest zbyt zajęta, aby poświęcić tyle czasu na współpracę. Więc jeśli chodzi o naprawdę ulepszanie kodu, nie sądzę, żeby był tak udany. Każdy fragment tego obrazu można odtworzyć bez większych trudności, ale ogólnie jest to nieco skomplikowane, a ponieważ każde laboratorium ma własną instalację z dużą ilością dodatkowego kodu i lokalnie opracowanych narzędzi, ludziom trudno jest naprawdę ze sobą współpracować i kod akcji. Jakoś myślę, że musimy zaangażować szerszą społeczność w nasz rozwój lub po prostu użyć standardowych narzędzi. Ale do tego, przypuszczam, że musi to być jakieś ogólne zainteresowanie. Myślę, że integratorzy symplektyczni mogą mieć pewne ogólne zainteresowanie. A część dotycząca architektury wtyczek do zbudowania pierścienia powinna pasować do innych wzorców. Inną opcją jest po prostu zaakceptowanie, że nie jest to problem ogólnego zainteresowania i cięższa praca w naszej małej społeczności. Sugestie lub anegdoty z analogicznego doświadczenia byłyby mile widziane.


title: Rzeczywista wydajność node.js

text: Mam pytanie dotyczące wydajności node.js. Jest sporo „benchmarków” i sporo zamieszania wokół świetnej wydajności node.js. Ale jak to wygląda w prawdziwym świecie? Nie tylko przetwarzaj puste żądania z dużą prędkością. Jeśli ktoś mógłby spróbować porównać ten scenariusz: serwer Java (lub równoważny) uruchamiający aplikację ze złożoną logiką biznesową między odbieraniem żądania a wysyłaniem odpowiedzi. Jak poradzi sobie z tym node.js? Jeśli zaistniała potrzeba dużego przetwarzania JavaScript po stronie serwera, czy node.js jest naprawdę tak szybki, że może wykonać JavaScript i ma szansę z większą ilością konkurentów?


title: Dlaczego statyczne składowe danych muszą być definiowane poza klasą oddzielnie w C++ (w przeciwieństwie do Javy)?

text: class A { static int foo () {} // ok static int x; // <--- należy zdefiniować osobno w pliku .cpp }; Nie widzę potrzeby oddzielnego definiowania `A::x` w pliku .cpp (lub tym samym pliku dla szablonów). Dlaczego nie można jednocześnie zadeklarować i zdefiniować `A::x`? Czy zostało to zabronione ze względów historycznych? Moje główne pytanie brzmi, czy wpłynie to na jakąkolwiek funkcjonalność, jeśli `statyczne` składowe danych zostały zadeklarowane/zdefiniowane w tym samym czasie (tak samo jak **Java** ) ?


title: Po co używać phpunit, skoro można użyć tradycyjnego ręcznego testowania?

text: Kiedy tworzę aplikację internetową, testuję swoją pracę w przeglądarce, aby sprawdzić, czy otrzymuję błędy i je naprawiam. Wykonywałem złożone aplikacje i testowanie w ten sposób było łatwe i szybkie. Obejrzałem wiele filmów na YouTube dotyczących phpunit i nie mogę znaleźć dla tego celu. Dlaczego ta biblioteka jest przydatna? Czy phpunit jest bardziej dla php Framworks jak cakephp czy zend? Nie używam żadnego frameworka, tylko rdzenia php. Czy phpunit może mi się przydać? Jeśli tak, to jak? Jest też xdebug, ale nie jestem pewien, czy dotyczy.


title: Migracja Trac/SVN do DVCS

text: Projekt, nad którym obecnie pracuję, używa Traca z integracją SVN. Do tej pory działało świetnie. Teraz jednak zatrudniliśmy kilku dodatkowych programistów i mamy problemy z rozgałęzianiem i łączeniem. Z tego powodu uważam, że przejście na rozproszony system kontroli wersji jest w porządku. Problem w tym, że Trac jest bardzo ściśle zintegrowany z repozytorium SVN. Mamy ścisłą integrację między biletami i numerami wersji zmian kodu odpowiadających tym biletom. Ponadto mamy wiki pomocy technicznej, która zawiera wiele danych, które pomagają technologii. Grupa wsparcia. Czy istnieje sposób na migrację do git lub mercurial bez utraty korzyści płynących z Traca? Sprawdziłem wtyczkę git dla Traca i nie jestem pewien, jak dobrze to działa. Czy ktoś tutaj używał go w projekcie, który został przeniesiony z SVN? **EDYTUJ:** Powinienem zauważyć, że najważniejszym priorytetem jest dla nas utrzymanie powiązań między biletami Traca i odpowiednimi zestawami zmian w SVN. Jest to narzędzie, którego używamy na co dzień i które zapewnia łatwy sposób na przejście do zmian w kodzie podczas sprawdzania zgłoszeń. Przydałaby się migracja Wiki, ale jeśli nie jest to możliwe, możemy nadal korzystać ze starego systemu, jednocześnie pisząc jakiś jednorazowy skrypt do migracji zawartości.


title: Potrzebuję kilku kontrapunktów, aby odeprzeć argument, dlaczego NIE używać M-V-P

text: W piątek przed weekendem świątecznym przygotowałem demonstrację wykorzystania wzorca Model-View-Presenter (chyba wersja „Passive View”), którą chcę pokazać moim współpracownikom w tym tygodniu jako przykład tego, jak projektować nasza aplikacja WebForms idzie do przodu i otrzymuje łatwy w utrzymaniu, czysty kod. Obecnie trzymamy prawie całą logikę poza niektórymi procedurami dostępu do danych w plikach związanych z kodem. Wiem od razu, że jednym z podniesionych punktów będzie to, że _szybciej/łatwiej jest po prostu używać kodu z tyłu_ zamiast tworzyć osobną bibliotekę klas dla widoków i prezenterów oraz konieczność tworzenia osobnego widoku na stronę (co przynajmniej może stać się nieprzyjemne ponieważ mamy grubo ponad sto stron, chociaż w tym miejscu mówię o przyszłym rozwoju i nie doposażaniu reszty kodu). Argumentem będzie to, że znacznie szybciej można wykonać zadanie, wykonując coś takiego: protected void Page_Load(object sender, EventArgs e) { DataSet ds = Customer.Get(Request.QueryString["custid"]); if (ds.Tables[0].Rows.Count > 0) { txtFirstName.Text = ds.Tables[0].Rows[0]["fname"].ToString(); // inne właściwości tutaj.. } } niż to: // CustomerDetails.aspx private CustomerDetailsPresenter _presenter; protected void Page_Load(object sender, EventArgs e) { long customerId = Convert.ToInt64(Request.QueryString["custid"]); _presenter = newCustomerDetailsPresenter(to); _presenter.Init(identyfikator klienta); } // CustomerDetailsPresenter.cs class CustomerDetailsPresenter { private ICustomerDetailsView _view; // ctor tutaj... public void Init(long customerId); { // jakoś pozyskaj klienta, przez ORM, DataSet lub cokolwiek... _view.FirstName = firstName; // jakiś ciąg, czy to z zestawu danych, czy z ORM } } Jakich kontrargumentów mogę użyć, aby pokazać korzyści z używania wzorca MVP? W szczególności sposób, w jaki **poprawiłby** szybkość i efektywność wykonywania zadań. Samo powiedzenie „jest czystszy” lub „możesz właściwie wyabstrahować kod” nie wystarczy, ponieważ jakość kodu nigdy nie była dużym problemem, po prostu szybkość (a teraz ta mentalność gryzie nas z tyłu). **UWAGA:** To dotyczy nowych funkcji w istniejącej/starej aplikacji, a nie nowej witryny (ja wybrałbym MVC na zupełnie nową witrynę). Nowe strony, które muszą wchodzić w interakcję z aplikacją jako całością, radykalne zmiany na starych stronach i tym podobne to to, co zwykle robimy i do czego mówię, używając MVP.


title: stary projekt KDE

text: Więc mam ten stary projekt C++, KDE dla QT 3.3.x. Wersja IDE to 3.0.0-10, ta, która jest dostarczana z systemem Linux RedHat 7.3. Chciałbym pozbyć się zależności od tego środowiska, innymi słowy chciałbym zarządzać projektem przez Makefiles. Ewentualnie byłoby również do przyjęcia, gdybym mógł przenieść ten projekt KDE do Eclipse. Czy komuś się to udało?


title: Obiekty dostępu do danych staromodne?

text: Kilka tygodni temu wykonałem pracę na projekt uniwersytecki. Po przeglądzie kodu z niektórymi nauczycielami dostałem kilka złośliwych uwag na temat tego, że (nadal) używam Data Access Objects. Nauczyciel, o którym mowa, wspomina o używaniu DAO na swoich zajęciach i zawsze mówi coś w stylu „Wtedy zawsze używaliśmy DAO”. Jest wielkim fanem Object Relational Mapping, który moim zdaniem jest świetnym narzędziem. Kiedy rozmawiałem o tym z kilkoma moimi kolegami ze studiów, wspomnieli również, że wolą używać ORM, co rozumiem. To sprawiło, że zacząłem się zastanawiać, czy używanie DAO naprawdę jest tak staromodne? Wiem, że w mojej pracy wciąż używa się DAO, ale wynika to z faktu, że część kodu jest dość stara i dlatego nie może być sprzężona z ORM-em. Używamy również ORM w mojej pracy. Próba znalezienia więcej informacji na stronach Google lub Stack Exchange nie oświeciła mnie. Czy powinienem odejść od używania DAO i zacząć dopiero wdrażać ORM? Po prostu czuję, że ORM-y mogą być trochę przesadą dla niektórych prostych projektów. Bardzo chciałbym poznać Twoje opinie (lub fakty) na ten temat.


title: Kiedy metoda klasy powinna zwracać tę samą instancję po zmodyfikowaniu samej siebie?

text: Mam klasę, która ma trzy metody `A()`, `B()` i `C()`. Te metody modyfikują własne wystąpienie. Podczas gdy metody muszą zwracać instancję, gdy instancja jest osobną kopią (tak jak `Clone()`), mam wolny wybór, aby zwrócić `void` lub tę samą instancję (`return this;`) podczas modyfikowania tego samego wystąpienie w metodzie i nie zwraca żadnej innej wartości. Decydując się na zwrócenie tej samej zmodyfikowanej instancji, mogę wykonać zgrabne łańcuchy metod, takie jak `obj.A().B().C();`. Czy byłby to jedyny powód, by to zrobić? Czy można w ogóle modyfikować własną instancję i zwracać ją również? A może powinien zwrócić tylko kopię i pozostawić oryginalny obiekt tak jak poprzednio? Ponieważ zwracając tę samą zmodyfikowaną instancję, użytkownik może przyznać, że zwracana wartość jest kopią, w przeciwnym razie nie zostałaby zwrócona? Jeśli to jest w porządku, jaki jest najlepszy sposób na wyjaśnienie takich rzeczy w metodzie?


title: Najpierw front end lub back end. Z tych dwóch, które są dobrą praktyką projektowania systemu?

text: Mam teraz klienta, który wymaga ode mnie opracowania systemu zapisów do szkół. Teraz po raz pierwszy mam takie wyzwanie. Większość wcześniejszego oprogramowania, które stworzyłem, nie jest tak złożona. Wiem, że większość z Was stworzyła skomplikowane oprogramowanie, chcę tylko Waszej porady w tej sprawie. Czy powinienem najpierw zaprojektować przód czy tył? Dziękuję! Oto podsumowanie artykułu, który jakiś czas temu znalazłem w Internecie. Chcę tylko podzielić się http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157 **Deweloperzy front-end kontra back-end (moje podejście)** Moje osobiste zdanie Znowu jest to kwestia treningu, kilku ogólnych uogólnień dotyczących stylu: **Programiści front-end** * **Zazwyczaj nie mam dyplomu CS lub CS ze szkoły trzeciego stopnia.** * Pracuj w języki podobne do basic (zobacz PHP to Basic) * Posiadaj umiejętności wizualne w konwertowaniu dokumentów Photoshopa do CSS/HTML/etc. * Masz wysoką tolerancję na programowanie iteracyjne, ze względu na wolne języki **Programiści back-end** * **Masz dyplom CS lub duże doświadczenie** * Dbaj o bardziej systematyczne podejście do rozwiązywania problemów * Nie przejmuj się spędzanie dni na znajdowaniu jednego obiektu, który przecieka * Spróbuj zbudować narzędzia do rozwiązywania problemów


title: Najmilszy sposób na mapowanie kolorów rgb z html na led

text: Dołączyłem diodę rgb do próbnika kolorów na stronie internetowej i napotkałem oczywisty problem, że chociaż dioda led jest 8-bitowa jak html, odwzorowanie kolorów jest bardzo różne, więc przy bardziej subtelnych odcieniach wartości diody dla koloru są szalenie różne do wartości html. Metoda brute-force polegałaby na posiadaniu tabeli przeglądowej na serwerze sieciowym do mapowania dwóch zestawów wartości, ale najlepiej byłoby zrobić to bardziej elegancko Zanim zacząłem wymieniać wszystkie moje 101 pomysłów na zrobienie tego Zastanawiałem się, czy ktoś jeszcze jeśli natknąłem się na ten problem, końcową grą byłaby możliwość wyabstrahowania odwzorowania kolorów różnych diod led i udostępnienia ich jako usługi internetowej (wartość html i identyfikator urządzenia in, wartość led out)


title: Czy testerzy Whitebox powinni być zaangażowani w proces projektowania oprogramowania?

text: Czy testerzy Whitebox powinni być zaangażowani w proces projektowania oprogramowania i dlaczego?


title: dziedziczenie i statyczne zmienne końcowe

text: Jestem studentem programowania. Mam problem z organizowaniem klas Javy, które używają dziedziczenia i statycznych zmiennych końcowych. Załóżmy, że mam klasę abstrakcyjną o nazwie Form, która ma dwoje dzieci o nazwach Prostokąt i Trójkąt. Te dwoje dzieci ma końcową zmienną statyczną o nazwie NumberOfSides. Obie klasy potomne potrzebują identycznych geterów dla tej zmiennej.... Czy byłoby możliwe napisanie tego gettera w klasie "matka"? Dzięki za pomoc.


title: Czy programowanie wbudowane jest bliższe elektrotechnice lub tworzeniu oprogramowania?

text: Dostaję zadanie napisania osadzonego C na mikrokontrolerach. Na początku pomyślałbym, że programowanie osadzania jest dla mnie za mało na stosie oprogramowania, ale może źle o tym myślę. Normalnie zlekceważyłbym możliwość napisania kodu wbudowanego, ponieważ nie uważam się za inżyniera elektryka. Czy to złe założenie? Czy jestem w stanie napisać ciekawe i przydatne oprogramowanie dla systemów wbudowanych, czy też skopię się za to, że spadłem zbyt nisko na stosie oprogramowania? Poszedłem do szkoły informatyki i naprawdę podobało mi się pisanie kompilatora, myślenie o współbieżnych algorytmach, projektowanie struktur danych i tworzenie frameworków. Jednak obecnie jestem zatrudniony jako web developer, co nie wykrzykuje interesujących rzeczy, które właśnie opisałem. (Obecnie zajmuję się takimi problemami, jak: „to pole wyboru musi być 4 piksele w lewo” i „ta data jest błędnie sformatowana”.) Doceniam wkład wszystkich. Wiem, że muszę sam podjąć decyzję, chciałbym tylko wyjaśnić, co to znaczy być programistą osadzonym i czy pasuje to do tego, co uważam za interesujące.


title: Praca z kodem fubar / odwróconym

text: Pracuję z pewnym kodem, który został napisany przez wykonawcę, który odszedł rok temu, pozostawiając wiele projektów z błędnym, obrzydliwie złym kodem. To właśnie nazywam kowbojskim PHP, nie mów więcej. Idealnie chciałbym pozostawić projekt bez zmian i nigdy więcej go nie dotykać. Rzeczy się psują, zmieniają się wymagania i trzeba to utrzymać. Część A wymaga zmiany. Jest błąd, którego nie mogę odtworzyć. Część A jest połączona z częściami B D i E. Ten rodzaj pracy przyprawia mnie o ból głowy i sprawia, że trochę umieram w środku. Zabija moją motywację i produktywność. Szczerze mówiąc, powiedziałbym, że wpływa to na moje zdrowie psychiczne. Być może będąc na początku mojej kariery naiwnie uważam, że kod produkcyjny powinien być w miarę czysty. Chciałbym usłyszeć od każdego, kto był wcześniej w takiej sytuacji. Co zrobiłeś, żeby się z tego wydostać? Myślę, że na dłuższą metę będę musiała znaleźć inną pracę. **Edytuj** Przeniosłem się teraz z tej firmy, do miejsca, gdzie idioci nie są zatrudnieni. Kod nie jest doskonały, ale jest przynajmniej łatwy w zarządzaniu i recenzowany. W komentarzach poniżej wiele osób mówi mi, że oprogramowanie jest tak bałaganiarskie. Jasne, że nie zgadzam się ze sposobem, w jaki niektórzy programiści robią rzeczy, ale ten kod został poważnie zniekształcony. Facet, który to napisał, próbował wymyślić na nowo każde koło, jakie mógł, i to źle. Przestał dostawać od nas pracę z powodu złego kodu, którego nikt w zespole nie mógł znieść. Gdyby to było łatwe do refaktoryzacji, zrobiłbym to. W końcu po wielu sytuacjach „po prostu zrób tę małą 10-minutową zmianę” rozrosło się do godzin straconego czasu (niezależnie od tego, kto w zespole wykonywał pracę), mój szef w końcu się ugiął i został przepisany.


title: Która z zasad SOLID miała największy wpływ na Twój kod?

text: A jeśli zasady SOLID wprowadzone przez „Wujka Boba” Martina miały największy wpływ na Twoje codzienne kodowanie? Proszę podać szczegóły!


title: Jeśli warstwa interfejsu użytkownika zależy od warstwy aplikacji. Kto rozpoczyna wniosek/proces?

text: Jest to związane z DDD dla aplikacji desktopowej w c#... z 4 warstwami interfejsu użytkownika/aplikacji/domeny/infrastruktury. Właściwie 3 aplikacje desktopowe współdzielące część domeny i część infrastruktury. Starając się uniknąć przekraczania przez programistów niewłaściwych warstw i używania niewłaściwych klas, rozdzieliłem warstwę w złożeniach i odpowiednio ustawiłem referencje/zależności. Jeśli infrastruktura to biblioteka dll/zestaw, a domena inna biblioteka dll/zestaw, a aplikacja to plik exe/zestaw, a interfejs użytkownika to biblioteka dll/zestaw..., projekt nie może skompilować. Kto załaduje plik ui.dll? Czy coś mi umyka? Jedyne rozwiązanie, z jakim przyszedłem, to stworzenie piątej warstwy o nazwie Program. Ta warstwa będzie miała punkt wejścia do programu i połączy wszystko razem (używam DI z Unity ) Jakiś pomysł?


title: Sprawdzanie, czy funkcja jest uruchamiana tylko z __main__ w Pythonie

text: Często kończę z plikami kodu, które można zaimportować lub uruchomić jako `__main__`. Łatwo sobie z tym poradzić, sprawdzając, czy `__name__ == '__main__'''. Ale czasami, jeśli moja główna funkcja staje się zbyt duża, dzielę jej części na inne funkcje, spodziewając się, że zostaną wywołane tylko wtedy, gdy `__name__ == '__main__'`. Czasami wymuszam ten warunek, wywołując następującą funkcję `assert_main`: defassert_main(): "Użyj tego w module, który chcesz uruchomić jako __main__, nie zaimportowany" mod = sys._getframe(1).f_globals["__name__ "] if "__main__" != mod: raise Exception("Moduł {} nie jest main".format(mod)) Inne opcje obejmują przekształcenie `assert_main` w dekorator lub umieszczenie definicji funkcji wewnątrz ` if __name__ == '__main__'` blok. I równie dobrze mogą istnieć inne opcje, o których nie pomyślałem. Co należy zrobić idiomatycznie poprawną rzeczą?


title: Czy używałbyś C dzisiaj do projektu oprogramowania?

text: Jeśli tak, gdzie i dlaczego miałbyś go używać? Jeśli nie, wyjaśnij, dlaczego C jest dla Ciebie nie do przyjęcia.


title: Jaka jest praktyczna różnica między stylami wstrzykiwania zależności?

text: Jestem nowy w wstrzykiwaniu zależności i mam kilka pytań dotyczących stylu, którego powinienem używać w moich aplikacjach. Właśnie przeczytałem _Inversion of Control Containers and Dependency Injection_ autorstwa Martina Fowlera, ale nie mogę uzyskać praktycznej różnicy między konstruktorem, ustawiającym i wstrzykiwaniem interfejsu. Wydaje mi się, że powody używania jednego z drugim są tylko kwestią czyszczenia kodu i/lub przejrzystości. Jaka jest różnica? Czy są jakieś mocne zalety lub wady używania jednego nad drugim, czy jest to tylko to, co powiedziałem wcześniej? Moim zdaniem _wstrzyknięcie konstruktora_ jest najbardziej intuicyjne ze wszystkich, a _wstrzyknięcie interfejsu_ najmniej. Z drugiej strony, _setter injection_ jest terminem pośrednim, ale czy powinieneś być w stanie zmienić instancję obiektu zależności, który początkowo wstrzykiwałeś? Czy ten styl wstrzykiwania gwarantuje, że obiekt, który potrzebuje tej zależności, zawsze będzie ją wstrzykiwał? Wierzę, że nie, ale popraw mnie, jeśli się mylę.


title: Nie rozumiem iteracji wartości

text: Na zajęciach uczę się o iteracji wartości i problemach decyzyjnych Markowa, które robimy poprzez projekt UC Berkley pac-man, więc staram się napisać dla niego iterator wartości i jak rozumiem, iteracja wartości polega na tym, że dla każdej iteracji odwiedzają każdy stan, a następnie śledzą stan końcowy, aby uzyskać jego wartość. Mam wrażenie, że nie mam racji, bo próbując tego w pytonie otrzymuję rekursywną głębokość przekroczenia. Wracam więc do pseudokodu i jest tam `Vk[s]` i `Vk-1[s']`, które, jak sądziłem, oznaczają wartość stanu i wartość `nowystan`, ale muszę czegoś brakuje. Więc jakie jest znaczenie „k” i „k-1”? Mój kod: def val(i, state): if mdp.isTerminal(stan) lub i == 0: zwróć 0.0 koszt akcji = {} dla akcji w mdp.getPossibleActions(stan): actionCost[action] = 0 for (nextState, prawdopodobieństwo) w mdp.getTransitionStatesAndProbs(stan, akcja): nagroda = mdp.getReward(stan, akcja, nextState) actionCost[action] += prawdopodobieństwo * nagroda + rabat * val(i - 1, nextState) returnKosztakcji[max(Kosztakcji] , key=actionCost.get)] dla i in range(iteracje): dla stanu w mdp.getStates(): self.values[stan] = val(i, stan) Pseudo Kod: k ←0 powtórz k ←k+1 dla każdego stanu s do Vk[s] = maxa ∑s' P(s'|s,a) (R(s,a,s')+ γVk-1[s']) aż ∀s |Vk[s] -Vk-1[s]| <


title: Wiele bibliotek JavaScript | Nowe standardy - porównaj do C++

text: Wygląda na to, że istnieje wiele różnych stylów pisania JavaScript, w rzeczywistości słyszałem, że JavaScript jest językiem ekspresyjnym. Ale istotą kodu jest funkcjonalność (funkcja), a nie wyrażenie (forma). Czy istnieje biblioteka, która zostanie zaadaptowana do standardu ECMA tak, jak biblioteki STL i Boost zostały zaadaptowane do standardu C++?


title: Konwersja struktury danych w Perl

text: Funkcja tworzy ten skrót tablic: 'KEYNAME1' => TABLICA(0x1edeeb0) 0 'wart11' 1 'wart12' 2 'wart13' 'KEYNAME2' => TABLICA(0x1efacb8) 0 'wart21' 1 'wart22' 2 'wart23' Inna funkcja wymaga tablicy skrótów zawierającej tablice: 0 HASH(0x1f6df98) 'KEYNAME1' => TABLICA(0x1f776b0) 0 'val11' 1 'val12' 2 'val13' 1 HASH(0x1f6dfe0) 'KEYNAME2' => ARRAY(0x1f6df80) 0 'val21' 1 'val22' 2 'val23' Ten kod konwertuje pierwszy na drugi, ale czy istnieje prostszy sposób?


title: Po co umieszczać proste zapytanie w procedurze składowanej w usłudze sieci Web?

text: Pracuję jako młodszy programista, a starszy programista nade mną poinstruował mnie, abym postępował zgodnie z pewną nieoficjalną polityką tworzenia nowych zapytań w naszych projektach internetowych. Generalnie tworzymy witrynę intranetową dla niektórych klientów i zawsze mają bazy danych. Chce, żebym miał **klasę** zawierającą metodę dla każdego zapytania, które wykona witryna. Ta klasa wywołuje metody internetowe w usłudze sieci Web hostowanej na tym samym komputerze. Te metody internetowe używają ADO do uruchamiania procedur składowanych, które wykonują proste zapytania. Czasami zapytania wymagają parametrów, a czasami nie. Kiedy mówię proste zapytania, mam na myśli proste...`wybierz * z tabeli, gdzie kolumna=@parametr` Czuję, że jest tu kilka dodatkowych kroków i mam nadzieję, że ktoś może wyjaśnić, dlaczego może chcieć tego jako naszej standardowej procedury za korzystanie z baz danych w aplikacjach internetowych. Mówi, że każdy krok dodaje warstwę bezpieczeństwa. Naprawdę interesuje mnie, jak to wszystko zapewnia bezpieczeństwo. Czy to wszystko jest konieczne? Dlaczego lub dlaczego nie?


title: Usuwanie elementów dynamicznych z bazy danych

text: Mam menu wyboru z przyciskami „+” i „-”, które dodają i usuwają elementy przed przesłaniem. Chciałbym mieć możliwość usunięcia elementów za pomocą przycisku '-' po dodaniu ich do bazy danych. Nie jestem pewien, jak to zrobić, poza usunięciem wcześniejszych wpisów i ponownym przepisaniem opcji. Idealnie byłoby, gdyby było to wielokrotnego użytku i łatwe do wymyślenia dla drugiego programisty w zespole lub każdego, kto mógłby mnie zastąpić w dalszej kolejności. Czy ktoś może wskazać mi właściwy kierunek?


title: Jak zamienić bazę danych z MySQL na SQL Server w wielu dużych projektach?

text: Czy istnieje rozsądny sposób / najlepsze praktyki sposób na zamianę bazy danych z MySQL na SQL Server w wielu dużych projektach? Niektóre projekty są projektami ASP, niektóre są usługami Windows, niektóre są samodzielnymi aplikacjami Windows. Nie sądzę, aby używany był żaden ORM. Myślę, że to tylko instrukcje SQL w każdym miejscu.


title: Wstrzykiwanie zależności w konstruktorze, metodzie czy po prostu użycie klasy statycznej?

text: Jaki jest najlepszy pomiędzy: $dispatcher = new Dispatcher($request); $dispatcher->dispatch(); i $dyspozytor = nowy Dyspozytor(); $dispatcher->dispatch($żądanie); lub nawet Dispatcher::dispatch($request); Wiedząc, że tylko jedna metoda tej klasy używa instancji $request. Oczywiście skłaniam się do ostatniego rozwiązania, ponieważ klasa nie ma innych stanów, ale czuję, że może to nie być najlepsze rozwiązanie OOP.


title: Czym jest „praca” w technice Pomodoro?

text: Właśnie zacząłem dzisiaj używać Pomodoro i staram się ustalić, co powinienem, a czego nie powinienem robić podczas mojego 25-minutowego czasu pracy. Podczas mojej 25-minutowej pracy zacząłem pisać kod i zdałem sobie sprawę, że zrobiłem coś podobnego w powiązanym projekcie, więc otworzyłem to rozwiązanie, aby skopiować i wkleić istniejący kod. Pytanie brzmi, czy to dozwolone? Ponadto, jeśli w ciągu moich 25 minut zdam sobie sprawę, że muszę wysłać ważny e-mail związany z pracą, czy mogę to zrobić, czy powinienem poczekać na następne 25 minut lub przerwę? Piszę to pytanie podczas mojej, teraz przedłużonej, 5 minutowej przerwy. Czy to praca czy przerwa? Naprawdę docenię kilka wskazówek, ponieważ chcę wykorzystać Pomodoro, aby lepiej skoncentrować się na mojej pracy. Inną rzeczą, która mi się przydarzyła, było to, że w ciągu 25 minut na moim pulpicie pojawił się alert o aktualizacji Adobe AIR. Czy powinienem ignorować takie rzeczy do przerwy? Sachin


title: Jak mam powiedzieć szefowi, że dokonał złego wyboru?

text: Ostatnio nasz największy produkt zawiódł poważnie, ponieważ korzystaliśmy tylko z zewnętrznej siły roboczej, a oni nigdy niczego nie testowali itp. W końcu nasz dyrektor generalny zdecydował, że zespół z USA powinien nauczyć się kodu i go naprawić. (Nie całkowite przepisanie, ale wiele zmian w formatowaniu/stylach, refaktoryzacja itp.). Nie wie jednak prawie nic o programowaniu (na szczęście przyznaje do tego). Przygotowywał mnie do objęcia stanowiska kierownika projektu, ale musiałem wrócić do college'u. Teraz oddał go innemu programiście, który jest naiwny i niedoświadczony. Nie sądzę, żeby naiwny programista poradził sobie tak dobrze. Rozumowanie prezesa jest takie, że naiwny programista może pracować w pełnym wymiarze godzin, a ja tylko w niepełnym wymiarze godzin, więc mniej starszy programista może włożyć w to więcej pracy. Jak mogę go przekonać, że 15 godzin mojego czasu jest więcej warte niż 40 innych facetów?


title: Czy powinienem kontynuować naukę języka, jeśli w międzyczasie zainteresowałem się innym językiem/platformą?

text: Zacząłem uczyć się Javy kilka miesięcy temu. Chciałem też być bardziej narażony na Linuksa, więc zainstalowałem ubuntu i od tego czasu zacząłem pracować z Javą. W międzyczasie jednak bardziej zainteresowałem się C# i nauką platformy Windows. W tym momencie zadaję sobie pytanie, czy powinienem przestać uczyć się Javy i przenieść się do świata .NET. Nawiasem mówiąc, nie nienawidzę ani nie lubię Javy, jestem po prostu bardziej ciekawa windows/.NET w tym momencie. Moje pytanie brzmi, czy powinienem pozostać przy Javie, czy przejść z C#/.NET? Jaka jest Twoja rada?


title: Dlaczego tablica mieszająca? Dlaczego nie tylko niezaszyfrowaną tablicę asocjacyjną?

text: Nauczyłem się używać tablicy mieszającej do wydajnego sprawdzania elementów na liście bez przechodzenia przez całość, ale jest jedna rzecz, której nie rozumiem: dlaczego klucze haszowane? Wygląda na to, że: var wordList = { 'aa' : ['aa'], 'aah' : ['aah'], 'ahhed' : ['aahed'] }; Działałoby tak samo dobrze, jak: var wordList = { '/* zahaszowana wartość aa*/' : ['aa'], '/* zahaszowana wartość aah*/' : ['aah'], '/* zahaszowana wartość z aahed*/' : ['aahed'] }; **Jaka jest różnica w wydajności między wyszukiwaniem zaszyfrowanego klucza a prostym kluczem nazwy?**


title: Jaki jest rzeczywisty problem z projektem opartym na prototypie?

text: Wydaje mi się, że wszystko, co można opracować przy użyciu OO/języków funkcjonalnych, można ogólnie „ulepszyć” przy użyciu języka opartego na prototypie, ponieważ wydaje się, że ma to, co najlepsze z nich wszystkich: funkcje wysokiego rzędu, elastyczność w symulowaniu dowolnej struktury OO, produktywność ( niska szczegółowość) i skalowalność dzięki współbieżności. Ale wydaje się, że unika się ich przy tworzeniu aplikacji wykonywalnych i ogólnie większych projektów. Dlaczego to?


title: Usuwanie wartości zakodowanych na sztywno i projektu obronnego w porównaniu z YAGNI

text: Najpierw trochę tła. Koduję wyszukiwanie z Wiek -> Oceń. Istnieje 7 przedziałów wiekowych, więc tabela przeglądowa składa się z 3 kolumn (Od | Do | Oceń) z 7 wierszami. Wartości rzadko się zmieniają - są to stawki ustawowe (kolumna pierwsza i trzecia), które nie zmieniają się od 3 lat. Doszedłem do wniosku, że najłatwiejszym sposobem przechowywania tej tabeli bez stałego kodowania jest w bazie danych w globalnej tabeli konfiguracyjnej, jako pojedyncza wartość tekstowa zawierająca CSV (więc "65,69,0,05,70,74,0,06" to sposób poziomy 65-69 i 70-74 będą przechowywane). Stosunkowo łatwe do przeanalizowania, a następnie użycia. Potem zdałem sobie sprawę, że aby to zaimplementować, będę musiał utworzyć nową tabelę, repozytorium do owinięcia wokół niej, testy warstwy danych dla repozytorium, testy jednostkowe wokół kodu, który rozkłada plik CSV w tabeli i testy wokół samego wyszukiwania. Jedyną korzyścią z całej tej pracy jest uniknięcie twardego kodowania tabeli odnośników. W rozmowie z użytkownikami (którzy obecnie bezpośrednio korzystają z tabeli przeglądowej - patrząc na wersję papierową) opinia jest taka, że „stawki nigdy się nie zmieniają”. Oczywiście to nie jest poprawne – stawki zostały utworzone zaledwie trzy lata temu, a w przeszłości rzeczy, które „nigdy się nie zmieniają”, miały zwyczaj się zmieniać – więc dla mnie, aby zaprogramować to w sposób defensywny, zdecydowanie nie powinienem przechowywać tabeli wyszukiwania w Aplikacja. Chyba że myślę YAGNI. Wdrażana przeze mnie funkcja nie przewiduje zmiany stawek. Jeśli stawki ulegną zmianie, nadal będą się zmieniać tak rzadko, że konserwacja nie jest nawet brana pod uwagę, a funkcja nie jest tak naprawdę na tyle krytyczna, aby na cokolwiek wpłynęło opóźnienie między zmianą stawki a zaktualizowaną aplikacją. Zdecydowałem, że nic wartościowego nie zostanie utracone, jeśli zakoduję wyszukiwanie na stałe, i nie przejmuję się zbytnio moim podejściem do tej konkretnej funkcji. Moje pytanie brzmi, czy jako profesjonalista właściwie uzasadniłem tę decyzję? Zakodowanie wartości na sztywno to zły projekt, ale trud usunięcia wartości z aplikacji wydaje się naruszać zasadę YAGNI. EDYTUJ Aby wyjaśnić pytanie, nie martwię się o rzeczywistą implementację. Obawiam się, że mogę albo zrobić szybką, złą rzecz i usprawiedliwić to, mówiąc YAGNI, albo mogę przyjąć bardziej defensywne, wymagające podejście, które nawet w najlepszym przypadku ostatecznie przyniesie niewielkie korzyści. Czy jako profesjonalny programista moja decyzja o wdrożeniu projektu, o którym wiem, że jest błędna, sprowadza się po prostu do analizy kosztów i korzyści? EDYCJA Chociaż wszystkie odpowiedzi były bardzo interesujące, ponieważ myślę, że sprowadza się to do indywidualnych wyborów projektowych, myślę, że najlepszymi odpowiedziami były @Corbin i @E.Z. Hart mówi o rzeczach, których nie brałem pod uwagę w pytaniu: * fałszywa dychotomia „poprawne usuwanie zakodowanych na stałe wartości” poprzez przeniesienie ich do bazy danych w porównaniu z „efektywnym stosowaniem YAGNI” za pomocą twardego kodowania. Istniała trzecia opcja umieszczenia tabeli przeglądowej w konfiguracji aplikacji, która nie wiąże się z poprawnym obciążeniem i bez wydajności YAGNI. Generalnie nie ograniczamy się do decyzji jedno/lub, a następnie sprowadza się to do decyzji dotyczącej kosztów/korzyści. * generowanie kodu może zmniejszyć obciążenie związane z przenoszeniem zakodowanych na sztywno wartości do bazy danych, a także w sposób, który usuwa również moją nadmierną decyzję dotyczącą przetworzenia pliku CSV do tabeli. Potencjalnie dodaje to również długoterminowy problem z konserwacją wygenerowanego kodu, jeśli podstawowe wymagania ulegną zmianie dla metody wyszukiwania. To wszystko wpływa tylko na analizę kosztów i korzyści i jest prawdopodobne, że gdybym miał dostęp do tej automatyzacji, nawet nie rozważałbym napisania czegoś takiego na sztywno. Zaznaczam odpowiedź @Corbin jako poprawną, ponieważ zmienia to moje założenia dotyczące kosztów rozwoju i prawdopodobnie w niedalekiej przyszłości dodam kilka narzędzi do generowania kodu do mojego arsenału.


title: Definicja systemu trójwarstwowego

text: Ludzie często twierdzą, że stosują „architekturę trójwarstwową (lub n-warstwową)”, a czasami twierdzą, że przechodzą na model domeny. Ale tak naprawdę nigdy nie zrozumiałem, czym jest ta mityczna „architektura trójwarstwowa”. Wydaje się, że nie ma formalnej definicji. Chociaż istnieje wiele odniesień i przykładów, które wyjaśniają i demonstrują wzorzec modelu domeny, każde odwołanie do 3 warstw sugeruje po prostu, że należy podzielić kod na warstwy interfejsu użytkownika, logiki biznesowej i dostępu do danych. I to wszystko, co wydają się mówić. Szczególnie dziwne jest to, że dla mnie model domeny jest idealnym ucieleśnieniem tego trzypoziomowego paradygmatu. ORM i pliki mapowania to warstwa dostępu do danych, domena to logika biznesowa, a interfejs użytkownika to, cóż, interfejs użytkownika. Dlaczego więc ludzie mówią tak, jakby to było coś nowego i innego, na co powinni się przestawić? Zanim zobaczyłem ludzi wdrażających model domeny, większość aplikacji to interfejsy użytkownika uzyskujące dostęp do procedur przechowywanych z logiką podzieloną na interfejs użytkownika i SP. Czasami było kilka zestawów zwanych „UI”, „BLL” i „DLL”, ale zwykle były to tylko mediatory między interfejsami użytkownika i SP, pozostawiając więcej miejsc na losowe rozłożenie logiki. Czym więc jest ta mityczna „trójwarstwowa” architektura? Czy naprawdę w ogóle istnieje? a jeśli tak, to gdzie są przykłady tego dobrze zaimplementowane?


title: Zarządzanie ręcznymi protokołami testów

text: Musimy zorganizować bardzo długą listę testów uruchamianych ręcznie. Obecnie używamy dokumentów Worda, drukujemy je, odhaczamy itp. Brzydko, ale działa, z problemami. **Problemy z obecnym rozwiązaniem** * Żądanie i wykonywanie podzbiorów, w zależności od rzeczywistych zmian. (tj. testy 153, 155-157 i 24325 muszą być uruchomione tylko w przypadku zmiany modułu X) * Rozgałęzienie. Różne wydania (które są nadal utrzymywane, do pewnego momentu) mają różne protokoły testowe, ale mają wiele wspólnych treści. Ręczne kopiowanie i wklejanie. * Śledzenie dokumentów „Szablon testu” w porównaniu z dokumentami „Wykonano test”. To trochę staroświeckie biuro z dużą ilością formularzy i segregatorów. * Śledzenie w kontroli źródła wraz ze zmianami źródła. Idealnie, w ten sam sposób, w jaki funkcje są kopiowane / przenoszone między gałęziami, tj. jako dokument do pominięcia, który jest zawarty w zatwierdzeniu. **Wymagania dotyczące treści** Dokumenty wymagają obrazów (zwykle specyfikacji konfiguracji sprzętu i zrzutów ekranu „dobrych” krzywych), pól wyboru „Zaliczenie/niezaliczenie” i drobnego formatowania (na przykład wyróżnienie, kroki, rozróżnienie „rzeczy do zrobienia” i „co do oczekiwania") **Aktualny pomysł** Jeden z moich programistów zasugerował, abyśmy zamiast tego używali dokumentów HTML (Sharepoint Designer jest uważany za odpowiedni do edycji), "znormalizuj je w jakiś sposób, aby można je było różnicować" i umieść je pod kontrolą wersji wraz ze źródłami . Osobiście nie jestem w pełni sprzedany na ten pomysł z różnych powodów, ale zgadzam się z innymi chłopakami, że jeśli to działa, to jest lepsze niż dokumenty Worda. **Pytanie:** Jak zarządzasz dokumentacją do testów ręcznych? Czy znasz jakieś narzędzia? Pomysły? Jesteśmy otwarci na inne rozwiązania, ale tylko przy minimalnych nakładach niestandardowych. Przykład: instalacja dedykowanego oprogramowania, konfiguracja niektórych szablonów byłaby świetna, ale nie mamy zasobów na "zhakowanie czegoś razem z XML i arkuszami stylów i bazą danych, to powinno być łatwe". **Niektóre fakty i liczby** Kontrola źródła to git, 6 programistów, ~1.5KLoc, jeden przebieg _wszystkich_ testów ręcznych zajmuje około 4 osobotygodni (rzędu wielkości) i mniej więcej tyle samo w czasie ściany ze wszystkimi modyfikacjami i powtórzeniami. (Pełna seria ma miejsce tylko w przypadku głównych wydań.) * * * Uwaga: _Proszę nie mówić mi, aby testować automatycznie,_ dziękuję, ale już to robimy. Testy ręczne obejmują integrację, wizualizację i zewnętrzny sprzęt pomiarowy. Ponadto, generowane informacje są tak wielorakie, że odkrycia inżyniera, który zna cały system, odkrywają o wiele więcej za jednym spojrzeniem na wykres. * * * Przykład: Typowa konfiguracja testowa wyglądałaby tak, każdy znak zapytania musi być "sprawdzony", zwykle jest to 5..15 testów na konfigurację > Podłącz rezystor 10Ohm do S1. Podłącz wejście wzmacniacza do OUT 1. Uruchom test > Szablon 42. > > * Zmierz napięcie na rezystorze. ~1Vrms ? > * W tabeli 3 Uac = 1,0 V, Iac = 0,1 A, ISNR+D > 45 dB ? > * U(f) Płaskie widmo dla f > 10 Hz? > * ... >


title: Szukasz przeszukiwalnych archiwów kodu

text: W ramach badań do prezentacji grupy użytkowników poszukuję przykładów użycia określonych konstrukcji kodu. Szukam kolekcji repozytorium kodu źródłowego online, które pozwolą mi przeszukiwać kod źródłowy w całej kolekcji. GitHub to robi, ale jest trochę lekki w rodzaju kodu, którego szukam. Sourceforge przeszukuje tylko tekst opisu projektu, a nie kod źródłowy. Jakieś inne, których powinienem spróbować?


title: Ogólne rozwiązanie do rozwiązywania różnych wyników sportowych w różnych językach

text: Obecnie posiadam kod, który sprawdza, czy wyniki squasha i tenisa są poprawne, zarówno w javascript, jak i PHP. Skutkuje to 4 istniejącymi blokami kodu, 2 językami * 2 sportami, które nie skalują się dobrze w przypadku pojawienia się dodatkowych sportów lub dodatkowych języków... Jak można opisać prawidłowe wyniki gier za pomocą ustawień/pliku tekstowego, tak że każdy język może je przeanalizować i zastosować te zasady. Jestem zakłopotany dziwnymi sytuacjami tie breaku w tenisie, jeśli osiągnie 6-6 w secie, a także nieskończoną dogrywkę w ostatnim secie, jeśli osiągnie 2 sety. tj: tenis = { "format": [ { "name": "sets", "min": 3, "max": 5, "winby": 1 }, { "name": "games", "min" : 6, "max": 7, "winby": 2 } ] } squash = { "format": [ { "name": "games", "min": 3, "max": 5, "winby": 1 }, { "name": "points", "min": 15, "max": 0, "winby": 2 } ] }


title: Czy jakiś kod JavaScript jest używany tylko na stronach internetowych, open source?

text: **Pytanie przepisane:** nie zadaję pytania związanego z JavaScriptem, ale ze wszystkimi językami „klienckimi” używanymi w sieci (HTML5, JavaScript, CSS itd.). Jeśli umieszczę kod JavaScript (czyli na licencji GPL) na swojej stronie internetowej, a ta strona jest dostępna dla każdego w sieci, czy naruszam w jakiś sposób GPL? Co się stanie, jeśli chciałbym sprzedać komuś kod klienta (HTML, CSS, JavaScript)? Czy w tym przypadku potrzebuję innej licencji? Czy JavaScript (używany w witrynach internetowych) nie jest zawsze open source? Po otwarciu strony internetowej zawsze możesz przeczytać źródło. Czy muszę również zwolnić swój kod po stronie serwera, jeśli sprzedam witrynę zawierającą kod JavaScript na GPL? Co się stanie, jeśli ta witryna jest częściowo dostępna (część jest bezpłatna, a druga wymaga zapłaty), ale kod na licencji GPL (ta sama część) jest używany po obu stronach witryny? Co się stanie, jeśli kod na GPL znajduje się tylko w części witryny, która wymaga zapłaty za dostęp do niego? Jeśli sprzedam stronę internetową klientowi w ten sposób: 1. Sprzedaję Ci (jednorazowa opłata) cały kod związany z klientem (JavaScript, HTML i CSS) 2. **Nie sprzedaję** Ciebie kod po stronie serwera, wypożyczasz go (nie chcę pozwolić ci ponownie użyć mojego kodu po stronie serwera) Jeśli używam kodu JavaScript na GPL, czy coś naruszam? (Witryna jest dostępna dla każdego w sieci.) **Edytuj 2:** Dodano nowe konkretne pytanie: Co jeśli witryna może działać bez kodu po stronie serwera, mam na myśli, że JavaScript po prostu wywołuje strony PHP, które zawierają dane w formacie JSON. Inne osoby mogą zbudować stronę internetową po stronie klienta, ale będą musiały podać dane. Myślę, że w tym przypadku JavaScript wywołuje kod "PHP" (ale nie odwrotnie). Czy w takim przypadku naruszam GPL?


title: Dlaczego Big Data musi być funkcjonalna?

text: Ostatnio rozpocząłem pracę nad nowym projektem związanym z Big Data na mój staż. Moi menedżerowie polecili rozpocząć naukę programowania funkcjonalnego (bardzo polecali Scala). Miałem skromne doświadczenie w korzystaniu z F#, ale nie widziałem, jak ważne jest używanie tego paradygmatu programowania, ponieważ w niektórych przypadkach jest to kosztowne. Dean wygłosił ciekawą prezentację na ten temat i podzielił się swoimi przemyśleniami na temat tego, dlaczego „Big Data” tutaj: http://www.youtube.com/watch?v=DFAdLCqDbLQ Ale to nie było zbyt wygodne, ponieważ Big Data nie oznacza tylko Hadoop. Ponieważ BigData to bardzo niejasna koncepcja. Na chwilę o tym zapominam. Próbowałem wymyślić jeden prosty przykład, aby porównać różne aspekty, gdy mamy do czynienia z danymi, aby sprawdzić, czy sposób funkcjonalny jest drogi, czy nie. Skoro programowanie funkcjonalne jest drogie i zajmuje dużo pamięci dla małych danych, to dlaczego potrzebujemy go do Big Data? Daleko od wymyślnych narzędzi, próbowałem zbudować rozwiązanie dla jednego konkretnego i popularnego problemu przy użyciu trzech podejść: imperatywnego i funkcjonalnego (rekurencja, użycie kolekcji). Porównałem czas i złożoność, aby porównać te trzy podejścia. Użyłem Scali do napisania tych funkcji, ponieważ jest to najlepsze narzędzie do napisania algorytmu przy użyciu trzech paradygmatów def main(args: Array[String]) { val start = System.currentTimeMillis() // Fibonacci_P val s = Fibonacci_P(400000000) val end = System.currentTimeMillis() println("Funkcjonalny sposób: \n sekwencja Fibonacciego, której wartości nie przekraczają czterech milionów : %d \n Czas : %d ".format(s, end - start)) val start2 = System.currentTimeMillis () // Fibonacci_I val s2 = Fibonacci_I(4000000 0) val end2 = System.currentTimeMillis(); println("Sposób konieczny: \n ciąg Fibonacciego, którego wartości nie przekraczają czterech milionów : %d \n Czas : %d ".format(s2, end2 - start2)) } Sposób funkcjonalny : def Fibonacci_P(max: BigInt): BigInt = { //http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream //leniwa wartość Fibonaccisa: Stream[Long] = 0 #:: 1 #: : Fibonaccis.zip(Fibonaccis.tail).map { case (a, b) => a + b } lazy val fibs: Stream[BigInt] = BigInt(0)#::BigInt(1)#::fibs.zip (fibs.tail).map { n = > n._1 + n._2 } // println(fibs.takeWhile(p => p < max.toList) fibs.takeWhile(p = > p < max).foldLeft (BigInt(0))(_ + _) } Sposób rekurencyjny: def Fibonacci_R(n: Int): BigInt = n match { case 1 | 2 = > 1 przypadek _ = > Fibonacci_R(n - 1) + Fibonacci_R(n - 2) } Sposób imperatywny: def Fibonacci_I(max: BigInt): BigInt = { var pierwszy_element: BigInt = 0 var drugi_element: BigInt = 1 var suma : BigInt = 0 while (drugi_element < max) { suma += drugi_element drugi_element = pierwszy_element + drugi_element pierwszy_element = drugi_element - pierwszy_element } //Zwróć sumę } Zauważyłem, że programowanie funkcjonalne jest ciężkie! zajmuje to więcej czasu i zajmuje więcej miejsca w pamięci. Jestem zdezorientowany, gdy czytam artykuł lub oglądam wykład, mówią, że powinniśmy używać programowania funkcjonalnego w nauce o danych. To prawda, że jest to łatwiejsze i bardziej wydajne, szczególnie w świecie danych. ale zajmuje to więcej czasu i więcej miejsca w pamięci. Dlaczego więc musimy używać programowania funkcjonalnego w Big Data? Jakie są najlepsze praktyki korzystania z programowania funkcjonalnego (Scala) dla Big Data?


title: Czy wyniki obliczeń pamięci podręcznej C#?

text: Niedawno buduję podstawowy ray tracer w C# od podstaw, jako projekt edukacyjny/nauczycielski. Poprzednia wersja projektu (nazwijmy ją A) ma odbicia i cieniowanie rozproszone. Program renderuje scenę w około 900ms. Teraz właśnie stworzyłem wydanie B, które dodaje odblaski. Oczywiście założyłem, że czas renderowania się wydłuży. Wyobraź sobie moje zdziwienie, gdy ta sama scena została wyrenderowana w szybkim 120ms! Wyniki są absolutnie takie same (ponieważ obiekty w scenie nie mają w rzeczywistości świateł zwierciadlanych). Zaciekawiony, próbowałem zawęzić, która część kodu faktycznie przyspiesza. Myślę, że zawęziłem to do obliczeń wykonywanych zarówno w składniku odbicia, jak i składniku zwierciadlanym (obliczanie wektora odbicia). Dla każdej iteracji ray tracingu oba obliczają ten sam wektor (te same dane wejściowe, te same dane wyjściowe), ale nie ma współdzielenia danych między nimi. Zastanawiałem się więc, czy C# w jakiś sposób buforuje wyniki, które uwzględniłyby wzrost wydajności? Oto kod dla prywatnego renderowania odbić Color TraceReflection(Ray ray, Vector3D normal, Vector3D hitPoint, IPrimitive hitObject, int Level) { //Oblicz kierunek odbicia var reflectionDir = (ray.Direction - (2 * (ray.Direction * normal)) * normalny)).Normalizuj(); //Utwórz promień odbicia tuż poza punktem przecięcia i prześledź go var reflectionRay = new Ray(hitPoint + reflectionDir * Globals.Epsilon, reflectionDir); //Pobierz kolor z odbicia var reflectionColor = RayTrace(reflectionRay, Level + 1); //Oblicz ostateczny kolor var resultColor = reflectionColor * hitObject.PrimitiveMaterial.ReflectionCoeff; zwróć wynikKolor; } A oto funkcja podświetlenia zwierciadła: public Color GetColor(IPrimitive HitObject, Ilight Light, Vector3D ViewDirection, Vector3D LightDirection, Vector3D Normal) { //Przeanalizuj wektor odbicia var reflectionDirection = (LightDirection - (2 * LightDirection * Normal) * Normal). Normalizować(); var kropka = Kierunek odbicia * Kierunek Widoku; //jeśli iloczyn skalarny wynosi zero lub mniej, oznacza to, że kąt między dwoma wektorami wynosi 90 lub więcej i nie następuje podświetlenie. if (kropka > 0) { var specularPower = HitObject.PrimitiveMaterial.SpecularCoeff * Math.Pow(kropka, HitObject.PrimitiveMaterial.SpecularExponent); var highlightColor = HitObject.PrimitiveMaterial.DiffuseColor * specularPower; powrót wyróżnienieKolor; } zwróć nowy Color(); } ## UPDATE Poprzednie liczby dotyczyły sytuacji, gdy oba programy działały w trybie debugowania. Właśnie przestawiłem je na wydanie, a liczby są takie, jakich się spodziewałem (270 ms bez specular. 380 ms **z** specular). Wygląda więc na to, że w jakiś sposób winowajcą jest tryb debugowania.


title: Planowanie zadań w zwinnym zespole

text: Na początku każdego sprintu nasz zespół wyciągnie garść historyjek użytkowników, a następnie, po kolei, napisze dla nich nieco bardziej szczegółowe zadania i przydzieli każdemu z nich konkretną godzinę. Posiadanie poszczególnych zadań pomaga nam ustalić nasze wypalenie sprintu, mając określoną całkowitą liczbę godzin z góry, a także ułatwia śledzenie, kto pracuje nad czym i co zostało ukończone. Jednak ostatnio przeczytałem, że niektóre dojrzałe zespoły Agile całkowicie wyeliminowały korzystanie z pisania zadań i udają się bezpośrednio do swoich sprintów, uzbrojone tylko w swoje historyjki użytkownika jako modularne źródła pracy dla sprintu. Trudno mi zrozumieć, w jaki sposób wyeliminowanie planowania zadań może nadal zapewnić zespołowi Agile wystarczająco małe jednostki pracy, aby utrzymać porządek i przejrzystość sprintu. Czy ktoś tutaj próbował lub używał tego podejścia, a jeśli tak, to jak dokładnie śledzić, kto nad czym pracuje?


title: Jak prawidłowo ustrukturyzować projekt w winform?

text: Jakiś czas temu zacząłem tworzyć aplikację winform, która w tamtym czasie była mała i nie zastanawiałem się nad strukturą projektu. Od tego czasu dodałem dodatkowe funkcje, gdy potrzebowałem, a folder projektu jest coraz większy i teraz myślę, że nadszedł czas, aby w jakiś sposób ustrukturyzować projekt, ale nie jestem pewien, jaka jest właściwa droga, więc mam kilka pytań. **Jak poprawnie przebudować folder projektu?** W tej chwili myślę o czymś takim: * Utwórz folder dla formularzy * Utwórz folder dla klas użytkowych * Utwórz folder dla klas, które zawierają tylko dane **Jaka jest konwencja nazewnictwa podczas dodawania klas?** Czy powinienem również zmienić nazwy klas, aby można było zidentyfikować ich funkcjonalność po prostu patrząc na ich nazwę? Na przykład zmiana nazwy wszystkich klas formularzy, tak aby ich nazwa kończyła się na **Form**. A może nie jest to konieczne, jeśli tworzone są dla nich specjalne foldery? **Co zrobić, aby nie cały kod głównego formularza znalazł się w Form1.cs** Innym problemem, który napotkałem, jest to, że główny formularz staje się coraz bardziej masywny z każdą dodawaną funkcją, plikiem kodu (Form1.cs ) robi się naprawdę duży. Mam na przykład TabControl, a każda karta ma kilka kontrolek, a cały kod trafił do Form1.cs. Jak tego uniknąć? **Ponadto, czy znasz jakieś artykuły lub książki, które dotyczą tych problemów?**


title: Dopasowywanie dwóch list danych o różnych konwencjach

text: Mam dwie listy danych, A i B. Te listy są agregowane z wielu źródeł i zawierają literówki, skróty, których nie ma w innych, a także brak mapowania 1-1, ale nigdy nie będą miały wartości w A, która mapuje do dwóch wartości w B i na odwrót. W tej chwili przeprowadzamy naiwne (porównywanie ciągów znaków), aby utworzyć mapę między dwiema listami. To ma około 80% dokładności. Chciałbym uzyskać tę dokładność do co najmniej 90% (95% byłoby niewiarygodne). Czy są jakieś narzędzia programowe, których można użyć do czegoś takiego? Potrzebuję jakiegoś narzędzia, które mogłoby przeszukiwać obie listy i sugerować dopasowania. **Aktualizacja z komentarzy:** obecnie generujemy trafienie tylko wtedy, gdy `A[x] == B[y]`. Daje nam to dopasowanie do 80% danych w zestawach danych (z których każdy zawiera około pięćdziesięciu tysięcy wierszy). To, co chciałbym zrobić, to znaleźć narzędzie lub opracować je w oparciu o algorytm, który pozwoli mi zasugerować dopasowanie dwóch wartości, które mogą mieć to samo znaczenie, np. „KING ROAD” i „KG RD”. Te potencjalne dopasowania zostaną następnie przekazane człowiekowi w celu przejrzenia i zatwierdzenia lub zignorowania. Ogólnie użyłbym czegoś takiego jak Levenshtein, ale są to dane nieco sparametryzowane (pomyśl o adresach) i nie wiem, jak zastosować coś takiego jak Levenshtein do danych strukturalnych.


title: Bezpieczeństwo w prywatnym serwisie internetowym

text: Zajmuję się tworzeniem strony internetowej i serwisu internetowego dla małej gry on-line. Technicznie będę używał Express (node.js) i MongoDB+Redis dla baz danych. Oto struktura, którą wymyśliłem: * Jeden serwer Express, który będzie służył jako usługa sieciowa. To połączy się z bazami danych. * Jeden serwer Express, który będzie udostępniał witrynę internetową. Nawiąże połączenie z usługą sieci Web, aby pobrać i przesłać informacje. * Aplikacja iOS i Android będzie mogła współpracować z WebService. Biorąc pod uwagę: * Jest to mała gra. Przekazywane informacje nie są krytyczne. * NIE będzie aplikacji innych firm. Przynajmniej na razie. Obawiam się, jaki poziom bezpieczeństwa powinienem zastosować w każdym ze scenariuszy: * Bezpieczeństwo użytkownika grającego przez przeglądarkę internetową * Bezpieczeństwo aplikacji i serwera WWW łączącego się z WS. Przyjrzałem się różnym opcjom i: * OAuth i/lub Https to za dużo dla tego scenariusza, prawda? * Czy dobrym rozwiązaniem będzie hashowanie użytkownika i hasła za pomocą MD5 (lub podobnego) i trochę soli? Chciałbym uzyskać wskazówki i zbadać je samodzielnie, zamiast otrzymywać odpowiedź typu „powinieneś użyć tego modułu node.js…” Z góry dziękuję,


title: Obsługa błędów kompilatora w Continuous Integration

text: Uważam, że ostrzeżenia należy traktować jako błędy. Jeśli zaczniesz ignorować ostrzeżenia, zaczniesz przeoczyć „ważne” ostrzeżenia wśród „nieważnych”. Więc mój system ciągłej integracji kończy się niepowodzeniem kompilacji, jeśli są ostrzeżenia. Jeden z moich kompilatorów ma błąd, który powoduje, że zgłasza ostrzeżenie, gdy nie powinien. Mój kod jest poprawny i kompiluje się poprawnie, i nie mogę wyłączyć tego szczególnego ostrzeżenia. Jak powinien sobie z tym poradzić mój system CI? Czy powinienem tymczasowo wyłączyć „ostrzeżenia jako błędy”, dopóki kompilator nie zostanie załatany?


title: Analizator żądań/odpowiedzi HTTP dla systemu Android

text: Na przykład podczas korzystania z Firefoksa na moim komputerze analiza HTTP jest dość łatwa przy użyciu na przykład zakładki Net programu Firebug. GET, POST itp., wszystko tam. Jaka byłaby najlepsza technika sprawdzania żądań HTTP wysyłanych przez aplikację na Androida? Inna aplikacja? Jakiś hack przez Wi-Fi i router lub modem USB?


title: Wizualne PHP? czy Visual Ruby?

text: Jestem zaintrygowany. Dlaczego w branży open source nie ma produktów „Visual”, takich jak „Visual” Basic, „Visual” C++ lub „Visual” ASP.NET? Dlaczego nie mamy Visual PHP? czy Visual RUBY?


title: Jak pisać zadania w Jira korzystając ze Scrum?

text: Zamierzam rozpocząć nowy projekt używając Scrum i Jira i mam kilka pytań odnośnie tego, jak pisać odpowiednie zadania w Jira. Z tego, co rozumiem, user stories to krótkie, nietechniczne opisy napisane przez interesariuszy (najlepiej), które mogą mieć postać: Jako użytkownik chcę zamawiać monki, żebym mógł zarabiać pieniądze. Jednak te zadania muszą być rozbudowane o wymagania, wymagania techniczne itp. Moje pytanie brzmi: Jak poprawnie piszesz takie zadania w Jira i czy dobrze rozumiem historyjki użytkownika. Czy powinienem tworzyć historyjki użytkownika jako superzadania, a następnie tworzyć podzadania z rzeczywistymi zadaniami/wymaganiami? Czy powinienem oszacować superzadania/historyjki użytkownika, czy tylko podzadania?


title: Czy powinniśmy zweryfikować zmianę stanu przed próbą wykonania go we wzorcu stanu?

text: Kiedy stosowanie niedozwolonych przejść wzorca stanu powinno skutkować wyrzuceniem wyjątku (a przynajmniej to zrozumiałem ze wzorca), wiem, że wyjątki dotyczą „nieoczekiwanego zachowania”, w którym akcja nie powinna się zdarzyć. Błędy byłyby bardziej odpowiednie, jeśli wymagane działanie jest powszechne (np. użytkownik wprowadza błędne hasło) Teraz wyobraź sobie to, mam panel administracyjny, w którym wyświetlana jest lista zamówień, a każde zamówienie ma 3 przyciski (Zwróć, Anuluj, Zmień zamówienie), gdzie każdy z nich zmienia stan zamówienia, jeśli operacja jest dozwolona. 3 przyciski są domyślnie włączone (tu upraszczam sprawę, ponieważ mój prawdziwy system jest znacznie bardziej złożony). Teraz użytkownik może na przykład nacisnąć przycisk anulowania dla zamówienia ze stanem (Anulowane), który jest nieprawidłowym przejściem stanu. 1. Skoro spodziewałem się, że ta nielegalna akcja przejścia nastąpi, czy weryfikacja przed próbą **Anulowania** linii byłaby bardziej odpowiednia? 2. Jeśli dokonam walidacji przed przejściem, czy nadal potrzebuję wyjątków w modelu? 3. Czy istnieje lepsze podejście do całego problemu (pominięcie wyłączenia przycisków i walidacji po stronie klienta)


title: Jak powstrzymać się od robienia zbyt wiele podczas utrzymywania kodu?

text: W mojej poprzedniej pracy zajmowałem stosunkowo łatwą rolę programisty ASP.NET, która wymagała ode mnie przekazywania dużej liczby małych systemów bazodanowych do użytku wewnętrznego w firmie. Wyprodukowałem wymagany kod i przez cały czas miałem prawie całkowitą kontrolę nad kreatywnością. Po wydaniu systemu wracałem nawet do niego, gdy miałem niski okres pracy i refaktoryzowałem kod i ogólnie ulepszałem system dla użytkowników i/lub innych programistów. Teraz ruszyłem dalej i próbowałem zmienić swoją karierę bardziej w kierunku tego, co mnie interesuje. Dzięki temu udało mi się znaleźć świetną pracę (dużo nauki, złożone algorytmy itp.). Problem polega na tym, że w mojej poprzedniej pracy nabrałem złych nawyków, które najwyraźniej przeniknęły do nowej pracy. Moim pierwszym zadaniem w mojej nowej pracy jest aktualizacja skryptu Bash, który wykonuje kompilację i wdrażanie kodu, i zasadniczo facet, dla którego wykonywałem pracę, zasadniczo odmówił sprawdzenia mojego kodu, ponieważ różnica pliku była _ogromna_. Problem polegał na tym, że podczas przerabiania kodu zasadniczo przerobiłem połowę kodu na funkcje, ustandaryzowałem wszystkie dane wyjściowe, dodałem „tryb debugowania” i zasadniczo dałem skryptowi piekielny połysk. Ale robiąc to, zboczyłem z rezerwacji i zrobiłem _za dużo_. Mój kolega zgodził się, że kod był dobry, ale nie było sposobu, abym mógł go zatwierdzić bez dezorientowania innych programistów i powodowania konfliktów scalania. Teraz martwię się, że moja wolność w mojej ostatniej pracy, w połączeniu z moim brakiem doświadczenia jako programisty, nabrały we mnie nawyku zmiany kodu na autopilocie. **Czy istnieją pewne techniki pożarowe, które pozwalają trzymać się na smyczy podczas utrzymywania kodu? Jakieś wskazówki dotyczące oceny, gdy wykonałeś zbyt dużo refaktoryzacji? Gdzie narysujesz granicę między „jeśli nie jest zepsute, nie naprawiaj tego”, a pozwoleniem na gnicie kodu?** Dzięki! * * * **Kilka wyjaśnień** * Pracowałem nad tym konkretnym skryptem przez trzy dni i podczas gdy to robiłem, kod zmieniał się codziennie podczas pobierania z kontroli źródła! W żadnym wypadku nie są to duże zmiany, ale zmiany, które wymagają scalenia. * Łączna długość skryptów Bash (jeśli miałyby być połączone) to około 4000-5000 linii. Część, nad którą pracuję (jeden plik) to 2000. * Musisz wziąć pod uwagę, że zdecydowanie znajduję się tutaj na dole łańcucha pokarmowego. Robienie "przejść do kodu", podczas gdy robiłem je w przeszłości, nie jest tutaj opcją, ponieważ nie mogę powiedzieć innym programistom, jak mają wykonywać swoją pracę, mając na koncie zaledwie 2 tygodnie doświadczenia. Bardziej staram się nawiązać kontakt z moimi kolegami w tej chwili, a nie drażnić ich w niewłaściwy sposób, krytykując ich kod.


title: Biblioteka Open Source P2P Java Chat

text: Tworzę aplikację P2P na Androida. Początkowa funkcjonalność, do której zmierzam, to czat. Czy ktoś może zaproponować dobrą bibliotekę open source P2P, na której mogę zbudować swoją aplikację? Większość z tych, które znalazłem, to kompletne aplikacje, ale chcę mieć bibliotekę, której mogę użyć do zbudowania mojej aplikacji.


title: Czy jeden programista może pracować w witrynie znajdującej się na serwerze innego programisty?

text: Przepraszam za mylący tytuł. Pozwolę sobie wyjaśnić: obecnie staram się opracować witrynę. Mój obecny programista zajął się stroną tak daleko, jak myślę, że jest w stanie i planuję zatrudnić innego programistę, aby dopracował ją, debugował i uaktualnił niektóre z bardziej technicznych szczegółów. Witryna jest hostowana na serwerze mojego obecnego programisty. Zaplanowali pracę nad tym do połowy kwietnia, kiedy to przeniosą witrynę na mój serwer. Chciałbym, aby nowy programista jak najszybciej zaczął uaktualniać stronę. Więc moje pytanie brzmi: czy nowy programista może rozpocząć pracę nad uaktualnieniem witryny, gdy jest jeszcze na serwerze starego programisty (i bez wiedzy starego programisty)? Czy nowy programista musiałby stworzyć stronę lustrzaną i pracować nad nią w ten sposób? Mam problem z wyobrażeniem sobie, czy jest to możliwe, więc każda rada, którą możesz zaoferować, byłaby bardzo wdzięczna!


title: Javadoc dla outsiderów kontra javadoc dla insiderów

text: Tworząc API dla klienta, public javadoc musi zawierać tylko to, co chcesz pokazać klientowi. Szkoda, ponieważ javadoc jest również pod pewnymi względami oczywistym celem dla niektórych rodzajów wewnętrznej dokumentacji projektowej. Można sobie wyobrazić niestandardowy doclet lub inną sztuczkę, która pozwala na współistnienie tych dwóch rodzajów informacji w źródle. Ktoś tam był?


title: Dlaczego Garbage Collection zamiata tylko stertę?

text: Zasadniczo dowiedziałem się do tej pory, że wyrzucanie śmieci usuwa na zawsze każdą strukturę danych, która nie jest obecnie wskazywana. Ale to tylko sprawdza stertę pod kątem takich warunków. Dlaczego nie sprawdza również sekcji danych (globalnych, stałych itp.) lub stosu? Co takiego jest w hałdzie, że jest to jedyna rzecz, którą chcemy zebrać na śmieci?


title: Jakie jest dobre oprogramowanie do śledzenia czasu/zadań do wykorzystania podczas konsultacji?

text: Poszukuję oprogramowania do śledzenia czasu pracy do indywidualnego doradztwa przy wielu projektach jednocześnie. Projekty, nad którymi pracuję są rozliczane dla różnych klientów. Niektórzy klienci są rozliczani godzinowo, podczas gdy inni są rozliczani na podstawie projektu. Śledzę również osobiste projekty, które mogą nigdy nie przynosić dochodu. Muszę być w stanie śledzić czas do poziomu indywidualnego zadania. Szukam oprogramowania, które jest łatwe w użyciu, opłacalne, łatwe do wystawienia faktury i ma raporty z eksploracji danych.


title: Czy ta książka jest wiarygodnym źródłem początkującym Java EE?

text: Podstawowe serwlety i strony Javaserver: Core Technologies, tom. 1 (2nd Edition) Czy mogę polegać na tej książce, aby nauczyć się Servletów i JSP, czy może jest tam lepsza książka, którą powinienem przeczytać?


title: Jaką semantykę należy stosować w odniesieniu do metodologii kaskadowych i zwinnych

text: Właśnie brałem udział w debacie dotyczącej semantyki definiowania podejść do cyklu życia oprogramowania. Moim zdaniem wodospad i agile nie są metodologiami, są niejasno określonymi podejściami/modelami. Definicja metodologii będąca zestawem narzędzi i technik używanych do dokładnego zdefiniowania kroków podjętych w celu opracowania udanego projektu oprogramowania. W moim rozumieniu następujące stwierdzenia są prawdziwe: - * SSADM (Structured System Analysis and Design) to metodologia kaskadowa * Scrum to zwinna metodologia * XP to zwinna metodologia Dlatego nie ma sensu pisać: - * Wodospad to metodologia kaskadowa * Agile jest metodologią zwinną Ponieważ wpadniesz w rekursywny bałagan. Problem polega na tym, że za każdym razem, gdy wdaję się w tę debatę z kimkolwiek, wydaje się, że są pewni, że wodospad jest metodologią, a więc jest zwinny. Przykładem tego, co uważam za niepoprawne, jest następujący artykuł: - http://en.wikipedia.org/wiki/Software_development_methodology > Metodologia Wodospad Model prototypowy Przyrostowy Iteracyjny model V Spirala > Scrum Cleanroom RAD DSDM RUP XP Agile Lean Dual Vee Model TDD FDD DDD Są one wymienione jako metodologie na stronie wikipedii i uważam, że jest to po prostu błędne. Czy ktoś może mnie poprawić i/lub poinformować, jakiej terminologii powinienem używać?


title: Dlaczego internetowy interfejs API firmy Microsoft nosi nazwę ASP.Net Web API

text: ASP.Net to Active Server Pages używające .Net Framework Wikipedia mówi > Zostało wydane po raz pierwszy w styczniu 2002 roku w wersji 1.0 platformy .NET > Framework i jest następcą technologii Microsoft Active Server Pages (ASP) >. Odpowiadając na to pytanie, przyszła mi do głowy następująca myśl – dlaczego Microsoft nazwał swoje Web API jako „ASP.Net Web API”. W interfejsie Web API nie są zaangażowane żadne „Strony”. Dlaczego więc niektórzy nazywają to „Active Server Pages .Net Web Api”? Uważam, że istnieją pewne "podstawowe funkcje" ASP.Net współdzielone z Web API. Więc czym one są? Kolejna obserwacja — dlaczego znacznik w `programmers` nazywa go „asp.net-mvc-web-api”? **Referencja** : 1. Blog ScottGu – ASP.NET Web API


title: Jak Elastic Search podchodzi do problemu rozproszonego członkostwa i konsensusu?

text: Rozumiem już, że Elastic Search ma być wdrażany w topologii rozproszonej, w której można mieć wiele węzłów dla klastra instancji ES. Podoba mi się API i wygląda obiecująco. Ale zastanawiam się, jak Elastic Search rozwiązuje niektóre standardowe problemy w obliczeniach rozproszonych. Moje pytania „architektoniczne” są motywowane próbą zrozumienia, czy powinienem zobowiązać się do korzystania z produktu. Rozważ problem członkostwa: jeśli dodam węzeł do klastra, skąd klaster Elastic Search wie, że należy dodać, że węzeł chce się przyłączyć? Albo co się stanie, jeśli węzeł ulegnie awarii (lub sieć do centrum danych, w którym się znajduje) stanie się zbyt niestabilna. Czy używa jakiegoś protokołu plotkowania, jak robi to Amazon Dynamo? Rozważ problem konsensusu: jeśli POST dokumentu do jednego węzła w klastrze, w jaki sposób zmiana zostanie rozpropagowana do innych węzłów? Oczywiście rozumiem, że dokument musi zostać zindeksowany, więc nie mogę oczekiwać, że zapytanie wyszukiwania go natychmiast znajdzie. Czy ES używa algorytmu Paxos? Algorytm tratwy? Uwaga gdyby ktoś mógł oznaczyć to pytanie jako „elasticsearch”, byłbym wdzięczny!


title: Które licencje są bezpłatne do użytku komercyjnego?

text: Gubię się w masie licencji – GPL, LGPL, Creative Commons, BSD, Apache itp. i szukam poradnika dla początkujących. Jakie są ograniczenia korzystania z komponentu na popularnej licencji, takiej jak ta, bez płacenia za produkt komercyjny? Np. * czy muszę redystrybuować źródło? * czy muszę je zaliczać? * co jeśli zmodyfikuję komponent? itd. Z tego, co mogę powiedzieć z http://www.codeproject.com/info/Licenses.aspx, tylko GPL i Creative Commons zmuszają Cię do redystrybucji źródeł?


title: Czy czas kompilacji 8 sekund (przyrostowy) jest powszechny?

text: Mój obecny projekt zajmuje 8 sekund, aby zbudować jeden plik C++. Czy to powszechne? Inne pliki zajmują 12-15 sekund, ale większość w tej chwili to około 8 sekund. Używam programu Visual Studio, aby podać mi godzinę. Wszedłem do nagłówków i usunąłem rzeczy, których nie potrzebowałem i użyłem deklaracji forward. Zaoszczędziło mi to około 2 sekund na plik, a przejście jednego nagłówka zajmuje około 4 sekund. W tym nagłówku potrzebuję wszystkich jego deklaracji i korzystania z wersji lite, która usuwa funkcje publiczne metod prywatnych, których nie potrzebuję. Czy powinienem się cieszyć, że trwa to około 8 sekund, czy to za długo, aby skompilować jeden plik?


title: Planowanie rozwoju oprogramowania

text: Jestem całkiem nowy w programowaniu (wciąż student) i nie miałem dużego doświadczenia w planowaniu rozwoju oprogramowania. Zwykle, jeśli jest to duży projekt, profesorowie dzielą go na etapy dla mnie. Jeśli jest mniejszy, zwykle po prostu nurkuję. To do tej pory działało, ale wolałbym lepszy proces. Planuję zrobić dość ambitny projekt i obawiam się, że mój kod będzie bałaganem i/lub zajmie dużo więcej czasu, niż gdybym go właściwie zaplanował. Poproszę o metodę/technikę/porady dotyczące planowania rozwoju oprogramowania.


title: Dlaczego pierwszy kompilator został napisany przed pierwszym interpreterem?

text: Pierwszy kompilator został napisany przez Grace Hopper w 1952 roku, natomiast interpreter Lisp został napisany w 1958 roku przez Steve'a Russella, ucznia Johna McCarthy'ego. Pisanie kompilatora wydaje się dużo trudniejszym problemem niż interpreter. Jeśli tak, to dlaczego pierwszy kompilator został napisany sześć lat przed pierwszym tłumaczem?