title: Czy zaplanowane serwery zadań to właściwy wybór dla silnika gier, w którym czas jest wrażliwy?

text: Obecnie zajmuję się architekturą i projektowaniem nowej, ekscytującej aplikacji internetowej, która wejdzie w pewne obszary, w których mam bardzo małe doświadczenie, czyli tworzenie gier. Aplikacja niekoniecznie jest grą, ale istnieje kilka bardzo wrażliwych czasowo zadań i zaplanowanych zadań, które serwer będzie musiał wykonać, aby wykonać czynności związane z grą (np. Nowy mecz rozpoczyna się codziennie w południe w przypadku 12-dniowego turnieju, aktualizując tablice wyników o 17:00 każdego dnia itp.) W przeszłości zwykle używałem zadań cron z Quartz Scheduler działającym na serwerze aplikacji internetowych, ale wiem, że nie jest to prawdopodobnie skalowalne rozwiązanie dla naprawdę ogromnej bazy użytkowników, jaką jest zarządzanie mówiąc mi, żebym się spodziewał (przyznaję, że to kierownictwo i prawdopodobnie są bardzo optymistyczni w tej sprawie), a także o tym, jak ważna jest rola tych zadań w tej aplikacji internetowej. Inną ważną rzeczą, którą chcę wziąć pod uwagę, jest to, że chcę uniknąć SPOF (Single Point Of Failure). Jeśli podstawowy serwer zadań ulegnie awarii, inny serwer zadań powinien być w stanie pomyślnie uruchomić zadanie w jego miejsce. Przypuszczam, że można to zrobić odpowiednio do blokowania rekordów i transakcji w bazie danych. Moje pytanie brzmi, czy zaplanowane zadania, takie jak CRON działające na serwerze aplikacji internetowej, są mądrym wyborem projektowym, biorąc pod uwagę czasowe zadania gry tej aplikacji, czy też jest coś bardziej odpowiedniego do uruchamiania skalowalnego silnika gier równolegle do serwerów aplikacji internetowych?


title: Jak utrzymać motywację i entuzjazm po znalezieniu potrzebnego rozwiązania?

text: Obecnie podejmuję się projektu oprogramowania w wolnym czasie. Kiedy po raz pierwszy dostałem projekt, poświęciłem wiele godzin na opracowanie „trudnych” części rozwiązania. Spędziłem wiele godzin na googlowaniu i czytaniu zajęć dostępnych na MSDN, które mógłbym wykorzystać w projekcie. Byłem szalenie podekscytowany i pasjonujący się wykonywaniem tej pracy. Jednak raz dostałem działające próbki tego, jak ominąć „podchwytliwe” części i dotarłem do części, w której wszystko, co musiałem zrobić, to „gruntowa” praca, aby ukończyć projekt, straciłem całe zainteresowanie i chęć do pracy on projekt. Nagle zamiast czekania na siadanie i pracę nad tym projektem, motywowanie się stało się przykrym obowiązkiem i dużym kłopotem. Teraz szybko zbliżam się do terminu i wykonuję teraz pracę, ale jest pod bardzo dużą presją, ponieważ zostawiłem ją prawie zbyt blisko terminu! Uda mi się to zrobić, ale będzie to wymagało kilku całonocnych nocy. (Przy okazji, całkowicie gardzę robieniem tych całonocnych nocy i chciałbym je wyeliminować, utrzymując swoją motywację i nieprzerwanie pracując nad projektem.) Więc moje pytania są takie, czy to normalne? Czy wszyscy inni zauważają takie skoki i dołki w swoim entuzjazmie do projektów? Ktoś bardziej doświadczony ma jakieś rady, jak podtrzymać motywację? A może po prostu nie zostałem zaprojektowany do pracy nad pełnym cyklem życia projektu, czy ja i ludzie tacy jak ja pełnię rolę typu R&D, gdzie mogę zabawić się w odkrywaniu części projektów i pozostawić komuś innemu dokończenie „les interesujących” /przyziemne" kodowanie?


title: Odpowiednik #map w rubinach w golang

text: Bawię się z Go i natrafiam na coś, czego nie mogę znaleźć w Google, chociaż na pewno coś istnieje: używam następującej struktury: type Składnia struct { name string extensions *regexp.Regexp } type Scanner struct { classifier * bayesian.Classifier save_file string name_to_syntax map[string] *Syntax extensions_to_syntax map[*regexp.Regexp] *Składnia } Chciałbym wykonać następujące czynności za pomocą Go i cytuję ruby, ponieważ tak to zrobię używając ruby: test_regexpes = my_scanner.extensions_to_syntax.keys Moim celem jest uzyskanie tablicy *regexp.Regexp . Masz pomysł, jak to zrobić w prosty sposób? Dziękuję Ci !


title: Jak użytkownicy testowi mogą uzyskać dostęp do nieopublikowanej aplikacji na iOS?

text: Rozważam outsourcing tworzenia aplikacji na iOS różnym niezależnym programistom. Będę miał różnych testerów aplikacji. Wszyscy pracujemy dla oddzielnych firm. Niektórzy z tych testerów będą klientami, od których chciałbym uzyskać informację zwrotną. Ponieważ zaangażowanych jest wielu programistów, spodziewam się, że codziennie będzie pojawiać się nowe wydanie. Jak to zrobić? Czy każdy z testerów musiałby kupić jakąś licencję, aby uniknąć konieczności przechodzenia przez proces zatwierdzania aplikacji? Czy jest jakiś prosty sposób, aby to zrobić, aby nie było to kłopotliwe dla naszych przyjaznych klientów, którzy chcą przetestować naszą aplikację?


title: Starsi członkowie zespołu chcą przenieść istotne dla zapytania trwałe dane z bazy danych do pamięci podręcznej. Czy to ma sens?

text: Jestem młodym inżynierem zatrudnionym niedawno w małej firmie, która sprzedaje produkty ogółowi społeczeństwa. Używamy Ruby On Rails i MySQL. Nasza baza danych zawiera wiele danych klientów, ale znacznie więcej „statycznych” trwałych danych. Dane te są tak rzadko zmieniane, że niektórzy starsi inżynierowie zaczęli mówić o przeniesieniu ich do magazynu danych z pamięcią podręczną. Jedną z reklamowanych zalet tego planu jest ułatwienie wdrażania, ponieważ nie musielibyśmy już uruchamiać bazy danych; zamiast tego wiele danych miałoby stałe identyfikatory i moglibyśmy po prostu wykonać kopię zapasową pamięci podręcznej i wdrożyć kopię zapasową. Moje zapytanie dotyczy operacyjnych aspektów prowadzenia witryny po dokonaniu zmiany, a nie samej zmiany. Posiadamy trwałe dane, które są wykorzystywane do zapytań do bazy danych w odpowiedzi na działania użytkowników, które są wykorzystywane na co dzień. Umieszczenie go w pamięci podręcznej usunęłoby nasze możliwości uruchamiania zapytań SQL, zamiast tego odpytywanie pamięci podręcznej z kodu RoR. Nie mam wystarczającego doświadczenia, aby ocenić, czy to dobry plan, czy nie, ale dla mnie to dziwnie pachnie. Czy ktoś widział kiedyś podobną sytuację lub miał doświadczenie w tej dziedzinie? Szukam zapewnienia, że to nie jest szalony pomysł.


title: Obsługa subskrypcji, sald i zmian planów cenowych

text: **Preambuła** Moim celem jest stworzenie kodu wielokrotnego użytku dla wielu projektów (a także opublikowanie go na githubie) do zarządzania subskrypcjami. Wiem o dostawcach rozliczeń rozłożonych i cyklicznych, ale nie to ma na celu ten moduł. Powinien to być tylko wrapper/pomocnik do obliczania salda konta, łatwe powiadomienia o odnowieniu subskrypcji i obsługi kalkulacji cen. Są kraje, w których nie można korzystać z rozliczeń cyklicznych, ponieważ dostawcy usług lub możliwości płatności mają słabą obsługę lub jej brak lub są zbyt drogie (mikropłatności). Są też osoby, które nie chcą korzystać z rozliczeń cyklicznych, ale płacą rachunek ręcznie / pobierają fakturę na koniec roku. Dlatego proszę nie sugerować płatności cyklicznych, cyklicznych lub podobnych usług PayPal. **Sytuacja** Załóżmy, że masz model, który może wykupić abonament (np. „Użytkownik”). Ten model ma pole, które przechowuje identyfikator planu subskrypcji, który jest aktualnie subskrybowany. Tak więc przy każdej zmianie planu zmiana jest rejestrowana. Istnieje model (np. `SubscriptionPlanChanges`) z następującymi polami rejestrującymi wspomniane zmiany: * `subscriber` odnoszący się do modelu subskrypcji (w tym przypadku `User`) * `from_plan` określający identyfikator planu jaki model posiadał przed zmianą * `to_plan` definiowanie identyfikatora planu, który model wybrał teraz * `created_at` jest polem daty i czasu przechowującym zmiany * `valid_until` przechowuje datę do momentu, gdy aktualna subskrypcja jest ważna * `paid_at` jest również polem daty i czasu, które określa, czy (i kiedy) subskrypcja została opłacona Oczywiście, ten układ jest dyskusyjny. **Pytanie o saldo konta** Gdy Użytkownik zmienia swój plan abonamentowy, muszę porównać pola planu, uzyskać wycenę i obliczyć odliczenie za nowy plan na podstawie `ważnego_do_czasu` bieżącego planu i jego ceny. Powiedz: Subskrybujesz roczny plan A, ale po 6 miesiącach uaktualniasz do planu B, więc otrzymujesz odliczenie w wysokości połowy zapłaconej ceny za 6 miesięcy planu A. Zastanawiam się: Jeśli użytkownik np. przełącza się na darmowy plan, ma kredyt, który można odliczyć, jeśli użytkownik chce ponownie przejść. Czy buforujesz tę wartość w dodatkowym polu, czy za każdym razem obliczasz wszystkie rekordy związane z tym użytkownikiem? Czy dodałbyś/zmieniłbyś coś w układzie tabeli? **Kwestia łatwej zrozumiałości** Gdy nadejdzie koniec okresu abonamentowego, użytkownik otrzymuje powiadomienie i ma możliwość przedłużenia abonamentu, płacąc ponownie. Najłatwiej byłoby po prostu zaktualizować `paid_at` i `valid_until` o nowe opcje subskrypcji. Nie jestem jednak pewien, czy przechowujesz wszystkie dane, których ktoś może potrzebować, na przykład historię płatności/subskrypcji. Inną opcją byłoby utworzenie dodatkowego rekordu, w którym `from_plan` i `to_plan` mają ten sam identyfikator (symbolizując tym samym „brak zmian”). Ale czy nie przeszkadzałoby to w jakiś sposób w obliczaniu salda konta? Jeśli ktoś mógłby wskazać mi właściwy kierunek logiki obsługującej takie subskrypcje, bardzo bym to docenił. * * * **AKTUALIZACJA** Już teraz dziękujemy za pomoc. Myślę, że moje pytanie było zbyt niejasne, więc postaram się być bardziej precyzyjny, używając mniej abstrakcji. Niestety nie udało mi się jeszcze rozwiązać mojego problemu. _Przypadek A_ „Użytkownik” może wybrać „Plan subskrypcji A”. To obecnie przechowuje „SubscriptionPlanChange”, aby go śledzić. Po m.in. 5 miesięcy, „Użytkownik” uaktualnia swoją subskrypcję do „Planu subskrypcji B”. Płaci więc cenę za swoją nową subskrypcję, odliczając cenę planu a za niewykorzystane 7 miesięcy. _Przypadek B_ Po 3 miesiącach „Użytkownik” powraca do swojego „Planu subskrypcji A”. Nie musi płacić, ale otrzymuje za to saldo, dzięki czemu po zakończeniu subskrypcji otrzymuje to saldo odjęte za jego nową subskrypcję. _Przypadek C_ `Użytkownik` może wybrać plan subskrypcji dla podusługi, która ma niezależne plany subskrypcji. Te same „Przypadek A” i „Przypadek B” mogą dotyczyć tej subskrypcji usługi podrzędnej. `_Przypadek D_` Użytkownik anuluje jedną ze swoich subskrypcji. Skutkuje to uzupełnieniem jego salda. Moje pytanie (przynajmniej obecnie) zależy głównie od tego, jak prawidłowo przechowywać te dane, abym mógł odtworzyć historię subskrypcji do analizy biznesowej i obliczenia sald, uzyskać zaległe płatności na podstawie subskrypcji itp. Nie jestem też pewien, czy saldo powinno być przechowywane m.in. użytkownik sam modeluje, lub jeśli nie jest przechowywany, ale można go obliczyć w dowolnym momencie na podstawie przechowywanych danych / historii. Kilka rzeczy, na które warto zwrócić uwagę, chociaż nie sądzę, że powinny stwarzać problemy: * Nie musi to być `Użytkownik`, może to być cokolwiek, dlatego `Subskrybent` jest polimorficzny * `Plany` niekoniecznie mają być planami, ale może być m.in. „Czasopisma” jak wspomniano. To właśnie opisałem w przypadku _Przypadek C_ i _Przypadek D_.


title: Czy efekty uboczne w „każdym” czy „niektórym” Array są złe?

