title: VPN lub TLSv1 do zabezpieczania protokołu programów od urządzenia polowego do komputera mainframe

text: Pracuję nad produktem, który wymaga, aby urządzenia istniały w dowolnym miejscu na świecie, podłączone do Internetu za pośrednictwem modemów komórkowych lub linii WLAN, które komunikują się z serwerem (serwerami) znajdującym się w innym miejscu na świecie. _Podczas projektowania części sieciowej programu nie mogę się domyślić, jaka jest najlepsza opcja zabezpieczenia komunikacji między serwerem a urządzeniem końcowym._ Z moich poszukiwań wymyśliłem dwie opcje. **Opcja 1:** _Używanie hosta do hostowania połączenia VPN między dwoma urządzeniami._ **Zalety:** Oprogramowanie VPN wydaje się być dobrze przetestowane i nie wymaga dodatkowego programowania protokołu sieciowego. Dział IT czuje się z tym bardziej komfortowo, ponieważ korzysta z oprogramowania, które jest już przetestowane i czuje się komfortowo z VPN. **Wady:** Ponieważ moje urządzenia końcowe to Linux na platformach OMAP, kompilacja krzyżowa oprogramowania VPN, jeśli jeszcze tego nie zrobiono, może być trudna. Radzenie sobie z firewallami i routerami za siecią urządzeń końcowych. Konfiguracja połączenia może być trudna. **Opcja 2:** _Implementacja protokołu TLSv1 w moim programie, aby poradzić sobie z szyfrowaniem._ **Zalety:** Nie wymaga uruchamiania na urządzeniu dodatkowego oprogramowania. Polega tylko na bibliotekach szyfrowania jako zależności. Nie musisz się martwić o radzenie sobie z natami i firewallami, ponieważ protokół będzie wymagał tylko jednego portu tcp do otwarcia. **Wady:** Dodatkowe kodowanie oprogramowania sieciowego. Dział IT jest sceptyczny, ponieważ nasz program odpowiada za zabezpieczenie protokołu. **FYI:** Do implementacji TLSv1 użyłbym http://www.gnu.org/software/gnutls/


title: Co należy zrobić na git podczas migracji nowej dystrybucji i menedżera pakietów?

text: W projekcie, nad którym pracuję, korzystamy z Freebsd i tworzymy dla niego nasze pakiety oprogramowania. Teraz planujemy zmienić dystrybucję na Centos i rpm dla menedżera pakietów. Ponieważ nasze kody nie są niezależne od platformy, musimy wprowadzić w nich wiele zmian. Ponadto będziemy nadal korzystać z freebsd do czasu zakończenia migracji. Jaki jest najlepszy sposób użycia git dla tego typu migracji. Czy powinniśmy użyć nowej gałęzi czy nowego repozytorium?


title: Softpedia opublikowała niektóre z moich projektów open source — jak zareagować?

text: _(FYI: właśnie przeniosłem to pytanie ze Stackoverflow na polecenie.)_ Właśnie otrzymałem kilka e-maili z informacją, że softpedia.com dodał niektóre z moich "produktów" do swojej "bazy danych skryptów, fragmentów kodu i Aplikacje internetowe". Moje produkty to w tym przypadku mniejsze projekty open source, które hostowałem i publikowałem na githubie. Teraz zastanawiam się, jak na to zareagować. Ta strona pośrednio zarabia na mojej bezpłatnej pracy poprzez reklamy na trzech stronach przed faktycznym pobraniem. Wydaje się również, że „wymyślają” numery wersji i nie mogę się dowiedzieć, czy hostują najnowsze, czy wszystkie wersje moich projektów. — Widzę, jak może to prowadzić do problemów w przyszłości, ponieważ nie wszędzie kontroluję, co jest „najnowsze”. Z drugiej strony nie mam nic przeciwko dodatkowej reklamie. Chcę, aby jak najwięcej osób wiedziało o projektach, korzystało z nich, rozwidlało je i mam nadzieję, że je ulepszyło. Projekty, o których mowa w pytaniach, są naprawdę dość małe, ale w przypadku mnie i/lub innych osób czytających to pytanie może się tak nie stać w przyszłości. Jestem pewien, że to musiało się przydarzyć innym tutaj. Jakie jest Twoje zdanie? Czy powinienem spróbować usunąć pobrane pliki? * * * **Aktualizacja 1** Poprosiłem o usunięcie i wspomniałem, że nie sądzę, aby Softpedia mogła zapewnić odpowiednie środowisko dla tego rodzaju projektu. Ich zespół natychmiast do mnie odpisał z przyjaznym e-mailem, że na razie usunie linki: > Jeśli obawiasz się, że Twoje projekty nie zostaną zaktualizowane, to muszę Ci powiedzieć > że mam je w zakładkach Czytnik RSS, więc wszelkie zmiany wersji będą > przekazywane do mnie w razie potrzeby. Więc obiecuję, że będę aktualizować twój skrypt > jak tylko zobaczę aktualizację w repozytorium. Muszę przyznać, że bardzo doceniam tego typu reakcje, więc wysłałem im kolejnego maila, opisując bardziej szczegółowo, o co się martwię i co mnie niepokoi. Stwierdziłem też, że mam świadomość, że moja licencja wyraźnie i tak pozwala im na hostowanie projektów, ale byłbym nawet szczęśliwy, gdyby byli gospodarzami projektów, o ile byliby w stanie mnie przekonać o kilku szczegółach i może wprowadzić drobne zmiany w sposobie przedstawiania projektów. — Zobaczmy, do czego to prowadzi. * * * **Aktualizacja 2** Po omówieniu ze swoim kontaktem i poproszeniu o wprowadzenie pewnych zmian dotyczących wyświetlania wersji (dano im taką możliwość) i autorstwa ponownie umieścili projekty na swojej stronie. W sumie pozytywne i zdecydowanie ciekawe doświadczenie.


title: Poszukiwana porada: wysoce techniczny pomysł na aplikację - zatrudniam kogoś, czy robię to sam?

text: Jestem producentem telewizyjnym w Londynie, ale także zapalonym amatorskim koderem i projektantem stron internetowych. Zacząłem od VB6, a potem przeszedłem na C/PHP/Obj-C. Mam kilka aplikacji w App Store, dużo bawię się Arduino, tworzę php CMS od podstaw - ale na pewno nigdy nie pracowałem zawodowo jako koder. Mam pomysł na aplikację na iPada, na który chciałbym poświęcić czas i pieniądze, ale obejmuje animację i modelowanie, tworzenie interfejsu użytkownika na osi czasu, pracę z wieloma widokami kamery. Mówiąc prościej, jest to złożona aplikacja OpenGL, znacznie przekraczająca moje umiejętności. _Aby było jasne, to nie jest klon zombie slashera ani przygody fantasy – to aplikacja, o której wiem, że tysiące dobrze opłacanych profesjonalistów z branży telewizyjnej i studentów mediów chciałoby wydać pieniądze._ Chciałbym się dowiedzieć od tych, którzy doświadczenie w prowadzeniu złożonej aplikacji od pomysłu do dostarczenia, czy to samodzielnie, czy przez agencję programistyczną, jeśli naprawdę uważasz, że warto zbudować aplikację, jeśli spędzisz 12 miesięcy wspólnie ucząc się umiejętności i hakując wczesne wersje - czy też powinieneś podejść do sprawy poważnie i zatrudniać ludzi z pieniędzmi zebranymi z różnych źródeł. Może Kickstarter? Mając to na uwadze, jaka jest rozsądna kwota, jaką zapłaciłbyś za parę programistów, aby to osiągnąć, powiedzmy w sześć miesięcy? Standardowa opłata za kompetentnego kodera opengl? Równie dobrze może to być przypadek korzystania z programistów spoza uczelni i dzielenie firmy z nimi, plus skromne wydatki. Myślę, że jestem na szczęśliwej sytuacji, że mogę przynajmniej przyczynić się do projektu, poprzez grafikę, dźwięk, marketing - tylko nie naprawdę ciężkie rzeczy. Każda rada naprawdę doceniana, Mike.


title: Strategia aplikacji Django

text: Od jakiegoś czasu pracuję nad projektem Django, który ostatnio trochę się rozrasta. Zastanowiłem się trochę, jakiej strategii użyć, aby ułatwić sobie obsługę. Jedną z rzeczy, które chciałbym uzyskać, byłoby podzielenie mojej aplikacji na kilka mniejszych aplikacji. To zmniejszyłoby moje pliki widoków i modeli i oddzieliłoby niektóre obawy. Jedną rzeczą, która mnie to niepokoi, jest to, że w moich aplikacjach miałbym kilka metod pomocniczych, które będą używane w różnych aplikacjach. Również niektóre modele będą musiały być współużytkowane/używane w różnych aplikacjach. Czy to miałoby sens? Nie pasuje to do oddzielenia obaw, które miałem nadzieję osiągnąć, dzieląc moją aplikację na kilka mniejszych aplikacji. Jakie byłoby dobre podejście do udostępniania metod pomocniczych, modeli itp. między aplikacjami?


title: Jaki stopień programowania niskopoziomowego można osiągnąć za pomocą języków takich jak Go?

text: Go i D zapewniają zbieranie śmieci, a mimo to twierdzą, że są językami programowania systemowego. Jaki stopień programowania niskopoziomowego można osiągnąć za pomocą języków posiadających zbieranie śmieci? W przypadku programowania niskopoziomowego mam na myśli bliskość sprzętu lub możliwość: 1. Działa bezpośrednio w ograniczonej pamięci, bez opóźnień i działa dobrze. Przykładem mogą być jądra systemu operacyjnego. 2. Działa na bazie oprogramowania, ale nadal musi działać dobrze. Przykładem mogą być narzędzia systemowe.


title: Dlaczego ten kod tworzy obiekt jako interfejs?

text: Czytam Spring in Action (3rd edition) i tutaj fragment z niego: ApplicationContext ctx=new ClassPathXmlApplicationContext("springidol.xml"); Wykonawca wykonawca=(Wykonawca)ctx.getBean("poetycki książę"); wykonawca.wykonawca(); Nie ma jednak żadnego problemu, gdy autor wprowadza metody init i destroy: <bean id="poeticDuke" class="com.springinaction.springidol.PoeticJuggler" init-method="turnOnLights" destroy- method="turnOffLights"> W jakiś sposób dane wyjściowe otrzymały tylko metodę init, ale nie metodę destroy. Potem zdałem sobie sprawę, że wywołanie kontekstu powoduje zniszczenie-method po jego zamknięciu i spróbowałem zakodować w następujący sposób: ApplicationContext ctx=new ClassPathXmlApplicationContext("springidol.xml"); Wykonawca wykonawca=(Wykonawca)ctx.getBean("poetycki książę"); wykonawca.wykonawca(); ctx.zamknij(); Nie kompiluje się, ponieważ interfejs ApplicationContext nie ma metody close. Działa tylko w następujący sposób: ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("springidol.xml"); Wykonawca wykonawca=(Wykonawca)ctx.getBean("poetycki książę"); wykonawca.wykonawca(); ctx.zamknij(); Dlaczego autor tak to napisał?


title: Dokładne obliczenie długości granicy obrazu rastrowego

text: Mam obraz zrastrowany, który zawiera dwa kolory: biały i czarny. Czarna część jest całkowicie połączona i wygląda jak duża plama. Czy istnieje dobry sposób na oszacowanie długości granicy między regionami? Jedną z metod, którą rozważałem, jest po prostu policzenie, ile „krawędzi” zrasteryzowanej siatki ma inny kolor z każdej strony. Jednak m.in. linia czysto ukośna, spowoduje to przeszacowanie odległości granicy o współczynnik sqrt(2). Czy istnieje lepsza metoda oszacowania długości granicy, która nie ma tego problemu?


title: Czy powinienem używać właściwości JavaFx?

text: Zazwyczaj bardzo uważam, aby oddzielić kod modelu, widoku i kontrolera. Chodzi o to, że właściwości JavaFx są tak wygodne, że można je wszystkie połączyć. Problem polega na tym, że cały mój projekt kodu jest zależny od JavaFx, czego nie powinienem robić. Powinienem móc zmienić widok bez zbytniej zmiany modelu i kontrolera. Czy powinienem więc zignorować wygodę właściwości JavaFx, czy też powinienem je przyjąć i fakt, że zmniejsza to elastyczność mojego kodu.


title: Czy tworzenie indeksu bazy danych jest częścią procesu projektowania, wdrażania lub optymalizacji?

text: Jest kilka pytań dotyczących tego tematu: * Czy tworzenie wszystkich indeksów na początku (projektowanie) jest ważniejsze niż inżynieria? * W rzeczywistości dodałem indeksy po wykryciu problemów z wydajnością i „wyjaśniamy plan” i dodajemy indeksy w razie potrzeby (tj. Nie dla wszystkich relacji). Czy powinienem po prostu pominąć tworzenie indeksów, zanim będzie to potrzebne, ponieważ i tak pojawią się problemy z wydajnością i prawdopodobnie indeksy, które zostały już utworzone, nie są używane? * Czy indeksy powinny być traktowane jako część wymagania/specyfikacji? Czasami widzę wymagania dotyczące wydajności, które zwykle są niejasne lub przypadkowe. Jeśli są częścią specyfikacji, to czy zarządzanie indeksami powinno być częścią implementacji? Chcę, żeby było trochę jaśniej i więcej tła. W rozwoju zwykle różne fazy angażują różne rodzaje ludzi (np. architekci, seniorzy i juniorzy). Niezwykłe byłoby, na przykład, gdyby juniorzy byli odpowiedzialni za projekt. Tak więc, gdy niektóre zadania nakładają się na siebie, nie jest jasne, kto jest odpowiedzialny, jeśli na przykład zapytanie trwa 2 sekundy. Definiowanie faz rozwoju i odpowiedzialności jest również ważne dla osób nie będących programistami, m.in. kierownicy projektów lub właściciele produktów, ponieważ są potrzebni do planowania i kalkulacji kosztów. Kierownik projektu może chcieć awansować architekta, aby wykonał wszystkie zadania związane z bazą danych tylko na początku i przez krótki czas. Jeśli po premierze produktu okaże się, że wydajność jest słaba, kierownik projektu chciałby wiedzieć, kto jest za to odpowiedzialny. Mam nadzieję, że wpadłeś na pomysł.


title: Jak pozwolić użytkownikowi wybrać lokalizację bazy danych aplikacji?

