title: Czy „Mapper” jest prawidłowym wzorcem projektowym, czy jest odmianą wzorca „Fabryka”?

text: Częstym wzorcem, który widzę, jest tak zwany wzorzec `Mapper` (nie mylić z `DataMapper`, który jest czymś zupełnie innym), który przyjmuje jako argument pewnego rodzaju „surowe” źródło danych (np. ADO.NET ` DataReader` lub `DataSet`) i mapuje pola na właściwości obiektu biznesowego/domeny. Przykład: class PersonMapper { public Person Map(DataSet ds) { Person p = new Person(); p.Imię = ds.Tables[0].Rows[0]["Imię"].ToString(); // inne właściwości... return p; } } Ideą jest Twoja Brama/DAO/Repozytorium/itd. wywoła obiekt Mapper przed jego powrotem, dzięki czemu otrzymasz rozbudowany obiekt biznesowy w porównaniu z bazowym kontenerem danych. Jednak wydaje się to być powiązane, jeśli nie identyczne, ze wzorcem Factory (w każdym razie w żargonie DDD), który konstruuje i zwraca obiekt domeny. Wikipedia mówi, że to dotyczy: DDD Factory: > **Factory:** metody tworzenia obiektów domeny powinny być delegowane do wyspecjalizowanego obiektu > Factory, tak aby alternatywne implementacje mogły być > łatwo wymieniane. Na podstawie tego cytatu jedyną różnicą, o której mogłem pomyśleć, jest to, że Fabryka w stylu DDD może być sparametryzowana, aby mogła zwrócić wyspecjalizowany typ obiektu, jeśli zajdzie taka potrzeba (np. BusinessCustomer kontra ResidentialCustomer), podczas gdy „Mapper” jest przypisany do określonej klasy i _tylko_ robi tłumaczenie. Czy jest więc różnica między tymi dwoma wzorami, czy są one zasadniczo tym samym, o różnych nazwach?


title: Przełącz się z C# na Javę, które „niespodzianki” powinny mnie obchodzić?

text: Być może będę musiał przełączyć się na Javę do nowego projektu. Mam bardzo małą wiedzę na temat Javy, ponieważ głównie uczyłem się i używałem C# i obawiam się, że różnice między tymi dwoma językami/platformą powinny sprawić mi wiele problemów. Jakie są pułapki / pułapki, na których powinienem się martwić?


title: Obsługa dużej ilości gniazd

text: Pracuję nad projektem, w którym mamy aplikację desktopową, która powinna być w stanie odbierać polecenia z aplikacji webowej. Aby rozwiązać ten problem, dobrym podejściem wydaje się użycie gniazd (zamiast długiego odpytywania i różnych innych technik). Aplikacja komputerowa korzysta również z internetowego interfejsu API, który jest zabezpieczony wzajemnym uwierzytelnianiem w SSL. Gniazda powinny być również zabezpieczone SSL. Pytanie brzmi: jaki jest najlepszy sposób radzenia sobie z dużą ilością gniazd? Wymyśliłem rozwiązanie, które polega na zastosowaniu „gniazdo przekaźnika”. Zasadniczo aplikacja komputerowa tworzy gniazdo do [Stacji przekaźnikowej]. Za każdym razem, gdy akcja powinna zostać wysłana z aplikacji internetowej, aplikacja internetowa tworzy również gniazdo do stacji przekaźnikowej. Aplikacja internetowa wysyła polecenie o treści „przekaż [to] do [socket]”. Takie podejście wymaga, aby: * Wszystkie gniazda typu desktop-to-relay były trwałe * Aplikacja desktopowa musi się identyfikować, aby aplikacja internetowa mogła odwoływać się do niego w jego poleceniach * Stacja przekaźnikowa musi śledzić wszystkie gniazda aplikacji desktopowej, i przypisz je do unikalnego identyfikatora. Daje mi to dobrą strukturę, ale rodzi się też kilka pytań: * Jaki powinien być identyfikator? * Czy istnieje lepszy sposób wysyłania poleceń z [WebApp] do właściwej aplikacji komputerowej bez użycia takiego podejścia?


title: Skalowalność i języki programowania

text: Co sprawia, że język jest skalowalny? Uważam, że skalowalność to bardziej projektowanie systemu. Brzmi to dla mnie naprawdę dziwnie, jeśli powiem, że jeden język jest bardziej skalowalny niż drugi.


title: Mój szef chce objaśnić nasz kod linijka po linijce w języku angielskim

text: Zostałem specjalnie poproszony o podanie linijka po linijce (lub odpowiednio - na przykład obraz po obrazie itp.) wyjaśnienia lub komentarza, który mój szef chciałby móc przeczytać i śledzić. Ponieważ nie jest programistą, nie może postępować zgodnie z kodem, więc chce, aby wszystko zostało przetłumaczone na język angielski. Czy ktoś został wcześniej poproszony o zrobienie tego? Skomentowałem cały kod źródłowy i użyłem JSDoc do wygenerowania pełnej dokumentacji wszystkich funkcji, zmiennych itp., Dołączyłem przykład implementacji oraz pełne demo z komentarzami. Czy jest coś jeszcze, co mogę zrobić, aby skomentować kod dla nie-programistów? To nie jest rozsądna prośba, prawda? * * * ### AKTUALIZACJA W końcu udało mi się wyjaśnić, dlaczego nie było dobrze wykorzystać czasu, aby zrobić to, o co prosił. Jest rozsądnym facetem i po prostu nie rozumiał, na czym polega moja praca. Kiedy zobaczył ten post, myślę, że szybko zrozumiał, że to nie była normalna prośba. Dostarczyłem dokumentację, która jest odpowiednia dla innego programisty (JSDoc i komentarze w wierszu - a także dodatkowe uwagi dotyczące kwestii technicznych) oraz bardzo szeroki schemat blokowy głównej logiki programu, który powinien śledzić mój szef. W końcu wszystkie strony były zadowolone i ruszyliśmy dalej.


title: Jakie pytania warto zadać kandydatowi na inżyniera sprzedaży?

text: Jakie są dobre pytania do rozmowy kwalifikacyjnej, które należy zadać kandydatowi na stanowisko inżyniera sprzedaży? Jesteśmy firmą zajmującą się oprogramowaniem dla przedsiębiorstw i kandydat, którego zatrudniamy, musi być w stanie (i myślę, że dotyczy to każdej firmy zatrudniającej na to stanowisko). Piszę „klient (programista)”, ponieważ klient jest prawie zawsze programistą. 1. Udziel jasnych odpowiedzi na pytania klientów (programistów). 2. Skoncentruj się na tym, jak odpowiadamy na potrzeby klienta (programisty), a nie wymieniaj funkcji. 3. Brzmi entuzjastycznie podczas rozmowy/demonstracji klientowi (programiście). 4. Podczas demonstrowania funkcji wyjaśnij, dlaczego jest ona wartościowa dla klienta (programisty). 5. Dbaj o zapewnienie jakościowego wsparcia klientom (programistom). Czy masz jakieś sugerowane pytania, rzeczy, na które warto zwrócić uwagę itp.? (Nawet jeśli inżynier sprzedaży jest programistą, potrzebujemy zupełnie innego, ponieważ umiejętności programowania mogą być przeciętne, ale umiejętności komunikacyjne są bardzo ważne.)


title: Wzorce paska postępu (Eclipse)

text: Zmagałem się trochę z Eclipse i monitorami postępu, aby spróbować mieć dobre paski postępu, które informują użytkownika o przydatnych informacjach o postępie. Nieuchronnie kod staje się zaśmiecony wieloma rzeczami, takimi jak if (monitor.isCancelled()) return; ... longyMethodCall(monitor.newChild(10)); i wszędzie muszę przekazać `IProgressMonitor` jako argument do moich metod. Jest to złe z kilku powodów: 1. Kod jest zaśmiecony dużą ilością kodu, który nie ma związku z tym, co faktycznie robi funkcja. 2. Muszę ręcznie zgadywać, które części kodu wymagają czasu, a które nie. 3. Źle współdziała z testami automatycznymi; gdzie większość informacji, które zamiast tego trafiają na pasek postępu, powinna być rejestrowana do późniejszego wglądu. Czy istnieje wyjście z tego? Czy istnieją narzędzia, które mogą mi pomóc w rozwiązaniu jednego lub kilku z tych problemów? Czy powinienem patrzeć na narzędzia programowania zorientowanego na aspekty, czy są inne alternatywy?


Czy Bubble Sort to najwolniejszy algorytm sortowania? Jeśli odpowiedź brzmi „nie”, to co jest najwolniejsze?


title: Projekty open source, jak wybrać?

text: Chciałbym dołączyć do projektu open source, ponieważ myślę, że jestem wystarczająco dobry w programowaniu, aby przejść do czytania kodu innych i modyfikować go. Ale problem polega na tym, jak wybrać projekt open source do pracy? Znam wiele języków, z których najważniejsze to Python, C++ (niezbyt dobry w C, brak orientacji obiektowej jest dla mnie trudny) i Java. Dla C++ jestem biegły w Qt. Chciałbym zacząć od czegoś, co nie jest ogromne i nie osiągnęło fazy, w której błędy są tak skomplikowane, że zrozumienie, co wpływa na błąd, zajęłoby mi miesiąc. Jakieś sugestie? W chwili obecnej nie używam żadnych bibliotek w żadnej z wymienionych bibliotek, które musiałbym zmodyfikować (AFAIK).


title: Czy Google Closure to prawdziwy kompilator?

text: To pytanie jest inspirowane debatą w komentarzach do tego pytania o przepełnienie stosu. Dokumentacja Google Closure Compiler zawiera następujące informacje (podkreślenie dodane): > Closure Compiler to narzędzie do przyspieszania pobierania i uruchamiania JavaScript. **Jest to prawdziwy kompilator JavaScript.** Zamiast kompilować > język źródłowy do kodu maszynowego, kompiluje > JavaScript do lepszego > JavaScript. Wikipedia podaje jednak następującą definicję „kompilatora”: > Kompilator to program komputerowy (lub zestaw programów), który przekształca kod źródłowy > kod napisany w języku programowania (języku źródłowym) **na inny > język komputerowy** ... Language Rewriter to zwykle program, który > tłumaczy formę wyrażeń bez zmiany języka. Na tej podstawie powiedziałbym, że Google Closure nie jest kompilatorem. Ale fakt, że Google wyraźnie stwierdza, że w rzeczywistości jest „prawdziwym kompilatorem”, sprawia, że zastanawiam się, czy jest w tym coś więcej. Czy Google Closure naprawdę jest kompilatorem JavaScript?


title: Jak działają numery wczesnych wersji dla nowych produktów?

text: Obecnie piszę małą aplikację komputerową dla znajomego, ale robię to przede wszystkim dla siebie. W duchu zdobywania wiedzy i robienia rzeczy we właściwy sposób, chcę mieć numery wersji dla tej aplikacji. Moje badania przyniosły te powiązane wyniki * Jakiej "konwencji nazewnictwa wersji" używasz? * Jak wersjonujecie swoje pliki (numery wersji) * Rozwidliliście projekt, gdzie zaczynają się moje numery wersji? ale żaden z nich nie dotyczy numeracji alfa, beta, kandydatów do wydania itp. **Jakie są konwencje dla numerów wersji poniżej 1.0?** Wiem, że mogą trwać przez jakiś czas; na przykład PuTTY istnieje od co najmniej dekady i wciąż jest tylko w wersji beta 0.60.


title: Sposoby wersjonowania dokumentów generowanych przez użytkowników

text: Mam dokument online, który zasadniczo jest przechowywany w bazie danych jako ciąg XML. Zastanawiam się nad sposobem na zaimplementowanie wersjonowania dokumentu dla użytkownika. Aby użytkownik mógł wrócić do poprzednich wersji dokumentu. **aktualizacja** W moim przypadku jest to aplikacja webowa z setkami tysięcy użytkowników. Użytkownik może przechowywać nieograniczoną ilość dokumentów. Dokument XML dla dokumentu jest przechowywany w polu blob MySQL, więc nie jest mały. W końcu muszę jakoś ograniczyć granice, ale to zupełnie inny temat. Czy istnieje standardowy sposób podejścia do tego? Czy powinienem przechowywać tylko różnice między wersjami? Jakie inne rzeczy muszę wziąć pod uwagę?


title: Statyczne dane testowe w klasie pomocniczej: Getter kontra stała publiczna

text: Obecnie jestem w trakcie pisania dużych partii testów jednostkowych w projekcie, nad którym pracuję. Dodatkowo niedawno wprowadziliśmy testowanie GUI. Ten projekt jest stosunkowo prostą aplikacją internetową, opartą na Javie EE 6. Teraz mój kolega napisał sporo testów GuiTest, a ja napisałem sporo testów jednostkowych. Do obu testów potrzebujemy danych do ich uruchomienia. Teraz obaj przyjęliśmy różne podejścia do tego, jak „przechowujemy” dane, których używamy. **Rozwiązanie 1:** public class UnitTestData { public static final String DATA_PIECE = "niektóre dane"; public static final String MORE_DATA = "i więcej danych"; //... i tak dalej } **Rozwiązanie 2:** public class GuiTestData { public String getDataPiece() { return "pewne dane"; } public String getMoreData() { return "i więcej danych"; }         //... i tak dalej. } Moje pytanie brzmi teraz: Które z tych podejść jest _obiektywnie_ lepsze?


title: Czy to najlepszy sposób na podejście do tego projektu? Czy to jest przykład MVC?

text: Projektuję aplikację WinForms w C# i chciałem sprawdzić projekt przez was. Jestem całkiem nowy w programowaniu i czytałem trochę materiałów, więc proszę wybacz moje niewłaściwe użycie słów lub terminologii „informatyki” w razie potrzeby. **Projekt** Mam aplikację MDI z MAIN jako moim formularzem nadrzędnym i różnymi innymi formularzami CHILD. Teraz za każdym razem, gdy wystąpi wyjątek, czy to w formie MAIN, czy CHILD, należy go zalogować do okna LOG, które samo jest formą potomną MAIN. Czytając materiały w sieci, mówi się, że wiele ma luźno powiązane klasy. Teraz myślę, że będę miał klasę non-form o nazwie **Log Collector Class**, która w zasadzie będzie „pośrednikiem” między wszystkimi formami okien niebędących logami a formą okna. Każdy wyjątek lub ogólnie aktualizacja okna dziennika będzie musiała przejść przez tę klasę pośrednika. Z kolei wystąpi niestandardowe zdarzenie, w którym jeśli ta klasa kolektora dzienników zostanie zaktualizowana, _listener_ , czyli okno dziennika, zaktualizuje każdą kontrolkę, którą musi zaktualizować, aby wyświetlić wyjątek. Obraz dla osób wizualnych: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/FJYgI.png) Wszelkie komentarze na ten temat byłyby świetne, zwłaszcza jeśli robię coś poprawnie (lub niepoprawnie ).


title: Współbieżność: Jak podchodzisz do projektowania i debugowania implementacji?

text: Od kilku lat zajmuję się tworzeniem systemów współbieżnych i mimo braku formalnego wykształcenia (np. brak stopnia naukowego) dobrze orientuję się w tym temacie. Istnieje kilka nowych języków, które stały się popularne, aby przynajmniej mówić o nich ostatnio, a które mają na celu ułatwienie współbieżności, takich jak Erlang i Go. Wygląda na to, że ich podejście do współbieżności odzwierciedla moje własne doświadczenia dotyczące skalowania systemów i wykorzystywania wielu rdzeni/procesorów/maszyn. Uważam jednak, że jest bardzo niewiele narzędzi, które pomogą zwizualizować to, co zamierzasz zrobić, i zweryfikować, czy jesteś przynajmniej zbliżony do swojej pierwotnej wizji. Debugowanie współbieżnego kodu może być koszmarem w przypadku języków, które nie są zaprojektowane do współbieżności (takich jak C/C++, C#, Java itp.). W szczególności może być prawie niemożliwe odtworzenie warunków, które łatwo występują w jednym systemie w środowisku programistycznym. Jakie są twoje podejścia do projektowania systemu do obsługi współbieżności i przetwarzania równoległego? Przykłady: * Jak dowiedzieć się, co może być współbieżne, a co musi być sekwencyjne? * Jak odtworzyć warunki błędów i zobaczyć, co dzieje się podczas działania aplikacji? * Jak wizualizujesz interakcje między różnymi współbieżnymi częściami aplikacji? Na niektóre z nich mam własne odpowiedzi, ale chciałbym też dowiedzieć się nieco więcej. **Edytuj** Jak dotąd mamy dużo dobrego wkładu. Wiele artykułów, do których prowadzą linki, jest bardzo dobrych, a niektóre z nich już przeczytałem. Moje osobiste doświadczenie z programowaniem współbieżnym prowadzi mnie do przekonania, że potrzebujesz innego sposobu myślenia niż w przypadku programowania sekwencyjnego. Przepaść mentalna jest prawdopodobnie tak duża, jak różnica między programowaniem obiektowym a programowaniem proceduralnym. Chciałbym, aby ten zestaw pytań skupiał się bardziej na procesach myślowych niezbędnych (tj. teorii) do systematycznego podejścia do odpowiedzi. Udzielając bardziej konkretnych odpowiedzi, warto podać przykład – coś, przez co przeszedłeś osobiście. **Cel do nagrody** Nie mów mi, co mam zrobić. Już mam to pod kontrolą. Powiedz mi co robisz. Powiedz mi, jak _ty_ rozwiązujesz te problemy.


title: Wyjaśnienie Unicode

text: Dlaczego długość niektórych znaków, np. następujące 'ᨒ' 3 kiedy powinno być 2 ᨒ U+1a12 1a12 oznacza 6674 2^16 to 65536 więc 6674 powinno zająć tylko 2 bajty a nie trzy


title: Wydajność kodu zorientowanego na ADT z jednym przypisaniem na nowoczesnych procesorach

text: Można przypuszczać, że praca na niezmiennych danych z pojedynczymi przypisaniami wymaga większej ilości pamięci, ponieważ ciągle tworzysz _nowe_ wartości (chociaż kompilatory pod okładkami wykonują sztuczki wskazujące, aby uczynić to mniejszym problemem). Ale słyszałem już kilka razy, że straty w wydajności są równoważone przez zyski w sposobie, w jaki procesor (w szczególności jego kontroler pamięci) może wykorzystać fakt, że pamięć nie jest zmutowana (tak bardzo). Miałem nadzieję, że ktoś rzuci trochę światła na _jak_ to jest prawdą (a jeśli tak nie jest?). W komentarzu do innego postu wspomniano, że abstrakcyjne typy danych (ADT) mają z tym coś wspólnego, co zaciekawiło mnie, w jaki sposób ADT wpływają konkretnie na sposób, w jaki procesor radzi sobie z pamięcią? To jednak na marginesie, głównie interesuje mnie, jak czystość języka wpływa na wydajność procesora i jego pamięci podręcznej itp.


title: Argumenty przemawiające za przejściem organizacyjnym do rozwoju Scala

text: Pracuję w organizacji zajmującej się rozbudowanym rozwojem Java. Nasza grupa jest mała z krótkotrwałym projektem, kartą rozwoju zwinnego. Wykorzystamy istniejące zasoby QA innych grup i potencjalnie udostępnimy kod klientom i partnerom. Główne argumenty przeciwko rozwojowi Scali to: * QA będzie wymagało doświadczenia w Scali * Klienci będą potrzebowali doświadczenia w Scali Z mojego doświadczenia wynika, że Scala jest ogólnie łatwiejsza do odczytania niż Java przy minimalnej ekspozycji na język i że możliwość korzystania z istniejących narzędzi Java takie jak Junit zminimalizuje negatywny wpływ na istniejące strategie testowania. Oszacowałem, że w zależności od problemu programowanie w Scali może być o 25% szybsze niż równoważne programowanie w Javie. To tylko palec na wietrze w oparciu o moje osobiste doświadczenia. Jeśli ktoś ma dowody na wzrost wydajności, proszę o udostępnienie. Chciałbym również skompilować listę głównych korzyści płynących z używania Scali nad Javą. Podziel się swoimi ulubionymi. Dzięki, John


title: Ile czasu powinienem poświęcić na mój toolchain?

text: Jestem trochę szalony na narzędzia i często spędzam nawet 6-8 godzin tygodniowo na poszukiwaniu nowych narzędzi, ulepszaniu istniejących narzędzi, pisząc wtyczki lub adaptery lub bawiąc się nowymi narzędziami, aby sprawdzić, czy mi się podobają lepsze niż te, które mam. Nie licząc tego, że moja oficjalna dzienna praca polega w zasadzie na rozwijaniu łańcucha narzędzi dla dużej firmy. Czy powinienem poświęcać tyle czasu na ulepszanie mojego łańcucha narzędzi? Na czym powinienem się skupić, ulepszając go, aby zmaksymalizować swój czas?


title: Jaka jest różnica między DI a IoC?

text: > **Możliwy duplikat:** > Różnica między wstrzykiwaniem zależności (DI) a odwróceniem kontroli (IOC) Jestem nowy w Inversion of Control, Dependency Injection i wszystkim, co się z tym wiąże, więc przepraszam, jeśli nie jestem konkretny na moje pytanie: Czy jest jakiś magiczny kawałek kodu, dobre wyjaśnienie lub link, żebym mógł wreszcie rozróżnić pojęcia? Naprawdę uważam, że użycie Dependency Injection oznacza już użycie Inversion of Control, ale czy istnieje sposób na użycie Inversion of Control bez użycia Dependency Injection? Czytałem już artykuły Martina Fowlera, ale nadal uważam, że koncepcje są bardzo mylące.


title: Kładąc wszystko razem

text: Czytałem kilka książek na temat rozwoju w języku c# w ciągu ostatnich kilku miesięcy (clr przez c#, projektowanie aplikacji dla przedsiębiorstwa, c# 4 w skrócie tylko po to, aby dać ci pomysł). Naprawdę uważam, że było to warte zachodu ćwiczenie, jednak w tej chwili wydaje mi się, że lekko bombardowałem głowę teorią (chociaż starałem się zastosować to w praktyce tam, gdzie to możliwe). Pracowałem nad projektami w c# od czasu .net 2.0 tu i tam, więc mam kilkuletnie doświadczenie w programowaniu, teraz naprawdę staram się przejść na wyższy poziom. To, co czasami sprawia mi trudność, to stawianie tego w całości. Miałem nadzieję znaleźć jakiś przykładowy projekt, a może projekt open source lub coś podobnego, który próbuje połączyć wszystkie te aspekty rozwoju w duży projekt, który zajmuje się dość złożonym problemem (najlepiej setki klas, chociaż wiem, że to jest nie jest dobrym miernikiem złożoności), w prawdziwym sensie obiektowym, który obejmuje generyki, delegatów, usługi sieciowe, kilka różnych wzorców projektowych, linq lub nhibernate itp., mvc 3/4, z dokumentacją i testami jednostkowymi ... można sen Więc czy to możliwe? (edycja: bez pisania tego sam)


title: Jak często używa się makr „prawdopodobne” i „nieprawdopodobne”?

text: Makra często znane jako „prawdopodobne” i „nieprawdopodobne” pomagają kompilatorowi określić, czy „jeśli” będzie zwykle wprowadzane, czy pomijane. Korzystanie z niego powoduje pewne (raczej niewielkie) ulepszenia wydajności. Zacząłem ich używać od niedawna i nie jestem pewien, jak często takie podpowiedzi powinny być używane. Obecnie używam go do sprawdzania błędów `jeśli`s, które zwykle są oznaczone jako `nieprawdopodobne`. Na przykład: mem = malloc(rozmiar); if (unlikely(mem == NULL)) goto exit_no_mem; Wydaje się ok, ale sprawdzanie błędów zdarza się dość często, a co za tym idzie używanie wspomnianych makr. Moje pytanie brzmi, czy to za dużo, aby mieć "prawdopodobne" i "nieprawdopodobne" makra na każdym sprawdzającym błędy "jeśli"? Skoro już przy tym jesteśmy, jakie inne miejsca są często używane? * * * Edycja: Nawet jeśli moje pytanie jest bardziej ogólne, ale w moim obecnym użyciu znajduje się w bibliotece, która stanowi abstrakcję od podsystemu czasu rzeczywistego, więc programy stałyby się przenośne między RTAI, QNX i innymi. To powiedziawszy, większość funkcji jest raczej niewielka i bezpośrednio wywołuje jedną lub dwie inne funkcje. Wiele z nich to nawet „statyczne funkcje wbudowane”. Przede wszystkim nie jest to aplikacja, którą mógłbym profilować. Nie ma sensu „identyfikować wąskich gardeł”, ponieważ jest to biblioteka, a nie samodzielna aplikacja. Po drugie, jest to coś w rodzaju „Wiem, że to mało prawdopodobne, równie dobrze mogę powiedzieć to kompilatorowi”. Nie próbuję aktywnie optymalizować `if`.


title: Dlaczego każdy widżet miałby potrzebować odniesienia do swojego rodzica w prostym systemie widżetów?

text: Pracuję nad prostym systemem widgetów (pojedyncze okno, stały rozmiar). Każdy widżet dostaje swojego rodzica (tzn. widżet go zawierający) przekazywany do swojego konstruktora - z wyjątkiem widżetu głównego, który nazwałem _Screen_. Mam wątpliwości, czy takie podejście ma sens. Zrobiłem to, ponieważ większość systemów widżetów, których używałem wcześniej, to robi (Qt, GTK, ...), ale zdałem sobie sprawę, że są one nieco bardziej złożone niż moje: * Nie mam zmiany rozmiaru okna * Nie planuję do rozmiaru kontenerów w oparciu o rozmiary ich dzieci * Nie sądzę, że potrzebuję go do zarządzania pamięcią (używam C++), zamiast tego mogę użyć wspólnych wskaźników (w zasadzie jak to działa w Javie) ** Czy jest jakiś powód, dla którego widżet potrzebowałby odniesienia do swojego rodzica?** Zmiana tego jest poważną refaktoryzacją. Tak więc zanim przejdę dalej i zaimplementuję kontenery i układy, chcę mieć dobry pomysł, czy będę potrzebować tego rodzica. **Edytuj:** Pamiętaj, że rodzic i tak zna wszystkie swoje dzieci. Zastanawiam się tylko, czy dzieci też muszą znać rodzica.


title: Wreszcie wrzucam wyjątek do środka

text: Analizatory kodu statycznego, takie jak Fortify „narzekają”, gdy wyjątek może zostać zgłoszony w bloku `finally`, mówiąc, że `Użycie instrukcji throw wewnątrz bloku finally przerywa logiczną progresję przez try-catch-finally`. Normalnie się z tym zgadzam. Ale ostatnio natknąłem się na ten kod: SomeFileWriter writer = null; try { //zainicjuj program zapisujący //zapis do pliku } catch (...) { //obsługa wyjątków } ostatecznie { if (writer!= null) writer.close(); } Teraz, jeśli `writer` nie może być poprawnie zamknięty, metoda `writer.close()` zgłosi wyjątek. Należy zgłosić wyjątek, ponieważ (najprawdopodobniej) plik nie został zapisany po zapisaniu. Mogłem zadeklarować dodatkową zmienną, ustawić ją, jeśli wystąpił błąd podczas zamykania `writera` i wyrzucić wyjątek po bloku final. Ale ten kod działa dobrze i nie jestem pewien, czy go zmienić, czy nie. Jakie są wady zgłaszania wyjątku wewnątrz bloku `finally`?


title: Organizowanie powiązanych projektów i zależności do publikowania nuget

text: Pracowałem nad pisaniem powiązań .NET dla Rollbar, usługi raportowania błędów i komunikatów, takiej jak Airbrake. Moja biblioteka działa ładnie i jest opublikowana w galerii NuGet. Więc teraz chcę przenieść go na wyższy poziom użyteczności i zaimplementować w tym celu rozszerzenie NLog. Pociąga to za sobą pisanie kodu o wartości jednego ekranu i odwoływanie się do biblioteki NLog. To opakowanie. Mogę też zaimplementować jeden dla Log4Net. W tym momencie jest już rozmyte, jak mam to zorganizować i zarządzać nim za pomocą kontroli źródła i nuget. Jedną rzeczą na pewno jest to, że będą istnieć oddzielne pakiety nuget, dzięki czemu ludzie nie będą musieli instalować zależności, których nie chcą. Moje pytania to: 1. Czy powinienem tworzyć osobne repozytoria git dla biblioteki podstawowej oraz rozszerzenia NLog i rozszerzenia Log4Net? Wygląda na to, że łatwiej byłoby śledzić zmiany, mając wyraźnie oddzielone procesy budowania i takie tam. Może to ułatwić udział w projekcie (projektach) ... ale nie jestem pewien. 2. Czy powinienem odwoływać się do mojej biblioteki podstawowej Rollbar jako zależności bibliotek rozszerzeń, czy do ILMerge? Zaletą ILMerge jest to, że użytkownik potrzebuje tylko jednego odniesienia i biblioteki DLL. Dziwna część dotyczy wersjonowania. Na przykład jak mieć numery wersji, które mają sens, gdy zmienia się tylko biblioteka podstawowa lub zmienia się tylko rozszerzenie. Wydaje się również, że nuget nie wyświetla aktualizacji zależności zainstalowanych pakietów, tylko samych pakietów. Chciałbym, aby aktualizacje biblioteki podstawowej rosły jako aktualizacja, którą użytkownik powinien zainstalować! Przypuszczam, że jednym ze sposobów na to byłoby podbicie wersji rozszerzenia _i_ ustawienie wersji biblioteki zależności. To moja pierwsza próba napisania biblioteki open source, opublikowania jej i zarządzania nią. Chciałbym kilka opinii od ludzi, którzy się tym zajmowali, abym mógł to zrobić dobrze! Używam Albacore do mojego procesu kompilacji, za to, co jest warte. (Aktualny kod: https://github.com/mroach/RollbarSharp)


title: Spór dotyczący integracji danych (mogę nie rozumieć korporacyjnych narzędzi ETL)

text: Prowadziłem stałą rozmowę na temat projektu, który zamierzamy podjąć w moim miejscu pracy. Projekt dotyczy integracji danych. Nasi klienci chcą mieć możliwość integracji naszych danych z ich własnymi, przesyłając dane z ich systemów do naszych lub przenosząc dane z naszego systemu do swoich. Nie wierzę, że mówimy o „dużych danych”. Cała nasza baza danych to mniej niż 20 koncertów. Poszczególne przelewy od naszych klientów również będą bardzo małe - rzędu 10s MB, jeśli nie mniejsze. Głównym celem tego projektu jest zminimalizowanie ilości pracy, którą musi wykonać klient, który zwykle nie jest zbyt techniczny. W przeszłości ten problem został „rozwiązany”, gdy nasi klienci przesłali nam plik xml, który został przekształcony przez xlst przed zapisaniem w bazie danych, lub za pośrednictwem aplikacji WCF do eksportowania danych. Nie są to dobre rozwiązania. Moją pierwszą myślą było stworzenie interfejsu REST z bardzo dobrymi narzędziami do monitorowania i bibliotekami dla naszych klientów. Inną rozważaną opcją są duże narzędzia, takie jak IBM datastage lub Pentaho (lub podobne). Mój osobisty problem polega na tym, że kiedy patrzę na te narzędzia, nie widzę, jak mogą pomóc. Wygląda na to, że mają na celu skonfigurowanie transferów danych na dużą skalę, które odbywają się regularnie w danym formacie. Dodanie nowego importu/eksportu za pomocą tych narzędzi wymaga wielu ustawień zarówno dla nas, jak i klienta, czego staramy się unikać. Nie są również przydatne do aktualizacji danych w czasie rzeczywistym. Na koniec wygląda na to, że próbują zabić mrówkę za pomocą miotacza ognia - są wagi ciężkiej na problem z niewielką wagą. W przeciwieństwie do tego, w przypadku konfiguracji REST dane mogą być przesyłane w razie potrzeby, a konfiguracja musi odbywać się tylko na bardzo małym obszarze. Czy czegoś mi brakuje, jeśli chodzi o te rozwiązania ETL? Czy nie jestem wobec nich sprawiedliwy?


title: Czy istnieje genetyczny związek między architekturami ARM i PDP-11?

text: Czytając o architekturze ARM znalazłem wiele podobieństw do architektury PDP-11, która nie istniała między ARM a x86. Na przykład, * Rejestry ogólnego przeznaczenia o nazwie Rx w porównaniu do AX, BX,... dla x86 * Jednolity plik rejestru (wszystkie rejestry pozwalają na wszystkie rodzaje operacji) * Podobne nazwy dla licznika programu (PC zarówno na ARM jak i PDP), porównano do IP w x86. * Włączenie Licznika Programu do ogólnego pliku rejestru (w PDP może być również określany jako R7, w ARM - jako R15, oba ostatnie rejestry w pliku). * Włączenie portów I/O do ogólnej przestrzeni adresowej (tj. adresowanie ich jako pamięci) w porównaniu z wydzieloną przestrzenią adresową I/O w x85 (i specjalnymi instrukcjami I/O). * Używanie 3-literowych podstawowych mnemotechnik asemblera (TST w porównaniu do "test" w x86) z sufiksami określającymi typ danych (takich jak "B" dla bajtu, w porównaniu do konstrukcji takich jak "byte ptr" w x86) * Używanie BNE, BEQ i innych B _warunek_ instrukcje dla oddziałów. * Użycie symbolu „#” przed liczbą w celu określenia bezpośredniej wartości (w porównaniu do „.” w x86) itp. Czy istnieje więc jakaś historyczna relacja między ARM i PDP, która sprawia, że są one bliższe sobie niż x86?


title: Dlaczego opracowywanie nowych produktów zawsze przebiega w pośpiechu?

text: Jeśli pracujesz nad czymś **nowym**, masz na to mniej niż wymagany czas, a czasami oczekuje się, że będziesz pracować do późna, w weekendy itp. (nawet jeśli czekasz na ludzi, którzy nie pracują w tych godzinach). Kiedyś miałem nawet szefa, który przyszedł i powiedział, żebym upewnił się, że mam coś do zrobienia w sobotę. Wydaje się to być prawdą nawet wtedy, gdy żadna konkurencja nie wprowadza na rynek czegoś podobnego. Jeśli pracujesz nad **ulepszeniem funkcji** lub **konserwacją**, zachęcamy Cię do poświęcenia czasu, przejrzenia opcji, przestudiowania różnych rzeczy itp. Czasami mam nawet wrażenie, że kierownictwo oczekuje, że złapiesz zajmij się swoją fantastyczną piłką nożną i analizuj tematy takie jak Game of Thrones, Call of Duty itp. Moje pytanie brzmi: dlaczego nie wziąć dodatkowego czasu z istniejącego oprogramowania i poświęcić go na nowe projekty, które są głodne czasu?


title: Plusy i minusy pracy zdalnej/z domu

text: Nigdy nie miałam okazji pracować z domu w niektóre dni, ale na pewno chciałabym spróbować, jeśli mogę. Jakie są plusy i minusy? Wymienię kilka, które przychodzą mi do głowy. Plusy: * Nie musisz wykonywać żadnej pracy. (To żart) * Możesz być dużo bardziej produktywny. Bez dojazdów, zrelaksowany, bez spotkań, bez przerw Minusy: * Mniej wysiłku zespołowego. * Inni członkowie zespołu mogą zostać wstrzymani, ponieważ muszą czekać na informacje dla członka spoza witryny. Przepraszamy, jeśli wcześniej o to pytano — przeszukałem, ale nie mogłem znaleźć dyskusji o zaletach i wadach. Edycja: Wygląda na to, że płatki owsiane już to omówiły! :-)


title: Rozszerzanie modelu Struktury Złożonej ogólnie/w Enterprise Architect

text: Obecnie pracuję nad projektem, który integruje techniki specyficzne dla domeny w narzędziu do modelowania Enterprise Architect poprzez profile UML. Model specyficzny dla domeny prawie pasuje do struktury modelu struktury złożonej, z kilkoma ograniczeniami, więc próbuję użyć modelu jako podstawy dla moich ograniczeń. Pytania: 1) Jak mogę generalnie rozszerzyć modele (takie jak modele konstrukcji kompozytowych), które same leżą w warstwie M1 Meta-Object Facility? 2) Czy element „Część” diagramów struktur kompozytowych jest samą metaklasą, którą można rozszerzyć o stereotypy w profilach UML? Ponieważ literatura na te tematy nie jest zbyt wyczerpująca, również szukam sugestii.


title: Opłaty klienta za rozwój SaaS?

text: Sytuacja: Przez wiele lat korporacja ACME zlecała mi wykonanie zadania B. Przez lata poznałem tajniki „Zadania A” (praca ręczna). Razem `Zadanie A` \+ `Zadanie B` = gotowy produkt korporacji ACME. Więc teraz odkryłem możliwość zoptymalizowania procesu „Zadania A”. Ale aby opracować system, który pomoże korporacji ACME pracować wydajniej, muszę poświęcić wiele godzin pracy programistycznej z góry. Może 1-2 lata na prototypowanie, testowanie i wreszcie wdrożenie, wtedy będę gotowy do skonfrontowania ich z moim rozwiązaniem. Pomyślne przejście ze starego sposobu robienia rzeczy na moją nową zajmie mi kolejny rok. Więc w tej sytuacji, jaki jest właściwy sposób ładowania? Czy powinienem po prostu zassać wszystko na początku? A może pobierać opłaty za wstępny rozwój? Ostatecznie będą musieli zapłacić za każdym razem, gdy użyją mojego SaaS, aby ukończyć „Zadanie A”. Zauważ, że mój SaaS jest przydatny tylko dla korporacji ACME, nie widzę zbytniego zastosowania mojego produktu SaaS na rynku masowym.


title: Jak zarządzać dostosowaniami kodu źródłowego dla wielu użytkowników?

text: Kiedy pisałem oryginalny kod, używałem TortoiseSVN do zarządzania wersjami, ale później pojawił się nowy problem. Klienci chcieli dostosowania kilku rzeczy, a teraz lista klientów rośnie. Chcę zachować kontrolę wersji w zależności od klientów. Chcę zachować główny kod źródłowy, a następnie dodawać zmiany wersji w zależności od klientów. Czy jest jakiś prosty sposób?


title: Jaki jest najlepszy sposób na równoważenie obciążenia aplikacji JavaScript?

text: Piszę wiele aplikacji JavaScript i w wielu różnych okolicznościach przeglądarka przestanie odpowiadać lub wyświetli błąd "slow script". Nawet jeśli postępuję zgodnie z najlepszymi praktykami, inicjując duże zestawy danych, złożoną animację lub gdy jednocześnie uruchamia się zbyt wiele programów obsługi zdarzeń, muszę uwzględnić dodatkowe setTimeouts lub requestAnimationFrames wokół bloków skryptu, aby je zrównoważyć. Wygląda na to, że powinien istnieć jakiś standardowy sposób zarządzania obciążeniem przeglądarki dla dużych aplikacji JavaScript. Jakieś pomysły? Wygląda na to, że muszą o tym myśleć projektanci aplikacji JS, ale nie mogę znaleźć niczego w Internecie ani na stosie. _**edytuj_** Doceniam wszystkie odpowiedzi. Moje pytanie brzmi _nie_ "Jak mogę napisać wydajny Javascript?" co wydaje się być pytaniem, na które odpowiadają obecne odpowiedzi. Moje pytanie brzmi: Jak mogę zrównoważyć obciążenie wielu kolejnych wątków JavaScript działających w tej samej przeglądarce? Jestem w pełni świadomy wszystkich informacji zamieszczonych do tej pory w odpowiedziach i doceniam plakaty, ale szukam frameworka lub wzorca projektowego, który równoważy wykonywanie skryptów w przeglądarce. To pytanie jest powszechne w wielu innych językach, a devops zadaję po prostu to samo pytanie dla javascript.


title: Czy potrzebujesz umiejętności sprzętowych, aby zostać programistą robotem?

text: Chcę wiedzieć: _Czy potrzebujesz umiejętności sprzętowych, aby zostać programistą robotów?_


title: Pomóż mi zrozumieć, jak indeksować piksel na obrazie

text: Spojrzałem na kod implementacji tego artykułu Segmentacja oparta na wykresach autorstwa Pedro F. Felzenszwalba Ale nie rozumiałem, jak w poniższym kodzie, że `y * szerokość + x` służy do budowania wykresu z obrazu . // zbuduj krawędź wykresu *edges = new edge[szerokość*wysokość*4]; liczba int = 0; for (y = 0; y < wysokość; y++) { for ( x = 0; x < szerokość; x++) { if (x < szerokość-1) { krawędzie[liczba].a = y * szerokość + x; krawędzie[liczba].b = y * szerokość + (x+1); krawędzie[liczba].w = diff(gładkie_r, gładkie_g, gładkie_b, x, y, x+1, y); liczba++; } if (y < wysokość-1) { krawędzie[liczba].a = y * szerokość + x; krawędzie[liczba].b = (y+1) * szerokość + x; krawędzie[liczba].w = diff(gładkie_r, gładkie_g, gładkie_b, x, y, x, y+1); liczba++; } if ((x < szerokość-1) && (y < wysokość-1) { krawędzie[liczba].a = y * szerokość + x; krawędzie[liczba].b = (y+1) * szerokość + (x+1); krawędzie[liczba].w = diff(gładkie_r, gładkie_g, gładkie_b, x, y, x+1, y+1); liczba++; } if ((x < szerokość-1) && (y > 0)) { krawędzie[liczba].a = y * szerokość + x; krawędzie[liczba].b = (y-1) * szerokość + (x+1); krawędzie[liczba].w = diff(gładkie_r, gładkie_g, gładkie_b, x, y, x+1, y-1); liczba++; } } }


title: Algorytm do znalezienia ostatniej przydzielonej pracy dla każdego pracownika

text: Powiedzmy, że mamy n miejsc pracy ponumerowanych od 1 do n oraz k pracowników ponumerowanych od 1 do k. Wszystkie prace są równie trudne, ale niektórzy pracownicy są bardziej wydajni niż inni, więc otrzymujemy czas potrzebny każdemu pracownikowi na wykonanie swojej pracy. W rzeczywistości nie ma dwóch pracowników, którzy są w stanie zakończyć pracę w tym samym czasie. Na początku wszyscy pracownicy wykonują pracę o takim samym numerze jak oni (pierwszy wykonuje pierwszą, druga drugą itd.). Jeśli ktoś kończy swoją pracę, zaczyna wykonywać pracę z najniższym numerem, którego nikt nie zaczął wykonywać. W przypadku remisu (dwóch lub więcej pracowników kończy w tym samym czasie) pracownik o niższym identyfikatorze zaczyna wykonywać pracę o niższym numerze, a drugi o wyższym numerze. Pracownicy pracują, dopóki wszystkie prace nie zostaną wykonane. Dla każdego pracownika chcielibyśmy zwrócić numer ostatniej wykonanej przez niego pracy. Przykład: n = 10 k = 3 wydajność pracowników: 1->3, 2->5, 3->6 Na początku robotnicy jeden, dwóch, trzech rozpoczyna pracę: 1,2,3. W czasie 3 jeden kończy pracę i zaczyna robić 4. W czasie 5 dwoje zaczyna robić 5. W czasie 6 zarówno jeden, jak i trzej kończą pracę - zaczynają robić odpowiednio 6 i 7. O godzinie 9 jeden zaczyna robić 8. O godzinie 10 dwaj zaczynają robić 9. A w końcu o godzinie 12 jeden zaczyna robić 10, ostatnią pracę. Dlatego odpowiedź brzmi: 1->10, 2->9, 3->7. Problem ten można łatwo rozwiązać, symulując tę procedurę z zachowaniem priorytetowej kolejki pracowników. Czas działania tego algorytmu to O(nlogn). Zastanawiam się, jak rozwiązać ten problem szybciej, bez symulacji, dla dużych wartości n.


title: Języki i ich licencje?

text: Po pierwsze przepraszam za złą terminologię, brak badań lub słabą odpowiedź na moje pytanie. Powinienem zauważyć, że początkowo miałem jedno wielkie pytanie, ale uznałem, że pierwsza połowa jest trochę niezależna, więc zamieściłem je osobno, link. Moje rozumienie „celów komercyjnych” jest jak dotąd oparte na OP tego pytania. Więc w zasadzie moja następna praca będzie pierwszą, która będzie zajęta w celach komercyjnych, więc chcę się nauczyć, jak dokonywać odpowiednich wyborów technologicznych, które stawiają mnie na bezpiecznej stronie kwestii prawnych, **weźmy Javę jako przykład przypadku ** : 1. Zakładam, że jedyne, o co muszę się martwić, to licencjonowanie JDK. 2. Wygląda na to, że licencja na JDK to ta, która wydaje się nie budzić żadnych obaw handlowych, z wyjątkiem zawartości tabeli 1-1 z tego linku, o której nigdy nie słyszałem i prawdopodobnie nie będę się krzyżował. 3. Z punktu 2 i różnych implikacji, że JDK głównie przestrzega GPL, a także z tego, co zrozumiałem z GPL, wydaje się, że Java jest na zielono, jeśli chodzi o cele komercyjne, pod warunkiem, że właściciel pliku wykonywalnego jest również właścicielem odpowiedni kod źródłowy. **P1:** Czy moje wcześniejsze wnioski są poprawne? **P2:** Proces badawczy był naprawdę wyczerpujący z mojego punktu widzenia. Czy są jakieś kluczowe elementy, którymi należy się kierować, sprawdzając te rzeczy? czy istnieją zasoby/społeczności internetowe, które przeprowadziły już większość tych badań weryfikacyjnych? Prześlij dzięki.


title: Czy w społeczności Ruby on Rails jest zbyt dużo abstrakcji?

text: Railsy wydają mi się idealnym poziomem abstrakcji dla większości typów tworzenia stron internetowych. Jednak po obserwowaniu, jak niektórzy doświadczeni konsultanci Rails budują aplikację, stwierdzam, że używają Gems do tego stopnia, że często trudno jest zorientować się, co się dzieje w kodzie. Jako średniozaawansowany programista Railsów, miałem dość trudności z przekopywaniem się przez ich kod, aby dowiedzieć się, jak to działa, i naprawdę nie mogę zobaczyć korzyści z tego podejścia. Więc czy to ja, czy Railsy, dzięki temu, że mają tak żywą społeczność współpracowników, zachęcają do nadmiernej abstrakcji?


title: Nazywanie oprogramowania i unikatowość

text: Co robisz, jeśli chodzi o nazywanie Twojego oprogramowania _produktem_ (aplikacją lub biblioteką)? Wydaje się niemożliwym wybranie nazwy, która nie jest już przyjęta przez inne oprogramowanie, niezależnie od tego, czy jest to czyjś mały projekt hobbystyczny, czy firma go sprzedająca. Wszyscy wiemy, że Phoenix stał się Firebirdem, który stał się Firefoksem, ponieważ kolidował z innymi nazwami oprogramowania. Jak wyjątkowa musi być nazwa? Phoenix to nazwa BIOS-u komputera - mało podobnego do przeglądarki internetowej, prawda? Weźmy kontrprzykład: Fedora system operacyjny i Fedora oprogramowanie repozytorium, szczęśliwie współistniejące. Innym kontrprzykładem jest midori framework Javascript oraz midori przeglądarka internetowa. Jakie kroki podjąłbyś, aby upewnić się, że nazwa Twojej aplikacji lub biblioteki nie została podjęta przez kogoś innego i jak daleko byś szukał – pod względem typu produktu – szukając innych rzeczy o tej samej nazwie?


title: PHP, HTML, Javascript i pisanie dobrych praktyk

text: Zdałem sobie sprawę, że muszę napisać specyfikację konwencji na temat kodowania HTML, JavaScript i PHP dla siebie i mojego zespołu. W tworzeniu stron internetowych, podobnie jak w C++, zdecydowanie jestem fanem wcięć i komentarzy. Niemniej jednak często w swojej pracy spotykam się z kodem HTML+JavaScript+PHP, który nagle przyprawia mnie o ból głowy. Staram się, aby mój kod był czytelny, ale to, co wydaje mi się lepsze (do wcinania i komentowania), wydaje się nie fascynować moich kolegów z zespołu, więc zastanawiałem się, czy istnieje najlepsza lub przynajmniej wspólna dobra praktyka podczas pisania „hybrydy ” dokumenty tak jak dzisiejsze strony internetowe, które z dnia na dzień stają się coraz bardziej złożone. Zdaję sobie sprawę, że prawdopodobnie w kodzie dzisiejszych stron internetowych jest trochę zawiły, ale zastanawiam się, czy dobra konwencja dotycząca tych aspektów już istnieje.


title: Najlepsze praktyki wykonywania niezaufanego kodu

text: Mam projekt, w którym muszę umożliwić użytkownikom uruchamianie dowolnego, niezaufanego kodu Pythona (trochę w ten sposób) na moim serwerze. Jestem całkiem nowy w Pythonie i chciałbym uniknąć popełniania błędów, które wprowadzają luki w zabezpieczeniach lub inne luki w systemie. Czy są dostępne jakieś najlepsze praktyki, zalecana lektura lub inne wskazówki, które możesz mi dać, aby moja usługa była użyteczna, ale nie nadużywana? Oto co rozważałem do tej pory: * Usuń `__builtins__` z kontekstu `exec`, aby uniemożliwić używanie potencjalnie niebezpiecznych pakietów, takich jak `os`. Użytkownicy będą mogli korzystać tylko z pakietów, które im udostępnię. * Użyj wątków, aby wymusić rozsądny limit czasu. * Chciałbym ograniczyć całkowitą ilość pamięci, która może być przydzielona w kontekście `exec`, ale nie jestem pewien, czy jest to w ogóle możliwe. Istnieje kilka alternatyw dla zwykłego `exec`, ale nie jestem pewien, która z nich byłaby tutaj pomocna: * Użycie `ast.NodeVisitor` do wyłapania wszelkich prób uzyskania dostępu do niebezpiecznych obiektów. Ale jakich przedmiotów powinienem zabronić? * Wyszukiwanie wszelkich podwójnych podkreśleń w danych wejściowych. (mniej wdzięku niż powyższa opcja). * Używając `PyPy` lub czegoś podobnego do piaskownicy kodu. _UWAGA:_ Zdaję sobie sprawę, że istnieje przynajmniej jeden interpreter oparty na JavaScript. To nie zadziała w moim scenariuszu.


title: Wysoka dostępność vs. Skalowanie w chmurze

text: Pracuję dla firmy, która opracowuje serwer WWW działający w centrum danych klienta. Klient chce, aby serwer miał gorące przełączanie awaryjne, a ja obecnie badam podejścia HA, takie jak Pacemaker i LVM (również kopia zapasowa może coś robić, więc używam również równoważenia obciążenia). Wydaje mi się, że niektóre z tych funkcji zapewniają również technologie cloud computing (np. chmura prywatna). W szczególności automatyczne skalowanie, które jest zapewniane przez EC2 i Cloud Foundry, w pewnym stopniu zajmuje się równoważeniem obciążenia i obsługą przełączania awaryjnego. Czy jako nowa aplikacja lepiej byłoby poświęcić swój czas na skonfigurowanie aplikacji jako chmury prywatnej, czy też poprzez wykorzystanie wypróbowanych i prawdziwych architektur HA?


title: Skompilować i uruchomić zgłoszenia sędziego online na tym samym lub oddzielnym serwerze?

text: Zamierzam stworzyć platformę sędziowską online. Szukałem w Internecie niektórych platform sędziowskich online (mam na myśli platformy, które mają dostępny kod źródłowy i mogą być hostowane przez moje inne, a nie coś takiego jak Codeforces). Większość z nich ma interfejs sieciowy napisany w PHP (lub czymś innym). Gdy użytkownicy przesyłają rozwiązania problemów, zgłoszenia są wysyłane do innych programów (program po stronie serwera napisany w C++, Javie lub czymś innym), który jest hostowany na tym samym serwerze lub nie, za pośrednictwem gniazda. Jakie są zalety tego projektu? Dlaczego nie zrobić tego przez PHP, z funkcjami takimi jak `exec()`? Który projekt docenisz bardziej?


title: Najlepszy sposób na wybór losowego elementu z listy ważonej

text: Chcę stworzyć prostą grę. Co jakiś czas powinien pojawić się power up. W tej chwili różne rodzaje dopalaczy są przechowywane w tablicy. Jednak nie każde wzmocnienie powinno pojawiać się równie często: na przykład mnożnik punktów powinien pojawiać się znacznie częściej niż dodatkowe życie. Jaki jest najlepszy/najszybszy sposób losowego wybrania elementu z listy, z której niektóre elementy powinny być wybierane częściej niż inne?


title: Czy baza danych NoSQL jest dla mnie odpowiednia?

text: Zajmuję się tworzeniem aplikacji WPF, której podstawowa funkcjonalność polega na tworzeniu grafu dużego obiektu (często dziesiątek tysięcy encji), którego użytkownik może modyfikować pewne części, a następnie zapisać do bazy danych. Wykres można również później pobrać, zmodyfikować i ponownie zapisać. Możliwe, że użytkownik może tworzyć dziesiątki takich wykresów dziennie. Aplikacja zapewnia również użytkownikowi różne sposoby wyszukiwania encji w bazie danych (głównie wyszukiwania tekstowe w różnych polach), prezentując użytkownikowi wyniki wyszukiwania i umożliwiając użytkownikowi wybranie jednego, co spowoduje pobranie odpowiedniego wykresu encji w całości i zaprezentowane użytkownikowi do przeglądania i modyfikacji jak powyżej. Obecnie używam Entity Framework i SQL Express, ale jestem zaniepokojony niektórymi aspektami architektury i projektu, a klient nie chce instalować SS. Dopiero niedawno natknąłem się na koncepcję baz danych NoSql i wydaje mi się, że mogą pasować do tego, co robię, ale mam kilka pytań. Po pierwsze, zakładam, że wydajność nie byłaby gorsza niż EF podczas czytania lub pisania jednego z tych wykresów obiektów? A co z funkcją wyszukiwania w mojej aplikacji? Czy baza danych NoSql będzie obsługiwać tego rodzaju rzeczy i jaka będzie wydajność, biorąc pod uwagę rozmiar i ilość „dokumentów”, które prawdopodobnie będę mieć. A co z danymi wyszukiwania (odniesienia)? Czy powieliłbym takie dane w każdym dokumencie NoSQL, czy też zachowałbym je wszystkie w jednym dokumencie NoSql i przechowywał ich identyfikatory w głównych dokumentach? Na koniec jakieś zalecenia dotyczące produktu? MongoDb i RavenDb wydają się być głównymi rywalami OSS dla systemu Windows.


title: Lepszy JavaDoc?

text: Standardowy szablon JavaDoc (Doclet) niewiele się zmienił aż do ostatniego JDK7. Moim zdaniem szablon JDK7 tylko utrudnił przeglądanie. Sprawdziłem kilka docletów innych firm, ale żaden nie jest tym, czego chcę. Zacząłem więc projektować od podstaw nowy szablon JavaDoc o otwartym kodzie źródłowym, aby poprawić użyteczność. Oto coś, o czym myślałem, * Wyszukiwanie. Należy to zrobić po stronie klienta, aby działał w lokalnym systemie plików. * Interaktywna nawigacja w stylu IDE. Standardowy JavaDoc używa dwóch ramek do oddzielnego wyświetlania pakietów i klas, co jest znacznie mniej użyteczne niż nawigator podobny do Eclipse. Co gorsza, jeśli klikniesz wewnątrz ramki po prawej stronie, indeks pakietu i indeks klas nie zostaną odpowiednio odświeżone. Nie masz pojęcia, gdzie jesteś. * Adresy URL. Jedną z wad ramek jest to, że adres URL nie zmienia się zgodnie z ramkami. To bardzo frustrujące, że nie możesz wysłać adresu URL JavaDoc do kogoś, chyba że wyraźnie sprawdzisz adres URL pojedynczej ramki. * Widzieć i czuć. Nie musisz być projektantem, aby zobaczyć, że JavaDoc jest brzydki. Chcę ulepszyć JavaDoc i upewnić się, że robię to dobrze. Pytanie, na które należy odpowiedzieć, brzmi: Czego oczekujesz od lepszego JavaDoc?


title: Strategia wersjonowania w publicznym repozytorium

text: Załóżmy, że opracowuję bibliotekę (javascript), która jest hostowana w publicznym repozytorium (np. github). Moim celem w zakresie przypisywania i zwiększania numerów wersji jest przestrzeganie wytycznych wersjonowania semantycznego. Teraz w moim projekcie jest wiele plików, które składają się na rzeczywistą bibliotekę i kilka plików, które ją „obsługują”, te ostatnie to dokumenty, zestaw testowy itp. Z mojego punktu widzenia numery wersji powinny dotyczyć tylko rzeczywista biblioteka — nie projekt jako całość — ponieważ sama biblioteka jest „jednostką”, która definiuje publiczne API. Nie jestem jednak zadowolony z takiego podejścia, bo np. poprawka w zestawie testowym stanowi „ulepszenie” w moim projekcie, które nie znajdzie odzwierciedlenia w numerze wersji (ani w dokumentacji zawierającej odniesienie do niej). Na bardziej praktycznym poziomie różne narzędzia, takie jak menedżery pakietów, mogą (co zrozumiałe) nie pasować do tej strategii. Na przykład podczas próby opublikowania zmiany, która nie jest odzwierciedlona w numerze wersji, „npm publish” kończy się niepowodzeniem z sugestią „Zderz pole „wersja”, ustaw flagę --force lub npm cofnij publikację”. Czy robię to źle?


title: Czy mogę wziąć rok wolnego bez szkody dla mojej kariery?

text: Pracuję od czasu, gdy przez ostatni rok ukończyłem studia w banku jako programista, zaczynając od utrzymania starszej aplikacji, a następnie przechodząc do opracowywania nowych przepływów pracy. Praca jest w porządku, ale mój pracodawca tak naprawdę nie rozumie, jak działa rozwój. Rozważam skorzystanie z możliwości nauczania języka angielskiego w obcym kraju przez rok. Do czasu wyjazdu będę pracował już dwa lata jako programista. Czy wzięcie rocznego urlopu może negatywnie wpłynąć na moją karierę na dłuższą metę, kiedy wrócę, aby spróbować znaleźć pracę?


title: Dlaczego programiści używają indeksowania opartego na jedynce dla numerów wierszy w kodzie źródłowym?

text: > **Possible Duplicate:** > Dlaczego liczba wierszy w programie Visual Studio nie jest liczona od zera? Dlaczego górna linia w pliku kodu źródłowego nie jest oznaczona numerem linii 0? tj. w pliku źródłowym, który miał 10 linii, spodziewałbym się, że numery linii będą wynosić 0-9, ale tak nie jest! Teraz `grep`, `awk`, `sed` itd. wydają się być numerowane od 1, więc zakładam, że jest to ustanowiona konwencja nie bez powodu. Niedawno przyszło mi do głowy, że dla prawie każdej innej struktury, z którą programista ma do czynienia w swojej codziennej pracy, konwencją jest liczenie od 0 - a plik źródłowy jest tak samo jak lista wierszy, tak jak wiersz lista znaków (afaik list of chars jest niezmiennie indeksowana 0). Musiałem otworzyć edytor tekstu i sprawdzić, czy górna linia pliku jest oznaczona numerem 1! Zastanawiałem się tylko, czy jest ku temu dobry powód, czy może to tylko niefortunna konwencja historyczna.


title: Jaka prosta gra jest dobra do nauki zasad OO?

text: Muszę przygotować propozycję projektu dla moich uczniów, oto kilka szczegółów: 1. Projekt powinien być oparty na koncepcjach OO: enkapsulacja, interfejsy, dziedziczenie, klasy abstrakcyjne 2. Idealna gra, aby utrzymać wysokie zainteresowanie 3. Nie GUI, tylko konsola 4. Efektywny czas na ukończenie tego: ~ 6 dni (1 osoba na projekt) Znalazłem jeden fajny przykład gry z komórkami mięsożerców i roślinożerców w kropli wody (tablica), to gra życia skręcać. To trochę za proste. Jakieś pomysły? Dodatkowe informacje: \- język to C# \- bez AI i bez skomplikowanych reguł


title: Jaka jest różnica między składnią a semantyką?

text: Zawsze myślałem, że odwoływanie się do składni języka jest tym samym, co odwoływanie się do semantyki języka. Ale poinformowano mnie, że najwyraźniej tak nie jest. Co za różnica?


title: Czy cele Startup Weekendu są realistyczne?

text: Planuję wziąć udział w Startup Weekend i próbuję sprawdzić, czy to, co proponują, jest rzeczywiście opłacalne. Na pierwszej stronie mówią: > Nie mów. Wszystkie działania. Uruchom startup w 54 godziny. Czy to realistyczne? Czy tego typu wydarzenia zapewniają poziom sieci i informacji wymaganych do zrobienia czegoś takiego?


title: Czy zawartość powinna być dystrybuowana z aplikacjami korzystającymi z licencji Open Source?

text: Zajmuję się tworzeniem aplikacji webowej opartej na bazie danych z rozbudowaną zawartością. Aplikacja zostanie wydana na licencji GNU GPL v3. Natomiast treści byłyby licencjonowane przy użyciu licencji Creative Commons. Aby przedstawić krótki kontekst, jest to strona e-learningowa, na której udostępniam materiały szkoleniowe. Dodatkowo planuję udostępnić zrzut bazy danych wraz z kodem źródłowym. Powodem jest to, że można by skonfigurować i faktycznie korzystać z aplikacji, biorąc pod uwagę zawartość. Mam dwa pytania w związku z tym: 1. Czy faktycznie powinienem dołączyć zrzut bazy danych wraz z kodem źródłowym? Jeśli tego nie zrobię, użytkownik musiałby stworzyć wszystko sam, co nie jest pożądane. 2. Jeśli powyższa odpowiedź brzmi „tak”, jaka licencja ma zastosowanie do fizycznego pliku zawierającego zawartość bazy danych? Należy pamiętać, że nie można używać żadnego innego rodzaju licencji na kod i zawartość i obie muszą być licencjonowane. PS: Jeśli to pytanie wydaje się nie na temat, czy mógłbyś wskazać bardziej odpowiednią witrynę?


title: Dlaczego XML ma być niezależny od oprogramowania i sprzętu?

text: Studiując cechy XML, dowiedziałem się, że XML jest niezależny od oprogramowania i sprzętu. Czy ktoś może mi wyjaśnić, dlaczego tak się rozumie?


title: Dobry wzorzec projektowy dla internetowego interfejsu API, w którym modele/jednostki można przeszukiwać według kluczy obcych

text: Miałem nadzieję, że ktoś może mieć jakieś pomysły na stworzenie internetowego interfejsu API RESTful, w którym modele/jednostki można przeszukiwać za pomocą klucza obcego. Widzę wiele samouczków, w których funkcjonalność polega na wyświetlaniu wszystkich rekordów w całym modelu lub pobieraniu pojedynczego rekordu z modelu za pomocą klucza podstawowego, ale nie za pomocą dowolnego/obcego klucza. To może być tak proste, jak sprawdzenie dodatkowych warunków we wniosku, ale pomyślałem, że mimo to otrzymam poradę.


title: Jak radzisz sobie z projektantami stron internetowych, którzy zbyt boją się czytać i dotykać kodu PHP?

text: Zostałem wynajęty do stworzenia strony internetowej i pracuję z projektantem (którym jest facet, który ma kontakt z klientem i zatrudnił mnie, więc nie, nie mogę skopać mu tyłka =) ), który za bardzo się boi dotykać kodu php i jest zbyt nowicjuszem w html i css, aby dać mi wystarczająco dobre modele, więc dzisiejsza praca będzie polegała na przejrzeniu jego nowego modelu html na wpół zaprogramowanej stronie i usunięciu `<div>` i zmiana klas i tym podobne. Czy istnieje jakieś narzędzie lub lepszy przepływ pracy, który ułatwi to nam obojgu? Może radzę sobie z tym zupełnie w niewłaściwy sposób, jestem nowy w tworzeniu stron internetowych i nie znam wystarczająco HTML/CSS (a on podobno wie), aby po prostu dać mi graficzną makietę i zrobić Całą rzecz, więc robimy, że daje mi statyczną stronę HTML, która wygląda tak, jak chce, i umieszczam wokół niej `<?php ?>` =) Czy ktoś może mi udzielić porady na ten temat?


title: Kto w Scrumie weryfikuje „Gotowe”?

text: Jestem kierownikiem ds. kontroli jakości/testów w mojej organizacji i do dziś weryfikowałem jakość oprogramowania (testy napisane i wykonane oraz naprawione błędy). Kto to zweryfikuje w Scrumie? Skąd mam wiedzieć, że zespół napisał i wykonał wszystkie właściwe testy? Z drugiej strony obawiam się, że jeśli będę kontynuował weryfikację, zespół nie poczuje się wystarczająco wzmocniony. Ale potrzebuję jakiegoś procesu weryfikacji, że „Gotowe” to rzeczywiście „Gotowe”. Co sugerujesz?


title: Czy istnieje licencja OSS, która działa na to:

text: Załóżmy, że zaczynałeś jako usługa SaaS z modelem biznesowym freemium, takim jak 37Signals - Basecamp lub Dropbox itp. Czy istnieje licencja OSS, która mówi, że możesz używać kodu źródłowego itp., ale nie możesz wydać opartego na nim SaaS, zasadniczo wydanego w dobrym wiara z oczekiwaniami niekonkurowania. np. gdyby 37Signals udostępniło źródło dla highrise, basecamp itp., ktoś mógłby założyć 37signals4lesss.com (choć po zbudowaniu tej samej logiki aprowizacji) i uszkodzić podstawowy model biznesowy.


title: Naśladuj funkcjonalność miejskiego sterowca

text: Mój szef chce funkcji, która "naśladuje" funkcjonalność Urban Airship... za dwa tygodnie. Co mogę mu powiedzieć?


title: Czy w naszym scenariuszu powinniśmy użyć projektu wielomodułowego Mavena?

text: **Sytuacja** Obecnie pracuję w projekcie, który rozwija kilka usług RESTful, które częściowo współdziałają ze sobą. Jako przykład: * Usługa A używa Usługi B * Usługa C nie używa niczego * Usługa D używa Usługi C * większość Usług korzysta ze wspólnego projektu Utilities. Nie ma rzeczywistego współdzielenia kodu między usługami, ściśle opierają się one na zdefiniowanym interfejsie API RESTful. Util zawiera pomocniki do testowania, pomocniki do biblioteki bezpieczeństwa, .... Obecnie każdy projekt jest samodzielny w swoim własnym repozytorium git. Podczas rozwoju były momenty, kiedy było to nieco denerwujące: * wiele miejsc do zarządzania zależnościami (usługi współdzielą zależności z bibliotekami stron trzecich) * każdy projekt musi być (maven) wydany osobno (osobiście to lubię) * podczas pracy " pomiędzy" projektami (praca nad usługą i praca nad narzędziem z tego powodu) prowadzą do 2 próśb o sprawdzenie, z powodu 2 projektów (pull-requests) **Pytanie** Jedno w zespole zaproponowane jako rozwiązanie powyższych problemów do scalenia wszystkie repozytoria i projekty git w jedno repozytorium git i jeden projekt wielomodułowy maven. Oprócz moich własnych obaw co do pomysłu (brak współdzielenia kodu, tylko jako powszechna zależność, zależność od API pomiędzy niektórymi (nie wszystkimi) usługami,...) chciałbym wiedzieć: **Czy są znane zalety/wady tego Plan?** Nie podoba mi się, że to zły argument.


title: Separacja obaw i bezpieczeństwo

text: System, który opracowuję, został zaprojektowany z myślą o wielu organizacjach, z użytkownikami i rolami dla każdej organizacji. Niektóre organizacje mogą wchodzić w interakcje, inne nie, i generalnie organizacje nie mogą przeglądać ani modyfikować danych nawzajem, z pewnymi wyjątkami. Mam model klasy A, który manipuluje przechowywaniem danych w jakimś stałym pojemniku do przechowywania. Mam kontroler klasy B, który waliduje dane wejściowe (w tym weryfikację praw dostępu) do obiektów klasy A. Klasy kontrolera znajdują się w osobnej bibliotece niż klasy modelu. Cała interakcja użytkownika jest wykonywana z klas widoków, które ponownie znajdują się w oddzielnej bibliotece (w tym przypadku wyeksponowane jako usługi sieciowe). Wydaje się jednak, że istnieje potencjalne zagrożenie bezpieczeństwa w utrzymywaniu logiki kontroli dostępu oddzielnie od modelu, ponieważ nie będą przeprowadzane żadne kontrole bezpieczeństwa, jeśli do modelu nie ma dostępu powiązany z nim kontroler, a zamiast tego uzyskuje do niego dostęp inny kod z powodu złośliwego błąd napastnika lub programisty. Czy powinienem umieścić logikę bezpieczeństwa w tych samych klasach modelu, łącząc te obawy, czy też powinienem zachować separację tak, jak mam teraz?


title: Wielordzeniowe/procesory z blokadami

text: Nie jestem pewien jak zamki będą działać z wieloma procesorami/rdzeniami, zamierzam użyć pamięci współdzielonej w mojej aplikacji lub FIFO, martwią mnie blokady, mam serwer z 2 procesorami, jak będzie działać blokada być w stanie zablokować zmienną na jednym procesorze, podczas gdy inna operacja przeszła do drugiego procesora dla tej samej zmiennej? Jestem w środowisku Linux używając C, przeszukałem sieć w poszukiwaniu przydatnych informacji, dziękujemy za pomoc


title: Czy istnieją dobre algorytmy do implementacji sterty, które minimalizują fragmentację?

text: W tej chwili próbuję stworzyć stertę, która wymaga wyrównania 8-bajtowego i szukam w Internecie dobrych metod, które zminimalizują stopień fragmentacji. Mniejsza fragmentacja jest idealna, a nawet te, które spowalniają, są brane pod uwagę (ale prędkość jest tutaj również drugorzędnym celem) Czy ktoś miał jakieś doświadczenie z Heaps, który mógłby mi powiedzieć, na co uważać, gdy się tym zajmujemy ? Każdy wkład jest doceniany


title: Opcje testowania równoległego w zwinnym rozwoju?

text: Przeczytałem kilka bardzo dobrych zasobów w Internecie, próbując dowiedzieć się, czy mój początkowy proponowany proces testowania jest poprawną opcją. Dlatego prosimy o wszelkie porady lub zalecenia. Obecnie mamy środowisko `Dev` i `Test`, które do tej pory dość dobrze spełniało nasze potrzeby. Wykonujemy testy QA i UAT na tym samym środowisku `Test`, jednak nasi testerzy QA narzekają, że testowanie obu zespołów w tym samym środowisku powoduje problemy z weryfikacją skryptów testowych i widzę, jaki to może być problem. Jednak nie chcę czekać, aż testowanie „QA” zostanie wykonane, zanim „UAT” nawet na to spojrzy, wydaje się, że jest to sprzeczne z ideałem w zwinnym rozwoju. Zasugerowałem następujący nowy proces/architekturę, aby umożliwić równoległe testowanie QA i UAT: Mieć oddzielne środowiska `QA` i `UAT`, które pozwalają na równoległe testowanie różnych modułów/wersji. Możemy więc mieć testowanie „QA” „ModułA”, podczas gdy „UAT” testuje „ModułB”. Zasadniczo potrzebujemy/chcemy, aby testowali różne moduły (lub te same) równolegle, bez wzajemnego zakłócania się. Przedstawiłem to naszym inżynierom systemowym (aby mogli zbudować środowisko) i powiedzieli, że „UAT” nigdy nie powinno się wydarzyć, dopóki nie zakończy się „QA”. Na podstawie mojego obecnego zrozumienia procesu zwinnego chciałbym popchnąć proponowany proces dalej, ale może coś przeoczam? Dziękuję!


title: Czy konieczne jest nauczenie się plików Makefile, gdy masz IDE?

text: Niedawno zacząłem studiować pliki Makefile w Linuksie. Mam duże doświadczenie w tworzeniu aplikacji z zaawansowanymi środowiskami IDE, takimi jak Visual Studio. Moje pierwsze wrażenie i pytanie po przeczytaniu kilku samouczków: czy jest potrzeba studiowania plików Makefile? Być może IDE używają go wewnętrznie, ale czy jest to coś, czego w końcu każdy powinien się nauczyć?


title: Czy dzień naprawdę trwa 24 godziny?

text: Zadałem to pytanie na Stack Overflow i zostało zamknięte jako nie na temat. Zapytam o to tutaj, mając nadzieję, że będzie lepiej. Może to zabrzmieć głupio, ale wytrzymaj ze mną. Ostatnio dużo pracowałam z interwałami i datami. Jedno pytanie, które mnie niepokoi: czy dzień naprawdę trwa 24 godziny? Interesuje mnie odpowiedź zarówno z teoretycznego, jak i praktycznego punktu widzenia. Załóżmy dzisiaj, że dzień rozpoczął się 13 grudnia 2012 00:00:00 i zgodnie z (wszystkimi) implementacjami data-godzina zakończy się 14 grudnia 2012 00:00:00. Zgadza się, a różnica między tymi dwiema datami to pełne 24 godziny. Problem polega na tym, że data zakończenia jest postrzegana jako „jutro”. Większość ludzi myśli, że dzień zaczyna się o 00:00:00 i kończy o 23:59:59. Więc pytanie brzmi: czy dzisiaj jest to przedział zamknięty na początku i otwarty na końcu, jak [start..end), przy czym koniec jest bardzo bliski 14 grudnia 2012 00:00:00 (więc nie do końca 24 godziny)? A może faktycznie jest zamknięty na obu końcach z pełnymi 24 godzinami między nimi?


title: W przeciwieństwie do tematów metod dla identycznych nazw metod

text: Mam paraliż nazw metod! Powiedzmy, że mam jedną klasę - "System" i drugą klasę "Użytkownik". Teraz, jeśli chcę powiadomić użytkownika(ów), mogę wywołać: // ta metoda może powiadomić osoby i kolekcje użytkowników System.notify(User,message), ale jeśli chcę po prostu powiadomić konkretnego użytkownika // to powiadamia user User.notify(message) Mój dylemat jest taki, że w przypadku "System" przedmiotem metody **notify** jest argument User(s). W przypadku realizacji „Użytkownika” podmiotem jest sam Użytkownik. Tak więc klasy mają tę samą metodę, prawdopodobnie wykonując bardzo podobne zadania - ale "kierunek" metod jest przeciwny. Czy cierpisz na paraliż imienia? Jak sobie z tym radzisz? Jakiego wzorca nazewnictwa użyjesz tutaj?


title: Przy wszystkich tych usługach, jak mogę nie być anemiczny?

text: Gdzie wyznaczamy granicę między delegowaniem a enkapsulacją logiki biznesowej? Wydaje mi się, że im więcej delegujemy, tym bardziej anemicznie się stajemy. Jednak delegowanie promuje również ponowne użycie i zasadę DRY. Co zatem należy delegować, a co powinno pozostać w naszych modelach domenowych? Jako przykłady weźmy następujące kwestie: **Autoryzacja**. Czy obiekt domeny powinien być odpowiedzialny za utrzymanie swoich reguł kontroli dostępu (takich jak właściwość CanEdit) lub powinien być delegowany do innego komponentu/usługi wyłącznie odpowiedzialnego za zarządzanie dostępem, np. IAuthorizationService.CanEdit(object)? A może powinna to być kombinacja tych dwóch? Być może obiekt domeny ma właściwość CanEdit, która deleguje do wewnętrznej usługi IAuthorizationService w celu wykonania rzeczywistej pracy? **Walidacja**. Ta sama dyskusja co powyżej dotyczy walidacji. Kto przestrzega zasad i kto jest odpowiedzialny za ich ocenę? Z jednej strony stan obiektu powinien należeć do tego obiektu, a ważność jest stanem, ale nie chcemy przepisywać kodu używanego do oceny reguł dla każdego obiektu domeny. W tym przypadku _moglibyśmy_ użyć dziedziczenia... **Tworzenie obiektu**. Klasa fabryczna a metody fabryczne kontra „nowe” instancję. Jeśli użyjemy oddzielnej klasy fabryki, jesteśmy w stanie wyizolować i zahermetyzować logikę tworzenia, ale kosztem otwarcia stanu naszego obiektu na fabrykę. Można to zarządzać, jeśli nasza warstwa domeny znajduje się w osobnym zestawie, ujawniając wewnętrzny konstruktor używany przez fabrykę, ale staje się to problemem, jeśli istnieje wiele wzorców tworzenia. A jeśli fabryka tylko wywołuje odpowiedniego konstruktora, jaki jest sens posiadania fabryki? Metody fabryczne w klasie eliminują problem z otwarciem stanu wewnętrznego obiektu, ale ponieważ są statyczne, nie jesteśmy w stanie przełamać zależności poprzez wstrzyknięcie interfejsu fabrycznego, tak jak w przypadku oddzielnej klasy fabrycznej. **Trwałość**. Można argumentować, że jeśli nasz obiekt domeny ma ujawnić CanEdit podczas delegowania odpowiedzialności za wykonanie sprawdzenia autoryzacji na inną stronę (IAuthorizationService), dlaczego nie mieć metody Save w naszym obiekcie domeny, która robi to samo? To pozwoliłoby nam ocenić stan wewnętrzny obiektu, aby określić, czy operację można wykonać bez zerwania enkapsulacji. Oczywiście wymaga to wstrzyknięcia instancji repozytorium do naszego obiektu domeny, co trochę mi śmierdzi, więc czy zamiast tego wywołujemy zdarzenie domeny i pozwalamy obsłudze na wykonanie operacji utrwalania? Widzisz, dokąd z tym zmierzam? Rockford Lhotka prowadzi świetną dyskusję na temat powodów, dla których wybrał metodę klasy w opłatach w ramach swojego frameworka CSLA, a ja mam trochę historii z tym frameworkiem i widzę jego pomysł na obiekty biznesowe równoległe do obiektów domeny na wiele sposobów. Ale próbując być bardziej przywiązanym do dobrych ideałów DDD, zastanawiam się, kiedy współpraca staje się zbyt duża. Jeśli otrzymam IAuthorizationService, IValidator, IFactory i IRepository dla mojego zagregowanego katalogu głównego, co pozostanie? Czy posiadanie metody Publish, która zmienia stan obiektu z Draft na Opublikowany, wystarczy, aby uznać tę klasę za obiekt domeny nieanemicznej? Twoje myśli?


title: Czy powinienem dodać prefiks "Abstract" do moich klas abstrakcyjnych?

text: Załóżmy, że mam klasę abstrakcyjną o nazwie `Task`. Czy istnieje standard lub konwencja, która sugerowałaby, że zamiast tego powinienem nazwać go `AbstractTask`?


title: jakich narzędzi powinienem używać do zapewniania jakości i testowania frontendowego javascriptu?

text: W projekcie, nad którym pracuję, intensywnie wykorzystuję techniki jquery i HTML 5 (takie jak File API, HistoryAPI). Zastanawiałem się, jakich narzędzi mogę użyć do 1. zapewnienia jakości mojego kodu javascript i front-endu 2. testowania jednostek mojego kodu javascript i front-endu Pozwól, że podzielę się informacjami w tle. Gdyby ktoś zapytał mnie o to dla PHP, powiedziałbym: użyj PHPUnit do pisania testów jednostkowych, użyj PHP CodeSniffer, a następnie z pomocą Phinga i Jenkinsa, umieść to wszystko w jednym procesie budowania. Zasadniczo chcę wiedzieć, czy coś podobnego można wykonać za pomocą javascript za pomocą Jenkinsa. Podziel się swoimi rzeczywistymi doświadczeniami. Proszę o poradę na temat najbardziej przyjaznych dla początkujących. Ujawnienie: publikowałem w społeczności G+ dla javascript i HTML5.


title: Licencjonowanie oprogramowania: bezpłatne [jak w gratisie] i copyleft

text: Czytałem o licencjonowaniu oprogramowania, ponieważ czuję, że jestem teraz na etapie, na którym prawdopodobnie powinienem mieć jakąś licencję związaną z moim kodem. To, czego szukam, to licencja typu copyleft (słaba lub silna), która zasadniczo jest bardzo liberalna. Więc chciałbym, żeby licencja pozwalała każdemu robić cokolwiek z kodem/programem z wyjątkiem tego, że nikt nigdy nie może na nim zarabiać. Nie chcę, aby ktokolwiek mógł zdobyć mój kod i go sprzedać, albo dostać mój kod i go sprzedać, albo otrzymać mój kod, modyfikować go w jakikolwiek sposób i sprzedawać. Nie chcę, żeby ktokolwiek mógł zarabiać na każdym kodzie, który napiszę. Poza tym nie obchodzi mnie, jak jest używany, o ile pierwotny autor kodu (w tym przypadku ja) jest powiązany z kodem, który napisałem. Sprawdziłem licencję GPL, licencję MIT i kilka innych i nie mogę znaleźć tego, czego szukam. Czy ktoś ma jakieś sugestie? Jeśli ma to znaczenie, licencja będzie powiązana z programami C/C++, asemblerem i Ruby.


title: Jakie zagrożenia/luki bezpieczeństwa musi być świadomy każdy programista C?

text: Istnieje wiele zagrożeń bezpieczeństwa wynikających z bliskiego kontaktu ze sprzętem, w przeciwieństwie do używania dobrze przetestowanych i sprawdzonych interfejsów API z języków programowania wysokiego poziomu. Dużo łatwiej jest spowodować przepełnienie bufora w C niż w języku takim jak Java. Jakie są zagrożenia lub luki (np. przepełnienia bufora), których każdy programista C powinien być świadomy (tj. luki istotne dla programistów C)? Do jakich problemów może to prowadzić? Jak ich uniknąć i jakie są najczęstsze błędy powodujące ich występowanie w programach?


title: Drzewa decyzyjne a sieci neuronowe

text: Wdrażam strukturę uczenia maszynowego, aby próbować przewidywać oszustwa w systemach finansowych, takich jak banki itp. Oznacza to, że istnieje wiele różnych danych, które można wykorzystać do trenowania modelu, np. numer karty, imię i nazwisko posiadacza karty, kwota, kraj itp. Mam problem z określeniem, która struktura jest najlepsza dla tego problemu. Mam pewne doświadczenie z drzewami decyzyjnymi, ale obecnie zacząłem zastanawiać się, czy sieć neuronowa byłaby lepsza dla tego rodzaju problemu. Również jeśli jakakolwiek inna metoda byłaby najlepsza, proszę o oświecenie mnie. Jakie są plusy i minusy każdej konstrukcji i która struktura byłaby najlepsza dla tego problemu? Również nie jestem tego pewien, ale myślę, że drzewa decyzyjne mają wielką przewagę nad sieciami neuronowymi pod względem szybkości wykonywania. To ważne, ponieważ szybkość jest również kluczowym czynnikiem w tym projekcie.


title: Jak mogę zmusić git do klonowania nieśledzonych plików?

text: Jestem nowy w git. Korzystam z platformy programistycznej zwanej studio automation. To narzędzie programistyczne tworzy wszelkiego rodzaju pliki i katalogi, których potrzebuje do przechowywania informacji o czasie wykonywania i we/wy dla procesora docelowego. Informacje te są specyficzne dla każdego projektu. Dlatego te pliki nie powinny być objęte kontrolą wersji, ponieważ są dostarczane i obsługiwane przez platformę. Inaczej nie da się uruchomić studia automatyki bez tych plików. Nazwy tych plików i katalogów umieszczam w pliku .gitignore. Następnie sklonowałem myrepository do zwykłego repozytorium na serwerze. Następnie sklonowałem z powrotem do mojego nowego repozytorium na moim lokalnym komputerze. Niestety w mynewrepository brakowało wszystkich plików i katalogów wymienionych w .gitignore. Dlatego platforma studia automatyzacji nie zadziałała. Jak mogę wykluczyć te pliki i zawartość tych katalogów z wersjonowania, ale zachować je wszystkie w repozytorium, aby sklonować z powrotem w pełni działający projekt dla Automation Studio?


title: DDD, Saga i Event-sourcing: Czy akcja kompensacyjna może być po prostu usunięciem ze sklepu zdarzeń?

text: Zdaję sobie sprawę, że powyższe pytanie prawdopodobnie nasuwa kilka „co?”, ale pozwólcie, że spróbuję wyjaśnić: staram się owinąć głowę kilkoma powiązanymi koncepcjami, zasadniczo wzorem Saga (http://www. rgoarchitects.com/Files/SOAPatterns/Saga.pdf) w połączeniu z Event-sourcing (koncepcja DDD: http://en.wikipedia.org/wiki/Domain-driven_design) Dobry post, który to podsumowuje: http: //blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-ii-of-ii/ Do pytania dochodzę za chwilę, ale chyba muszę spróbować podsumować co rozumiem jako pierwsze (co może być błędne, więc proszę poprawić, jeśli tak jest), ponieważ może to mieć wpływ na to, dlaczego zadaję pytanie na początku: 1. Wzorzec Saga jest rodzajem brokera, który dał akcja (użytkownik końcowy, zautomatyzowana itp. zasadniczo wszystko, co ma zmienić dane) dzieli tę akcję na działania biznesowe i wysyła każde z tych działań jako komunikaty do magistrali komunikatów, która z kolei wysyła je do odpowiednich korzenie kruszywa, o które należy zadbać. 2. Te zagregowane korzenie mogą działać całkowicie autonomicznie (ładne oddzielenie obaw, świetna skalowalność itp.) 3. Sama instancja Saga nie zawiera żadnej logiki biznesowej, która jest zawarta w zagregowanych korzeniach, do których wysyła działania. Jedyną „logiką” zawartą w Sadze jest logika „procesu” (często implementowana jako Statemachine), która określa na podstawie otrzymanych działań (jak również zdarzeń następczych), co zrobić (tj. jakie działania wysłać) 4. Wzorce Saga implementują rodzaj rozproszonego wzorca transakcji. To znaczy: kiedy jeden ze zbiorczych korzeni (które znowu działają autonomicznie, bez wiedzy o wzajemnym istnieniu) zawiedzie, całe działanie może być cofnięte. 5. Jest to realizowane przez posiadanie wszystkich zagregowanych korzeni, po zakończeniu ich działalności, raport z powrotem do Sagi. (W przypadku sukcesu jak i błędu) 6. W przypadku, gdy wszystkie zagregowane pierwiastki zwracają sukces, wewnętrzna maszyna stanu, jeśli Saga określi, co dalej (lub zdecyduje, że to zostało zrobione) 7. W przypadku niepowodzenia, Saga wydaje wszystkim zagregowane pierwiastki, które brały udział w ostatniej akcji, tzw. Akcja kompensacyjna, tj. czynność cofania ostatniej akcji, którą wykonał każdy z zagregowanych korzeni. 8. Może to być po prostu wykonanie „Minus 1 głos”, jeśli działaniem było „plus 1 głos”, ale może to być bardziej skomplikowane, jak przywrócenie postu na blogu do jego poprzedniej wersji. ma na celu uzewnętrznienie zapisywania wyników każdego z działań podejmowanych przez każdy z zagregowanych korzeni w scentralizowanym Sklepie Zdarzeń (zmiany nazywane są w tym kontekście „zdarzeniami”) 10. Ten Sklep Zdarzeń jest „pojedynczą wersją prawdy” i może być użyty do odtworzenia stanu wszystkich podmiotów, po prostu poprzez iterację zapisanych zdarzeń (zasadniczo jak dziennik zdarzeń) 11. Łącząc te dwa (tj. Pozwalając zagregowanym korzeniom na użycie Event-sourcingu do outsourcingu zapisywania zmian przed zgłoszeniem się do Sagi) umożliwia wiele fajnych możliwości, z których jedna dotyczy mojego pytania ... Czułem, że muszę to zdjąć z ramienia, ponieważ jest to dużo do uchwycenia za jednym razem.Biorąc pod uwagę ten kontekst / sposób myślenia (ponownie, proszę poprawić, jeśli jest źle) **pytanie:** kiedy korzeń agregatu otrzymuje akcja kompensacji, a jeśli ten zagregowany katalog główny zlecił na zewnątrz zmiany stanu przy użyciu źródła zdarzeń, czy akcja kompensacji we wszystkich sytuacjach nie byłaby po prostu usunięciem ostatniego zdarzenia w magazynie zdarzeń dla danego zagregowanego katalogu głównego? (Zakładając, że implementacja utrwalania umożliwia usuwanie) To miałoby dla mnie sens (i byłaby kolejną wielką korzyścią z tej kombinacji), ale jak powiedziałem, mogę czynić te założenia w oparciu o nieprawidłowe/niepełne zrozumienie tych pojęć. Mam nadzieję, że nie stało się to zbyt rozwlekłe. Dziękuję.


title: Jak obsłużyć User Story pod koniec sprintu, jeśli użytkownicy chcą zmian?

text: Właśnie przyjęliśmy Scrum i zakończyliśmy nasz pierwszy sprint (tak!) Podczas Przeglądu Sprintu zademonstrowaliśmy User Story dla funkcji X. Ta funkcja X działała dokładnie tak, jak opisano w User Story na podstawie wstępnej analizy biznesowej i szczegółów, które opracowaliśmy podczas backlogu produktu uwodzenie i planowanie sprintu. Jednak po tym, jak użytkownik zobaczył funkcję X w akcji, chciał wprowadzić pewne poprawki (nie szokujące, cel dema i pętla sprzężenia zwrotnego). Moje pytanie brzmi: **(a)** Czy uważamy, że oryginalna historyjka użytkownika została wykonana i tworzymy nową historyjkę użytkownika, aby sprostać nowym wymaganiom w przyszłym sprincie? **(b)** Czy uważamy, że oryginalna historyjka użytkownika jest niedokończona i trafia do backlogu z bardziej szczegółowymi wymaganiami, które zamienią się w więcej zadań w następnym sprincie? Jeśli **(b)** , czy w planowaniu sprintu ponownie szacujemy wagę historii, wiedząc, że 90% pracy jest ukończone? Więc jeśli pierwotnie było to 5 pkt, teraz może być 2 pkt?


title: Loguj defekty dla awarii innych systemów?

text: Budujemy produkty, które często integrują się z systemami firm trzecich. Czasami te systemy błądzą, co z kolei powoduje błąd naszego systemu. Na przykład nazywamy usługę sieciową, gdy użytkownik aktualizuje swoje dane po zapisaniu przez nas we własnej bazie danych. Podczas testowania usługa po drugiej stronie nie działa poprawnie. Widzę obie strony; z jednej strony oprogramowanie nie będzie działać, dopóki usługa nie zostanie naprawiona, więc musimy to jakoś śledzić. Z drugiej strony nie zrobimy nic, co naprawiłoby usterkę, a krytyczna usterka w naszym systemie wydaje się być marnotrawstwem (i może zaniepokoić innych patrzących na system śledzenia, zastanawiających się, dlaczego mamy wady, których nie jesteśmy działając dalej). Moje pytanie brzmi, czy powinny one być śledzone jako defekty w naszym systemie śledzenia, czy też nasi pracownicy ds. kontroli jakości nie powinni rejestrować defektów, jeśli wiedzą, że jest to przyczyną (zazwyczaj robią to, o co mnie pytają, jeśli nie mają pewności)? Edycja: kilka osób robi założenia. Serwis, do którego dzwonisz, jest rozwijany przez inny sklep, a za integrację naszych systemów oboje płacimy od tego samego klienta. Nasz interfejs użytkownika poprawnie obsługuje błąd i nie pokazuje ysod. Informuje użytkownika, że w tej chwili nie może zmienić swojego konta. Wada zgłaszana przez nasz zespół qa polega oczywiście na tym, że użytkownik powinien mieć możliwość zmiany konta, ale nie wie, czy problem jest czymś, co musimy naprawić, czy inną firmą. Zgodnie z naszymi wymaganiami nie możemy zapisać zmian użytkowników w przypadku niepowodzenia połączenia serwisowego. Zdecydowano, że te awarie powinny być na tyle rzadkie, że ten projekt jest w porządku. Współpracowaliśmy również z drugą firmą, aby dopracować pewne szczegóły, które pojawiły się podczas naszych testów.


title: Jaki jest maksymalny wiek, w którym nadal możesz być zatrudniony jako programista?

text: Znam kilku programistów w mojej pracy w wieku około 40 lat. Nie pamiętam, żebym widział w pracy programistę, który ma 50+. Mamy 600 osób, z czego prawdopodobnie 100 to programiści. Czy to rzadkość, aby nadal pracować jako programista w wieku 50+? Można się spierać, lepiej byłoby zarządzać ludźmi, ale nie wszyscy są w tym dobrzy, a niektórzy ludzie chcą po prostu wykonywać pracę z powodu pasji itp. Czy byłoby dziwne, gdybyś nadal próbował pracować w wieku 50 lat, czy nawet 60? Wyobrażam sobie, że mogłoby to wywołać różnego rodzaju problemy społeczne, np. praca w grach, w których większość ludzi jest bardzo młoda, prosto z college'u itp. Czuję, że trudno byłoby nawiązać przyjaźnie ze względu na różnicę wieku. Albo w jaki sposób twoja wiedza fachowa byłaby postrzegana w porównaniu z innymi itp. Czy ktoś ma doświadczenie lub opinie na ten temat?


title: Pytanie dotyczące widoku MVC

text: Na mojej stronie internetowej PHP (index.php) mam prosty skrypt, który wywołuje klasę „page”, a następnie buduje z niej stronę. Index.php wykonuje metody wewnątrz instancji klasy 'page', takie jak "add_to_body("bla bla bla")". Następnie może wywołać metodę "build()", w której klasa strony zwróci ciąg znaków z danymi wejściowymi użytkownika i kilkoma innymi dodanymi elementami HTML, które index.php może wywołać. Zasadniczo klasa strony jest pewnego rodzaju szablonem. Próbuję mieć tutaj jakąś hierarchię MVC (jestem studentem uczącym się "najlepszych praktyk" programowania w swoim własnym czasie), moje pytanie brzmi: czy "index.php" byłby widokiem? Albo, czy instancja klasy page byłaby widokiem (ponieważ tworzy stronę, ale w rzeczywistości jej nie pokazuje, zwraca ciąg znaków), czy też: czy klasa „page” byłaby kontrolerem? Ponadto, czy widok jest „dozwolony” komunikować się (np. pobierać dane z) z kontrolerem (na przykład: przez wywołanie metody, która jest właścicielem kontrolera)? Wielkie dzięki za Twoją pomoc!


title: Jaka jest preferowana strategia edycji danych z bazy danych?

text: Przeprojektowujemy starą aplikację VB6 w sieci. Aplikacja w dużym stopniu wykorzystuje bazę danych i obejmuje zarządzanie klubowiczami i ich wynikami w zawodach, w których biorą udział. Jeśli więc edytujemy imię i nazwisko, adres itp. członka klubu oczywiste jest, aby nie odsyłać danych do bazy danych do momentu zakończenia przez użytkownika całej operacji edycji lub dodawania. Ale jak to zrobić, rejestrując i edytując wyniki meczów? Zaletą wysyłania każdego dodanego lub edytowanego wyniku bezpośrednio do bazy danych jest możliwość aktualizacji rankingów na żywo. Wadą jest to, że cofanie zmian może być trudniejsze i mogą wystąpić problemy z wydajnością, gdy połączenie z bazą danych ma duże opóźnienie. Ten ostatni problem może pojawić się na pewnym etapie, ale w nieprzewidzianej przyszłości będziemy pracować z komputerowymi wersjami bazy danych. Interesują mnie opisy najlepszych praktyk i doświadczeń na żywo. Dziękuję!


title: Jak działa operacja Znajdź w drzewie binarnym?

text: Mam zamieszanie w tym kodowaniu drzewa binarnego. Znam pojęcie drzewa binarnego i wiem jak one działają iw ogóle, ale w tym kodzie źródłowym jestem pomylony z operacją "Znajdź". Nie rozumiem, jak to działa iw ogóle. Proszę o pomoc, tak bardzo interesuje mnie ten obszar. pakiet binarytree_task4; class Węzeł { prywatny statyczny class Equivalent { public Equivalent() { } } public Dane równoważne; prawo węzła publicznego; Węzeł publiczny w lewo; Węzeł publiczny (dane równoważne) { this (dane, null, null); } Węzeł publiczny(Dane równoważne, Węzeł po lewej, Węzeł po prawej) { this.data = data; this.left = lewo; this.right = dobrze; } } class binarytree { public static void main(String[] args) { } private static class Ekwiwalent { public Equivalent() { } } private static class present { public present() { } } private Węzeł główny; prywatny rozmiar int; publiczne drzewo binarne() { rozmiar = 0; korzeń = null; } public void printTree() { if(size == 0) System.out.println("Pusty"); else { System.out.println("Zawartość drzewa:"); nieporządek(korzeń); } } public void inorder(Node present) { if(present != null) { inorder(present.left); System.out.println(dane.obecne); inorder(teraz.prawo); } } public void Insert(Równoważne dane) { root = Insert(data, root); } private Node Insert(Równoważne dane, Węzeł obecny) { if(obecny == null) { size++; obecny = nowy węzeł(dane, null, null); } else if(data.compareTo(present.data)<0) { present.left = Insert(data,present.left); } else if(data.compareTo(present.data)>0) { present.right = Insert(data, present.right); } powrót obecny; } public boolean Find(dane równoważne) { return Find(dane, root); } private logiczna Znajdź(dane równoważne, obecny węzeł) { if(present == null ) { return false; } else if(present.data == data) { return true; } else if(data.compareTo(present.data)<0) { return Find(data, present.left); } else { return Find(data, present.right); } } public boolean Usuń(klucz równoważny){ if (Znajdź(klucz)){ Usuń(klucz); zwróć prawdę; } else{ return false; } } public void usuń (klucz równoważny) { Węzeł obecny = root; rodzic węzła = root; boolean isLeftChild = true; while(present.data.compareTo(key) != 0) { parent = obecny; if(present.data.compareTo(key) > 0) { isLeftChild = true; obecny = obecny.po lewej; } else { isLeftChild = false; obecny = obecny.prawo; } if(present == null) return ; } if(present.left == null && present.right == null) { if(present == root) root = null; else if(isLeftChild) parent.left = null; w przeciwnym razie rodzic.prawo = null; } else if(present.right == null) if(present == root) root = present.left; else if(isLeftChild) parent.left = present.left; w przeciwnym razie rodzic.prawo = obecny.lewo; else if(present.left == null) if(present == root) root = present.right; else if(isLeftChild) parent.left = present.right; w przeciwnym razie rodzic.prawo = obecne.prawo; else { Następca węzła = getSuccessor(present); if(present == root) root = następca; else if(isLeftChild) parent.left= następca; w przeciwnym razie rodzic.prawo = następca; następca.lewy = obecny.lewy; } } private Węzeł getSuccessor(Node delNode) { Węzeł następcaParent = delNode; Następca węzła = delNode; Węzeł obecny = delNode.right; while(present != null) { następcaRodzic = następca; następca = obecny; obecny = obecny.po lewej; } if(successor != delNode.right) { następcaRodzic.left = następca.prawo; następca.prawo = delNode.prawo; } zwróć następcę; } }


title: Czy ciągłe tworzenie i usuwanie tabel jest oznaką wady architektonicznej?

text: Niedawno rozmawiałem z programistą, który wspomniał, że podczas tworzenia programu rutynowo regularnie tworzą i usuwają tabele i kolumny, pracując nad nowymi funkcjami i uzasadniając rzeczy, mówiąc, że jest to normalne w przypadku zwinnego procesu rozwoju. Ponieważ większość mojego doświadczenia dotyczy środowiska programowania kaskadowego, zastanawiam się, czy jest to rzeczywiście uważane za właściwe w przypadku programowania zwinnego, czy może to być oznaką podstawowego problemu, czy to z architekturą programu, czy z podążaniem za procesem zwinnym.


title: Model pudełkowy: Internet Explorer kontra W3C

text: Obecnie problem Internet Explorer Box Model jest w większości przypadków nieistotny. Większość twórców stron internetowych umieszcza znacznik `<!DOCTYPE>` w celu wymuszenia zgodności ze standardami i nikt już tak naprawdę nie przejmuje się obsługą Internet Explorera 5.5. Jednak niektórzy programiści wymyślili subiektywne, koncepcyjne argumenty w obronie modelu skrzynki IE. Twierdzili, że model skrzynki IE jest bardziej „intuicyjny” niż model W3C, ponieważ model W3C mierzy _zawartość_ pudełka, podczas gdy model IE mierzy samo pudełko: ![tutaj wpisz opis obrazu](http:/ /i.stack.imgur.com/y0Tkz.png) Widzę ich punkt widzenia, ale jest to w zasadzie argument subiektywny, a najważniejszą rzeczą jest zgodność ze standardami. Jednak ostatnio zacząłem preferować model IE box z poważnych **praktycznych** powodów. Model pudełkowy W3C utrudnia dynamiczną zmianę rozmiaru elementu do dokładnej szerokości piksela na ekranie innego elementu. Powodem jest to, że właściwość `style.width` elementu nie uwzględnia całkowitego rozmiaru elementu na ekranie: należy również wziąć pod uwagę wszelkie dodatkowe obramowanie i dopełnienie. Nie stanowi to problemu, jeśli oba elementy używają tej samej klasy CSS - ale jeśli mają _różne_ klasy CSS, może to stać się niezwykle trudne. Załóżmy, że mamy dwa div: A i B. A jest zakodowane na stałe w html jako div 400px, podczas gdy B jest tworzone dynamicznie za pomocą JavaScript. Wizualnie chcemy, aby B była dokładną szerokością A. W starym modelu IE Box jest to trywialne. Mówimy po prostu: `B.style.width = A.style.width` lub nawet `B.style.width = A.offsetWidth + "px"`. Ale w przypadku modelu pudełkowego W3C nie jest to takie proste. Teraz musimy się również martwić o arkusze stylów. Jeśli B ma tę samą klasę CSS co A, możemy po prostu powiedzieć `B.style.width = A.style.width`. Ale jeśli tak się nie stanie – a możemy tego nie chcieć ze względów estetycznych – mamy kłopoty. Teraz musimy wziąć pod uwagę całkowitą liczbę pikseli w obramowaniu i dopełnieniu zarówno A, jak i B. Może to być szczególnie trudne, jeśli obramowanie i dopełnienie są określone w niespójnych jednostkach (częste zjawisko, ponieważ obramowanie jest często linią 1 piksel, podczas gdy dopełnienie można określić w ems). Następnie stajemy przed quasi-niemożliwym zadaniem konwersji do wspólnej jednostki (em na px lub px na em). Wszystko po to, aby dwa divy ustawiły się dokładnie na ekranie. Zasadniczo model pudełkowy W3C zmusza nas do wzięcia pod uwagę problemów z obramowaniem i dopełnieniem CSS, gdy ustawiamy rozmiar elementu, podczas gdy model pudełkowy IE tego nie robi, ponieważ szerokość mierzy _całkowity rozmiar_ pudełka (od końca do -end), a nie _treść_ pudełka. To znacznie ułatwia dynamiczne dopasowywanie elementów względem siebie. Wszystko to wydaje się być dość mocnym powodem, aby faworyzować model pudełkowy IE nad modelem W3C (przynajmniej koncepcyjnie - oczywiście w praktyce model pudełkowy IE jest martwy). **Pytanie** : Dlaczego W3C wybrało ten model pudełkowy? Czy są jakieś _zalety_ modelu pudełka W3C, których po prostu nie widzę? A może po prostu wyolbrzymiam tutaj problem?


title: Najlepszy sposób na przeanalizowanie pliku

text: Próbuję znaleźć lepsze rozwiązanie do tworzenia parsera do niektórych znanych formatów plików, takich jak: EDIFACT i TRADACOMS. Jeśli nie znasz tych standardów, sprawdź ten przykład z Wikipedii: > Zobacz poniżej przykład wiadomości EDIFACT użytej do odpowiedzi na produkt > prośba o dostępność:- UNA:+.? ' UNB+IATB:1+6XPPC+LHPPC+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZDOSTĘPNOŚĆ FIRMY' ERC+A7V:1:AMD' IFT+3+BRAK WIĘCEJ ODI' LOTÓW TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+714C: 0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:130::6+ ++++++DA' UNT+13+1' UNZ+1+1' Segment UNA jest opcjonalny. Jeśli jest obecny, określa znaki specjalne, które mają być użyte do interpretacji pozostałej części wiadomości. Po UNA występuje sześć znaków w tej kolejności: * separator elementu danych składnika (: w tym przykładzie) * separator elementu danych (+ w tym przykładzie) * powiadomienie dziesiętne (. w tym przykładzie) * znak zwolnienia (? w tym przykładzie) * zarezerwowane, musi być spacją * terminator segmentu (' w tym przykładzie) * * * Jak widać, to tylko niektóre dane sformatowane w specjalny sposób czekające na parsowanie (podobnie jak pliki **XML**). Teraz mój system jest zbudowany na PHP i udało mi się stworzyć parser przy użyciu wyrażeń regularnych dla każdego segmentu, ale problem nie polega na tym, że każdy doskonale implementuje standard. Niektórzy dostawcy mają tendencję do całkowitego ignorowania opcjonalnych segmentów i pól. Inni mogą zdecydować się na wysłanie większej ilości danych niż inni. Dlatego zostałem zmuszony do stworzenia walidatorów dla segmentów i pól, aby sprawdzić, czy plik jest poprawny, czy nie. Możesz sobie wyobrazić koszmar wyrażeń regularnych, który mam teraz. Ponadto każdy dostawca potrzebuje wielu modyfikacji wyrażeń regularnych, które zwykle buduję dla każdego dostawcy. * * * **Pytania:** 1- Czy jest to najlepsza praktyka parsowania plików (przy użyciu wyrażeń regularnych)? 2- Czy istnieje lepsze rozwiązanie do parsowania plików (może jest tam gotowe rozwiązanie)? Czy będzie w stanie pokazać, jakiego segmentu brakuje lub czy plik jest uszkodzony? 3- Jeśli mimo wszystko muszę zbudować parser, jakiego wzorca projektowego lub metodologii powinienem użyć? **Uwagi:** Czytałem gdzieś o yacc i ANTLR, ale nie wiem, czy pasują do moich potrzeb, czy nie!


title: Tworzenie stron w witrynie MVC, które będą wykorzystywane jako element iframe przez inną witrynę

text: Mam witrynę, w której będę współpracować z inną witryną. Chcą wyświetlić jedną konkretną moją stronę, w swojej witrynie [WordPress]. Nie są programistami, więc sprawdziłem, jak to zrobić. Na pierwszy rzut oka wydaje się, że wtyczka WordPress iFrame jest najłatwiejszą drogą. Moja następna myśl jest taka, że prawdopodobnie nadal będą chcieli wyświetlać własny nagłówek i stopkę na swojej stronie, jednocześnie pokazując zawartość mojej strony w ramce iFrame. Nie ma sprawy. Zastanawiam się nad stworzeniem widoku w mojej witrynie [MVC 4], który będzie używany TYLKO do celów iFrame. Ponieważ prawdopodobnie będą chcieli mieć własne nagłówki, prawdopodobnie zaprojektuję stronę, która nie używa układu, a jedynie niestandardowy nagłówek i/lub stopkę, które pokazują, że informacje pochodzą z MOJEJ witryny. Oto moje pytania: 1) Strona, która zostanie wyświetlona, zawiera WIELE tagów kotwicy, jeśli są one osadzone w ramce iFrame, co się stanie, jeśli użytkownik w ICH witrynie kliknie łącze w ramce iFrame? Czy zmienia się strona iFrame, czy zmienia się CAŁOŚĆ ich strony? 2) W zależności od odpowiedzi na nr 1, czy powinienem po prostu wyłączyć wszystkie hiperłącza/tagi zakotwiczenia na stronie iFrame w mojej witrynie, aby nie powodowało to żadnych dziwactw w witrynie? 3) A jeśli CHCĘ hiperłączy na stronie iFrame, aby odwiedzały moją witrynę? Czy to kwestia powiedzenia im, aby umieścili na swojej stronie prawdziwy link do mojej własnej? 4) Jakie mam obawy związane z bezpieczeństwem, gdy zezwalam na dostęp do własnej strony za pośrednictwem iFrame z innej witryny? Czy powinienem zezwalać na ruch do mojej strony iFrame tylko wtedy, gdy pochodzi on z ich witryny? Jeśli nie pochodzi z ich witryny, to przekierować na moją „prawdziwą” stronę? Dziękuje wszystkim!


