title: Jak dodać nowego programistę do zespołu

text: Prowadzę małą firmę składającą się tylko z 2 programistów. Dla jednego z naszych klientów budujemy bardzo dużą aplikację. Rozwój tego projektu trwa już 1,5 roku. Teraz ten klient ma zapewniony ważny sponsoring i organizuje wydarzenia związane z tym projektem. Więc teraz mamy termin za 2 miesiące i nie możemy go przegapić. Zastanawiamy się nad dodaniem nowego programisty do zespołu i zastanawiam się, co możemy zrobić, aby pomóc jego integracji. Oto sytuacja: * Zbliżamy się do progu prawa Brooksa \-- punkt, w którym dodawanie nowych programistów będzie odwrotny do zamierzonego. * Aplikacja jest stosunkowo dobrze zaprojektowana, ale implementacja w niektórych punktach jest chaotyczna (zwłaszcza starszy kod). * Istnieją testy jednostkowe tylko dla nowszego kodu. Kiedy ten projekt się rozpoczął, nie przeprowadzaliśmy regularnie testów. * Dokumentacja i komentarze są niekompletne. * Aplikacja jest zarówno duża, jak i złożona. * Klient spisał prawie każdy szczegół swojego projektu, w bardzo przejrzysty i „przyjazny dla programisty” sposób. Czy to dobry pomysł, aby teraz dodać osobę? Jeśli tak, co możemy zrobić, aby pomóc nowemu programiście zintegrować się z zespołem? EDIT: Sponsor organizuje internetowe wydarzenie sportowe na wiosnę przyszłego roku. Musi rozpocząć się w konkretny dzień w roku. Nie możemy tego zmienić. To, co my programiści (jestem jednym z dwóch) musimy zrobić to: * Uzupełnienie istniejącej aplikacji (około 25% pracy do wykonania). * Stworzenie nowego modułu, niezbędnego do organizacji tego wydarzenia (ok. 75% pracy do wykonania). Ten nowy moduł nie może być rozwijany bez zrozumienia głównego interfejsu API programu. Nie mogę dokładnie oszacować czasu, ale jesteśmy w ryzykownej sytuacji.


title: Anonimowe domknięcia odwołujące się do siebie: czy JavaScript jest niekompletny?