text: Pisanie oprogramowania dla klienta, a jednym z ich wymagań było to, aby użytkownik mógł określić, gdzie przechowywana jest baza danych aplikacji, czy to w sieci lokalnej, czy w repozytorium online. Mogę pozwolić im wybrać, gdzie je umieścić, ale jak przechowywać te informacje w aplikacji? Chyba nie rozumiem, jak utrwalać zmiany w aplikacji, która jest już wdrożona. To jest mój pierwszy program, więc nigdy nie przechodziłem procesu wdrażania. Napisany w C# dla Windows.


title: Jakie metryki powinny być używane do pomiaru zużycia pamięci przez program do testu wydajności?

text: Zostałem poproszony o dostarczenie statystyk wydajności programu, jedną z nich jest zużycie pamięci. Zauważyłem, że w perfmon lub w .NET API jest podobno wiele zmiennych związanych z wykorzystaniem pamięci, takich jak bit prywatny, zestaw roboczy, plik stronicowania itp. Jaka jest różnica i której użyć do pomiaru wydajności? Jeśli sprzedawca twierdzi, że w wersji X poprawiono zużycie pamięci przez program, jaka wartość może być użyta do sprawdzenia tego?


title: Wady CMS całkowicie opartego na Ajax

text: Postaram się, aby to pytanie było jak najbardziej konkretne.. Zaraz zacznę budować API dla nadchodzącego projektu. Obecnie myślę o PHP/Symfony2. Będzie to dość proste API oparte na HTTP dla CRUD na modelach witryny (i relacjach między nimi). Potrzebny będzie również CMS dla użytkowników. Tradycyjnie budując CMS (jeśli jest na zamówienie) używałbym po prostu standardowego podejścia opartego na MVC, ale dla tego konkretnego projektu myślę, że mógłbym go zbudować za pomocą wywołań Ajax do API, które już będzie istniało. Moje pytanie zasadniczo dotyczy decyzji, którą drogą iść, ale żeby było to konkretne, chciałbym wiedzieć, jakie mogą być wady. Na korzyść tego powinno zmniejszyć duplikację logiki kontrolera, dlaczego `/api/model/save/` i `/cms/model/save` robią bardzo podobne rzeczy? Obecnie jedyne dwie wady, o których mogę pomyśleć, to: * Obsługa wielu przeglądarek może być trudna. W przypadku tego konkretnego scenariusza nie powinno to stanowić problemu – ale kto wie, co może się wydarzyć w przyszłości? * Niektóre części witryny wymagałyby tradycyjnej logiki PHP lub rozszerzenia API (dla dowolnych części, które nie są częścią samego podstawowego API), na przykład do obsługi uwierzytelniania administratora. Czy jest coś, co przegapiłem, jakiś przytłaczający powód, by nie przyjąć takiego podejścia?


title: Jak znaleźć eksperta od skalowania?

text: Aplikacja internetowa znajduje się w ASP.NET i Sql Server i rozwija się znacznie szybciej niż oczekiwano. Gdzie mogę znaleźć eksperta, który wcześniej miał doświadczenie w przechodzeniu od małej witryny do rozwiązania używanego codziennie przez tysiące? Ktoś, kto może przejrzeć nasz system i udzielić nam porad dotyczących poprawy wydajności i aktualizacji naszych praktyk kodowania.


title: Rozwój jądra Linux

text: Próbuję zrozumieć jądro Linuksa i od dłuższego czasu zastanawia mnie jedna rzecz. Ponieważ linux jest używany na różnych platformach (takich jak smartfony, komputery stacjonarne, superkomputery itp.), a także na różnych architekturach, więc ten sam kod jądra jest używany przez wszystkie lub inne, a także ponieważ zawiera niektóre kody asemblera, więc musi to być architektura konkretny. więc czy programiści ze społeczności linuksowej stosują łatki do jednego jądra, czy też istnieje wiele wersji jądra dla różnych architektur i platform?


title: Jaki jest najbardziej elegancki sposób obsługi pętli między dwoma systemami zintegrowanymi zdalnie przez zdarzenia webhook?

text: Więc rozwijam ten mały silnik, który wykonuje zdalną integrację między dwoma systemami w celu synchronizacji danych, oba systemy mają webhooki do tworzenia i aktualizowania zdarzeń i oba mają interfejsy API (jeden to REST, a drugi to XML), więc jest to zdarzenie integracja oparta, a nie typowa integracja wsadowa. Mój problem polega na tym, że jeśli System A utworzy wpis i uruchomi webhook, który przechwyci silnik, to jeśli silnik go nie znajdzie, utworzy porównywalny wpis w Systemie B, który wyzwoli utworzenie webhooka, który następnie zostanie przechwycony jako nowa prośba... i widzisz mój problem. Ten sam scenariusz może się zdarzyć w przypadku webhooka aktualizacji (w rzeczywistości ten jest bardziej prawdopodobny). Zgaduję, że nie jestem pierwszą osobą na świecie, która napotkała ten problem, więc zastanawiam się, jaki byłby elegancki sposób obsługi tego, biorąc pod uwagę, że nie mogę modyfikować interfejsów API ani wstrzykiwać niestandardowych metadanych w wiadomościach, które mogłyby pomóż mi złapać pętlę. FYI, integracja odbywa się między dwoma systemami śledzenia problemów.


title: Jaki dokładnie jest numer kompilacji w MAJOR.MINOR.BUILDNUMBER.REVISION?

text: Myślę o numerach kompilacji, że za każdym razem, gdy tworzona jest nowa nocna kompilacja, generowany jest nowy numer BUILDNUMBER i przypisywany do tej kompilacji. Tak więc dla mojej aplikacji w wersji 7.0 nocne kompilacje będą miały wersję 7.0.1, 7.0.2 i tak dalej. Czy tak jest? Więc jaki jest pożytek z REWIZJI po numerze kompilacji? A może część REVISION jest zwiększana po każdej nocnej kompilacji? Jestem tutaj trochę zdezorientowany... czy nazywamy każdą nocną kompilację _BUILD_? Format jest wspomniany tutaj: AssemblyVersion - MSDN


title: Czy powinienem iść na rozmowę o pracę, chociaż wiem, że jej nie dostanę?

text: Oto okazja, którą dostałem. Obecnie jestem niezależnym twórcą stron internetowych i całkowicie samoukiem. Mam tylko NVQ w Business Administration. Jednak z pasją i zaangażowaniem zajmuję się programowaniem oraz budowaniem stron internetowych i aplikacji, czym zajmuję się już dobre 3-4 lata. Zamiast propozycji rozmowy kwalifikacyjnej, zaoferowano mi jednodniowy okres próbny, który może zamienić się w kontrakt na 6 miesięcy. Płaca jest dobra, ale jestem bardziej spragniony komercyjnych doświadczeń. Rzecz w tym, że wiem, że w mojej wiedzy są luki. Brakuje mi podstawowych pojęć programistycznych, nigdy nie studiowałem informatyki i używam google do znajdowania optymalnych rozwiązań napotykanych problemów. Czuję, że bardziej doświadczeni programiści w zespole zobaczą to niemal natychmiast. Ale czy będą współczuć, mając nadzieję, że kiedyś byli na moim poziomie? Jestem spragniony rozwoju i spędziłem dobre 15 godzin dziennie pracując nad tworzeniem stron internetowych i doskonaląc swoje umiejętności - ale są one bardzo szczególne. Znam html, css, javascript, jquery, ajax, php, git... Jestem dobrym programistą, ale nie sądzę, że jestem wystarczająco dobry, aby ktoś płacił mi 100 funtów dziennie. Sposób, w jaki działa próba, polega na tym, że w pierwszej połowie dnia przedstawiam zespół i różne działy. W drugiej połowie po południu dostaję „zadanie na żywo”, obowiązek, który wykonywałbym, gdybym tam pracował. Już z góry wiem, że ma to coś wspólnego z konwersją dokumentu tekstowego na html za pomocą php.. wygląda na to, że próbują nagiąć język, aby zrobić coś, czego nie powinien robić, i od pierwszego miejsca jest Google do badania bibliotek php. Rada? Czy powinienem iść, chociaż wiem, że prawdopodobnie nie przetrwam pierwszego dnia i prawdopodobnie zawstydzę się, tylko dla tego doświadczenia? Czy to pomoże mi rozwijać się jako programista? Nie chcę marnować czasu ludzi. Nadal dam z siebie wszystko. Doceń wkład osób, które były w podobnej sytuacji.


title: jak radzić sobie z klientami, którzy nie znają żadnych umiejętności programistycznych

text: Czy kiedykolwiek miałeś do czynienia z Klientem, który nic nie wie o programowaniu lub nie ma umiejętności technicznych, który nawet nie wie, jak włączyć komputer? Ma tylko pomysł, który jest świetny, ale nie wie, jak go wdrożyć, więc zatrudnił kilku programistów do realizacji swojego pomysłu. Niektórym nadmiernie podekscytowanym programistom podoba się ten pomysł i chętnie go wdrażają, nie myśląc o możliwości wystąpienia problemu. Teraz obie strony (klient i deweloper) uzgodniły coś po nakreśleniu ram czasowych projektu i korzyści. A potem przychodzi ta część, w której prawie kończysz projekt, a Twój klient wpada na kolejny pomysł i chce go zrealizować. Jako programista znasz możliwości zaimplementowania tego i dowiedziałeś się, że zniszczyłoby to 50% tego, co zrobiłeś i musisz przedłużyć ramy czasowe o co najmniej 50% tego, na który się zgodziłeś. Jeśli chodzi o stronę klientów, to tylko drobiazg, który trzeba dodać, a ponieważ już prawie wszystko skończyłem, pomyślał, że to tylko cegła, którą trzeba umieścić na ścianie, niestety ta cegła jest w środek ściany.


title: 100 000 żądań curl

text: Używam curl_multi_exec do przetwarzania ponad 100 000 żądań. Wykonuję 100 żądań na raz, ponieważ curl_multi_exec może obsłużyć tylko 100 żądań na raz, aby ostatecznie uzyskać 100 000 żądań. Dodaliśmy do tego systemu wiele serwerów, aby rozłożyć obciążenie [używamy równoważenia obciążenia]. Jaki jest najlepszy sposób, aby curl obsługiwał 100 tys. żądań i korzystał z tych dodatkowych serwerów? Jakie są minusy (poza czasem) obsługi tylu żądań na jednym serwerze? Jak mogę wykorzystać dodatkowe serwery do obsługi tych żądań? Myślałem o tym, aby każdy serwer obsługiwał partię żądań (jak jeden serwer obsługuje 500 żądań, inny 500, kolejny 500 itd.). Problem z używaniem tylko jednego serwera polega na tym, że istnieje limit pamięci w liczbie żądań, które może obsłużyć jeden serwer. Postanowiliśmy więc dodać dodatkowe serwery, ale nie jesteśmy pewni, jak zaprojektować ten system, aby używał curl do obsługi tak wielu żądań. Serwer strony trzeciej to API takie jak Facebook, mają świadomość, że będziemy wysyłać tak wiele żądań do ich serwerów.Do równoważenia obciążenia używamy serwera w chmurze Rackspace, w zasadzie load balancer kieruje przychodzące żądania do oddzielnych serwerów.


> **Możliwy duplikat:** > Jaka jest różnica między architektem oprogramowania, inżynierem oprogramowania i > programistą (programistą)? Odbyłem wiele dyskusji na temat roli architekta oprogramowania i nie doszedłem do wniosku. Postanowiłem więc zmienić pytanie. Jaka jest różnica umiejętności między Dev Senior a Software Architectem?


title: Jaka jest różnica między architektem oprogramowania, inżynierem oprogramowania i programistą (programistą)?

text: Czytam artykuł CNN o najlepiej płatnych pracach w Ameryce. Architekt oprogramowania jest wymieniony jako #1. Inżynier oprogramowania wymieniony jako #9. A programista (programista) jest wymieniony pod numerem 35. Myślę, że zastąpienie informatyka programistą jest słuszne, prawda? Wcześniej zawsze postrzegałem „Software Engineers” jako tytuł dla doświadczonych programistów i kierowników zespołów. Ale gdzie w takim razie mieści się „architekt oprogramowania” i co dokładnie robi? Czytałem opisy CNN, ale nie są one dla mnie zadowalające, więc zakładam, że mogę uzyskać tutaj dokładniejsze i bardziej doświadczone opisy od niesamowitej bazy użytkowników. Z góry dziękuję za wszelkie otrzymane odpowiedzi.


title: „Zrób to dobrze, wbrew życzeniom klienta” – jak to się nazywa?

text: Znamy optymalną sytuację negocjowania poprawek specyfikacji z klientem, aby specyfikacje robiły to, czego chciał klient, a nie to, co powiedział lub myślał, że chciał. To negocjacje, wyjaśnianie. Czasami nie jesteśmy w stanie przekonać klienta. Jesteśmy zmuszeni produkować zepsute zgodnie z projektem. To, zwane "demonologią" przez zasługę magów przyzywających demony i demony spełniające ich życzenia bardzo dosłownie, powodując w rezultacie zgon maga, jest kolejnym podejściem, które sprawi, że klient będzie bardzo niezadowolony, gdy zda sobie sprawę z błędu i oczywiście spróbuje przypiąć winić dewelopera. Teraz spotkałem się z zupełnie innym podejściem: klient stworzył proste specyfikacje, które nie uwzględniają jakiegoś krytycznego zastrzeżenia i zupełnie nie chce ich naprawiać, przyznać się do oczywistych błędów i zaakceptować sugerowane poprawki. Produkt wykonany zgodnie z tymi specyfikacjami zostanie krytycznie uszkodzony i może kosztować ludzkie życie. Jednak jest już za późno, aby całkowicie zrezygnować z umowy. Umowa zawiera za to klauzule karne, których tak naprawdę nie możemy zaakceptować. Decyzja szefa? Wykonujemy pracę dobrze i okłamujemy klienta, że zrobiliśmy to zgodnie ze specyfikacją. Algorytmy, o których mowa, są wystarczająco głęboko ukryte pod powierzchnią, produkt wykona pracę dobrze, nie zawiedzie w sytuacji z zastrzeżeniem, a jeśli ktoś nie będzie kopał zbyt głęboko, nigdy nie odkryje, że nie złamaliśmy go zgodnie z żądaniem. Czy jest jakaś potoczna nazwa dla tej taktyki wykonywania specyfikacji?