title: Modelowanie przepływu pracy plus interakcja z bazą danych - szybkie i dostępne opcje

text: Zamierzam zamodelować (proponowaną) linię produkcyjną, ze szczególnym naciskiem na interakcję z bazą danych identyfikowalności. Oznacza to, że różni inżynierowie procesu już zmapowali proces produkcyjny - interesują mnie tylko różne stacje wzdłuż linii, które muszą komunikować się z DB. Docelowi odbiorcy to mieszanka kierowników projektów, inżynierów i informatyków - celem jest identyfikacja: * punktów, w których linia wchodzi w interakcję z bazą danych (być może posuwając się nawet do wskazania Store Procs wywoływanych w każdym punkcie, być może nawet z jakimi parametrami * źródło komunikacji (komputer/urządzenie ręczne/PLC) * medium komunikacyjne (bezprzewodowe/światłowód/miedź) * przepływ sterowania (jeśli test szczelności nie powiedzie się, urządzenie zostanie przekierowane do stacji naprawczej) Zasadniczo używany będzie model jako skupienie różnych grup na zaległych zadaniach; na przykład jestem zainteresowany bazą danych i każdą potrzebną aplikacją front-end, inżynierowie procesu muszą myśleć o przepływie pracy i współpracy z dostawcami PLC, inni informatycy muszą upewnić się, że mamy sprzęt i komunikację . Oczywiście mogłem po prostu improwizować w Visio, ale zastanawiałem się, czy istnieje jakaś szczególna technika modelowania, która mogłaby szczególnie odpowiadać moim potrzebom lub moim odbiorcom. Zastanawiam się nad wizualnym modelem wraz z dokumentacją uzupełniającą (jak najmniej, tyle ile trzeba). Najwyraźniej nie chcę czegoś, co zabierze mnie wieki do (skutecznego) uczenia się, ani czegoś, co zrazi nietechnicznych członków zespołu projektowego. Do tej pory rzuciłem okiem na BPMN, diagramy EPC, standardowe diagramy przepływu... i zapomniałem większości tego, co wiedziałem o UML... I nie mam nic przeciwko wybieraniu i mieszaniu... ponieważ tak długo, jak jest szybka, przejrzysta i skuteczna. Wniosek: Ostatecznie zdecydowałem się na diagram quasi-workflow/dataflow. Zmapowałem części procesu produkcyjnego, które wchodzą w interakcję z bazą danych identyfikowalności i wskazałem w znacznie uproszczonej formie przepływy danych i aktywność bazy danych. Oprócz tego mam dokument pomocniczy, który opisuje każdy proces, dane, które są przetwarzane dla każdego procesu (rodzaj „słownika danych”) oraz szczegóły dotyczące wymaganego sprzętu i łączności. Nie mogę zdecydować, czy jest to wytwór geniuszu, czy przestępstwo przeciwko ustalonym praktykom tworzenia oprogramowania, ale myślę, że to będzie trafić w sedno dla tej konkretnej publiczności.


title: Czy istnieje księga kanoniczna na temat F#?

text: Planuję nauczyć się F#. Nie jestem zbyt początkującym, ponieważ znam Standard ML, C# i Erlang. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat F# (najlepiej z przykładami przy użyciu WPF, ponieważ chciałbym go użyć do programowania GUI)? Co w tej książce czyni ją wyjątkową?


title: Kiedy używać zasobów zagnieżdżonych w RESTful API

text: Mam dwa zasoby: użytkowników i linki. Użytkownicy mogą mieć kilka powiązanych z nimi linków. Zaprojektowałem moje RESTful API tak, abyś mógł dotrzeć do linków powiązanych z użytkownikiem pod następującym URI: `/users/:id/links` Jednak zawsze potrzebuję URI dla samych linków – czasami potrzebuję wszystkich linków , niezależnie od użytkownika. W tym celu mam: `/links` Czy to brzmi w porządku? Masz dwa identyfikatory URI dla linków? Zastanawiam się, czy zamiast tego powinienem dotrzeć do linków dla użytkownika z identyfikatorem URI, takim jak: `/links/user/:id` lub `/links/?user=:id` W ten sposób mam tylko jeden zasób dla linków.


title: Jak bardzo współczesne programowanie jest nadal powiązane z logiką cyfrową?

text: Po pierwsze: nie mam wykształcenia akademickiego. Pracuję głównie z Javą i Springiem, lubię też programowanie webowe i relacyjne bazy danych. Mam nadzieję, że używam właściwych terminów i mam nadzieję, że to niejasne pytanie ma jakiś sens. Dzisiaj przyszło mi do głowy pytanie: W jakim stopniu współczesne programowanie jest wciąż powiązane z podstawową logiką cyfrową? Współczesnym programowaniem mam na myśli takie koncepcje jak OOP, AOP, Java 7, AJAX,… Mam nadzieję, że wpadłeś na pomysł. Czy nie potrzebują już cyfrowej logiki, z którą komputery pracują wewnętrznie? A może logika binarna jest nadal wszechobecna podczas programowania w ten sposób? Gdybym z dnia na dzień zmienił wewnętrzne działanie komputera, czy miałoby to znaczenie, ponieważ moje techniki programowania są już tak abstrakcyjne? * * * P. S.: Przez logikę cyfrową rozumiem fizyczną reprezentację wszystkiego „wewnątrz” komputera jako zer i jedynek. * * * Zmieniono „binarny” na „cyfrowy”.