title: Co myślisz o nowym narzędziu utrwalania Java, które tak naprawdę nie jest ORM-em?

text: ## Persistence in Java Przez ostatnie lata zbierałem doświadczenie w dziedzinie abstrakcji persistence w Javie, używając pojęć takich jak EJB 2.0, Hibernate, JPA i domowych. Wydawało mi się, że mają stromą krzywą uczenia się i dużą złożoność. Ponadto, jako wielki fan SQL, uważałem również, że wiele modeli abstrakcji zapewnia zbyt dużą abstrakcję w stosunku do SQL, tworząc pojęcia takie jak „kryteria”, „predykaty”, „ograniczenia”, które są bardzo dobrymi pojęciami, ale nie SQL. Ogólna idea abstrakcji trwałości w Javie wydaje się być oparta na modelu obiektowo-relacyjnym, w którym RDBMS są w jakiś sposób dopasowane do świata OO. Debata ORM zawsze była emocjonalna, ponieważ wydaje się, że nie istnieje jedno rozwiązanie, które odpowiadałoby każdemu – o ile takie rozwiązanie może w ogóle istnieć. ## jOOQ Moją osobistą preferencją unikania problemów związanych z ORM jest trzymanie się świata relacyjnego. Teraz wybór paradygmatu modelu danych nie powinien być przedmiotem dyskusji, ponieważ jest to osobiste preferencje lub kwestia tego, jaki model danych najlepiej pasuje do konkretnego problemu. Dyskusja, którą chciałbym rozpocząć, dotyczy mojego własnego narzędzia utrwalania o nazwie jOOQ. Zaprojektowałem jOOQ, aby zapewnić większość korzyści, jakie mają nowoczesne narzędzia utrwalające: * Język specyficzny dla domeny oparty na SQL * Generowanie kodu źródłowego mapujące bazowy schemat bazy danych na Javę * Obsługa wielu RDBMS Dodanie niektórych funkcji, które ma kilka nowoczesnych narzędzi utrwalania (popraw mnie jeśli się mylę): * Wsparcie dla złożonego SQL - unii, zagnieżdżone selekcje, self-joins, aliasing, klauzule case, wyrażenia arytmetyczne * Wsparcie dla niestandardowych SQL - procedury składowane, UDT, ENUMS, funkcje natywne, funkcje analityczne Proszę więcej szczegółów znajdziesz na stronie dokumentacji: http://www.jooq.org/learn.php. Zobaczysz, że bardzo podobne podejście jest zaimplementowane w Linq dla C#, chociaż Linq nie jest przeznaczony wyłącznie dla SQL. ## Pytanie Teraz, gdy powiedziałem, że jestem wielkim fanem SQL, zastanawiam się, czy inni programiści podzielą mój entuzjazm dla jOOQ (lub Linq). Czy takie podejście do abstrakcji trwałości jest opłacalne? Jakie są zalety / wady, które możesz zobaczyć? Jak mógłbym ulepszyć jOOQ i czego Twoim zdaniem brakuje? Gdzie popełniłem błąd, koncepcyjnie czy praktycznie? ## Doceniam odpowiedzi krytyczne, ale konstruktywne. Rozumiem, że debata jest emocjonalna. Istnieje wiele wspaniałych narzędzi, które już robią podobne rzeczy. Interesuje mnie krytyczna, ale konstruktywna informacja zwrotna, oparta na Twoim **własnym doświadczeniu** lub artykułach, które być może przeczytałeś.


title: Jaki jest cel testowania oprogramowania?

text: Po przeczytaniu wielu książek pojawia się podstawowa sprzeczność: niektórzy mówią, że „celem testowania jest znajdowanie błędów”, podczas gdy inni twierdzą, że „celem testowania jest wyrównanie jakości produktu”, co oznacza, że błędy są produkty. Zgadzam się również, że jeśli testowanie miałoby być ukierunkowane przede wszystkim na poszukiwanie błędów, to kto dokonałby faktycznej weryfikacji i faktycznie przekazałby informację, że oprogramowanie jest gotowe? Nawet np. Kaner zmienił swoją pierwotną definicję celu testowania z poszukiwania błędów na ocenę jakości, ale nadal nie widzę wyraźnej różnicy. Oba postrzegam jako równie ważne. Mogę zweryfikować oprogramowanie według jego specyfikacji, aby upewnić się, że działa, aw takim przypadku znalezione błędy dotyczą tylko produktów. Ale też wykonuję testy tylko po to, żeby coś zepsuć. A jaka definicja jest dokładniejsza? Uwaga powyżej Odnoszę się przede wszystkim do testowania oprogramowania jako procesu.


title: Czy nadal powinienem rozważyć użycie Appcelerator Titanium do tworzenia aplikacji mobilnych, jeśli nie mam żadnych umiejętności w zakresie tworzenia stron internetowych?

text: Jestem doświadczonym programistą komputerowym, który niedawno zaczął pisać aplikacje na iOS i chciałby również zapuścić się w programowanie na Androida. Ostatnio dużo się mówi o frameworku Appcelerator Titanium, ale nie jestem pewien, czy w pełni rozumiem jego cel. Jak rozumiem, jest to framework do budowania natywnych aplikacji mobilnych z wykorzystaniem technologii webowych. Jeśli nie posiadam żadnych umiejętności w zakresie tworzenia stron internetowych, czy są jakieś sposoby, dzięki którym skorzystam z Appceleratora Titanium? Dzięki za przemyślenia, zamierzam teraz kontynuować badania.


title: Ładnie rozwidlasz projekt open source

text: Już czas. Pracowałeś długo i ciężko, aby dodać swoją wizję do projektu open source, który kochasz, nad którym pracowałeś, dyskutowałeś i do którego wniosłeś nieocenione ilości kodu i wglądu. Ale to nie zadziała z obecnymi programistami. **W końcu musisz rozwidlić kod.** Jak to zrobić i pozostać na najlepszych możliwych warunkach z istniejącym projektem? Jak nie powiesz: „O tak? Rozwidlasz!” Oprócz mechaniki zapylenia krzyżowego i założenia, że argumentacja za rozwidleniem jest rozsądna, logiczna i akceptowalna, jakie problemy się pojawiają? Konkurencja? Wysysanie zasobów? Kłusownictwo użytkowników? Jak przechodzisz przez ten prawdopodobnie trudny i długi proces, dopóki nie osiągniesz wystarczającej dywersyfikacji, że nie są one już postrzegane jako problemy? Zamiast omawiać uzasadnienie decyzji, załóżmy, że byłeś już przekonany, że rozwidlenie kodu jest najlepszym rozwiązaniem ogólnym, a teraz chodzi o to, aby iść naprzód w najlepszy możliwy sposób.


title: Jak nazywa się funkcja NIE-samodzielna?

text: Mam zbiór normalnych funkcji i funkcji samowywołujących w pliku javascript. W moich komentarzach chcę powiedzieć coś w stylu "Ten skrypt może zawierać zarówno funkcje samowywołujące, jak i funkcje XXX", gdzie XXX to funkcje, które nie są samowywołujące. Przychodzi mi na myśl "Static", ale czuję, że byłoby to niepoprawne ze względu na użycie metod statycznych w PHP, co jest czymś zupełnie innym. Czy ktoś ma jakieś pomysły? Dziękuję!


title: Rodzaje baz danych