title: Wyświetlanie dużej ilości danych klientowi poprzez paginację

text: Posiadam aplikację webową, w której muszę pokazać klientom dużą ilość danych lub rekordów. Teraz będę używał stronicowania, ale zastanawiałem się, czy powinienem: 1. Załadować wszystkie dane raz, a następnie stronicowanie, sortowanie i wyszukiwanie będzie łatwe. Ale zajmie to dużo czasu (przy użyciu lokalnej bazy danych zajmuje to do 9 sekund. ) 2. Lub za każdym razem, gdy pokazuję nową stronę (z paginacji) wysyłam nowe żądanie do serwera, a następnie do DB, aby uzyskać kolejne rekordy..Ale co wtedy, gdy klient kliknie przycisk `Poprzedni`, ja ' Złożę nowe żądanie, aby uzyskać dane, które miałem poprzednio. Czy powinienem buforować dane, które zostały załadowane wcześniej i jak, jeśli to dobra technika? Więc załaduj wszystkie dane raz lub wykonuj nowe żądanie za każdym razem, gdy potrzebuję danych, które mogły zostać załadowane wcześniej. Używam ASP.NET MVC SPA z durandaljs i knockoutjs


title: Kto odpowiada za rozwój Javy?

text: Kiedy szukam w Google informacji o Javie, najczęściej wymieniane firmy to Sun, Oracle i IBM. Wiem, że Oracle kupiło Sun, a oficjalna strona Java to domena Oracle, więc mogę założyć, że Oracle jest oficjalnym deweloperem Java. Ale po krótkich poszukiwaniach IBM udostępnia również wiele samouczków i dokumentów dotyczących Javy. Dlaczego to? Czy IBM jest również zaangażowany w rozwój Javy?


title: dane audio i wideo w RTP

text: Załóżmy, że użytkownik chce przesłać zarówno dźwięk, jak i wideo do innego użytkownika, którego formaty to AMR dla audio i H.264 dla wideo. Czy użytkownik musi zawsze osobno przesyłać pakiety audio i wideo? Oznacza to, że nie jest możliwe miksowanie audio i wideo w tym samym pakiecie RTP, czy to prawda? Jeśli to prawda, myślę, że protokół RTP będzie musiał znać SSRC zarówno audio, jak i wideo, aby móc sprawdzić synchronizację dwóch strumieni.


title: Pojemnik złożony do przechowywania danych wyjściowych z parsera