text: Zawsze uczono mnie, że skutki uboczne w stanie „jeśli” są złe. Chodzi mi o to że; if (conditionThenHandle()) { // efektywnie nic nie rób } ... w przeciwieństwie do; if (warunek()) { uchwyt(); } ... i rozumiem, a moi koledzy są szczęśliwi, bo tego nie robię, i wszyscy wracamy do domu o 17:00 w piątek i każdy ma wesoły weekend. Teraz ECMAScript5 wprowadził metody takie jak `every()` i `some()` do `Array` i uważam je za bardzo przydatne. Są one czystsze niż `for (;;;)`', dają inny zakres, _i_ sprawiają, że element jest dostępny przez zmienną. Jednak podczas walidacji danych wejściowych często używam `every`/`some` w warunku do walidacji danych wejściowych, a następnie używam `every`/`some` _ponownie_ w ciele, aby przekonwertować dane wejściowe na model użytkowy; if (input.every(function (that) { return typeof tego === "liczba"; })) { input.every(function (that) { // Model.findById(that); etc } } else { return; } ... kiedy to, co _chcę_ robić, to; if (!input.every(function (that) { var res = typeof that === "number"; if (res) { // Model.findById(that) ; etc. } return res; })) { return; } ... co daje mi efekty uboczne w stanie `if`, co jest złe. Dla porównania, ten kod wyglądałby ze starym `for (;;;)`; for (var i=0;i<input.length;i++) { var curr = input[i]; if (typ curr === "liczba") { return; } // Model. findById(curr);itp. } * * * Moje pytania to: 1. Czy to zdecydowanie zła praktyka? ;;;)` do tego?) 3. Czy jest lepsze podejście?


title: Etykieta edycji czyjegoś pull requestu

text: Posiadam repozytorium na GitHub, do którego ktoś wysłał żądanie ściągnięcia z jednym zatwierdzeniem. Chcę tylko częściowo zaimplementować jego rozwiązanie i wykorzystać około połowy zmian w kodzie, które wprowadził użytkownik. Co powinienem zrobić w tej sytuacji? **Utwórz gałąź jego wersji, a następnie wróć, skopiuj i wklej „stary” kod, który chcę zachować z oryginalnej wersji do drugiego zatwierdzenia.** Może to sprawić, że różnica między zatwierdzeniami będzie wyglądać na większą niż jest w rzeczywistości , i odrzuć takie rzeczy jak `git winie`. **Skopiuj i wklej kod, który chcę zachować z jego zatwierdzenia do nowego, innego zatwierdzenia**. Oznacza to, że nie otrzymuje kredytu za swój cenny wkład w kod. **Tak samo jak powyżej, skopiuj część jego kodu do nowego zatwierdzenia, ale zmień autora zatwierdzenia na niego zamiast na mnie**. Technicznie rzecz biorąc, nie napisał _dokładnego_ kodu, który został popełniony, więc nie jestem pewien, czy nie jest to mile widziane. Ale przynajmniej dostaje atrybucję za te linie, które są używane.


title: Programowanie strukturalne a programowanie OOP

text: Robię prezentację, która pokazuje różnice między programowaniem strukturalnym i obiektowym i chcę zilustrować **dlaczego** ludzie potrzebują OOP na przykładzie, w którym zastosowanie koncepcji OOP znacznie ułatwi kodowanie, aby odbiorcy naprawdę poczuli, że potrzebują OOP . Jakieś pomysły ??


title: Wejście klawiatury konsoli OOP

text: Próbuję zbudować bardzo prostą grę opartą na konsoli, koncentrując się na użyciu OOP zamiast programowania proceduralnego, ponieważ zamierzam budować na tym kodzie dla bardziej złożonych projektów. Zastanawiam się, czy istnieje wzorzec projektowy, który dobrze radzi sobie z tym przypadkiem użycia: > * Istnieje klasa `Player` z metodą `MakeMove()` współdziałającą > z grą planszową. > Metoda `MakeMove()` musi w jakiś sposób pobierać dane wejściowe użytkownika, ale nie chcę ich kodować do klasy `Player`, ponieważ zmniejszyłoby to spójność i sprzężenie rozszerzeń. Myślałem o tym, że być może jakaś klasa kontrolera obsługuje sekwencję zdarzeń, a tym samym wywołania danych wejściowych z klawiatury. Jednak ta klasa kontrolera musiałaby być w stanie inaczej obsługiwać podklasy `Player` (np. klasa `AI` nie wymaga wprowadzania danych z klawiatury). Myśli ?


title: Alternatywne podejścia do zwykłych rozwiązań programowych

text: Tworzę serwis do wyeksponowania w internecie. Jedna z tych rzeczy, które normalnie powiedziałbyś „Web 2.0”, ale chcę je udostępnić jako usługę sieciową SOAP z klientami stacjonarnymi. Wiem, że może to zabrzmieć trochę przestarzało, ale pomimo pozornego „niefajnego” czynnika, czy jest jakiś prawdziwy powód, dla którego to podejście nie powinno działać? Tak, kupię do tego VPS, to na razie eksperyment - ale kto zna przyszłość. Zastanawiam się tylko, co o tym myślisz :) Andrea


title: Tworzenie testów jednostkowych na warstwie CRUD aplikacji, jak mogę uczynić te testy niezależnymi?

text: Dlatego staram się, aby moje testy jednostkowe były jak najbardziej zgodne z podręcznikiem, ale staje się to kłopotliwe, gdy testuję kilka prostych metod Add/Delete. W przypadku metody add zasadniczo muszę utworzyć fikcyjny obiekt i dodać go, a następnie po pomyślnym zakończeniu testu muszę go usunąć. A do testu usuwania muszę oczywiście stworzyć fikcyjny obiekt, aby móc go usunąć. Jak widać, jeśli jeden test się nie powiedzie, drugi też się nie powiedzie, ponieważ oba są trochę potrzebne. To samo z systemem, w którym musiałbyś napisać test, który „anuluje zamówienie”… cóż, do anulowania najpierw potrzebne byłoby jakieś pozorne zamówienie, czy nie jest to sprzeczne z wytycznymi testowania jednostkowego? Jak należy postępować w takich przypadkach?


title: Progresywny plan od vb6 do .net, dźwięk?

text: Za chwilę rozpoczniemy nowy projekt przy użyciu istniejącej bazy danych SQL, ale ten projekt będzie wymagał ponownego wykorzystania kilku podstawowych funkcji istniejącej aplikacji vb6, która korzysta z tej samej bazy danych. Podejście, które chciałbym wypróbować: Niech istniejąca aplikacja vb6 będzie punktem wejścia, ale natychmiast wywołaj klasę .net, aby wyświetlić ekran główny i menu. Jeśli użytkownik musi użyć funkcji/formularza, który znajduje się w vb6, podnieś zdarzenie do vb6, aby załadować ten formularz i ukryć jego stronę .net, dopóki nie zostanie to zrobione. Alternatywa: W przeciwieństwie do powyższego, utwórz plik .net exe, który będzie punktem wejścia i wywołaj bibliotekę vb6 dll, gdy potrzebuję funkcji/formularza vb6. Ze względu na inicjalizację, która odbywa się w aplikacji vb6, która umożliwia korzystanie z różnych funkcji, wypróbowanie pierwszego podejścia byłoby dla mnie znacznie mniej bolesne. Co więcej, istnieje pewna funkcjonalność, która jest bardzo ściśle powiązana z formularzami w aplikacji vb6 i jest niezbędna dla aplikacji, ale nie będę w stanie natychmiast przenieść jej do .net w pierwszej fazie. Zdaję sobie sprawę, że nie jest to idealne podejście, ale niestety istnieją realne obawy, które sprawiają, że przyjęcie idealistycznego podejścia jest bliskie (jeśli nie całkowicie) niemożliwe. Więc moje pytanie brzmi: czy są jakieś konkretne pułapki, o których powinienem wiedzieć, robiąc to?


title: Kiedy używać wzorca repozytorium

text: Niedawno przeczytałem, że używanie wzorca repozytorium w połączeniu z ORM nie jest dobrą praktyką. Z mojego zrozumienia wynika to z faktu, że abstrakcja, którą zapewniają w bazie danych SQL, jest zbyt nieszczelna, aby mogła być zawarta we wzorcu. Mam kilka pytań na ten temat: 1. Co robisz, jeśli chcesz zmienić ORM-y? Będziesz mieć specyficzny kod ORM w swojej aplikacji, jeśli nie znajdziesz go w repozytorium. 2. Czy wzorzec repozytorium jest nadal poprawny, gdy nie używasz ORM i używasz ADO.NET do dostępu do danych i samodzielnego wypełniania danych obiektowych? 3. Jeśli używasz ORM, ale nie wzorca repozytorium, gdzie przechowujesz często używane zapytania? Czy byłoby mądrze reprezentować każde zapytanie jako klasę i mieć jakąś fabrykę zapytań do tworzenia instancji?


title: Jak obsługiwać projekty, w których mój kierownik projektu jest taki sam jak klient?

text: Jestem freelancerem podejmującym nowy projekt w firmie, którą już znam. Mój szef (właściciel firmy) wcześniej dał mi projekt strony internetowej do pracy, a jednocześnie wyznacza kierownika projektu do przeglądu postępów. Ale w przypadku mojego najnowszego projektu konfiguracja jest nieco inna. Mój szef również przydzielił mi ten projekt. Jest w biurze tylko dwa dni w tygodniu. Po pierwszym spotkaniu z klientem zastanawiałam się, kto jest premierem, skoro nie zostałem mu/jej przedstawiony. Kiedy powiedziałem szefowi, że w większości przypadków wolę zgłosić się do PM, bo to łatwiejsze i bardziej przystępne, wtedy poinformował mnie tam, że **_mój PM to ta sama osoba, co klient!_** Byłem trochę zszokowany. Nie chciałem mu od razu powiedzieć, że uważam, że coś jest nie tak z tą aranżacją, ale na razie utknąłem z tym projektem. Tak więc raz w tygodniu mam bezpośredni kontakt z klientem, co w kilku przypadkach jest dobre, ale jestem odpowiedzialny za spotkania z nim przez dłuższy czas, podczas gdy mój szef siedzi tylko przez kilka minut. Szczególnie przy projekcie o zakresie, który potrwa kilka miesięcy, czuję się, jakbym wykonywał pracę zarówno kierownika projektu, jak i programisty. Nie zacytowałem go do projektu – PM/klient wysłał wycenę do mojego szefa, a mój szef na tej podstawie obsługuje moje wypłaty.** Kontroluje również harmonogram projektu. Dlatego staram się ostrożnie podchodzić do realizacji celów, aby nie zostać straconym. **Moim największym zmartwieniem jest jednak brak dobrej komunikacji.** PM/klient nie jest zbyt zaawansowany technicznie, czasami określa cele, które są subtelnie różne od tego, co postrzegam, i prosi o rzeczy, które są poza możliwościami narzędzia, z którymi pracuję. Mój szef lepiej wyjaśnia sytuację w szerokim znaczeniu, ale tak jak powiedziałem, nie zawsze jest dostępny i dość wolno reaguje online. Zasadniczo brakuje dedykowanego PMa i jest słaba komunikacja między mną, moim szefem i PM/klientem. W jaki sposób mógłbym śledzić własne postępy i zapewnić lepszą wydajność oraz uniknąć błędnej interpretacji zadań w projekcie? Chcę utrzymać dobre tempo komunikacji, którą otrzymuję, bez poczucia utknięcia lub przytłoczenia. Wolę kontakt twarzą w twarz. Wszyscy inni w biurze aktualizują swoje postępy, rozmawiając z PMami pracującymi na co dzień w biurze, a ich projekty przebiegają sprawniej. Mój szef nie jest zainteresowany tym, aby jeden z nich pracował nad tym projektem, ponieważ mówi, że zajmie to dużo czasu od ich bieżącej pracy. Chcę wymusić większą komunikację w tym projekcie, ale mój szef nie robi zbyt wiele, aby pomóc. _[Edytuj]_ Cóż, oto aktualizacja. Ostatecznie nasz klient zażądał innych funkcji, które okazały się poza zakresem, a system CMS, z którego musieliśmy korzystać, nie pozwalał na tak łatwe dodawanie tych funkcji. Mój szef i ja określiliśmy niektóre z jego żądań w kwestii czasu i budżetu, a w zeszłym tygodniu klient/PM był niezadowolony i anulował projekt na czas nieokreślony. W przyszłości będę trzymać się z daleka od takich ustaleń z klientem dublującym się jako PM. Myślę, że daje to komuś zbyt dużą kontrolę nad kierunkiem projektu.


title: Kiedy potrzebuję usług internetowych?

text: Czy istnieją jakieś ogólne wytyczne, które należy rozumieć, kiedy powinienem rozważyć użycie (jako „zjedz-swój-własny-dogfood”) i świadczenie usług internetowych, a kiedy nie powinienem się nimi martwić? Lub jakieś materiały do czytania, które możesz mi wskazać? Mój projekt jest w PHP, ale nie przeszkadza mi to, że jest agnostyk językowy.


title: Czy możesz zmienić kod rozpowszechniany na licencji MIT i rozpowszechniać go na licencji GPL?

text: Czy można zmienić kod wtyczki Chili, która miała swoją najnowszą wersję w lipcu 2008 i jest licencjonowana na licencji MIT, aby następnie licencjonować ją na licencji GPL? O ile widzę, nie ma ograniczeń co do licencjonowania nowego kodu na tej samej licencji. Czy tak jest naprawdę, czy jest minimalna liczba zmian? W moim przypadku zmieniłbym wtyczkę jQuery na normalny kod JavaScript, który jest wykonywany w CMS. Oznacza to zasadniczo, że między innymi: * Kod nie będzie używał przestrzeni nazw „ChiliBook”. * Funkcja nie zostanie wywołana jako `$($element).chili()`, ale jako `GlobalObject.ChiliHighlighter.process($jquery_element)`, gdzie "GlobalObject" to obiekt JavaScript używany z CMS. * Kod umożliwi innym modułom zmianę obiektu `GlobalObject.ChiliHighlighter` w celu dodania funkcji, które są opcjonalnie wywoływane z `GlobalObject.ChiliHighlighter.process()`, gdy są zdefiniowane. Alternatywnie, ponieważ repozytorium, którego używam, pozwala mi dołączyć kod nieobjęty licencją GPL 2 lub wyższą, gdy kod nie jest już utrzymywany, czy wtyczka może być uważana za nieutrzymywaną już, ponieważ jej ostatnia wersja została wydana trzy lata temu?


title: Czy istnieje standardowa, formalna nazwa obiektu lub klasy, która zachowuje się tak, jakby była danym obiektem?

text: Mam aplikację w Django, która spodziewa się uzyskać rekord z polami e-mail, imię i nazwisko. Czasami jednak chcę mieć możliwość wysłania czegoś, co w rzeczywistości nie jest rekordem, ale zachowuje się jak jeden (w tym, że ma niezbędne pola jako atrybuty), na przykład: class FakeRecord(object): def __init__(self, email , first_name=Brak, last_name=Brak): self.email = email self.first_name = first_name self.last_name = last_name Zastanawiam się, czy istnieje standardowa nazwa dla tego rodzaju obiektu lub czy `FakeRecord` działa jako nazwa dla ta klasa. Mówiąc ogólnie, czy istnieje nazwa dla klasy, która zastępuje lub zachowuje się podobnie do innej klasy? Czy istnieje standardowy wzorzec implementacji/projektu? ## Dalsze wyjaśnienia Na potrzeby mojej aplikacji mam zasadniczo funkcję narzędziową, która wysyła wiadomość e-mail do odbiorcy. Odbiorcą może być dowolny rekord Django, o ile zawiera adres e-mail, imię i nazwisko. Czasami jednak aplikacja wysyła jednorazową wiadomość na podany adres e-mail, który nie ma wpisu. W takich przypadkach po prostu tworzę FakeRecord z adresem e-mail (i imieniem/nazwiskiem, jeśli jest dostępne) i wysyłam go w zamian. Ponieważ sama funkcja narzędziowa nie robi z rekordem niczego poza pobieraniem atrybutów, żadna inna funkcja bazy danych obiektu rekordu Django nie jest potrzebna.