text: Czy fakt, że anonimowe domknięcia funkcji odwołujących się do siebie są tak rozpowszechnione w JavaScript, sugeruje, że JavaScript jest niekompletną specyfikacją? Widzimy tak wiele z tego: (function () { /* zrobić fajne rzeczy */ })(); i przypuszczam, że wszystko jest kwestią gustu, ale czy to nie wygląda na szwank, kiedy wszystko czego potrzebujesz to prywatna przestrzeń nazw? Czy JavaScript nie mógł zaimplementować pakietów i odpowiednich klas? Porównaj z ActionScript 3, również opartym na ECMAScript, gdzie otrzymujesz pakiet com.tomauger { import bar; class Foo { funkcja publiczna Foo(){ // itd... } funkcja public show(){ // pokaż rzeczy } funkcja publiczna ukryj(){ // ukryj rzeczy } // itd... } } Kontrast do zwojów wykonujemy w JavaScript (to z dokumentacji tworzenia wtyczki jQuery): (function( $ ){ var method = { init : function( options ) { // THIS }, show : function() { // IS }, hide : function( ) { // DOBRY }, aktualizacja : function( content ) { // !!! } }; $.fn.tooltip = function( metoda ) { // Logika wywołania metody if ( method[metoda] ) { return method [ metoda ].apply( this, Array.prototype.slice.call( argumenty, 1 )); } else if ( typ metody === 'obiekt' || ! metoda ) { return method.init.apply( this, argumenty ); } else { $.error( 'Metoda ' + metoda + ' nie istnieje w jQuery.tooltip' ); } }; })( jQuery ); Doceniam to, że to pytanie może łatwo przerodzić się w tyradę o preferencjach i stylach programowania, ale w rzeczywistości jestem bardzo ciekaw, jak myślą o tym wytrawni programiści i czy jest to naturalne, jak uczenie się różnych dziwactw nowego języka lub niezdarność , jak obejście niektórych podstawowych składników języka programowania, które po prostu nie są zaimplementowane?


title: Dlaczego pierścień umożliwiający zapis?

text: Oto „pytanie podczas rozmowy kwalifikacyjnej”, które choć pozornie dotyczy sprzętu, naprawdę informuje również kierownika projektu oprogramowania. Komputery kiedyś (chyba nadal gdzieś) używały szpul taśmy magnetycznej do przechowywania danych. Istniało plastikowe akcesorium, które można było przymocować do rolki taśmy, zwane „pierścieniem umożliwiającym zapis”. Jeśli taśma miała taki pierścień, napęd taśmowy pozwalał na zapis na taśmie... jeśli nie, umożliwiał tylko dostęp do odczytu. Dlaczego zdecydowano się zaprojektować system w ten sposób? Dlaczego zamiast tego nie zastosować „pierścienia chroniącego przed zapisem” z odwrotnym skutkiem?


title: Programowanie sterowane zdarzeniami a programowanie sterowane „odniesieniem” (np. w JavaScript)

text: Nie udało mi się znaleźć odpowiedniej terminologii do wyszukiwania treści w sieci związanej z tym, o co pytam, więc mam nadzieję, że ktoś tutaj może przynajmniej wskazać mi właściwy kierunek. Jestem dość starszym programistą JavaScript, ale mam pewien sekret — nie lubię programowania sterowanego zdarzeniami (poza wiązaniem zdarzeń wyzwalanych przez użytkownika). Coś w tym nigdy nie pasowało mi do głowy, to uczucie „rozłączenia” w logice. W prostym przykładzie pewnego modułu wywołującego dowolną liczbę widoków, przyjaciel sterowany zdarzeniami utworzy detektory zdarzeń dla elementów, które te widoki mogą mieć i zachowa wszelkie odniesienia do modułu nadrzędnego poza kodem widoku. Ja natomiast przekazałbym odwołanie do modułu nadrzędnego do widoków, abym mógł bezpośrednio wywołać metody modułu. Wybieram drugie podejście, ponieważ dokładnie wiem, co się wydarzy i jaką metodę uruchamiam we wszystkich punktach kodu. W przypadku sterowanym zdarzeniami oddzielam przypisanie odpowiedzi na zdarzenie od elementu, który je wyzwoli, umieszczając rzeczy w „nasłuchującym eterze”. Wiem, że odpowiedzialne programowanie sterowane zdarzeniami powinno unikać wszelkiego ryzyka, takiego jak podwójne wiązanie itp., ale nawet jeśli jest to ostrożne, nadal postrzegam to jako trochę czarnej skrzynki, która jest gotowa do debugowania koszmarów. Chociaż przekazywanie referencji może być nieco bardziej kłopotliwe w kodzie, przynajmniej jest jasne, co się wydarzy i kiedy. Czy ktoś może zidentyfikować zalety i wady tych dwóch metod, a w szczególności, dlaczego JS wydaje się ogólnie naciskać na rzeczy oparte na zdarzeniach?


title: Czy istnieje standard kodowania powtarzających się wzorców dat?

text: Próbuję ponownie napisać doohickey interfejsu zaplecza dla kalendarza, listy rzeczy do zrobienia i innego rodzaju kalendarza i odkryłem, że wszystkie zostały zaprogramowane tak, aby miały subtelnie różne formaty wzorców dat, które można wykorzystać do skonfigurowania w nich pewnych właściwości . Mam trzy ekrany, na których można zasadniczo wykonać to samo na różne sposoby: 1. ![Kalendarz](http://i.stack.imgur.com/mtAdU.png) 2. ![Harmonogram](http://i .stack.imgur.com/63x5L.png) 3. ![Todo](http://i.stack.imgur.com/M3Lw8.png) i zasadniczo mają te same informacje. Mam obiekty dla tych wszystkich, ale chciałbym zrobić serializację obiektów, nie do kodu bajtowego, ale do formatu czytelnego dla ludzi, który można by przenieść nie tylko między tymi trzema ekranami, ale przechowywać jako jedno pole w bazie danych i XML.


title: Jak przejść od klasyfikacji do grupowania

text: Mam problem grupowania, którego nie mogę rozwiązać, chociaż jeśli potraktuję go jako problem z klasyfikacją etykietowaną, mogę go rozwiązać z zadowalającą precyzją. Czy istnieje elegancki sposób na przejście od rozwiązania problemu klasyfikacji do rozwiązania problemu grupowania? Szczegóły: Mam oznaczony zestaw danych ruchów, z którego wyodrębniam wektor cech dla każdego ruchu. Mogę wtedy dokonać klasyfikacji ruchów kilkoma narzędziami (SVM, drzewa decyzyjne itp.) i otrzymuję satysfakcjonujące wyniki (dokładność 0,85, co w moim przypadku jest ok). Problem polega na tym, że dane ze świata rzeczywistego, z którymi się zmagam, nie będą oczywiście oznaczone etykietami i nie będą modelowane na podstawie danych oznaczonych etykietami, które posiadam (co oznacza, że nie mogę wytrenować klasyfikatora na danych oznaczonych etykietami i oczekiwać, że będzie działał dobrze na innych danych). Dane ze świata rzeczywistego na pewno nie będą składały się tylko z tych dwóch klas, będą się składać z K nieznanych klas, które chciałbym móc pogrupować z zadowalającą precyzją. Czy więc logiczne jest założenie, że jeśli potrafię rozwiązać problem klasyfikacji z dużą precyzją, to będę w stanie rozwiązać problem grupowania z dużą precyzją? Czy to oznacza, że moja ekstrakcja cech, która sprawdza się w przypadku klasyfikacji, będzie działać dobrze w przypadku klastrowania? Ponieważ samo rzucenie algorytmów klastrowania na problem (k-średnie, meanshift, dbscan itp.) nie daje dobrych wyników. Zwykle otrzymuję po prostu zbyt wiele klastrów lub tylko 1 klaster (chociaż wiem, że mam 2 klasy) z okropną precyzją. Btw używam sklearn Pythona.


title: jak określić minimalne wymagania oprogramowania

text: Niektórzy producenci oprogramowania (najczęściej komercyjni) zapewniają minimalne wymagania, kilka przykładów: Skype, Diablo III, Ubuntu-Server i OpenOffice. Zastanawiam się, jak określane są te minimalne wymagania, zwłaszcza pamięć RAM, ogólnie częstotliwość procesora? Czy kryje się za tym logika, czy po prostu jest to określane przez testowanie programu na innym sprzęcie, aby dowiedzieć się, co byłoby w porządku dla użytkownika końcowego? Jeśli istnieje logika do określenia takich parametrów, np. jak mogę przygotować takie wymagania dla kodu C lub JAVA (zakładając, że ma on >10k linii)?


title: Dlaczego optymalne jest planowanie najpierw krótszych zadań na procesorze jednoprocesorowym?

text: Na procesorze jednoprocesorowym wydaje się, że optymalne jest planowanie zadań, które najpierw zajmują mniej czasu, przy założeniu planowania bez wywłaszczania — po uruchomieniu zadanie musi zostać zakończone. Czemu? Jestem zdezorientowany, jak kolejność zmieniłaby ogólne opóźnienie. Ponieważ jednoprocesor może obsługiwać tylko jeden proces na raz, czy opóźnienie nie byłoby takie samo niezależnie od kolejności?


title: Niezrozumienie zakresu w JavaScript?

text: Widziałem kilku innych programistów mówiących o wiązaniu zakresu w JavaScript, ale zawsze wydawało mi się, że jest to nieprecyzyjne zdanie. `Function.prototype.call` i `Function.prototype.apply` nie przekazują zasięgu między dwiema metodami; zmieniają wywołującego funkcji - dwie bardzo różne rzeczy. Na przykład: function outer() { var item = { foo: 'foo' }; var bar = 'bar'; inner.apply(pozycja, null); } function inner() { console.log(this.foo); //foo console.log(bar); //ReferenceError: bar nie jest zdefiniowany } Gdyby zakres `outer` był rzeczywiście przekazany do `inner`, spodziewałbym się, że `inner` będzie mógł uzyskać dostęp do `bar`, ale nie może. „bar” znajdował się w zasięgu w „outer” i jest poza zasięgiem w „inner”. Stąd zakres nie został przekazany. Nawet dokumentacja Mozilli nie wspomina nic o przekazywaniu zakresu: > Wywołuje funkcję z podaną wartością `this` i `argumentami` dostarczonymi jako > tablica. Czy nie rozumiem zakresu, czy konkretnie zakresu, który dotyczy JavaScript? A może ci inni programiści źle to rozumieją?


title: Czy wdrażanie aplikacji SharpDevelop jest naprawdę darmowe?

text: Próbuję SharpDevelop do tworzenia aplikacji c#. Niezależnie od języka i IDE, czy można bezpłatnie wdrażać aplikacje korzystające z WinForm? Rozwijałem się z MonoDevelop tylko dlatego, że ma projektanta dla Gtk# (klient nie chce płacić więcej za licencje niż za korzystanie z VS...), ale jest to zbyt błędne i sprawia, że tracimy dużo czasu. SharpDevelop wygląda świetnie na pierwszy rzut oka, ale nie chciałbym, aby użytkownik lub my mieli problemy z legalnym oprogramowaniem. Dziękuję za dane! Gorące pozdrowienia.


title: Dlaczego tak trudno jest dostać pracę programisty?

text: Szukam pracy w ciągu ostatnich 10 lat. Ponieważ uważam, że temat, który znam lepiej, to programowanie, staram się znaleźć pracę programistyczną. Wysyłam swój program nauczania do wielu firm, a one w zasadzie nawet nie odpowiadają. Ostatnio wysłałem swój program nauczania do pracy w php i nie otrzymałem odpowiedzi. Kiedy jestem wezwany na rozmowę kwalifikacyjną (tak, to się stało) rozmowa nie trwa nawet 5 minut i jestem szybko zwalniana. Czasami dają test na stanowisko i każą mi odejść, nawet nie zawracając sobie głowy testowaniem mnie. Ubiegałem się o pracę w Delphi i PHP. Zasadniczo stanowiska, na które aplikowałem, dotyczą stażu lub pierwszej pracy. Nigdy nie aplikowałem na stanowisko „senior” lub „zaawansowane”. Nadal jestem na studiach licencjackich (uniwersyteckich) w compsci. czy robię coś źle? Czy naprawdę muszę ukończyć studia lub uzyskać certyfikat? Czy są jakieś wskazówki dotyczące programu nauczania, który zapewni Ci więcej rozmów kwalifikacyjnych? Czy ten problem zdarza się każdemu, czy tylko mnie?


title: Tworzenie stron internetowych po stronie klienta, pytanie ogólne

text: Jestem początkującym web developerem, pracowałem głównie z ASP.NET. Po stronie serwera wszystko jest bardzo dobrze udokumentowane, a za każdym razem, gdy wystąpi błąd, pojawia się objaśniający komunikat o błędzie. Ale po stronie klienta jestem całkowicie zagubiony. Nigdy nie musiałem tworzyć bardzo interaktywnego interfejsu użytkownika. Na przykład, otaguj sugestie w tej witrynie, gdy zadajesz pytanie. Jak taka rzecz się rozwija? Pisanie czystego javascript i jquery, zdarzenia onkeypress, potem ajax, potem manipulowanie domem i stylizowanie nowo utworzonego html… To powinno zająć dni, a nawet tygodnie początkującemu programiście i jest całkowicie podatne na błędy. Zawsze coś idzie nie tak, a najlepszą szansą jest odgadnięcie, co mogło pójść nie tak. To nie jest programowanie w Javie czy C# itp. Krótko pytam, jakie technologie są używane do szybkiego, solidnego tworzenia stron internetowych po stronie klienta, które zarówno wyglądają dobrze, jak i niezawodnie. EDYCJA: Próba usunięcia niejasności dotyczących pytania, pisanie czystego JavaScript w celu stworzenia wysoce interaktywnej i eleganckiej aplikacji po stronie klienta jest jak programowanie w Assemblerze. Jakie główne struktury/biblioteki/technologie wykorzystano do pokonania tej złożoności?


title: R vs Python do analizy danych

text: Programuję od około roku i bardzo interesuję się analizą danych i uczeniem maszynowym. Uczestniczę w kilku kursach online i czytam kilka książek. Wszystko, co robię, używa R lub Pythona i szukam sugestii, czy powinienem skoncentrować się na jednym języku (a jeśli tak, na którym) lub kontynuować z oboma; czy się uzupełniają? \-- Powinienem wspomnieć, że używam C# w szkole, ale poznałem Pythona dzięki samokształceniu.


title: Java i co z nią zrobić

text: Przeglądałem kilka stron i kilka tematów na tej stronie. Teraz jestem dopiero początkującym programistą i chcę podjąć dobrą decyzję. Z tego, co rozumiem, jest to, że Java jest często używana do rzeczy serwerowych i apletów internetowych, ale nie do aplikacji komputerowych działających na kliencie, jest również używana do programowania Androida i kilku innych telefonów komórkowych. Bardzo interesuje mnie programowanie na Androida, naprawdę uwielbiam programować na urządzenia mobilne, w tym przypadku na Androida, ponieważ naprawdę uważam, że ma duży potencjał i nie lubię iPhone'a. Jeśli chcę programować na Androidzie, muszę nauczyć się Javy (oprócz Mono). ale jeśli moja decyzja zmieni się w ciągu następnych kilku lat, nie sądzę, aby Java była odpowiednim językiem do podjęcia pracy polegającej na programowaniu aplikacji komputerowych. Myślę, że dostaję pracę, w której muszę programować rzeczy serwerowe, a nie aplikacje komputerowe. Dlatego uważam, że C# to dobry wybór. Potrafię programować na Windows Phone 7 (mam nadzieję, że będzie duży). i mam wrażenie, że C# jest szerzej używany w aplikacjach komputerowych. więc myślę, że C# jest bardziej wszechstronny, jeśli chodzi o programowanie mobilne i programowanie komputerowe. A może całkowicie się mylę, myśląc o tym?


title: Tworzenie projektów Java EE za pomocą Maven

text: Od około roku zajmuję się tworzeniem aplikacji internetowych Java EE w środowisku Eclipse. Mój pracodawca nie korzysta z Mavena, ale im więcej o nim czytam, tym bardziej jestem przekonany, że Maven + Hudson przyniesie nam ogromne korzyści. Najpierw jednak muszę w wolnym czasie oswoić się z tymi technologiami, aby móc stworzyć proof-of-concept. W tej chwili nadal jestem nowicjuszem Maven. Czy istnieje zestaw najlepszych praktyk dotyczących tworzenia aplikacji internetowych Java EE za pomocą Mavena? Na przykład mógłbym stworzyć projekt z podstawowym archetypem, a następnie dodać wszystkie potrzebne JARy, umieszczając w POM zależności dla kontenera serwletów, EJB, EclipseLink itp. To może zadziałać, ale może nie być najlepsze sposób to zrobić. Będę bardzo wdzięczny za wszelkie wskazówki, których możesz udzielić na ten temat.


title: Spójność a użyteczność?

text: Podczas projektowania interfejsu API spójność często pomaga w użyteczności. Czasami jednak są one sprzeczne, gdy można dodać dodatkową funkcję API, aby usprawnić typowy przypadek. Wygląda na to, że istnieje pewien podział co do tego, co tu robić. Niektóre projekty (przychodzi mi na myśl standardowa biblioteka Java) sprzyjają spójności, nawet jeśli zwykłe przypadki są bardziej szczegółowe. Inne (przychodzi mi na myśl standardowa biblioteka Pythona) faworyzują użyteczność, nawet jeśli oznacza to traktowanie wspólnego przypadku jako „specjalnego”, aby było łatwiej. Jaka jest Twoja opinia na temat tego, jak należy zrównoważyć spójność i użyteczność?


title: Jak źle może być brak pracy zespołowej, gdy jesteś programistą?

text: Nadal chodzę do szkoły i wiem, że mam problemy z kontaktami z innymi ludźmi. Nie jestem zły ani nieśmiały ani inny, po prostu lubię pracować po swojemu i z moimi opiniami z poszanowaniem innych, mam dużą ciekawość i głód wiedzy, ale brakuje mi praktyki i chyba ludzie nie chcą pracować ze mną, ponieważ mogą się obawiać, że będę mówić o jakimś morale. (Na przykład zacząłem uczyć się programowania przy użyciu Linuxa zamiast Windowsa, nawet jeśli często używam Windowsa. I mam Maca). Co dzieje się z programistami, którym brakuje pracy zespołowej? Gdzie zaczynają się problemy? Czy bycie dobrym programistą przynajmniej trochę rekompensuje? Czy to normalne, że programista ma wizję swojej pracy, zamiast robić to, co mu każą? (jestem Francją)


title: Metodologie programowania, gdy setki programistów pracuje nad jednym rozwiązaniem?

text: Jesteśmy organizacją składającą się z około 200 programistów, którzy nieprzerwanie pracują nad jednym pojedynczym produktem (używając Git kontroli wersji), który ma zostać wydany w określonym terminie. Ze względu na ogromną liczbę programistów staramy się tworzyć zespoły „cross-functional” z około 10 programistami w każdym zespole, co w efekcie daje około 20 zespołów programistycznych w organizacji. Ponieważ chcielibyśmy stale utrzymywać „wysoki standard” (co oznacza, że gdy programista wykonuje pull, produkt powinien być przynajmniej kompilowalny itp.) produktu w głównym repozytorium, chcielibyśmy użyć pewnego rodzaju bramek jakości. Nie jestem pewien, jak sformułować to pytanie, ale zastanawiam się, czy mógłbym zasięgnąć porady metodologii tworzenia dla tak dużej grupy programistów pracujących nad jednym produktem. Naszym zdaniem jednym końcem spektrum jest umożliwienie każdemu deweloperowi commitowania bezpośrednio do głównego repozytorium, jednak obawiamy się, że ze względu na dużą liczbę deweloperów/commitów, "główne repozytorium" może stale znajdować się w zepsutym etapie, z powodu ponieważ nie możemy mieć wymagającej „bramki jakości” dla każdego zatwierdzenia. Drugi koniec spektrum może być jak (myślimy, że robi to Linus Torvalds / Linux) struktura drzewa lub piramidy, gdzie „główne repozytorium” ma tylko trzy źródła pull, te trzy mają tylko garść zaufanych źródeł pull itp. Uważamy jednak, że przy takiej strukturze zmiany mają długi łańcuch do pokonania, aby wejść do „głównego repozytorium”. Plus, że jeśli wystąpi konflikt scalania, problem będzie dotyczył innego programisty niż „oryginalny programista”. Mając te wszystkie podstawowe informacje i opinie, jak możemy uczyć się i czytać zalecane metodologie programowania dla tak wielu programistów? Jak duże organizacje (Microsoft, Facebook, Ubuntu itp.) organizują swój rozwój?


title: Słowo dla nadzbioru plików i folderów

text: Próbuję wymyślić nazwę klasy, która może reprezentować zarówno pliki, jak i foldery. Czy ktoś zna na to słowo?


title: Mnóstwo fabryk abstrakcyjnych DI / IoC

text: Biorąc pod uwagę architekturę projektu w następujący sposób, gdzie każde pole reprezentuje zestaw (wszystkie są bibliotekami klas), a każda strzałka oznacza zależność: ![architektura](http://i.stack.imgur.com/IfvWU.png) Might nie będzie nic warte, że ten projekt jest **ogromny** (no cóż, stanie się!), złożoność poniesiona przez takie oddzielenie jest absolutnie uzasadniona. **Warstwa logiki biznesowej** Biblioteka BLL definiuje i organizuje różne zestawy **interfejsów** POCO w swoich przestrzeniach nazw `Abstract` i implementuje różne funkcje _logic_ w swoich przestrzeniach nazw `Concrete`; logika funkcjonalności odnosi się do abstrakcyjnych interfejsów POCO i używa ich. **Warstwa dostępu do danych** Biblioteka DAL implementuje interfejsy POCO z LOGIKI biznesowej za pomocą klas `częściowych`, które „rozszerzają” klasy Linq do SQL (dbml), więc jeśli istnieje klasa L2S `Klienta`, implementuje ona `ICustomer` interfejs. Czasami klasa L2S ma różne typy lub abstrakcja BLL używa typów `enum`, ale najczęściej częściowy kod klasy wygląda tak: public częściowa klasa SomeEntity : ISomeEntity { } Ten zestaw dostarcza _Model_ , ujawniając klasy o nazwie "xxxxModel" , które są wstrzykiwane przez konstruktora z _repozytoriami_ przegrupowanymi w _usługi_ , ale jest pewien skręt: klasy „xxxxxModel” implementują interfejs o nazwie `IUnitOfWork`, który hermetyzuje transakcję bazy danych, która **musi** być w stanie działać na wszystkich repozytoriach będących w jej dyspozycji ... prawdopodobnie z dynamicznym (określonym w czasie wykonywania) ciągiem połączenia. Aby to osiągnąć, stworzyłem „fabryki modeli”, które tworzą pojedynczy `DataContext` odpowiedniego typu i wstrzykują tę samą instancję do każdego repozytorium. **Warstwa logiki prezentacji** Niektóre interfejsy BLL POCO wymagają implementacji "ViewModel" (np. do wyświetlania jako elementy na liście) - definiuje je biblioteka PLL; jednak cel tej biblioteki jest bardziej skupiony wokół, cóż, faktycznej logiki prezentacji, **chociaż nie ma żadnego odniesienia do WPF** (poza pojedynczym odwołaniem do _WindowBase_, ale do tego dojdę). Tak więc ten zespół zapewnia _ViewModel_. Należy zauważyć, że ViewModel tutaj całkowicie _kontroluje_ widok - każdy ViewModel jest wstrzykiwany z implementacją `IViewFactory`, która tworzy implementację `IView` - technicznie ViewModel jest błogo nieświadomy implementacji, więc nie jestem pewien jak głęboko narusza MVVM (szczerze mówiąc, nie przejmuję się tym punktem - szczególnie po przeczytaniu posta na blogu, takiego jak ten), ale należy podkreślić, że to ViewModel dosłownie _tworzy_ widok i przypisuje ` Kontekst Danych”. To bardzo ułatwia radzenie sobie z rzeczami, które _powinny_ być proste, takie jak pokazywanie i zamykanie okna. Tak więc wszystkie klasy ViewModel dziedziczą `ViewModelBase`, która jest klasą abstrakcyjną, która pobiera `IViewFactory` w swoim chronionym konstruktorze, skutecznie tworząc instancję View. Oto obraźliwy kod: /// <summary> /// Interfejs dla ViewModel. /// </summary> public interface IViewModel : INotifyPropertyChanged { /// <summary> /// Powiadamia odbiornik, że wartość określonej właściwości uległa zmianie. /// </summary> void NotifyPropertyChanged<TProperty>(właściwość Expression<Func<TProperty>>); /// <summary> /// Powiadamia odbiornik, że wartość określonej właściwości uległa zmianie. /// </summary> void NotifyPropertyChanged(string propertyName); /// <podsumowanie> /// Zamyka widok. /// </summary> void Zamknij(); /// <podsumowanie> /// Wyświetla widok. /// </summary> void Show(); /// <summary> /// Wyświetla widok (modalny) i zwraca wartość <see cref="DialogResult"/> wskazującą, jak widok został zamknięty. /// </summary> DialogResult ShowDialog(); } Tak więc ViewModel zasadniczo _steruje_ Widokiem do momentu _enkapsulacji_ go, co ułatwia implementację mojego własnego wyliczenia `DialogResult` (znacznie bliższego temu, jak miało to miejsce w WinForms). **Zespół widoków** Ponieważ ta biblioteka odwołuje się i wykorzystuje ViewModels z zespołu PLL, który implementuje interfejsy zdefiniowane w zespole LOGIKI biznesowej, brakuje tutaj strzałki - istnieje również zależność od LOGIKI biznesowej, ale jest ona używana tylko pośrednio. Ta biblioteka udostępnia _View_ , definiując okna i kontrolki WPF/XAML. Oprócz `IValueConverter` i innych implementacji `MarkupExtension` w tej bibliotece nie ma dużo kodu C#, twarde odwołania do implementacji ViewModel znajdują się w deklaracjach XAML `d:DataContext {d:DesignInstance...}`. **Więc, co się dzieje?** Zdecydowanie podoba mi się kierunek zależności, w tym PLL/Views. Fakt, że LOGO ma zerowe zależności oznacza, że mogę ponownie użyć tej biblioteki i wymyślić WebUI, jeśli kiedykolwiek będę go potrzebować (i to się stanie ... w końcu!), a rozdzielenie DAL/BLL oznacza, że części modelu danych mogą pochodzić z usług sieci Web, jakiejś chmury lub czegokolwiek - logika biznesowa nie obchodzi i to dobrze. Główny problem, jaki mam, polega na tym, że piszę DUŻO abstrakcyjnych fabryk i wdrażam ich jeszcze więcej, i nie zawsze używam tych abstrakcji (stąd zapach), ale wydaje mi się, że kiedy pytam jak mogę wstrzyknąć "dynamiczną" zależność, odpowiedź jest prawie automatycznie - "abstrakcyjna fabryka zrobi!" ... co prawdopodobnie jest słuszne, po prostu nie sądzę, że to w porządku, że prawie wszystko jest " zależność dynamiczna! public class SomeViewFactory : IViewFactory { public IView Create(IViewModel viewModel) { return new SomeWindow {DataContext = viewModel}; } } public class SomeRepositoryFactory : DataRepositoryFactory<SomeEntity> { public IRepository<SomeEntity> Create(DataContext context) { return new SomeRepository(context); } } Mam nawet abstrakcyjną `IFunctionalityFactory`: interfejs publiczny IFunctionalityFactory { IFunctionality Create(); } public class SomeFunctionalityFactory : IFunctionalityFactory { private readonly IFunctionalityAuth _auth; prywatne tylko do odczytu ISomeBusinessLogic _logic; public SomeFunctionalityFactory(IFunctionalityAuth auth, logika ISomeBusinessLogic) { _auth = auth; _logika = logika; } public IFunctionality Create() { var canExecute = auth.IsCurrentUserAuthorised(typeof(SomeFunctionality).FullName); return new SomeFunctionality(canExecute, _logic); } } Czy normalne jest posiadanie fabryk dla prawie wszystkiego - od repozytoriów po usługi i modele w DAL, po widoki i modele widoków w bibliotece PLL/View? Na razie projekt jest raczej niewielki i nadal jestem jedynym programistą, który nad nim pracuje; Chciałbym mieć architekturę tak SOLIDNĄ i jak najprostszą, jeśli chodzi o wdrażanie nowych funkcjonalności. To tylko mój drugi projekt implementujący DI/IoC, nie trzeba dodawać, że próbuję biegać (i pływać, a może nawet latać), zanim będę mógł chodzić... Jakieś wskazówki lub problemy, których nie widzę? Czy nadużywam _Fabryka abstrakcyjna_? Jak inaczej mógłbym utworzyć instancję Widoku? Jak inaczej mógłbym mieć model danych, który mógłby łączyć się z dowolnym zestawem [prawie] identycznych baz danych, według uznania użytkownika? Wiem, że łamię MVVM, czy przeoczyłem coś we wzorcu, który mógłby uprościć moją egzystencję?


title: Środowisko programistyczne C

text: Jestem emerytowanym programistą, który przez większość swojej kariery pracował w środowisku Unix. Mam wiele gier, które napisałem w C i które chciałbym ponownie uruchomić. Większość korzysta z biblioteki curses. Te programy są dość stare. Czy Ubuntu obsługuje kompilatory, edytory linków i biblioteki, których potrzebuję, aby uruchomić te rzeczy? Oczywiście wolałbym env, tak jak miałem, kiedy pisałem te, ksh, vi itd.


title: Wybór (prawidłowej?) technologii i środowiska

text: Jesteśmy dwoma programistami na skraju rozpoczęcia tworzenia nowych produktów internetowych. Oboje jesteśmy fanami podejścia lean start-up i chcielibyśmy ćwiczyć ciągłe wdrażanie. Tu pojawia się dylemat - oboje wywodzimy się z C# / Windows i musimy wybrać pomiędzy: Trzymaj się .NET i Windows, nie będziemy tracić czasu na poznawanie nowych technologii i wkładamy cały nasz wysiłek w rozwój. Przejdź na Ruby on Rails i Linux, który ma dobrą reputację szybkiego rozwoju i szerokiego wsparcia open source. Negatywną stroną jest to, że będziemy musieli włożyć dużo wysiłku w naukę Ruby, Rails i Linuxa... Co byś zrobił? Jakie inne względy powinniśmy wziąć pod uwagę?


title: Czy możliwość uruchomienia dodatku GPL GPL-ize program (Gstreamer)

text: To pytanie jest zadawane w odniesieniu do gstreamera, ale może dotyczyć dowolnej architektury opartej na dodatkach. Mam aplikację opartą na Gstreamerze, która może być dostarczana jako zastrzeżona, ponieważ używam w niej niezmodyfikowanego Gstreamera ze wszystkimi częściami LGPL. Mogę jednak również wydać wersję, w której jedna wtyczka Gstreamera jest na licencji GPL. O ile wiem, zanieczyściłoby to cały program. Jeśli zamiast umieszczać w programie specyfikację potoku Gstreamer, opublikuję ją z możliwością odczytu specyfikacji potoku z pliku zewnętrznego (zakodowanego według jakiegoś zestawu instrukcji - np. jako specyfikację obsługującą GstParseLaunch()) czy mogę wydać program jako zastrzeżone, a pliki pipe-spec jako GPL? Jak daleko od siebie musiałbym publikować te elementy, to znaczy, czy program byłby w jednej dystrybucji, a specyfikacje osobno w innej? Co się stanie, jeśli program nigdy nie zostanie tak naprawdę wydany, ale zamiast tego jest wbudowana aplikacja sprzedawana wewnątrz urządzenia, a urządzenie jest sprzedawane z fabrycznie załadowaną częścią zastrzeżoną i niezastrzeżoną?


title: Co konkretnie możesz zrobić w Basicu?

text: Nie wiem, co konkretnie można zrobić z programowaniem Visual Basic. Czytałem, że można z nim zrobić wszystko, na przykład tworzyć gry, więc czy to oznacza, że można go wykorzystać do tworzenia gier, które można by umieścić na stronie internetowej takiej jak Kongregate? Zastanawiam się tylko, jakie konkretnie rzeczy możesz zrobić z Visual Basic. Podobnie jak Objective-C może być używany do tworzenia aplikacji, a Java może być używana do tworzenia aplikacji na Androida. Do czego konkretnie można użyć Visual Basic?


title: Różnica między środowiskami programistycznymi Windows i Linux?

text: Niedługo mam rozmowę kwalifikacyjną na stanowisko analityka biznesowego, a rekruter wspomniał o kilku opiniach od poprzedniego kandydata, z którym przeprowadzono wywiad, który powiedział, że ankieterzy zapytali go, jaka jest różnica między środowiskiem programistycznym Windows a Linux. Czy są jakieś sprawy wysokiego poziomu, o których muszę wiedzieć z biznesowego punktu widzenia podczas pracy z zespołem programistów lub projektowania aplikacji w systemie Windows vs Linux?


title: Czy w DDD Value Object zawsze znajduje się na liściach drzewa relacji?

text: Jeśli mam album ze zdjęciami, w którym każde **Zdjęcie** może być skomentowane, czy **Komentarze** powinny być w tych przypadkach encjami czy obiektem wartości: 1. Komentarze mogą być dodawane tylko anonimowo (tzn. Komentarze nie mają z niczym związku z wyjątkiem zdjęcia). 2. Komentarze mogą dodawać zarejestrowani użytkownicy (tzn. będzie istniała relacja pomiędzy Komentarzem a podmiotem Użytkownika). 3. Komentarze mogą zawierać komentarze (np. 1 użytkownik odpowiada innemu). Myślę, że modelowanie komentarza jako obiektu wartości w pierwszym przypadku brzmi rozsądnie, ponieważ komentarz nie będzie miał żadnych relacji z żadnymi innymi bytami. A co z drugim i trzecim przypadkiem? Czy potrzeba identyfikowania, który użytkownik opublikował który komentarz zmienia go z obiektu wartości w Entity?


title: Wiadomości Git commit z modelem rozgałęziania nvie

text: Ten model rozgałęziania Git zaleca rozgałęzianie dla wszystkich prac programistycznych i scalanie po zakończeniu: 1. Rozgałęzianie 2. Rozwijanie 3. Scalanie po zakończeniu Zastanawiam się, jak to działa w praktyce, biorąc pod uwagę, że wykonanie scalenia z tego modelu po prostu doda zatwierdzenie do `develop` z jakimkolwiek komunikatem commita był ostatnim w linii. Czy osoby korzystające z tego modelu dokonują interaktywnej zmiany bazy w gałęzi funkcji przed zatwierdzeniem? Jeśli nie, w jaki sposób upewniasz się, że zmiany w głównej gałęzi mają sens?


title: Czy ktoś nadal używa analizatorów logicznych do debugowania systemów czasu rzeczywistego?

text: Wiele lat temu podczas debugowania systemów czasu rzeczywistego (takich jak te używane w centralach telefonicznych) musieliśmy używać analizatorów logicznych (które odczytują wykonanie bezpośrednio z procesora) lub emulatorów (które fizycznie zastępowały sam procesor). Czy jest jakaś sytuacja, w której ten rodzaj oprzyrządowania jest nadal aktualny?


title: Potrzebuję przyzwoitej alternatywy dla c++

text: Nauczyłem się php i c++, na każdym z nich wymienię rzeczy, które mi się podobały, a nie podobały, jak postanowiłem się ich nauczyć w pierwszej kolejności i dlaczego czuję potrzebę nauczenia się przyzwoitej alternatywy dla c++, ja Nie jestem zawodowym programistą i robię projekty tylko dla siebie. **PHP -** Postanowiłem się uczyć, ponieważ chciałem zbudować dynamiczną stronę internetową, co zrobiłem i wyszło bardzo dobrze, zakodowałem nawet „nie tak podstawową” wyszukiwarkę, która wyświetlałaby wyniki „w stylu google” i naprawdę szybkie, całkiem fajne rzeczy. **ZAWAGI -** Dość spójna składnia dla wszystkich rzeczy (drobne zastrzeżenia), świetna funkcjonalność, radość dla mnie z kodowania (wydaje się, że „wiem”, czego chcę i po prostu to robi) ** MINUSY – ** Boleśnie powolne przetwarzanie liczb (co prowadzi mnie do c++, którego nauczyłem się tylko dlatego, że chciałem trochę przetwarzać liczby i musiało to być szybkie) **C++ -** Nauczyłem się, ponieważ przetwarzanie liczb było tak powolne w php i manipulacji duże ilości danych były bardzo trudne, myślałem, że to popularny język programowania i w ogóle, a testy pokazują, że jest szybki, podstawowe rzeczy przypominają php, więc nie powinno być trudne do pobrania **PROS -** Można go używać praktycznie do wszystkiego, bardzo, bardzo szybko **CONS -** Chociaż na początku kodowanie jest zabawne, jeśli muszę zrobić coś niezwykłego, procedury alokacji pamięci, wskaźniki, rozmiary stosów itp. naprawdę mnie zmęczą szybko, składnia jest czasami trochę niespójna (więcej zastrzeżeń) Myślę, że z tego, co napisałem, zrozumiecie, czego szukam, tam Istnieją tysiące języków, prawdopodobnie jeden z nich będzie odpowiadał moim potrzebom, widziałem dzisiaj różne rzeczy, a mój przyjaciel, który jest profesjonalnym programistą, wypróbował OCaml i Fortran i powiedział, że oba są szybkie do rzeczy numerycznych, byłem skłonny przetestować Fortran, ale potrzebuję więcej danych wejściowych, ponieważ chcę mieć innych dobrych „kandydatów” do wyboru, na przykład składnia Pythona wydawała mi się świetna, ale potem dowiedziałem się z niektórych testów, że to był dużo wolniejszy niż c++ i po prostu nie chcę kręcić kciukami przez cały dzień.


title: Z jakich frameworków ciągłej integracji korzystasz i dlaczego?

text: Istnieje wiele różnych frameworków Continuous Integration (CI) i zastanawiam się, który jest najbardziej popularny. Z jakich frameworków korzystałeś w firmach, w których pracujesz? Czy jest jakiś powód, dla którego jeden framework CI jest bardziej popularny niż inny – być może ma to związek z oferowanymi przez niego funkcjami, rzeczami, które się z nim integrują, a może tylko z marketingiem? Wygląda na to, że ciągła integracja jest używana częściej w światach Java i .net niż powiedzmy ruby czy python. Dlaczego to?


title: Czy określenie punktu zatrzymania algorytmu genetycznego przekreśla cel algorytmu?

text: Wikipedia definiuje punkt końcowy GA w następujący sposób: > Zwykle algorytm kończy się, gdy wyprodukowano albo maksymalną liczbę > pokoleń, albo osiągnięto zadowalający poziom sprawności dla populacji. Jeśli algorytm został zakończony z powodu > maksymalnej liczby pokoleń, satysfakcjonujące rozwiązanie może, ale nie musi zostać osiągnięte. Teraz, jeśli kończy się, gdy zostanie osiągnięty zadowalający poziom sprawności, a ty to ty definiujesz ten poziom sprawności, dlaczego nie miałbyś po prostu sam stworzyć „doskonałego” genomu od samego początku, skoro już znasz jego cechy tego doskonałego genomu? Chyba jestem tu trochę zdezorientowany. Myślałem, że celem GA była ciągła ewolucja i pokazanie nam prawdopodobnie jeszcze lepszego rozwiązania niż to, o czym myśleliśmy, a nasza funkcja fitness była po prostu czymś, co pomogło jej po drodze, a nie czymś, co stawiamy na piedestale jako zakończenie ” stan idealny”. Czy to nie niszczy punktu?


title: Pomoce techniczne/wizualizacyjne, które pomogą nam uzyskać wyraźniejszy obraz kodu?

text: Czasami, gdy kod jest zbyt skomplikowany, dzielę go na części. Czy istnieje inny rodzaj techniki/wizualizacji, który pomoże uzyskać wyraźniejszy obraz kodu?


title: Czym są kombinatory i jak są stosowane w projektach programistycznych? (praktyczne wyjaśnienie)

text: Czym są kombinatory? Szukam: * praktycznego wyjaśnienia * przykładów ich użycia * przykładów jak kombinatory poprawiają jakość/ogólność kodu Nie szukam: * wyjaśnień kombinatorów, które nie pomagają mi w pracy ( takich jak kombinator Y)


title: Format pamięci trwałej dla danych o dużej intensywności (aktualizacja+odczyt)

text: Zajmuję się tworzeniem aplikacji Java. Podczas korzystania z aplikacji generowane byłyby dane, które należy przechowywać na dysku. Poszukuję wbudowanej bazy danych odpowiedniej dla przeciętnego przypadku użycia aplikacji. Początkowo planowałem używać XML do przechowywania informacji. Ale potem, po kilku artykułach, znalazłem ogólną opinię, że XML nie jest zbyt dobrym sposobem dodawania informacji, ponieważ nie wiem dlaczego :P Jest to z grubsza format XML, jeśli go używam. Daje ci krótki przegląd struktury danych. <A> <B> <C>coś</C> </B> <B> <C>coś innego</C> <C>jeszcze jedno</C> </B> </A> wygenerowane dane byłyby głównie elementami/obiektami typu C. Dane rzadko byłyby usuwane. Byłby głównie dodawany lub przeszukiwany. W takim scenariuszu, co byłoby dobrym wyborem do przechowywania danych. 1. XML. 2. Wbudowana baza danych. 3. Coś innego. Poszukałem również opcji wbudowanych baz danych. Te, które znalazłem najczęściej używane to **H2** i **Java DB** (chyba tak samo jak Apache Derby?) oraz SQLite. Który z twoich doświadczeń dał ci lepsze wyniki.


title: Najlepsze praktyki dotyczące wypełniania dynamicznego menu podręcznego?

text:
Tworzę dynamiczne wyskakujące menu, którego zawartość zależy od stanu, w który kliknął użytkownik. Czy uważa się, że lepszą praktyką jest tworzenie menu szablonów w html i modyfikowanie opcji wyświetlanych w javascript, czy tworzenie wszystkiego w javascript w locie? Używam jQuery. przykład kodu: HTML:

Opcja 1

Opcja 2

 ... JavaScript: showMenu = function (stan) { var menu = $("#menuTemplate").clone(true).removeAttr("id"); if (stan) { menu.find(.opt1").show(); menu.find(.opt2").hide(); } // reszta funkcji } lub Javascript: showMenu = function (stan) { var menu = $("

"); if (stan) { menu.append($("
Opcja 1
")); } else { menu.append($("
Opcja 2>/div>")); } // reszta funkcji }


title: Jak udostępniać wspólne klasy między formularzami systemu Windows i aplikacjami internetowymi za pomocą C#?

text: W naszym środowisku mamy wiele serwerów ERP plus dane pochodzące z wielu źródeł. Muszę stworzyć plan rozwoju na najbliższe lata, ponieważ oczywiste jest, że aplikacje poboczne będą potrzebne do wielu rzeczy. Wybór jest taki, że rozwój nastąpi za pomocą technologii Microsoft. Oznacza to, że będę tworzyć aplikacje internetowe (MVC, formularze internetowe itp.) lub standardowe aplikacje formularzy systemu Windows. Chodzi o to, że będę tworzyć klasy, które będą zawierały logikę biznesową, którą chcę zastosować w różnych projektach. Co myślałem do tej pory: 1) Utwórz biblioteki dll klas, zawierające wymaganą logikę 2) Użyj ponownie tych bibliotek w moich aplikacjach. Ale co z aplikacjami internetowymi? Czy powinienem używać bibliotek dll bezpośrednio, czy powinienem je hermetyzować w usługach internetowych i korzystać z usług internetowych w aplikacjach internetowych? Ogólnie chciałbym dowiedzieć się, jak budować swoją strategię.


title: Plik XML czy baza danych?

text: Przepisuję sekcję mojej witryny i próbuję zdecydować, jak bardzo będzie to przepisywane. W tej chwili posiadam web service feed, który generuje xml raz dziennie. Następnie używam tego pliku xml na mojej stronie internetowej do generowania ogólnej struktury. Próbuję zdecydować, czy te informacje powinny znajdować się w bazie danych, czy pozostać w pliku xml. 1. Plik może mieć rozmiar od 4mb do 12mb. 2. Głębokość plików może się zmieniać, więc muszę rekursywnie znaleźć żądane dane. 3. Używam klas serializatorów .NET i przechowuję serializowany plik w zmiennej globalnej, aby uniknąć ponownego serializowania go za każdym razem, gdy strona jest ładowana. Moje powody, dla których myślę, że baza danych byłaby lepsza, to: 1. Wiedziałbym dokładnie, gdzie jestem w pliku, używając wewnętrznego identyfikatora, więc nie musiałbym rekursować pliku, aby uzyskać informacje. 2. Nie musiałbym ładować / serializować XML i mógłbym po prostu użyć moich już otwartych połączeń z bazą danych. 3. Wyszukiwanie danych w pliku byłoby szybsze (?), ponieważ po prostu wykonałbym zapytanie SQL, a nie ponownie przerzucał plik. Czy ktoś ma jakieś pomysły, które są lepsze i która opcja zużywa więcej zasobów na serwerze lub jest szybsza? EDYCJA: plik jest odczytywany za każdym razem, gdy ładowana jest strona internetowa (chociaż tylko raz serializowany). Nie jest pisany przez standardowych użytkowników (tylko przez zadanie administratora, które działa w środku nocy). To jest moje wstępne śledztwo przed wyśmiewaniem.


title: Jak programiści graficy radzą sobie z renderowaniem wierzchołków, które nie zmieniają obrazu?

text: Tytuł jest więc trochę niezręczny. Przedstawię tło, a następnie zadam pytanie. **Tło** : Pracuję jako programista aplikacji internetowych GIS, ale w wolnym czasie bawię się renderowaniem map i ulepszaniem formatów wymiany danych. Pracuję tylko w przestrzeni 2D. Jednym z interesujących problemów, z jakimi się spotkałem, jest to, że podczas renderowania wielokąta na małą skalę (oddalony), wiele wierzchołków jest zbędnych. W skrajnym przypadku mamy wielokąt z 500 000 wierzchołków, który zajmuje tylko jeden piksel. Jeśli wysyłasz te dane do przeglądarki, sensowne byłoby pominięcie ~499.999 z tych wierzchołków. Jednym ze sposobów, w jaki możemy to osiągnąć, jest renderowanie obrazu na serwerze i wysyłanie go jako PNG: voila, o to chodzi. Czasami jednak chcemy, aby dane były przesyłane do przeglądarki, gdzie mogą być renderowane za pomocą SVG (lub canvas lub webgl), aby mogły być interaktywne. **Problem** : Okazuje się, że przy użyciu nowoczesnych zestawów danych geograficznych bardzo łatwo jest przeciążyć możliwości renderowania SVG. Próbując poradzić sobie z tymi ograniczeniami, staram się wymyślić **_jak wizualnie bezstratnie zmniejszyć zestaw danych dla danej skali i zasięgu mapy_** (i, jeśli to konieczne, dla znanej szerokości i wysokości pikseli mapy) . Dzięki algorytmowi Douglasa-Peuckera udało mi się znacznie zmniejszyć rozmiar danych i wierzę, że udało mi się go uzyskać, aby utrzymać wielokąty z dokładnością do jednego piksela. Niestety Douglas-Peucker nie zachowuje topologii, więc zmienił sposób renderowania granic między wielokątami. Nie mogłem łatwo znaleźć innych algorytmów do wypróbowania i dostosowania do celu, ale nie mam zbyt dużego tła CS/algorytmów i mogę ich nie rozpoznać, jeśli je zobaczę.


title: Nazywanie klasy przetwarzającej zamówienia

text: Jestem w trakcie refaktoryzacji projektu. Niedawno przeczytałem Czysty Kodeks i chcę zapoznać się z niektórymi zawartymi w nim radami, ze szczególnym zainteresowaniem zasadą pojedynczej odpowiedzialności (SRP). Obecnie istnieje klasa o nazwie OrderProcessor w kontekście systemu zamówień produktów produkcyjnych. Ta klasa obecnie wykonuje następującą procedurę co n minut: * sprawdza bazę danych pod kątem nowo przesłanych + nieprzetworzonych zamówień (za pośrednictwem klasy Warstwy Danych, uff!) * zbieraj wszystkie szczegóły zamówień * oznaczaj je jako w trakcie * iteruj przez każdy, aby: * wykonać pewne sprawdzenie integralności * wywołać usługę sieciową w systemie innej firmy, aby złożyć zamówienie * sprawdzić status zwracanej wartości usługi sieciowej pod kątem sukcesu/porażki * wysłać wiadomość e-mail do kogoś, jeśli usługa sieciowa nie powiedzie się * stale logować się do pliku tekstowego przy każdej operacji lub możliwym punkcie awarii zacząłem od rozbicia tej klasy na nowe klasy, takie jak: * OrderService - słaba nazwa. To ten, który budzi się co n minut * OrderGatherer - wywołuje DL, aby pobrać zamówienie z bazy danych * OrderIterator (? wydaje się zbyt wymuszony lub źle nazwany) - * OrderPlacer - wywołuje serwis internetowy w celu złożenia zamówienia * EmailSender * Logger I **zmagam się ze znalezieniem dobrych nazw dla każdej klasy** i wdrażam SRP w rozsądny sposób. Jak można podzielić tę klasę na nową klasę z odrębnymi obowiązkami?


title: Najlepsze praktyki dotyczące zarządzania dynamicznymi modułami HTML?

text:
Tworzę aplikacje internetowe, które dodają i usuwają wiele dynamicznej zawartości, a nawet struktury na stronie, i nie jestem pod wrażeniem metody, której używam do tego. Gdy chcę dodać sekcję lub moduł do pozycji w interfejsie, przechowuję html w kodzie, a tego nie lubię: if (rank == "moderator") { $("#header" ).append('
' + // zawartość, używając + do implementacji łamania linii '
'); } To wygląda na taką złą praktykę programistyczną. Musi być lepszy sposób. Myślałem o zbudowaniu funkcji konwertującej strukturę JSON na html, ale wydaje się to przesadą. Dla funkcjonalności aplikacji, których używam: * Node.js * JS * JQuery * AJAX **Czy istnieje jakiś powszechny sposób na zewnętrzne przechowywanie modułów HTML do importu AJAX?**


title: Typy zwracane funkcji DAL vs BLL

text: Oto jak widzę główne różnice między DAL i BLL: * DAL bezpośrednio wysyła zapytanie do bazy danych. * DAL **nie tworzy nowych informacji**. Może wykonywać złożone żądania sql, łącząc kilka tabel, ale wynik takiego żądania nigdy nie daje żadnych informacji, których nie było w bazie danych. * LOGIKA BIZNESOWA stosuje logikę biznesową na informacjach DAL w celu tworzenia nowych informacji. Teraz zastanawiam się, jakie typy danych mają zwracać funkcje tych warstw. Na razie wszystkie moje funkcje DAL zwracają DataTable. Ale moje funkcje LOGIKI biznesowej zwracają jakąś klasę lub listę klas, które utworzyłem. Na przykład: * dal.getAllPortfolios() zwraca DataTable (pracuję z Visual Studio), wynik sprzężenia na kilku tabelach. * bll.getAllPortfolios() wywołuje dal.getAllPortfolios, ale zwraca listę portfela. Z moją publiczną klasą Portfolio znajdującą się w przestrzeni nazw BLL. Czasami funkcja LOGIKI biznesowej tak naprawdę nie stosuje żadnej „logiki biznesowej”, ale tylko mapuje DataTable z de DAL na klasę LOGIKI biznesowej. Zastanawiam się, czy to jest w porządku. Może cała praca z mapami powinna być wykonana przez DAL? Jeśli tak jest, gdzie umieścić moje osobiste zajęcia z mapowania? W przestrzeni nazw LOGIKI LOGICZNEJ lub DAL (te klasy są wymagane w warstwach powyżej LOGIKI biznesowej)?


title: Jak powinienem ocenić nowe języki przeglądarki?

text: W dzisiejszych czasach istnieje wiele projektów, których celem jest wprowadzenie nowych języków do przeglądarki poprzez kompilację ich do JavaScript. Wśród innych można wymienić ClojureScript, CoffeScript, Dart, haXe, Emscripten, Amber Smalltalk. Chciałbym wypróbować kilka z nich, ale nie jestem pewien, czego powinienem szukać, oceniając te języki, aby sprawdzić, czy nadają się do produkcji. Jak powinienem ocenić nowy język przeglądarki i jakich pułapek powinienem szukać?


title: Czy ORM umożliwiają tworzenie bogatych modeli domen?

text: Po używaniu Hibernate w większości moich projektów przez około 8 lat, trafiłem do firmy, która odradza jego używanie i chce, aby aplikacje wchodziły w interakcję z bazą danych tylko poprzez procedury składowane. Po kilku tygodniach nie byłem w stanie stworzyć bogatego modelu domeny aplikacji, którą zaczynam budować, a aplikacja wygląda po prostu jak (okropny) skrypt transakcyjny. Niektóre ze znalezionych przeze mnie problemów to: * Nie można nawigować po wykresie obiektów, ponieważ procedury składowane ładują tylko minimalną ilość danych, co oznacza, że czasami mamy podobne obiekty z różnymi polami. Jednym z przykładów jest: mamy procedurę składowaną do pobierania wszystkich danych od klienta, a inną do pobierania informacji o koncie plus kilka pól od klienta. * Wiele logiki kończy się w klasach pomocniczych, więc kod staje się bardziej ustrukturyzowany (z encjami używanymi jako stare struktury C). * Bardziej nudny kod szkieletu, ponieważ nie ma struktury, która wyodrębnia zestawy wyników z procedury składowanej i umieszcza je w encji. Moje pytania to: * czy ktoś był w podobnej sytuacji i nie zgadzał się z podejściem do procedury sklepowej? co zrobiłeś? * Czy istnieje rzeczywista korzyść z używania procedur składowanych? oprócz głupiego punktu „nikt nie może wystawić tabeli zrzutów”. * Czy istnieje sposób na utworzenie rozbudowanej domeny przy użyciu procedur składowanych? Wiem, że istnieje możliwość użycia AOP do wstrzykiwania DAO/Repozytoriów do jednostek, aby móc poruszać się po grafie obiektów. Nie podoba mi się ta opcja, ponieważ jest bardzo bliska voodoo. * * * ## Podsumowanie Po pierwsze, dziękuję wszystkim za odpowiedzi. Doszedłem do wniosku, że ORM nie umożliwiają tworzenia modeli Rich Domain (jak wspomnieli niektórzy), ale upraszczają ilość (często powtarzalnej) pracy. Poniżej znajduje się bardziej szczegółowe wyjaśnienie wniosku, ale nie opiera się na żadnych twardych danych. Większość aplikacji żąda i wysyła informacje do innych systemów. W tym celu tworzymy abstrakcję w terminach modelowych (np. zdarzenie biznesowe), a model domeny wysyła lub odbiera zdarzenie. Zdarzenie zwykle wymaga niewielkiego podzbioru informacji z modelu, ale nie całego modelu. Na przykład w sklepie internetowym bramka płatności żąda pewnych informacji o użytkowniku i sumy, aby obciążyć użytkownika, ale nie wymaga historii zakupów, dostępnych produktów ani całej bazy klientów. Tak więc wydarzenie ma mały i konkretny zestaw danych. Jeśli przyjmiemy bazę danych aplikacji jako system zewnętrzny, to musimy stworzyć abstrakcję, która pozwoli nam zmapować encje Modelu Domen do bazy danych (jak wspomniał NimChimpsky, używając data-mappera). Oczywistą różnicą jest to, że teraz musimy ręcznie odwzorować każdą jednostkę modelu do bazy danych (stary schemat lub procedury składowane), z dodatkowym problemem, że ponieważ te dwie jednostki nie są zsynchronizowane, jedna jednostka domeny może częściowo mapować do jednostki bazy danych (np. klasa UserCredentials, która zawiera tylko nazwę użytkownika i hasło jest mapowana do tabeli Użytkownicy, która ma inne kolumny) lub jedna jednostka modelu domeny może być mapowana na więcej niż jedną jednostkę bazy danych (na przykład, jeśli istnieje jeden do- jedno mapowanie w tabeli, ale chcemy, aby wszystkie dane znajdowały się tylko w jednej klasie). W aplikacji z kilkoma encjami ilość dodatkowej pracy może być niewielka, jeśli nie ma potrzeby przechodzenia między encjami, ale zwiększa się, gdy istnieje warunkowa potrzeba przemieszczenia encji (i dlatego możemy chcieć zaimplementować jakiś „leniwy Ładowanie'). W miarę jak aplikacja rozrasta się do większej liczby encji, ta praca po prostu wzrasta (i mam wrażenie, że zwiększa się nieliniowo). Moje założenie jest takie, że nie próbujemy wymyślać ORM na nowo. Jedną z korzyści z traktowania bazy danych jako systemu zewnętrznego jest to, że możemy kodować wokół sytuacji, w których chcemy uruchomić 2 różne wersje aplikacji, w których każda aplikacja ma inne mapowanie. Bardziej interesujące staje się to w scenariuszu ciągłych dostaw na produkcję… ale myślę, że jest to również możliwe w mniejszym stopniu z ORM-ami. Pomijam aspekt bezpieczeństwa na tej podstawie, że programista, nawet jeśli nie ma dostępu do bazy danych, może uzyskać większość, jeśli nie wszystkie informacje przechowywane w systemie, po prostu wstrzykując złośliwy kod (np. _Nie mogę uwierzyć, że zapomniałem usunąć linię, która rejestruje dane kart kredytowych klientów, drogi panie!_ ). * * * ### Mała aktualizacja (6/6/2012) Procedury składowane (przynajmniej w Oracle) zapobiegają robieniu czegoś takiego jak ciągłe dostarczanie z zerowym przestojem, ponieważ każda zmiana struktury tabel unieważni procedury i wyzwalacze. Tak więc w czasie, gdy baza danych jest aktualizowana, aplikacja również nie będzie działać. Oracle dostarcza _rozwiązanie_ dla tego o nazwie Edition-Based Redefinition, ale kilku administratorów baz danych, których pytałem o tę funkcję, wspomniało, że była ona słabo zaimplementowana i nie umieściliby jej w produkcyjnej bazie danych.


title: Czy programiści powinni zostać na stażu, który odbyli przed ukończeniem studiów?

text: Kilka razy słyszałem od wielu osób, że „nie powinieneś pozostawać w pracy, do której po raz pierwszy przyjechałeś jako stażysta, zanim uzyskałeś tytuł BS”. Jedyne, czego nie pamiętam, to: dlaczego nie? **Historia:** Jestem w mojej obecnej firmie od 2,5 roku jako stażysta (dostałem się na ostatnim roku Community College), przeniosłem się na czteroletnią uczelnię i kończę studia w ciągu najbliższych 6 miesięcy. Po ukończeniu studiów planuję rozejrzeć się za nową pracą (przynajmniej po to, by zmoczyć sobie nogi podczas rozmowy kwalifikacyjnej), ale zastanawiam się, czy powinnam zdecydowanie rozważyć pracę, w której obecnie pracuję. **Zalety:** znam firmę, bardzo lubię ludzi, z którymi pracuję, i ogólnie znam większość oprogramowania, nad którym pracujemy. Dodatkowo zrealizowałem tam kilka projektów, które wyłącznie wspieram (nieco lepsze bezpieczeństwo pracy). **Wady:** Z naukowego i zawodowego punktu widzenia bardzo interesuję się tworzeniem stron internetowych, czego moja obecna firma nie zajmuje się (koncentruje się głównie na aplikacjach komputerowych Java/C++). Z naukowego punktu widzenia zajęcia, w których się specjalizowałem, miały na celu tworzenie stron internetowych (HTML/SQL/n-tier server side/PHP/JSP/JavaScript/...). Również projekty, które realizowałem, były rozwijane, gdy nie znałem kilku znanych mi obecnie wzorców programistycznych. Gdybym musiał je ponownie zaimplementować, prawdopodobnie podjąłbym znacznie inne decyzje wdrożeniowe, niż pierwotnie podjąłem 2 lata temu. **Wielkie pytanie:** Zawodowo, dlaczego ktoś nie miałby zostać w swojej pierwszej pracy, zwłaszcza że jest to bardzo bliskie gwarantowanej ofercie pracy.


title: Czy kompilatory są używane poza programowaniem?

text: W moim rozumieniu kompilatory są przeznaczone dla programistów kompilujących swój kod do plików wykonywalnych (kodu maszynowego). Kompilatory nie obejmują komputera klienta ani systemu użytkownika końcowego. Zamiast tego programiści używają kompilatora do konwersji swojego kodu na kod maszynowy, który jest następnie przenoszony na inne komputery w celu wykorzystania jako aplikacje. Czy kompilatory mają funkcję poza tym procesem? Jeśli tak, kiedy są używane?


title: Czy do wyboru są gotowe licencje na oprogramowanie komercyjne?

text: Obecnie mam projekt open source na licencji GPLv3. Chciałbym nabyć podwójną licencję, aby móc oferować go do użytku komercyjnego. Czy są jakieś zasoby do wyboru lub stworzenia licencji na oprogramowanie komercyjne?


title: Jak podchodzisz do projektowania baz danych?

text: Zajmuję się głównie tworzeniem stron internetowych i mam kilka osobistych projektów, które chcę rozpocząć. Jedną rzeczą, która mnie denerwuje, jest projektowanie baz danych. Przeszedłem przez normalizację db w szkole i takie tam, ale to było kilka lat temu i nigdy nie miałem doświadczenia z projektowaniem relacyjnych baz danych poza szkołą. Jak więc podchodzisz do bazy danych z perspektywy aplikacji internetowej? Jak zaczynasz i na co zwracasz uwagę? Czym są flagi ostrzegawcze?


title: Źródła danych generowanych maszynowo dla konkurencji w zakresie kodowania Infobright

text: Mam zamiar wziąć udział w Konkursie Kodowania Infobright. Proszą o publiczne dane generowane przez maszyny. Nie chcę tworzyć własnych. Ktoś wie, gdzie są jakieś? Oto, na co patrzę: http://www.infobright.org/contest/2011q1.


title: Problem z przeszukiwaniem grafu wszerz

text: Myślałem, że poprawnie przeszukuję wykres wszerz, ale skrypt oceniania mojego instruktora mówi mi, że moja odpowiedź jest nieprawidłowa. Z instrukcji: > Rozważ przeszukanie wykresu wszerz na poniższym wykresie, gdzie S jest > początkiem, a G jest stanem docelowym. Załóżmy, że remisy są łamane alfabetycznie > (więc plan częściowy S->X->A zostałby rozwinięty przed S->X->B, a S->A->Z> zostałby rozwinięty przed S->B->A ). Pomocne może być wykonanie wyszukiwania > na papierze zdrapki. > > Wprowadź ostateczną ścieżkę zwróconą przez wyszukiwanie wykresu wszerz w polu > poniżej. Twoja odpowiedź powinna być ciągiem znaków z S jako pierwszym znakiem i > G jako ostatnim znakiem. W swoim zgłoszeniu nie umieszczaj strzałek ani spacji. > Na przykład, jeśli uważasz, że ścieżka to S->X->G, wpisz SXG w polu >. ![Breadth-first search on graph](http://i.imgur.com/gr3GuRr.png) Otrzymałem i wprowadziłem odpowiedź **SACBG** , którą skrypt oceniający oznaczył jako niepoprawny. („Twoje dane wejściowe zostały ocenione jako SACBG, co nie jest poprawne”). Oto moje kroki dotyczące wyszukiwania wykresu wszerz na powyższym wykresie przy użyciu algorytmu na http://en.wikipedia.org/wiki/Breadth-first_search #Pseudokod: 1. Umieść w kolejce węzeł główny _S_. **Kolejka = [S], Ścieżka = []** 2. Usuń z kolejki _S_ i sprawdź to. **Kolejka = [], Ścieżka = [S]** 3. Umieść w kolejce dzieci _S_ _A_ i _C_. **Kolejka = [A, C], Ścieżka = [S]** 4. Usuń z kolejki _A_ i sprawdź to. **Kolejka = [C], Ścieżka = [S, A]** 5. _A_ nie ma dzieci. Usuń z kolejki _C_ i sprawdź to. **Kolejka = [], Ścieżka = [S, A, C]** 6. Umieść w kolejce dzieci _C_ _B_ i _G_. **Kolejka = [B, G], Ścieżka = [S, A, C]** 7. Usuń z kolejki _B_ i sprawdź to. **Kolejka = [G], Ścieżka = [S, A, C, B]** 8. Jedyny element potomny _B_ _G_ jest już w kolejce. **Kolejka = [G], Ścieżka = [S, A, C, B]** 9. Usuń z kolejki węzeł celu _G_ i sprawdź go. Zakończ poszukiwania i wróć. **Kolejka = [], Ścieżka = [S, A, C, B, G]** Węzeł jest umieszczany na ścieżce podczas usuwania z kolejki i sprawdzania. Remisy są łamane alfabetycznie, zgodnie z wymaganiami instrukcji. Co ja robię źle?


title: PHP: Jaki jest mój następny krok?

text: Więc na studiach zacząłem uczyć się PHP, głównie zaczynając od książek Larry'ego Ullmana. Potem dostałem pracę w firmie, w której mogłem się nauczyć kilku rzeczy od wyższych osobistości. Od tego czasu pracowałem jako freelancer i nauczyłem się rzeczy, których potrzebowałem. Próbuję wymyślić, gdzie iść dalej. Zdecydowanie chcę pozostać na arenie programowania internetowego i lubię koncentrować się na PHP. Znam również MySQL, ale BARDZO mało JavaScript / Ajax. Czytałem też dużo teorii OOP i mam podstawy, jak to działa, ale nie wydaje mi się to jeszcze naturalne. Gdzie mam się stąd udać? Czy warto uczyć się Javy przez jakiś czas, aby naprawdę opanować OOP? Ja poszłam na wstępną naukę języka Java na studiach, ale to był tylko 1 semestr. A może powinienem skoncentrować się na niektórych rzeczach open source (Wordpress, Drupal, JQuery itp.). A co z rozwiązaniami e-commerce? Nie mam z tym doświadczenia. Jeśli chodzi o moje cele, nie mam zbyt wielu planów na duże, korporacyjne projekty. Najbardziej zainteresowałabym się pracą jako freelancer na małych i średnich stronach internetowych. Ale chciałbym, żeby moje kodowanie było tak solidne i dobrze zorganizowane, jak to tylko możliwe, dziękuję za pomoc!


title: Jak nazywasz programistę specjalizującego się w testowaniu automatycznym?

text: Będąc zatrudnionym jako programista (5-6 lat doświadczenia), zasugerowałem mojemu pracodawcy, że przejmę również formalną odpowiedzialność za naszą pracę z testowaniem automatycznym. Zasadniczo uważam, że praca w sposób podobny do TDD jest interesująca i stymulująca, i chcę rozwijać tę kulturę w firmie, w której pracuję. **Ale jak byś nazwał tego typu stanowisko pracy?** Chciałbym się bardziej specjalizować w testach automatycznych i TDD, a w dłuższej perspektywie zwiększą moje szanse na uzyskanie naprawdę interesujących takich prac. Więc jaki byłby dobry tytuł do tego? Obawiam się, że w końcu zostanę inżynierem ds. testów QA, co powiedziałbym, że jest mylące, ponieważ pracuję głównie jako programista. Sugestie: Inżynier oprogramowania w testowaniu? Testujesz Architekta i Dewelopera? Programista testów automatycznych? Coś lepszego?


title: Obawy związane z projektowaniem odtwarzacza wideo na iPada

text: Ostatnio poproszono mnie o zaprojektowanie odtwarzacza wideo na iPada. Nigdy wcześniej takiego nie robiłem i zastanawiam się, czy mógłbym mieć pewne zastrzeżenia w zakresie jego rozwoju i projektowania. Czy istnieją obszary budowania odtwarzacza wideo, które są szczególnie wadliwe lub kłopotliwe? Jaka część budowy zajmuje najwięcej czasu? Ogólnie rzecz biorąc, staram się tylko wyczuć, co będzie najtrudniejszą częścią i w co się wejdę. Dziękuję


title: Czy aplikacje ze świata rzeczywistego będą kiedykolwiek potrzebować 128-bitowej płaskiej przestrzeni adresowej?

text: To trochę "jeden megabajt powinien wystarczyć każdemu", ale... 64-bitowa płaska przestrzeń adresowa zapewnia do 4,3 miliarda razy więcej miejsca niż 32-bitowa przestrzeń adresowa. To 17 179 869 184 GiB. Oczywiście przejście z 8-bitowych na 16-bitowe było dość szybkie (oglądam rzeczy w stylu nastolatków w latach 80-tych, ignorując wszystkie te komputery mainframe i minis, ponieważ nie mogą uruchomić portu Elite). Przejście z 16 bitów na 32 bity zajęło nieco więcej czasu, a 32 bity w rzeczywistości trwało dość długo. Teraz mamy 64 bity, czy byłoby głupio powiedzieć, że „17 179 869 184 GiB powinno wystarczyć każdemu”? To jest pytanie programistów, ponieważ naprawdę mam na uwadze programistyczny punkt widzenia. Nawet jeśli pewnego dnia komputer ma pozornie nieskończoną ilość pamięci roboczej, nie oznacza to, że aplikacje będą musiały widzieć pozornie nieskończoną płaską przestrzeń adresową. Zasadniczo, czy my, programiści, możemy odetchnąć z ulgą i powiedzieć „no cóż, cokolwiek mogą zrobić liczby całkowite lub zmiennoprzecinkowe, przynajmniej nie muszę się już martwić, że moje wskaźniki będą rosły?”.


title: Rozwiązywanie konfliktów dla synchronizacji dwukierunkowej

text: **Jak zarządzać dwukierunkową synchronizacją między „głównym” serwerem bazy danych a wieloma „wtórnymi” serwerami, w szczególności rozwiązywaniem konfliktów, zakładając, że połączenie nie zawsze jest dostępne?** Na przykład mam aplikację mobilną, która korzysta z CoreData jako "bazy danych" na iOS i chciałbym umożliwić użytkownikom edycję zawartości bez połączenia z Internetem. Jednocześnie informacje te są dostępne na stronie internetowej, z którą będą się łączyć urządzenia. Co mam zrobić, jeśli/kiedy dane na dwóch serwerach DB są w konflikcie? (Odnoszę się do CoreData jako serwera DB, chociaż zdaję sobie sprawę, że jest to coś nieco innego.) Czy istnieją jakieś ogólne strategie radzenia sobie z tego rodzaju problemami? Oto opcje, które przychodzą mi do głowy: 1\. Zawsze używaj danych po stronie klienta jako o wyższym priorytecie 2\. To samo dla 3\ po stronie serwera. Spróbuj rozwiązać konflikty, zaznaczając znacznik czasu edycji każdego pola i biorąc ostatnią edycję Chociaż jestem pewien, że trzecia opcja otworzy miejsce na niszczycielskie uszkodzenie danych. Zdaję sobie sprawę, że twierdzenie CAP dotyczy tego, ale chcę tylko ostatecznej spójności, więc nie wyklucza tego całkowicie, prawda? Powiązane pytanie: wzorce najlepszych praktyk dotyczących dwukierunkowej synchronizacji danych. Druga odpowiedź na to pytanie mówi, że prawdopodobnie nie da się tego zrobić.


title: Czy istnieje właściwy sposób zezwalania na dostęp do listy prywatnej przez odniesienie?

text: Próbuję dostarczyć pobierający przez odwołanie do listy obiektów w klasie. Moja konfiguracja wygląda mniej więcej tak: class c_Container { public: c_Item* Get(int uid); prywatne: c_Item itemList[10]; } class c_Item { public: int uid; } c_Item* c_Container::Get(int uid) { for (int i = 0; i < 10; i++) { if (itemList[i].uid == uid) { return &itemList[i]; } } return NULL; } To jest uproszczony przykład pokazujący użycie, zwykle obiekt c_Item miałby inne metody, które wykonywałyby inne rzeczy. Chcielibyśmy uzyskać obiekt c_Item z itemList przez odniesienie lub adres, abyśmy mogli go bezpośrednio zmodyfikować. Podczas kompilacji otrzymuję błąd lint, taki jak „Ujawnianie elementu członkowskiego o niskim dostępie „itemList”. Jeśli spróbuję zwrócić przez odwołanie zamiast zwracać wskaźnik, otrzymam to samo. Myślę, że rozumiem dlaczego, ale nie mogę wyobrazić sobie lepszego sposobu na uzyskanie obiektu z klasy kontenera przez odwołanie. Mogę naprawić błąd, upubliczniając itemList, ale wydaje się, że jest to niepotrzebny dostęp. Poza tworzeniem metod opakowujących w c_Container dla wszystkich metod c_Item (co wydaje się zbędne), czy istnieje lepszy sposób radzenia sobie z taką sytuacją?


title: Pisanie kaczki w językach statycznie wpisanych

text: Czy uczciwym założeniem jest stwierdzenie, że przeciążony konstruktor klasy może być traktowany jako „kaczka” do pisania na klawiaturze? Powiedzmy, że ClassA ma przeciążony konstruktor, byłoby zrozumiałe, że różne konstruktory istnieją z jakiegoś powodu – obiekt jest używany w sposób, który wskazuje, że wszystkie jego właściwości nie muszą być ustawione, aby obiekt działał prawidłowo. Pytam więc, czy przeładowany konstruktor to kaczka?


title: Jakie są dobre powody, aby zrezygnować z obsługi systemu Windows XP?

text: Ostatnio zespół programistów w mojej firmie zdecydował się na użycie VS2012 (aktualizacja z VS2008), ale okazało się, że VS2012 nie zapewnia dobrego wsparcia dla Windows XP (np. naprawdę trudny do wdrożenia projekt C++ zarządzany przez .Net 3.5). Dlatego chcemy przekonać naszego menedżera, aby porzucił rozwój zgodny z Windows XP i wybrał tylko system Windows 7. Dzięki temu możemy korzystać z niektórych nowych technologii, takich jak .Net 4.5 (korzystamy z bankomatu 3.5). Ale mamy wielu obecnych klientów używających Windows XP i nie będą oni w stanie dokonać aktualizacji do nowej wersji naszego oprogramowania (choć możemy nadal dostarczać poprawki błędów dla XP). Więc jakie są dobre powody, aby użyć VS2012 i porzucić kompatybilność XP? Co obecnie znajduje się na mojej liście: * Możliwość korzystania z .Net 4.5 * Użyj VS2012 (bez kompilacji jakiegoś projektu przy użyciu łańcucha narzędzi VS2008) * Nie ma potrzeby testowania na maszynie XP


title: Czy istnieje koncepcja zmiennej z fazami inicjalizacji: niezainicjowana, inicjująca, niezmienna?

text: Patrzyłem na ten wątek na Stack Overflow i myślałem o programowaniu funkcjonalnym, którego się uczę, i o tym, jak niezmienność jest tam tak kluczowa, i przyszło mi do głowy, że być może jakiś język wpadł na pomysł, aby zmienne zaczynały się od „null” , a następnie przejdź do stanu „budowanie”, a po zakończeniu inicjalizacji stanie się tym samym, co inne niezmienne. Czy jest to poprawna koncepcja i/lub czy próbowano lub eksperymentowano z nią na poziomie językowym? Może to wyglądać mniej więcej tak: string s new String(); // puste ciągi zaczynają się mutowalne dla x = 1 do 10 s = s + "z" s.Freeze() // teraz jest niezmienne To tylko myśl.. może nie jest dobra, ale wygląda na hybrydę dwie rzeczy, które wydają się sobie przeciwstawiać.


title: Zarządzanie sesją w dystrybuowalnych aplikacjach internetowych

text: Pracuję nad ogromną aplikacją webową, w której muszę dodać transparentną funkcję przełączania awaryjnego. Rozumiem niezbędne kroki, aby aplikacja internetowa była dystrybuowalna, a najtrudniejszą rzeczą jest: zapewnienie, że obiekty przechowywane w sesji będą serializowane. Chcę wiedzieć, jaki dokładnie typ zmiennych powinienem przechowywać w sesji? np. po prostu dane logowania lub inne rzeczy. Aplikacja internetowa jest w rzeczywistości bramą do wielu innych mniejszych aplikacji, takich jak generowanie raportów biznesowych, ustawianie kalendarza itp. Czy więc będę musiał sprawić, aby te inne aplikacje również były serializowane, czy wystarczy tylko aplikacja do logowania? Jestem nowy w tworzeniu stron internetowych, więc przepraszam, jeśli pytanie jest trywialne.


title: Zdarzenia oparte na push w architekturze zorientowanej na usługi

text: Budując architekturę zorientowaną na usługi (nadmiarem Thrift), doszedłem do punktu, w którym muszę ujawniać zdarzenia i pozwalać słuchaczom. Moją pierwszą myślą było "utworzenie EventService" do obsługi publikowania i subskrybowania wydarzeń. Ta usługa EventService może używać dowolnej implementacji, której chce, aby faktycznie dystrybuować zdarzenia. Mój klient automatycznie przesyła żądania usług okrężnych do dostępnych hostów usług, które są określane za pomocą wykrywania usług opartego na Zookeeperze. Więc prawdopodobnie użyłbym JMS wewnątrz EventService głównie w celu utrwalania wiadomości (w przypadku, gdy host usługi dla EventService przestanie działać, zanim będzie mógł rozesłać wiadomość do wszystkich dostępnych słuchaczy). Kiedy zacząłem się nad tym zastanawiać, zacząłem przyglądać się różnicom między kolejkami a tematami. Tematy niestety nie będą działać dla mnie, ponieważ (przynajmniej na razie) wszyscy słuchacze _muszą_ otrzymać wiadomość (nawet jeśli nie byli w momencie wypchnięcia wydarzenia lub nie dokonali jeszcze subskrypcji, ponieważ nie zakończone uruchomienie (na przykład podczas wdrażania) - wiadomości powinny być w kolejce do czasu, aż usługa będzie dostępna). Jednak nie chcę, aby EventService był odpowiedzialny za obsługę wszystkich zdarzeń. Myślę, że nie powinien mieć kodu, aby reagować na wydarzenia w nim zawarte. Każda z usług powinna zrobić z danym wydarzeniem to, czego potrzebuje. Oznaczałoby to, że każda usługa wymagałaby połączenia JMS, co kwestionuje wartość posiadania EventService w ogóle (ponieważ usługi mogą indywidualnie publikować i subskrybować bezpośrednio JMS). Jednak łączy ona również wszystkie usługi z JMS (gdy wolałbym, aby istniała jedna usługa, która jest odpowiedzialna za określanie _jak_ dystrybuować zdarzenia). Myślałem, że opublikuję zdarzenie w EventService, który pobiera konfigurację słuchaczy z jakiegoś źródła konfiguracji (baza danych, plik płaski, na razie nieistotny). Replikuje komunikat i odpycha każdy z nich z powrotem do kolejki z informacjami specyficznymi dla tego odbiornika (więc jeśli istnieją 3 odbiorniki, 1 zdarzenie stanie się 3 zdarzeniami w JMS). Następnie inny wątek w EventService (który jest replikowany, działający na wielu hotsach) będzie ściągał z kolejki, próbował wykonać wywołanie usługi do „odbiornika” i zwracał wiadomość do kolejki (jeśli usługa nie działa), lub odrzucenie wiadomości (jeśli słuchacz zakończył się pomyślnie). **tl;dr** Jeśli mam EventService, który jest odpowiedzialny za odbieranie zdarzeń i delegowanie wywołań usług do „odbiorników zdarzeń” (które w rzeczywistości są tylko punktami końcowymi w innych usługach), skąd powinien wiedzieć, jak utworzyć wywołanie usługi? Czy powinienem utworzyć ogólny obiekt „Event”, który będzie współużytkowany przez wszystkie usługi? Następnie EventService może po prostu skonstruować ten obiekt i przekazać go do wywołania usługi. Czy może istnieje całkowicie lepsza odpowiedź na ten problem?


title: Czy wykrywalność dla programistów jest problemem podczas korzystania z zasad SOLID?

text: Tworzę linię aplikacji biznesowych, w których wszyscy inni programiści są przyzwyczajeni do tworzenia podstawowych aplikacji CRUD lub koncentrują się wyłącznie na tworzeniu ładnych/funkcjonalnych interfejsów, a ja otrzymuję bardzo dużo. „Dzięki temu, w jaki sposób to robimy, pracownik miałby wszystko, co mógłbyś zrobić z pracownikiem”. I to była prawda. Ta jedna „klasa” miała tysiące linijek kodu i wszystko, co można było zrobić z pracownikiem, tam było. Albo, co gorsza, istniała tabela danych pracowników i każdy programista wymyślił, jak zrobić to, co chciał zrobić w programie obsługi zdarzeń. Wszystkie złe rzeczy w tym podejściu były prawdziwe, ale przynajmniej deweloper korzystający z pracownika mógł, bez przechodzenia do innych dokumentów, dowiedzieć się, jak zapisać pracownika do planu zdrowotnego, dać podwyżkę, zwolnić, zatrudnić, przenieść itp. To samo dla Managera i wszystkich innych głównych pomysłów. Lub, jeśli pracownik korzystał z innych potrzebnych tabel danych, mógł po prostu zrobić to, co chciał. Tak, było dużo zduplikowanego kodu. Tak, to był bardzo kruchy kod. Tak, testowanie było o wiele trudniejsze niż to konieczne. Tak, zmiana funkcjonalności wywoływała strach, a Kopiowanie Wklej było naturalne ze względu na podejście. Ale mogli przynajmniej odkryć, co było dostępne, tworząc jedną klasę, lub mogli zrobić to, czego potrzebują, bez konieczności rozumienia różnicy między interfejsami, klasami abstrakcyjnymi, klasami konkretnymi itp. I nie musieli szukać niczego poza metody zwracane przez intellisense lub znać tabele, w których znajdowały się dane. Googlowałem/bingowałem, a nawet yahoo! d, ale nie znalazłem żadnego potwierdzenia tego problemu. Więc może nie ma problemu i po prostu czegoś mi brakuje. Zmęczyłem się, próbując znaleźć rozwiązanie, w którym programiści, którzy nie działają zgodnie z rzeczywistym zachowaniem / projektem, mogą łatwo odkryć, jak coś zrobić bez konieczności odwoływania się do jakichkolwiek zewnętrznych dokumentów lub skanowania nazw klas w różnych komponentach / projekty, aby znaleźć ten, który brzmi tak, jakby działał. Jedyne, co udało mi się wymyślić, to z braku lepszej nazwy „Tabela klasy treści”, która nie robi nic więcej, co zwraca rzeczywiste klasy (a tak naprawdę większość z nich to interfejsy, ale nie znać różnicę, a nawet dbać), że inni programiści mogą użyć do wykonania rzeczywistych pożądanych zadań. Nadal kończą z naprawdę dużymi klasami, ale prawie nie ma w nich żadnego zachowania. Czy istnieje lepszy sposób, który nie wymaga dogłębnej wiedzy o środkowym poziomie, w którym ma miejsce faktyczna implementacja SOLID? Zasadniczo pytam, czy istnieje sposób, aby umożliwić programistom typu CRUD nadal być programistami CRUD w bardzo złożonym systemie?


title: Struktury kompilatora C++, takie jak Virtual Method Table itp

text: Jestem świadomy wirtualnej tabeli C++, która umożliwia dynamiczną wysyłkę do robienia rzeczy w czasie wykonywania (chociaż jeśli mam być szczery, nie jestem do końca pewien pełnej listy rzeczy, które osiąga). Zastanawiam się, jakie są inne "niskopoziomowe" aspekty C++, na które zwykle nie można się natknąć podczas nauki języka C++? Rzeczy takie jak: -Jak działa wielowątkowość i blokowanie obiektów? -Przeciążanie/nadpisywanie funkcji -Ogólne Czy istnieją inne "struktury", podobne do vtable, które pomagają w tego typu rzeczach na niższym poziomie? (i jeśli ktoś może pomóc w tym, co faktycznie robi VTable, byłoby to najbardziej docenione!)


title: Projekt strony wzorcowej (przeładowuje się na nowej stronie)

text: Budowałem witrynę internetową z 2 stronami i 1 stroną wzorcową. Strona wzorcowa działa jako „Menu”. Dwie strony dziedziczą po stronie wzorcowej i zawierają pewną zawartość. Na stronie 1 mam link do strony 2. Po kliknięciu linku ładuje się strona 2 (i strona wzorcowa). Myślę, że całkiem prosto. Ale teraz moje pytanie brzmi: strona wzorcowa oczywiście ładuje się ponownie za każdym razem, gdy przechodzę na nową stronę, a tym samym cała witryna "przeskakuje" na krótką chwilę, aby przełączyć się na następną stronę. Czy istnieją jakieś „najlepsze praktyki” dotyczące utrzymywania strony wzorcowej (menu) na stronie podczas ładowania tylko treści? Nadal chcę podzielić dwie strony na Page1.aspx i Page2.aspx i nie mieć całej mojej zawartości na 1 stronie z panelami pokazującymi zawartość page1 i innym panelem pokazującym zawartość page2 itp. Czy powinienem użyć jakiejś kontroli które zawierają strony w środku, czy to tylko głupie pytanie i nie powinienem martwić się, że cała strona migocze, ponieważ jest to normalne "zachowanie w sieci"? Mam nadzieję, że możesz pomóc :)


title: Co na ten temat mówią nam zaniedbane tematy książki O'Reilly?

text: Czy ktoś wie, jak O'Reilly wybiera tematy do publikacji? Z jakiegoś powodu nie widzę, jak można to oprzeć na popycie. Powodem, pytam, jest to, że nie opublikowali książki Delphi od prawie 12 lat, a Object Pascal jest co najmniej tak ezoteryczny jak Erlang i tak praktyczny jak PHP i tak solidny jak C++. Więc może ktoś wie, jakie uzasadnienie stoi za metodologią publikacyjną O'Reilly lub co ma nam powiedzieć o względnej popularności lub użyteczności danego języka lub techniki programowania? Och, zapomniałem o świni i nogach robota


title: Kompresuj zakres liczb do bloków używanych lub nieużywanych

text: Biorąc pod uwagę zakres liczbowy i listę używanych liczb, które mieszczą się w tym zakresie, muszę skompresować zakres do bloków używanych i nieużywanych liczb. Na przykład: zakres: od 0 do 10 używany: 3,4,5,9 Potrzebuję wyjścia takiego jak 0-2: wolny 3-5: używany 6-8: wolny 9: używany 10: wolny Nie wiem od czego zacząć , więc wszelkie wskazówki są mile widziane.


title: Jak zorganizować powtarzalny kod?

text: Mój zespół tworzy wiele jednorazowych formularzy internetowych. Większość z tych formularzy po prostu wysyła e-mail, a kilka robi prosty zapis do bazy danych. Obecnie każdy formularz znajduje się w osobnym rozwiązaniu w programie Visual Studio Team Foundation Server. Oznacza to, że mamy blisko 100 różnych projektów formularzy, co utrudnia zachowanie spójności. Każdy formularz jest wyjątkowy, ponieważ pola są różne, ale wszystkie robią prawie to samo. Chcę je jakoś skondensować i naprawdę przyda mi się kilka wskazówek. * Czy powinienem spróbować utworzyć jeden plik rozwiązania zawierający wszystkie nasze projekty formularzy? Nie ma dużo kodu hydraulicznego, chociaż mógłbym stworzyć kilka klas pomocniczych, które pomogą w formatowaniu e-maili i tym podobnych. Bardzo pomocna byłaby możliwość udostępniania CSS, JavaScript, kontrolek i obrazów w różnych projektach. * Biorąc pod uwagę, że jesteśmy sklepem Microsoft, czy w tym konkretnym scenariuszu istnieją jakieś wymierne korzyści z zastosowania czegoś takiego jak MVC przez formularze sieci Web? Jestem przekonany do koncepcji MVC jako całości, ale czy pomogłoby mi to w bardziej efektywnym zebraniu 15-polowego formularza do zbierania danych, jeśli ten formularz to wysłanie e-maila? Formularz, który skłonił mnie do myślenia o tym, miał wbudowaną sporą logikę, aby wyświetlać i ukrywać pola na podstawie odpowiedzi użytkownika i wydaje się, że korzystanie z MVC i jQuery byłoby mniej wydajne.


title: Wzorzec synchronizacji danych aplikacji mobilnej za pomocą HTTP przez sieci 3G

text: Mam aplikację mobilną zbudowaną przy użyciu jquerymobile, PhoneGap i niektórych niestandardowych CSS i JavaScript. Obiekty danych są odbierane w formacie JSON i używane do wyświetlania użytkownikowi różnych formularzy. Na przykład { id: 1, type: dane_osobowe, pytanie_1: "Imię", pytanie_2: "Nazwisko" }, { id: 2, type: szczegóły_pracy, pytanie_1: "Zawód", pytanie_2: "Doświadczenie" } Użytkownik wypełnia te formularze i wysyła dane z powrotem do aplikacji .NET. Wszystko działa świetnie, gdy istnieje dobre połączenie 3G, ale nie zawsze tak jest. Ponieważ każdy formularz jest wysyłany, istnieje niebezpieczeństwo, że nie wszystkie formularze połączą się z powrotem. W naszym przykładzie dane osobowe mogą zostać wysłane jako pierwsze, połączenie zostanie utracone, a dane służbowe zostaną pozostawione na urządzeniu mobilnym lub utracone w sieci, co frustruje moich użytkowników. Jaka jest najlepsza strategia na eleganckie radzenie sobie z awariami sieci i ich odzyskiwanie? Poleganie na kodach odpowiedzi HTTP nie działa. Np. for ( formularz w formularzach ) { $.ajax({ url: 'http://ac.me', data: form, success: function (){ // usuń z localStorage }, error: function (){ // pokaż komunikat o błędzie 'spróbuj ponownie później' } }); } Żądanie może się nie powieść i funkcja błędu nigdy nie zostanie wywołana. Alternatywą, którą widzę, jest wysyłanie wszystkich formularzy w jednym ciągu JSON, ale jestem zaniepokojony wpływem na wydajność przetwarzania przez serwer SQL wielu krótkich żądań lub mniejszej liczby dłuższych żądań.


title: Klasy pochodne i przestrzenie nazw

text: Wyprowadzam klasę do użytku w mojej aplikacji z klasy dostarczonej przez inną grupę. Czy klasa pochodna powinna znajdować się w przestrzeni nazw dla mojej aplikacji, czy w przestrzeni nazw klasy nadrzędnej? Podczas gdy rozszerzam klasę, aby dodać funkcje, których potrzebuję, dodane funkcje nie są specyficzne dla mojej aplikacji. Projekt zawierający klasę nadrzędną jest również rzadko aktualizowany, więc jest szansa, że moje dodatki nigdy nie zostaną odebrane... Może nic z tego nie ma znaczenia.


title: Czy byłoby sensowne dodawanie do dziedziczenia parametrów wywnioskowanego typu?

text: Napiszę to w PHP (skąd ta myśl się wzięła), ale jest to ogólne dla każdego języka zorientowanego obiektowo. Zasadniczo jest to dodatek do klas abstrakcyjnych, który definiuje implementację jego podklas. Oczywiście to nigdy nie mogłoby przejść do interfejsów, ponieważ definiuje sposób implementacji klas, co stanowi bezpośrednią sprzeczność. Oto dwa przykłady: class Boat { } class RowBoat extends Boat { } class MotorBoat extends RowBoat { } class Yacht extends MotorBoat { } class Śrubokręt { } class SoftScrewdriver extends Śrubokręt { } class Phillips Śrubokręt extends Śrubokręt { } abstract class Parent { public child function useScrewdriver(? rozszerza Śrubokręt &$śrubokręt); publiczna funkcja potomna canOperateSimpleBoat(? super Yacht $yacht); } class Child1 extends Parent { public function useScrewdriver(SoftScrewdriver &$screwdriver) { } public function canOperateSimpleBoat(RowBoat &$rowBoat) { } } class Child2 extends Parent { public function useScrewdriver(PhillipsScrewdriver &$screwdriver) { } public function canOper &$motorBoat) { } } Użyłem składni parametrów typu ograniczonego w Javie do reprezentowania sposobu działania metod abstrakcyjnych. Co postrzegasz jako pozytywne i negatywne strony tego elementu języka? **EDYTUJ:** Okazuje się, że jest to właściwie wyłącznie problem PHP, który próbowałem przekształcić w większy pomysł OOP. Kontynuowałem to tutaj: http://stackoverflow.com/questions/21919069/what-version-of-php-allows-type-hints-to-override-typeless-identifiers/


title: Jakie są dobre sposoby na rozwijanie umiejętności przez średniozaawansowanego programistę?

text: Przedmowa: Pracuję głównie w językach Python i Web Dev (HTML, CSS, Javascript i Jquery, PHP) Jestem biegły w kodowaniu, ale chcę być lepszy. W większych, bardziej zaawansowanych projektach moje umiejętności programistyczne załamują się. Im więcej kodu, tym większe kłopoty z dopasowaniem wszystkich elementów do siebie. Dobrze rozumiem składnię i mogę łatwiej wyłapywać i poprawiać błędy. Ale im bardziej jest zaawansowany, tym bardziej się zmagam. Wierzę, że dobrze rozumiem podstawy programowania i tajniki programowania i rozumiem, co się dzieje, ale jeśli chodzi o większe projekty, zwłaszcza te z ciężką matematyką, moje flagi pewności siebie powodowały i zaczynam popełniać błędy. Nie chodzi o to, że nie mogę tego zrobić, po prostu nie jestem do tego przyzwyczajony. Czy ktoś ma jakieś rady dla kogoś, kto zna się na programowaniu, ale chce być lepszy? Jedyne samouczki, jakie naprawdę mogę znaleźć, to podstawowe rzeczy dla początkujących. Zasadniczo mówię, że chcę być pewny siebie, kiedy zajmuję się zaawansowanymi projektami, ale nie mogę, ponieważ mam niewielkie doświadczenie w radzeniu sobie z trudnymi sytuacjami.


title: Framework PHP najbardziej podobny do ASP.NET MVC3?

text: Zrobiłem trochę pracy z CodeIgniterem i dużo z czystym PHP... Miałem ostatnio okazję używać asp.net mvc3 i byłem absolutnie zachwycony moją produktywnością. Pomimo tego, że nie „znałem” frameworka, połączenie rusztowania + intellisense + generowania kodu poprzez menu kontekstowe sprawiło, że poczułem się tak samo produktywny z asp.net, jak z PHP. Oceniałem YII, CakePHP, symfony (dawno temu, przed 2.0) i Kohana... i chociaż YII wydaje się najbardziej obiecujące, żaden nie pasował do mojego doświadczenia z mvc3.


title: Jak nauczyć się nowoczesnego C?

text: Zacząłem programować około 20 lat temu wraz z pierwszym wydaniem książki C for Dummies. To było świetne wprowadzenie do kodu, a teraz jestem profesjonalnym programistą. Jednak obecnie przez większość czasu pracuję z językami wyższego poziomu (np. Ruby, PHP, Java i wiele innych rzeczy internetowych). Chciałbym wrócić do C, ale wiem, że wiele się zmieniło i od tego czasu pojawiły się dwa nowe standardy (C99, C11). Chciałbym dowiedzieć się o nowych funkcjach, ale najbardziej interesuje mnie pisanie przenośnego kodu, dla którego mogę napisać powiązania języka wyższego poziomu w innym języku. Czy są jakieś dobre książki lub strony internetowe, które mówią o: * Jakim standardzie kierować się * Różnicach między standardami * Ostrzeżeniach w standardowych bibliotekach (tak jak rozumiem w dzisiejszych czasach należy szukać przepełnień bufora, gdy mamy do czynienia z ciągami itp.) * Obsługa UTF-8 * Powszechnie używane biblioteki, takie jak STL lub Boost dla C++ I wszystko, czego może mi brakować.


title: Jak duża jest przepaść między tym, czego uczysz się w programach CS, a tym, czego potrzebujesz w projektach z prawdziwego życia?

text: Jestem na ostatnim roku 4-letniego programu nauczania CS i bardzo chciałbym przyczynić się do projektu FOSS. Niestety, czuję, że nie ma sposobu, abym mógł zrobić użyteczne kodowanie, czy to naprawianie błędów, czy rozwijanie funkcji. Projekty C/C++/Java, które podejmujemy w szkole, są trywialne w porównaniu do kodowania poważnych projektów, a kiedy czytam kod źródłowy projektu FOSS, jestem kompletnie zagubiony. Czy zgadzasz się, że istnieje luka między edukacją CS a faktycznym programowaniem projektu z prawdziwego życia? Jak myślisz, jak duża jest ta przepaść i jak ją pokonać?


title: GitShell, jak nie wpisać nazwy użytkownika i hasła?

text: ![tutaj wprowadź opis obrazka](http://i.stack.imgur.com/zYKdJ.png) Otwórz CMD i mam wpisać hasło i nazwę użytkownika? W GitShell otwieranym skrótem nie muszę wpisywać nazwy użytkownika i hasła. Powiązane jest tutaj: Jak mogę przekonwertować polecenia GitShell na plik .bat? Czy to jest przydatne, nie mogę teraz sprawić, by zaczęło działać? http://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on-window-to-save-user-and-password


title: Czy klucz zastępczy powinien być kiedykolwiek ujawniony użytkownikowi?

text: Często w tabeli, która nie ma klucza naturalnego, nadal przydatna jest możliwość posiadania przez użytkowników unikatowego identyfikatora. Jeśli tabela ma zastępczy klucz podstawowy (a w takim przypadku na pewno się tego spodziewasz), czy klucz ten powinien zostać ujawniony użytkownikowi, czy też należy w tym celu użyć innego pola? Jednym z powodów, dla których nie należy ujawniać klucza zastępczego, jest to, że teraz nie można wykonywać operacji, które zachowują relacje między rekordami, ale zmieniają wartości kluczy, takie jak niektóre rodzaje usuwania/ponownego wstawiania, wiele metod kopiowania danych z jednej bazy danych do inny itp. Główną zaletą ujawniania klucza zastępczego jest prostota korzystania z pola, które i tak masz. W jakich okolicznościach lepiej jest udostępniać użytkownikom klucz zastępczy bezpośrednio?


title: Kiedy zrezygnować z proponowanego rozwiązania?

text: Oto *hipotetyczny* problem. W obecnej wersji występuje problem z wydajnością. Trudno jest znaleźć przyczynę tego problemu, ponieważ testy wydajności nie zostały przeprowadzone w około 10+ wydaniach (z od 10 do 100 zmian na wydanie). Moim pomysłem jest zautomatyzowanie procesu uruchamiania testów wydajności w każdym wydaniu. Jednak uruchomienie tej automatyzacji trwało nieco dłużej niż oczekiwano. Moją (ponownie *hipotetyczną*) odpowiedzią na trwającą zbyt długo automatyzację byłoby po prostu ręczne wykonanie testów, a następnie sprawdzenie wyników za pomocą zestawu skryptów, które już napisałem. Ostatecznie taka automatyzacja byłaby bardzo korzystna, ale ukończenie zadania _może_ trwać dłużej niż zwykle. Czy to właściwa odpowiedź na to, co może wydawać się szybko malejącym zwrotem z inwestycji w przypadku proponowanego rozwiązania?


title: Jak szczegółowe jest oszacowanie, które pokazujesz swoim klientom?

text: W przypadku oprogramowania niestandardowego, kiedy podajesz klientowi szacunkową wartość, ile szczegółów zwykle zawierasz? Czy: * dzielisz to na małe zadania, które można wykonać w kilka godzin i podajesz im pełną listę? * dać im jedną dużą liczbę i pracować nad tym? A jeśli tak, czy wynika to z bardziej szczegółowego oszacowania, którego nie musisz ich pokazywać? * Czy dzielisz to na duże „fazy” i dajesz im liczbę godzin na każdą fazę? Nie dotyczy to umów o ustalonej stawce ani niczego, tylko bardziej typu „Sądzimy, że będzie to kosztować X godzin przy Y $ za godzinę”.


title: Gdzie znajdujesz motywację pracując dla kogoś innego?

text: Ta odpowiedź na jedno z moich ostatnich pytań sprawiła, że zacząłem myśleć o czymś, co (głównie podświadomie do niedawna) dręczyło mnie przez całą moją karierę programisty. Zasadniczo: _gdzie znajdujesz motywację do koncentracji i motywacji podczas pracy dla kogoś innego?_ Teraz wyjaśnij, w jaki sposób jest to specyficzne dla programowania (lub przynajmniej do specyficznego rodzaju pracy z wiedzą, jaką jest programowanie): wiele rodzajów prace są stosunkowo proste pod względem celów. Albo kończysz zadanie, albo nie. W programowaniu naprawdę ma znaczenie, jak bardzo jesteś włączony i zmotywowany - ale jednocześnie - przyzwoity programista może dość łatwo wybiegać i zrobić wystarczająco dużo, aby nie zostać zwolnionym, a jednocześnie być stosunkowo nieproduktywnym, nieszczęśliwym, pozbawionym motywacji i nigdzie w pobliżu potencjał. To jest w zasadzie to, co przydarza mi się w każdej regularnej pracy programistycznej (miałem do tej pory cztery, 10 lat mojej kariery): zaczynam świeżo, podekscytowany pracą w nowej firmie, brudzeniem sobie rąk z nową bazą kodu , nauka nowej domeny itp. Pierwsze miesiące są świetne. Wszyscy podekscytowani i zmotywowani, wszystko po prostu klika. Potem, gdy rzeczy stają się bardziej rutynowe i znajome, moja podświadomość powoli zaczyna buntować się przeciwko „niewolnictwu” – jak wyjaśniono w odpowiedzi na moje drugie pytanie. Wydaje mi się, że dochodzę do wniosku (na głębokim, głównie podświadomym poziomie), że przejmowanie na własność głównych/złożonych zadań jest po prostu zbyt dużym wysiłkiem i stresem. Powoli degeneruje się do punktu, w którym pracuję (mniej więcej) na tyle ciężko, aby nie zostać zwolnionym (a nigdy nie zostałem zwolniony). Podstawowy proces myślowy (podświadomy - ale teraz go zidentyfikowałem) jest mniej więcej taki: pełne włączenie się i przejęcie odpowiedzialności za duże projekty wymaga o rząd wielkości więcej wysiłku i stresu niż płynięcie na tyle mocno, by nie zostać zwolnionym. Z drugiej strony nagrody za bycie jedną z firmowych gwiazd rocka są w większości przypadków obraźliwe. Może nieco większa premia świąteczna niż przeciętny pracownik firmy. Może opcje na akcje warte kilkumiesięcznej pensji po wielu, wielu latach ekstremalnego wysiłku, dobrowolnych nadgodzin i stresu. Zasadniczo wysiłek i stres są skrajnie niewspółmierne do rozsądnie oczekiwanych możliwych nagród i uznania. Z łatwością przechodzę więc w ten rodzaj niespełnionego, wybiegającego trybu „salary slave” (pomyśl Peter Gibbons z „Office Space”). Jak powiedziałem w odpowiedzi na moje drugie pytanie, odpowiedź jest w startupach (lub ogólnie w robieniu własnych rzeczy), ale jestem ciekawa, czy jest jakiś sekret utrzymywania dobrej motywacji nawet w standardowej pracy u kogoś , nawet na rzeczach, którymi nie masz głębokiego osobistego zainteresowania. Przez lata pracowałem z wielkimi gwiazdami rocka i guru - którzy potrafili być bardzo skoncentrowani i zmotywowani nawet w pracach, których, jak mówili, nienawidzili. W jakiś sposób wypełnili lukę i wydawało się, że znajdują motywację do tego, co wydawało mi się bez nagrody. I nie może to być cel osobisty (mówili całkiem wprost, że praca to „praca w nudnym systemie biznesowym” i odpadliby, gdyby wygrali na loterii) i nie mogą to być obowiązki rodzinne ani czysto pieniądze ( wielu było samotnych i żyło z wartościami niezbyt materialistycznymi).


title: Jak powinienem przetestować metodę modyfikacji bitmapy?

text: Moja klasa „Sprite” ma metodę: „private void updateWithBitmap(Bitmap b, int x, int y)” To „położy na wierzchu” przekazaną bitmapę, lewy górny róg przekazanej bitmapy będzie w punkcie x ,y pozycja nadrzędnej bitmapy. Teraz chcę napisać testy jednostkowe, aby sprawdzić, czy ta metoda działa poprawnie. Na przykład musimy sprawdzić, czy wyjątek jest zgłaszany, gdy przekazana bitmapa jest większa lub znajduje się poza granicami nadrzędnej mapy bitowej. [TestMethod] [ExpectedException(typeof(System.ArgumentOutOfRangeException))] public void TestUpdateWithBitMap_SmallerParent_ThrowsOutOfRangeException() { Sprite parent = new Sprite(new Bitmap(10,10)); Bitmapa potomna = new Bitmap(20, 20); parent.updateWithBitmap(dziecko,0,0) } [TestMethod] [ExpectedException(typeof(System.ArgumentOutOfRangeException))] public void TestUpdateWithBitMap_PassedBitMapOutOfBounds_ThrowsOutOfRangeException() { Sprite parent = new Sprite(nowa Bitmapa(10,10)); Bitmapa potomna = new Bitmap(3, 3); parent.updateWithBitmap(child, 9,9) } Jak dotąd dobre. Ale chcemy również sprawdzić, czy metoda rzeczywiście aktualizuje się poprawnie. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/51ZA6.png) Na przykład, jeśli skrajny lewy obraz jest naszą nadrzędną bitmapą, a środkowy jest bitmapą potomną, i wywołujemy naszą metodę z: `parent.updateWithBitmap(child, 3,3);` otrzymujemy w rezultacie bitmapę po prawej stronie. Pytanie brzmi: czy właściwe jest przechowywanie tych bitmap jako zasobów, a następnie sprawdzanie, czy wyniki są równe? np. [TestMethod] public void TestUpdateWithBitMap_UpdatesCorrectly() { Sprite parent = new Sprite(Properties.Resources.TestBitmapParent1); Bitmapa potomna = Properties.Resources.TestBitmapChild1; parent.updateWithBitmap(child, 3,3) #coś takiego jak Assert.Equal(parent.getBitmap(), Properties.Resources.TestBitmapResult1); }


title: Co robi tutaj słowo kluczowe static?

text: **Czy ktoś może wyjaśnić ten fragment kodu?** **CODE1** int &fun() { static int x = 10; int &b =x; powrót b; } int main() { fun() = 3; cout << zabawa(); zwróć 0; } **Wyjście: 3** **KOD 2** int &fun() { int x = 10; int &b =x; powrót x; } int main() { fun() = 3; cout << zabawa(); zwróć 0; } **Wyjście: 10**


title: Czy to normalne, że programista pracuje jednocześnie nad wieloma projektami?

text: W obecnej pracy mam 2 projekty do pracy. Pierwszy to bardzo duży system, drugi mniejszy, ale też duży (pierwszy projekt jest rozwijany od 12 lat, drugi od 4 lat). Na początku pracowałem tylko nad pierwszym projektem i starałem się do niego przyzwyczaić. Potem zostałem przeniesiony do drugiego projektu i tam próbowałem, więc moja wiedza o pierwszym projekcie stała się niejasna. Teraz muszę pracować nad obydwoma projektami jednocześnie. Jest to dla mnie bardzo trudne, ponieważ pomimo tego, że obaj używają javy, używają różnych frameworków, a ilość kodu i logiki biznesowej do zrozumienia jest bardzo duża, więc naprawdę nie mogę trzymać w głowie obu tych projektów. Czy to normalne i powinienem się do tego przyzwyczaić, chociaż moja wiedza stała się bardzo słaba, co by się nie stało, gdybym pracował tylko nad jednym projektem? A może powinienem zgłosić wątpliwości, a może zmienić pracodawcę?


title: Hosting kodu bez wiedzy?

text: W świetle ostatnich doniesień o powszechnym monitorowaniu przez rząd danych przechowywanych przez dostawców usług internetowych, usługi z zakresu wiedzy zerowej są teraz modne. Usługa z wiedzą zerową to taka, w której wszystkie dane są przechowywane w postaci zaszyfrowanej za pomocą klucza, który nie jest przechowywany na serwerze. Szyfrowanie i odszyfrowywanie odbywa się całkowicie po stronie klienta, a serwer nigdy nie widzi ani danych w postaci zwykłego tekstu, ani klucza. W rezultacie usługodawca nie jest w stanie odszyfrować i przekazać danych osobie trzeciej, nawet gdyby chciał. Na przykład: SpiderOak może być postrzegany jako wersja Dropboxa o zerowej wiedzy. Jako programiści w dużym stopniu polegamy na niektórych z naszych najbardziej wrażliwych danych — naszym kodzie — i ufamy ich określonej klasie dostawców usług online: dostawcom hostingu kodu (takim jak Bitbucket, Assembla itd.). Mówię tu oczywiście o repozytoriach prywatnych – koncepcja wiedzy zerowej nie ma sensu w przypadku repozytoriów publicznych. Moje pytania to: 1. Czy istnieją bariery technologiczne w tworzeniu usługi hostingu kodu z zerową wiedzą? Na przykład, czy istnieje coś w protokołach sieciowych używanych przez popularne systemy kontroli wersji, takie jak SVN, Mercurial lub Git, co utrudnia (lub uniemożliwia) wdrożenie schematu, w którym dane przesyłane między klientem a serwerem są szyfrowane za pomocą klucz, którego serwer nie zna? 2. Czy istnieją obecnie jakieś usługi hostingu kodu z zerową wiedzą?


title: Jak ocenić przejście na Team Foundation Server

text: Mój zespół programistów używa obecnie następującego oprogramowania w naszym przepływie pracy: * JIRA * Bamboo (ciągła integracja Atlassian) * Greenhopper (zwinne zarządzanie projektami Atlassian) * Confluence * Git, hostowany na BitBucket * Visual Studio 2012 Jak widać, jesteśmy dość mocno zainwestowani w ekosystemie Atlassian. Rozważamy przejście na TFS, abyśmy mogli uzyskać subtelności zaawansowanych integracji Visual Studio, takich jak przeglądy kodu i, co ważniejsze, Microsoft Test Manager. Moje poprzednie doświadczenia z TFS dotyczyły roku 2005 lub 2008 (nie pamiętam) i mam złe wspomnienia, chociaż nie tak złe, jak mój czas z ClearCase. Na jakie kryteria powinniśmy się zwrócić, aby właściwie ocenić nasz ruch na TFS?


title: Aktualizacja aplikacji do obsługi iOS5, 6 i 7

text: Szukamy aplikacji, która wymaga aktualizacji. Obecnie działa na iOS4, 5 i 6\. Aktualizacja zostanie przeniesiona do iOS5, 6 i 7\. Będzie to również obejmować pewne zmiany w interfejsie użytkownika i nowe funkcje. Czytałem rzeczy na iOS7 i patrzę na takie rzeczy, jak automatyczny układ. To, co staramy się znaleźć, to najlepszy sposób na poradzenie sobie z różnicami między różnymi wersjami iOS. Auto-układ wydaje się dobrym pomysłem, ale nie jest dostępny w iOS 5. Istnieją również zmiany API, które należy rozważyć między wszystkimi 3 wersjami i innymi nowymi funkcjami iOS7. A więc pytania: 1. Jak poradziłbyś sobie z automatycznym układem, skoro iOS5 go nie ma? 2. Czy są jakieś znaczące różnice między pakietami SDK, które Twoim zdaniem mogą powodować problemy? 3. Czy byłoby lepiej z oddzielnymi bazami kodu?


title: Jaka jest historia kompilatora C?

text: Kiedy mówimy, że „Dennis Ritchie opracował język C”, czy mamy na myśli, że stworzył kompilator (używając „już” opracowanego innego języka), który może skompilować kod źródłowy napisany w języku C? jeśli tak, w jakim języku napisał pierwszy kompilator C? Rozumiem, że kompilator to program i możemy stworzyć kolejny kompilator dla języka C przy użyciu obecnie dostępnego kompilatora C. Czy to jest poprawne?