text: Rozważ hierarchiczną strukturę, taką jak ten katalog [ [pozycja_0;pozycja_1;...;pozycja_n] [pozycja_0;pozycja_1;katalog_wewnętrzny[...];pozycja_m] inny_katalog [...] ] Katalog zawiera * tablicę ciągów (rozdzielonych przez ';' w danych wejściowych) * Mapa od nazwy do podkatalogów (po nazwie katalogu następuje '[') * Tablica nienazwanych podkatalogów Katalog można opisać tą klasą: class Directory { public: //Odpowiednie operacje private: std::vector<std::string> items; std::map<std::string, Directory> named_dirs; std::vector<Katalog> unnamed_dirs; }; Jednak: * Klasa Directory wymaga trzech zestawów operacji, co daje dużą definicję klasy * Operacja kopiowania będzie rekurencyjna Czy dane można przechowywać w lepszy sposób, unikając przynajmniej pierwszego punktu?


title: Czy istnieje powód, dla którego procesy są często krótkotrwałe na urządzeniach mobilnych i muszą wyraźnie utrzymywać swój stan?

text: Większość platform mobilnych (takich jak Android, iOS, Windows Phone 7 i, jak sądzę, nowy WinRT) może zabijać nieaktywne procesy aplikacji pod presją pamięci. Aby temu zapobiec, oczekuje się, że aplikacje będą zapisywać i przywracać swój stan, gdy ich proces zostanie zabity i ponownie uruchomiony. Uśmiercanie procesów aplikacji w ten sposób utrudnia pracę programistom. Przy różnych okazjach widziałem aplikację mobilną, która: * Powracała do ekranu powitalnego za każdym razem, gdy wracam do niego. * Awaria po przełączeniu z powrotem (prawdopodobnie dostęp do stanu, który już nie istnieje po zabiciu procesu) * Niewłaściwe zachowanie po przełączeniu z powrotem (czasami wymaga ponownego uruchomienia lub naprawienia przez zabójcę zadań) * W przeciwnym razie źle się zachowują w niektórych trudnych do odtworzenia sposób (np. usługa androida została zabita i uruchomiona ponownie w _wrong_ czasie) Naprawdę nie rozumiem, dlaczego te mobilne systemy operacyjne są zaprojektowane do zabijania zadań w ten sposób, zwłaszcza że utrudnia to tworzenie aplikacji i jest podatne na błędy. Systemy operacyjne na komputery stacjonarne nie zabijają takich procesów. Zamieniają nieużywane strony pamięci na pamięć masową. Czy istnieje powód, dla którego to samo podejście nie jest stosowane na urządzeniach mobilnych? Sprzęt mobilny jest tylko kilka lat za sprzętem PC pod względem wydajności. Jestem pewien, że istnieją bardzo dobre powody, dla których mobilne systemy operacyjne są projektowane w ten sposób. Jeśli możesz wskazać mi artykuł lub post na blogu, który wyjaśnia te powody lub może dać mi jakiś wgląd, byłbym bardzo wdzięczny.


title: skalowalność Scali przez Javę

text: Przeczytałem artykuł, który mówi, że Scala radzi sobie ze współbieżnością lepiej niż Java. http://www.theserverside.com/feature/Solving-the-Scalability-Paradox-with- Scala-Clojure-and-Groovy > ...ograniczenie skalowalności ogranicza się konkretnie do samego języka programowania Java >, ale jest nie ograniczeniem platformy Java > jako całości... > > Problemy ze skalowalnością Javy nie są nowym odkryciem. W rzeczywistości wykonano wiele > pracy, aby rozwiązać te właśnie problemy, a dwa z najbardziej > udanych projektów to języki programowania o nazwie Scala i > Clojure... > > ...Scala znajduje sposoby na obejście problematycznego wątku i paradygmat blokowania > języka Java... Jak to możliwe? Czy Scala nie korzysta z podstawowych bibliotek Javy, które przenoszą wszystkie problemy z wątkami i blokowaniem z Javy do Scali?


title: pytania dotyczące konkretnego algorytmu

text: Szukając szybkiego algorytmu primr, natknąłem się na to: public static boolean isP(long n) { if (n==2 || n==3) return true; if ((n&0x1)==0 || n%3==0 || n<2) zwróć false; długi pierwiastek=(long)Math.sqrt(n)+1L; // sprawdzamy tylko liczby postaci 6*k+1 i 6*k-1 for (long k=6;k<=root;k+=6) { if (n%(k-1)==0) zwróć fałsz; if (n%(k+1)==0) zwraca fałsz; } zwróć prawdę; } Moje pytania to: 1. Dlaczego od dawna jest używany wszędzie zamiast int? Ponieważ przy długim typie argument może być znacznie większy niż Integer.MAX, dzięki czemu metoda jest bardziej elastyczna? 2. W drugim 'if', czy n&0x1 to to samo co n%2? Jeśli tak, dlaczego autor nie użył po prostu n%2? Dla mnie jest bardziej czytelny. 3. Linia, która ustawia zmienną 'root', po co dodawać 1L? 4. Jaka jest złożoność czasu wykonywania? Czy to O(sqrt(n/6)) czy O(sqrt(n)/6)? A może po prostu powiedzielibyśmy O(n)?


title: Jak dopasować testowanie do sprintów Scrum i jak pisać historyjki użytkownika w Scrumie

text: Jestem liderem zespołu programistycznego nowego projektu w mojej firmie. To pierwszy projekt, w którym firma wykorzysta Scrum. Mamy kaskadowy/iteracyjny SDLC. BA piszą dokumentację wymagań, przekazują programistom i testują, programiści zaczynają programować i wydadzą do testów w iteracjach. Testerzy potrzebują dużo czasu, aby przetestować wydanie, dzięki któremu deweloperzy kontynuują rozwój, ale także poprawki błędów dla bieżącego wydania. Mam kilka pytań 1. W sprincie z powiedzmy 5 historyjkami, kiedy wypuszczasz do testów? Czy dzieje się tak, gdy tylko historia zostanie ukończona przez dewelopera, czy po ukończeniu wszystkich historii, ale przed końcem sprintu, dając testowi wymagany czas na przetestowanie. 2. Jeśli licencjat pisze historyjki użytkownika, jakie powinny być szczegóły. Tradycyjnie napisanie specyfikacji z całym układem interfejsu, zachowaniem, tekstem itp., które mają zostać sfinalizowane, zajmuje dużo czasu. Myślę, że moje pytanie brzmi, jak pisać historie, które można wdrożyć i przetestować. 3. Nasz zespół testowy jest nietechniczny. Jak ważne jest posiadanie zautomatyzowanych testów UI dla Scrum. Interfejs użytkownika jest oparty na WPF. Mam solidne doświadczenie w programowaniu z wykorzystaniem metod zwinnych (TDD, przeglądy kodu, refaktoryzacja itp.), ale jestem nowy w scrum. edit: Przez iteracje rozumiem, że jeśli jest 100 wymagań, możemy wydać je do testów, gdy skończymy 30, 35, 35 wymagań, zamiast czekać, aż wszystkie 100 wymagań zostanie ukończonych.


title: Jak zintegrować testowanie z procesem Scrum?

text: To mnie naprawdę wprawia w zakłopotanie. Mamy „definicję ukończenia”, która obejmuje „zrobione”, testy jednostkowe „zrobione”, test deweloperski „zrobione”. Jednak mamy również test akceptacji użytkowników, który należy „zrobić”, ale firma chce wiedzieć, kiedy historie użytkowników są gotowe, aby mogli zobaczyć rzeczy (uat tak naprawdę nie jest priorytetem do czasu wydania). Ale ponieważ jest to poza początkowym wykonaniem (gdzie przekazujemy nasze historie użytkowników), jak możemy powiedzieć, że to zrobione? A gdzie to pasuje do szacowania? Gdzie znajdę informacje na temat integracji testowania z procesem scrum? Myślę, że muszę to przeczytać...


title: Programowanie funkcjonalne: właściwe pomysły dotyczące współbieżności i stanu?

text: Zwolennicy FP twierdzili, że współbieżność jest łatwa, ponieważ ich paradygmat unika stanu zmiennego. Nie rozumiem. Wyobraź sobie, że tworzymy wieloosobowy dungeon crawl (roguelike) przy użyciu FP, w którym kładziemy nacisk na czyste funkcje i niezmienne struktury danych. Generujemy loch złożony z pomieszczeń, korytarzy, bohaterów, potworów i łupów. Nasz świat jest w rzeczywistości grafem obiektowym struktur i ich relacji. Gdy rzeczy się zmieniają, nasza reprezentacja świata jest zmieniana, aby odzwierciedlić te zmiany. Nasz bohater zabija szczura, podnosi krótki miecz itp. Dla mnie świat (obecna rzeczywistość) niesie tę ideę państwa i brakuje mi tego, jak FP to przezwycięża. Gdy nasz bohater podejmuje działania, funkcje zmieniają stan świata. Wydaje się, że każda decyzja (sztuczna inteligencja lub ludzka) musi być oparta na obecnym stanie świata. Gdzie pozwolilibyśmy na współbieżność? Nie możemy mieć wielu procesów jednocześnie zmieniających stan świata, aby jeden proces nie oparł swoich wyników na jakimś wygasłym stanie. Wydaje mi się, że wszelka kontrola powinna zachodzić w pojedynczej pętli sterowania, więc zawsze przetwarzamy obecny stan reprezentowany przez nasz aktualny wykres obiektów świata. Oczywiście istnieją sytuacje doskonale nadające się do współbieżności (tj. Podczas przetwarzania pojedynczych zadań, których stany są od siebie niezależne). Nie widzę, jak współbieżność jest przydatna w moim przykładzie i to może być problem. Mogę jakoś fałszywie przedstawiać twierdzenie. Czy ktoś może lepiej przedstawić to twierdzenie?


title: Rozbicie dużego obiektu PHP używanego do abstrakcji bazy danych. Najlepsze praktyki?

text: Dwa lata temu uważano, że pojedynczy obiekt z funkcjami takimi jak `$database->get_user_from_id($ID)` byłby dobrym pomysłem. Funkcje zwracają obiekty (nie tablice), a kod frontonu nigdy nie martwi się o bazę danych. To było świetne, dopóki nie zaczęliśmy powiększać bazy danych. Obecnie w obiekcie bazy danych jest ponad 30 tabel i około 150 funkcji. Staje się to niepraktyczne i nie do opanowania, a ja zamierzam to zerwać. Jakie jest dobre rozwiązanie tego problemu? Projekt jest duży, więc istnieje limit tego, w jakim stopniu mogę coś zmienić. Moim obecnym planem jest rozszerzenie bieżącego obiektu dla każdej tabeli, a następnie umieszczenie obiektu bazy danych w ich zawartości. Tak więc powyższy przykład zamieniłby się w (zakładając, że "użytkownik" jest tabelą) `$database->user->get_user_from_id($ID)`. Zamiast jednego dużego pliku mielibyśmy plik dla każdej tabeli.


title: Jak wyszukiwać informacje związane z językiem programowania Go?

text: Jeśli istnieje coś, co zabiłoby język Go, to jest to nazwa. Bardzo trudno jest znaleźć coś związanego z siecią, używając tylko "Idź" w zapytaniu. Słowo to jest jednym z najczęstszych w języku angielskim. Więc widzę w wyniku wszystko oprócz rzeczy związanych z Go. Nawet Google, który sponsoruje język i słynie ze śledzenia wszystkiego, czego szukam, nie może namierzyć, że jestem programistą tak zainteresowanym językiem programowania, a nie gramatykami języka angielskiego. Jak wyszukiwać informacje związane z samym językiem programowania, z wyłączeniem wyników dotyczących gramatyki języka angielskiego? Wyobraź sobie na przykład post na blogu, w którym ktoś wspomina o swoich obserwacjach na temat Go. Prawdopodobnie nie użyje łatwego do wyszukania zdania, takiego jak „język programowania go”, może coś „jest jedna rzecz, którą lubię w Go”.


title: Dlaczego nie możemy zadeklarować 'extern C' dla makr C++?

text: Jestem nowy w C/C++. Chciałem wiedzieć, dlaczego nie możemy zadeklarować 'extern C' dla makr w C++ podobnych do metod/funkcji... co pozwoli na dostęp do makr zdefiniowanych w pliku C++ w plikach .c. Z góry dziękuję


title: Weryfikacja SMS w aplikacji webowej

text: To mój pierwszy projekt związany z weryfikacją SMS. Jak wdrożyć weryfikację SMS w aplikacji internetowej do składania zamówień online? Na przykład: - gdy próbujemy zresetować hasło w serwisie amazon, wysyła SMS z kodem weryfikacyjnym i po jego wpisaniu przechodzi do zmiany hasła. Chcę zaimplementować tę samą funkcję w mojej aplikacji, w której użytkownicy będą składać zamówienia, ale przed ostatnim krokiem wyśle kod weryfikacyjny sms na telefon komórkowy użytkownika i zweryfikuje to samo. Głównym wymaganiem jest Bramka SMS (Jakość Transakcyjna). Ale ponieważ jestem w tym zupełnie nowy, więc każdy pomysł, jak postępować, lub jak go wdrożyć.


title: Czy „Explain the RAII idiom” to dobre pytanie sprawdzające C++?

text: Firma, z którą współpracuję, poprosiła mnie o przeprowadzenie badań telefonicznych kandydatów, aby upewnić się, że nie są kompletnie zakłopotani wysyłając kogoś do potencjalnego klienta. Okazuje się, że sporo osób zostało umieszczonych w roli programisty C++. Nie spędzam dużo czasu w C++, ale wykonałem kilka trywialnych i nietrywialnych projektów w języku. Pomyślałem, że "Explain the RAII idiom" byłoby miłym pytaniem softballowym, na które większość poważnych programistów C++ mogłaby odpowiedzieć w półśnie i pozwoliłoby mi przejść do bardziej interesujących pytań dotyczących doświadczenia. Ale okazuje się, że ludzie, którzy mają ponad 10 lat doświadczenia w C++, nie rozpoznają tego terminu, nawet jeśli rozszerzę akronim do „Resource Acquisition is Initialization”. Jeden z kandydatów posunął się nawet do stwierdzenia, że nie zawsze jest praktyczne zastosowanie tej techniki w rozwoju Windows, co moim zdaniem było dziwnym odczuciem, ale widziałem kilka przykładów, które prawdopodobnie wspierają ten tok myślenia. (Ale tak naprawdę tylko _prawdopodobnie_). Nawet kilku programistów C++, których znam na tyle dobrze, aby ocenić ich kompetencje, powiedziało, że nie rozpoznali tego terminu, ale po przeczytaniu podsumowania techniki powiedziało: „O tak, nie wiedziałem, że ma nazwę. myślał o tych rzeczach jako o czymś, co „po prostu musisz zrobić”. Pamiętam termin z drugiego wydania książki Stroustrupa, mimo że wtedy nie doznałem pełnego oddziaływania. Czy możesz mi wyjaśnić idiom RAII? uczciwe pytanie przesiewowe? Czy rozsądne jest oczekiwanie, że wszyscy kompetentni programiści C++ to zrozumieją? Czy termin jest bardziej ezoteryczny, niż bym myślał? Zakładając, że kandydat nie zna tego terminu, czy są dalsze pytania, które mogą pomóc mi ustalić, czy przynajmniej zinternalizował praktyki, dzięki którym RAII działa? Czy istnieją lepsze alternatywne pytania „odchwaszczające”, które dają kandydatowi pewną swobodę w udzielaniu odpowiedzi i pomagają kandydatowi wykazać się zrozumieniem programowania w C++? **Edycja do dodania** : Aby wyjaśnić, nie jestem typem ankietera, który dyskwalifikuje ludzi, ponieważ nie znają modnych słów i akronimów. Myślę jednak, że rozsądne jest oczekiwanie, że doświadczony programista C++ zinternalizował dobre praktyki zarządzania zasobami. Myślę również, że ważne jest, aby sprawdzić, czy kandydat rozumie pewne „podstawy” dotyczące technologii, w której twierdzi, że posiada wiedzę specjalistyczną, zanim przejdzie do ciekawszych pytań dotyczących projektowania, rozwiązywania problemów itp. Myślę, że to, czego szukam, jest dobrym sposobem zadać pytanie otwarte, nadające się do wykorzystania podczas krótkiego przesłuchania telefonicznego, które mogę wykorzystać do oceny podstawowej wiedzy kandydata na temat dobrych praktyk zarządzania zasobami w C++, zanim zadam „trudne” pytania.


title: Dlaczego ludzie wybierają licencję MIT zamiast BSD, jeśli „klauzula braku poparcia” BSD jest dobrym pomysłem?

text: Zgodnie z tym pytaniem i jego odpowiedziami Jaki jest cel „klauzuli braku poparcia” w licencji New BSD? mądrzejszym wydaje się wybór licencji BSD zamiast MIT, aby uniemożliwić ludziom używanie twojego imienia i nazwiska w niepożądany sposób. Jeśli tak jest, dlaczego ludzie nadal wybierają licencję MIT zamiast licencji BSD?


title: Najlepsza architektura aplikacji ASP.NET WebForms

text: Napisałem dla klienta portal ASP.NET WebForms. Projekt ewoluował, a nie był odpowiednio zaplanowany i zorganizowany od samego początku. W rezultacie cały kod jest łączony w ramach tego samego projektu i bez żadnych warstw. Klient jest teraz zadowolony z funkcjonalności, więc chciałbym zrefaktoryzować kod tak, abym był pewny wydania projektu. Ponieważ wydaje się, że istnieje wiele różnych sposobów projektowania architektury, chciałbym otrzymać kilka opinii na temat najlepszego podejścia. **FUNKCJONALNOŚĆ** Portal umożliwia administratorom konfigurowanie szablonów HTML. Inni powiązani „partnerzy” będą mogli wyświetlać te szablony, dodając kod IFrame do swojej witryny. W ramach tych szablonów klienci mogą rejestrować i kupować produkty. Interfejs API został zaimplementowany przy użyciu WCF, umożliwiając również firmom zewnętrznym komunikację z systemem. Sekcja Admin umożliwia administratorom konfigurowanie różnych funkcji i przeglądanie raportów dla każdego partnera. System wysyła faktury i powiadomienia e-mail do klientów. **BIEŻĄCA ARCHITEKTURA** Obecnie używa EF4 do odczytu/zapisu w bazie danych. Obiekty EF są używane bezpośrednio w plikach aspx. Ułatwiło to szybki rozwój podczas pisania strony, ale prawdopodobnie niedopuszczalne jest utrzymywanie jej w ten sposób, ponieważ ściśle łączy bazę danych z interfejsem użytkownika. Do częściowych klas obiektów EF dodano konkretną logikę biznesową. **PYTANIA** Celem refaktoryzacji będzie sprawienie, by witryna była skalowalna, łatwa w utrzymaniu i bezpieczna. 1. Jaka architektura byłaby do tego najlepsza? Proszę opisać, co powinno być w każdej warstwie, czy powinienem używać wzorca DTO / POCO / Active Record itp. 2. Czy istnieje solidny sposób automatycznego generowania DTO / BO, aby wszelkie przyszłe ulepszenia były łatwe do wdrożenia pomimo dodatkowych warstw ? 3. Czy korzystne byłoby przekonwertowanie projektu z WebForms na MVC?


title: scentralizowane ramy aplikacji hostowanych lub „prywatne kopie” dla każdego programu?

text: Dysponujemy scentralizowanym frameworkiem aplikacji biznesowych, który zawiera całą naszą logikę biznesową i zapewnia dostęp do wszystkich naszych systemów zaplecza. Jest dostępny dla wielu różnych programów i klientów za pośrednictwem usług zdalnych. Kiedy musimy dokonać zmiany w określonej części programu, obecnie musimy ponownie przetestować wszystkie nasze różne programy i klientów. Nawet zakładając, że rozszerzymy nasze automatyczne testowanie, uważamy, że nie możemy być pewni, że po wydaniu nowej wersji naszego frameworka aplikacji wszystkie różne programy będą działały poprawnie po tej zmianie bez ręcznego ponownego testowania wszystkich tych programów. Za każdym razem, gdy wypuszczamy nową wersję projektu C, musimy przetestować program A i B pod kątem niezamierzonych zmian. Najlepiej, gdybyśmy przeszli do systemu wydań, w którym po wydaniu projektu C musimy tylko ponownie przetestować program C, a nie A i B pod kątem ewentualnych zmian, które przeoczyliśmy. Pomysł żyje, aby powielić nasze scentralizowane ramy aplikacji biznesowych, po jednym dla każdego podprojektu. Oznaczałoby to, że gdy wydamy nową wersję programu C, udostępnimy prywatną wersję frameworka aplikacji. Po wydaniu programu C nic się nie zmieni dla aplikacji A i B, nadal komunikują się one ze swoim prywatnym frameworkiem aplikacji - więc nie trzeba ich ponownie testować. Wymyśliłem następujące zalety i wady: Wady: * Będziemy mieć nasz framework hostowany n razy dla każdego projektu * Będziemy się mylić w jakiej wersji/projektu, jaki błąd został rozwiązany. * Wraz z poważną poprawką / zmianą będziemy musieli ponownie wydać wszystkie n wersji frameworka aplikacji. Zalety: * Znacznie ogranicza testowanie * „Pewność”, że żadne niezamierzone zmiany nie zostaną wydane dla różnych projektów. Muszę przyznać, że nie jestem fanem prywatnego podejścia do kopiowania, ale nie przedstawiam lepszej alternatywy ani lepszych argumentów przeciwko temu. Czy ktoś był w podobnej sytuacji i jak sobie z tym poradził? Czy powyższe podejście polegające na „kopiowaniu ram prywatnych” jest solidnym/akceptowanym podejściem? Wszelkie porady są mile widziane. Z góry dziękuję.


title: Entity Framework 5, oddzielający logikę biznesową od modelu - Repozytorium?

text: Pracuję nad moją pierwszą publiczną aplikacją internetową i używam MVC 4 dla warstwy prezentacji i EF 5 dla DAL. Struktura bazy danych jest zablokowana i istnieją umiarkowane różnice między sposobem wprowadzania danych przez użytkownika a sposobem zapełniania samej bazy danych. Zrobiłem mnóstwo czytania na temat wzorca repozytorium (z którego nigdy nie korzystałem), ale większość moich badań odpycha mnie od używania go, ponieważ rzekomo tworzy niepotrzebny poziom abstrakcji dla najnowszych wersji EF, ponieważ repozytoria i jednostki- pracy są już wbudowane. Moje początkowe podejście polega po prostu na utworzeniu oddzielnego zestawu klas dla moich obiektów biznesowych w LOGIKI biznesowej, które mogą działać jako pośrednik między moimi kontrolerami a DAL. Oto przykładowa klasa: public class MyBuilding { public int Id { get; zestaw prywatny; } ciąg publiczny Nazwa { get; ustawić; } ciąg publiczny Uwagi { get; ustawić; } private readonly Entities _context = new Entities(); // Czy ten wątek jest bezpieczny? private static readonly int UserId = WebSecurity.GetCurrentUser().UserId; public IEnumerable<MyBuilding> GetList() { IEnumerable<MyBuilding> buildingList = from p in _context.BuildingInfo gdzie p.Building.UserProfile.UserId == UserId wybierz nowy MójBuilding {Id = p.BuildingId, Name = p.BuildingName, Notes = p.Uwagi.Budynku}; zwróć lista budynków; } public void Create() { var b = new Building {UserId = UserId, Notes = this.Notes}; _kontekst.Budynek.Dodaj(b); _context.SaveChanges(); // Ustaw identyfikator budynku this.Id = b.BuildingId; // Rozpocznij tabele 1 do 1 z odniesieniem do nowego budynku _context.BuildingInfo.Add(new BuildingInfo {Building = b}); _context.GeneralInfo.Add(nowe GeneralInfo {Budynek = b}); _context.LocationInfo.Add(nowe LocationInfo {Budynek = b}); _context.SaveChanges(); } public static MyBuilding Find(int id) { using (var context = new Entities()) // Czy można to zrobić w metodzie statycznej? { var b = context.Building.FirstOrDefault(p => p.BuildingId == id && p.UserId == UserId); if (b == null) wyrzuć nowy wyjątek("Błąd: nie znaleziono budynku lub użytkownik nie ma dostępu."); return new MyBuilding {Id = b.BuildingId, Name = b.BuildingInfo.BuildingName, Notes = b.Notes}; } } } Moja główna obawa: czy sposób tworzenia wystąpienia mojego DbContext jako właściwości prywatnej jest bezpieczny dla wątków i czy bezpieczne jest posiadanie statycznej metody, która tworzy wystąpienie oddzielnego DbContext? A może podchodzę do tego wszystkiego źle? Nie sprzeciwiam się poznawaniu wzorca repozytorium, jeśli przyjmuję tutaj całkowicie błędne podejście.


title: Czy przegląd kodu jest subiektywny czy obiektywny (wymierny)?

text: Przygotowuję kilka wskazówek dotyczących przeglądów kodu. Nie mamy jeszcze jednego formalnego procesu i staramy się go sformalizować. A nasz zespół jest rozproszony geograficznie. Używamy TFS do kontroli kodu źródłowego (użyliśmy go również do zadań/śledzenia błędów/zarządzania projektami, ale przenieśliśmy to do JIRA) z Visual Studio 2008 dla rozwoju. **Czego szukasz podczas sprawdzania kodu?** * _To są rzeczy, które wymyśliłem_ 1. Egzekwuj reguły FxCop (jesteśmy sklepem Microsoft) 2. Sprawdź wydajność (dowolne narzędzia?) i bezpieczeństwo (myślę o użyciu OWASP - code crawler) i bezpieczeństwie wątków 3. Przestrzegaj konwencji nazewnictwa 4. Kod powinien obejmować przypadki brzegowe i warunki brzegowe 5. Powinien poprawnie obsługiwać wyjątki (nie połykaj wyjątków) 6. Sprawdź, czy funkcjonalność nie jest zduplikowana w innym miejscu 7. Treść metody powinna być mała (20-30 linii), a metody powinny robić jedną rzecz i tylko jedną rzecz (brak efektów ubocznych i unikanie sprzężenia czasowego -) 8. Nie przekazywać/zwracać wartości null w metodach 9. Unikać martwego kodu 10. Udokumentuj publiczne i chronione metody/właściwości/zmienne **Na jakie inne rzeczy ogólnie powinniśmy zwracać uwagę?** Próbuję sprawdzić, czy możemy określić ilościowo proces recenzji (wygenerowałby identyczne wyniki, gdy byłyby recenzowane przez różne osoby) Przykład : Mówiąc „metoda” d treść nie powinna być dłuższa niż 20-30 wierszy kodu”, w przeciwieństwie do stwierdzenia „treść metody powinna być mała”. A może przegląd kodu jest bardzo subiektywny (i różniłby się w zależności od recenzenta)? Celem jest stworzenie systemu oznaczania (powiedzmy -1 punkt za każde naruszenie reguł FxCop, -2 punkty za nieprzestrzeganie konwencji nazewnictwa, 2 punkty za refaktoryzację itp.), aby programiści byli bardziej ostrożni podczas sprawdzania swojego kodu. W ten sposób możemy zidentyfikować programistów, którzy konsekwentnie piszą dobry/zły kod. Celem jest, aby recenzent poświęcił maksymalnie około 30 minut na wykonanie recenzji (wiem, że jest to subiektywne, biorąc pod uwagę fakt, że zestaw zmian/weryfikacja może zawierać wiele plików/ogromne zmiany w istniejącej architekturze itp., ale otrzymujesz ogólny pomysł, recenzent nie powinien spędzać dni na przeglądaniu czyjegoś kodu). **Jakiego innego obiektywnego/mierzalnego systemu stosujesz, aby zidentyfikować dobry/zły kod napisany przez programistów?** Odniesienie do książki: _Czysty kod: podręcznik zwinnego rzemiosła oprogramowania autorstwa Roberta Martina_.


title: Nie mogę pracować nad prawdziwymi projektami, ponieważ ciągle myślę o moich projektach pobocznych

text: Mam „prawdziwy” projekt, nad którym pracuję, aby zarabiać pieniądze, i projekt poboczny, który jest znacznie ciekawszy. Mam problem, że za każdym razem, gdy idę do pracy nad moim „prawdziwym” projektem, myślę tylko o pomysłach na mój poboczny projekt. Jak sobie z tym radzicie? Tylko moc przez prawdziwą pracę?


title: Licencja na prawa autorskie do projektu open source podczas kopiowania kilku plików z innego projektu

text: Pracuję nad biblioteką, którą udostępniam na licencji MIT, ale planuję skopiować kilka przydatnych klas z innego projektu open source, który jest udostępniany na licencji Apache. Oczywiście pozostawię oryginalną licencję nienaruszoną i przyznam kredyt oryginalnemu projektowi, ale jak działa licencjonowanie? EDYCJA: To, co muszę wiedzieć, to - 1\. Czy mogę to zrobić, skoro będą dwie różne licencje? 2\. Czy zdarzy się, że większość mojego projektu będzie na licencji MIT (kod, który napisałem), ale te pliki, które skopiowałem z innego projektu, pozostaną pod Apache? EDYCJA 2: Mam odpowiedź tutaj - Jak dołączyć bibliotekę Apache do mojego kodu opensource? Zagłosuj, aby zamknąć to pytanie.


title: Jak daleko mogę odejść od mojego oryginalnego modelu domeny i nadal korzystać z zalet ORM?

text: Mam następujące **domenowe** modele: public class User { public int Id { get; ustawić; } public ICollection<Produkt> Produkty { get; ustawić; } } public class Produkt { public int Id { get; ustawić; } public dziesiętna Cena { get; ustawić; } } Moja encja Użytkownik zawiera kolekcję Produktów i żaden Produkt nie może zostać utworzony bez Użytkownika. Używam podejścia EntityFramework Code First, które wymaga ode mnie zadeklarowania klucza obcego na mojej encji Product, zmieniając go w ten sposób na: public class Product { public int Id { get; ustawić; } public dziesiętna Cena { get; ustawić; } public int Identyfikator użytkownika { get; ustawić; } } Nie podoba mi się to, ponieważ z **punktu widzenia domeny** nie jest interesujące, aby klucz obcy User był pokazywany w mojej encji Product. To mi jednak nie szkodzi i mogę z tym żyć. Proszę pamiętać, że używam ORM-a do uproszczenia mojej pracy, więc do pewnego stopnia mi to odpowiada. Czy to w porządku, jeśli moje **jednostki domeny** mają właściwości lub takie rzeczy tylko po to, by spełnić moje wybrane wymagania ORM?


title: Najlepsze praktyki dotyczące rotacji dużych zbiorów danych?

text: [edytuj] Okazuje się, że jest 1,5 miliona rekordów... Baza danych SQL potrzebuje około 17-20 sekund na uruchomienie zapytania. Czy w takim przypadku najlepiej byłoby, gdyby Java obsługiwała łączenia i rearanżację? Ponieważ jest to aplikacja internetowa, jeśli wielu użytkowników otrzymuje eksport z Excela, czy długie zapytania zmniejszą ogólną wydajność witryny? [/edytuj] Mam zestaw danych, który zawiera około 70 000 rekordów. Dla uproszczenia załóżmy, że dane obecnie wyglądają tak: Identyfikator użytkownika | Pytanie | Odpowiedź W naszej aplikacji internetowej dane muszą zostać obrócone o 90 stopni i wyeksportowane do Excela, tak że mamy następujące: ID użytkownika | Pytanie 1 | Pytanie 2 | Pytanie 3... Myślę, że mamy około 50 kolumn. Czy należy uporządkować dane po stronie bazy danych za pomocą tabel przestawnych, czy też po stronie aplikacji? Które rozwiązanie byłoby najłatwiejsze w utrzymaniu? Które rozwiązanie miałoby największą wydajność?


title: Jak ważne jest automatyczne testowanie w szybko wydawanych, niekrytycznych (internetowych) aplikacjach?

text: Myślę, że rozumiem teoretyczne korzyści z testów automatycznych, zwłaszcza testów jednostkowych. Nie jestem jednak pewien, jaka jest optymalna ilość testów, gdy projekt jest niekrytyczną, szybko rozwijaną (i wdrażaną) aplikacją internetową z dość dużą bazą użytkowników. Moje obecne rozumowanie wygląda następująco: * Większość podstawowych funkcji naszej aplikacji można ręcznie przetestować w ciągu kilku sekund. (Strona jest rodzajem wyszukiwarki, więc w zasadzie - uruchom wyszukiwanie, uzyskaj wyniki, działa.) * Oczywiście istnieje wiele przypadków brzegowych i opcji i takich, które można przetestować, a także testy jednostkowe logiki leżącej u jej podstaw, ale jeśli coś znaczącego się zepsuje i nie zostanie złapane przed opublikowaniem, dosłownie otrzymujemy e-maile od użytkowników w ciągu godziny. (W ciągu kilku minut, jeśli jest to poważny problem, ale bardzo rzadko któryś z nich wyjdzie na jaw.) * Tak więc konsekwencją każdego znaczącego problemu podczas transmisji na żywo jest to, że kilka osób odczuwa niedogodności przez kilka minut. Być może jakiś procent nowych odwiedzających, których pozyskamy w tym okresie, zostałby utracony, chociaż liczby te powinny być bardzo niskie, ponieważ okres jest tak krótki. * Błędy o mniejszym wpływie mogą potrwać dłużej, zanim ktoś wyśle e-maila – dni, a nawet tygodnie, w zależności od wagi – ale będą też miały mniejszy wpływ na użytkowników, więc z perspektywy biznesowej prawdopodobnie nie mają tak dużego znaczenia. Nie twierdzę, że doskonałe pokrycie testowe jest bezużyteczne. Oczywiście byłoby miło przechwycić każdy numer, zanim zostanie opublikowany. Ale w kompromisie między kosztami a korzyściami między pracą nad testami a szybkim reagowaniem na opinie użytkowników / dodawaniem i ulepszaniem funkcji, ta ostatnia wydaje się wygrywać. Jedyny wyjątek, który znalazłem, to kod, który nie ma bezpośredniego wpływu na użytkownika. Na przykład kod wyświetlania reklam lub zbieranie danych. Nie wpływają one bezpośrednio na wartość witryny dla użytkownika, więc jest mało prawdopodobne, aby ludzie powiadomili nas o awarii. Będą też mniej zauważalne w naszych testach funkcji. Widzę więc mocne argumenty za dobrze zdefiniowanymi testami jednostkowymi. (I od tego momentu, jak na ironię, pojawia się spektrum, w którym dobre pokrycie testów staje się mniej ważne, gdy funkcje stają się ważniejsze, do punktu, w którym kod, który jest krytyczny dla działania witryny, tak naprawdę nie musi być testowany (w dobrze zdefiniowanym sposób) w ogóle.) Więc moje pytanie brzmi, czy jestem tutaj daleko od bazy? Czy szerokie pokrycie testami i/lub tworzenie sterowane testami jest optymalne nawet w niekrytycznym środowisku, w którym są stale wydawane? A jeśli tak, to gdzie mam błąd w moim rozumowaniu? Albo zakładając, że naprawimy błędy natychmiast po zgłoszeniu, czy rozsądne jest skupienie się na szybkim, zwinnym rozwoju, wiedząc, że nasi użytkownicy dadzą nam znać, jeśli coś zepsujemy? (Z wyjątkiem formalnych testów funkcjonalności, które nie są bezpośrednio widoczne dla użytkownika).


title: Czy przy tworzeniu gry konieczne jest zapamiętywanie każdej linijki kodu?

text: Obecnie śledzę tutaj samouczek na youtube i z tego, co rozumiem, zaczynamy od stworzenia silnika do uruchamiania gry. Czy powinienem być w stanie wdrożyć to wszystko sam bez pomocy z zewnątrz w przyszłości, czy powinienem po prostu upewnić się, że rozumiem wszystko, co się dzieje? Czy profesjonalny twórca gier wiedziałby, jak zaimplementować wszystko, czego potrzeba, aby stworzyć grę, czy po prostu skopiowałby i wkleił pewne części (takie jak tworzenie bufora lub limitu fps) i edytował je według własnego gustu?


title: Jakie słowa kluczowe są ważne, aby przyspieszyć kod w C++?

text: Portuję do C++ i dodaję dużo funkcjonalności do aplikacji numerycznej napisanej w Fortranie 77. Chociaż nienawidzę F77, to muszę przyznać, że sprawa idzie bardzo szybko. Teraz implementuję praktycznie tę samą strukturę i algorytm, ale mimo to różnica w czasie wykonania jest zauważalna. Nieduży, ale jest. I zastanawiam się, czy to możliwe, że muszę przekazać kompilatorowi dodatkowe informacje? Jedyną związaną z tym informacją, jaką udało mi się znaleźć, jest zalecenie użycia słowa kluczowego **restrict**, które jest obsługiwane przez g++, ale to wszystko. Stąd moje pytanie: Czy są już słowa kluczowe ważne dla przyspieszenia kodu w C++ w aplikacjach numerycznych? a może dyrektywy kompilatora? Dziękuję!


title: Logowanie asynchroniczne – jak to zrobić?

text: W wielu serwisach, nad którymi pracuję, odbywa się wiele operacji logowania. Usługi są usługami WCF (głównie), które używają klasy .NET EventLogger. Jestem w trakcie poprawiania wydajności tych usług i pomyślałem, że asynchroniczne rejestrowanie poprawiłoby wydajność. Nie jestem świadomy, co się dzieje, gdy wiele wątków prosi o rejestrowanie, a jeśli tworzy wąskie gardło, ale nawet jeśli nie, nadal uważam, że nie powinno to zakłócać rzeczywistego wykonywania procesu. Myślę, że powinienem wywołać tę samą metodę dziennika, którą teraz wywołuję, ale zrób to za pomocą nowego wątku, kontynuując rzeczywisty proces. **Kilka pytań na ten temat:** Czy to w porządku? Czy są jakieś wady? Czy powinno to być zrobione w inny sposób? Może jest tak szybki, że nawet nie jest to warte wysiłku?


title: Jaki jest powód tworzenia symboli ∞ po stronie klienta?

text: Spójrz na ten link: http://math.stackexchange.com/questions/60766/What-is-the-result-of-infinity-minus-infinity Jaki jest powód przekształcania symboli ∞ po stronie klienta? Ponieważ jeśli ktoś wyłączy JavaScript, zobaczy to: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/NXTKY.png) Więc teraz zastanawiam się, jakie mogą być tego przyczyny decyzja _(myślałem, że na pewno będzie jakaś korzyść, inaczej decyzja nie zostałaby podjęta)_.


title: Jak radzić sobie z technologicznym „Dogmatyzmem”

text: Zostawiłem pracę (aby przenieść się do innego kraju), gdzie przez większość czasu programowałem w JavaScript i Haskell (niektóre python). Bardzo mi się to podobało, ponieważ ludzie byli obiektywni, pozytywni, matematyczni, a mimo to zrobili sporo rzeczy. To był naprawdę profesjonalny sklep. Teraz pracuję w sklepie Agile/XP. Choć to dobrze i wszystko czuję, że może jesteśmy nieprofesjonalni, jeśli chodzi o dobór technologii i bibliotek. Czuję, że nasze podejście do pisania oprogramowania jest trochę niedojrzałe i nieustrukturyzowane. Staram się czytać książki, które mi zaproponowano i wydają się zachęcać do tego stylu ( _ugh_ ). Wiele razy po prostu wybieramy biblioteki z centrum git i używamy ich bez żadnego przeglądu. Jestem zmuszony pracować z kimś przez cały czas, nawet jeśli jest to małe zadanie dla jednej osoby. Wydaje się, że istnieje trochę „szybkiej” zasady na wszystko, nawet jeśli reguła może zostać złamana przez trywialny kontrprzykład (kiedyś popełniłem błąd, podając ten kontrprzykład i zostałem zaatakowany werbalnie). Czy to normalne w Stanach? Jak sobie radzić z tym dogmatyzmem?


title: Co zrobić, gdy zezwalasz na działanie aplikacji w nieprawidłowym stanie?

text: Obecnie w naszej aplikacji znajduje się sekcja „globalny złap wszystkie wyjątki”. Po zgłoszeniu nieprzechwyconego wyjątku wyświetlany jest ślad stosu, a aplikacja kontynuuje działanie. Najczęściej powoduje to, że stan aplikacji jest nieważny w przyszłości. Zwłaszcza w przypadku NullReferenceExceptions i wyjątków wątków będących przyczyną. Postanowiłem, że aplikacja zarejestruje wyjątek w sekcji 'global', a następnie wyłączy i zrestartuje. Spotkało się to z krytyką ze strony kierownictwa, które stwierdziło, że użytkownik powinien zdecydować, czy uruchomić ponownie w tych warunkach, ponieważ nigdy wcześniej nie został zamknięty. ( _Chociaż starałem się wyjaśnić, że problem polegał przede wszystkim na umożliwieniu kontynuowania działania aplikacji)_. Szukam rzeczy, na które należy uważać na razie, i konkretnych podejść, które mogę podjąć, aby obsłużyć kod, który może teraz nadal działać w nieprawidłowym stanie.


Muszę dodać kilka nowych funkcji do aplikacji PHP. Jest to przestrzeganie kroków zamówienia. Proces tworzy kilka zamówień, zamówienie przechodzi do potwierdzenia, następnie jeśli zatwierdzone jest wysyłane do dostawcy, później dostawca potwierdza, że może dostarczyć zamówienie, wysyłana jest prośba do dostawcy i tak dalej... Muszę się zarejestrować przy każdym zostanie wykonany krok i wyślij powiadomienia. Ponadto niektóre kroki mają szacunkowy czas, a jeśli ten czas upłynie, muszę wysłać powiadomienia, aby wszyscy wiedzieli o opóźnieniu. Kiedy proces się rozpoczyna, ma predefiniowany zestaw kroków, ale w środku użytkownik powinien mieć możliwość tworzenia nowych pod-kroków i usuwania lub pomijania przyszłych kroków. Czy powinienem używać silnika przepływu pracy? Którą proponujesz (tylko free-opensource)?


title: Konwersja ograniczonego problemu plecakowego na problem plecakowy 0/1

text: Natknąłem się na problem, w którym celem było zastosowanie programowania dynamicznego (zamiast innych podejść). Jest odległość do rozpięcia i zestaw kabli o różnych długościach. Jaka jest minimalna liczba kabli potrzebnych do dokładnego pokonania odległości? Dla mnie wyglądało to na problem z plecakiem, ale ponieważ mogły być wielokrotności określonej długości, był to problem z plecakiem ograniczonym, a nie problem z plecakiem 0/1. (Traktuj wartość każdego przedmiotu jako jego wagę.) Przyjmując naiwne podejście (i nie dbając o rozszerzanie przestrzeni wyszukiwania), metoda, której użyłem do przekształcenia ograniczonego problemu plecakowego w problem plecakowy 0/1, była po prostu podziel wielokrotności na pojedyncze i zastosuj dobrze znany algorytm programowania dynamicznego. Niestety prowadzi to do nieoptymalnych wyników. Na przykład, podane kable: 1 x 10 stóp, 1 x 7 stóp, 1 x 6 stóp, 5 x 3 stopy, 6 x 2 stopy, 7 x 1 stopa Jeśli docelowa rozpiętość wynosi 13 stóp, algorytm DP wybiera 7+6 do rozpiętości odległości. Chciwy algorytm wybrałby 10+3, ale jest to remis dla minimalnej liczby kabli. Problem pojawia się przy próbie rozpięcia 15 stóp. Algorytm DP ostatecznie wybrał 6+3+3+3, aby uzyskać 4 kable, podczas gdy algorytm zachłanny poprawnie wybrał 10+3+2 tylko dla 3 kabli. W każdym razie, wykonując trochę lekkiego skanowania konwersji ograniczonej do 0/1, wydaje się, że jest to dobrze znane podejście do konwersji wielu elementów do { p, 2p, 4p ... }. Moje pytanie brzmi, jak działa ta konwersja, jeśli p+2p+4p nie sumuje się do liczby wielu elementów. Na przykład: mam 5 kabli o długości 3 stóp. Nie mogę bardzo dobrze dodać { 3, 2x3, 4x3 } ponieważ 3+2x3+4x3 > 5x3. Czy zamiast tego powinienem dodać { 3, 4x3 }? [Obecnie próbuję zebrać artykuł „Oregon Trail Knapsack Problem”, ale obecnie wygląda na to, że stosowane tam podejście nie obejmuje programowania dynamicznego.]


title: Czy prelegenci otrzymują wynagrodzenie za rozmowy techniczne?

text: Jestem ciekaw, czy prelegenci (blogerzy, pracownicy Google, tacy jak Matt Cutts) otrzymują wynagrodzenie za przemawianie na konferencjach. Jeśli tak, to ile? Jeśli tego nie robią lub zarabiają tak mało, że to tak, jakby nie, to dlaczego to robią? Jakie atrakcje poza pieniędzmi prowadzą dewelopera do wystąpień publicznych?


title: Jak przyciąć wiadomości e-mail tylko do treści, gdy używasz poczty e-mail jako danych wejściowych do systemu zewnętrznego?

text: Gdy aplikacja pozwala na wysyłanie do niej wiadomości e-mail w celu odpowiedzi na komentarze lub dodania rzeczy do zrobienia, przycięcie tych wiadomości do odpowiedniego tekstu staje się problemem, ponieważ istnieje wiele różnych standardów. Wiele razy w końcu zobaczysz takie rzeczy: > Hej Joe, miło cię słyszeć. Daj mi znać, kiedy wrócisz do miasta. > **_Opublikowane przez Boba, 30 minut temu_** > > * * * > > Wracam 13-go. > > \-- > Z poważaniem, > Joseph R. Roberts > Starszy partner > > Niniejsza informacja jest poufna i stanowi własność firmy Whatever Law Firm. > **_Opublikowane przez Joe, 10 sekund temu_** Podpisy są prawdopodobnie najtrudniejsze do usunięcia, a cytowany tekst najłatwiejszy. Wyobrażam sobie, że jakakolwiek kompleksowa strategia przycinania będzie wielowątkowa, a najlepiej ucząca. Myślę, że dobry system powinien: 1. Usunąć treść cytowaną 2. Usunąć nagłówki cytatów („15 października, Joe napisał:”) 3. Usunąć podpisy 4. Zachować wszystko, co zostało wpisane ręcznie. Jakie kroki musiałby podjąć system, aby to osiągnąć i jakich pułapek powinien być świadomy? * * * Ta odpowiedź jest dobrym przykładem użytecznej odpowiedzi na podobne pytanie


title: Wzorce architektoniczne do interakcji poza MVC?

text: Wszyscy znamy czcigodny wzorzec Model-Widok-Kontroler używany do projektowania interakcji [głównie] z ludzkimi użytkownikami. Jest to de facto standard w środowisku OOP. O jakich innych architektonicznych wzorcach interakcji warto wspomnieć? Mile widziane są również podejścia non-OOP (funkcjonalne, logiczne itp.).


title: Czy rozdzielenie logiki programu i warstwy prezentacji nie idzie za daleko?

text: W przewodniku po programowaniu Drupal zauważyłem to zdanie: > Zaczep motywu otrzymuje całkowitą liczbę głosów i liczbę głosów > tylko dla tego elementu, ale szablon chce wyświetlić procent. Tego rodzaju > praca nie powinna być wykonywana w szablonie; zamiast tego wykonuje się matematykę > tutaj. Matematyka niezbędna do obliczenia procentu z sumy i liczby to „(liczba/suma)*100”. Czy to zastosowanie dwóch podstawowych operatorów arytmetycznych w warstwie prezentacji to już za dużo? Czy utrzymanie całego systemu jest poważnie zagrożone przez taką ilość matematyki? WPF (Windows Presentation Framework) i jego język znaczników interfejsu użytkownika, XAML, wydają się iść do podobnych skrajności. Jeśli spróbujesz chociaż dodać dwie liczby w Widoku (warstwie prezentacji), popełniłeś grzech kardynalny. W związku z tym XAML nie ma operatorów dla żadnej arytmetyki. Czy ta ultra-ścisła separacja naprawdę jest świętym Graalem programowania? Jakie są znaczące korzyści, jakie można osiągnąć, doprowadzając separację do takich skrajności?


title: Czy masz jakieś wskazówki, które pomogą Ci ubiegać się o pracę międzynarodową?

text: Pracowałem jako freelancer w moim kraju (Brazylia), pracując dla różnych firm. Lubię pracować dla brazylijskich firm, ale szukam międzynarodowych doświadczeń i potrzebuję porady. Jak zatrudnić zagranicznych programistów/profesjonalistów? W jaki sposób mogę stać się bardziej „widoczny” dla międzynarodowych pracodawców? Na razie nie chcę wyjeżdżać z Brazylii, więc zastanawiam się, czy można znaleźć tutaj dobrą pracę jako wolny strzelec. Jeśli pracowałeś tak, jak ja chciałem pracować, chętnie podzielę się swoimi doświadczeniami ;)


title: Pomoc w znalezieniu łącznego czasu zajętego przez całą produkcję?

text: Mam obiekt liniowy, a każdy obiekt liniowy ma powiązany z nim szereg zadań. Każde zadanie ma czas rozpoczęcia i czas zakończenia. Każde zadanie ma również listę zadań, które są jego poprzednikami. **Więc gdyby wszystkie zadania były niezależne (bez poprzedników) po prostu obliczyłbym czas zakończenia ostatniego zadania na każdej linii, który byłby czasem zakończenia tej linii. Czas potrzebny na produkcję byłby maksymalnym końca czas wszystkich linii.** Problem polega na tym, że zadanie może być zależne od zadania (które może znajdować się na tej samej lub innej linii). Jeśli więc poprzednik zadania znajduje się w innym wierszu, a czas jego rozpoczęcia jest dłuższy niż czas rozpoczęcia tego zadania, należy odpowiednio zaktualizować czas rozpoczęcia tego zadania. **Jak mogę obliczyć prawidłowy czas produkcji, biorąc pod uwagę poprzednie zadania na różnych liniach?** **EDYTUJ:** To jest to, co do tej pory wymyśliłem. Klaster{ func* func[n] }; func{ int czas wykonania; int czas rozpoczęcia; int czas zakończenia; func* pred[k] }; int main{ / Obiekty klastra zostały gdzieś zainicjowane. Cluster cl[4];//Tablica czterech klastrów for(int i=0;i<4;i++){ cl[i].func[0].starttime = 0; cl[i].func[0].endtime = cl[i].func[0].starttime + cl[i].func[0].czas wykonania; for(int j=1;j<n;j++){ cl[i].func[j].starttime = cl[i].func[j-1].endtime; cl[i].func[j].endtime = cl[i].func[j].starttime + cl[i].func[j].czas wykonania; } } int czasprodukcji=Max(cl[0].func[n].endtime,cl[1].func[n].endtime,cl[2].func[n].endtime,cl[3].func[ n].czas zakończenia); zwrot czasu produkcji; } To właśnie zrobiłem do tej pory. Utknąłem na tym, jak zmodyfikować kod, aby uwzględnić poprzedników zadania. **EDYTUJ** :Po powyższej pętli zaktualizowałbym czas rozpoczęcia i zakończenia każdego zadania, którego zadanie poprzednika znajduje się w innej linii. Jeśli czas rozpoczęcia zadania poprzednika jest większy niż czas rozpoczęcia tego zadania, to czas rozpoczęcia i zakończenia tego zadania oba zostałyby zaktualizowane. Jak mam to zrobić, gdy problem polega na tym, że czas rozpoczęcia zadania poprzednika może również wymagać aktualizacji w zależności od własnych zadań poprzednika.


title: Bycie zależnym od IDE. Jak może mnie skrzywdzić?

text: Jestem programistą w dużym stopniu zależnym od IDE (NetBeans i Eclipse, ponieważ jestem programistą JAVA). Potrafię poprawnie kodować, jeśli mam IDE. Mogę na tym polegać w zakresie rozwoju, debugowania i wdrażania. Ale bez IDE nic nie mogę zrobić. Potrafię zakodować prosty program hello world lub jakiś prosty układ interfejsu użytkownika, ale potrzebuję IDE do wykonywania złożonych rzeczy lub długiego kodowania prostszych rzeczy. Myślisz, że to mnie krzywdzi? Niektórzy programiści, którzy mają ponad 6 lat doświadczenia w programowaniu, mocno wierzą, że może to zaszkodzić, ale myślę, że jeśli potrafię szybko i prawidłowo robić skomplikowane rzeczy, to dlaczego powinienem trzymać się notatnika i narzędzi wiersza poleceń, aby wykonać czasochłonne zadanie, gdy IDE mają przycisk, aby to zrobić?


title: Czy programista naprawdę musi znać narzędzia do budowania, ścieżkę klas itp.?

text: Kiedy IDE, takie jak eclipse, mogą obsłużyć wszystkie zadania związane z maven, ant, classpath itp., czy programista naprawdę musi nauczyć się tych wszystkich rzeczy? Jeśli tak, to dlaczego?


title: Korzyści z C++ dla administratorów systemu

text: Jakie korzyści może przynieść C++ administratorom systemów? Pracuję na Windowsie i Ubuntu. Jeśli uczę się C++, gdzie mógłbym go zaimplementować w administracji systemu, proszę podać niektóre z jego zalet.


title: Jak dodać ograniczenia, aby użytkownicy mogli się zarejestrować, zanim będą mogli uzyskać dostęp do witryny internetowej?

text: Jak sprawić, by moja strona internetowa nie wracała po naciśnięciu przycisku Wstecz i wylogowaniu? jak mogę dodać stronę internetową, która ma być zablokowana, tak jak FACEBOOK nie pozwala ci wejść na ich stronę bez posiadania strony lub konta z nimi, a jeśli spróbujesz umieścić coś w adresie URL i spróbujesz przejść do czegoś na ich witryna wyświetla stronę internetową, na której jest napisane "musisz być najpierw zalogowany" ? Chodzi mi o to, że nie chcę, aby ktoś wchodził na adres URL strony „indeks” przed zarejestrowaniem się jako członek, musi najpierw założyć konto, a następnie mieć dostęp do strony „indeks”. Jak zrobić tę bramę? Zastanów się, że do tej pory mam witrynę, która ma bazę danych, a witryna ma do tej pory 5 stron i dwie z nich, które są stroną logowania i rejestracji, które są używane z php i mysql i działają dobrze. Jak mogę ograniczyć dostęp do głównej strony internetowej, prosząc najpierw użytkowników o zarejestrowanie się u mnie w celu uzyskania konta?


title: Czy metody rozszerzające (C#) i kategorie (cel-C) są takie same jak cechy?

text: Według: Coś podobnego do kategorii Objective-C w innych językach? Statyczne metody rozszerzające w C# to „w zasadzie to samo” co kategorie celu C, więc połączę te dwie cechy razem, zadając pytanie: Czy te techniki są takie same jak cechy? Czy te funkcje językowe mogą być używane do rozwiązywania problemów, które zwykle byłyby rozwiązywane za pomocą dziedziczenia wielokrotnego? A jeśli tak, to w jaki sposób unikają pułapek wielokrotnego dziedziczenia?


title: Rozszerzasz oprogramowanie dostawcy?

text: Jestem konsultantem SCADA i pracuję z wieloma pakietami oprogramowania. Ze względu na swoją solidną naturę zawierają możliwość wykonywania wewnętrznego/zewnętrznego kodu activex i vbscript. Przez lata napisałem dziesiątki tysięcy linijek kodu, z których moi klienci z radością korzystali. Spotkałem moment w mojej karierze, w którym chcę się uniezależnić z tymi bibliotekami ze względu na ich złożony charakter. Biorąc to pod uwagę, czy mogę legalnie reklamować „biblioteki rozszerzeń oprogramowania X” lub „biblioteki rozszerzeń SCADA dla oprogramowania X/Y/Z”? Co dokładnie mogę napisać na stronie internetowej lub w pakiecie oprogramowania, który nie spowodowałby, że zalewają mnie procesy sądowe? SCADA to kontrola nadzorcza i akwizycja danych. Pisanie zaawansowanych raportów/oprogramowania dla sprzętu i oprogramowania przemysłowego. Pracuję z oprogramowaniem HMI, które pozwala na wewnętrzne/zewnętrzne wykonanie vbscript. Pomyśl o tym jako o Adobe Flash i o tym, jak wykonuje ActionScript. W przypadku Adobe Flash chciałbym sprzedać swoje biblioteki ActionScript. Moje pytanie brzmi - czy to legalne?


title: Jak wybrać projekt schematu dla modelu domeny o strukturze drzewa?

text: Mam następujące klasy, które chcę przechowywać. public class StorableObject { ciąg publiczny Id { get; ustawić; } } public class Użytkownik: StorableObject { public string Nazwa { get; ustawić; } } public class Projekt: StorableObject { public string Nazwa { get; ustawić; } publiczny Właściciel Użytkownika { get; ustawić; } public ICollection<Zadanie> Zadania { get; ustawić; } } public class Zadanie: StorableObject { public string Nazwa { get; ustawić; } publiczny Właściciel Użytkownika { get; ustawić; } public ICollection<Timesheet> Timesheets { get; ustawić; } } public class Karta czasu pracy: StorableObject { public User Owner { get; ustawić; } public DateTime Znacznik czasu { get; ustawić; } public TimeSpan Czas trwania { get; ustawić; } } Projektowanie schematu ma wiele wspólnego z tym, jakich zapytań będziesz potrzebować, więc spróbuję trochę wyjaśnić. Będę musiał wykonać szybkie zapytania w celu wyodrębnienia: * wszystkich zadań w projekcie * wszystkich grafików na zadaniu * wszystkich projektów należących do użytkownika * wszystkich zadań należących do użytkownika * wszystkich grafików należących do użytkownika. Potrzebuję również pewnych podsumowań, takich jak uzyskanie całkowitego czasu spędzonego na projekcie lub zadaniu w danym okresie i całkowitego czasu spędzonego na użytkownika w danym okresie. (Przypuszczam, że MapReduse) Zacząłem (po przeczytaniu tego bloga) z 4 kolekcjami (Użytkownicy, Projekty, Zadania, Arkusze czasu pracy), każde dziecko miałoby referencję rodzica, abym mógł zbudować mój model domeny w mojej logice biznesowej. Jednak po obejrzeniu tego zmieniłem zdanie i teraz wybieram bardziej osadzone podejście. { _id: 123456789, id_właściciela: 123, nazwa: „Mój projekt”, zadania: [ { id_właściciela: 123, nazwa: „Moje zadanie”, grafik: [ { id_właściciela: 123, ... } ] } ] } Jakie jest Twoje zdanie ? Czy to szybki projekt schematu?


title: Jak sprawić, by Ninject wstrzyknął model widoku MVC?

text: Jak skonfigurować Ninject, aby wstrzykiwał instancję w modelu widoku? PS. Jest to abstrakcyjna usługa pomagająca w walidacji, więc nie próbuję obciążać modelu zbyt dużą odpowiedzialnością.


title: Jak często używasz formalnego UML?

text: Używałem ad-hoc MUML (języka modelowania wymyślonego) do projektowania i wyjaśniania systemu dość często. Wygląda podobnie do UML i jest dość dobrze rozumiany. Jednak miałem profesora lub dwóch, którzy narzekali na użycie ścisłego, formalnego UML, tak blisko specyfikacji, jak to tylko możliwe. Zawsze podejrzewałem, że ścisły UML nie jest tak powszechny, jak twierdzili. Więc, co powiesz na to - jak często faktycznie rysujesz kompletne diagramy, które używają wszystkich właściwych zakończeń linii, wielokrotności, symboli typu pręta, itp.?


title: Na czym powinienem się skoncentrować?

text: Pozwól, że najpierw przedstawię krótkie tło. Jestem uczniem liceum w ostatniej klasie liceum. Kiedy pójdę na studia, chcę zająć się informatyką, ponieważ naprawdę kocham inżynierię oprogramowania. W domu dużo programuję. Tak naprawdę nigdy nie kończę żadnych projektów, ale po prostu tworzę różne "eksperymentalne" rzeczy tylko po to, aby nauczyć się różnych języków programowania, technologii i metod programowania. Jestem wielkim fanem C# i coraz bardziej zagłębiam się w inne zarządzane języki, takie jak Java. Wielokrotnie pracowałem z C++ i wiem, jak działa ten język. Mimo to po prostu nie mogę zrobić z tym niczego pożytecznego. W C# mogę stworzyć przydatną aplikację w zaledwie kilka godzin. W C++ nadal będę próbował zrozumieć różne biblioteki innych firm, aby załatwić sprawy. Na przykład wcześniej próbowałem rozgryźć Qt dla GUI C++, ale w C# masz Windows Forms, aby pomóc w rozwoju GUI. **Więc mówię to wszystko, aby zapytać** , czego obecnie szuka rynek pracy? Chcę bardziej zagłębić się w C++, ale jest to dla mnie bardzo trudne. Swoją drogą interesuję się programowaniem aplikacji biznesowych. Czy więc mądrze byłoby skoncentrować się na doskonaleniu moich umiejętności C# i Java, a C++ zostawić na później? Dziękuję


title: Czy naprawdę potrzebne jest testowanie oprogramowania?

text: Jestem studentem pracującym nad moim B.E(CS) i moje pytanie brzmi: 1. Czy potrzebne jest testowanie w dziedzinie oprogramowania? 2. Jeśli tworzymy oprogramowanie z dużą starannością, to po co testować? 3. Czy po przeprowadzeniu testów możemy być **pewni**, że osiągnęliśmy ten cel (produkt/oprogramowanie działa zgodnie z przeznaczeniem), ponieważ przeprowadziliśmy dla niego **testy**? Czy to możliwe? Moje pytanie: **Czy potrzebne jest testowanie oprogramowania**?


title: W przypadku licencji typu open source z klauzulą potwierdzającą, jak oczywiste musi być powiadomienie?

text: W licencjach, takich jak libjpeg i freetype, istnieją klauzule takie jak: > (2) Jeśli dystrybuowany jest tylko kod wykonywalny, to towarzysząca > dokumentacja musi zawierać stwierdzenie, że „to oprogramowanie jest częściowo oparte na pracy > The Independent Grupa JPEG". lub: > o Redystrybucja w formie binarnej musi zawierać zastrzeżenie, które stwierdza, że > oprogramowanie jest oparte na części pracy zespołu FreeType, > w dokumentacji dystrybucji. Czy wystarczy umieścić informację w pliku tekstowym w katalogu instalacyjnym? A może zazwyczaj potrzebne jest bardziej oczywiste powiadomienie? W przypadku aplikacji końcowej innej niż open source, jaki jest zwykły sposób wyświetlania tych obowiązkowych potwierdzeń?


title: format tablic (Javascript)

text: Mam listę użytkowników, z stworami, coś takiego: User52: minion10 minion12 User32: minion13 minion11 Trzymałem w tablicy, w której "lokalizacja" jest identyfikatorem, w następujący sposób: Users: [52]Sługi użytkowników: [10]minion [12]minion [32]Sługi użytkownika: [13]minion [11]minion, więc mogę uzyskać do nich łatwy dostęp w następujący sposób: `user[UserID].minions[MinionID]` (np. `user[32] .sługusów[11]`). Ale kiedy go drukuję lub wysyłam przez json otrzymuję coś takiego: {,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,minionek,,,,,,,,,,,,,,minionek} Ale czy powinienem nadal używać tego, czy powinienem Zmieniam się na coś takiego: User = function(){ this.minions = ...; this.getMinion = function(value){ for(var m in this.minions){ if(this.minions[m].id == value){ return this.minions[m]; przerwanie; } } } } i zdobądź to tak: user.getMinion(MinionID); Pytanie: Uzyskuję lepszą wydajność, używając tablicy „krótkiej”, ale używając pętli za każdym razem, gdy potrzebuję stwora, lub używając tablic „długich”, ale nie ma potrzeby używania pętli i pobierania wartości bezpośrednio z identyfikatora „name”?


title: Resharper: Czy używasz „dopełniania symboli” czy „inteligentnego uzupełniania”?

text: @Amir Rezeai mówi, że „Pomoc w kodowaniu” to jego ulubiona funkcja Resharper. Właśnie dowiedziałem się o „Pomocy w zakresie kodowania” po obejrzeniu najdoskonalszego webcastu Jamesa Kovacsa, zatytułowanego „Wskazówki i triki dla resharperów” na Pluralsight.com. Moje pytanie brzmi: > Czy używasz opcji „Symbol uzupełniania” czy „Inteligentnego uzupełniania”? A jeśli tak, czy zajęło ci trochę czasu przyzwyczajenie się do [dowolnej funkcji]? * * * Te funkcje mogą potencjalnie przyspieszyć rozwój. Ale wygląda na to, że wymagają innego sposobu myślenia. [Nie wiem - Może to tylko ja.]


title: Naucz się programowania od tyłu lub „więc oblałem test FizzBuzz. Co teraz?”

text: ### Trochę tła Mam dzisiaj 28 lat i nigdy nie odbyłem żadnego formalnego szkolenia w zakresie tworzenia oprogramowania, ale mam dwa stopnie wyższego wykształcenia odpowiadające licencjatowi z public relations i Executive MBA skoncentrowane na zarządzaniu projektami. Pracowałem na tych polach w sumie około 6 lat, potem 2,5 roku temu rzuciłem/straciłem pracę i postanowiłem zmienić kierunek. Po miesiącu przemyśleń postanowiłem zacząć jako freelancer tworzyć małe strony internetowe w WordPressie. Nauczyłem się tego sam i dziś mogę powiedzieć, że prowadzę skromną, ale udaną karierę, rozwijając motywy i wtyczki od podstaw dla moich klientów - głównie agencji zlecających część swoich prac deweloperskich dla średnich/dużych stron internetowych. Ale czasami po prostu czuję, że niewystarczająca nauka matematyki lub brak formalnego zrozumienia rzeczy naprawdę trzyma mnie w tyle, gdy muszę konkurować lub pracować z bardziej doświadczonymi programistami. Ciągle szukam sposobów, aby dowiedzieć się więcej, ale wydaje mi się, że brakuje mi podstaw. Niestety, spędzenie 4 lat więcej w informatyce nie jest obecnie opcją, więc staram się nauczyć wszystkiego, co mogę z książek i zasobów internetowych. Ta metoda nigdy nie sprawi, że NASA mnie zatrudni, ale teraz naprawdę mnie to nie obchodzi. Moim celem jest najpierw zdać poprzeczkę i móc nazywać się prawdziwym programistą. Obecnie spędzam wolny czas ucząc się Java dla programistów (aby opanować język, który wszyscy uważają za trudny/wymagający), czytając fragmenty Code Complete (aby zapoznać się z najlepszymi praktykami), a także Code: The Hidden Language of Computer Sprzęt i oprogramowanie (w celu uchwycenia wewnętrznego działania komputerów). **TL;DR** Tak więc moja obecna sytuacja jest taka: zasadniczo jestem w stanie napisać dowolny kompletny system w PHP (z pomocą Google i kilku książek), integrując Ajax, SQL i tak dalej, a może trochę wolniej niż doświadczony programista oczekiwałby ze względu na wszystkie zaangażowane badania. Ale wczoraj utknąłem, próbując znaleźć (nie Google) rozwiązanie dla testu FizzBuzz, ponieważ nie miałem `if($n1 % $n2 == 0)` ~~metoda~~ **operator modułu** zapamiętane. Co byś zaproponował jako dobry sposób na rozwiązanie tego dylematu? Jakie przedmioty/książki powinienem studiować, aby **rozwiązywać problemy szybciej**, a może bardziej „po programistyce”? **EDYTUJ** \- Wygląda na to, że było trochę zamieszania co do tego, czego nie wiedziałem, aby rozwiązać FizzBuzz. Może nie wyraziłem się prawidłowo: znałem kroki potrzebne do rozwiązania problemu. Nie zapamiętałem operatora modułu. Problem polegał na przeniesieniu podstawowej matematyki do programu, a nie na znajomości podstawowej matematyki. Zrobiłem test dla zabawy, po przeczytaniu o nim na Coding Horror. Po prostu zdecydowałem, że to dobra podstawowa linia porównawcza między mną a formalnie wyszkolonymi twórcami. Po prostu użyłem tego jako przykładu, jak nie zajęcie się matematyką w środowisku komputerowym sprawia, że tracę czas na szukanie podstawowych rzeczy, takich jak operatory modułu, aby móc rozwiązywać proste problemy.


title: Dlaczego potrzebujemy słowa kluczowego async?

text: Właśnie zacząłem bawić się async/await w .Net 4.5. Jedna rzecz, która mnie początkowo interesuje, dlaczego słowo kluczowe asynchroniczne jest konieczne? Wyjaśnienie, które przeczytałem, było takie, że jest to znacznik, więc kompilator wie, że metoda na coś czeka. Ale wygląda na to, że kompilator powinien być w stanie to rozgryźć bez słowa kluczowego. Więc co jeszcze robi?


title: Czy mały zespół może wejść w świat .NET, podczas gdy większość z nich pracuje na językach OpenSource?

text: Jesteśmy zespołem około 15 pracowników, w przedsiębiorstwie nieinformatycznym. Obecnie zajmujemy się głównie tworzeniem stron internetowych, wykorzystując PHP, MySQL itp. Na sobie uruchamiamy nieco mniej niż 100 serwerów linuxowych. Ale dzisiaj mamy do czynienia z projektem zbyt dużym dla nas, aby kodować. Wybraliśmy świetnego dostawcę (tak, outsourcing), a teraz proszą nas o wybór między C++/Qt a .NET/WPF. Aplikacja jest wysoce graficzna i przeznaczona do dystrybucji w systemach Windows. .NET jest nam rekomendowany jako łatwiejszy w projektowaniu i lżejszy. Ale co z naszym zespołem? Czy z naszą niewielką liczbą możemy obsłużyć oba wszechświaty jednocześnie? obowiązki : * podczas tworzenia : zaprojektuj aplikację , przejrzyj kod * po dev : hostuj serwery, prowadź konserwację i odbieraj telefony użytkowników * w przypadku, gdy potrzebujemy v2, zamierzamy oddzwonić do tego samego dostawcy Co o tym myślisz ? **EDYTUJ** W końcu wybraliśmy C++/Qt. Powody są następujące: * czas tworzenia został przetestowany, aby był nieco równy * bardziej nam odpowiada z punktu widzenia zarządzania * i zwiększa przenośność między platformami


title: Dlaczego potrzebujemy zabezpieczeń na poziomie metody?

text: Dlaczego w prawdziwym świecie musimy wdrażać zabezpieczenia na poziomie metody? Mamy albo aplikację internetową, albo aplikację komputerową , w której użytkownik uzyskuje dostęp do interfejsu użytkownika (a zatem bezpośrednio nie może uzyskać dostępu do metody) . Więc gdzie w tym miejscu pojawia się bezpośredni dostęp do metod? edit: Zadaję to pytanie, ponieważ eksperymentuję z zabezpieczeniami wiosennymi i widzę autoryzację użytkowników na dostęp do metod. coś takiego: @ROLE_ADMIN public void update() { //update }


title: Dodawanie funkcjonalności klasy podstawowej (dziedziczonej) do klas, których nie kontrolujesz

text: Mam zestaw zajęć z biblioteki 3rd party. Te klasy używają struktury dziedziczenia do współdzielenia logiki. Chciałbym dodać warstwę abstrakcji w środku ich drzewa dziedziczenia, aby dodać funkcjonalność do wszystkich implementacji potomnych (konkretnych). Oto uproszczony przykład klas w bibliotece 3rd party: public interface IAnimal { bool IsMammal { get; } } public abstract class Animal : IAnimal { public abstract bool IsMammal { get; } ciąg publiczny Nazwa { get; ustawić; } } public class Kot : Animal { public override bool IsMammal { get { return true; } } public void Pur() {} } public class Pies : Animal { public override bool IsMammal { get { return true; } } public void Fetch() {} } public class Snake : Animal { public override bool IsMammal { get { return false; } } public void ShedSkin() {} } Chciałbym dodać pojęcie `AnimalWithSuperPower`. Te typy zwierząt powinny mieć 1 dodatkową Własność; „Supermoc”. Chciałbym mieć klasy takie jak `CatWithSuperPower`, które wywodzą się z `Cat`, `AnimalWithSuperPower` i `Animal`, abym mógł uzyskać dostęp do wszystkich ich funkcji. Oto definicja `SuperPower`: public enum SuperPower { Niewidzialność, SuperSiła, XRayVision } Moim pierwszym pomysłem było użycie dziedziczenia wielokrotnego. Ale niestety C# nie obsługuje wielu klas bazowych. prywatna klasa abstrakcyjna AnimalWithSuperPower : Animal { public SuperPower SuperPower { get; ustawić; } } // nie kompiluje się, ponieważ nie można rozszerzyć 2 klas klasy prywatnej DogWithSuperPower : AnimalWithSuperPower, Dog {} Moja następna próba wykorzystuje kombinację dziedziczenia, kompozycji i generyków, aby spróbować dostarczyć funkcjonalność klas bazowych. private abstract class AnimalWithSuperPower<TAnimalType> : Animal where TAnimalType : IAnimal { public SuperPower SuperPower { get; ustawić; } chroniony tylko do odczytu TAnimalType Zwierzę; protected AnimalWithSuperPower() { Animal = (TAnimalType) Activator.CreateInstance(typeof(TAnimalType)); } } private class SuperCat : AnimalWithSuperPower<Cat> { public override bool IsMammal { get { return Animal.IsMammal; } } } private class SuperCatWithPur : AnimalWithSuperPower<Cat> { public override bool IsMammal { get { return Animal.IsMammal; } } public void Pur() // potrzeba zduplikowanych metod/właściwości tranzytu jest bolesna :( { Animal.Pur(); } } private static void ExampleUsage() { var invisibleCat = new SuperCat { SuperPower = SuperPower.Invisibility }; invisibleCat.Pur(); // nie kompiluje się - nie można uzyskać dostępu do metody Pur(), ponieważ nie rozszerza Cat var xrayCat = new SuperCatWithPur { SuperPower = SuperPower.XRayVision }; xrayCat.Pur(); // działa tylko dlatego, że ujawniłem metodę z DOKŁADNĄ tą samą sygnaturą } To rozwiązanie nie jest zbyt dobre (IMO) z następujących powodów: * `SuperCat` i `SuperCatWithPur` nie są w rzeczywistości instancjami `Cat` * żadna metoda, którą chcesz użycie z `Cat` musi być odzwierciedlone w klasie kontenera * wydaje się trochę bałaganiarski: `AnimalWithSuperPower` jest `Animal`, ale wymaga również parametru typu `Animal` Próbowałem to zrobić za pomocą metody rozszerzającej, ale tak było' nie lepiej niż e powyższe dwie próby: prywatna klasa abstrakcyjna AnimalWithSuperPower : Animal { public SuperPower SuperPower { get; ustawić; } } private static ZwierzęZSuperMoc ZSuperMoc(to Zwierzę, SuperMoc superMoc) { var superZwierzę = (ZwierzęZSuperMoc) zwierzę; superZwierzę.SuperMoc = superMoc; zwróć superZwierzę; } private static void ExampleUsage() { var dog = new Dog { Name = "Max" }; var superDog = pies.ZSuperMoc(SuperMoc.SuperSiła); superPies.Pobierz(); // nie kompiluje się - superDog nie jest instancją Dog } Gdybym miał kontrolę nad klasami innych firm, prawdopodobnie mógłbym to zrobić czysto, wprowadzając nową klasę w środku drzewa dziedziczenia, ale nie mogę **Moje pytanie:** Jak mogę modelować `AnimalWithSuperPower`, aby: * uwzględniane były instancje typu `Cat` (lub odpowiednia podklasa), `Animal`, & `AnimalWithSuperPower` * wszystkie metody i właściwości są dostępne bez dodatkowych połączeń pass-through


Dlaczego ogólnie błędy zagnieżdżania lub umieszczania w błędach są złe? Intuicyjnie wydaje mi się to złe, ale podejrzewam, że nie potrafię odpowiednio wyartykułować, dlaczego jest źle. Może to wynikać z tego, że ogólnie rzecz biorąc nie jest zła i że jest zła tylko w określonych przypadkach. Dlaczego taki sposób projektowania obsługi błędów/wyjątków jest szkodliwy. Konkretnym wystąpieniem jest usługa REST. Niektórzy chcą używać błędów http (w szczególności odpowiedzi 500) jako sposobu na wskazanie jakiegokolwiek problemu z konkretnymi instancjami zasobu. Przykładem zasobu instancji w tym przypadku może być: http://server/ticket/80 # instancja http://server/ticket # nie instancja Więc to jest proponowane zachowanie. * Jeśli `ticket 80` nie istnieje, zwróć kod odpowiedzi http `500`. W treści błędu zwróć „prawdziwy” błąd jako dodatkowy kod i opis błędu. * Jeśli zasób `ticket` nie istnieje, zwróć kod odpowiedzi 404.


title: Dobry przykład gprof dla projektu iOS

text: Profiler GNU `gprof` może być użyty do profilowania dowolnej aplikacji bezpośrednio na urządzeniu, umożliwiając profilowanie w świecie rzeczywistym. Jako Xcode 4.5 oparty na LLVM plus posiada GNU Debugger, Profiler i inne. Potrzebuję lepszego przykładu, przykładu implementacji, dla projektów iOS.


title: Jak sprawić, by tworzenie aplikacji internetowych było mniej frustrujące?

text: Jestem całkiem nowy w tworzeniu aplikacji internetowych. Po prostu nie mogę pozbyć się wrażenia, że robienie czegokolwiek, nawet odległej złożoności, zajmuje mi wieczność. W c++ i javie mogłem napisać te same aplikacje w ciągu kilku godzin. Debugowanie w sieci jest bolesne (zwłaszcza jeśli w grę wchodzi złożony json-ajax). IDE są do bani. Języki przepuszczają wszystko bez błędów, dopóki nie przestanie działać i utkniesz, szukając błędu bez żadnego błędu lub ostrzeżenia, aby cię poprowadzić (i nie ma naprawdę dobrego sposobu na przejście przez program). Czy ktoś może poprowadzić mnie do przeczytania materiałów i/lub technologii, które pomogłyby mi znaleźć sposób na zachowanie przytomności podczas tworzenia złożonych aplikacji internetowych? Być może odpowiedzią jest użycie dobrego frameworka (zend?). W pracy tak naprawdę nie używamy frameworka, z wyjątkiem generatorów modeli baz danych i podstawowych generatorów dodawania/aktualizowania/usuwania stron.


title: Wskazówki dotyczące dalszego rozwoju starszego systemu?

text: Zostałem przydzielony do rozszerzenia (i ostatecznie utrzymania) starego systemu (głównie proceduralnego, pół-kuli błota) bez MVC. Jakieś wskazówki lub sugestie dla mnie na przyszłość? :S


title: Gdzie należy przetwarzanie formularzy w aplikacji MVC?

text: Znalazłem to pytanie na przepełnieniu stosu i mam pytanie dotyczące jednej z odpowiedzi: W Zend Framework formularze są zazwyczaj obiektami z dekoratorami, ale zwykle (myślałem) przetwarzanie odbywa się za pomocą kombinacji kontrolerów i modeli, z głównym celem aby kontroler był jak najlżejszy, a każdy obiekt odpowiedzialny za swój stan. Jedna z odpowiedzi mówi, że używa samego obiektu formularza jako miejsca do enkapsulacji członków przetwarzania formularza. Czy to dobra praktyka? Z jakiegoś powodu wydaje mi się to niezręczne. Ale wydaje się również niewygodne wykonywanie większości pracy w warstwie abstrakcji bazy danych (Zend_Db_Table/Row) lub w kontrolerze. Gdzie jest najlepsze miejsce do hermetyzacji przetwarzania formularzy? Czy powinieneś utworzyć oddzielne klasy dla samego formularza i inną klasę do przetwarzania formularza (która następnie zajmuje się DBAL)? **Edytuj:** oto kolejny post SO, który zadaje podobne pytanie, ale OP nie otrzymuje pełnej odpowiedzi. Chcemy wiedzieć: gdzie należy każda część logiki przetwarzania formularzy?


title: Czy istnieje metoda oszacowania kosztów weryfikacji kodu źródłowego?

text: Potrzebuję techniki szacowania, aby zweryfikować, czy dostarczony kod źródłowy jest odpowiedni. na przykład, jeśli dostawca opracował aplikację i przekazuje kod źródłowy, ja jako konsultant klienta, muszę zweryfikować, czy dostarczony kod źródłowy jest prawdziwy i odpowiedni. Pytanie jak weryfikować i ile pobierać za tę usługę?


title: Czy istnieje księga kanoniczna o Monodroidzie?

text: Do tej pory żyję ze standardowych książek o Androidzie i głównie blogów dla Monodroid, ale próbuję znaleźć ostateczne źródło na ten temat i nie mam szczęścia. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat Monodroid? Co sprawia, że ta książka jest wyjątkowa?


title: Język warstwy pośredniej do łączenia C/C++ z bazą danych i aplikacją internetową

text: Mam aplikację sieciową wymagającą języka warstwy środkowej do komunikacji między bazą danych Oracle i procedurami matematycznymi na serwerze Linux i aplikacją opartą na technologii Flex na kliencie. Nie jestem ekspertem od oprogramowania i potrzebuję zaleceń dotyczących języka, który ma być używany w warstwie środkowej. Procedury matematyczne są obecnie w Matlab, ale zostaną przeniesione do C (lub C++) jako biblioteki współdzielone. Dlatego domyślnie wymagana jest komunikacja w C lub C++. Te procedury opierają się na FFTW (www.fftw.org), który jest wywoływany bezpośrednio z C lub C++ (więc nie widzę przepisywania tych procedur w innym języku). Warstwa środkowa musi zarządzać ruchem między klientem, procedurami matematycznymi i bazą danych Oracle. Klient uruchomi procedury matematyczne asynchronicznie, a wyniki zostaną zapisane w bazie danych i przesłane z powrotem do klienta itp. Warstwa środkowa będzie również musiała uwierzytelniać konta/hasła użytkowników i wysyłać różne e-maile administracyjne. Początkowo myślałem, że PhP jest oczywistym wyborem, ale łączenie asynchronicznych wielu klientów z procedurami C lub C++ nie wydaje się proste. Potem pomyślałem, dlaczego nie zachować całej warstwy środkowej w C lub C++, ale nie jestem pewien, czy jest to robione w branży (C lub C++ nie wydaje się tak przyjazne dla sieci jak inne języki). Zawsze jest Jave + JNI, ale może to wprowadza inne komplikacje (nie jestem pewien). Wszelkie opinie są mile widziane.