Jaki jest twój ulubiony cytat o programowaniu? **Jeden cytat na odpowiedź**. Przed opublikowaniem sprawdź, czy nie ma duplikatów!


title: Ile wysiłku należy włożyć w każdą część projektu wodospadu?

text: Gdzie wodospad zwykle obejmuje: 1. Wymagania 2. Projekt funkcjonalny 3. Projekt techniczny 4. Budowa 5. Test 6. Przegląd 7. (Wdrażanie) I iteracje na tej liście. Jeśli zapomnę krok, daj mi znać.


title: Jak zarządzać backlogiem produktu/historiami użytkowników

text: Zaraz zaczynamy nowy projekt przy użyciu Agile (używając TFS) i mam kilka pytań „dobrych praktyk” dotyczących backlogu produktu: – Kiedy zaczynamy dodawać historie użytkowników, czy warto je umieścić (powiedzmy) iterację „Zaległości” lub po prostu pozostawić tę iterację pustą? Oczywiście, gdy nadejdzie czas rozpoczęcia prac nad USA, zostanie to przeniesione do odpowiedniego backlogu iteracji. Czy dzieląc epos na mniejsze USA, po prostu zamknąłbym pierwotną epopeję, ponieważ nie jest już potrzebna? A może powinienem stworzyć nowe USA jako dzieci eposu? (wtedy ktoś jest odpowiedzialny za zamknięcie epopei, gdy wszystkie dzieci USS zostaną ukończone). Wreszcie, czy w rejestrze produktów powinny znajdować się wszystkie Stany Zjednoczone, niezależnie od statusu, czy tylko te, które nie zostały rozpoczęte (tj. w mojej proponowanej iteracji „Backlog”)? Zdaję sobie sprawę, że te pytania nie dotyczą życia lub śmierci, ale byłoby miło wiedzieć, w jaki sposób inni ludzie zarządzają swoimi zaległościami produktowymi, abyśmy mogli odpowiednio zorganizować sprawy od samego początku.


title: Skąd urządzenie USB wie, czy pobierać 500mA, 1A lub 2.1A z portu USB komputera?

text: Mam pewne problemy z moim Nexusem 7, który pobiera zaledwie 500 mA z portu USB, który może dostarczyć 2,1 A (test na moim iPadzie). Szczegóły w **tym pytaniu**. Jednak pojawił się komentarz „ _Nexus oczywiście wykrywa podłączony pin 'data' i zakłada, że nie wolno pobierać więcej niż 500mA (co jest właściwą specyfikacją USB)._ ” To dało mi do myślenia, jak to urządzenie naprawdę wiesz ile wolno wyciągnąć z portu USB? To nie może być tylko przez okablowanie pinów D+/D-, ponieważ wtedy nie byłoby możliwe komunikowanie się przez port USB (np. synchronizacja lub przesyłanie przez port USB). iPhone i iPad wyraźnie są w stanie pobierać większą moc z portu USB nawet podczas operacji synchronizacji/danych. Zastanawiałem się więc, jaka moc może być oficjalnie podyktowana przez komunikator USB. sam protokół, być może jakiś pakiet/nagłówek. Więc **_jak urządzenie USB wie, czy pobierać 500mA, 1A czy 2,1A z portu USB komputera?_** Czy odpowiedź zmienia się, jeśli port USB jest podłączony do „głupiej” ładowarki ściennej? A może jest to dziki zachód, gdzie każde urządzenie/ładowarka działa na własną rękę w sytuacjach wysokiego prądu?


title: Jak rozwiązywać konflikty z innym programistą

text: Przeczytałem to pytanie, ale myślę, że w moim przypadku nie ma ono zastosowania. Mam problemy z pracą z innym programistą w mojej firmie i nie jestem pewien, jak je naprawić, gdy nie ma lidera zespołu, który pomógłby w mediacji lub buforowaniu naszych relacji. Dwa miesiące temu zostałem zatrudniony jako starszy programista stron internetowych. To mała firma (około 30 osób). Zespół programistyczny składa się ze mnie i innego programisty. Ten programista jest młodszą rolą, chociaż mi się nie poddaje. Od pierwszego dnia ścieramy się w różnych punktach. Na przykład odmówił użycia serwera testowego i narzędzia do zarządzania projektami, które zaproponowałem wszystkim i na co zgodził się mój szef. Odmówił również kompromisu podczas dyskusji o najlepszych praktykach i standardach kodowania. Jest przekonany, że jego droga jest jedynym prawdziwym sposobem działania i nie bierze pod uwagę moich argumentów. Nalega nawet, że nie jesteśmy zespołem i że powinienem po prostu pracować nad swoimi projektami, a nie przeszkadzać mu. Narzeka też na mnie naszemu szefowi. Jestem pasjonatem ulepszania naszego środowiska pracy i przepływów pracy. Staram się nie narzucać innym swoich opinii i zawsze pytam wszystkich, co o tym myślą. Każdy nowy pomysł, który wnoszę do stołu, jest omawiany i generalnie wszyscy oprócz niego pracują razem, aby wypracować dobry kompromis. Zawsze jest negatywny i całkowicie odrzuca moje propozycje. Skrytykowałem jego kod wkrótce po rozpoczęciu pracy w tej firmie i to jest sposób na zabicie zdrowej relacji. Jak mogę podejść do rozwiązania naszych problemów?


title: Nowicjusz, decydujący Python lub Erlang

text: Jestem administratorem (unix, Linux i niektóre aplikacje Windows, takie jak Exchange) z doświadczenia i nigdy nie pracowałem nad żadnym językiem programowania poza C# i skryptami na Bash, a ostatnio na powershell. Zaczynam jako dostawca usług i używam wielu narzędzi do monitorowania sieci/serwerów opartych na otwartym kodzie źródłowym (nagios, opennms itp.) w celu ich monitorowania. W tej chwili, zainspirowany projektem, który wymyśliłem, aby zrobić więcej niż to, co jest obecnie dostępne w open source, chciałbym zacząć programować i testować niektóre z tych pomysłów. Wymagane jest, aby oprogramowanie serwerowe, które przechwytuje strumień danych i przechowuje je w bazie danych (najlepiej CouchDB lub MongoDB), a strona kliencka (agent zainstalowany na serwerze) wysyłała ten strumień danych zgodnie z harmonogramem co 10 minut lub tak. W przypadku tych dwóch podstawowych pomysłów czytałem o Pythonie i Erlangu oprócz ruby. Planuję użyć Amazona lub Rackspace, gdzie będzie działała platforma serwerowa. Daje mi to skalowalność potrzebną, gdy mamy więcej klientów z wieloma serwerami. Tylko z tego powodu pomyślałem, że Erlang lepiej pasuje (mogę się całkowicie mylić, nowy w tej grze) i rozumiem, że Erlang ma pod pewnymi względami ograniczone wsparcie w porównaniu z Ruby czy Pythonem. Ale jestem też zupełnie nowy w dziedzinie programowania i każda porada byłaby mi wdzięczna. Jo


title: Jakie są najczęściej używane technologie Java dla przedsiębiorstw i co powinni wiedzieć o nich nietechniczni odbiorcy?

text: Zostałem poproszony o wygłoszenie prezentacji dla nietechnicznej publiczności na temat tego, jakie technologie Java są obecnie używane w świecie przedsiębiorstw. Celem jest zapewnienie tym nietechnicznym odbiorcom podstaw, których potrzebują, aby zrozumieć, o czym mówią inżynierowie. To część szerszej serii wykładów, które wygłaszam. Jestem przede wszystkim deweloperem .NET i C++, więc pomyślałem, że spróbuję uzyskać dane wejściowe od niektórych deweloperów Java. Jakich technologii używasz? Jakich akronimów związanych z Javą chciałbyś używać w przypadku osób niebędących programistami? Co chciałbyś, aby zrozumieli o nich osoby niebędące programistami?


title: Kiedy używać JavaScript zamiast Rubiego w tworzeniu stron internetowych?

text: Obecnie zajmuję się tworzeniem aplikacji internetowych z wykorzystaniem ruby-on-rails. Czasami mam trudności z podjęciem decyzji, który język wybrać, aby rozwiązać moje problemy. Różnica między HTML, CSS i językami programowania jest dość wyraźna. Ale kiedy muszę wziąć JavaScript zamiast Rubiego (poza różnicą klient-serwer)? Dziękuję!


title: Czy istnieją języki programowania oparte na minimalistycznym podejściu programistycznym?

text: Uważam, że kiedy języki są uważane za to samo co oprogramowanie komercyjne, zawsze istnieje ciągła potrzeba dodawania nowych funkcji, aby uzasadnić nowe wydania. Czy mogą istnieć lub są języki, w których wersja 1.0 jest wersją ostateczną? Oczywiście poprawki błędów są z tego zwolnione, ale zestaw funkcji zawsze pozostaje taki sam? W ten sposób każda funkcja w języku ładnie pasuje do siebie i nie wydaje się, że są przykręcane po fakcie z przestarzałymi funkcjami wciąż dostępnymi z powodu wstecznej kompatybilności. Zakładam, że niektóre języki akademickie są takie? Ale czy istnieją komercyjnie udane języki, które podążają za tym pomysłem? Towarzysząca biblioteka jest również bezpłatna, aby uzyskać nowe funkcje, ale język zawsze pozostaje niezmienny. Jednym z przykładów, który mogę podać, jest jeden z moich ulubionych języków C#, którego używam dość często, coraz więcej funkcji jest dodawanych w każdym wydaniu. Aby czerpać z nich korzyści, muszę porzucić rzeczywiste zadania i poświęcić dużo czasu na ich naukę, zamiast być w stanie wyłapywać trywialne pojęcia i samodzielnie je łączyć, aby z łatwością rozwiązywać bardziej złożone problemy. Myślę więc, że szukam minimalistycznego podejścia, w którym wszystko jest spójne, ma sens i jest jak najbardziej ortogonalne.


title: Praca z kodem shadera

text: Zaczynam swój pierwszy projekt w OpenGL/GLSL i zastanawiałem się, jak pracujesz z kodem shaderów? Ponieważ musi to być const char, a podświetlanie składni pokazuje wszystko w tym samym kolorze (jako string), więc nawigacja w kodzie jest trudna. const char *shader = ..."void main()\n"...; Czy edytujesz kod, a następnie dodajesz cudzysłowy, czy po prostu piszesz go w cudzysłowie od początku? Dzięki edytuj: używając VS2012


title: Kiedy tabela bazy danych powinna używać znaczników czasu?

text: Najpierw uwaga, myślałem, że może to pytanie dotyczy wymiany baz danych, ale myślę, że jest ono szerzej związane z rozwiązaniem programistycznym jako całością niż z bazami danych. Przeniesie się do wymiany baz danych, jeśli ludzie uznają, że jest to najlepsze. Zastanawiałem się, kiedy do tabeli bazy danych powinien zostać dodany utworzony i zaktualizowany znacznik czasu? Pierwszą oczywistą odpowiedzią jest to, że jeśli jakakolwiek logika biznesowa musi wiedzieć, kiedy coś zostało zaktualizowane (np. data zakończenia transakcji itp.), to musi wejść. Ale co z przypadkami niezwiązanymi z logiką biznesową? Na przykład mogę wymyślić scenariusze, w których naprawdę przydatna byłaby znajomość daty i godziny zmiany wierszy, aby pomóc w znalezieniu błędu, np. pewna logika biznesowa zawodzi i patrząc na powiązane wiersze bazy danych można zidentyfikować, że jeden wiersz jest aktualizowany przed innym wierszem, który powoduje błąd. W tym przypadku użycia sensowne byłoby nadanie każdej tabeli aktualizacji i utworzenie znacznika czasu (z wyjątkiem być może najbardziej trywialnych tabel wyliczeniowych, które nie byłyby aktualizowane przez żadną część aplikacji). Nadanie każdej tabeli znacznika czasu to z pewnością świetny sposób na szybkie zakopanie bazy danych (chociaż może być błędem). Kiedy więc tabela bazy danych powinna używać tworzenia i aktualizowania znaczników czasu?


title: Jaki jest najlepszy sposób na zbudowanie fabryki przy użyciu NInject?

text: Jestem całkiem zadowolony z wstrzykiwania zależności przy użyciu NInject w MVC3. Pracując w aplikacji MVC3, opracowałem niestandardową fabrykę tworzenia kontrolerów za pomocą NInject, więc każdy tworzony kontroler będzie miał wstrzykiwane zależności przez tę fabrykę kontrolerów. Teraz zaczynam tworzyć aplikację dla systemu Windows, chcę używać Dependency Injection w całej aplikacji. tj. każdy obiekt musi być utworzony za pomocą NInject, aby ułatwić testowanie jednostkowe. Proszę poprowadzić mnie, aby upewnić się, że każdy utworzony obiekt musi być tylko przez fabrykę NInject. Na przykład, jeśli w jakimkolwiek formularzu systemu Windows na zdarzeniu `Button_Click` napiszę: TestClass testClass = new TestClass() i `TestClass` ma jakąkolwiek zależność od, powiedzmy, `ITest`, to musi zostać automatycznie rozwiązany. Wiem, że mogę użyć: Ikernel kernel = new StandardKenel() //AddBinding() TestClass testClass = kenel.get<TestClass>(); Ale uważam to za nudne za każdym razem, gdy chcę stworzyć obiekt. Wymusza to również na deweloperze stworzenie obiektu w określony sposób. Czy można to ulepszyć? Czy mogę mieć centralne repozytorium do tworzenia obiektów, a wtedy każde tworzenie obiektów będzie automatycznie korzystać z tego repozytorium?


title: Refaktoryzacja - zachowanie klas użytkowych w ramach wspólnego interfejsu