text: Przeczytałem, że istnieją trzy główne typy baz danych * Transakcyjna (baza klient-serwer// baza danych OLTP) * system wspomagania decyzji (DSS) (baza danych hurtowni danych // baza danych // baza danych raportowania) * hybrydowy Jaki jest typ bazy danych brane pod uwagę w sieci społecznościowej, takiej jak Facebook czy Twitter? Domyślam się, że kategoria to: Transakcyjna > Klient-Serwer baza danych. Z książki: **Baza danych transakcyjnych to baza danych oparta na niewielkich zmianach w bazie danych (tj. małych transakcjach). Baza danych jest oparta na transakcjach. Innymi słowy, podstawową funkcją bazy danych jest dodawanie nowych danych, zmiana istniejących danych, usuwanie istniejących danych, a wszystko to odbywa się zazwyczaj w bardzo małych fragmentach, takich jak pojedyncze rekordy.** Ale, jak powiedziałem, nie jestem pewien.


title: Jak testować jednostkowo brakujący przypadek w instrukcji switch, w której wszystkie przypadki są prawdziwe?

text: Często używam typów enum w moim kodzie z przełącznikiem, aby zastosować logikę do każdego typu. W takich przypadkach ważne jest, aby każdy `enum` miał zaimplementowany kod. Na przykład; public enum eERROR { WYMAGANE, ZDUPLIKOWANE, NIEZNANE, BRAKUJĄCA_WARTOŚĆ } public void Error(eERROR pError) { switch (pError) { case eERROR.REQUIRED: // ...... return; przypadek eERROR.DUPLICATE: // ...... return; przypadek eERROR.MISSING_VALUE: // ...... return; przypadek eERROR.UNKNOWN: // ...... return; } throw new InvalidArgumentException("Nieobsługiwany typ błędu"); } Na dole dodałem wyjątek jako ostatnią deskę ratunku, sprawdź czy programista pamiętał o dodaniu nowych typów `enum` do instrukcji `switch`. Jeśli do „eERROR” zostanie dodany nowy typ, wyjątek _może_ zostać zgłoszony, jeśli kod nie zostanie zaktualizowany. Oto mój problem. Powyższy kod generuje pokrycie testów jednostkowych tylko na poziomie **99%**, ponieważ nie mogę wywołać wyjątku. Mógłbym dodać ogólne „nieobsługiwane” do „eERROR” i wywołać „Error(eERROR.unhandled)” tylko po to, by uzyskać **100%** pokrycia, ale to jest jak hack, aby rozwiązać coś, co nie jest problemem tylko po to, aby uzyskać pełne pokrycie. Mógłbym usunąć linkę, ale wtedy nie mam kontroli bezpieczeństwa. Dlaczego _99%_ stanowi problem? ponieważ baza kodu jest tak duża, że żadna niepokryta metoda nie przenosi pokrycia do _98%_. Więc zawsze widzę _99%_ i nie wiem, czy przegapiłem jedną czy dwie metody. Jak mogę przepisać `Error()`, aby wszystkie nowo dodane wyliczenia, które nie zostały dodane do przełącznika, zostały w jakiś sposób przechwycone przez programistę, a także objęte testami. Czy można to zrobić bez dodawania fikcyjnego wyliczenia?


title: Jak radzić sobie z Wywiadami, w których brakuje HR?

text: Sytuacja: osoba X, która ma już pracę na pełen etat, aplikuje do firmy A. Pieniądze są dobre w firmie A, ale prawdziwym powodem, dla którego X złożył wniosek, jest to, że praca w firmie A naprawdę ekscytuje X. Następnie ktoś z działu technicznego . z A dzwoni do X, daje jakieś zadanie i przeprowadza rozmowę techniczną przez telefon. X jak dotąd radzi sobie w tym wszystkim bardzo dobrze. Na koniec X pyta technika z A „Co dalej?” Facet mówi, że skontaktujemy się z tobą za 3-4 dni, a potem nie dzwoni w ciągu następnych 3-4 dni. X jest zdezorientowany. Ma mail-id technika, ale nie jest pewien, czy powinien zapytać – to w końcu nie jest HR. W rzeczywistości HR nigdy nie było nigdzie w tym procesie. Co on powinien zrobić? **My Take** : Nie wysyłaj poczty. Masz już pracę na pełen etat, a to pokazuje desperację. **Problem** : To nie ja, a ludzie mówią mi, że niektóre firmy czekają na powrót kandydata tylko po to, aby dokładnie sprawdzić poziom zainteresowania. * * * **Aktualizacja** Wysyłanie wiadomości do zespołu inżynierów okazało się bardzo przydatne, przeprosili za to, że byli zajęci, a teraz dowiaduję się, że kolejna runda jest na początku stycznia.


title: Co jest ważniejsze w hierarchii promocji kodu aplikacji sieci Web? środowisko produkcyjne do podobieństwa repo czy propagacji jednokierunkowej?

text: Załóżmy, że masz hierarchię promocji kodu składającą się z kilku środowisk, z których dwa to rozwojowe (dev) i produkcyjne (prod). Załóżmy, że masz również aplikację internetową, w której ważne (ale nie kontrolowane przez programistę) pliki są tworzone (i być może zmieniane) w środowisku produkcyjnym. Powiedzmy, że Ty (lub ktoś nad Tobą) zdecydowałeś, że pliki, które są kontrolowane/tworzone/zmieniane/usuwane w środowisku produkcyjnym, muszą trafić do repozytorium. Które z poniższych dwóch zestawów praktyk/podejść uważasz za najlepsze: 1. Zatwierdzanie tych nieopracowanych modyfikacji plików dokonanych w środowisku produkcyjnym, tak aby repozytorium przypominało środowisko produkcyjne tak blisko i tak często, jak to możliwe. 2. Generalnie ignorowanie zmian w nierozwiniętym środowisku produkcyjnym, ufanie w tworzenie kopii zapasowych w celu przywrócenia środowiska produkcyjnego w przypadku jego uszkodzenia i zachowanie postanowienia, aby uniknąć przepychania rozwoju przez hierarchię promocji w odwrotnym kierunku (unikanie przepychania się od producenta do dewelopera) , zatwierdzając tylko pliki znalezione w środowisku produkcyjnym, jeśli były absolutnie niezbędne w innych środowiskach do rozwoju. A więc 1 lub 2 i dlaczego? PS - Obecnie jestem nieco skłaniany do utrzymania środowiska produkcyjnego na podobieństwo repozytorium (opcja 1), ale mam otwarty umysł i zaakceptuję odpowiedź wspierającą oba.


title: Pytanie o modelowanie za pomocą MVC (wzorzec, a nie rzeczy MS / nie web)

text: Pracuję nad aplikacją, w której chcę zastosować wzorzec MVC, ale natknąłem się na punkt decyzji projektowych, z którym mógłbym skorzystać. Moja aplikacja będzie dotyczyć projektowania maszyn państwowych. Obecnie model MVC zawiera informacje o stanach maszyny, wejściach, wyjściach itp. Widok pokaże schemat maszyny, graficznie pozwalając użytkownikowi dodawać nowe stany, ustanawiać przejścia i układać stany w przyjemny układ, między innymi. Chciałbym przechowywać część stanu diagramu (np. pozycje stanu x i y), gdy informacje o maszynie są przechowywane w celu późniejszego pobrania, i zastanawiam się, jak najlepiej w tym celu zorganizować model (modele?). Wygląda na to, że ta informacja interfejsu użytkownika jest bardziej związana z widokiem niż z modelem maszyny stanu, więc pomyślałem, że model drugorzędny może być w porządku, ale niechętnie podążam tą drogą ze względu na dodatkową złożoność. Dodanie tych informacji do obecnego modelu również nie wydaje się właściwą drogą. To jest mój pierwszy raz, kiedy używam wzorca MVC, więc wciąż się zastanawiam. Każdy wkład byłby mile widziany.


title: Alternatywny język skryptowy do Lua?

text: Chciałbym dodać obsługę skryptów do aplikacji, a przy wielu dostępnych językach skryptowych jestem trochę przytłoczony. Na początku myślałem o Pythonie, ale wydaje mi się, że Python jest trochę za duży jak na mój gust i aplikację (chociaż bardzo go lubię, moim zdaniem robi wiele rzeczy dobrze, a składnia jest czysta i prosta, szczególnie jeśli jesteś nie robi ciężkiego OOP). Bardzo lubię też Lispy. Podoba mi się schemat i jest to idealny język rozszerzeń - przynajmniej pod pewnymi względami, ale chciałbym zachować składnię bardziej konserwatywną. Pamiętam, że słyszałem wiele pozytywnych rzeczy o Lua i rzeczywiście Lua wydaje się dobrą możliwością. Niestety jest jedna rzecz, która naprawdę mnie „wyłącza”: Jest to słowo kluczowe `local` dla lokalnego wiązania. To jest naprawdę brzydkie w moim guście i szczerze mówiąc nie do końca rozumiem, dlaczego języki są nadal projektowane w ten sposób iw istocie wiedząc o „lokalnym”. Moim zdaniem jest to również poważna wada JavaScriptu i wydaje mi się, że wszystko sprowadza się do złego projektowania języka. Moim głównym zmartwieniem jest to, że użytkownik może po prostu nadpisać funkcję z jej/jego funkcji po prostu pomijając `local`. Ale potem Lua robi wiele rzeczy dobrze, rozmiar, szybkość i jest zaskakująco schematyczna. Jednak naprawdę obawiam się, że nie nadaje się dla nie-programistów, którzy nie mają poczucia zakresu. * Jakieś alternatywy na horyzoncie? * Czy zhakowanie Luacore w celu ustawienia lokalnego jako domyślnego może być opcją? Źródła Lua wydają się być całkiem przyzwoite i modułowe, więc byłby to ciekawy projekt ;)


title: Czy można bezpiecznie założyć, że jeden kontroler będzie zawsze używał tylko jednego modelu podstawowego?

text: Tak więc projektuję ramy MVC. W imię utrzymania wszystkiego statycznie napisanego i niemagicznego, doszedłem do sporego problemu z "automatycznym" przekazywaniem modeli do kontrolera. Tak więc, tradycyjnie, zwykle nie widzę więcej niż jednego modelu używanego naraz w kontrolerze, jeśli chodzi o automatyczne wypełnianie. Na przykład weź ten samouczek. W kontrolerze jest taka metoda: [HttpPost] public ActionResult Create(Movie newMovie) { if (ModelState.IsValid) { db.AddToMovies(newMovie); db.ZapiszZmiany(); return RedirectToAction("Indeks"); } else { return View(newMovie); } } Moim zmartwieniem jest przekazanie modelu `Movie` do metody `Create`, która jest „magicznie” wypełniana wartościami FORM. W moim API powinno to być łatwo możliwe i wyglądałoby to mniej więcej tak przy routingu: var movie=router.Controller((context) => new MovieController(context)) .WithModel(() => new Movie()); movie.Handles("/movie/create").With((kontroler, model) => kontroler.Create(model)); Obawiam się, że znacznie trudniej jest mieć wiele modeli ze względu na ograniczenia systemu typów C#. Oczywiście kontroler zawsze może ręcznie tworzyć modele z wartości FORM itp., ale nie jest to aż tak ładne. Tak więc moje pytanie: czy często jest coś takiego jak „Foo (model filmu)” i „Bar (model jakiejś klasy)” w tej samej klasie kontrolera? Czy próba wsparcia takiego scenariusza to dla mnie dobry pomysł, czy jest to tylko objaw umieszczania zbyt dużej ilości niepowiązanej logiki w jednym kontrolerze? Uwaga: jeśli jesteś zaniepokojony tym, jak ten płynny interfejs API jest w ogóle możliwy, odpowiedzią są delegaci generyczni .. wiele i wiele delegatów ogólnych :) (ale jak dotąd bardzo mało refleksji)


title: Jak zaprojektować polecenie Delete za pomocą Behavior Driven Development?

text: Próbuję opracować polecenie Delete za pomocą BDD, które po prostu usunie użytkownika z bazy danych, mając jako parametr user_id. Jakie mogą być możliwe testy behawioralne, które skłonią mnie do napisania odpowiedniej implementacji polecenia?


title: Pisanie kodu OOPS w języku niezorientowanym obiektowo

text: Czytałem jakiś artykuł w Internecie przygotowując się do rozmowy kwalifikacyjnej i znalazłem poniżej oświadczenie- > Pisanie kodu zorientowanego obiektowo, nawet w języku nie zorientowanym obiektowo? Czy to stwierdzenie jest prawdziwe? Czy ktoś może podać przykład uzasadniający powyższe stwierdzenie, jeśli ktoś zadał mi to pytanie w wywiadzie. A kiedy piszemy kod obiektowy w języku niezorientowanym obiektowo? Pracowałem głównie w Javie. Więc każdy przykład odpowiadający temu będzie pomocny. Z góry dziękuję.


title: Czy rynek narzędzi do rozwoju/produkcji na małą skalę jest tak trudny?

text: Zastanawiałem się, czy jest ekonomiczne uzasadnienie rozwoju i marketingu małego narzędzia (samodzielnego czy raczej wtyczki)? Oczywiście załóżmy, że narzędzie rzeczywiście rozwiązuje realny problem z procesu produkcyjnego. Mówiąc krótko, mam na myśli aplikację, która może zostać napisana przez 1-2 programistów w ciągu 2 lat. Czy znasz jakieś współczesne historie sukcesu? Mam dwie spostrzeżenia, które mnie zastanawiają: 1. W każdym razie odwracam się, ludzie proszą o darmowe i najlepiej open-source narzędzia. Nawet jeśli cena jest niska, a oprogramowanie jest warte swojej ceny, widzę dużą niechęć do wydawania jakichkolwiek pieniędzy na komercyjne oprogramowanie deweloperskie. Autor aplikacji prawdopodobnie musiałby założyć, że tylko bardzo mały procent wszystkich osób, które mogą uznać jego aplikację za przydatną, faktycznie ją kupi. 2. Widziałem kilka dobrych przykładów oprogramowania komercyjnego, które po pewnym czasie zaczęły oferować darmowe licencje. Najbardziej godnym uwagi przykładem był dla mnie gDEBugger z Graphic Remedy. Ostatnim razem, kiedy sprawdzałem, nie miał nawet żadnego godnego konkurenta (komercyjnego lub niekomercyjnego) na rynku debuggerów OpenGL. Nie mam pojęcia, co mogło ich do tego skłonić, poza słabą sprzedażą.


title: Czy powinienem rozwidlać się do większego przepisania, które wykorzystuje niewielką ilość oryginalnego kodu?

text: Piszę bibliotekę. Jest to całkowicie przepisana wersja innej, na moje potrzeby (głównie kompatybilność z PCL). Jednak interfejs API zostanie całkowicie przepisany, ponieważ będę musiał zmienić wiele rzeczy, aby zapewnić zgodność z PCL. Ponadto, ponieważ jest to przepisanie, nie będę mógł po prostu zacząć od biblioteki i po prostu zmieniać jej krok po kroku, jak zwykle widzę w przypadku forków. Próbowałem tego, ale to po prostu nie działało. Więc co powinienem zrobić? Czy powinienem tu rozwidleć, czy powinienem utworzyć nową bibliotekę?


title: Wdrożyć projekt PHP bez wydawania kodu źródłowego?

text: Zajmuję się tworzeniem szeregu rozwiązań internetowych opartych na oprogramowaniu. Problem polega jednak na tym, że dla niektórych klientów musimy wdrażać aplikacje w ich lokalnym intranecie. W takiej sytuacji muszę trzymać się Javy jako języka programowania, ponieważ nie mogę zdradzić kodu źródłowego projektu. Teraz, aby dotrzeć do większej liczby konsumentów, umieszczamy te rozwiązania online. Biorąc pod uwagę fakt, że hosting Java jest droższy niż PHP, nie pozostaje nam nic innego, jak ponownie opracować całe rozwiązanie w PHP. W ten sposób otrzymujemy dwie wersje tego samego rozwiązania do konserwacji i aktualizacji na różnych platformach. Czy ktoś może wskazać nam jakieś dobre rozwiązanie, w którym możemy mieć rozwiązanie online, a także mieć wdrożoną wersję aplikacji, w której możemy wysłać aplikację bez jej kodu źródłowego, a jednocześnie potrzebujemy, aby aplikacja była kosztowna skuteczne z punktu widzenia hostingu?


title: Jak znaleźć zastosowania metod i klas w repozytoriach git

text: Dostaliśmy trochę kodu w repozytorium git, które jest używane w różnych projektach (z różnymi repozytoriami git), problem polega na tym, że mamy teraz tak wiele różnych projektów, że trudno jest śledzić, które projekty zostaną dotknięte i jak nastąpi zmiana we współdzielonym moduł. Czy istnieje sposób na znalezienie użycia klas i metod w różnych repozytoriach git? Albo kogo byś zarządzał taką architekturą?


title: Czy można przetasować drużynę pomiędzy sprintem?

text: Pracujemy nad frameworkiem scrum. Teraz dochodzi do sytuacji, że pomiędzy sprintami musimy przetasować 2-3 członków zespołu scrumowego. Czy można przetasować członków drużyny sprintu pomiędzy sprintami? Jakie są potencjalne wady takiego postępowania?


title: Migracja projektów internetowych z Javy do PHP

text: W naszym miejscu pracy po godzinach kodowania, testowania i kontroli jakości z powodzeniem dodaliśmy kilka narzędzi programowych do naszej linii produktów. Specjalizujemy się w rozwiązaniach opartych na oprogramowaniu internetowym, więc aby dotrzeć do większej liczby użytkowników, rozważamy teraz udostępnienie naszych opracowanych rozwiązań online w zakresie hostingu i zapewnienia wszystkim naszym klientom dostępu online do ich produktów. Ale to, co staje na naszej drodze, to to, że opracowaliśmy wszystkie te rozwiązania w Javie i w porównaniu do PHP hosting Java jest bardzo drogi. Dlatego planujemy teraz migrację wszystkich tych rozwiązań do PHP, zachowując jednocześnie ich odpowiednik w Javie. Jak powinniśmy zacząć z tymi zadaniami migracji? Używaliśmy AJAX we wszystkich naszych rozwiązaniach opartych na Javie. Specyfikacja techniczna to 1. Front-endowe strony internetowe w JSP 2. Back-endowy serwer w Javie przy użyciu Apache Struts2 3. Baza danych w MySQL 4. Generowanie raportów PDF przy użyciu iText PDF lib. dla Java NB: Zaczęliśmy trochę od Code Igniter Framework w PHP.


title: Ramy Java

text: Chciałbym tylko zapytać, jakich frameworków Java warto się nauczyć, szczególnie jeśli chodzi o aplikacje internetowe, ale inne frameworki też są mile widziane. Czy mógłbyś podać: * Krzywa uczenia się * Dostępność zasobów * Wydajność tego frameworka * Czy poleciłbyś go, czy nie Chcę studiować frameworki w wolnym czasie. Jeśli nie jest to zbyt trudne dzięki tym, którzy odpowiedzą! Jeśli jest zbyt obszerny: co powiesz na aplikacje internetowe? Czy powinienem nauczyć się Springa czy Struts 2? iBatis czy hibernacja? Takie rzeczy Mimo to, jeśli jest rozległe: jakie frameworki poleciłbyś tam? Naprawdę. Byle co. Chcę się uczyć i jestem teraz używany jako facet od JEE, więc jeśli jest to związane z aplikacją internetową, wezmę to jako bonus.


title: Czy możesz stworzyć całą stronę internetową za pomocą JavaScript?

text: Przyjrzałem się celom Java-script i ma on na celu `zapewnienie i udoskonalenie interfejsu użytkownika oraz dynamicznych stron internetowych`. Próbuję dostać się do Business Development Web i uczę się JavaScript. Ale niestety nigdy nie widziałem całej witryny zaimplementowanej w skrypcie Java. JavaScript jest zwykle używany tylko w reklamach. Ludzie używają takich rzeczy jak PHP lub ASP .NET (i C#) do poważnego tworzenia stron internetowych. Czy więc nauka JavaScriptu pozwoli mi na poważnie tworzyć **Dynamiczne Strony Internetowe** i czy są jakieś dobre strony internetowe z JavaScriptem. Czy Javascript to dobry wybór do tworzenia stron internetowych? Czy to w ogóle możliwe?


title: Jak utrzymać stałą pewność siebie podczas kodowania?

text: Wraz ze wzrostem liczby błędów w kodzie, liczba ta nie tylko obniża jakość kodu, ale także wpływa na sposób myślenia programistów. Pewność siebie deweloperów spada, gdy sprawy nie układają się dobrze. Jeśli pewność siebie nie jest właściwa, sprawy łatwiej stają się bałaganem. Jak utrzymujecie pewność siebie w takich sytuacjach?


title: Jakiego algorytmu powinienem użyć, aby znaleźć najkrótszą ścieżkę na tym wykresie?

text: Mam wykres z około miliardem wierzchołków, z których każdy jest losowo połączony z około 100 innymi wierzchołkami. Chcę znaleźć **długość** najkrótszej ścieżki między dwoma punktami. Nie dbam o to, jaka ścieżka została faktycznie użyta. Uwagi: * Czasami krawędzie zostaną odcięte lub dodane. Zdarza się to około 500 razy rzadziej niż wyszukiwania. W porządku jest również grupowanie zmian krawędzi, jeśli pozwala to uzyskać lepszą wydajność. * Mogę _mogę_ wstępnie przetworzyć wykres. * Jeśli zajmuje to więcej niż 6 kroków, możesz po prostu wrócić z nieskończonością. * Dopuszczalne jest pomylenie się w 0,01% przypadków, ale tylko w przypadku zwracania zbyt długiej długości. * Wszystkie krawędzie mają długość 1. * Wszystkie krawędzie są dwukierunkowe. Szukam algorytmu. Pseudokod, angielskie opisy i rzeczywisty kod są świetne. Mógłbym użyć A*, ale wydaje się, że jest to zoptymalizowane pod kątem wyszukiwania ścieżek. Myślałem o użyciu algorytmu Dijkstry, ale ma on krok, który wymaga ustawienia atrybutu najkrótszej ścieżki każdego wierzchołka na nieskończoność _(Jeśli zastanawiasz się nad przypadkiem użycia, jest to dla Underhanded C Contest.)_


title: Czym jest przełom w kontekście przetwarzania obrazu?

text: Jestem nowy w przetwarzaniu obrazów przy użyciu Pythona. Teraz uczę się OpenCV i modułu Mahotas w Pythonie. Wiele funkcji w tych modułach jest związanych z przełomem obrazu. Nie wiem, co oznacza przełom dla obrazu. Oto przykład z dokumentacji OpenCV: http://docs.opencv.org/search.html?q=watershed&check_keywords=yes&area=default


title: Konwencje nazewnictwa używane dla zmiennych i funkcji w C

text: Podczas kodowania dużego projektu w C natknąłem się na problem. Jeśli będę pisał więcej kodu, to przyjdzie czas, kiedy będzie mi trudno go uporządkować. Chodzi mi o to, że nazewnictwo funkcji i zmiennych dla różnych części programu może wydawać się pomieszane. Zastanawiałem się więc, czy istnieją przydatne konwencje nazewnictwa, których mogę użyć dla zmiennych i funkcji C? Większość języków sugeruje konwencję nazewnictwa. Ale w przypadku C jedyną rzeczą, którą do tej pory przeczytałem, jest to, że nazwy powinny być opisowe dla czytelności kodu. EDYCJA: Przykłady kilku przykładów sugerowanych konwencji nazewnictwa: * PEP 8 w Pythonie * Samouczek Java Czytałem kilka innych konwencji nazewnictwa dla javy, ale nie pamiętałem gdzie.


title: Jak to wszystko może zmieścić się w 64kb?

text: Więc jestem tutaj na asemble 2011 i tam było grane demo: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded To tylko jeden plik, tak jest napisane w regulaminie. Więc powtarzam, jak udało im się to zmieścić w tak małym pliku?


title: Szukasz dużej kolekcji plików XML

text: Hej, piszę program, który muszę przetestować z tysiącami plików XML - jakiś pomysł, gdzie mogę go zdobyć?


title: Jaka jest klauzula w umowie z pracownikiem, która mówi, że jest właścicielem całego twojego kodu?

text: Patrzę na moją umowę z pracownikiem i nie mogę się domyślić, gdzie może powiedzieć, że jest właścicielem całego kodu, który piszę, czy to w pracy, czy w domu. Jakieś przykłady tego, jakie może być sformułowanie?


title: Pasywność wywołana przepełnieniem stosu – jak sobie z tym poradzić?

text: Po tym, jak _naprawdę_ nie pracowałem przez jakiś czas nad moim ulubionym projektem, odkryłem Stackoverflow i przyglądając mu się intensywniej, byłem zdumiony. Jestem trochę perfekcjonistą, więc kiedy znalazłem tu gadkę, która uwydatnia wiele błędów, które popełniłem, najpierw chciałem wszystko naprawić. Jest to jednak projekt **zwierzęcy** z jakiegoś powodu: jestem samoukiem i studiuję psychologię, więc umiejętności programowania nigdy nie mogą stać się priorytetem (choć często to pomaga, nawet w tej dziedzinie). Pojawiły się problemy * liczne problemy z bezpieczeństwem (np. ominęły mnie zapobieganie CSRF i bcrypt) * brak orientacji obiektowej (przynajmniej część PHP, część JS _głównie_ jest) * brak frameworka PHP, więc wiele z moich majsterkowiczów na często rozwiązywanych komponentach (auth, ...) są albo złe, albo nieefektywne * **naprawdę** słabe użycie MySQL (brak przygotowanych instrukcji, rozszerzenie mysql, słyszeliśmy o ustawianiu odpowiednich indeksów dwa dni temu) * używanie mootools, mimo że wydaje się JQuery być _modnym_ , więc prawdopodobnie zawsze będzie lepsza integracja z usługami, z których chciałbym korzystać (np. Wizualizacja google). Tak więc moje wywołane przez SO szaleństwo zamieniło się w **pasywność**. Nie mogę (wkrótce) wszystkiego zrobić w dość niewielkiej ilości wolnego czasu, który mogę poświęcić na pracę nad moim projektem. Mogę zostawić niektóre kwestie z czystym sumieniem (szybkie rzeczy: niedokończony i nieopublikowany projekt nigdy nie stanie się popularny, prawda?). Nie ma jednak czystego sumienia bez dobrego zabezpieczenia i jeśli nie użyję frameworka do _auth_ i innych skomplikowanych rzeczy, będę żałował, że muszę to zrobić sam. Jedną z oczywistych odpowiedzi byłoby prawdopodobnie przejście na open source, ale myślę, że projekt musiałby stać się bardziej imponujący, zanim inni się do niego zobowiążą. Nie stać mnie też na zatrudnienie kogoś. Uważam jednak, że projekt zasługuje na pracę. Jak mam sobie z tym poradzić **mimo to**? Jaka jest najlepsza praktyka dla osób mało praktykujących? * * * Nie mogłem edytować mojego pytania, ponieważ zostało przeniesione. Podkreśliłabym, że mam działający produkt, ale jak wiele domowych projektów, _nigdy się nie skończy_ , dlatego też chciałem sobie ułatwić życie w przyszłości. Niektórzy z was błędnie odgadli mój problem jako bojący się zacząć, ale nie mogłem tutaj zareagować, przepraszam. Jestem zaskoczony, że nikt nie wydaje się myśleć, że korzystanie z frameworka byłoby dobrym sposobem na zwolnienie się z niektórych obowiązków (takich jak wdrożenie modułu autoryzacji zgodnego z tymi specyfikacjami. A może po prostu zbyt trudno jest zwrócić się do czegoś takiego jak MVC, kiedy wcześniej pracowałeś zorientowany na procesy?


title: Automatyzacja kompilacji: czy zwykle używa się QMake w projektach innych niż Qt?

text: Tak więc planuję napisać bibliotekę C++ i chcę, aby była wieloplatformowa, a ponieważ ta biblioteka nie będzie zajmować się interfejsem użytkownika i chcę, aby miała jak najmniej zależności, nie będę używał Qt (właściwie Qt tak naprawdę nie pomoże mi osiągnąć tego, czego chcę, planuję używać tylko STL i Boost). Teraz, jeśli chodzi o budowanie wieloplatformowego projektu, bardzo lubię QMake, ponieważ jest niezwykle łatwy w użyciu i mam z nim doświadczenie. Słyszałem też dobre rzeczy o CMake, chociaż naprawdę wątpię, że jest tak łatwy w użyciu jak QMake. W każdym razie, oto moje pytanie: Czy powinienem trzymać się narzędzia do automatyzacji kompilacji, które znam, czy QMake jest po prostu poza kontekstem dla projektu innego niż Qt? Czy powinienem potraktować to jako okazję do nauki CMake? A może jest lepsza alternatywa dla tych dwóch?


title: Jakie informacje powinny znajdować się w pliku README.md na githubie?

text: Jakich informacji spodziewałbyś się zobaczyć w github README? Czy wszystko powinno znaleźć się w README? tj. * Wprowadzenie * Instalacja * Wersje * Podręcznik użytkownika * Implementacja * Testowanie * Zasoby pokrewne A może powinieneś umieścić pewne rzeczy w README (Wprowadzenie, Instalacja, Wersje), a pozostałe informacje najlepiej umieścić na wiki Github?


title: Zimne, neutralne podejście do języków programowania – znak pro developera czy nie

text: Profesjonalny programista Zed Shaw mówi tak: > Który język programowania, którego się uczysz i używasz, nie ma znaczenia. Nie daj się wciągnąć w religię otaczającą języki programowania, ponieważ to tylko > oślepi cię na ich prawdziwy cel bycia narzędziem do robienia > interesujących rzeczy. Czy bycie neutralnym wobec języków jest oznaką dobrego/pro developera? Widzimy uwielbienie i święte wojny, jaki język jest lepszy. Dobry programista nie dba o narzędzia, myśli tylko o tym, jakie oprogramowanie pisze (tak jak pisarz nie dba o pióro, którego używa - myśli o treści KSIĄŻKI) 1. Czy programista powinien rozwinąć całkowitą ignorancję w kwestii języka jako narzędzia, którego używa? 2. **czy to oznaka pro developera** , jeśli nie dba o to, jakiego języka użyć?


title: Jak stworzyć aplikację internetową, która "interakcja" z e-mailem?

text: Mam hosta internetowego, który obsługuje cPanel i adresy e-mail. Interesuje mnie tworzenie aplikacji internetowej, która sprawdza wiadomości e-mail, odczytuje ich zawartość, a następnie coś z nimi robi, na przykład interakcję z bazą danych. Na przykład Bob z adresem e-mail bob@gmail.com łączy swój adres e-mail ze swoim kontem w mojej aplikacji internetowej. Wysyła e-mail na adres storethis@webapp.com z tematem „Lista zakupów” i wiadomością „Jabłka, banany, kiwi, mleko” wraz z załącznikiem. Aplikacja sieci Web odbiera tę wiadomość e-mail, a następnie analizuje zawartość wiadomości e-mail i przechowuje te dane w bazie danych. Jak mogę to zaimplementować?


title: Jak port "nasłuchuje", ciągnie lub pcha?

text: Kiedy piszesz kod do nasłuchiwania z portu, na przykład 80, co dzieje się pod maską? Czy metoda, której używa system operacyjny do nasłuchiwania, to ciągnięcie czy wypychanie? Innymi słowy, czy system operacyjny sprawdza na przykład ten port co x milisekund? Po prostu tego nie rozumiem. Im więcej o tym myślę, tym bardziej wydaje mi się, że to nie może być nic innego niż ciągnięcie. Mam na myśli, że nawet jeśli system operacyjny ustawi funkcję zwrotną, nadal coś powinno zrozumieć, że nadeszły nowe informacje, aby wywołać tę funkcję zwrotną. To **coś** nadal powinno używać ściągania, aby zrozumieć nadejście nowych danych. Jak nasłuchuje port?


title: Dlaczego wiele języków programowania ma tylko 2 struktury danych: tablice i skróty?

text: Wiele języków programowania ma tylko te 2 struktury, a nawet niektóre języki, które mają więcej struktur, nadal zapewniają tylko specjalną składnię dla tych 2; zwykle `[]` i `{}`. Dlaczego to? Czy jest coś szczególnego w tych typach danych, co jest niezbędne dla kompletności języka?


title: Struktura programu dla komórek tabeli reprezentujących obiekty

text: Mam więc program z obiektami "cue", z których każdy ma swoją własną komórkę tabeli. Chodzi o to, że komórki tabeli mają paski ładowania, które reprezentują postęp cue. Pojawia się więc następujące pytanie: Jak powinienem ustrukturyzować program? Czy obiekty reprezentujące Cue przechowują wskaźniki do komórek tabeli, umożliwiając im aktualizację samych komórek tabeli, czy też inna struktura programu działałaby lepiej. Przepraszam, jeśli to pytanie jest zbyt ogólne, ale tak naprawdę nie mogłem znaleźć niczego na ten temat, gdy szukałem w google i na stronie internetowej. Jestem dość nowy w programowaniu iOS, a struktura moich programów już staje się chaotyczna. Sugestia, którą dałem, była tylko moim początkowym instynktem, ale prawdopodobnie jest błędna...


title: Bez ostrzeżeń kod celu C

text: Obecnie tworzę swoją pierwszą aplikację na iPhone'a w Objective C i otrzymuję wiele ostrzeżeń, ponieważ w wielu miejscach wykorzystałem fakt, że Objective C jest językiem dynamicznie typowanym. Otrzymuję dużo "klasy" może nie odpowiadać na ostrzeżenia "-wiadomość:". Czy powinienem starać się usunąć wszystkie te ostrzeżenia? Jeśli tak, to jaka jest korzyść z posiadania do dyspozycji dynamicznego języka?


title: Skąd mieć pewność, że nie wdrażamy mikrozarządzania w obszarze wytwarzania oprogramowania?

text: Gdy w tym pytaniu otrzymałem informację zwrotną od programistów na temat metodologii scrum, czy zmienia ona aktywnych programistów w programistów pasywnych, czy nie, natknąłem się na słowo **mikrozarządzanie**. Wikipedia nie wyjaśnia jednak tego terminu w kontekście konkretnych i namacalnych przykładów, a to może skutkować różnymi interpretacjami mikrozarządzania. Czy ktoś może wskazać na jakieś dobrze znane problemy mikrozarządcze w świecie rozwoju (oczywiście z odniesieniem)? Jakie praktyki można uznać za mikrozarządcze? Jak możemy się upewnić, że nie wdrażamy mikrozarządzania w naszym środowisku pracy?


title: Tablica zadań Scrum z etapem QA

text: Czytałem ten artykuł Mike'a Cohna o tablicach zadań Scrum. Jedno z zapytań, które mam, dotyczy tego, jak to pasuje do przepływu pracy, w którym jest etap kontroli jakości wykonywany przez testerów, którzy nie są programistami. Wydaje się, że wielu zadań nie da się łatwo przeprowadzić w odosobnieniu. Praktyczną alternatywą może być to, że proces „Weryfikacja” powinien być przeprowadzony przez innego programistę w zespole, a następnie mieć dodatkowy etap po WYKONANIU do kontroli jakości całej historii (prawdopodobnie po wdrożeniu do środowiska etapowego/testowego). Czy to wydaje się słuszne?


title: „Komentarz do linii działa jak nowa linia”

text: Czytam specyfikację języka Go. Sekcja o komentarzach stwierdza: > Komentarze do linii zaczynają się od sekwencji znaków `//` i kończą > na końcu linii. Komentarz linii zachowuje się jak znak nowej linii. Jaki jest sens określania, że komentarz linii zachowuje się jak znak nowej linii? Czy komentarze do wierszy nie mogą po prostu zachowywać się jak puste ciągi? Linie (oprócz ostatniej) i tak kończą się znakiem nowej linii, więc każda linia (oprócz ostatniej) będzie zachowywać się jak dwie kolejne linie. Jeśli ostatnia linia zawiera komentarz do linii, może również bezpiecznie zachowywać się jak pusty łańcuch.


title: Wyjaśnij nietechnicznemu menedżerowi, że wybrane przez niego narzędzie nie jest odpowiednie

text: Mój nietechniczny menedżer właśnie zapłacił za licencję na korzystanie z narzędzia, które służy do wybierania wzmianek o Twojej marce na blogach, w „mediach społecznościowych”, komentarzach itp. i oceniania nastrojów (pozytywnych, neutralnych, negatywnych) wpisu. To, co chce, żebym zrobił, to użycie go do wykonania zadania, które można osiągnąć tylko przy określonym poziomie przetwarzania języka naturalnego, a zatem pokazuje niepowiązane wyniki dla dowolnego zapytania, które możesz wypróbować. Chcę mu wytłumaczyć, że to narzędzie jest przeznaczone do zadania X, a to, co próbujemy zrobić, to zadanie Y. Y nie może być modelowane jako X. A cały sukces narzędzia, które przytacza jako dowód, jest dowodem na X który nie jest Y.


title: Jakie jest znaczenie ładowania początkowego w tworzeniu oprogramowania?

text: W niektórych artykułach i książkach, które czytam, od czasu do czasu widzę termin „Bootstrapping”. Na przykład widzę to zdanie "Bootstrapping X.JS" w dokumencie angular js: http://docs.angularjs.org/tutorial/step_00 > Automatyczne uruchamianie aplikacji AngularJS przy użyciu dyrektywy `ngApp` jest > bardzo łatwe i odpowiednie w większości przypadków . W zaawansowanych przypadkach, takich jak używanie > programów ładujących skrypty, możesz użyć imperatywnego/ręcznego sposobu ładowania aplikacji... Co oznacza ładowanie początkowe w tworzeniu oprogramowania?


title: Bezpieczeństwo serwera i MySQL dla aplikacji Java/JDBC?

text: Mam zewnętrzną aplikację java, która używa JDBC do osiągnięcia bazy danych MySQL. Będzie on używany przez wiele osób i będzie przechowywać wszystkie dane ludzi na tym samym serwerze / MySQL. Ponieważ założę się, że ludzie będą mogli złamać .jar i zobaczyć źródło, oczekuję, że będą mogli oszukiwać program, edytując go i uzyskując informacje od innych użytkowników, nawet jeśli nie mogą dotrzeć do tych informacji. Czy istnieje standardowy sposób ochrony serwera, aby ludzie mogli uzyskać dostęp tylko do informacji, z którymi połączone jest ich konto, nawet jeśli wspomniane osoby są w stanie zmienić źródło? Pozdrawiam, Skarion


title: Czy powinienem używać natywnego frameworka junit dla systemu Android?

text: Czy ktoś może podać powód (lub listę powodów), dla których nie używa się natywnego środowiska Android junit, ale samodzielnego, takiego jak robolectric lub coś w tym rodzaju? Po prostu próbuję zrozumieć, jakich ram się nauczyć.


title: Usługa weryfikacji adresu dla publicznej witryny internetowej

text: Biorąc pod uwagę następujący scenariusz: * Istnieje ogólnodostępna strona internetowa (z około 50-100 odwiedzających dziennie) * Odwiedzający rejestrują się w usługach oferowanych przez firmę, która jest właścicielem strony internetowej * Odwiedzający mają tendencję do podawania błędnych informacji dotyczących adresu i numeru telefonu, co spowalnia proces ich rejestracji, a co za tym idzie ich transakcje i ogólne zadowolenie z usług firmy * Generalnie walidacja adresu dodaje wartości do strony internetowej szukam usługi za rozsądną cenę, która posiada: * aktualny kod pocztowy i bazę adresową * Łatwy do zintegrowania API * Sprawdzanie poprawności adresu * Wszystko to za rozsądną cenę Szukam konkretnie w Wielkiej Brytanii. To, co do tej pory znalazłem, to firmy oferujące te usługi za absurdalnie wysoką cenę. Rozważamy również zakup bazy PAF od RoyalMail i wdrożenie takiej usługi dla siebie. Każda pomoc, sugestie są bardzo mile widziane iz góry dziękuję!


title: Jakie są typowe błędy, gdy jesteś dobrym programistą w C i PHP i zaczynasz kodować w Javie? Jakie są dobre wskazówki dotyczące zmiany?

text: Jakich aspektów Javy najtrudniej nauczyć się z takiego środowiska? Jakie typowe błędy popełniają ludzie? Jakie są najlepsze triki pozwalające zaoszczędzić czas i zwiększyć produktywność? Gdybyś miał pokój z programistami C/PHP, którzy mieli rozpocząć programowanie w Javie, jaką radę byś udzielił? Oto moja dotychczasowa lista tematów (w przypadkowej kolejności): * Użyj jodatime zamiast standardowej biblioteki, a także, co mniej ważne, biblioteki guava. * Tablice są indeksowane przez zero * Podkreśliłbym również aspekty Javy przekazywania przez wartość/odwołanie oraz fakt, że > > String s1 = new String("test"); > String s2 = nowy String("test"); > if(s1 == s2) // będzie fałszywe > if(s1.equals(s2)) // będzie prawdziwe > * Przedstaw koncepcję wzorców projektowych i daj krótki przegląd. * Przedstaw Spring (będzie używany) i koncepcję wstrzykiwania zależności Czy jest coś oczywistego, czego mi brakuje.


title: Jakie są kroki na początku dużego projektu, kiedy wszystko, co mam, to wielki pomysł?

text: Jestem studentem inżynierii komputerowej. Myślałem o tym, jak poradzić sobie z dużym projektem. Jaki powinien być mój pierwszy krok, aby osiągnąć swój cel w bardziej efektywny i efektywny sposób? Kiedy wymyślam projekt, nie wiem, jak mam zacząć nad nim pracować. Wiele razy po prostu to ignoruję. Jednak nie chcę już dłużej ignorować moich pomysłów na projekty. Teraz proszę was wszystkich, czy ktoś może podzielić się swoimi doświadczeniami? Jak rozpocząć projekt, kiedy mam tylko pomysł?


title: Bramki płatności i RESTful API

text: Posiadam RESTful API, który oferuje funkcjonalność eCommerce. Jednym z obszarów, w którym mam problemy z podjęciem decyzji o prawidłowej implementacji, jest sposób przetwarzania płatności. Powiedzmy, że mam następujący identyfikator URI GET .../checkout/{id}/payment. Ten zasób zawiera szczegółowe informacje dla aplikacji klienta, jakie dane należy przesłać, aby dokonać płatności. Specyfika informacji w zasobie zależy od poniższych implementacji **Implementacja 1** Zasób zawiera podstawowe pola płatności do wypełnienia, takie jak numer karty, adres rozliczeniowy itp. Dane przesyłane są do API za pomocą POST.../ kasa/{id}/płatność. Następnie API wysyła żądanie do bramki płatniczej (np. paypal), czeka na odpowiedź, a następnie wysyła odpowiednią odpowiedź z powrotem do aplikacji klienckiej. **Implementacja 2** Zasób zawiera szczegółowe informacje o tym, jak przesłać żądanie bezpośrednio do bramki płatności (np. paypal). Klient przesyła płatność do bramki, czeka na odpowiedź, a następnie odsyła referencję płatności (zwykle zawsze dostarczaną przez bramkę płatności) z powrotem do API za pomocą POST .../checkout/{id}/payment. Problem, jaki mam, polega na tym, że oba mają zalety i wady. Implementacja 1 Powiedziałbym, że jest to metoda bardziej bezpieczna w przypadku awarii, ponieważ wszystko jest zawarte w jednym żądaniu do API. Interfejs API może następnie aktualizować tabele zaplecza po przetworzeniu płatności i zwracać klientowi status powodzenia lub niepowodzenia. Ponieważ interfejs API wysyła odpowiedź do bramy, wie, że otrzymana odpowiedź jest prawdziwa. Implementacja 2 uwalnia API od konieczności przetwarzania płatności, co jest świetne, ale wymaga od klienta złożenia dwóch żądań. Jeden do bramki płatności i jeden do API z referencją. Dodatkowo, jak mogę zweryfikować referencję płatności w interfejsie API bez wywoływania bramki? Nieuczciwy klient może odesłać dowolną referencję z powrotem do API, która następnie może zostać błędnie oznaczona jako opłacone. Chciałem tylko wyrzucić tam moje pomysły, ale jeśli ktoś ma naprawdę dobre rozwiązanie do implementacji usług internetowych Payment Gateway i RESTful API, byłoby świetnie. **AKTUALIZACJA** Właśnie pomyślałem o **Wdrożeniu 3**. Mogę właściwie stworzyć oddzielne mniejsze API do obsługi płatności. Działałoby to podobnie do implementacji 1, z wyjątkiem tego, że aplikacja kliencka nie wysyła postów do api.site.com/...., ale wysyła do gateway.site.com/... Daje mi to pewien stopień bezpieczeństwa, ponieważ Kontroluję kod na gateway.site.com i upewniam się, że api.site.com nie ugrzęzło w oczekiwaniu na odpowiedź dostawcy płatności. Następnie interfejs API bramy zasadniczo staje się klientem głównego interfejsu API i publikuje w nim szczegóły powodzenia płatności. Jakieś przemyślenia na ten temat?


title: Na co uważać pisząc kod na rozmowie kwalifikacyjnej?

text: Czytałem, że w wielu firmach podczas rozmowy kwalifikacyjnej trzeba pisać kod. Z jednej strony widzę, że warto poprosić o próbkę pracy. Z drugiej strony: jakiego rodzaju kodu oczekujesz, że zostanie napisany w 5 minut? A co, jeśli powiedzą mi „Napisz algorytm, który robi to i owo”, ale nie mogę wymyślić inteligentnego rozwiązania ani nawet napisać kodu, który nie działa semantycznie? Szczególnie interesuje mnie to pytanie, ponieważ nie mam tak dużego doświadczenia w programowaniu komercyjnym, 2 lata w niepełnym wymiarze godzin, rok w pełnym wymiarze godzin. (Ale interesuję się językami programowania od prawie 15 lat, chociaż zwykle byłem bardziej skoncentrowany na zabawie z językiem niż na pisaniu dużych aplikacji...) I faktycznie uważam, że moje umiejętności debugowania i rozwiązywania problemów są znacznie lepsze niż moje umiejętności kodowania. Patrząc wstecz czasami widzę siebie nie piszącego najpiękniejszego kodu, ale z drugiej strony często wymyślam rozwiązania trudnych problemów. I myślę, że jestem bardzo dobry w optymalizacji, naprawianiu, restrukturyzowaniu istniejącego kodu, ale mam problemy z pisaniem nowych aplikacji od podstaw. Projekt oprogramowania jest do bani... ;-) Dlatego nie czuję się komfortowo myśląc o tej sytuacji pisania kodu na rozmowie kwalifikacyjnej... Czego więc oczekują ankieterzy? Jakimi informacjami na temat pisania mojego kodu są zainteresowani?


title: Czy krótkie identyfikatory są złe?

text: Czy krótkie identyfikatory są złe? Jak koreluje długość identyfikatora ze zrozumieniem kodu? Jakie inne czynniki (oprócz zrozumienia kodu) mogą być brane pod uwagę, jeśli chodzi o nazewnictwo identyfikatorów? Aby utrzymać jakość odpowiedzi, pamiętaj, że jest już trochę badań na ten temat! **Edytuj** Ciekawe, że wszyscy albo uważają, że długość nie jest istotna, albo preferują większe identyfikatory, gdy oba podane przeze mnie linki wskazują, że duże identyfikatory są szkodliwe! **Zepsuty link** Poniższy link wskazywał na badanie na ten temat, ale teraz jest zepsuty, wydaje mi się, że nie mam przy sobie kopii artykułu i nie pamiętam, co to było. Zostawiam to tutaj na wypadek, gdyby ktoś inny się domyślił. * http://evergreen.loyola.edu/chm/www/Papers/SCP2009.pdf


title: Najlepsze praktyki: Ajax i skrypty po stronie serwera z procedurami składowanymi

text: Muszę przebudować starą, ogromną stronę internetową i prawdopodobnie przenieść wszystko do `ASP.NET` i `jQuery` i chciałbym poprosić o kilka sugestii i wskazówek. Właściwie strona używa: * `Ajax (strona klienta z prototype.js)` * `ASP (strona serwera skryptów vb)` * `SQL Server 2005` * `IIS 7 jako serwer WWW` Ta strona używa setek procedur przechowywanych i żądania są wykonywane przez `wywołanie ajax` i **tylko 1 strona ASP**, które zawierają duży `select case`. Krótko przykład: JAVASCRIPT + PROTOTYPE: var data = { action: 'NEWS', callback: 'doNews', param1: $('przykład_tekstu').wartość, ......: ..........}; AjaxGet(dane); // wykonaj wywołanie za pomocą innej funkcji + prototyp SERVER SIDE ASP: <% ...... select case request("Action") case "NEWS" With cmmDB .ActiveConnection = Conn .CommandText = "sp_NEWS_TO_CALL_for_example" .CommandType = adCmdStoredProc Ustaw par0DB = .CreateParameter("Param1", adVarchar, adParamInput,6) Ustaw par1DB = .CreateParameter(".....", adInteger, adParamInput) ' ........ ' może mieć więcej parametrów .Parametry .Append par0DB .Parameters.Append par1DB par0DB.Value = request("Param1") par1DB.Value = request(".....") set rs=cmmDB.execute RecodsetToJSON rs, jsa ' utwórz odpowiedź JSON używając sub End Z .... %> Jak widać, mam stronę `ASP`, która ma **dużo CASE** i ta strona **odpowiada na wszystkie żądania ajax** w witrynie. Moje pytanie brzmi: 1. Czy zamiast posiadania wielu „przypadków” można stworzyć dynamiczny kod „vb”, który analizuje żądanie „ajax” i dynamicznie tworzy wywołanie do pożądanego SP (również implementując parametry przekazywane przez JS)? 2. Jakie jest najlepsze podejście do radzenia sobie z takimi sytuacjami, wykorzystując zalety `.Net + protoype czy jQuery`? 3. Jak duże serwisy radzą sobie z taką sytuacją? Czy robią to, tworząc 1 stronę na żądanie? Z góry dziękuję za sugestię, wskazówki i wskazówki.


title: Alternatywy dla iteratorów foreach obejmujących ref i out

text: Próbuję stworzyć elastyczny system cząsteczek dla mojej gry XNA i mam następujące interfejsy: public interface IParticle : IUpdateable { bool Alive { get; } float Procent { get; } } interfejs publiczny IParticleEffect<T> gdzie T : IParticle { void Apply(GameTime time, ref T part); } public interface IParticleEmitter<T> : IUpdateable where T : IParticle { } public interface IParticleRenderer<T> : IDrawable where T : IParticle { } Ideą tego systemu jest to, że kod klienta musi pochodzić tylko z `IParticle`, a następnie utworzyć kompatybilna podklasa z `IParticleEmitter` i `IParticleRenderer`, a wszystko inne po prostu działa automagicznie za kulisami. (Właściwie jestem w trakcie pisania wszystkiego w tej chwili, ale dwa ostatnie miałyby dostępną abstrakcyjną klasę bazową.) W każdym razie, niektóre systemy cząstek lubią używać zmiennych struktur do celów optymalizacji i jest to całkowicie rozsądne. Mój system dostarcza tylko szkielet i jeśli klient zdecyduje, że "Hej, struktury są do zrobienia!", wtedy mój system powinien obsługiwać wszystko, co rzuca na niego kod klienta. Dlatego moja metoda `IParticleEffect.Apply()` pobiera cząstkę przez **ref** \-- taniej jest przekazać strukturę przez referencję niż ją skopiować. Niestety, przerywa się, gdy zaangażowane są kolekcje, ponieważ iterator foreach nie współpracuje dobrze z obiektami przekazanymi przez **ref** lub **out**. Eric Lippert wyjaśnia, dlaczego tutaj. Tak więc, teraz muszę podjąć decyzję projektową: 1. Całkowicie zignoruj struktury i zmień moje ograniczenie na `gdzie T: klasa, cząstka IP`. Potencjalnie szkodzi to przyszłym optymalizacjom, ale znacznie ułatwia pracę z kolekcjami. 2. Zmień wszystko, co używa `ICollection<T>` lub `IEnumerable<T>` na `IList<T>`, abym mógł ręcznie odpytywać za pomocą indeksatora. To czyni go potencjalnie bardziej wydajnym, ale kosztem korzystania z głębszego interfejsu (listy) do przechowywania moich obiektów. 3. Coś innego Mam nadzieję, że to pytanie nie jest zbyt „to zależy”, ale jestem ciekaw, jakie strategie mogę tutaj zastosować, aby działało tak, jak chcę. * * * **EDIT** : Zdałem sobie sprawę, że mogę również uwzględnić zmienną lokalną, taką jak: foreach (var cząstka w SomeParticleCollection) { var p = cząstka; JakiśEfekt.Zastosuj(ref p); } Jednak `p` nadal będzie skutkował jego kopiowaniem, co również nie jest idealne.


title: Kiedy należy używać operatora bitowego w wyrażeniu warunkowym?

text: Po pierwsze, trochę tła: jestem szkolonym nauczycielem informatyki i próbuję wprowadzić operatory logiczne Java do mojej klasy w 10. klasie. Mój nauczyciel-mentor spojrzał na przygotowany przeze mnie arkusz i skomentował, że mogę pozwolić im użyć tylko jednego & lub | na oznaczenie operatorów, ponieważ „robią to samo”. Zdaję sobie sprawę z różnicy między & a &&. & jest operatorem bitowym przeznaczonym do użycia między liczbami całkowitymi, do wykonywania "majstrowania bitowego". && jest operatorem warunkowym przeznaczonym do użycia między wartościami boolowskimi. Aby udowodnić, że operatory te nie zawsze „robią to samo”, postanowiłem znaleźć przykład, w którym użycie bitowej wartości między wartościami boolowskimi prowadziłoby do błędu. Znalazłem ten przykład logiczny bitowo; warunkowy logiczny; int i=10, j=12; bitowa = (i<j) | ((i=3) > 5); // wartość i po operacji: 3 System.out.println(bitwise+ " "+ i); i=10; warunkowy = (i<j) || (i=3) > 5; // wartość i po operacji: 10 System.out.println(conditional+ " "+ i); i=10; bitowe = (i>j) & (i=3) > 5; // wartość i po operacji: 3 System.out.println(bitwise+ " "+ i); i=10; warunkowy = (i>j) && (i=3) > 5; // wartość i po operacji: 10 System.out.println(conditional+ " "+ i); Ten przykład pokazuje, że jeśli wartość ma zostać zmieniona przez drugą połowę wyrażenia, doprowadziłoby to do różnicy między wynikami, ponieważ bitowe jest operatorem chętnym, podczas gdy warunek zachowuje się jak zwarcie (nie ocenia drugiego połowa, jeśli pierwsza połowa jest fałszywa w przypadku && i prawda w przypadku ||). Mam problem z tym przykładem. Dlaczego miałbyś chcieć zmienić wartość w tym samym czasie, gdy dokonujesz jej porównania? Wydaje się, że nie jest to solidny sposób na kodowanie. Zawsze miałem awersję do wykonywania wielu operacji w jednej linii w moim kodzie produkcyjnym. Wygląda na to, że zrobiłby coś, co zrobiłby "kodujący kowboj" bez sumienia co do łatwości utrzymania swojego kodu. Wiem, że w niektórych domenach kod musi być jak najbardziej zwarty, ale na pewno jest to ogólnie kiepska praktyka? Mogę wyjaśnić mój wybór zachęcania do używania && i || ponad & i | ponieważ jest to przyjęta konwencja kodowania w inżynierii oprogramowania. Ale czy ktoś mógłby mi podać lepszy, nawet rzeczywisty przykład użycia operatora bitowego w wyrażeniu warunkowym?


title: Aplikacje są przenośne

text: Nie znalazłem wiele na ten temat, ale to, co znalazłem, nie wyjaśnia tego wystarczająco dobrze (przynajmniej dla mnie). Co sprawia, że aplikacja, którą robię, jest przenośna? Albo co definiuje przenośną aplikację? Czy jest jakaś konkretna różnica, która sprawia, że aplikacja jest przenośna, czy nie? Zawsze myślałem, że jeśli po prostu utworzę plik wykonywalny i kilka obrazów, mogę po prostu skopiować ten folder i przenieść go na inny komputer na dysku flash. Ale jeśli możesz, jaki jest cel posiadania „przenośnych” aplikacji? Wiem, że zadałem wiele pytań, ale podejrzewam, że odpowiedź, która dotyczy jednego z pytań, obejmie je wszystkie.


title: Algorytm losowego ML lasu odpowiedni do użycia w HPC opartym na klastrach?

text: Potrzebuję pomocy w identyfikacji lepszego algorytmu. Opracowałem skrypt przy użyciu pakietu scipy Pythona do analizy dość dużego modelu, który chcę rozwiązać. Model zawiera ponad 12 GB danych, w tym ponad 500 parametrów. Problem polega na tym, że kiedy uruchamiam małe symulacje około 0,5 GB danych z 20 parametrami, może to zająć komputerowi przyzwoitą ilość czasu, jeśli zezwolę na rozsądną liczbę iteracji przez losowy klasyfikator lasu. Obecnie mój skrypt używa tylko jednego rdzenia, więc myślę, że zrobienie skryptu wielowątkowego byłoby pierwszym krokiem. Ale nie wierzę, że to wystarczy, biorąc pod uwagę, jak złożony jest model. Chętnie zbadam zastosowanie rozwiązania HPC opartego na klastrach, ale nie jestem pewien, jak się do tego zabrać. Czy istnieją lepsze algorytmy, których mogę użyć, czy też bardziej odpowiedni byłby algorytm oparty na klastrach?


title: Jak rozwiązać problem własności "wraku pociągu", który łamie Prawo Demeter?

text: Czytałem o prawie Demeter i chciałbym wiedzieć, jak rozwiązać ten problem właściwości modelu przemierzającego, który często widzę na Objective-C. Wiem, że jest podobne pytanie, ale w tym przypadku nie wywołuję metody z ostatniej właściwości, która wykonuje jakieś obliczenia, zamiast tego po prostu ustawiam wartości (OK, wiem, że gettery to metody, ale moim zamiarem jest tylko po to, by uzyskać wartość, a nie po to, by zmienić stan jakiegoś obiektu). Na przykład: self.priceLabel.text = self.media.ad.price.value; Czy powinienem to zmienić na coś takiego: self.priceLabel.text = [self.media adPriceValue]; a wewnątrz Media.m - (NSString *)adPriceValue { return [self.ad priceValue]; } i wewnątrz Ad.m - (NSString *)priceValue { return [self.price value]; } Czy to dobre rozwiązanie? Czy tworzę niepotrzebne metody?


title: Radzenie sobie ze złym opisem stanowiska i przeprowadzanie rozmów z kandydatami

text: Mój pracodawca od jakiegoś czasu szuka nowego programisty internetowego, a także DBA, z niewielkim sukcesem. Właśnie zobaczyłem opis stanowiska i teraz rozumiem, dlaczego nie jesteśmy zainteresowani - umieścili razem trzy stanowiska w jednym miejscu: web developer, DBA i marketingowiec SEO/Analytics, wszystkie pod tytułem "Webmaster". Wystarczająco trudno jest znaleźć kogoś, kto potrafi dobrze wykonać każdą z tych rzeczy, nie mówiąc już o kimś, kto potrafi to wszystko (lub chce być dzisiaj nazywany „Webmasterem”). Częścią ich motywacji jest bez wątpienia oszczędzanie pieniędzy poprzez zatrudnienie jednej osoby do wykonywania trzech prac i niedopłacanie tej osoby. Ale teraz mam do czynienia z rozmowami kwalifikacyjnymi z ludźmi na to stanowisko (to znaczy, jeśli kiedykolwiek zdobędziemy kandydata) i spróbuję dowiedzieć się, co ta osoba _naprawdę_ będzie robić po zatrudnieniu. Czy miałeś doświadczenie z tego typu rzeczami? Albo jako kandydat, albo jako ankieter. A jak sobie z tym poradziłeś? Zakładając, że przepisanie opisu stanowiska pracy na coś bardziej realistycznego nie wchodzi w grę, jaki byłby najlepszy sposób na poradzenie sobie z tym (znalezienie odpowiedniej osoby, skuteczna rozmowa z nią itp.)?


title: Jak poprawić wydajność

text: W jednym z moich wywiadów zadano mi niejasne pytanie, nadal nie jestem pewien odpowiedzi. Mamy klienta i serwer, które są rozdzielone. Sieć, która je łączy, ma duże opóźnienia, które dominują w wydajności. Jak możemy poprawić wydajność. Zauważ, że nie możemy zmienić topologii sieci. Myślałem o buforowaniu, podzieleniu żądania na wiele mniejszych żądań i otwarciu wielu połączeń z serwerem. Jakieś pomysły? Zwróć uwagę, że opis pytania jest niejasny i nie otrzymałem więcej informacji na temat sytuacji. **Pytanie wyjaśniające:** Jak należy zaprojektować komunikację klient-serwer, aby uzyskać najlepszą wydajność w sieci o dużych opóźnieniach?


title: Wszelkie filmy z kursami/wykładami na temat wzorców projektowych

text: Planuję przeczytać kilka wzorców projektowych i wziąłem książkę o „wzorcach projektowych w C++” przez czteroosobową grupę. Jednak nie jestem kimś, kto czyta książki i woli czytać slajdy/oglądać wykłady z kursu, a następnie stosować i czytać książki. Nie mogę znaleźć żadnych filmów z wykładami w sieci (tak, to nie jest tak ważny kurs jak algo/OS). Każdy zna jakąkolwiek stronę kursu, najlepiej w C++


title: Dodaj test jednostkowy dla każdego nowego błędu

text: W mojej pracy wszyscy programiści, którzy rozwiązują błąd, muszą dodać nowy test jednostkowy, który ostrzega przed tego typu błędami (w przypadku, gdy wystąpią ponownie). Jeśli test jednostkowy nie jest możliwy (na przykład problem z projektem strony internetowej), dział QA musi stworzyć przypadek testowy, aby ręcznie go sprawdzić. Ideą tego jest to, że jeśli defekt nie został wykryty przed wydaniem produktu, to dlatego, że nie ma odpowiedniego testu jednostkowego, aby go wykryć. Więc deweloper musi to dodać. Pytanie brzmi: czy jest to powszechne w każdej metodologii tworzenia oprogramowania? Ta technika ma nazwę? Chciałbym dowiedzieć się więcej na ten temat, ale na początek potrzebuję trochę informacji.


title: Tworzenie aplikacji na Androida dla kogoś innego

text: Opracowaliśmy kilka aplikacji i opublikowaliśmy je w Android Market. Piszemy teraz aplikację, którą inna firma będzie markować i sprzedawać za pośrednictwem własnego konta wydawcy. Druga firma nie ma doświadczenia z Android Market ani z programowaniem na Androida. Byłbym wdzięczny za wszelkie spostrzeżenia innych, którzy mieli do czynienia z podobnymi sytuacjami. Szczególnie interesują mnie następujące obszary: 1. **Podpisywanie aplikacji** Dostępne alternatywy to: podpisz naszym zwykłym kluczem; utwórz parę kluczy podpisujących specyficzną dla innej firmy i podpisz się nią; lub pomóc drugiej firmie zainstalować system programistyczny, wygenerować parę kluczy i samodzielnie wykonać podpis. To drugie wymagałoby od nas przesłania im źródeł projektu, co przedstawia własne problemy. Poza naszą troską o przesłanie źródła, czy wybór ma jakiekolwiek znaczenie? 2. **Licencjonowanie** Ponieważ sprawdzanie licencji będzie wykonywane na ich koncie, kod będzie musiał osadzić ich klucz publiczny w celu odszyfrowania odpowiedzi licencyjnej. Czy jest jakiś powód, dla którego powinni się martwić udostępnieniem nam tego klucza? Czy są jakieś alternatywy dla udostępniania nam klucza? 3. **Publikacje** Druga firma jest odpowiedzialna za cały marketing i sprzedaż; jesteśmy odpowiedzialni za rozwój aplikacji. Z tego, co możemy powiedzieć, Android Market nie jest skonfigurowany, aby umożliwić czyste oddzielenie tych ról. (Zakłada się, że deweloper będzie również wydawcą.) Utrudnia to wypracowanie podziału odpowiedzialności za proces publikacji. Naszą pierwszą myślą było dostarczenie im pliku .apk i umożliwienie im obsługi go stamtąd. Kwestia licencji była pierwszą wskazówką, że podchodzimy do tego naiwnie. Sam proces publikowania jest dość techniczny i widzimy dwie alternatywy: przeprowadzić ich przez wszystkie kroki lub poprosić o dostęp do ich konta wydawcy i zrobić to sami. Co robią inni?


title: Wymagania dotyczące kodu źródłowego i dokumentacji projektowej dla umowy prawnej

text: # Pytanie Jakiego rodzaju dokumentacji i innych artefaktów można by się spodziewać w przypadku przejęcia istniejącej aplikacji webowej Java (prawdopodobnie wykorzystującej framework JBoss Seam) wykonanej _in-house_? Spodziewam się, że otrzymam: * Kod źródłowy w formie gotowej do otwarcia w określonym IDE. * Wszystkie elementy zewnętrzne (tj. schemat DB jako skrypty SQL, skrypty instalacyjne). * Pliki konfiguracyjne (zarówno dla środowisk deweloperskich, testowych, jak i produkcyjnych). * Wszystkie biblioteki zewnętrzne potrzebne do projektu. * Wszystkie zewnętrzne narzędzia użyte w projekcie lub przynajmniej ich opis (tj. program do tworzenia, oprogramowanie do kontroli wersji). * Szczegółowe informacje na temat: * Jak skompilować projekt (IDE, biblioteki, ich wersje, kompilatory, OS), * Jak skonfigurować środowisko programistyczne (wersja bazy danych, OS, schemat DB), * Jak zainstalować i uruchomić aplikację - specyfikacja serwera (OS, baza danych, wersje, minimalny sprzęt, konfiguracja zarówno aplikacji jak i bazy danych), Pewnie fajnie byłoby mieć również: * Archiwum całego systemu kontroli wersji (aby umożliwić sprawdzenie zmian z przeszłości). * Diagramy UML lub inna forma _dużego obrazu_ projektu aplikacji. * Schemat bazy danych. Za czym tęsknię? # Trochę szczegółów Friend pracuje jako prawnik w firmie, która potrzebuje umów prawnych z osobami, które opracowują dla nich aplikacje. Na wypadek, gdyby coś poszło nie tak. Ogólnie rzecz biorąc – firma chce mieć gdzieś zdeponowany kod źródłowy. Ale kod źródłowy nie wystarcza do utrzymania, a nawet kompilacji i uruchomienia aplikacji internetowej, więc potrzebują również dokumentacji, która pomaga w utrzymaniu aplikacji. Nigdy nie brałem cudzego projektu w podobnym przypadku (brak dostępu do poprzednich programistów) i nie jestem programistą Java, więc spodziewam się, że jest wiele rzeczy, których można przegapić. ## Więcej szczegółów dodani po kilku odpowiedziach Szefowie firmy (nazwali ją **A** , mała korporacja), która zamówiła i korzysta z aplikacji oraz firmy (nazwali ją **B** , kilka osób) która pisze aplikacja, są przyjaciółmi. Rozwój odbywa się _wewnętrznie_. Bez formalnej specyfikacji, bez pisemnej specyfikacji. Wszystkie funkcje są omawiane przez pocztę lub na spotkaniach. Wszystkim, łącznie z hostingiem aplikacji, zarządza **B**. Znajoma (która jest również jednym z częstych użytkowników aplikacji — załóżmy, że jest _właścicielem produktu_ ) w ogóle nie ufa programistom z **B**. Koleżanka też nie wierzy w kompetencje **B** (uwierz mi – nie powinna). Tak więc, aby chronić **A** biznesowy przyjaciel, potrzebuje pisemnej umowy prawnej z **B** na wypadek, gdyby **B** odeszło z danymi i aplikacją **A**... Jak napisał MSalters — nie śmiech - zdarza się :(. **A** już zrobiło **B** do zrobienia i zapewnia kopie zapasowe.


title: Rozwiązywanie konfliktów scalania z powodu refaktoryzacji

text: Niedawno zaangażowałem się w dyskusję na temat tego, jak ogólnie radzić sobie z refaktoringiem (co samo w sobie jest ciekawym tematem). W końcu pojawiło się następujące pytanie: **Jak radzić sobie z konfliktami scalania, które wystąpiły z powodu tego, że ktoś dokonał refaktoryzacji części kodu, podczas gdy ktoś inny pracował nad funkcją dla tego samego fragmentu kodu?** W zasadzie , nie mam pojęcia, jak skutecznie sobie z tym poradzić. Czy są jakieś najlepsze praktyki, których należy przestrzegać w tym zakresie? Czy jest jakaś różnica w tym, jak należy sobie z tym poradzić w przypadku systemu z mnóstwem starszego kodu?


title: Czy możemy całkowicie zastąpić XML JSON?

text: Jestem pewien, że wielu programistów zna XML i JSON i używa ich obu. Nie ma więc sensu wyjaśniać, czym one są i jaki jest ich cel, nawet w skrócie. Jeśli spróbujemy zmapować ich koncepcje, możemy powiedzieć (popraw mnie, jeśli się mylę): 1. Tagi XML są równoważne JSON `{}` 2. Atrybuty XML są równoważne właściwościom JSON 3. Kolekcja znaczników XML jest równoważna JSON `[]` Jedyną rzeczą, o której mogę pomyśleć, a która nie istnieje w JSON, są przestrzenie nazw XML. Pytanie brzmi, biorąc pod uwagę to mapowanie i biorąc pod uwagę, że JSON jest znacznie lżejszy w tym mapowaniu, czy możemy zobaczyć świat w przyszłości (lub przynajmniej teoretycznie myśleć o świecie) bez XML, ale z JSON robiącym wszystko, co robi XML? Czy możemy używać JSON wszędzie tam, gdzie używany jest XML? PS: Proszę zauważyć, że widziałem to pytanie. To coś zupełnie innego niż to, o co tutaj proszę. Dlatego proszę nie wspominać o **duplikacie**.


title: Dependency Injection i podpisy metod

text: Używałem YADIF (jeszcze inny framework do wstrzykiwania zależności) w aplikacji PHP/Zend, nad którą pracuję do obsługi zależności. Przyniosło to pewne znaczące korzyści pod względem testowania i oddzielania klas. Jednak jedną rzeczą, która mnie uderza, jest to, że pomimo sztuczek wykonywanych podczas korzystania z tej techniki, nazwy metod zapewniają pewien stopień sprzężenia. Prawdopodobnie nie najlepszy przykład -ale te metody różnią się od... powiedzmy PEAR Mailer. Same nazwy metod są (subtelną) formą sprzęgania //przykładowa funkcja publiczna __construct($dic){ $this->dic = $dic; } public function example(){ //ta linia sama w sobie wskazuje źródło YADIF DIC $Mail= $dic->getComponent('mail'); $Mail->setBodyText($body); $Mail->setFrom($from); $Mail->setSubject($temat); } Mógłbym napisać serię proxy/opakowań, aby ukryć te metody, a tym samym promować oddzielenie od , ale wydaje się to nieco przesadne. Musisz zrównoważyć czystość z pragmatyzmem... Jak daleko posunąłbyś się, by ukryć zależności na swoich zajęciach?


title: Jakie „zawody” przynoszą korzyści, gdy wykonuje je ktoś z doświadczeniem programistycznym?

text: Jakich zawodów nieprogramistycznych powinien szukać ktoś, kto nie ma pasji do programowania? Istnieje pewien odsetek osób, które ukończyły studia informatyczne, ale nie mają pasji do programowania. Pracowałem z wieloma osobami, które mają doświadczenie w programowaniu, ale zostały kierownikiem projektów lub testerem, dzięki czemu moja praca jako programisty jest łatwiejsza... a nasze produkty są lepsze. To nie jest awaria systemu lub osoby... po prostu znajdują miejsce, w którym pasują. Zastanawiam się więc, jakie zawody nieprogramistyczne zyskują na posiadaniu w nich kogoś, kto jest programistą i dlaczego to czyni tę osobę silniejszym lub słabszym kandydatem do tej pracy? Na przykład: Programiści są dobrymi kierownikami projektów, ponieważ mogą być w stanie wyrazić wymagania w sposób szczegółowy, który ma sens dla programistów, którzy będą pracować nad tymi wymaganiami. Ale mogą być przyzwyczajeni do mówienia o rzeczach w sposób techniczny, którego klienci mogą nie rozumieć i mogą mieć tendencję do próbowania komunikowania projektu rozwiązania zamiast przedstawiania problemu w surowy sposób.


title: Wydaje się, że przestrzenie nazw tylko komplikują sprawę. Czy czegoś mi brakuje?

text: Teraz, gdy używam przestrzeni nazw w moich plikach php, które pasują do ścieżki pliku, muszę dołączyć przestrzeń nazw do prawie każdego wystąpienia klasy. Przestrzenie nazw zdecydowanie pomagają mojemu autoloaderowi znaleźć pliki, ale kod staje się coraz trudniejszy do odczytania/zapisania. czy przestrzenie nazw nie mają uprościć mojego kodu? dlaczego to wszystko komplikuje? Czy używam go źle? Nie jestem pewien, czy widzę, że używanie przestrzeni nazw jest znacznie lepsze niż posiadanie bardzo długich nazw klas... przykład: plik: /root_path/init.php <?php namespace root_path; $foo = nowa \ścieżka_podrzędna\bar(); ?> plik: /ścieżka_główna/ścieżka_główna/bar.php <?php przestrzeń nazw ścieżka_główna\ścieżka_podrzędna; pasek klas { } ?>


title: Czy wzorce projektowe są superzestawem obiektów OOP czy podzbiorem?

text: Początkowo zacząłem uczyć się OOP, a później zacząłem rozumieć koncepcje wzorców projektowych. Zastanawiam się, czy jest to Wzorzec Projektowy, który jest SuperZestawem OOP, czy też sam OOP.


title: Jakiego języka i zestawu narzędzi GUI użyjesz do stworzenia programu prototypowego?

text: Załóżmy, że mam pomysł i muszę go szybko umieścić w kodzie. A potem przedstawiam to komuś, kto nie jest tak obeznany z komputerem. Jakiego języka powinienem używać do szybkiego i brudnego kodowania? I jakiego zestawu narzędzi GUI powinienem użyć, aby komputer na wpół umiejętny uznał go za łatwy w użyciu (czytaj: błyszczące oczy). Jest to aplikacja komputerowa.


title: Jak korzystać z GPL v3 z licencją Apache 2.0?

text: Na podstawie tej strony widzę, że tylko Apache License 2.0 jest zgodny z GPL v3. Teraz moje pytanie brzmi, w kategoriach laika, jak sprawić, by te dwie współpracowały ze sobą? Moja obecna sytuacja jest taka, że tworzę aplikację wykonaną w języku programowania na licencji GPL v3. Chcę umieścić jakąś formę zabezpieczenia w aplikacji i stwierdziłem, że mogę to osiągnąć za pośrednictwem usługi sieciowej. Jednak nie chcę ujawniać kodu mojej usługi sieciowej jako GPL v3, ponieważ jest to część większego systemu, nad którym pracuję, a który będzie zamkniętym źródłem. Czy w tym scenariuszu można wykorzystać Apache License 2.0? EDYCJA: Dla jasności język programowania, którego będę używać, to LiveCode.


title: Testowanie jednostkowe C++: Co testować?

text: **TL;DR** Pisanie dobrych, użytecznych testów jest trudne i wiąże się z wysokimi kosztami w C++. Czy doświadczeni programiści mogą podzielić się swoimi wywodami na temat tego, co i kiedy testować? **Długa historia** Kiedyś robiłem programowanie oparte na testach, właściwie cały mój zespół, ale nie działało to dobrze dla nas. Mamy wiele testów, ale wydaje się, że nigdy nie obejmują przypadków, w których mamy rzeczywiste błędy i regresje – które zwykle pojawiają się, gdy jednostki wchodzą w interakcje, a nie z ich izolowanego zachowania. Często jest to tak trudne do przetestowania na poziomie jednostkowym, że przestaliśmy robić TDD (z wyjątkiem komponentów, które naprawdę przyspieszają rozwój), a zamiast tego zainwestowaliśmy więcej czasu w zwiększenie zasięgu testów integracyjnych. Podczas gdy małe testy jednostkowe nigdy nie wykryły żadnych prawdziwych błędów i były w zasadzie tylko kosztami utrzymania, testy integracyjne naprawdę były warte wysiłku. Teraz odziedziczyłem nowy projekt i zastanawiam się, jak go przetestować. Jest to natywna aplikacja C++/OpenGL, więc testy integracyjne nie są tak naprawdę opcją. Ale testowanie jednostkowe w C++ jest nieco trudniejsze niż w Javie (musisz jawnie zrobić rzeczy "wirtualnymi"), a program nie jest mocno zorientowany obiektowo, więc nie mogę wyśmiewać/odcinać niektórych rzeczy. Nie chcę rozrywać na strzępy i przesadzać z całością tylko po to, by napisać kilka testów dla samego pisania testów. Pytam więc: po co mam pisać testy? np.: * Funkcje/klasy, które spodziewam się często zmieniać? * Funkcje/klasy, które trudniej przetestować ręcznie? * Funkcje/klasy, które są już łatwe do przetestowania? Zacząłem badać niektóre szanujące się podstawy kodu C++, aby zobaczyć, jak radzą sobie z testowaniem. W tej chwili zaglądam do kodu źródłowego Chromium, ale trudno mi wydobyć uzasadnienie testowania z kodu. Jeśli ktoś ma dobry przykład lub post na temat tego, jak podchodzą do tego popularni użytkownicy C++ (osoby z komitetu, autorzy książek, Google, Facebook, Microsoft, ...), byłoby to bardzo pomocne. **Aktualizacja** Przeszukuję tę stronę i sieć od czasu, kiedy to napisałem. Znalazłem kilka dobrych rzeczy: * Kiedy należy nie przeprowadzać testów jednostkowych? * http://stackoverflow.com/questions/109432/what-not-to-test-when-it-comes-to-unit-testing * http://junit.sourceforge.net/doc/faq/faq.htm #best Niestety, wszystkie one są raczej skoncentrowane na Javie/C#. Pisanie wielu testów w języku Java/C# nie jest dużym problemem, więc korzyści zwykle przeważają nad kosztami. Ale jak napisałem powyżej, w C++ jest to trudniejsze. Zwłaszcza jeśli twój kod nie jest tak-OO, musisz poważnie zepsuć, aby uzyskać dobre pokrycie testów jednostkowych. Na przykład: Aplikacja, którą odziedziczyłem, ma przestrzeń nazw `Graphics`, która jest cienką warstwą ponad OpenGL. Aby przetestować którąkolwiek z encji - z których wszystkie bezpośrednio korzystają z jej funkcji - musiałbym przekształcić to w interfejs i klasę i wstrzyknąć to do wszystkich encji. To tylko jeden przykład. Odpowiadając więc na to pytanie, pamiętaj, że muszę poczynić dość dużą inwestycję na pisanie testów.


title: Czy składnia naprawdę ma znaczenie w języku programowania?

text: Jeden z moich profesorów mówi, że „składnia jest interfejsem użytkownika języka programowania”, języki takie jak Ruby są bardzo czytelne i rozwijają się, ale widzimy wielu programistów produktywnych z C\C++, więc dla programistów naprawdę ważne jest, aby składnia powinien być akceptowalny? Bardzo chciałbym poznać Twoją opinię na ten temat. Zastrzeżenie: nie próbuję wszczynać kłótni. Pomyślałem, że to dobry temat do dyskusji. Aktualizacja: Okazuje się, że to dobry temat. Cieszę się, że wszyscy w nim uczestniczycie.


title: Jaka jest dokładna semantyka słowa „reduce in clojure”?

text: Dokumentacja Clojure dotycząca stanu `(reduce f val coll)`: > Jeśli podano val, zwraca wynik zastosowania f do val i pierwszego elementu > w coll, następnie zastosowania f do tego wyniku i drugiego elementu itd. Tak więc Próbowałem: (reduce str ["s1" "s2"] "s3") Co prowadzi do: "[\"s1\" \"s2\"]s3" Jednak kiedy próbuję (zastosuj str ["s1" " s2")]) Otrzymuję: "s1s2" Dlaczego więc wektor jest konwertowany na jego reprezentację w postaci łańcucha?


title: Dlaczego niektóre strony internetowe wyświetlają 0 bajtów w narzędziach programistycznych Chrome?

text: Robię optymalizację szybkości strony dla mojej witryny i badam, jak robią to inne witryny. Zauważyłem, że niektóre strony internetowe, takie jak Facebook czy Ringgitplus, pokazują 0 bajtów dla niektórych swoich zasobów w narzędziach programistycznych Chrome, karta Sieć, podczas gdy rzeczywisty rozmiar treści to kilka kilobajtów. ![Zrzut ekranu karty Sieć pokazujący 0 bajtów dla niektórych zasobów](http://i.stack.imgur.com/asvBh.png) Czytałem kilka artykułów, w których jest napisane, że _rozmiar_ to pobierana ilość, a _treść_ to rzeczywisty rozmiar odpowiedzi. Więc gdy rozmiar wynosi 0 bajtów, oznacza to, że jest obsługiwany z pamięci podręcznej. Ale to samo stało się, gdy otwieram stronę za pomocą incognito lub czyszczę całą pamięć podręczną. Jak to jest możliwe i jak mogę osiągnąć to samo dla moich stron internetowych?


title: Potrzebujesz pomocy przy decydowaniu o elementach aplikacji do tworzenia ikon

text: Staram się ćwiczyć programowanie tworząc prostą aplikację, którą myślę, że uda mi się zrobić w .Net C# w VisualStudio 2010. Pracuję nad prostą aplikacją, która pozwoli mi tworzyć małe obrazki (ikony) w rozmiarach na przykład 8x8, 16x16, 32x32 (ect) pikseli. Stworzę siatkę reprezentującą każdy rozmiar poprzez skalowanie do ilości pikseli. Każdy piksel będzie reprezentowany w małym kwadracie, który będzie można kliknąć, aby zmienić kolor ect. Oto moje pytanie dotyczące tego, jakie elementy powinna mieć taka aplikacja: * Jakie narzędzie VS pozwoliłoby mi stworzyć siatkę dla mojego projektu? Należy pamiętać, że każdy mały kwadrat powinien być generowany automatycznie przy użyciu rozmiaru X/Y podanego przez użytkownika, a pola powinny być klikalne. Ponadto prawdopodobnie powinienem być w stanie kliknąć jeden piksel i przeciągnąć myszą, aby wybrać inne piksele. * Jakie proste funkcje powinna mieć taka mała aplikacja? Były. wybór kolorów. * Jakie minimalne funkcje powinienem mieć? Mam nadzieję, że to jest miejsce na takie pytanie. Staram się uzyskać ogólne wyobrażenie o tym, jak sprawić, by taka mała aplikacja działała i czego użytkownik może się spodziewać po otwarciu małej, tworzącej ikony aplikacji.


title: Jaki jest najlepszy sposób na buforowanie rosnącej tabeli bazy danych do generowania kodu HTML?

text: Mam tabelę bazy danych, która będzie się powiększać o około 5000 wierszy na godzinę. W przypadku klucza, za pomocą którego wykonywałbym zapytanie, zapytanie będzie się powiększać o około 1 wiersz co godzinę. Chciałbym, aby strona internetowa wyświetlała najnowsze wiersze dla klucza, 50 naraz (jest to konfigurowalne). Chciałbym spróbować i zaimplementować memcache, aby utrzymać niską aktywność bazy danych dla odczytów. Jeśli uruchomię zapytanie i utworzę wynik pamięci podręcznej dla każdej strony zawierającej 50 wyników, będzie to działać, dopóki nie zostanie dodany nowy wpis. W tym czasie strona najnowszych wyników otrzymuje nowy wynik, a najstarsze wyniki znikają. Powoduje to kaskadowanie listy stron w pamięci podręcznej, co powoduje, że aktualizuję każdy wynik pamięci podręcznej. Wydaje się, że to kiepski projekt. Mógłbym zbudować strony pamięci podręcznej wstecz, a następnie dla każdej żądanej strony powinienem pobrać ostatnie 2 strony i skrócić do odpowiedniej długości 50. Nie jestem pewien, czy to jest dobre, czy złe? W idealnym przypadku mechanizm, którego używam do wstawiania nowego wiersza, również wiedziałby, jak unieważnić prawidłowe wyniki pamięci podręcznej. Czy ktoś rozwiązał już ten problem w powszechnie akceptowalny sposób? Jaka jest najlepsza metoda na zrobienie tego? EDYCJA: Jeśli moje rozumienie pamięci podręcznej zapytań MYSQL jest poprawne, ma ona ziarnistość na poziomie tabeli w unieważnieniu. Biorąc pod uwagę fakt, że mam około 5000 aktualizacji, zanim zapytanie o klucz powinno zostać unieważnione, wydaje się, że pamięć podręczna zapytań bazy danych nie zostałaby użyta. MS SQL buforuje plany wykonania i często używane strony danych, więc może działać lepiej w tym scenariuszu. Moje zapytanie nie dotyczy jednej tabeli z TOP N. Jedna wersja ma sprzężenia z kilkoma tabelami, a inna ma podselekcje. Ponadto, ponieważ chcę buforować tabelę wygenerowaną w html, zastanawiam się, czy odpowiedni byłby bufor na poziomie serwera WWW? Czy naprawdę nie ma żadnych korzyści z buforowania? Czy naprawdę najlepszą radą jest pozwolenie, aby zapytanie witryny internetowej przechodziło przez wszystkie warstwy i trafiało do bazy danych przy każdym żądaniu?


title: Jakie kroki należy podjąć, aby baza danych typu open source była gotowa do produkcji?

text: Rozważam użycie GridSQL w środowisku produkcyjnym. Mam jednak pewne oznaki, że nie jest gotowy. Jednym z nich jest to, że jakiś czas temu został wykluczony z oferty EnterpriseDB, a fora wydają się zgłaszać kilka błędnych wyników i stosunkowo poważnych błędów. Jednak alternatywy dla GridSQL kosztują około 100 000 $, więc pomyślałem o wykorzystaniu części tych pieniędzy, aby zapewnić, że GridSQL będzie gotowy do produkcji. Jednocześnie mógłbym zaryzykować wydatek 50 000 $ i miesiące pracy nad rozwojem GridSQL, tylko po to, by odkryć, że projekt był wadliwy i że potrzebne jest kompletne przepisanie. Wtedy musiałbym kupić komercyjne alternatywy dla GridSQL, a istnienie mojego startupu byłoby zagrożone. **Pytanie** Jakie kroki podjąłbyś, aby zapewnić jak najmniejsze ryzyko wystąpienia najgorszego scenariusza opisanego powyżej? To nierealne, że sam mógłbym dużo testować lub kodować (nie jestem też najlepszym programistą), więc proszę opisać, gdzie znaleźć ludzi, którzy będą musieli wykonać tę pracę.


title: Zatrudnianie „poza platformą” – jakie są wskaźniki sukcesu kandydatów?

text: Poszukując kandydatów często chcesz mieć ludzi z bezpośrednim doświadczeniem z technologiami i platformami, z których dzisiaj korzystasz. Jednak nie zawsze może to być możliwe. Szczególne wymagania mogą dotyczyć technologii niszowej, przestarzałej lub Twój zespół już osuszył okolicę wszystkich tą konkretną technologią (nie wszyscy pracują w Dolinie Krzemowej, niektórzy z nas pracują i mieszkają w mniejszym obszarze miejskim z powodów niezwiązanych z zawód). Tak często może to oznaczać zatrudnianie ludzi „poza platformą”, takich jak ludzie z Dot-Net do projektu Java lub programiści Cobol do aplikacji na iPhone'a (lub odwrotnie). Lub nawet po prostu zmienić język, z Visual Basic na Scala lub JavaScript na C. Moje pytanie brzmi, jakich cech, atrybutów i doświadczenia oczekiwałbyś podczas rozmowy kwalifikacyjnej, aby wskazać, że kandydat może z powodzeniem zmienić platformę lub język i jakie są wskaźniki co do poziomu sukcesu i ram czasowych. Również przyzwoite „historie wojenne” związane z tym zyskałyby ode mnie solidne poparcie.


title: Jak mam podejść do tworzenia aplikacji klient-serwer opartej na Javie?

text: Zostałem poproszony o stworzenie aplikacji klient-serwer (wymaga bazy danych) dla firmy. Jestem bardzo przydatny z javą, więc chciałbym z tym skorzystać. To ode mnie zależy, jak rozwinę aplikację. Może to być aplikacja internetowa JSP lub aplikacja oparta na GUI Java Swing. Mam następujące pytania/wątpliwości. Jeśli więc zamierzam tworzyć aplikację internetową, muszę nauczyć personel firmy 1. Jak zainstalować Tomcata 2. Jak załadować aplikację internetową Tomcat 3. Jak uruchomić serwer, aby uruchomić aplikację. Jeśli pójdę do opracowania aplikacji opartej na Java Swing GUI, 1. Powinno rozpocząć się po uruchomieniu komputera. tj. powinien być automatycznie dodany do uruchamiania usługi systemu operacyjnego podczas instalacji 2. Skrót do aplikacji w szybkim uruchomieniu, pasek zadań podczas instalacji. W części dotyczącej bazy danych: Chciałbym mieć dostęp do MS, taki jak DB, ale bezpłatny. Dzieje się tak dlatego, że 1. Nie musisz martwić się instalacją silnika DB (tak jak my musimy uważać w przypadku MySQL). 2. DB byłby utrzymywany na niektórych Dyskach (takich jak plik .mdb w przypadku MS-Acess) bez szwanku, nawet jeśli ich system operacyjny ulegnie awarii. Proszę o wskazówki, jak mam podejść do tworzenia oprogramowania.


title: Jakie są (lub niektóre) zasady bezpieczeństwa oprogramowania?

text: O jakich zasadach należy pamiętać i przestrzegać podczas opracowywania bezpieczeństwa, aby praktykować należytą staranność?


title: Pisanie silnika gry za pomocą javascript

text: ..przez to mam na myśli obsługę logiki do gry w szachy. Zasadniczo walidacja ruchu i sprawdzenie, czy ktoś wygrał. Teraz zignoruj złożoność gry (jeśli możesz..) Chciałbym jakiś pseudokod na to, jak będzie wyglądał przy użyciu wywołań zwrotnych w javascript. Ze względu na argumenty wyobraź sobie, że po zakończeniu przenoszenia w przeglądarce wysyła obiekt JSON elementu, który został przeniesiony i do którego miejsca został przeniesiony. Na serwerze mamy dostęp do obiektu JSON, który zawiera dane dla całej tablicy. Dzięki tym informacjom oczekuję, że przekażę je do mojego silnika i na podstawie danych wyjściowych określę, czy ruch jest prawidłowy… a jeśli tak, czy jest to zwycięski ruch? Nie szukam żadnej konkretnej logiki, jak określić ruch w szachach -> po prostu rodzaj pseudoprzykładu/szablonu przebiegu gry, używając powyższego akapitu jako przewodnika po tym, co należy zrobić. Powodem tego jest to, że chciałbym zrozumieć, w jaki sposób wywołania zwrotne mogą zostać użyte do wyprodukowania czegoś tego rodzaju, w przeciwieństwie do kodu synchronicznego.


title: Najlepsze praktyki lub wzorce projektowe do pobierania danych do raportowania i pulpitów nawigacyjnych w aplikacji bogatej w domeny

text: Po pierwsze, chcę powiedzieć, że wydaje się to być zaniedbanym pytaniem/obszarem, więc jeśli to pytanie wymaga poprawy, pomóż mi uczynić je świetnym pytaniem, które może przynieść korzyści innym! Z mojego doświadczenia wynika, że istnieją dwie strony aplikacji - strona "zadania" (gdzie użytkownicy wchodzą w interakcję z aplikacją i to obiekty, w których żyje model domeny) oraz strona raportowania, gdzie użytkownicy otrzymują dane na podstawie tego, co dzieje się w zadaniu bok. Po stronie zadań jasne jest, że aplikacja z bogatym modelem domeny powinna mieć logikę biznesową w modelu domeny, a baza danych powinna być używana głównie do trwałości. Separacja obaw, każda książka jest o tym napisana, wiemy co robić, super. A co ze stroną raportowania? Czy hurtownie danych są akceptowalne, czy też są źle zaprojektowane, ponieważ zawierają logikę biznesową w bazie danych i samych danych? Aby zagregować dane z bazy danych do danych magazynu danych, należy zastosować do danych logikę biznesową i reguły, a ta logika i reguły nie pochodziły z modelu domeny, ale pochodziły z procesów agregowania danych. Czy to źle? Pracuję nad dużymi aplikacjami do zarządzania finansami i projektami, w których logika biznesowa jest rozbudowana. Podczas raportowania tych danych często będę musiał wykonać DUŻO agregacji, aby pobrać informacje wymagane dla raportu/dashboardu, a agregacje mają w sobie dużo logiki biznesowej. Ze względu na wydajność robiłem to z wysoce zagregowanymi tabelami i procedurami składowanymi. Jako przykład powiedzmy, że potrzebny jest raport/tablica rozdzielcza, aby wyświetlić listę aktywnych projektów (wyobraź sobie 10 000 projektów). Każdy projekt będzie wymagał zestawu wskaźników pokazanych wraz z nim, na przykład: 1. całkowity budżet 2. dotychczasowy nakład pracy 3. szybkość spalania 4. data wyczerpania budżetu przy bieżącym współczynniku spalania 5. itd. Każdy z nich wiąże się z dużą logiką biznesową . I nie mówię tu tylko o mnożeniu liczb czy jakiejś prostej logice. Mówię o tym, aby uzyskać budżet, należy zastosować arkusz stawek z 500 różnymi stawkami, po jednej na czas każdego pracownika (w niektórych projektach, inne mają mnożnik), nałożyć wydatki i odpowiednie narzuty itp. logika jest obszerna. Uzyskanie tych danych w rozsądnym dla klienta czasie zajęło dużo czasu agregacji i dostrajania zapytań. Czy należy to najpierw przeprowadzić przez domenę? A co z wydajnością? Nawet w przypadku prostych zapytań SQL ledwo otrzymuję te dane wystarczająco szybko, aby klient mógł wyświetlić je w rozsądnym czasie. Nie wyobrażam sobie próby dostarczenia tych danych do klienta wystarczająco szybko, jeśli ponownie nawadniam wszystkie te obiekty domeny i mieszam, dopasowuję i agreguję ich dane w warstwie aplikacji lub próbuję agregować dane w aplikacji. Wydaje się, że w takich przypadkach SQL jest dobry w przetwarzaniu danych i dlaczego by go nie użyć? Ale wtedy masz logikę biznesową poza modelem domeny. Wszelkie zmiany logiki biznesowej będą musiały zostać zmienione w modelu domeny i schematach agregacji raportów. Naprawdę nie wiem, jak zaprojektować część raportowania / pulpitu nawigacyjnego dowolnej aplikacji w odniesieniu do projektowania opartego na domenie i dobrych praktyk. Dodałem tag MVC, ponieważ MVC jest elementem projektu i używam go w moim obecnym projekcie, ale nie mogę określić, w jaki sposób dane raportowania pasują do tego typu aplikacji. Szukam jakiejkolwiek pomocy w tym zakresie - książki, wzory projektowe, słowa kluczowe do google, artykuły, cokolwiek. Nie mogę znaleźć żadnych informacji na ten temat.


title: Jak radzić sobie ze złożonymi regułami i logiką biznesową?

text: Mam specjalistę od domeny, z którym mogę pracować, ale on poda mi werbalnie wiele szczegółów. Logika biznesowa jest złożona, reguły biznesowe często się zmieniają, proces biznesowy jest długi i ma wiele końców / pośredni stan oczekiwania. Spraw do załatwienia jest wiele (ponieważ istnieje wiele stanów konta, produktu i subskrypcji). Jak najlepiej sobie z tym poradzić? Diagram BPMN nie jest nawet wystarczająco niski, aby to wyjaśnić. Pisanie dokumentacji jest czasochłonne na pisanie i czytanie. Diagram stanu UML może wkrótce stać się szalenie skomplikowany. Wszelkie porady byłyby mile widziane.


title: Korzystanie z okna dialogowego postępu i wielowątkowości

text: Moja aplikacja komputerowa .NET Windows tworzy raport HTML i ma 3 główne fazy. Może tworzyć wiele raportów. Pokazuję pasek postępu, aby użytkownik wiedział (oszacował), jak długo to potrwa (a także upewniam się, że system nie uległ awarii przez aktualizujące się GUI). Tak więc, gdybym musiał wygenerować 3 raporty, byłoby w sumie 9 faz (3 fazy * 3 raporty). Problem, który teraz mam, polega na tym, że proces trwa zbyt długo. W związku z tym muszę używać wątków, aby móc rozpocząć od fazy 1, a następnie otworzyć nowy wątek, który kończy fazę 2 i 3. Podczas gdy faza 2 i 3 są w toku, kolejna pozycja na liście zaczyna się od fazy 1 i procesu trwa. Mam nadzieję, że to ma sens. Zastanawiam się więc teraz, co zrobić z paskiem postępu, ponieważ wiele faz będzie uruchamianych jednocześnie. W tej chwili jedyną logiczną rzeczą, o której myślę, jest Raport 1. Rozpocznij fazę 1. Nowy wątek -> Faza 2 i 3 Sprawdź, czy Raport 2 jest ostatnim raportem. Tak nie jest, więc podczas fazy 2 Raportu 2 rozpocznij fazę 1 Raportu 2. Nowy wątek -> Faza 2 i 3 Sprawdź, czy Raport 3 jest ostatnim raportem. To jest. Tak więc, podczas fazy 2 raportu 2, rozpocznij fazę 1 raportu 3, a następnie kontynuuj w tym samym wątku z fazą 2 i 3 Powyższe będzie oznaczać, że zaktualizuję okno dialogowe postępu podczas fazy 2 i 3 ostatniego raportu (i chyba muszę dodać kilka kontroli, aby upewnić się, że inne fazy zostały faktycznie zakończone). Nie wyobrażam sobie, żebym robił coś nowego lub innego niż to, co było wcześniej i jako taki zastanawiałem się, czy istnieje już wzorzec radzenia sobie z rodzajem sytuacji?


title: Czy jestem związany licencją biblioteki, która jest używana w moim projekcie, ale nie jest z nią dystrybuowana?

text: Chcę opublikować mały projekt open source w serwisie GitHub. Chciałbym wydać go z licencją MIT lub Apache. Projekt posiada testy jednostkowe wykorzystujące bibliotekę JUnit. JUnit został wydany z Licencją Publiczną Eclipse v1.0. JUnit nie jest dystrybuowany w projekcie - jest pobierany i używany w czasie budowania przez Maven, narzędzie do budowania. Czy jestem związany licencją biblioteki, która jest używana w projekcie, ale nie jest z nim rozpowszechniana? Jeśli tak, czy mogę używać biblioteki wydanej na licencji Eclipse Public License w projektach na licencji MIT lub Apache? **Moje własne przemyślenia (najbardziej pesymistyczny scenariusz)** Ponieważ testy jednostkowe wykorzystują JUnit, projekt jest pochodną pracy JUnit, mimo że JUnit nie jest z nim dystrybuowany. Dystrybucja projektu automatycznie oznacza dystrybucję JUnit. Licencja Publiczna Eclipse (licencja JUnit) mówi: > Współtwórca może zdecydować się na dystrybucję Programu w formie kodu wynikowego na > swojej własnej umowie licencyjnej, pod warunkiem, że … jego umowa licencyjna: Istnieje lista czterech wymagań, które brzmią trywialnie, ale które być może nie są w pełni uwzględnione w licencjach MIT i Apache (zrzeczenie się wszelkich gwarancji, z wyłączeniem jakiejkolwiek odpowiedzialności, oświadczenie o dodatkowych postanowieniach, oświadczenie o dostępności kodu źródłowego). Tak więc licencja publiczna Eclipse może nie być kompatybilna z licencjami MIT i Apache i mogę nie być w stanie korzystać z JUnit.


title: Sprawdzone vs Niesprawdzone vs Bez Wyjątku... Najlepsza praktyka przeciwnych przekonań

text: Istnieje wiele wymagań potrzebnych do prawidłowego przekazywania i obsługi wyjątków przez system. Istnieje również wiele opcji języka do wyboru w celu realizacji koncepcji. Wymagania dla wyjątków (w dowolnej kolejności): 1. **Dokumentacja** : Język powinien mieć możliwość udokumentowania wyjątków, które może zgłosić API. W idealnej sytuacji ten nośnik dokumentacji powinien nadawać się do użytku maszynowego, aby umożliwić kompilatorom i IDE zapewnienie wsparcia programiście. 2. **Przesyłaj sytuacje wyjątkowe** : Ta jest oczywista, aby umożliwić funkcji przekazywanie sytuacji, które uniemożliwiają wywołanej funkcji wykonanie oczekiwanego działania. Moim zdaniem istnieją trzy duże kategorie takich sytuacji: 2.1 Błędy w kodzie, które powodują, że niektóre dane są nieprawidłowe. 2.2 Problemy z konfiguracją lub innymi zasobami zewnętrznymi. 2.3 Zasoby, które są z natury zawodne (sieć, systemy plików, bazy danych, użytkownicy końcowi itp.). Są to nieco narożne przypadki, ponieważ ich niewiarygodność powinna skłaniać nas do sporadycznych niepowodzeń. Czy w takim razie te sytuacje należy uważać za wyjątkowe? 3. **Zapewnij wystarczającą ilość informacji, aby kod mógł to obsłużyć** : Wyjątki powinny dostarczać wywoływanemu wystarczające informacje, aby mógł on zareagować i ewentualnie poradzić sobie z sytuacją. informacje powinny być również wystarczające, aby po zarejestrowaniu wyjątki te zapewniły programiście wystarczający kontekst do zidentyfikowania i odizolowania obraźliwych oświadczeń oraz dostarczenia rozwiązania. 4. **Zapewnij programiście pewność co do aktualnego stanu wykonania jego kodu** : Możliwości obsługi wyjątków przez system oprogramowania powinny być wystarczająco obecne, aby zapewnić potrzebne zabezpieczenia, pozostając z dala od programisty, aby mógł on skup się na zadaniu. Aby to uwzględnić, następujące metody zostały zaimplementowane w różnych językach: 1. **Sprawdzone wyjątki** Zapewniają świetny sposób na dokumentowanie wyjątków i teoretycznie, gdy są poprawnie zaimplementowane, powinny zapewnić wystarczającą pewność, że wszystko jest w porządku. Jednak koszt jest taki, że wiele osób uważa, że bardziej produktywne jest po prostu ominięcie albo połknięcie wyjątków, albo ponowne wyrzucenie ich jako niesprawdzonych wyjątków. W przypadku użycia niewłaściwie sprawdzonych wyjątków praktycznie traci całą swoją użyteczność. Ponadto sprawdzone wyjątki utrudniają tworzenie stabilnego w czasie API. Wdrożenia generycznego systemu w ramach określonej domeny przyniosą mu ładunek wyjątkowych sytuacji, które stałyby się trudne do utrzymania przy użyciu wyłącznie sprawdzonych wyjątków. 2. **Niesprawdzone wyjątki** \- znacznie bardziej uniwersalne niż zaznaczony wyjątek nie potrafią właściwie udokumentować możliwych wyjątkowych sytuacji danej implementacji. Polegają na dokumentacji ad hoc, jeśli w ogóle. Stwarza to sytuacje, w których zawodność medium jest maskowana przez API, które daje wrażenie niezawodności. Również po wyrzuceniu te wyjątki tracą swoje znaczenie, gdy przechodzą z powrotem w górę przez warstwy abstrakcji. Ponieważ są one słabo udokumentowane, programista nie może ich konkretnie zaatakować i często musi zarzucić znacznie szerszą sieć niż jest to konieczne, aby zapewnić, że systemy wtórne, jeśli ulegną awarii, nie zniszczą całego systemu. Co sprowadza nas z powrotem do przewidzianych wyjątków sprawdzających problemy z połykaniem. 3. **Wielostanowe typy zwracane** W tym przypadku polegamy na rozłącznym zestawie, krotka lub innej podobnej koncepcji, aby zwrócić oczekiwany wynik lub obiekt reprezentujący wyjątek. Tutaj bez rozwijania stosu, bez przecinania kodu, wszystko działa normalnie, ale wartość zwracana musi zostać zweryfikowana pod kątem błędu przed kontynuowaniem. Tak naprawdę nie pracowałem z tym jeszcze, więc nie mogę komentować z doświadczenia. Przyznaję, że rozwiązuje to niektóre problemy, wyjątki omijając normalny przepływ, ale nadal będą cierpieć z powodu tych samych problemów, co sprawdzone wyjątki, ponieważ są męczące i stale „w twarz”. Więc pytanie brzmi: jakie jest twoje doświadczenie w tej sprawie i co według ciebie jest najlepszym kandydatem do stworzenia dobrego systemu obsługi wyjątków dla danego języka? * * * EDIT: Kilka minut po napisaniu tego pytania natknąłem się na ten post, upiorny !


title: przewymiarowanie tablic wielowymiarowych w Excel VBA

text: Spójrz na poniższy kod. Mój problem polega na tym, że nie mogę zrozumieć, jak zmienić rozmiar liczby całkowitej n i liczby całkowitej b. To, co robię, to tablica sent1 już działa i jest wypełniona około 4 zdaniami. Muszę przejrzeć każde zdanie i popracować nad nim, ale mam problem. ` dim wysłane1() dim wysłane2() dim n jako liczba całkowita, b jako liczba całkowita, x jako liczba całkowita dim temp_sent jako łańcuch b = 0 Dla n = 1 do ubound(wysłane1) temp_sent = wysłane1(n) for x = 1 do len( temp_sent1) kod jeśli a to b = b + 1 **TO JEST CZĘŚĆ KODU, KTÓRA NIE DZIAŁA** redim zachowaj send2(1 do ubound(sent1), b) sent2(n,b) = [code] next następny `


title: Rejestr usług - czy jest potrzebny?

text: Załóżmy, że tworzysz system, który ma wiele usług (wdrożonych przez różne zespoły, w różnych krajach, przy użyciu różnych technologii, w tym java, php, c#, c++ i innych). Załóżmy, że pomimo korzystania z różnych technologii, w jakiś sposób zgodziłeś się na integrację za pomocą RESTful API. Czy taki system potrzebuje rejestru usług? Rozumiem, że w zasadzie nie jest to obowiązkowe, ponieważ każda usługa może mieć własną konfigurację, w której znajduje się usługa, z której korzysta. Jednak utworzenie centralnej lokalizacji ułatwia życie operacji: nie trzeba wielokrotnie konfigurować tej samej usługi. Jednak tworzenie rejestru usług może być skomplikowane. To kolejny system w rozwiązaniu, który wymaga zasobów i jeszcze ważniejszej własności. Kto będzie jego właścicielem? Przychodzi mi do głowy więcej zalet i wad rejestru usług. Więc co o tym myślisz?


title: POST/przekierowanie/GET z nieprawidłowym przesłaniem formularza?

text: W dziedzinie tworzenia stron internetowych, czy dobrą praktyką jest wykonywanie POST/Redirect/GET, gdy pola w przesłanym formularzu są również nieprawidłowe? Zazwyczaj w takim przypadku nie doszłoby do żadnej wrażliwej transakcji. Czy jednak można argumentować, że mimo to nadal dobrą praktyką jest stosowanie wzorca POST/Redirect/GET?