text: Zasugerowano mi, aby umieścić moje pytanie tutaj, więc robię to ;) Potrzebuję wspólnego interfejsu, który reprezentuje pewne specyficzne zachowanie: interfejs publiczny Contract(){ public void methodA(); public void metodaB(); // i tak dalej... } Problem polega na tym, że aby spełnić to zachowanie, implementacja może być całkowicie bezstanowa - może mieć prywatny konstruktor i eksponować tylko statyczne metody: public class MyUtilityClass /*implementuje Contract*/{ private MyUtilityClass(){} public static void metodaA(){ // jakaś implementacja tutaj... } public static void metodaB(){ // jakaś implementacja tutaj... } } Mam wiele takich klas, z różnym zachowaniem, więc ja chcesz je zrefaktoryzować i obsłużyć w ramach wspólnego interfejsu. Ponieważ nie mogę zaimplementować `Contract` za pomocą metod statycznych, czy jedynym rozwiązaniem jest przekonwertowanie `MyUtilityClass` na singleton, który implementuje interfejs, aby osiągnąć mój cel? A może zasugerowałbyś coś innego? Na przykład _Metoda szablonu_ i _Strategia_, które można wstrzyknąć w zależności od konkretnej sytuacji? Co byś zaproponował?


title: Czy istnieje automatyczny generator dla DataContracts?

text: Czy istnieje narzędzie, które może szybko i łatwo wygenerować DataContract z XML lub JSON? Robienie tego ręcznie może być prawdziwym bólem.


title: Konwertuj litery na cyfry

text: Mam następujący problem. Biorąc pod uwagę A=1, B=2 , ... , Z =26 potrzebuję algorytmu, który podając kombinację liter, taką jak kolejność kolumn w Excelu, zwraca mi liczbę/ AA=27 AB=28 ABC? Wielkie dzięki To jest mój algorytm do tej pory, nie podoba mi się przełącznik wewnątrz for. Każda pomoc jest doceniana, napiszę to później w c# Biorąc pod uwagę A=1, B=2, Z=26. AB=27, ABC? Zmienna = ABC Pozycje = Zmienna.Długość -1 Int wynik= 0 FOR (i=0; i<= Pozycje; i++) { Litera=Zmienna[i]; Switch(Letter) Przypadek A: LetterValue=1 wynik=+ wynik+26*(LetterValue)^i }


title: Czy nie mam racji, że nie zgadzam się z Delikatnym wprowadzeniem do najlepszych praktyk dotyczących szablonów symfony?

text:
Obecnie uczę się symfony i czytam książkę _Łagodne wprowadzenie do symfony_ i natknąłem się na tę sekcję w „Rozdziale 4: Podstawy tworzenia stron” o tworzeniu szablonów (lub widoków): „Jeśli potrzebujesz wykonać jakiś kod PHP w powinieneś unikać używania zwykłej składni PHP, jak pokazano na listingu 4-4. Zamiast tego napisz szablony przy użyciu alternatywnej składni PHP, jak pokazano na listingu 4-5, aby kod był zrozumiały dla programistów nie korzystających z PHP. **Listing 4-4 – Zwykła składnia PHP, dobra dla działań, ale słaba dla szablonów**
Witaj świecie!
 <?php if ($test) { echo "
".time ()."
"; } ?> (Ironiczne w tym jest to, że instrukcja echo wyglądałaby jeszcze lepiej, gdyby zmienną zadeklarowaną w kontrolerze był czas, ponieważ wtedy można by po prostu osadzić zmienną w ciągu zamiast konkatenacji) **Listing 4-5 - The Alternatywna składnia PHP, dobra dla szablonów**
Witaj, świecie!
 <?php if ($test): ?>
<?php echo time(); ?>
<?php endif; ?> Nie widzę, jak listing 4-5 sprawia, że kod jest "zrozumiały dla programistów nie-PHP", a jego czytelność jest w najlepszym razie chwiejna. 4-4 wydaje mi się o wiele bardziej czytelny. Czy są jacyś programiści używający symfony, którzy piszą swoje szablony jak te w 4-4 zamiast 4-5? Czy są powody, dla których powinienem używać jednego z drugim? Istnieje bardzo mała szansa, że gdzieś dalej ktoś mniej techniczny może edytować ten szablon, ale w jaki sposób 4-5 faktycznie sprawi, że będzie on dla nich bardziej zrozumiały?


title: Wymuszanie wymagań od ludzi biznesu?

text: **Jakie metody wydają się najlepiej sprawdzać wymagania od ludzi biznesu, którzy nie znają się na technologii?** Pracuję z zespołem, który stara się wspólnie opracować specyfikację projektu. Za każdym razem, gdy się spotykamy i sprowadza się to do oczekiwań na kolejne spotkanie, prosimy ludzi biznesu o przywrócenie swoich wymagań. Zwykle odpowiadają mniej więcej tak: „Cóż, myślicie, że moglibyście stworzyć prototyp, abyśmy mogli zobaczyć, co nam się podoba w przyszłym tygodniu… no wiesz, bez żadnych danych ani niczego, ponieważ to prototyp, tylko funkcjonalność”. To jest projekt na 6 miesięcy plus, więc jest to oczywiście niewykonalne (musielibyśmy opracować całość!), a nawet nie wiemy, co zrobić prototyp bez jakiejś specyfikacji. Szczerze mówiąc, myślę, że jak większość ludzi, mają pewne pojęcie o tym, czego chcą, po prostu nie myślą o tym w sposób skoncentrowany, niezbędny do zebrania prawdziwych wymagań. Jako alternatywę dla prostego powiedzenia im: „daj nam to, czego chcesz, albo nie możemy/nie wykonamy żadnej pracy” (chcemy, aby byli zadowoleni z wyników), czy istnieją sposoby, aby pomóc im zdecydować, czego chcą ? Na przykład moglibyśmy im powiedzieć: „Narysuj kilka ekranów (w programie Powerpoint, na serwetce, cokolwiek), które pokazują interfejs użytkownika, który chcesz, ze wszystkimi danymi, które chcesz zobaczyć, oraz opis funkcji na marginesach. Na tej podstawie dopracujemy go i zbudujemy backend w oparciu o ten zestaw wymagań dotyczących zachowania”. LUB „Nie martw się, jak to będzie teraz wyglądać (numer 1 rozłącza się). Po prostu daj nam listę wszystkich danych, które chcesz o każdej rzeczy, którą program śledzi. Więc dla „Klienta” możesz podać: imię i nazwisko, adres, numer telefonu, zamówienia itp. Nie musi to być idealna struktura bazy danych, ale możemy coś z tego wypracować i zorientować się, czego szukasz” **Czy któreś z tych alternatywnych podejść do skupienia ludzi biznesu na tym, czego chcą, ma sens? Czy istnieją alternatywy, które widziałeś w akcji?**


title: Kiedy i dlaczego należy tworzyć klasy w czasie wykonywania?

text: Przeczytałem wiele artykułów na temat tworzenia typów dynamicznych i klas w czasie wykonywania. Na przykład klasa `TypeBuilder` w C# pozwala na tworzenie typów dynamicznych. Python posiada tego typu funkcję, dzięki której można tworzyć dynamiczne klasy. Z pewnością mam dobre informacje o tym, jak powinienem stworzyć klasę w czasie wykonywania, ale nie znajduję wystarczających informacji, dlaczego powinienem to zrobić. Jaki jest scenariusz, w którym ktoś byłby zmuszony do tworzenia typów w czasie wykonywania?


title: Jaka jest różnica między rekurencją a kokurencją?

text: Jaka jest między nimi różnica? * Rekurencja * Korkursja W Wikipedii jest niewiele informacji i nie ma jasnego kodu wyjaśniającego te terminy. Jakie są bardzo proste przykłady wyjaśniające te terminy? W jaki sposób korkurencja jest dualną rekurencją? Czy istnieją klasyczne algorytmy corecusive?


title: Zagregowane repozytorium/usługa Boundary

text: Staram się zastosować DDD do projektu systemu zarządzania wydaniami. ## **Jednostki domeny** * `Projekt`: Projekt/produkt/system. * `ProjectEnvironment`: Środowiska (Test, Staging, Prod), które istnieją dla tego projektu. Każdy projekt ma swoje własne zdefiniowane środowiska. * `ProjectVersion`: Określona wersja projektu. Byłoby to związane z pakietem wdrożeniowym. ![Diagram klas encji](http://i.stack.imgur.com/rJhEW.png) ## **Aggregate Boundary** Z tego miałbym `Project` być zagregowanym korzeniem, a `ProjectEnvironment` i ` ProjectVersion` być agregatami `Project`. Żaden z nich nie może istnieć bez „Projektu”. ## **Repository** Miałbym wtedy tylko `ProjectRepository`, które zapewniłoby utrwalone `Projects` ze wszystkimi dołączonymi agregatami `ProjectVersion` i `ProjectEnvironment` (i w konsekwencji można uzyskać do nich dostęp tylko poprzez ich odpowiedni `Project`). ## **Pytania** 1. Czy powinny istnieć `VersionRepository` i `EnvironmentRepository`? Metoda `GetVersionById()` w `ProductRepository` brzmi niepoprawnie. Ale czy w takim razie dostarczanie wielu repozytoriów nie zagrażałoby granicy agregatów? 2. Czy powinna istnieć usługa „ProjectService”, która obsługiwałaby i weryfikowała agregacje przy użyciu trzech repozytoriów? Aby zabezpieczyć się przed nieprawidłowymi danymi, kod klienta mógłby odwoływać się tylko do „ProjectService”.


Staram się zrozumieć teorię leksykarza w celu jego zbudowania (tylko dla własnej zabawy i doświadczenia oraz zrekompensowania braku odpowiednich kursów CS :)). Muszę jeszcze zrozumieć, czy teoria leksyka jest taka sama, niezależnie od tego, jaki język analizujesz? Czy chodzi tylko o podzielenie białej przestrzeni, a następnie spróbuj dowiedzieć się, co reprezentuje każdy tekst, czy jest to coś więcej? Innymi słowy, czy generowanie tokenów zależy od analizowanego języka, czy chodzi tylko o białe znaki? Czy możesz zastosować te same reguły leksera do wszystkich języków programowania? Na przykład, jeśli mam leksera, który tokenizuje kod Java, czy mogę go użyć w Pythonie, czy nie, ponieważ białe znaki w Pythonie mają inne znaczenie? Na przykład znalazłem fajny projekt Pythona (Pygments), który wydaje się zapewniać działający rdzeń, który pozwala później na wtyczek dla każdego z twoich ulubionych języków (jakie są słowa kluczowe, komentarze itp.).


title: Ciągłe dostarczanie: Kanban, SCRUM czy inne?

text: Zastanawiałem się, czy istnieje SDLC (cykl rozwoju oprogramowania) lub metodologia (Kanban, SCRUM, wodospad itp.), która byłaby szczególnie odpowiednia dla systemów ciągłego dostarczania i dlaczego? Jestem pewien, że każda metodologia ma zalety/wady, które sprawiają, że jest odpowiednia dla pewnych _komponentów_ płyty CD, ale musi istnieć taka, która zawiera zasady/wartości, które czynią ją lepiej przystosowaną do CD...


title: Czy piszesz tytuły w komentarzach do kodu?

text: Przeglądałem jakiś stary kod, który napisałem (pierwszy rok na uniwersytecie) i zauważyłem, że pisałem tytuły komentarzy poprzedzające różne części kodu. Na przykład (to z gry Monopoly): /*Inicjalizacja planszy*/ ...kod... /*Inicjalizacja gracza*/ ...kod... /*Logika gry zaczyna się tutaj*/ /*Wyświetlanie bieżącej sytuacji */ ...code... /*Wykonywanie ruchu*/ ...code... /*Obsługa zdarzenia specjalnego*/ ...code... /*Zatwierdź zmiany, przełącz do następnego gracza*/ ... kod... Może to być zbędne i prawdopodobnie niepotrzebne, jeśli kod jest naprawdę bardzo przejrzysty, ale kiedy skanowałem plik, zaskoczyło mnie to, jak mocno czułem, że wiem, co się dzieje, mimo że prawie nie patrzyłem na rzeczywisty kod. Zdecydowanie widzę, że to pasuje w pewnych okolicznościach, więc zastanawiam się, czy to robisz? Czy uważasz, że to dobry pomysł? A może to za dużo?


title: Najlepsze praktyki dotyczące używania przestrzeni nazw w C++

text: Czytałem Clean Code wujka Boba kilka miesięcy temu i miał on ogromny wpływ na sposób, w jaki piszę kod. Nawet jeśli wydawało się, że powtarza rzeczy, o których każdy programista powinien wiedzieć, połączenie ich wszystkich i wprowadzenie ich w życie daje znacznie czystszy kod. W szczególności odkryłem, że dzielenie dużych funkcji na wiele małych funkcji i dzielenie dużych klas na wiele małych jest niezwykle przydatne. A teraz pytanie. Wszystkie przykłady z książki są w Javie, podczas gdy ja pracuję w C++ od kilku lat. W jaki sposób idee zawarte w _Czystym kodzie_ rozszerzyłyby się na wykorzystanie przestrzeni nazw, które nie istnieją w Javie? (Tak, wiem o pakietach Java, ale tak naprawdę to nie to samo.) Czy ma sens stosowanie idei tworzenia wielu małych jednostek, z których każda ma jasno zdefiniowaną odpowiedzialność, do przestrzeni nazw? Czy mała grupa powiązanych klas powinna być zawsze otoczona przestrzenią nazw? Czy jest to sposób na zarządzanie złożonością posiadania wielu małych klas, czy też koszt zarządzania wieloma przestrzeniami nazw byłby zaporowy? Edycja: odpowiedź na moje pytanie znajduje się w tym wpisie w Wikipedii na temat zasad dotyczących pakietów.


title: Dlaczego dzielenie i mnożenie przez 2 używa operatora zmiany zamiast operatora dzielenia?

text: Patrząc na kod w C dla dzielenia/mnożenia przez 2, okazuje się, że zamiast operatora dzielenia używany jest operator przesunięcia. Jaka jest zaleta korzystania z przesunięć nad operatorem dywizji?


title: Różnica między tymi 3 rolami menedżera

text: Role: * Kierownik ds. Rozwoju * Kierownik Programu * Kierownik Projektu Poczytałem trochę i samodzielnie rozumiem je wystarczająco dobrze. Jednak kiedy je łączysz, wydaje mi się, że niektóre obowiązki nakładają się na siebie i staje się niepewne, kto za co odpowiada. Czy ktoś ma jasny sposób na zdefiniowanie, w jaki sposób każda rola różni się od drugiej? A może głównie, które zadania są wyłączne dla każdego z nich? Chcę uniknąć nakładania się obowiązków. Wiem, że istnieją inne podobne pytania w tej sprawie, ale żadne nie są dokładnie takie same ... Dzięki EDIT: Te 2 pytania trochę pomagają, ale nadal nie mogą do końca umieścić każdej roli po złożeniu: Jaka jest różnica między menedżerem programu a Project Managerem? Zapisane role kierownika ds. rozwoju oprogramowania


title: Jak popularny jest ITIL w pozostałych częściach świata?

text: Przepraszam, jeśli to pytanie nie jest w 100% programistyczne, po prostu nie wiedziałem, gdzie zapytać. Uważaj się za szczęściarza, jeśli nie wiesz, czym jest ITIL. Możesz zrozumieć z mojego tonu, że mi się to nie podoba - uważam, że ITIL jest całkowitym przeciwieństwem tego, jak powinna działać firma IT, ponieważ jest zbyt biurokratyczna i skomplikowana. W Niemczech, gdzie pracuję, wydaje się być bardzo popularny, a na kilku rozmowach kwalifikacyjnych pytano mnie, czy znam ITIL. Czy wiesz, że jest popularny w innych częściach świata? Czy powinienem się martwić o ITIL, czy mogę go zlekceważyć? Muszę również zapytać moich europejskich kolegów - dlaczego uważasz, że ITIL jest tak popularny? Czy istnieją mocne **empiryczne** dowody na to, że ITIL działa? Przez empiryczne nie mam na myśli osobistych doświadczeń typu „Jesteśmy firmą, która współpracuje z ITIL...”. Trudno mi sobie wyobrazić wielomilionową firmę, taką jak Apple czy Google, współpracującą z ITIL, ale nie widzę też, jak może to przynieść korzyści małym firmom...


title: Czy maszyny wirtualne używają do wszystkiego jednego stosu?

text: Większość maszyn wirtualnych ma „stos wywołań”, który umożliwia śledzenie miejsca powrotu z każdej wywołanej funkcji. Często uważa się to po prostu za „stos”. Jednak często stos jest potrzebny do operacji, które nie są związane z wywoływaniem funkcji, takich jak wykonywanie operacji arytmetycznych. Moje pytanie brzmi: czy ten sam stos (tj. stos wywołań) jest używany również do tego rodzaju operacji? A może operacje, takie jak wykonywanie arytmetyki, używają innego stosu? (Mówię o większości maszyn wirtualnych).


title: Lekkie narzędzie do wymagań wizualnych (połączenie makiet i przypadków użycia)

text: Dla mojego zespołu makiety są podstawowym artefaktem w procesie rozwoju i wymagań. Do konfluencji używamy makiet balsamiq. Piszemy również przypadki użycia, aby wskazać przepływ pracy i dodać informacje, takie jak sposób, w jaki system zareaguje na akcję, wymagania UX i inne odniesienia. To nie jest idealne, bo dokumenty są oddzielne. Szukamy narzędzia, które jest całkowicie oparte na makiecie, z ustrukturyzowanymi tekstami kontekstowymi z boku dotyczącymi wymagań, odpowiedzi systemu itp. (uwaga: wiem, że mogę dodawać adnotacje, to, czego szukam, to ustrukturyzowany wpis i ustrukturyzowana prezentacja wymagań). Powinien także wizualizować przepływ i stany stron w formie scenorysu. Czy takie narzędzie istnieje i czy mógłbyś mi je polecić? Dziękuję! Rolf


title: Całkowicie darmowy i otwarty język programowania

text: W przypadku wersji próbnej Oracle vs Google wydaje się, że Java nie jest całkowicie otwarta i darmowa (jako wolne oprogramowanie), jak się spodziewałem. Chociaż istnieje całkowicie wolna/otwarta JVM, trudno jest stwierdzić, co jest naruszeniem praw autorskich w Javie, a co nie. Chciałbym więc wiedzieć, czy istnieje całkowicie otwarty i darmowy język z otwartym i wolnym IDE (podobnym do Eclipse), zorientowany obiektowo, jeśli to możliwe, i zdolny do tworzenia aplikacji opartych na oknach dla głównych systemów operacyjnych (Linux, Mac , Windows).


title: dzisiejszy świat wielu urządzeń do tworzenia stron internetowych

text: Wraz z ogromną eksplozją urządzeń mobilnych i dodaniem HTML5/CSS3, wydaje się, że nastąpiła zmiana w kierunku projektów „responsywnych” (tj. dostosowywania się do mniejszych rozmiarów ekranu), co wydaje się być osiągane za pomocą zapytań o media CSS3. Moje pytanie brzmi, biorąc pod uwagę obecną potrzebę dostosowania się zarówno do komputerów stacjonarnych, jak i urządzeń mobilnych, czy powszechną praktyką jest organizowanie dwóch wersji witryny (jednej na komputery i jednej na urządzenia mobilne)? A może istnieje tylko jedna wersja z różnymi plikami css do kierowania na różne urządzenia i ekrany? Obsługa tylko różnych przeglądarek (tj. 6, ff3, opera9 itp.) HTML4/5, CSS2/3 były już wystarczająco trudne, ale teraz oczekujemy, że będziemy obsługiwać różne urządzenia (telefon, tablet itp.) też, więc zakładam, że firma stworzyłaby osobny projekt dla mobile i przekierowania w oparciu o usera, ale to tylko przypuszczenie.


title: Programowanie a inżynieria

text: W tej chwili jestem w liceum i wkrótce dochodzę do etapów, w których musiałbym dokonywać wyborów. Na wstępie uwielbiam programować. Zacząłem uczyć się programowania rok temu i mam pewne doświadczenie z ActionScript3 i Java + (języki internetowe, takie jak html CSS JavaScript. Ale php wydaje mi się trochę trudne do zrozumienia). Inne przedmioty, które absolutnie kocham to matematyka, fizyka i chemia. Zawody związane z tymi przedmiotami, które mnie naprawdę interesują, to inżynieria (inżynier rurociągów, inżynier mechanik, inżynier elektryk itp.). Ludzie mówią mi, że powinienem wybrać zawód w oparciu o moje zainteresowania. Ale absolutnie nie preferuję jednych nad drugimi. Mój wybór tak naprawdę zależy od zapotrzebowania tych zawodów w przyszłości. Więc moje pytania są następujące: * Czy zapotrzebowanie na programowanie spadnie w przyszłości z powodu nadmiernej liczby programistów w przyszłości? A może pozostanie zawodem, na który istnieje duże zapotrzebowanie. * Czy inżynieria straci popyt? Wydaje się, że w dzisiejszych czasach prawie wszyscy wybierają zawód inżyniera i aż strach pomyśleć, co stanie się ze światem przy takiej liczbie inżynierów. * Który zawód prawdopodobnie będzie dobrze płatny w przyszłości?


title: Konfiguracja rozwoju dla TDD. Czy to jest poprawne?

text: Oto jak mój zespół ma skonfigurowane środowisko programistyczne: 1. Każdy członek zespołu ma lokalne środowisko programistyczne na swoim komputerze, w którym pobiera kod z udostępnionego repozytorium. 2. Każdy programista pracuje w swoim lokalnym środowisku programistycznym, po zakończeniu pisania kodu, który zatwierdza z powrotem. 3. Kod jest następnie pobierany na serwer pomostowy/testowy z tą samą konfiguracją środowiska. 4. Jeśli wszystko jest w porządku, zostanie przekazany na serwer produkcyjny. Staramy się zintegrować testowanie jednostkowe i BDD (programowanie sterowane zachowaniem) w tej konfiguracji i chcielibyśmy również użyć serwera ciągłej integracji (Jenkins). Moje pytanie brzmi, gdzie powinniśmy to zainstalować i gdzie powinniśmy przetestować kod? 1. Zainstalować pełny stos testowy dla każdego programisty: narzędzia TDD + narzędzia BDD + Jenkins? 2. Zainstalować narzędzia testowe tylko na serwerze pomostowym/testowym i testować kod tylko tutaj, gdy każdy programista zatwierdzi swój kod? Jaka jest twoja konfiguracja?


title: Jak szybko wypróbować kod Java?

text: Kiedy koduję w Pythonie i chcę coś wypróbować, otwieram IDLE Pythona w wierszu poleceń i jestem w stanie szybko coś wypróbować. Czy istnieje podobny sposób, w jaki mógłbym to zrobić dla Javy? Słyszałem o "muszlach" Javy (np. http://www.beanshell.org/). Czy ktoś ich próbował?


title: Wdrażanie warstwy usług z MVC4 z poszanowaniem pojedynczej odpowiedzialności

text: Próbuję nauczyć się kilku najlepszych praktyk podczas podnoszenia na MVC4. Mam rozwiązanie z trzema projektami: 1. Sieć: rzeczy MVC 2. Rdzeń: Model danych 3. Testy: Testowanie klas, które teraz próbuję dodać: 1. Usługi: Logika biznesowa To zajmie logikę, taką jak "GetFilteredItems() " z moich kontrolerów i umieść je w projekcie usługi, który zależy od rdzenia i od którego zależy sieć. Nie ma nic wspólnego z żądaniami HTTP. Kiedy zaczynam to robić, chcę honorować pojedynczą odpowiedzialność i tworzyć jedną klasę na metodę. Moje pytania: 1) Czy to dobre podejście? 2) Powiedz, że potrzebuję metody GetFilteredItems, która pobiera identyfikator i zwraca listę. Jaka jest tutaj konwencja w nazewnictwie klas i metod? Nie mogę mieć klasy SampleClass z metodą SampleClass(), która coś zwraca, prawda?


title: programowanie na urządzeniach przenośnych

text: To trochę niejasne. Ale starałem się sprowadzić sprawy do rzeczy. O ile urządzenia podręczne (smartfony, tablety) stają się niezwykle popularne każdego dnia, zastanawiam się, dlaczego nie ma dla nich świetnych narzędzi programistycznych? Przy dużej mocy obliczeniowej tych urządzeń nie sądzę, aby było to problemem z uruchamianiem na nich kompilatorów lub nawet małych środowisk IDE. Całkowicie można zaakceptować fakt, że pisanie w konwencjonalnych językach programowania za pomocą małej klawiatury ekranowej jest bardzo trudne. Nigdy nie chciałbym pisać javy na moim Androidzie. Ale czy są jakieś specjalne narzędzia lub języki, które są rozwijane w tym kierunku? Na przykład miałem aplikację na Androida dla BrainF**k, która działała dobrze z ograniczoną liczbą symboli (chociaż sam język jest wystarczająco nudny, aby go nie używać). Jaki jest generalnie zakres tego obszaru i kierunek badań, jeśli w ogóle? Dziękuję. EDYCJA Zwróć uwagę, że mam na myśli programowanie na urządzeniach mobilnych. Nie DLA urządzeń mobilnych.


title: Scentralizowana struktura integracji

text: Zależy nam na scentralizowaniu naszej integracji w naszej firmie i zastanawiam się, jakie rozwiązania mają na to inni i jaki byłby najlepszy sposób podejścia do tego. W tej chwili mamy różne typy integracji działające w różnych językach, różne frameworki na różnych serwerach, więc staramy się przenieść je wszystkie do jednego frameworka, aby ułatwić zarządzanie. Niektóre z obecnych integracji obejmują: * Zaplanowane zadania SQL Server (na 3 lub 4 serwerach) * Usługi integracji SQL Server (na 2 lub 3 serwerach) * Aplikacje konsolowe (.NET na 2 serwerach) * Usługi Windows (.NET na 2 serwerach) ) To, czego szukamy, to: * 1 serwer, który zarządza planowaniem wszystkich zadań integracji (więc wystarczy go skonfigurować tylko raz i zawsze wiemy, gdzie go znaleźć) * Monitor zadań, który wyświetla historię uruchomionych zadań (podobnie jak SQL Monitor aktywności zadań serwera) * Zadania mogą wymagać uruchomienia niestandardowego kodu .NET, tutaj można użyć pewnego rodzaju interfejsu API, aby zapewnić większą elastyczność w porównaniu z usługami SQL Server Integration Services


title: Czytanie rekomendacji dotyczących tworzenia aplikacji webowych

text: Dla studenta programisty/cs, który chce zagłębić się w tworzenie stron internetowych i freelancing... jakie są dobre książki/publikacje/portale/blogi? Proszę wziąć pod uwagę również to, że jestem przyzwyczajony do tworzenia stron internetowych, wygooglując każdy mój krok, aby znaleźć przykład. Interesuję się technologiami typu php, javascript, jquery, ajax.. A może później: ruby i ror. Byłoby wspaniale, gdyby istniała książka (lub zbiór książek) na temat tworzenia stron internetowych, która obejmowałaby cały proces tworzenia, plus różne techniki, zasady, przykłady... itd.


title: Czy dopuszczalną praktyką jest nadawanie obiektowi wskaźnika na „świat”?

text: Często znajduję się w sytuacjach, w których przedmioty muszą się między sobą komunikować. Na przykład przycisk może wymagać komunikowania się z różnymi polami tekstowymi. Czy dobrze byłoby po prostu skonstruować każdy widżet ze wskaźnikiem do kontenera dla nich wszystkich? Czy lepiej byłoby nadać mu wskaźnik do mapy kontenera zasobów, w której obiekt może zlokalizować inny obiekt za pomocą łańcucha lub czegoś? Ten obszar zawsze był dla mnie bardzo niejasny. Mógłbym łatwo zaimplementować wszystko, co chcę zrobić, gdybym po prostu skonstruował obiekty ze wskaźnikami do kontenerów każdego innego obiektu, ale wydaje się to niewłaściwe. Czy w przypadku widżetu lepiej byłoby, gdyby widżet nie wiedział nic o świecie zewnętrznym, a zamiast tego skonstruowano detektory akcji z dostępem do zasobów? Dzięki Rozumiem, że to zły pomysł, ale jakie są rozwiązania w takich sytuacjach np.: dobre wzorce projektowe dla oprogramowania zorientowanego na GUI? Jeśli kliknięcie przycisku wymaga zapisania pliku, jak można to zrobić w czysty sposób? Słuchacze akcji? Ale gdzie są tworzone i przez co?


title: Ile pracy przy projektowaniu stron internetowych powinien poświęcić programista sieciowy?

text: Tworzę stronę internetową dla mojego przyjaciela, a plan jest taki, by ostatecznie pozyskać zewnętrzne źródła, które zajmą się całością projektu. Więc zastanawiam się, ile projektu powinienem teraz zająć? Moim celem jest przede wszystkim zakodowanie logiki witryny i uzyskanie wszystkiego, co _funkcjonalne_, zanim za bardzo przejmę się tym, jak faktycznie wygląda. Moje myśli do tej pory były, spróbuję uporządkować kod i stworzyć skuteczny szkielet do wciągnięcia. Co myślisz? Czy użyteczność i funkcjonalność to moje jedyne dwie troski, czy też powinienem odgrywać prewencyjną rolę w decyzjach projektowych? Jak ta praca jest zazwyczaj podzielona w branży?


title: Udowodnić się

text: Wydaje mi się, że nie jest to takie powszechne, ale czasami zdarzają się programiści, którzy tak naprawdę nie poszli na studia i po prostu spędzili swoje nastolatki na hakowaniu domowych projektów i nauczyli się wystarczająco dużo, by pracować po szkole średniej. Moje pytanie brzmi: gdybyś zatrudniał kandydata, jak określiłbyś, czy ktoś, kto nie studiował na uniwersytecie, ale twierdzi, że jest (ponad) biegły iw pełni zdolny do tworzenia oprogramowania tak samo jak student z dyplomem? Czego szukasz? Co chciałbyś zobaczyć od tej osoby, która postawiłaby ją na poziomie lub powyżej absolwenta college'u, jeśli chodzi o zatrudnianie?


title: Jak radzić sobie z deweloperem, który zadaje zbyt wiele pytań

text: Niedawno objąłem kierownicze stanowisko, co oczywiście obejmuje nadzorowanie pracy innych ludzi i kierowanie juniorami. Jest taki gość, który nie przestaje zadawać pytań i wiele razy jest to naprawdę podstawowa sprawa – która pochłania mnóstwo mojego czasu i psuje mój tryb przebywania w strefie. Próbowałem łatwego podejścia polegającego na wysłaniu mu linku z napisem „Pozwól, że Google to dla ciebie”, ale on był tylko podekscytowany żartem i nie otrzymał wskazówki. Innym razem po prostu mówię mu, że jestem zajęty i że powinien sam to zbadać. Chodzi o to, że kiedy nie było mnie w biurze, sam wykonał przyzwoitą pracę, więc z większością tego, co mu przydzielono, poradzi sobie. Pytanie brzmi, jak mogę zmusić go do filtrowania problemów, z którymi do mnie przychodzi? Zdaję sobie sprawę, że jestem autorytetem zawodowym, do którego powinien się zwracać, gdy potrzebuje pomocy, chciałbym tylko, żeby robił to w nietrywialnych sprawach.


title: Czy projekt jRails jest czymś, z czego powinienem korzystać?

text: Projekt jRails jest spadkiem w miejsce pomocników Prototype/scriptalicious, które są już częścią frameworka Rails. Czy Twoje doświadczenia z tym projektem są pozytywne? Czy robi to, co mówi na puszce? Czy nadal jest utrzymywany, czy jest to zły wybór, jeśli chcę zrobić jQuery z RoR?


title: OOP – przykład składu, składników i kompozytów?

text: Czytałem trochę o OOP w odniesieniu do kompozycji, komponentów i kompozytów. Uważam, że rozumiem podstawową zasadę (nie jestem pewien). Czy ktoś może podać przykładowy kod osoby lub samochodu (oba mają wiele właściwości) za pomocą kompozycji, komponentów i kompozytów? Myślę, że zobaczenie tego w kodzie wyjaśniłoby zamieszanie, które mam dotyczące tego wzorca. Najlepiej w Javie lub PHP.


title: Zapewnienie spójności transakcyjnej z DDD

text: Zaczynam od DDD i rozumiem, że zagregowane korzenie służą do zapewnienia spójności transnarodowej. Nie powinniśmy modyfikować wielu agregatów w jednej usłudze aplikacji. Chciałbym jednak wiedzieć, jak poradzić sobie z następującą sytuacją. Mam zagregowany katalog główny o nazwie Produkty. Istnieje również zagregowany korzeń o nazwie Group. Oba mają identyfikatory i mogą być edytowane niezależnie. Wiele produktów może wskazywać na tę samą grupę. Posiadam usługę aplikacji, która może zmienić grupę produktu: `ProductService.ChangeProductGroup(string productId, string groupId)` 1. Sprawdź grupę istnieje 2. Pobierz produkt z repozytorium 3. Ustaw jego grupę 4. Zapisz produkt z powrotem do repozytorium Ja również mieć usługę aplikacji, w której można usunąć grupę: `GroupService.DeleteGroup(string groupId)` 1\. Pobierz produkty z repozytorium, którego groupId jest ustawione na podany groupId, upewnij się, że liczba wynosi 0 lub przerwij 2\. Usuń grupę z repozytorium grup 3\. Zapisz zmiany Moje pytanie brzmi następująco, co by się stało, gdyby: W ProductService.ChangeProductGroup sprawdzimy, czy grupa istnieje (tak), a następnie zaraz po tym sprawdzeniu oddzielny użytkownik usunie productGroup (poprzez inną GroupService.DeleteGroup). W takim przypadku ustawiamy odniesienie do produktu, który właśnie został usunięty? Czy jest to wada mojego projektu polegająca na tym, że powinienem użyć innego projektu domeny (w razie potrzeby dodać dodatkowe elementy), czy też musiałbym korzystać z transakcji?


title: Jak mogę sprawdzić moje postępy jako solowy młodszy programista?

text: Obecnie pracuję dla firmy 2-osobowej jako główny programista solowy. Mój szef pozyskuje klientów, podrabia szablony projektów png i przekazuje mi je. Ten system działa dobrze i naprawdę mi się podoba. Projekty, nad którymi pracuję, są przeznaczone dla małych i średnich firm, które zazwyczaj potrzebują systemu CMS. Opracowany od podstaw, zbuduję dostosowany backend dla klienta, aby dodawać/edytować/usuwać kategorie, tagi, produkty itp., a następnie wyprowadzać je do interfejsu użytkownika zgodnie z przekazanym mi szablonem projektu. Z biegiem czasu projekty stały się bardziej złożone, dzięki funkcjom koszyka/zamawiania i innym typowym funkcjom typu e-commerce. Ponownie, ten system działa dobrze i naprawdę mi się podoba. Moim problemem jest mój rozwój osobisty jako programisty. Dużo wolnego czasu spędzam na czytaniu blogów programistycznych, sprawdzaniu przez stackexchange, czytaniu sugerowanych książek o programowaniu (obecnie na „The Pragmatic Programmer”, jak na razie naprawdę dobry), ćwiczeniu mózgu (zagadnienia matematyczne z lumosity.com i khanacademy), robieniem mnóstwa ćwiczeń fizycznych i innych czynności związanych z rozwojem osobistym. Nic na to nie poradzę, ale czuję, że brakuje mi informacji zwrotnych, krytyki. Mój szef jest świetny i nigdy nie powstrzymuje się od pochwał w odniesieniu do mojej pracy, ale niestety albo jest zajęty sprawdzaniem mojego kodu, albo szczerze mówiąc, nie sądzę, że to jedna z jego specjalizacji, więc nie może udzielać informacji zwrotnych . Chcę wiedzieć, co robię źle, a co robię dobrze. Czy powinienem umieszczać tyle logiki w kontrolerze, czy wystarczająco moduluję swój kod itp. Więc to, co zrobiłem, to opracowanie małej aplikacji „Budżetowanie rodziny” i starałem się to zrobić tak czysto i skutecznie, jak obecnie wiem, jak to zrobić. Chcę wiedzieć, czy jest miejsce, w którym mogę przesłać tę aplikację i poprosić kilku doświadczonych programistów o opinie. To nie tylko podsekcja mojego kodu, taka jak „codereview.stackexchange”, wydaje się wymagać, to cały mój przepływ pracy, który chcę poddać krytyce. Wiem, że to dużo pytań i spodziewam się, że główną radą będzie szukanie pracy w zespole, co z pewnością zajmę się później, ale na razie chcę pozostać przy mojej obecnej sytuacji zatrudnienia, ale po prostu nie chcę rozwijać zbyt wielu złych nawyków. Daj mi znać, jeśli mogę podać dodatkowe informacje, które pomogą wyjaśnić, lub jeśli to nie jest właściwe miejsce na tego typu pytania, z góry przepraszam. Nie chciałem używać reddita, ponieważ czułem, że ta społeczność sprzyja bardziej przemyślanym odpowiedziom.


title: Czy mogę umieścić projekt mojej poprzedniej firmy w moim CV?

text: Tworzę teraz swoje CV, ale nie jestem pewien, czy mogę umieścić projekt mojej poprzedniej firmy w sekcji Projekt mojego CV. Nie zamierzam ujawniać zastrzeżonych szczegółów, tylko nazwę i opis projektu (jeśli nazwa nie liczy się jako zastrzeżona). Dziękuję!


title: Jak przekonać mój zespół do korzystania z mniejszych klas/metod?

text: Zastrzeżenie: jestem nowicjuszem (to mój trzeci dzień pracy) i większość moich kolegów z zespołu jest bardziej doświadczona ode mnie. Kiedy patrzę na nasz kod, widzę kilka zapachów kodu i złe praktyki inżynierskie, takie jak: * Nieco niespójne wytyczne nazewnictwa * Właściwości nie oznaczone jako tylko do odczytu, jeśli to możliwe * Duże klasy - zauważyłem klasę narzędziową, która składała się z setek metod rozszerzających (dla wielu typów). To było ponad 2500 linii! * Duże metody - staram się refaktoryzować metodę, która ma 150 linii. Te dwie ostatnie wydają się być prawdziwym problemem. Chcę przekonać kolegów z drużyny do korzystania z mniejszych klas i metod. Ale czy powinienem to zrobić? Jeśli tak, to w jaki sposób? Mój zespół otrzymał mentora z głównego zespołu (jesteśmy zespołem satelitarnym). Czy powinienem najpierw iść do niego? * * * **AKTUALIZACJA** : Ponieważ niektóre odpowiedzi dotyczyły projektu, proszę wiedzieć, że jest to działający projekt. I IMHO, ogromne klasy/metody tej wielkości są zawsze złe. W każdym razie nigdy nie chcę wkurzyć mojej drużyny. Dlatego zapytałem - Czy powinienem to zrobić, a jeśli tak, to jak mam to zrobić delikatnie? **AKTUALIZACJA** : Postanowiłem coś zrobić na podstawie zaakceptowanej odpowiedzi: ponieważ jestem nowicjuszem, więc wszystko widzę „świeżymi oczami” Będę notował wszystkie zapachy kodu, które znalazłem (pozycja, dlaczego jest źle, jak czy możemy to zrobić lepiej,...), ale w tej chwili staram się tylko zebrać szacunek od mojego zespołu: pisz "lepszy kod", poznawaj ludzi, wiedz, dlaczego to zrobiliśmy... Kiedy nadejdzie odpowiedni czas , postaram się zapytać mój zespół o nowe zasady dotyczące kodu (wytyczne nazewnictwa, mniejsze klasy, mniejsze metody,...) i jeśli to możliwe, zrefaktoryzować stary kod. To powinno działać, IMHO. Dziękuję Ci.


title: Najlepsze praktyki, aby uniemożliwić potencjalnym płacącym klientom tworzenie wielu kont próbnych

text: Mam pomysł na aplikację internetową i chcę, aby była to usługa freemium. Osoby, które się zarejestrują, będą miały możliwość tworzenia 3 elementów treści za darmo i będą musiały zapłacić premię, aby uzyskać możliwość tworzenia kolejnych treści. Zakładając, że te dwa typy kont będą miały identyczne zachowania, z wyjątkiem ilości treści, jaki jest najlepszy sposób, aby uniemożliwić tym użytkownikom obchodzenie mojego planu cenowego i tworzenie ton kont próbnych? Czy myślałeś o tym wcześniej? Co robisz w swojej aplikacji internetowej? Mógłbym monitorować adresy e-mail, adresy IP, numery telefonów itp., ale wszystko to można łatwo obejść. Myśli?


title: która funkcja odkażania danych wejściowych jest lepsza?

text: najwyraźniej niektóre z naszych witryn zostały zhakowane przez bota hakerskiego. Powód: zła sanityzacja wejścia. Nasz szef daje nam ten plik do umieszczenia na wszystkich naszych serwerach, aby je zabezpieczyć: http://pastebin.com/0gJ19TQG Osobiście robię to na moich osobistych stronach internetowych: `filter_var(mysql_real_escape_string($_POST['Nom']) , FILTER_SANITIZE_STRING);`. Więc powiedz mi, który z nich jest lepszy i dlaczego?


title: Czy potrafisz stworzyć prototyp złożonej zmiany systemowej?

text: Obecnie jestem w trakcie przeprojektowywania części dużego i złożonego serwera aplikacji, aby umożliwić jego dystrybucję na wielu maszynach. Zostałem poproszony o dostarczenie prototypu przeprojektowania w stosunkowo krótkim czasie. Nie sądzę, aby można było stworzyć prototyp tego; zmiany są w istniejącym kodzie, a zmiany są na tak niskim poziomie, że system może znajdować się tylko w jednym z dwóch stanów: działa lub nie działa. Nie ma kompromisu. Zmiany muszą zostać wprowadzone w całości na raz, ponieważ wszystkie są od siebie zależne. Nie ma możliwości częściowego zaimplementowania wszystkich zmian, system nie będzie działał, dopóki wszystkie nie zostaną w pełni zaimplementowane. W tym momencie nie jestem pewien, co robić. Wiem, że innym trudno jest powiedzieć, nie znając każdego szczegółu, ale ogólnie, czy mam rację, że czegoś takiego nie da się stworzyć prototypem? Czy jest jakiś sposób na prototypowanie takich rzeczy, o których nie wiem?


title: Relacje REST oprócz rodzica/dziecka

text: Wydaje się, że to dość podstawowe pytanie, ale nie mogę znaleźć odpowiednich wskazówek. Jaki jest „spokojny” sposób „POST” relacji między dwiema jednostkami, które niekoniecznie są rodzicami/dziecmi. Jako przykład rozważ klientów i zamówienia. Można stworzyć klienta z `POST` do `/customer`. Jak jednak najlepiej stworzyć zamówienie? Przykładem może być `POST` do `/customer/123/order`, ale co, jeśli zamówienie nie jest bezpośrednio przypisane do klienta i może istnieć samodzielnie (w przypadku koszyka internetowego, który pozwala na „anonimowa” kasa)? Czy w takim razie właściwa jest metoda `POST /order?customerId=123` Ponadto rozważmy przypadek, w którym zamówienie może być złożone niezależnie od płatności (powiedzmy, że wystawiamy fakturę klientowi). Możesz utworzyć zamówienie (za pomocą jednej z powyższych metod), ale w jaki sposób dokonamy płatności? `POST /order/123/payment` lub `POST /payment?orderId=123` (jeśli założymy, że można dokonać płatności za coś innego niż zamówienie, a można chcieć uzyskać informacje o zamówieniu/płatności bez wiedzy konkretnego klienta).


title: Czy warto uzyskać certyfikaty O'Reilly?

text: Czy poza możliwością umieszczenia w CV „Znam Pythona” certyfikaty O'Reilly School of Technology (wydawane przez University of Illinois) są przydatne do uzyskania zatrudnienia? Jestem zainteresowany poznaniem wielu tematów poruszanych w tych programach, a ponieważ są one dość niedrogie, myślałem o tym, aby pójść tą drogą. Jednak naprawdę nie chcę tego robić, jeśli jest to mniej więcej tak warte, jak uzyskanie dyplomu z University of Phoenix. Czy ktoś wie, jaki wpływ mogą mieć te certyfikaty na uzyskanie zatrudnienia, a nie uzyskanie certyfikatu, ale uczenie się na własną rękę?


title: Potrzebujesz oprogramowania do kontroli kodu źródłowego — Team Foundation Server? czy coś innego?

text: Niedawno w firmie wyznaczono więcej niż jednego programistę odpowiedzialnego za projekt rozwoju oprogramowania LightSwitch(C#) i natychmiast pojawiła się potrzeba pewnego rodzaju kontroli/synchronizacji źródła. Nigdy nie korzystaliśmy z Team Foundation Server, ale chętnie z niego skorzystamy, jeśli będzie warto. * Czy jest to właściwe narzędzie do synchronizacji kodu między programistami? * Czy posiada potrzebne funkcje? * Czy masz na myśli jakieś inne narzędzie? (Użyłem TortoiseSVN, ale było to zbyt proste i „tekstowe”, jeśli wiesz, co mam na myśli, potrzebujemy profesjonalnego narzędzia) * Jakie inne funkcje ma Team Foundation, z których możemy korzystać? (jeśli nie zrozumiałeś żadnego z powyższych, poproś mnie o dalsze wyjaśnienia)


title: Szukam licznika LOC z szacowanym kosztem zapisania tych LOC

text: Miałem jeden (tylko Linux) i go zgubiłem. Chciałbym inny, albo Windows, albo Linux. Proszę _nie_ przekształcać tego w dyskusję „takie szacunki są bezużyteczne”. Potrzebuję... czegoś, czegokolwiek... żeby pokazać, że rozwój s/w nie jest darmowy. Nawet szalone domysły są lepsze niż nic. Ostatni, którego użyłem, mówił coś w rodzaju X linii kodu – przeciętny programista z USA potrzebowałby na to Y miesięcy za pensję $Z. Znowu, proszę, nie mów mi, dlaczego tego nie chcę – bo tak. Przepraszam, że próbowałem odeprzeć hałas, zanim jeszcze się zacznie. Z góry dziękuję za wszelką pomoc.


title: Scrum: jak zintegrować pracę wykonaną przez wybitnego programistę spoza zespołu?

text: Mamy „typowy” zespół SCRUM i zobowiązujemy się do pracy na sprint, a także do utrzymywania backlogu. Ostatnio natknęliśmy się na problem z integracją/obsługą pracy nadwyżkowego programisty wykonującego pracę poza zespołem (wybierającego pracę poza normalnymi godzinami pracy/sprintem). Dla przykładu, jeśli zespół przyjmie 50 punktów pracy, powiedzmy, że wykona całą pracę w ramach SCRUM do końca sprintu i oni i firma są zadowoleni. Jeden z członków zespołu postanawia pracować samodzielnie, nad pozycją zaległości, w wolnym czasie. Nie sprawdzają tej pracy, ale ją zapisują (używamy TFS i jest na półce). Jak sobie z tym poradzić? Kilka problemów .. * Podczas następnego sprintu członkowie tego zespołu twierdzą, że praca programistyczna została wykonana w 99% i wymaga jedynie przeglądu kodu i testowania. Jak sobie z tym radzisz w metodyce SCRUM i zwinnej? * Inni deweloperzy narzekają, że nie byli zaangażowani w decyzje projektowe związane z tymi historiami, ponieważ praca została wykonana poza zespołem. * Nasz właściciel produktu ma pokusę, aby wykonać tę „bezpłatną” pracę, a członkowie, którzy osiągają wysokie wyniki, prawdopodobnie robią to celowo, aby wprowadzić do produktu więcej funkcji, których zespół inaczej nie byłby w stanie wykonać w sprincie (sprintach). Istnieje pogląd, że jest to przerwanie „procesu”. Oczywiście kontrola jakości, interfejs użytkownika i dokumentacja nadal muszą być wykonane w tej pracy. Widzę wiele dyskusji na temat nie zmuszania zespołu SCRUM do pracy w godzinach nadliczbowych, ale co z członkiem zespołu pracującym ponad oczekiwania stawiane podczas planowania i realizacji sprintów? Zawahałbym się zapanować nad tą osobą i powiedzieć, że nie możesz pracować więcej (oczywiście uważając na wypalenie), ale jednocześnie wydaje się, że powoduje to pewne problemy z niektórymi członkami zespołu (ale nie wszystkimi). Jak zintegrować pracę wykonaną przez wybitnego członka w SCRUM i zwinny proces tworzenia oprogramowania?


title: Jak używanie tabulatora wpływa na polecenia takie jak diff

text: Na stronie http://pear.php.net/manual/en/standards.indenting.php zaleca się użycie spacji zamiast tabulatora, ponieważ powoduje to problemy z diff, łatami. Oto fragment strony. > Użyj wcięcia składającego się z 4 spacji, bez tabulatorów. Pomaga to uniknąć problemów z > różnicami, łatami, historią SVN i adnotacjami. Więc moje pytanie brzmi: jeśli używamy kart wszędzie, jak to wpłynie na te polecenia?


title: Jak zrobić arkusz doboru sprzętu?

text: Tworzymy platformę programową, a teraz musimy wykonać arkusz z rozmiarami sprzętu dla części tego oprogramowania po stronie serwera. Powinienem więc przygotować jakiś model matematyczny, który na przykład biorąc pod uwagę liczbę jednoczesnych użytkowników, może przewidzieć liczbę serwerów fizycznych, pojemność pamięci masowej lub przepustowość sieci. Jak zrobić taki model?


title: Czy podczas rozwidlenia projektu na zasadach permisywnych/GPL z podwójną licencją mogę zrezygnować z jednej z licencji?

text: Rozważ istniejący projekt, który jest objęty podwójną licencją GPL + MIT lub BSD. Skoro jest to podwójna licencja, czy po forkowaniu mogę wybrać jedną licencję w fork? A może moje rozwidlone pliki muszą nadal mieć podwójną licencję? Z pewnością łatwiej byłoby śledzić tylko jedną licencję.


title: Czy konieczne było zbudowanie tej witryny w ASP.NET?

text: Z tego, co mi powiedziano, cały stos StackOverflow/StackExchange jest oparty na Microsoft ASP.NET. Witryny SO i SE są prawdopodobnie najbardziej złożone, które odwiedzam regularnie. Na każdej stronie dużo się dzieje - wiele różnych pudełek, pobierających dane z różnych miejsc i zmieniających się dynamicznie, reagujących na interakcję użytkownika. A strony działają bardzo sprawnie, pomimo dużego ruchu. Moje pytanie brzmi, czy można było to osiągnąć przy użyciu innej platformy/struktury? Czy ASP.NET nadaje się do bardziej złożonych projektów, w których inne platformy internetowe będą się nadwyrężać i słabnąć? A może wybór jest dość przypadkowy?


title: Jak nie dać się zatrudniać firmom, które są kandydatami do historii DailyWTF?

text: Czytam archiwa The Daily WTF, a zwłaszcza te historie o firmach związanych z IT, które mają całkowicie złe podejście do tworzenia oprogramowania, pracy programisty itp. Niektóre historie są całkowicie straszne: firma nie ma sieci lokalnej ze względów bezpieczeństwa inny ma serwer kontroli źródła, do którego dostęp ma tylko menedżer itp. Dodaj do tego wszystkie historie o menedżerach, którzy nic nie wiedzą o swojej pracy i podejmują głupie decyzje, nie słuchając nikogo. Rzecz w tym, że nie wiem, skąd podczas rozmowy kwalifikacyjnej, czy zostaniesz zatrudniony w takiej firmie. Oczywiście, czasami ankieter mówi dziwne rzeczy, które dają wyobrażenie, że coś jest bardzo nie tak z firmą (w moim przypadku ostatni menedżer powiedział, że powinienem pracować przez 100% mojego czasu przez Pulpit zdalny, podłączony do starego i slooooow maszyna, ponieważ _"unika kilku osób do modyfikacji tego samego kodu źródłowego"_; może powinienem mu wyjaśnić, czym jest SVN). Ale w większości przypadków nie będziesz w stanie uzyskać wystarczającej ilości informacji podczas rozmowy kwalifikacyjnej, aby uzyskać dokładny obraz firmy. Jak więc uniknąć zatrudnienia w tego typu firmach? * Zastanawiałem się, czy nie poprosić o pokazanie niektórych dokumentów, takich jak **przewodnik po dokumentacji** czy **wytyczne dotyczące stylu kodu**. Problem polega na tym, że mieszkam we Francji, a tutaj większość firm w ogóle nie ma tych dokumentów, a w rzadkich przypadkach, gdy te dokumenty istnieją, są one nieaktualne, źle napisane, nigdy nie używane lub zmuszają do robić rzeczy, które nie mają sensu. * Myślałem też o zapytaniu o **jak faktycznie pracują programiści**. Ale fakt, że mają dwa ekrany lub „meble późno-nowoczesne-artystycznie-pierdliwe” nie oznacza, że nie mają ludzi podejmujących dziwne decyzje, które uniemożliwiają pracę. Czy byłeś w takich sytuacjach? Czego próbowałeś? Czy to zadziałało?


title: DDD i walidacja zagregowanego korzenia

text: Załóżmy, że agregacja root : MailConfiguration (opakowanie obiektu AddressPart). Obiekt AddressPart jest prostym, niezmiennym obiektem wartości z kilkoma polami, takimi jak senderAdress, RecipentAddress (aby uprościć przykład). Jako obiekt niezmienny, AddressPart powinien logicznie zawinąć swój własny Validator (przy okazji zewnętrznego rodzaju AddressValidator dla przestrzegania zasady pojedynczej odpowiedzialności). Czytałem kilka artykułów, w których twierdził, że agregacjaRoot musi walidować swoje „dzieci”. Jeśli jednak zastosujemy się do tej zasady, można utworzyć część adresową o niespójnym/nieprawidłowym stanie. Jaka jest twoja opinia? Czy powinienem przenieść współpracownik AddressValidator (używany w konstruktorze, aby natychmiast zweryfikować spójność AddressPart) z AddressPart i przypisać go do agregatRoot (MailConfiguration)?


title: Wstrzykiwanie zależności: co należy do konstruktora?

text: Oceniam moje obecne praktyki PHP w celu napisania bardziej testowalnego kodu. Ogólnie rzecz biorąc, łowiem opinie na temat tego, jakie rodzaje akcji należy do konstruktora. Czy powinienem ograniczyć rzeczy do wstrzykiwania zależności? Jeśli mam jakieś dane do wypełnienia, czy powinno się to odbywać za pośrednictwem fabryki, a nie jako argumentów konstruktora? (Tutaj myślę o mojej klasie `User`, która pobiera ID użytkownika i wypełnia dane użytkownika z bazy danych podczas budowy, która oczywiście musi się w jakiś sposób zmienić.) Słyszałem, że metody "inicjalizacji" są źle, ale jestem pewien, że zależy to od tego, co dokładnie jest robione podczas inicjalizacji. Ryzykując, że będę zbyt szczegółowy, podam też bardziej szczegółowy przykład na moje pytanie. W poprzednim projekcie zbudowałem klasę FormField (która obsługiwała ustawianie wartości pól, walidację i dane wyjściowe jako HTML) oraz klasę Model, aby zawierała te pola i wykonałam odrobinę magii, aby ułatwić pracę z polami. FormField miał kilka gotowych podklas, m.in. FormText (`<input type="text">`) i FormSelect (`<select>`). Model zostałby podzielony na podklasę, tak aby konkretna implementacja (powiedzmy Widget) miała własne pola, takie jak nazwa i data produkcji: class Widget extends Model { public function __construct( $data = null ) { $this->name = nowy FormField('length=20&label=Nazwa:'); $this->wyprodukowano = nowy FormDate; rodzic::__konstrukcja( $dane ); // ustaw powyższe pola za pomocą tablicy przychodzącej } } Teraz narusza to pewne zasady, które przeczytałem, takie jak „unikaj `nowego` w konstruktorze”, ale moim zdaniem nie wydaje się to nie do przetestowania. Są to właściwości obiektu, a nie jakiś generator danych czarnoskrzynkowych odczytujący z zewnętrznego źródła. Testy jednostkowe stopniowo rozbudowywały się do dowolnego testu funkcjonalności specyficznej dla widgetu, więc mogłem mieć pewność, że podstawowe FormFields działały poprawnie podczas testu widgetu. Teoretycznie mógłbym zapewnić modelowi funkcję FieldFactory(), która mogłaby dostarczać niestandardowe obiekty pól, ale nie sądzę, abym coś zyskała dzięki takiemu podejściu. Czy to kiepskie założenie?


title: Nowa praca ponad budżet

text: Niedawno rozpocząłem nową pracę jako programista kontraktowy, a mój szef, który nie był programistą około dwóch tygodni temu, dał mi zadanie odtworzenia aplikacji z innego języka i innego programisty, której będzie używał ponownie z wieloma klientami (zastępując front-end ), które według moich szacunków potrwałoby dłużej niż 12 godzin. Dwa tygodnie później przekraczam budżet o 230%. Przyznaję, że to była moja druga aplikacja internetowa, w przeszłości byłem programistą wordpress, więc jestem trochę nowy w zapalniku kodu, ale nie w żadnym wypadku. Mój szef zatrudnił mnie wiedząc o tym i wiedziałem, że zajmie to dłużej niż jego 12 godzin. Widział mnie w biurze na zadaniu od 2 tygodni, powinien być trochę przygotowany na ten rachunek. Czy spodziewam się pełnej liczby godzin, czy filtruję według tego, ile się nauczyłem? Czy jako programista mogę wystawić rachunek za badania?


title: Od jakich ram powinien zacząć początkujący rubin: rails czy Sinatra?

text: Jaki jest najlepszy framework na start: szyny czy sinatra? Słyszałem, że Sinatra jest bardziej elastyczna, ale rails ma dużo dokumentacji i samouczków. Jaki jest Twój wybór?


title: Czy można wycofać kod, jeśli klient odmówi zapłaty?

text: Mój przyjaciel wykonał kilka prac kontraktowych, aby dodać obsługę lokalizacji do istniejącej aplikacji mobilnej. Nie zlecono mu dodawania żadnych innych funkcji ani naprawiania już istniejących błędów. Skończył swoją pracę, ale klient odmawia mu zapłaty z powodu już istniejącego błędu, którego nie naprawił. Jedyną kartą, którą pozostał mój przyjaciel, jest przywrócenie kodu serwera do stanu sprzed rozpoczęcia pracy, co prawdopodobnie zepsuje aplikację mobilną i, miejmy nadzieję, wymusi rękę klienta. Czy to legalne? Czy istnieje lepszy sposób na poradzenie sobie z sytuacją?


title: Czy praktyczne jest używanie Twittera do dzienników usług?

text: Ostatnio mój szef zasugerował, abyśmy publikowali na Twitterze logi naszego serwisu, który jest hostowany na Windows Azure. Jego pomysł polega na tym, że jest on wygodnie czytelny i jeśli chmura Azure ulegnie awarii, dzienniki pozostają. Powiedział też, że _wiele ludzi to robi_ , poszukałem w Google i nie mogłem znaleźć żadnych danych na ten temat. Obecnie moje obawy są następujące. Po pierwsze, być może twitter nie jest zbyt wygodny do rejestrowania czegoś, co może się zdarzyć bardzo często (na przykład, gdy nasza rola usługi jest uruchamiana, każda instancja zapisuje dziesiątki rekordów w ciągu kilku minut). Po drugie, nawet jeśli twitterowa umowa EULA zezwala na takie wykorzystanie w tym momencie, może zostać zmieniona w przyszłości, aby odciąć tweety, które pojawiają się zbyt często, aby były pochodzenia ludzkiego. Czy publikowanie dzienników usług na Twitterze jest praktyczne? Co wziąć pod uwagę, jeśli to wdrożymy?


title: Wymagania sprzętowe WCF

text: Przeczytałem wymagania sprzętowe WCF w książce, a dwa z nich są następujące: * Napęd DVD-ROM * Wyświetlacz o rozdzielczości 1024 × 768 lub wyższej z 256 kolorami lub więcej Dlaczego jest wymagana rozdzielczość ekranu lub mieć napęd DVD? Być może to wymaganie jest niezbędne do działania programu Visual Studio. Czy się mylę?


title: Czy C++0x jest kompatybilny z C?

text: Słyszałem, że ze względu na nowy standard (C++0x) w C++ będzie dużo zmian. Moje pytanie brzmi: jakie są główne zmiany i czy C++0x będzie kompatybilny z C++ 98 i **C** ?


title: Wybór parsera do upiększania kodu

text: Jestem na etapie planowania tworzenia upiększacza kodu (podobnego do AStyle lub Uncrustify) - początkowo miałem tylko przyczynić się do jednego z tych projektów, ale przegląd ich źródła doprowadziło mnie do wniosku, że mam inne cele projektowe i że ich źródło jest napisane w sposób, który utrudnia osobie z zewnątrz łatwe wniesienie wkładu. AStyle, na przykład, zamiast budować jakiś rodzaj AST, używa ponad 100 zmiennych stanu, takich jak `isInComment`, `foundClassHeader`, `isLineReady`, itd. Decyduję między używaniem skanera i generatorów parserów (takich jak flex i bison ) i napisanie własnego systemu parsowania. Które podejście byłoby lepsze? Byłem na uniwersytecie na zajęciach z kompilatorów, więc mam pewne doświadczenie z teorią skanowania i parsowania. Poniżej znajdują się zalety, o których pomyślałem dla każdego z nich: **Generatory** * Prawdopodobnie prostsze/szybsze do opracowania * Prawdopodobnie bardziej zoptymalizowane niż moje początkowe uderzenie w niestandardowy parser, chociaż niestandardowy może pozostawić więcej miejsca na ulepszenia **Niestandardowy parser** * Prawdopodobnie łatwiejszy do debugowania * _Programiści_ wydają się preferować niestandardowe leksery i parsery w poprzednich pytaniach - "Każdy, kto chce porządnego leksera, nie używa Lexa" * Mniej zależności * Może pozwolić na "rozmyte" parsowanie - skoro ja' Rozwijając tylko upiększacz, parser nie musiałby być tak rygorystyczny ani szczegółowy jak kompilator * Równoległość - flex i bison (lub to, co widziałem) używają stanu globalnego. Jeśli chcę analizować wiele plików jednocześnie (w osobnych wątkach), niestandardowe rozwiązanie byłoby prostsze do podziału na przedziały


title: Ustalone standardy kodowania dla kodu pl/pgsql

text: Muszę ujednolicić praktyki kodowania dla projektu, który kompromituje m.in. bazę danych pl/pgsql, która zawiera pewną ilość nietrywialnego kodu. Szukam: * Wytycznych dotyczących formatowania kodu, zwłaszcza wewnątrz procedur. * Wytyczne dotyczące tego, jakie konstrukcje są uważane za niebezpieczne (jeśli w ogóle) * Konwencje nazewnictwa. * Konwencje dotyczące dokumentacji kodu (jeśli jest to praktykowane) Jakieś wskazówki do dokumentów definiujących dobre praktyki w kodzie pl/pgsql? Jeśli nie, to szukam wskazówek do praktyk, które uważasz za dobre. Jest powiązane pytanie dotyczące TSQL: Czy ktoś może polecić standardy kodowania dla TSQL?, co dotyczy również psql, ale potrzebuję więcej informacji na temat procedur składowanych. Inne powiązane pytania: * http://stackoverflow.com/questions/1070275/what-indenting-style-do-you-use-in-sql-server-stored-procedures


title: używając tego w konstruktorze, dlaczego to działa?

text: Mam dwie klasy. * busiObj(utworzony ze starych plików płaskich) * key(zapewnia środki do odróżnienia busiObjs) key ma c'tor, który przyjmuje klucz publiczny busiObj(busiObj foo) { bar = foo.someThing; [...] } Chcę utworzyć klucz w c'tor publicznego busiObj busiObj(...) { myKey = new key(this); [...] } Jednak: Dlaczego u licha to działa? Mocno oczekiwałem, że kompilator wyrzuci coś w stylu: „Nie możesz odwoływać się do obiektu, który jest aktualnie tworzony, duh”. A więc: jak to jest, że mogę odwoływać się do obiektu, gdy jest on wciąż konstruowany?


title: Katalog użytkownika - framework

text: Chciałbym stworzyć bardzo prosty katalog, w którym użytkownik może wejść do swoich profili w sieciach społecznościowych i wybrać nazwę użytkownika. Z tych danych generowana jest mała strona internetowa. Proces logowania powinien być zarządzany za pośrednictwem Twittera lub Facebooka. Od czego mam zacząć? Czy są dostępne jakieś frameworki, API lub coś podobnego? Dzięki Bob


title: Google App Engine: jak otrzymywać powiadomienia o zmianie lub udostępnieniu interfejsów API?

text: Zastanawiam się nad napisaniem aplikacji GAE, ale trochę się waham, ponieważ umowa EULA daje Google pełne prawa do zmiany interfejsów API w dowolnym momencie i z dowolnego powodu. Oczywiście szybko wypadliby z biznesu, gdyby po prostu „ulepszyli i zrefaktoryzowali całe swoje interfejsy API, więc muszę sobie wyobrazić, że mają jakiś system powiadomień, być może nawet kanał RSS itp., aby powiadamiać programistów z dużym wyprzedzeniem o nadchodzącym zmiany lub nowe funkcje, które pojawią się w przyszłych wydaniach. Jednak za życia nie mogę znaleźć żadnego śladu istnienia takiego systemu powiadomień. Być może fora Google to jedyne miejsce, w którym można uzyskać takie aktualizacje? Przypuszczam, że proszę wszystkich zahartowanych w bojach weteranów GAE o zapewnienie, że istnieją niezawodne sposoby otrzymywania powiadomień o zmianach zasad lub API od Google, tak abym mógł zareagować i wprowadzić niezbędne zmiany w aplikacji bez przerywania produkcji lub wpływania na jakichkolwiek klientów.


title: Facebook Java API

text: Chciałbym napisać program w javie (nie servlet, nie jsp, nie webapp), który pozwala mi robić proste rzeczy, takie jak łączenie się z kontem FB i pobieranie statusu lub postów na ścianie. Wiem, że Facebook nie obsługuje już oficjalnego JavaAPI, więc zastanawiałem się, jakie są najlepsze (i najprostsze, ponieważ program jest bardzo prosty) nieoficjalne API. Jeśli to możliwe, chciałbym również otrzymać przykładowy kod. przeszukując sieć, przeczytałem, że do stworzenia aplikacji na Facebooku potrzebne są dwa tajne klucze, a nie mam konta na fb. Czy niezbędne jest posiadanie konta? dziękuje wszystkim


title: Nie chcę patentować swojego oprogramowania biznesowego, ale nie chcę zostać później oszukany

text: Uważam, że patenty zabijają innowacje, ale nie chcę, aby coś, co napisałem i umieściłem na prywatnej licencji, zostało opatentowane 3 lata później przez jakiegoś trolla. Jaki jest tu dobry kompromis? A może rzeczywiście nie jestem zagrożony? _Rozumiem, że większość członków witryny nie jest prawnikami._


title: ISO, Six Sigma, SEI-CMM itp. w firmach z listy Fortune 500

text: Czy duże korporacje i firmy produktowe w ogóle przestrzegają jakichkolwiek standardowych modeli/procesów jakościowych? Na przykład widziałem, że wiele dużych organizacji posiada własne procesy w zakresie IT i rozwoju oprogramowania. W dawnych czasach (nawet przed projektem Iridium Motoroli) pamiętam, jak wiele firm IT starało się o certyfikację SEI-CMM. Czy któraś z firm z listy Fortune 500 próbuje zastosować te procesy jakości? Z mojego ograniczonego doświadczenia nie widziałem, aby przechodzili audyty pod kątem przestrzegania procesów. Większość audytów dotyczy kwestii finansowych lub prawnych. Czy po prostu jestem ignorantem, czy to prawda? Jeśli to prawda, jak rygorystycznie firmy przestrzegają procesów?


title: Długie słowa kluczowe, takie jak „funkcja” i „przestrzeń nazw”

text: W wielu angielskich językach programowania, takich jak C++ i JavaScript, istnieją długie słowa kluczowe, takie jak „funkcja”, „przestrzeń nazw”, „wyjątek” (w językach OCaml) i tym podobne. Czy uważasz, że krótsze słowa kluczowe, takie jak „func”, powinny je zastąpić? Dlaczego lub dlaczego nie? A co z zastąpieniem ich operatorami dwuznacznymi? Długie słowa kluczowe, o których będziemy głównie mówić, ale nie ograniczają się do nich, pochodzą głównie z języków imperatywnych nawiasów klamrowych: `function`, `namespace`, `implements`, `instanceof` i `synced` (zawsze to błędnie pisze). Powinieneś także pokazać przykłady ze swojego ulubionego języka programowania.


title: Pytanie dotyczące porównania połączonej listy z wektorem wstawiania/usuwania wyników

text: Czytałem ten wpis na blogu: http://kjellkod.wordpress.com/2012/02/25/why-you-should-never-ever-ever-use-linked-list-in-your-code-again/ i Znalazłem tam kod do uruchomienia: http://ideone.com/62Emz Skompilowałem go używając gcc 4.7.2 z `g++ -std=c++11` na moim starym laptopie z procesorem T5450 z dwoma rdzeniami z 32 Kbajty pamięci podręcznej L1 każdy i 2 megabajty (wspólnej?) pamięci podręcznej L2 i mam następujące wyniki: ********** Czasy w mikrosekundach ********** Elementy ADD (Lista, Wektor ) ERASE(Lista, Wektor) 100, , 0, 0, 0, 0 200, , 0, 0, 15625, 0 500, , 0, 0, 0, 0 1000, , 15625, 0, 0, 15625 4000, , 109375, 140625, 46875, 31250 10000, 750000, 875000, 312500, 187500 20000, 2968750, 3468750, 1296875, 781250 40000, 12000000, 13843750, 5359375, 3156250 Wychodzenie z testu. cały pomiar trwał 45375 milisekund (45 sekund lub 0 minut), co w rzeczywistości mówi coś przeciwnego, przynajmniej w przypadku operacji „ADD” w porównaniu z tym, co mówi autor tego wpisu na blogu. Lista jest szybsza w przypadku opcji „DODAJ” niż w przypadku opcji Vector. Jakie wnioski powinienem wyciągnąć z moich wyników? Czy to coś dowodzi? Co powinienem pomyśleć lub zrozumieć?


title: Wykrywanie niewłaściwego użycia delete[] vs. delete w czasie kompilacji

text: Chciałbym wiedzieć, czy możliwe jest wykrycie błędu `delete` skomentowanego poniżej w czasie kompilacji? Szczególnie chciałbym usłyszeć o kompilatorze g++. ClassTypeA *abc_ptr = nowy ClassTypeA[100]; abc_ptr[10].data_ = 1; usuń abc_ptr; // błąd, należy usunąć [] Z góry dziękuję!