title: Organizacja projektu C++ w celu skrócenia czasu kompilacji testów jednostkowych

text: Chcę zorganizować testy dla projektu na tyle dużego, że czas budowy ma znaczenie (szczególnie dla serwera CI). Powiedzmy, że mam ten kod, który chciałbym przetestować: //foo/greet.cpp #include <stdio.h> #include "foo/greet.h" int pozdrowienia() { return printf("Witaj świecie!\n ”); } A mam ten program główny czyli boilerplate, którego nie będę testował. //main.cpp #include "foo/greet.h" int main() { return pozdrawiam(); } Użyję tego kodu do wygenerowania programu do testów jednostkowych //testgreet.cpp #include <some_test_framework.h> SOME_TEST_FRAMEWORK("Testowanie powitania") SOME_TEST_FRAMEWORK_ASSERT(greet() > 0) SOME_TEST_FRAMEWORK_END() Myślałem o następujących * Pomijanie kompilacji `greet.cpp` dla celu testów jednostkowych i linkowania z obiektami * Utwórz osobną strukturę projektu dla testów, ale udostępnij folder wyjściowy * Umieść wszystko w jednym miejscu, może z nowym folderem o nazwie test * Wykonaj `greet. ` i połączyć z nią cele główne i cele testów jednostkowych Jak mogę zorganizować swój projekt tak, abym mógł zbudować `greet.cpp` tylko raz, jednocześnie zmniejszając zamieszanie spowodowane posiadaniem dwóch celów, które współdzielą dużo kodu? To pytanie jest powiązane, ale nie duplikowane (IMHO). (+Próbowałem uczynić moje pytanie ogólnym, wielokrotnego użytku i dowodem na przyszłość. Jeśli uważasz, że jest to zbyt oparte na opinii, zagłosuj za zamknięciem, a ja nie będę publikować ponownie)


title: Jakie są najbardziej wydajne procesy przeglądu kodu?

text: Szukam wydajnego procesu przeglądu kodu, w którym nic nie może zostać wypchnięte bez sprawdzenia przez innego dewelopera. Na przykład (używamy Mercurial): * wypchnij do innej gałęzi, a recenzent połączy się z 'head' * wypchnij bezpośrednio do recenzenta Głównym problemem jest to, że każdy może wypchnąć do gałęzi domyślnej, więc nie wymusza to przegląd kodu.


title: Jakieś podstawowe różnice między Uniksem a Linuksem w projektowaniu i innych aspektach?

text: Ciągle czytam to zdanie: > Linux jest systemem podobnym do Uniksa, ale nie jest Uniksem. Nie wiem, jaka jest prawdziwa różnica między nimi. Wiem, że Linux ma wiele pomysłów od Uniksa, a licencje tych dwóch są różne. Poza tym, ponieważ nie jestem ekspertem w żadnej z nich, chcę wiedzieć, czy są między nimi podstawowe różnice w konstrukcji, czy w innych istotnych aspektach.


title: Jak nauczyć się programowania mikrokontrolerów?

text: Jestem zainteresowany nauką programowania mikrokontrolerów. Wydaje się to dość interesujące, ale nie wiem od czego zacząć. Szczególnie interesuje mnie: * Jakiej platformy warto się uczyć? * Czy są jakieś tanie systemy, które ułatwiają pisanie dla nich własnych programów? * Wskazówki do dobrych książek / tutoriali


title: Jakie są dobre książki do nauki C++11?

text: Dopiero zaczynam się interesować C++11 (późno wiem). Czy ktoś ma jakieś zalecenia dotyczące dostępnych książek, które szczegółowo omawiają nowe funkcje?


title: Python - „jeśli foo in dict” vs „spróbuj: dict[foo]”

text: Przypuszczam, że jest to mniej pytanie o naturę pisania na maszynie z kaczką, a bardziej o pozostanie w pythonic. Po pierwsze - mając do czynienia z dyktatami, w szczególności gdy struktura dyktatu jest dość przewidywalna, a dany klucz nie jest _zwykle_ obecny, ale czasami jest, najpierw myślę o dwóch podejściach: jeśli myKey in dict: zrób_coś_pracuj(dict[myKey] ) jeszcze: zalicz I oczywiście Ye Olde podejście 'przebaczenie kontra przyzwolenie'. try: do_some_work(dict[myKey]) z wyjątkiem KeyError: pass Jako czeladnik Pythona, czuję, że ten drugi preferuje bardzo, co wydaje mi się dziwne, ponieważ w dokumentach Pythona preferowane są `try/excepts` kiedy jest faktyczny błąd, w przeciwieństwie do, hm… _braku sukcesu?_ Jeśli okazjonalny dyktator nie ma klucza w myDict, a wiadomo, że nie zawsze będzie miał ten klucz, jest próbą/oprócz kontekstu zwodniczy? To nie jest błąd programistyczny, to tylko fakt danych - ten dykt po prostu nie miał tego konkretnego klucza. Wydaje się to szczególnie ważne, gdy spojrzysz na składnię try/except/else, która wydaje się być naprawdę przydatna, jeśli chodzi o upewnienie się, że try nie wyłapuje zbyt wielu błędów. Możesz zrobić coś takiego: spróbuj: foo += bar z wyjątkiem TypeError: pass else: return some_more_work(foo) Czy nie doprowadzi to do przełknięcia wszelkiego rodzaju dziwnych błędów, które prawdopodobnie są wynikiem złego kodu? Powyższy kod może po prostu uniemożliwiać ci zobaczenie, że próbujesz dodać `2 + {}` i możesz nigdy nie zorientować się, że jakaś część twojego kodu poszła strasznie nie tak. Nie sugeruję, abyśmy sprawdzali wszystkie typy, dlatego jest to Python, a nie JavaScript - ale znowu w kontekście try/except wygląda na to, że ma złapać program robiący coś, czego nie powinien robić, zamiast tego umożliwienie jej kontynuowania. Zdaję sobie sprawę, że powyższy przykład jest czymś w rodzaju kłótni słomianej i faktycznie jest celowo zły. Ale biorąc pod uwagę pytoniczne credo „lepiej prosić o wybaczenie niż o pozwolenie”, nie mogę się powstrzymać od tego, że nasuwa się pytanie, gdzie właściwie znajduje się linia na piasku między prawidłowym zastosowaniem if/else vs try/except is, w szczególności kiedy wiesz, czego się spodziewać po danych, z którymi pracujesz. Nie mówię tutaj nawet o problemach z prędkością ani o najlepszych praktykach, po prostu jestem trochę zdezorientowany postrzeganym diagramem Venna przypadków, w których wygląda na to, że może pójść w obie strony, ale ludzie błądzą po stronie próby / z wyjątkiem ponieważ „ktoś gdzieś powiedział, że to Pythonic”. Czy wyciągnęłam błędne wnioski na temat zastosowania tej składni?


title: Moduł a pakiet?

text: Za każdym razem, gdy robię `from 'x' import 'y'', zastanawiałem się, który z nich jest uważany za 'moduł', a który za 'pakiet' i dlaczego nie jest na odwrót?


title: Dlaczego zaleca się zamknięcie wszystkich programów przed zainstalowaniem nowego programu?

text: Jakie problemy wynikają z instalacji nowego programu, gdy inne programy są uruchomione? Wyobrażam sobie, że GAC rozwiązał wiele starych problemów związanych z blokowaniem współdzielonej biblioteki dll. Więc jakie problemy wciąż się pojawiają? Na pewno widzę problemy z aktualizacją jednego programu, ale poza tym trudno jest zrozumieć, dlaczego aplikacje będą deptać sobie nawzajem.


title: Na czym polega nauka Eclipse-RCP, od podstaw Java?

text: Nie zacząłem jeszcze pracować nad nowym projektem, w którym wszystko jest robione z "Eclipse RCP", o którym nie słyszałem aż do zeszłego tygodnia. Będziemy używać dużo Javy i SWT dla GUI. Chciałbym jak najszybciej zapoznać się z tą nową technologią. (Albo przez kilka następnych miesięcy będę „chłopcem od kawy” firmy…) Biorąc pod uwagę punkt wyjścia zerowe doświadczenie w Javie, zerowe korzystanie z Eclipse i zerowego korzystania z SWT, zerowe wykształcenie informatyczne (jestem zainteresowany fizyki, inżynierii i sztuki) i tylko skromne doświadczenie w pracy na poziomie aplikacji w jakimkolwiek sensie, ale OTOH, lata programowania niskopoziomowego i robienia różnych schludnych, nowatorskich rzeczy w dziedzinach, które w ogóle nie pokrywają się z Javą lub Eclipse światy, jak duży kawałek krzywej uczenia się muszę się wspinać? Żeby było jasne, podczas gdy muszę lepiej opanować Javę i nauczyć się podstaw Eclipse i nie tylko użytkownika końcowego, nie muszę uczyć się podstaw programowania, OO, czym jest „kompilator” itp. stary profesjonalista w Linuksie, C++, GUI sterowane zdarzeniami i wiele więcej. Jak oszacować, ile dni będę potrzebować, aby zdobyć kompetencje w pracy z aplikacjami opartymi na Eclipse-RCP? (Nie trzeba stawać się mistrzem guru. Oczywiście to przychodzi z czasem.) Jak po drodze ocenić mój poziom umiejętności? Jak wymyślić listę kontrolną tematów, które powinienem omówić? O czym mam powiedzieć szefowi, kiedy będę gotowy do pracy nad tym? Jakie książki, samouczki itp. są dobre w tej wspinaczce po krzywej uczenia się? (Brak budżetu na zajęcia, warsztaty lub książki droższe niż to, co mogę dostać w Barnes & Noble.) (Właściwie mam skromne doświadczenie w Javie, ale załóżmy, że wynosi zero, aby pytania i odpowiedzi były bardziej zabawne i przydatne dla inni.)


title: Obsługa żądań REST w pełni?

text: W nowoczesnych strukturach skryptowych istnieje nacisk na używanie routingu żądań RESTful zamiast uniwersalnego routingu ścieżek URL. respond('GET', '/posts', wywołanie zwrotne); respond('POST', '/post/create', callback); respond('PUT', '/post/[i:id]', wywołanie zwrotne); respond('USUŃ', '/post/[i:id]', wywołanie zwrotne); vs respond('/post', wywołanie zwrotne); odpowiedz('/post/create', wywołanie zwrotne); odpowiedz('/post/[i:id]', wywołanie zwrotne); odpowiedz('/post/[i:id]', wywołanie zwrotne); Muszę przyznać, że nadal używam starej i przestarzałej metody, w której zasób jest dostępny pod podanym adresem URL, niezależnie od typu żądania. **Czy brakuje mi czegoś w starym formacie?**


title: Porady dotyczące przestrzeni nazw modułu Ruby

text: w moim obecnym projekcie: moduł Stats class Site ... end class Product def initialize(product_id) @product_id = product_id end end class Profil ... end end teraz w mojej klasie `Product` mają metody do uzyskania/ustawienia widoków produktu `(dzień, tydzień, miesiąc) i metody uzyskiwania/ustawiania sprzedaży produktu (dzień, tydzień, miesiące) lepiej sprawdzają się w przestrzeni nazw, takiej jak `Stats::Product::Views` i `Stats::Product::Sales` lub po prostu prefiksuj metody, takie jak `sale_add` i `view_add`? przykładowe wywołania z przestrzenią nazw: Stats::Product::Sales.add(product_id) # licznik przyrostu sprzedaży Stats::Product::Sales.today(product_id) # uzyskaj n. Dzisiejsze statystyki sprzedaży::Produkt::Sales.week(product_id) # zdobądź n. Statystyka sprzedaży tygodniowej::Product::Views.add(product_id) #increment licznik wyświetleń strony produktu Stats::Product::Views.today(product_id) #get n. dzisiaj odsłony strony produktu Stats::Product::Views.week(product_id) #get n. Tygodniowy przykład wyświetleń strony produktu z aktualną strukturą: Stats::Product(product_id).sale_add # licznik przyrostu sprzedaży Stats::Product(product_id).sales_today # get n. dzisiaj statystyki sprzedaży::Produkt(product_id).sales_week # zdobądź n. Statystyka sprzedaży tygodniowej::Product(product_id).view_add #increment licznik odsłon strony produktu Stats::Product(product_id).views_today #get n. dzisiaj odsłony strony produktu Stats::Product(product_id).views_week #get n. Tydzień odsłon strony produktu A teraz, co uważasz za bardziej eleganckie rozwiązanie? i dlaczego?


title: Ręczna alokacja i czystość pamięci

text: Język taki jak Haskell ma pojęcie _czystości_. W czystej funkcji nie mogę globalnie mutować żadnego stanu. W każdym razie Haskell w pełni abstrahuje od zarządzania pamięcią, więc alokacja pamięci nie stanowi tutaj problemu. Ale jeśli języki mogą obsługiwać pamięć bezpośrednio, tak jak C++, jest to dla mnie bardzo niejednoznaczne. W tych językach alokacja pamięci powoduje widoczną mutację. Ale jeśli traktuję tworzenie nowego przedmiotu jako działanie nieczyste, tak naprawdę prawie nic nie może być czyste. Tak więc koncepcja czystości staje się prawie bezużyteczna. Jak mam obchodzić się z czystością w językach, w których pamięć jest widocznym obiektem globalnym?


title: Dodawanie metod dodatkowo do interfejsu

text: Załóżmy, że mam „ThingImpl” i „IThing”. Pierwsza jest implementacją drugiej, która jest interfejsem. To ma jedną metodę: `do(arg1)` Czy dodanie metody oprócz do() jest uważane za włamanie/złą praktykę? Przykład: `do(arg1, arg2)`


title: Stwierdzenie if bez nawiasów jest mile widziane, ale czy nadal jest to zły styl, jeśli twoje IDE jest do tego przystosowane?

text: Ten typ instrukcji warunkowej jest generalnie niemile widziany w przypadku instrukcji if(condition); ponieważ jeśli dodasz inną instrukcję, taką jak ta if(condition); oświadczenie; sprawia wrażenie, że druga „instrukcja” jest częścią bloku „if”, gdy tak nie jest. To powiedziawszy, moje IDE wykonuje automatyczne wcięcia, co moim zdaniem sprawia, że ten problem jest dyskusyjny. Co więcej, gdy chcę dodać kolejną instrukcję, automatycznie wykonuje uzupełnianie nawiasów — co sprawia, że problem z koniecznością ręcznego dodawania nawiasów, gdy chcesz dodać kolejną instrukcję, jest dyskusyjny. Czy jest jakiś powód, dla którego nadal byłby to zły styl?


title: Jeśli tworzę hostowaną stronę płatności, jak powinna wyglądać infrastruktura?

text: Jeśli nie przechowuję informacji o karcie kredytowej, czy muszę się martwić o zgodność z PCI? Będę korzystał z procesora płatności w banku w moim kraju. Dosłownie po prostu pobranie informacji o karcie kredytowej i przekazanie ich do bramki i procesora. Chciałbym uzyskać wyobrażenie o różnych technologiach, które mogę rozważyć z punktu widzenia architektury oprogramowania. Jakie są najlepsze praktyki w zakresie akceptowania kart kredytowych i zmniejszania ryzyka oszustwa po mojej stronie? Będę tworzyć aplikację w Railsach.


title: Co zrobić, jeśli nienawidzę plików nagłówkowych C++?

text: Zawsze byłem zdezorientowany plikami nagłówkowymi. Są takie dziwne: dołączasz plik .h, który nie zawiera .cpp, ale .cpp też są w jakiś sposób skompilowane. Niedawno dołączyłem do projektu zespołowego i oczywiście używane są zarówno .h, jak i .cpp. Rozumiem, że jest to bardzo ważne, ale nie mogę żyć z kopiowaniem i wklejaniem każdej deklaracji funkcji w każdej z wielu klas, które mamy. Jak efektywnie obsługiwać konwencję dwóch plików? Czy są jakieś narzędzia, które mogą w tym pomóc lub automatycznie zmienić jeden plik, który wygląda jak przykład poniżej, na .hi .cpp? (specyficznie dla MS VC++ 2010) class A { ... Wpisz f(Typ a,Typ b) { //Implementacja tutaj, nie w innym pliku! } ... }; Wpisz f(Typ a) { //wdrożenie tutaj } ...


title: Czy uwierzytelnianie użytkownika api za pomocą protokołu Oauth jest możliwe zarówno dla usług e-mail/pw, jak i usług innych firm?

text: Mam aplikację tylko z interfejsem API (rails-api) i chcę autoryzować użytkownika zarówno za pośrednictwem poczty e-mail/hasła, jak i usług innych firm, takich jak facebook lub twitter itp., więc wiem, że w pewnym momencie będę musiał użyć Oauth. Moje pytanie brzmi, czy mogę używać wyłącznie Oauth, czy też muszę zaimplementować własne uwierzytelnianie (lub coś takiego jak Devise), aby wykonać ręczne uwierzytelnianie e-mailem. Nie rozumiem Oauth wystarczająco dobrze, aby wiedzieć, czy mogę przeprowadzić ręczne uwierzytelnianie za pomocą mojego pojedynczego punktu końcowego, wygląda na to, że działa tylko z 2 punktami końcowymi (mój serwer i usługa innej firmy). Zdecydowanie wolałbym nie używać Devise nie jest zbudowany dla API i dodaje dużo narzutu IMO.


title: Jak wdrożyć aplikację C# do użycia w oddziale / zdalnym biurze (s)

text: Niedawno rozpoczęli nową pracę. Jednym z moich kluczowych wyzwań jest aplikacja C# WinForms (nazwijmy ją AppX), która powoduje dużo nieplanowanej pracy. Głównym tego powodem jest konieczność wdrożenia go w kilkuset oddziałach. Obecnie odbywa się to za pośrednictwem aktualizacji GP lub aplikacji na zamówienie. Obie te metody są zawodne i oznacza, że nie możemy skutecznie wdrażać uaktualnień wersji. Trochę informacji o tym, co oprogramowanie musi zrobić i niektóre problemy techniczne / tło: 1. AppX musi generować wyniki w czasie rzeczywistym 2. AppX musi łączyć się z serwerem SQL (ekspresowym lub pełnym wydaniem), który jest fizycznie zlokalizowany w oddziale 3. AppX musi zapewnić, że po uaktualnieniu wersji wszystkie lokalizacje zdalne będą w tej samej wersji 4. AppX nie może zostać wdrożony za pośrednictwem rozwiązania cienkiego klienta, takiego jak usługi Citrix lub Remote Desktop 5. Sieć centrali może widzieć całą sieć oddziałów i połączyć się z ich serwerami SQL Moje początkowe myśli dotyczyły wdrożenia ClickOnce — jednak wydaje się, że pojawiają się pewne sugestie, że mogą wystąpić pewne problemy z konfliktami platformy .Net z innym oprogramowaniem Wdróż rozwiązanie jako aplikację internetową pod adresem centrala, która łączy się z powrotem ze zdalnym serwerem SQL - technicznie nie jestem pewien jak bym się do tego zabrał, domyślam się, że jest to coś, na co mogli się natknąć inni, więc chciałbym się dowiedzieć, czy są jakieś inne sugestie, jak podejść do tego Dziękczynienia


title: równania i metody hashcode generowane automatycznie, czy zawsze jest to dobra praktyka?

text: Preambuła: Załóżmy, że zamierzam pokryć wszystkie moje zajęcia pokryciem testowym. Pomimo powszechnej opinii (szczególnie w społeczności Java), aby „nie zwracać zbytniej uwagi na Cyclomatic Complexity (CC) i pokrycie kodu”, naprawdę uważam, że te informacje są niezwykle przydatne: gdy masz bardzo wysoki CC lub nieosłoniętą strefę w swoim kodzie, bardzo prawdopodobne, że napisałeś martwy kod, lub albo jest to zapach, że masz problemy z projektowaniem. Z własnego doświadczenia mogę powiedzieć, że niejednokrotnie martwy kod _jest_ kodem śmierdzi. Ten problem staje się nieco skomplikowany, gdy masz do czynienia z automatycznie generowanym kodem i o to chodzi, jak łatwo poradzić sobie z automatycznie generowanymi metodami `hashcode` i `equals`? Natknąłem się na to pytanie w StackOverflow i zdałem sobie sprawę z bardzo dobrego punktu: http://stackoverflow.com/questions/5764380/unit-testing-equals-and-hashcode-a-complex-story Ale to pytanie nie jest duplikatem, ponieważ Chcę zastosować inne podejście: najlepsze opcje dostępne w odpowiedziach na to pytanie to, o ile widzę, EqualsBuilder z Apache Commons Lang lub Guava. Oba używają refleksji (popraw mnie, jeśli się mylę) i może to być problem z wydajnością w niektórych sytuacjach. Ale moje rzeczywiste pytanie brzmi: Ponieważ w większości przypadków zarówno metody `równości`, jak i `hashcode` są **nie** objęte, czy jest to wskazówka, że ta konkretna klasa **nie** potrzebuje tych 2 metod? Ponieważ wielu programistów Java dużo czasu generuje równości i hashcode, nawet gdy nie są potrzebne, czego mi brakuje? Czy nie powinno być lepszym rozwiązaniem, aby generować te metody tylko wtedy, gdy trzeba na przykład posortować obiekty tej klasy, użyć tych obiektów jako klucza Hashtable i tak dalej? Jak już powiedziałem, uważam, że cele o niskiej złożoności i wysokim pokryciu są godne podziwu, ale rozwiązanie przy użyciu EqualsTester , wydaje mi się "Wymuś pokrycie kodu, którego tak naprawdę nie potrzebujesz w swoim programie".


title: Wskazówki dotyczące przeglądu kodu dla CSS, JS i HTML

text: Zostałem poproszony o stworzenie wytycznych dotyczących przeglądu CSS, JS i HTML. Wiem, że istnieją wytyczne dotyczące kodowania dla JS, ale nie znam się na HTML i CSS. Aby zrecenzować JS, z pewnością zastosuję się do tych wytycznych i wymienię je. Ale co z CSS i HTML? Poza błędami logicznymi i problemami z wcięciami, czy są jakieś konkretne rzeczy, które muszę sprawdzić podczas przeglądania znaczników i/lub CSS?


title: Jakie są zalety rozwoju przy użyciu przestarzałych technologii?

text: **Trochę informacji** : Pracuję w dużej firmie, używam Windows XP i koduję Winforms w VB6/VB.Net oraz niektóre WebForms w VB.Net (95% kod konserwacyjny). Mam jeden ekran 4:3 19". Nowoczesna wersja Windowsa nie pojawi się wkrótce, nie będzie też żadnych prac od podstaw po dźwiękach tego! Nie powiedziano mi o tym, kiedy dołączyłem do firmy, byłem mylnie sądzić, że będę pracował z dużo bardziej nowoczesnymi technologiami i frameworkami.Mam dużo bardziej aktualne doświadczenie z poprzednich prac, zarówno z bardziej nowoczesnymi frameworkami i innymi językami programowania, jak i gdy doganiam znajomych programistów z innych słyszę tylko o tym, jak korzystają z najnowszego frameworka ASP MVC lub Vagrant/Ruby on Rails/etc i dostaję zielone oczy! Mógłbym dość szybko załatwić inną pracę, ale czuję, że powinienem daj jeszcze jedną szansę. **Pytanie** : staram się przekonać samego siebie, że moja obecna praca nie jest taka zła. Jakie są więc zalety takiej roli? Czy są zalety pracy z przestarzałymi technologiami ?Może jakieś techniki, których nie podchwyciłbym pracując z bardziej nowoczesnymi te? A może jest to miejsce, w którym umierają kariery i powinienem się stąd wydostać, póki jeszcze mam duszę?


title: Funkcjonalny jako pierwszy język

text: Jakie są zalety i wady uczenia się programowania funkcjonalnego przed innymi paradygmatami?


title: Wymiana wyników programu w Javie

text: Napisałem kalkulator podobny do kalkulatora Windows używając Javy. A teraz chcę zintegrować ten kalkulator z innymi projektami jako osobny pakiet i jednym kliknięciem korzystać z wyników uzyskanych za pomocą kalkulatora w tych projektach (nie używając kopiowania i wklejania). W jaki sposób mogę to zrobić. (Używam Netbeans do kodowania Javy)


title: Przekształcenie wiedzy teoretycznej w wiedzę praktyczną

text: Mam dobre oceny i ~10 lat profesjonalnego rozwoju s/w. Jednak zdałem sobie z tego sprawę, a także w ocenach wydajnościowych wskazano, że chociaż mam dobrą wiedzę teoretyczną i przeczytałem nawet wiele książek o programowaniu - kod kompletny, pragmatyczny programista itp. , moje ręce na wiedzy praktycznej są słabe i jestem nie potrafię przełożyć moich umiejętności teoretycznych na wiedzę praktyczną. Muszę wymyślić plan, jak to zrobić. Jakieś pomysły w tym zakresie? EDIT : Zabieram zbyt dużo czasu na zrozumienie specyfikacji i tworzenie kodu i brakuje mi niektórych aspektów rozwoju, zwłaszcza wiedzy o domenie.


title: O czystym kodzie

text: Przykład: Mam metodę, która formatuje dane wyjściowe na podstawie parametru z obiektu. Pytanie brzmi, czy powinienem przekazać do metody obiekt, który przechowuje parametr, czy tylko wymagany parametr? Wciąż próbuję zrozumieć czyste kodowanie, więc mogę się mylić, uważam, że drugie podejście jest czystsze, ponieważ nie wymaga przejścia całego obiektu i jest łatwe do przetestowania. Jednak sprawia to, że wywoływanie metody jest teraz brzydkie, ponieważ muszę sprawdzać parametr za każdym razem, gdy wywołuję metodę. I jest bardzo często używany. W przeciwieństwie do tego, pierwsze podejście, choć nie tak łatwe do przetestowania, ponieważ muszę zakpić requestObject, jest znacznie prostsze w użyciu. Więc jaką metodę powinienem wybrać? A może jest jeszcze lepsze podejście? // Metoda wyjściowa z obiektem jako wejściowa funkcja publiczna outputResponse($message, $requestObject) { if (isset($resquestObject->param['response_type']) && $requestObject->param['response_type'] == 'json ') zwróć json_ecode($wiadomość); return xmlOutput($wiadomość); } // Więc nazywasz to jak $this->outputResponse($message, $requestObject); Inne podejście... // Metoda wyjściowa z parametrem wejściowym jako funkcja publiczna outputResponse($message, $responseType) { if (responseType == 'json') return json_ecode($message); return xmlOutput($wiadomość); } // Więc nazywasz to jak $responseType = (isset($resquestObject->param['response_type']) && $requestObject->param['response_type'] == 'json') ? 'json' : ''; $this->outputResponse($wiadomość, $responseType);


title: Jakie *są* koncepcje programowania, które powinienem opanować, aby dogłębnie zrozumieć moje rzemiosło (programowanie)?

text: W kolejności ważności, jeśli jest to możliwe, a może nie, jakie są najważniejsze podstawy umiejętności programowania. Algorytmy, iteracja, rekurencja itd.? Zauważ, że tam, gdzie umieściłem itp., leży moje pytanie. Niedawno przeczytałem w Internecie post, w którym napisano, że 9 na 10 programistów nie może _wstrzymywać_ programu! http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html Chcę mieć głęboką wiedzę na temat tego, co faktycznie próbuję osiągnąć podczas programowania i wyczerpujące zrozumienie podstawowe narzędzia do mojej dyspozycji. Zasadniczo chcę móc malować wszystkimi kolorami wiatru.


title: Jaki jest sens używania list zamiast wektorów w C++?

text: Przeprowadziłem 3 różne eksperymenty dotyczące list i wektorów C++. Te z wektorami okazały się bardziej wydajne, nawet jeśli w grę wchodziło wiele insercji w środku. Stąd pytanie: w jakim przypadku listy mają większy sens niż wektory? Jeśli wektory wydają się w większości przypadków bardziej wydajne i biorąc pod uwagę, jak podobne są ich elementy, to jakie korzyści pozostawiają listom? 1. Wygeneruj N liczb całkowitych i umieść je w pojemniku, aby pojemnik pozostał posortowany. Wstawianie zostało wykonane naiwnie, poprzez odczytywanie elementów jeden po drugim i wstawianie nowego tuż przed pierwszym większym. W przypadku listy czas przechodzi przez dach, gdy wymiar wzrasta, w porównaniu z wektorami. 2. Wstaw N liczb całkowitych na końcu pojemnika. W przypadku list i wektorów czas wzrastał o ten sam rząd wielkości, choć w przypadku wektorów był 3 razy szybszy. 3. Wstaw N liczb całkowitych do pojemnika. Uruchom minutnik. Posortuj kontener używając list.sort dla list i std::sort dla wektorów. Zatrzymaj minutnik. Znowu czas rośnie o ten sam rząd wielkości, ale w przypadku wektorów jest średnio 5 razy szybszy. Mógłbym nadal przeprowadzać testy i znaleźć kilka przykładów, w których listy sprawdziłyby się lepiej. Ale wspólne doświadczenie was czytających tę wiadomość może dostarczyć bardziej produktywnych odpowiedzi. Być może spotkałeś się z sytuacjami, w których listy były wygodniejsze w użyciu lub lepiej działały?


title: Różne typy projektów w jednej witrynie

text: Stworzyłem stronę internetową w asp.net i mam kilka dodatkowych zadań, usprawnień do opracowania. Aby zdobyć doświadczenie w asp.net/mvc, chcę stworzyć panel administracyjny za pomocą asp.net mvc. **Czy to logiczny następny krok?** * * * P.S. Projekt jest mały, a 20% strony jest moje, więc nie ma żadnych ograniczeń. Nie ma problemu, jeśli nie dotrzymuję terminów! :)


title: Radzenie sobie z przecięciami elementów

text: Ostatnio byłem świadkiem coraz więcej problemów podobnych do tych wyjaśnionych w tym artykule o skrzyżowaniach obiektów. Innym określeniem na to byłyby linie produktów, chociaż zwykle przypisuję je do faktycznie różnych produktów, podczas gdy zwykle napotykam te problemy w postaci możliwych konfiguracji produktów. Podstawowa idea tego typu problemu jest prosta: dodajesz funkcję do produktu, ale w jakiś sposób sprawy się komplikują z powodu połączenia innych istniejących funkcji. W końcu kontrola jakości znajduje problem z rzadką kombinacją funkcji, o której nikt wcześniej nie pomyślał, a to, co powinno być prostą poprawką błędu, może nawet przerodzić się w wymagające poważnych zmian projektowych. Wymiary tego problemu skrzyżowania cech są oszałamiająco złożone. Załóżmy, że bieżąca wersja oprogramowania ma „N” funkcji i dodajesz jedną nową funkcję. Uprośćmy również rzeczy, mówiąc, że każda z funkcji może być tylko włączona lub wyłączona, wtedy masz już `2^(N+1)` możliwe kombinacje funkcji do rozważenia. Ze względu na brak lepszego sformułowania/wyszukiwanych terminów, istnienie tych kombinacji nazywam _problemem przecięcia funkcji_. (Punkty premiowe za odpowiedź, w tym odniesienia do bardziej ustalonego terminu). Teraz pytanie, z którym się zmagam, dotyczy tego, jak poradzić sobie z tym problemem złożoności na każdym poziomie procesu rozwoju. Z oczywistych względów kosztowych niepraktyczne jest do tego stopnia, że jest utopijne, aby chcieć zajmować się każdą kombinacją indywidualnie. W końcu nie bez powodu staramy się trzymać z daleka od algorytmów złożoności wykładniczej, ale przekształcenie samego procesu rozwoju w potwora o wykładniczej wielkości musi doprowadzić do całkowitej porażki. Jak więc uzyskać najlepszy wynik w systematyczny sposób, który nie rozsadza żadnych budżetów i jest kompletny w przyzwoity, użyteczny i profesjonalnie akceptowalny sposób. * Specyfikacja: Kiedy określasz nową funkcję - w jaki sposób upewniasz się, że będzie się dobrze bawić z innymi dziećmi? Widzę, że można by systematycznie badać każdą istniejącą cechę w połączeniu z nową cechą - ale byłoby to w oderwaniu od innych cech. Biorąc pod uwagę złożoną naturę niektórych cech, ten wyizolowany pogląd jest często już tak zaangażowany, że sam w sobie wymaga ustrukturyzowanego podejścia, nie mówiąc już o czynniku „2^(N-1)” spowodowanym przez inne cechy, które celowo zignorowano. * Implementacja: Kiedy implementujesz funkcję - w jaki sposób zapewniasz, że Twój kod współdziała / przecina prawidłowo we wszystkich przypadkach. Ponownie zastanawiam się nad samą złożonością. Znam różne techniki zmniejszania potencjału błędów dwóch przecinających się obiektów, ale żadnej nie skalowałaby się w rozsądny sposób. Zakładam jednak, że dobra strategia podczas specyfikacji powinna odeprzeć problem podczas implementacji. * Weryfikacja: Kiedy testujesz obiekt - jak radzisz sobie z faktem, że możesz przetestować tylko ułamek przestrzeni przecięcia tego obiektu? Wystarczająco trudno jest wiedzieć, że testowanie pojedynczej funkcji w izolacji nie gwarantuje niczego w pobliżu bezbłędnego kodu, ale kiedy zmniejszysz to do ułamka `2^-N`, wydaje się, że setki testów nie obejmują nawet jednej kropli wody we wszystkich oceanach łącznie. Co gorsza, najbardziej problematyczne błędy to te, które wynikają z przecinania się cech, co do których można się spodziewać, że nie będą prowadzić do żadnych problemów - ale jak je testować, jeśli nie spodziewasz się tak silnego przecięcia? Choć chciałbym usłyszeć, jak inni radzą sobie z tym problemem, interesuje mnie przede wszystkim literatura lub artykuły bardziej dogłębnie analizujące temat. Jeśli więc osobiście stosujesz określoną strategię, dobrze byłoby uwzględnić w swojej odpowiedzi odpowiednie źródła.


title: Rozwiązujesz tablicę Scrabble?

text: Ostatnio widziałem pytanie na SO dotyczące rozwiązywania gry scramble/boggle, w której litery są w siatce 4x4 i musisz znaleźć jak najwięcej słów. Przyjrzałem się niektórym rozwiązaniom, sam je wypróbowałem, a teraz chciałbym przejść do rozwiązania gry w scrabble. Kod rozwiązywania boggle jest dość prosty; przechowuj stan tablicy w macierzy i powtarzaj każdy ruch z każdej pozycji i sprawdzaj, czy słowa istnieją w bieżącym łańcuchu liter. W przypadku scrabble pomysł jest podobny, ale wciąż mam problem z jego rozpracowaniem. Obecnie myślę o: 1. Przechowywaniu planszy w dwuwymiarowej tablicy. 2. Iterowanie po każdej pozycji i pomijanie, jeśli pozycja jest pusta. 3. Tworzenie jakiegoś wzorca wyrażeń regularnych dla liter na stojaku i litery na pozycji... Nadal nie wiem, co zrobić w kroku 3, ponieważ wiem, że kafelek na pozycji może być początkiem końca, lub jakiś punkt w środku słowa. A potem jest kwestia upewnienia się, że jeśli słowo pasuje, to tworzy również słowa z innymi kafelkami, których dotyka. Nie proszę o próbki kodu, tylko o proces myślowy od bardziej doświadczonych programistów. Aby wyjaśnić, moim celem jest: > Biorąc pod uwagę aktualny stan planszy i kafelków danej osoby, obliczyć legalne > ruchy i punkty za ten ruch. Dla każdego, kto śledzi to i czeka na odpowiedź, znalazłem to: http://www.chaddington.com/portfolio/project.html#scrabble Mogę przejrzeć to, co napisał, ale chcę spróbować sam to rozgryźć pierwszy.


title: Logistyka stania się firmą deweloperską iOS

text: Odnieśliśmy wiele sukcesów w naszej firmie dzięki stworzonym przez nas aplikacjom na iOS, które teraz rozbudzamy i oferujemy ludziom, którzy chcą, aby aplikacje na iPhone/iPad były stworzone dla nich lub ich firmy. Jakie mamy opcje dla scenariuszy wdrożeniowych? Jeśli chcą go w sklepie z aplikacjami, jest to dość łatwe i po prostu prześlemy go w normalnym procesie. Ale jakie klauzule ludzie umieszczają w tych umowach, ponieważ wiem, że Apple nadal posiada wszystkie karty i może w końcu odrzucić aplikację, jeśli nie będzie ona odpowiadać ich wytycznym (co czasami może być niejasne). Co się stanie, jeśli klient nie chce wdrażać go w sklepie z aplikacjami, ale chce tylko aplikacji wewnętrznej? Czy to na kliencie, niż zakup licencji Apple Developer/Enterprise, która pozwala na wdrażanie ad hoc na urządzeniach, a my po prostu dostarczamy im aplikację?


title: Scrum, czy istnieje ścieżka krytyczna do planowania wydania?

text: Mike Cohn w Agile Estimating and Planning, s. 154, definiuje „naturalny porządek” wdrażania historyjek użytkownika — według niego jest to intuicyjna sekwencja, która ma sens zarówno dla programistów, jak i zespołu. Rozumiem i popieram ten pomysł. Chociaż mam problem z odrzuceniem koncepcji „ścieżki krytycznej”; Widzę wartość porządkowania historii w oparciu o ich zależności. Nawet jeśli zaległości są stale rozwijającym się narzędziem, możemy wyznaczyć „ścieżkę krytyczną” bieżącego zaległości, aby ustalić priorytety i uzyskać informacje na 3-6 miesięcy. To po prostu nie brzmi dobrze, biorąc pod uwagę wszystko, co wiem o Agile. Jak stosujesz koncepcję ścieżki krytycznej w Scrum? Twoja osobista opinia byłaby bardzo mile widziana!


title: Podejście do programowania funkcjonalnego dla uproszczonej gry z wykorzystaniem Scali i LWJGL

text: Ja, programista imperatywny Java, chciałbym zrozumieć, jak wygenerować prostą wersję Space Invaders w oparciu o zasady projektowania programowania funkcjonalnego (w szczególności przezroczystość referencyjną). Jednak za każdym razem, gdy próbuję wymyślić projekt, gubię się w gąszczu skrajnej zmienności, tej samej zmienności, której unikają puryści programowania funkcjonalnego. Jako próbę nauki programowania funkcjonalnego postanowiłem spróbować stworzyć bardzo prostą interaktywną grę 2D, Space Invader (zwróć uwagę na brak liczby mnogiej), w Scali przy użyciu LWJGL. Oto wymagania dla podstawowej gry: 1. Statek użytkownika na dole ekranu przesuwany w lewo i prawo za pomocą klawiszy „A” i „D” odpowiednio 2. Pocisk statku użytkownika wystrzelony prosto w górę aktywowany spacją z minimalną przerwa między strzałami trwająca 0,5 sekundy 3. Pocisk obcego statku wystrzelony prosto w dół aktywowany przez losowy czas od 0,5 do 1,5 sekundy między strzałami Rzeczy celowo pominięte w oryginalnej grze to obcy szer. x wys., degradowalne bariery obronne x3, szybki statek spodek u góry ekranu. OK, teraz przejdźmy do właściwej domeny problemu. Dla mnie wszystkie deterministyczne części są oczywiste. Wydaje się, że to niedeterministyczne części blokują moją zdolność do zastanowienia się, jak podejść. Części deterministyczne to trajektoria pocisku, gdy już istnieją, ciągły ruch kosmity i eksplozja spowodowana trafieniem w jeden (lub oba) statek gracza lub kosmitę. Części niedeterministyczne (dla mnie) obsługują strumień danych wejściowych użytkownika, obsługują pobieranie losowej wartości do określania wystrzeleń obcych pocisków i obsługują dane wyjściowe (zarówno grafikę, jak i dźwięk). Przez lata potrafiłem (i robiłem) wiele tego typu tworzenia gier. Wszystko to jednak pochodziło z paradygmatu imperatywnego. A LWJGL zapewnia nawet bardzo prostą wersję Java Space Invaders (z których zacząłem przenosić się do Scali, używając Scali jako Javy bez średników). Oto kilka linków, które mówią o tym obszarze, z których żaden nie odnosił się bezpośrednio do pomysłów w sposób zrozumiały dla osoby wywodzącej się z Javy / programowania imperatywnego: 1. Czysto funkcjonalne retrogry, część 1 autorstwa Jamesa Hague'a 2. Podobne przepełnienie stosu post 3. Gry Clojure/Lisp 4. Gry Haskell na przepełnieniu stosu 5. Funkcjonalne programowanie reaktywne Yampy (w Haskell) Wygląda na to, że w grach Clojure/Lisp i Haskell jest kilka pomysłów (ze źródłem). Niestety, nie jestem w stanie odczytać/zinterpretować kodu na modele umysłowe, które mają jakikolwiek sens dla mojego prostolinijnego, imperatywnego mózgu Javy. Jestem tak podekscytowany możliwościami oferowanymi przez FP, że mogę po prostu posmakować możliwości wielowątkowej skalowalności. Czuję, że gdybym był w stanie wymyślić, jak można zaimplementować coś tak prostego, jak model czas + zdarzenie + losowość dla Space Invader, oddzielając części deterministyczne i niedeterministyczne w odpowiednio zaprojektowanym systemie bez przekształcania się w coś, co wydaje się zaawansowaną teorią matematyczną ; tj. Yampa, byłbym ustawiony. Jeśli nauka na poziomie teorii, którego Yampa wydaje się wymagać, aby pomyślnie generować proste gry, jest konieczna, to koszt nabycia wszystkich niezbędnych szkoleń i ram koncepcyjnych znacznie przeważy moje zrozumienie korzyści płynących z FP (przynajmniej w przypadku tego zbyt uproszczonego eksperymentu uczenia się). ). Wszelkie informacje zwrotne, propozycje modeli, sugerowane metody podejścia do dziedziny problemu (bardziej szczegółowe niż ogólniki omówione przez Jamesa Hague'a) byłyby mile widziane.


title: Zarządzanie wieloma małymi (czasami sprzecznymi) zmianami

text: Pracuję w dużej firmie, a większość projektów związanych z kodowaniem jest dość ustrukturyzowana z planem projektu i procesem przeglądu. Jednak w przypadku istniejącego wsparcia zdarzają się okresy, w których dział będzie potrzebował wielu drobnych zmian w istniejącej aplikacji lub witrynie, takich jak dział księgowości pod koniec roku podatkowego. Problem polega na tym, że są niesamowicie zajęci, a mój zespół dostaje mnóstwo drobnych, awaryjnych zmian, które są w nas rzucane. Musimy być wystarczająco elastyczni, aby wspierać ich potrzeby, ponieważ są one realne i zapewniają firmie dużą wartość. Z drugiej strony, biorąc pod uwagę, jak szalone jest ich środowisko, czasami dają nam sprzeczne zmiany (zmień tekst na 10pt, a następnego dnia zmień go na 12pt). Ponownie, zmiany są trywialnie małe, ale mogą pochłonąć dzień programisty, biorąc pod uwagę ich częstotliwość. Chciałbym odsunąć się i ustalić pewne uczciwe granice tego, w jaki sposób będziemy obsługiwać te prośby w przyszłości. Czy istnieje najlepsza praktyka obsługi tego typu małych zmian? Dział, o którym mowa, jest zbyt zajęty, aby poświęcić o wiele więcej czasu na współpracę z nami. Nie pobieramy również opłat, więc trudno jest im przekazać problem. Jakie jest dobre podejście do rozwiązania tego problemu?


title: Czy funkcja grupowania/filtrowania elementów powinna znajdować się w warstwie ViewModel czy View?

text: Jestem w sytuacji, w której mam listę elementów, które należy wyświetlić w zależności od ich właściwości. Nie jestem pewien, gdzie jest najlepsze miejsce do umieszczenia logiki filtrowania/grupowania stanu widoku modelu? Obecnie mam to w widoku za pomocą konwerterów, ale nie jestem pewien, czy powinienem mieć logikę w viewmodelu? np. ViewModel Layer: klasa ItemViewModel { DateTime LastAccessed { get; ustawić; } bool Jest Aktywny { get; ustawić; } } class ContainerViewModel { ObservableCollection<Item> Items {get; set;} } Warstwa widoku: <TextView Text="Aktywne elementy"/> <List ItemsSource={Powiązanie elementów, Converter=GroupActiveItemsByDay}/> <TextView Text="Aktywne elementy"/> <List ItemsSource={Powiązanie elementów, konwerter =GroupInActiveItemsByDay}/> czy powinienem to zbudować w ten sposób? ViewModel Layer: class ContainerViewModel { ObservableCollection<IGrouping<string, Item>> ActiveItemsByGroup {get; set;} ObservableCollection<IGrouping<string, Item>> InActiveItemsByGroup {get; set;} } Warstwa widoku: <TextView Text="Aktywne elementy"/> <List ItemsSource={Wiązanie ActiveItemsGroupByDate }/> <TextView Text="Active Items"/> <List ItemsSource={Wiązanie InActiveItemsGroupByDate }/> A może coś pomiędzy? ViewModel Warstwa: class ContainerViewModel { ObservableCollection<IGrouping<string, Item>> ActiveItems {get; set;} ObservableCollection<IGrouping<string, Item>> InActiveItems {get; set;} } Warstwa widoku: <TextView Text="Active Items"/> <List ItemsSource={Wiązanie ActiveItems, Converter=GroupByDate }/> <TextView Text="Active Items"/> <List ItemsSource={Wiązanie InActiveItems, Converter =GroupByDate }/> Wydaje mi się, że moje pytanie brzmi: jaka jest dobra praktyka, jeśli chodzi o to, jaką logikę umieścić w ViewModel i jaką logikę umieścić w Binding w widoku, ponieważ wydają się one trochę nakładać?


title: Czy stawiamy poprzeczkę zbyt wysoko, wymagając, aby testy kodu nie cierpiały z powodu przepełnienia bufora?

text: Obecnie prowadzimy rekrutację na stanowisko Junior Developera pracującego głównie w C na Linuksie. W ramach tego procesu wymagamy od kandydatów wykonania testu kodu w wolnym czasie w języku C. Do tej pory odrzuciliśmy dwóch kandydatów na podstawie tego, że ich kod, choć czytelny i w jednym przypadku dość idiomatyczny, zawierał błędy przepełnienia bufora z powodu nieograniczone zapisy w buforze. Czy przepełnienia bufora są akceptowalne przez absolwenta programisty? Czy nie stawiamy poprzeczki zbyt wysoko? Jakie są oczekiwane umiejętności absolwentów/młodszych inżynierów? **[Edytuj]:** * Wyraźnie prosimy o sprawdzony kod jakości produkcji. * Udostępniamy kandydaci framework test & build **[Aktualizacja]:** W wyniku tego wątku i rozmów, które prowadziliśmy osobiście z innymi programistami, zmieniamy sposób, w jaki przeprowadzamy testy kodu i kogo cel z naszą rekrutacją. Uznaliśmy, że niemożność naprawy lub zrozumienia przepełnienia bufora przez kandydata oznacza, że nie nadawałby się do wykonywanej przez nas pracy, w szczególności przyjąłby więcej mentoringu, niż nam odpowiada. W związku z tym nadal będziemy odrzucać kandydatów, którzy ostatecznie nie mogą przesłać solidnej próbki kodu. Wprowadziliśmy jednak pewne środki, aby proces rekrutacji był bardziej produktywny zarówno dla nas, jak i dla kandydatów. W szczególności: * Wyraźniej wyrażamy nasze oczekiwania, jasno wyjaśniając, co rozumiemy przez jakość produkcji, oraz ostrzegamy, że kod powinien być solidny pod względem danych wejściowych i błędów. * W opisie testu kodu łączymy teraz kandydatów z zasobami dotyczącymi programowania defensywnego i standardową biblioteką C. * Zmieniliśmy naszą grupę docelową z młodszych programistów i absolwentów na osoby z odpowiednim doświadczeniem. * W przypadku, gdy przesłany kod w jakiś sposób nie powiedzie się, ale w przeciwnym razie zostałby zaakceptowany, zapewniamy teraz minimalny przypadek testowy, który powoduje błąd i daje kandydatom szansę na poprawienie swoich błędów (chyba że kod zostanie odrzucony z innego powodu). W razie potrzeby wskażemy również problematyczne linie/funkcje. * Cel samych testów zmienił się teraz nieco z filtra frontendowego na szansę na zbudowanie lepszego obrazu kandydata, w szczególności poinformuje o tym naszą rozmowę telefoniczną. To powiedziawszy, nadal jesteśmy gotowi odrzucić na podstawie wyłącznie kodu.


title: Czy użycie warunków bezpieczeństwa w widoku jest naruszeniem MVC?

text: Często to, co jest wyświetlane użytkownikowi (np. na stronie internetowej), będzie częściowo opierać się na kontrolach bezpieczeństwa. Zazwyczaj uważam, że bezpieczeństwo na poziomie użytkownika / ACL jest częścią logiki biznesowej systemu. Jeśli widok jawnie sprawdza zabezpieczenia w celu warunkowego wyświetlania elementów interfejsu użytkownika, czy narusza on MVC, zawierając logikę biznesową?


title: Dwa komponenty oferujące tę samą funkcjonalność, wymaganą przez różne zależności

text: Buduję aplikację w PHP, używając Zend Framework 1 i Doctrine2 jako warstwy ORM. Wszystko idzie dobrze. Teraz zdarzyło mi się zauważyć, że zarówno ZF1, jak i Doctrine2 mają i polegają na własnej implementacji buforowania. Oceniłem oba i chociaż każdy ma swoje wady i zalety, żaden z nich nie wyróżnia się jako lepszy od drugiego dla moich prostych potrzeb. Wydaje się, że obie biblioteki są również napisane pod kątem ich odpowiednich interfejsów, a nie ich implementacji. Powodem, dla którego uważam, że jest to problem, jest to, że podczas ładowania aplikacji muszę skonfigurować dwa sterowniki buforowania - każdy z własną składnią. W ten sposób łatwo powstaje niezgodność i z tego powodu nieefektywne jest skonfigurowanie dwóch połączeń z backendem pamięci podręcznej. Staram się ustalić, jaki jest najlepszy sposób postępowania, i chętnie przyjmę wszelkie spostrzeżenia, które możesz zaoferować. Do tej pory wymyśliłem cztery opcje: 1. Nic nie rób, zaakceptuj obecność dwóch klas oferujących funkcjonalność buforowania. 2. Utwórz klasę Facade, aby przykleić interfejs Zend do implementacji buforowania Doctrine. 3. Opcja 2, na odwrót - stwórz fasadę, aby zmapować interfejs Doctrine na backend Zend Framework. 4. Użyj dziedziczenia wielu interfejsów, aby utworzyć jeden interfejs, który będzie nimi rządził, i módl się, aby nie nakładały się na siebie na brak odpowiedniego polimorfizmu PHP). Która opcja jest najlepsza, czy też istnieje wariant „Żadna z powyższych”, o którym nie wiem?


title: Czy wiele procesorów / rdzeni może jednocześnie uzyskać dostęp do tej samej pamięci RAM?

text: Oto, co **zgaduję** się wydarzy: 1. Gdyby dwa rdzenie próbowały uzyskać dostęp do **tego samego** adresu w pamięci RAM, jeden musiałby **czekać**, aż drugi uzyska dostęp do pamięci RAM. Za **drugi** czas, kiedy każdy rdzeń próbowałby uzyskać dostęp do tego samego adresu, mogą nadal mieć buforowaną pamięć RAM, aby mogli uzyskać dostęp do swoich **pamięci podręcznych** jednocześnie. 2. Gdyby dwa rdzenie próbowały uzyskać dostęp do **różnych** adresów w tej samej pamięci RAM, jeden musiałby **poczekać**, aż drugi uzyska dostęp do pamięci RAM. Innymi słowy, wyobrażam sobie, że w przypadku zadań programistycznych intensywnie korzystających z pamięci RAM, przetwarzanie wieloprocesowe niewiele pomoże, chyba że będzie wymagało wielokrotnego odczytu z tego samego adresu w pamięci RAM na rdzeń. Czy więc wiele procesorów / rdzeni może jednocześnie uzyskiwać dostęp do tej samej pamięci RAM, czy to, co mówię, jest poprawne?


title: Jak radzisz sobie z logiką domeny, która obejmuje wiele obiektów modelu w ORM?

text: Wiem więc, że w modelu należy umieścić logikę biznesową. Ale używając ORM nie jest tak jasne, gdzie powinienem umieścić kod, który obsługuje wiele obiektów. Np. powiedzmy, że mamy model „Klient”, który ma „typ” „sportowy” lub „szykowny” i chcieliśmy „customer.add_bonus()” każdemu eleganckiemu klientowi. Gdzie byśmy to zrobili? Czy tworzymy nową klasę do obsługi tego wszystkiego? Jeśli tak, to gdzie go umieścimy (obok wszystkich innych klas modeli, ale nie podklasy z ORM?)? Obecnie używam frameworka django w pythonie, więc konkretne sugestie są jeszcze bardziej pożądane.


title: Jakie są powody używania w pełni kwalifikowanych nazw klas w kodzie źródłowym?

text: Niedawno natknąłem się na kod, w którym programiści używali zarówno w pełni kwalifikowanych nazw klas, jak i importowanych nazw klas w swoim kodzie źródłowym. Przykład: importuj pakietA.Foo; public class Przykład { pakiet publicznyB.Bar doCoś() { final Foo foo = new Foo(); ... } } Miałem wrażenie, że jedynym powodem, dla którego można chcieć używać w pełni kwalifikowanej nazwy dla klas w kodzie źródłowym, jest to, że mają identyczne nazwy klas w dwóch różnych pakietach i potrzebują w pełni kwalifikowanej nazwy, aby odróżnić te dwie . Czy się mylę?


title: Jak rozróżnić typy wbudowane w Pythonie?

text: Mam funkcję, która jako argument akceptuje ciąg znaków lub słownik. Oznacza to, że można go nazwać: lookup_person({imię: "Jan Kowalski", wiek: 57}) lub lookup_person("Jan Kowalski") Moją pierwszą chęcią jest użycie `type` lub `isinstance` do rozróżnienia typu argumentu, ale widziałem dużo atramentu rozlanego na temat tego, czy i kiedy wykrywanie typu sztywnego jest właściwe. Przeważająca mądrość, którą przeczytałem, sugeruje, że powinienem testować, czy mój obiekt implementuje jakiś interfejs, ale testowanie pod kątem określonych metod łańcuchowych lub słownikowych wydaje się znacznie mniej bezpieczne niż zwykłe testowanie, czy typ obiektu to łańcuch lub słownik. Czy można tu zastosować pisanie kaczką i czy jest to właściwe? A może mam większy problem, a moje podejście tutaj jakoś zasadniczo nie jest Pythonowe? **EDYTUJ:** Aby wyjaśnić, przekazywanie słownika jest „typowym” zastosowaniem. Przekazywanie ciągu jest po prostu skrótem API dla słownika jednostanowiskowego z `name`, tj. `lookup_person({name:"Jan Kowalski"})`.


title: Sortowanie : przydatne nie tylko do przeglądania danych?

text: **Kontekst** Obecnie pracuję nad osobistym projektem z funkcjonalnym reaktywnym JavaScriptem i wymyśliłem dziwne pytanie. Zauważ, że to pytanie nie dotyczy JavaScriptu, ale jest to kontekst, w którym je zadaję. **Scenariusz** Podczas filtrowania zbioru danych otrzymujesz mniejszy zestaw danych. Dlatego prawidłowe filtrowanie danych wcześniej (a nie później) kończy się optymalizacją późniejszego kodu, ponieważ nie trzeba iterować przez część danych, która nie zostanie wykorzystana. (pomyśl o filtrowaniu przed mapowaniem, zamiast na odwrót) Zastanawiałem się jednak, czy istnieje scenariusz, w którym sortowanie zapewnia podobne korzyści, czy też sortowanie jest ogólnie używane jako sposób formatowania danych, które mają być wyświetlane, aby użytkownik końcowy mógł łatwiej go wchłonąć (sortuj według nazwy, miasta, stanu itp.). **Pytanie** Kiedy sortowanie _danych_ jest bardziej pożądane niż sortowanie odpowiednich _widoków_ tych danych?


title: Jedna metoda z wieloma zachowaniami lub wieloma metodami

text: To pytanie jest dość ogólne i nie jest związane z konkretnym językiem, ale bardziej z najlepszymi praktykami kodowania. Ostatnio rozwijałem funkcję dla mojej aplikacji, która jest wymagana w wielu przypadkach z nieco innymi zachowaniami. Ta funkcja wysyła e-maile, ale do różnych odbiorców lub z różnymi tekstami zgodnie z parametrami. Sygnatura metody jest czymś w rodzaju public static sendMail (t_message message = null , t_user receiver = null , stream attachmentPiece = null) A potem istnieje wiele warunków wewnątrz metody, takich jak if(attachedPiece != null) { } wybór, aby zrobić to w ten sposób (za pomocą jednej metody), ponieważ uniemożliwia mi to przepisanie (prawie) tej samej metody 10 razy, ale nie jestem pewien, czy jest to dobra praktyka. Co powinienem zrobić? Napisz 10 metod `sendMail` z różnymi parametrami? Czy istnieją oczywiste zalety i wady tych różnych sposobów programowania? Wielkie dzięki.


title: Jak funkcja wyszukiwania pasuje do DDD z CQRS?

text: W książce Vaughna Vernona Implementing domain drive design i dołączonej przykładowej aplikacji odkryłem, że zaimplementował on podejście CQRS do kontekstu ograniczonego iddd_collaboration. Przedstawia następujące klasy w warstwie usług aplikacji: * CalendarApplicationService.java * CalendarEntryApplicationService.java * CalendarEntryQueryService.java * CalendarQueryService.java Jestem ciekaw, czy aplikacja będzie miała stronę wyszukiwania z licznymi rozwijanymi listami i polami wyboru z inteligentne pole tekstowe pasujące do różnych wzorców wyszukiwania; Jak ustrukturyzujesz całą tę logikę wyszukiwania? W usłudze poleceń czy usłudze zapytań? Patrząc na CalendarQueryService.java, widzę, że ma 2 metody dla ogromnego zapytania, ale nie ma żadnej logiki, aby na przykład mieszać i dopasowywać dowolne filtry wyszukiwania. Słyszałem, że warstwa aplikacji nie powinna mieć żadnej logiki biznesowej, więc gdzie skonstruuję dynamiczne zapytanie? a może po prostu zaśmiecać wszystko w usłudze Query?


Jestem trochę zdezorientowany „funkcją” i „lambdą”. Widziałem kilka przykładów pokazujących, że słowo kluczowe `lambda` działa bardzo podobnie do słowa kluczowego JavaScript `function`, ale tak naprawdę nie wiem, jak są ze sobą powiązane. Powiedziano mi, że „funkcja” i „metoda” mogą być używane zamiennie, gdy mówimy o obiektach w .net. Zastanawiam się, czy „lambda” i „funkcja” podobnie oznaczają to samo. Zastanawiam się, czy „lambda” ma jakieś ezoteryczne znaczenie, skoro grecka litera lambda (λ) pojawia się w tak wielu awatarach na tej stronie. Aby było jeszcze bardziej zagmatwać, w .net funkcjonalne części C# odnoszą się do wyrażeń funkcyjnych przekazywanych do innej funkcji jako „wyrażenia lambda”, więc to słowo naprawdę wydaje się być wszędzie. Znam też niejasno termin „rachunek lambda”. Jaka jest różnica między funkcją a lambdą?


title: Czysty frontend JavaScript z Web API kontra widoki MVC z ajax

text: To była bardziej dyskusja na temat tego, co ludzie myślą w dzisiejszych czasach na temat dzielenia aplikacji internetowej. Jestem przyzwyczajony do tworzenia aplikacji MVC ze wszystkimi jej widokami i kontrolerami. Normalnie utworzyłbym pełny widok i przekazałby go z powrotem do przeglądarki na żądanie pełnej strony, chyba że istnieją określone obszary, których nie chciałem wypełniać od razu, a następnie użyłbym zdarzeń ładowania strony DOM, aby wywołać serwer w celu załadowania innych obszarów przy użyciu AJAX. Ponadto, jeśli chodzi o częściowe odświeżenie strony, wywołałbym metodę akcji MVC, która zwróciłaby fragment HTML, którego następnie mógłbym użyć do wypełnienia części strony. Dotyczyłoby to obszarów, w których nie chciałem spowalniać początkowego ładowania strony lub obszarów, które lepiej pasowały do wywołań AJAX. Jednym z przykładów może być stronicowanie tabeli. Jeśli chcesz przejść do następnej strony, wolałbym, aby wywołanie AJAX otrzymało te informacje, zamiast używać pełnego odświeżania strony. Ale wywołanie AJAX nadal zwróci fragment HTML. Moje pytanie brzmi. Czy moje przemyślenia na ten temat są archaiczne, ponieważ pochodzę z .net, a nie z czystego front-endu? Inteligentny programista frontend, z którym pracuję, woli robić mniej więcej nic w widokach MVC i woli robić wszystko na front endzie. Aż do wywołań internetowego interfejsu API wypełniających stronę. Dlatego zamiast wywoływać metodę akcji MVC, która zwraca kod HTML, wolałby zwrócić standardowy obiekt i użyć javascript do stworzenia wszystkich elementów strony. Sposób programisty front-end oznacza, że wszelkie korzyści, które normalnie uzyskuję dzięki walidacji modelu MVC, w tym walidacja po stronie klienta, znikną. Oznacza to również, że wszelkie korzyści, jakie uzyskam z tworzenia widoków, z mocno wpisanymi szablonami html itp. znikną. Uważam, że oznaczałoby to, że musiałbym napisać tę samą walidację dla walidacji front-end i back-end. JavaScript musiałby również mieć wiele metod tworzenia wszystkich różnych części DOM. Na przykład podczas dodawania nowego wiersza do tabeli normalnie używam widoku częściowego MVC do tworzenia wiersza, a następnie zwracam go jako część wywołania AJAX, które następnie jest wstrzykiwane do tabeli. Używając czystego sposobu front-endu, JavaScript przyjmie obiekt (na przykład produkt) dla wiersza z wywołania interfejsu API, a następnie utworzy wiersz z tego obiektu. Tworzenie każdej indywidualnej części rzędu tabeli. Witryna, o której mowa, będzie miała wiele różnych obszarów, od administracji, formularzy, wyszukiwania produktów itp. Strona, która moim zdaniem nie wymaga architektury jednostronicowej aplikacji. Co wszyscy sądzą na ten temat? Jestem zainteresowany, aby usłyszeć od deweloperów front-end i deweloperów back-end.


title: Język oceny pozycji szachowej (eksperymentalny)

text: Moim celem jest, poprzez analizę wzorców i statystyki, (jak również mobilność i pozycję figur) zbudowanie analizatora oceny pozycji szachów (zamiast po prostu przeszukiwania warstw). Chciałbym usłyszeć kilka myśli o języku, który będzie interesujący/zabawny/trudny do nauki i rozumowania. Idealnie język byłby dobrze dopasowany do: 1. Analizy statystycznej 2. Analizy wzorców 3. Natywnych operacji na tablicach i wektorach 4. Natywnych funkcji matematycznych Uwaga: 1. Nie potrzebuję GUI i może nawet nie przejść do sedna 'ruchu silnika', ale po prostu zatrzymaj się na silniku oceny pozycji 2. Nie interesuje mnie prędkość. 3. Osobiście najlepiej czuję się w Pythonie, ale mogę być zainteresowany spróbowaniem czegoś innego. (choć możesz to zasugerować, jeśli uważasz, że pasuje). 4. Jestem szczególnie ciekaw, jak dobrze pasowałby język funkcjonalny w tym kontekście.


title: Co było przed MVC?

text: MVC jest często używany (nie tylko w aplikacjach internetowych) i wydaje się, że jest to podejście do projektowania oprogramowania. Istnieje również wiele wersji MVC. Moje pytanie brzmi: co było przed MVC? Jak ludzie konstruowali duże systemy oprogramowania? Oczywiście „separacja obaw” nie została wynaleziona w MVC (nawet jeśli tak się nie nazywało). Zakładam, że taki sposób myślenia, który jest kluczowy dla budowy i utrzymania oprogramowania, był obecny dawno temu. Ale z bardziej technicznego punktu widzenia, jaka była struktura oprogramowania przed MVC?


title: Jak mam organizować błędy w redmine?

text: Pomagam zreorganizować kilka projektów redmine; chociaż mam duże doświadczenie z systemami śledzenia problemów, nigdy wcześniej nie pracowałem z redmine. Jaki jest najlepszy sposób na zorganizowanie problemów w Redmine, aby można je było łatwo pogrupować według: * funkcji (np. „Prześlij plik”, „Zaloguj się do witryny”, „Wyślij wiadomość”) * komponent systemu (np. front-end, tył -end, baza danych) i * wersja docelowa ("beta 1", "beta 2" "GA") Obecnie większość "Błędów" to problemy potomne "Funkcji"; niestety oznacza to, że wersja docelowa każdego błędu jest automatycznie wypełniana wersją docelową funkcji nadrzędnej. Czy jest jakiś sposób, aby to naprawić?


title: Reprezentowanie obiektów domeny

text: Jest to związane z moim ostatnim pytaniem dotyczącym nazywania niewygodnych obiektów domeny. Wiele odpowiedzi wskazywało, że używam niewłaściwej reprezentacji obiektów domeny. Podsumowując, zdecydowałem się użyć wyliczenia do reprezentowania niektórych obiektów domeny używanych jako klucze w wyszukiwaniach. W przypadku tego pytania chcę przejrzeć moją decyzję o użyciu wyliczenia i zidentyfikować alternatywy. Przejdź na sam dół mojego pytania dla TL; DR. **Opis domeny** Moja aplikacja jest odpowiedzialna za wykonanie niektórych obliczeń dotyczących związków chemicznych. Niektóre podstawowe równania to: * obliczanie liczby moli związku * obliczanie ciężaru właściwego lub gęstości związku w różnych stężeniach Te równania można traktować jako metody w ramach klasy „chemicznej”, takiej jak: „Chemical.GetMolesFromMass(podwójna masa_gramów) ` lub `Chemical.GetDensity(podwójne stężenie)` lub mogą być zaimplementowane jako metody poza ogólną klasą właściwości chemicznych, takich jak: `Chemical.GetMolesFromMass(Compound cmpd, double mass_grams)` lub `Chemical.GetDensity(Compound cmpd, podwójne stężenie) )` Myślę, że z punktu widzenia odpowiedzialności za obiekt, pierwsza opcja metod spoza klasy `Chemical` byłaby lepszą reprezentacją. Niektóre zaawansowane równania obejmują: * obliczanie ilości związku zużywanego w procesie biznesowym * obliczanie wymagań dotyczących przechowywania związków * optymalizację dostaw w oparciu o standardowe rozmiary pojemników W tych równaniach związek chemiczny stanowi dane wejściowe do metody. `StorageTankCluster.Generate(Compound cmpd, double requiredVolume)` `StorageTankCluster` musi znać substancję chemiczną, ponieważ wymiary i odstępy między zbiornikami w klastrze będą się zmieniać w zależności od substancji chemicznej i wymaganej objętości. Przechowywana substancja chemiczna może wpływać na wybór materiału zbiornika, a także wpływać na bezpieczne odstępy między zbiornikami. W tej chwili rozważam te parametry (rozstaw, materiał, ...) jako elementy wyszukiwania, a nie elementy, za których znajomość odpowiada związek. Podobnie na optymalizację dostarczania wpływa związek chemiczny, ale można się spierać, czy te aspekty są odpowiedzialnością związku. Zarówno komponent „StorageTankCluster”, jak i komponenty optymalizacji dostarczania są przeznaczone do ponownego wykorzystania w innych niechemicznych aspektach aplikacji. Ponieważ to pytanie już się komplikuje, możemy po prostu nazwać te inne elementy `Foo` i `Bar`. Zarówno `Foo`, jak i `Bar` mogą wykorzystywać optymalizację dostarczania, ale tylko `Foo` może być używane z `StorageTankCluster`. Nie ma go teraz w aplikacji, ale wszystkie różne właściwości omówione do tej pory będą musiały być przechowywane w warstwie bazy danych / trwałości. Zdaję sobie sprawę, że nie powinno to wpływać na dobry projekt, ale pomyślałem, że warto o tym wspomnieć. Przyznam, że niektóre z moich decyzji były stronnicze, ponieważ przenoszę tę aplikację z innego źródła, co wymusza robienie wszystkiego w uporządkowany sposób. Pisząc to pytanie, zwróciłem uwagę na kilka obszarów, w których powinienem był lepiej zbadać, jaki obiekt odpowiada za tę funkcjonalność. Mój projekt do tej pory był zorientowany wokół tabel odnośników i używam wartości wyliczenia jako kluczy do tych tabel. To właśnie ich użycie jako kluczy powoduje, że traktuję je jako nazwane obiekty w programie, zamiast traktować je jako obiekty, na których operowałby system. To w dużej mierze zdegradowało związki chemiczne do statusu klasy drugiej i zastanawiam się, czy to była właściwa decyzja. Z drugiej strony jestem zaniepokojony tym, że klasa związków chemicznych stanie się nadęta poza użyteczność. **TL;DR** Moja implementacja jest / musi być w C#. Czy użycie wyliczenia było właściwym wyborem, czy co powinienem był zrobić i dlaczego?


title: Kontynuując kodowanie przy dużych projektach

text: Jestem programistą hobbystą i zacząłem wiele projektów średniej wielkości, nad którymi pracowałem sam. Należą do nich gry, raytracer, symulacje fizyki itp. Zanim projekty te osiągną pewien rozmiar (około 5000 linii), zaczynam zwalniać w dodawaniu funkcji do programu. Nie jest to spowodowane brakiem pomysłów na to, co zaimplementować w programie, ale raczej walką o to, jak się do tego zabrać. W szczególności obawiam się zerwania tego, co już pracuję, aby zaimplementować nową funkcję. Próbowałem używać kontroli wersji, jak Git i Subversion, ale wydają się one niepotrzebne, gdy jesteście jednoosobowym zespołem. Mam po prostu folder z „wersjami” mojego programu, po jednej dla każdej większej zmiany, którą wprowadzam. Jak kontynuować kodowanie poza tym 5000 linii? A co ze znakiem linii 50000?


title: Czy istnieje coś takiego jak naprawdę losowe?

text: Widziałem film o liczbach losowych io tym, jak programista w tym filmie mówił o komputerach generujących liczby pseudolosowe io tym, że tak naprawdę nie są one losowe. Wiedziałem o tym. Następnie pokazał rozpad materiału radioaktywnego, aby wygenerować losowe liczby, o których twierdził, że są naprawdę losowe. Czy naprawdę istnieje coś takiego? Chodzi mi o to, że proces wystrzeliwania elektronów przez materiał radioaktywny może wydawać się przypadkowy, ale czy tak jest? Czy nie jest to dla nas tylko tajemnicza czarna skrzynka po prostu dlatego, że nie wiemy, jak to naprawdę działa? A może losowość zależy tylko od aktualnego poziomu wiedzy naukowej? Jeśli tak, to dlaczego często cytuje się komputery kwantowe jako zdolne do generowania liczb naprawdę losowych? Czy naprawdę mogą to zrobić?


title: Czy istnieje narzędzie komputerowe do automatycznego łączenia i minifikowania JS przy zapisywaniu?

text: Ostatnio używam Less.app, aby automatycznie minimalizować CSS i kompilować go z LESS do CSS natychmiast po zapisaniu pliku źródłowego LESS. Wydaje się to oczywiste, ale nie mogę znaleźć narzędzia, które robi to samo dla JavaScript. Czy takie narzędzie istnieje? Pożądane funkcje: * Jestem na OSX, ale rozwiązanie wieloplatformowe (np. za pomocą Adobe AIR) również byłoby dopuszczalne. * Zostaw uruchomiony zminimalizowany/ukryty, automatycznie obserwuje określony folder pod kątem zmian (bez konieczności klikania przycisku) * Instalacja NodeJS/python/php/etc nie jest uruchamiana. Musi być całkowicie samowystarczalny. * Szczególnie zainteresowany, jeśli automatycznie połączy wszystkie pliki z tego samego katalogu. * Albo sortowanie na podstawie nazwy pliku, abym mógł je nazwać "1.library.js", "2.framework.js", "3.app.js" itp., lub... * Zezwól na konfigurację ręcznego sortowania


title: Pobieranie opłat za projekt, w którym zachowujesz IP produktu końcowego

text: Przeczytałem kilka z tych pytań zadawanych tutaj, dotyczących „ile powinienem pobierać za…”, takich jak: Jak mam pobierać opłaty za programowanie rzeczy, których naprawienie zajmuje dwie minuty? Ile powinienem pobierać za aplikację internetową Ile mogę pobierać za tę małą pracę? i są w porządku dla projektów freelancerskich zajmujących się konkretnymi klientami dla konkretnego produktu. Moja sytuacja jest trochę kręta, a mianowicie: ile powinienem zapłacić firmie za opracowanie produktu, w którym zachowam „własność intelektualną” produktu końcowego. Współpracuję z firmą nad stworzeniem aplikacji internetowej, która pomoże w niektórych procesach administracyjnych. Pomysł na ten projekt zrodził się między mną a pracownikiem firmy poza godzinami pracy. W ten sposób pomysł na produkt został następnie przedstawiony firmie i są bardzo zainteresowani tym, abym dla nich rozwinął ten pomysł. Dyrektor finansowy firmy chce mi zapłacić za czas poświęcony na rozwój tego produktu, ale chciałbym również posiadać IP tego produktu i odsprzedać go innym firmom, gdy zostanie ukończony. Kiedy spotykamy się, aby omówić uczciwe zarobki, jaki byłby najlepszy sposób, aby się ustawić? Przypuszczalnie w przyszłości z gotowym produktem byłaby to platforma oprogramowania typu „fee for service”, w której firma kupowałaby miejsca (miesięcznie lub rocznie). Ale nie jestem pewien, jak traktować tego „partnera” rozwoju. Ich wkład obejmowałby pomoc w dostosowaniu produktu do ich potrzeb, a także debugowanie i testowanie. Czy powinienem naliczać stawkę godzinową? Ryczałt? A może zacząć od razu z miesięczną subskrypcją? Ten projekt jest robiony na boku, nadal mam codzienną pracę.. Ale zainwestuję dużo czasu w ten projekt, ponieważ ma on duży potencjał. (jeśli to wpływa na którekolwiek z nich)


title: Jak częściowo dodać przestrzeń nazw PHP do biblioteki bez łamania istniejącego kodu?

text: Moja firma przez lata tworzyła modułowy framework PHP, zaczynając na długo przed dodaniem przestrzeni nazw w PHP 5.3. Ostatnio zdecydowaliśmy się zacząć używać przestrzeni nazw w nowym kodzie naszej biblioteki i ostatecznie zamierzamy używać przestrzeni nazw starego kodu. Jednak mamy kilka problemów, które próbujemy rozwiązać, aby ustalić, czy dodawanie przestrzeni nazw do bazy kodu przed wersją 5.3 nie jest po prostu dobrym pomysłem: wszystkie klasy globalne nie potrzebują przedrostka `\`? 2. Jeśli przestrzeń nazw stanowi istniejącą klasę w naszej bibliotece, w jaki sposób możemy zapobiec zepsuciu wszystkich istniejących projektów, gdy tylko framework zostanie zaktualizowany? Na przykład, czy biblioteka może zmienić nazwę klasy `ThemeEngine` na `\module\theme\ThemeEngine`, ale istniejące strony internetowe wywołują `ThemeEngine` bez **żadnej** modyfikacji kodu? Jeśli tak, jak wyglądałby ten kod?


title: Jak określić, które pomysły na projekty będą działać jako kreator życiorysów?

text: Od prawie 3 lat programuję prawie wyłącznie w C/C++ (nie licząc studiów) i czuję się w stagnacji (nie wspominając o pracy nad zastrzeżonym kodem przez większość czasu). Postanowiłem więc zmienić ścieżkę kariery i wskoczyć do tworzenia stron internetowych, ucząc się Railsów. Problemem nie jest nauka, ale zdobycie pracy w Railsach/web developerach. Ponieważ nie mam żadnego prawdziwego doświadczenia w pracy w RoR, jedynym sposobem, aby zostać zauważonym, są projekty poboczne. Istnieje wiele podstawowych porad dotyczących tworzenia CV w nowej technologii: na przykład tworzenie projektu w serwisie GitHub. Ale będąc nowicjuszem w całym świecie tworzenia stron internetowych, nie wiem, co składa się na dobry projekt, który pokazuje, że jestem dobrym programistą, a nie tylko zapalonym entuzjastą: rzeczy takie jak moja metodologia testowania, standardy kodowania, wzorce projektowe, praktyki programowania i wkrótce. Jak wymyślić projekt, który zademonstruje te rzeczy?


Czy interfejs API powinien być świadomy wersji klienta? Pomysł na to naprawdę idzie pod prąd, ale wygląda na to, że jest to forsowane w moim obecnym projekcie. Czy się mylę? Czy mogę uzyskać jakieś powody za lub przeciw, które mogę przedstawić lub zrozumieć, dlaczego może to być dobre. API to RESTful API.


title: Znalezienie ścieżki dla mistrzów (CS lub HCI lub jakiś inny szlak)?

text: Jestem studentem studiów licencjackich na kierunku Elektronika i Komunikacja na mojej uczelni. W trakcie studiów zacząłem pracować nad kilkoma projektami związanymi z CS. Komputery są moim ulubionym od samego początku, przez te trzy lata pracowałem nad moją pasją zdobywając nagrody, pisząc pracę, robiąc projekty itp. Obecnie jestem na czwartym roku i myślę o całkowitym przestawieniu się na CS dla mistrzów. Zawsze pracuję nad budowaniem innowacyjnych rozwiązań problemów takich jak oprogramowanie dla niepełnosprawnych, coś dla edukacji, czy to oprogramowanie dla środowiska itp. Nie ma określonego tematu na rozwiązania, ale innowacyjność i nowość to z pewnością to, za czym tęsknię przy planowaniu nowatorskich rozwiązań. Problem w tym, że nie jestem w stanie znaleźć właściwej ścieżki dla mistrzów, tzn. dywersyfikacja kursów zbiera żniwo. Przeważnie są kursy HCI na uniwersytetach, które koncentrują się na budowaniu tych innowacyjnych rozwiązań, ale próbowałem równolegle MS w CS i MS w HCI. Wygląda na to, że bardziej skupiam się na typie rysowania / sztuki, jeśli jest to rzecz w HCI, której nie chcę iść dalej, ale to, czego chcę, to tworzenie kreatywnych rozwiązań z pomysłowością techniczną. Osoba w HCI ma również te same umiejętności techniczne, co student CS, więc gdzie pojawia się różnica? Powiedzmy, jako bardzo dziwny przykład, czy student HCI może ubiegać się o stanowiska SDET na przykład w dużej firmie, zamiast projektowania doświadczeń użytkownika itp., skoro ma ten sam zestaw umiejętności? Lub, jeśli chodzi o monetarne zwroty, czy jest różnica między zarobkami absolwentów CS i absolwentów HCI? Nie chcę pozostawać w interakcji zaprojektowanej przez składanie tylko papierowych projektów rzeczy. Chcę wyjść na powierzchnię z bardziej pomysłowymi pomysłami. Na obecnym etapie powstrzymuje mnie to, że jestem trochę gorszy niż techniczny know-how w porównaniu do pełnoetatowego studenta CS, ponieważ sam włożyłem wysiłek w przygotowanie wszystkich CS (będąc studentem CS). Obecnie, realizując te projekty, muszę dowiedzieć się więcej o CS w renomowanym miejscu. Czy to naprawdę HCI, do którego powinienem się udać, czy jest jakiś inny kontur, o którym nie pomyślałem? Proszę pomóż mi. Dziękuję


title: Korepetycje uczniom, którzy zmagają się z podstawami C++

text: Udzielam korepetycji kilku studentom, którzy mają poważne problemy z opanowaniem podstaw ich pierwszego języka programowania: C++. Znam wielu znakomitych i bystrych uczniów, którzy oblali lub zrezygnowali z pierwszego kursu CS. Wszyscy, których udzielam korepetycji, w podobny sposób opowiadają o swoich doświadczeniach na zajęciach: instruktor porusza się zbyt szybko, nic z wykładów nie ma sensu i in. Przed zajęciami z CS większość z tych uczniów nie wyrażała zainteresowania komputerami jako czymś więcej niż edytorami tekstu, przeglądarkami internetowymi lub inną formą rozrywki. Komputer to czarna skrzynka, która działa, więc po co z nim zadzierać? Domyślam się, że mają problem z połączeniem abstrakcji informatyki ze znanymi pojęciami. Oznacza to, że ci studenci mogą wiedzieć, jak uczyć się matematyki, biologii lub fizyki, ale te techniki nie działają, jeśli chodzi o programowanie. Czy ktoś ma jakieś sugestie lub rady? Uczniowie, którym pomagam, nie zasługują na oblanie tej klasy. Oczywiste jest, że instruktor nie bierze pod uwagę stylu uczenia się tych uczniów. To znaczy, że instruktor nie zawodzi swoich uczniów.


title: Dlaczego prawie żadna strona internetowa nie haszuje haseł w kliencie przed przesłaniem (i ponownym haszowaniem na serwerze), aby „chronić” przed ponownym użyciem hasła?

text: Odpowiednie XKCD Istnieje wiele witryn w Internecie, które wymagają informacji logowania, a jedynym sposobem ochrony przed ponownym użyciem hasła jest „obietnica”, że hasła są zaszyfrowane na serwerze, co nie zawsze jest prawdą. Zastanawiam się więc, jak trudno jest zrobić stronę, która hashuje hasła na komputerze klienckim (za pomocą Javascript), przed wysłaniem ich na serwer, gdzie będą one ponownie haszowane? Teoretycznie nie zapewnia to żadnego dodatkowego zabezpieczenia, ale w praktyce można to wykorzystać do ochrony przed „nieuczciwymi witrynami”, które nie mieszają hasła na serwerze.


title: Jak udostępnić wspólne metody, jeśli obiekty mają różne role?

text: Jeśli dwie klasy mają następujące cechy wspólne: * część sposobu reprezentacji ich stanu (obie mają kontener liniowy) * wiele identycznych metod (identyczny kod, nie tylko sygnatura) Ale nie są zastępowalne, tj.: odgrywają różne role. Jak więc uniknąć powtarzania tych metod? Oczywistym rozwiązaniem byłoby dziedziczenie, ale przeczytałem: „dziedziczenie nie służy do ponownego wykorzystania kodu”. (Czy to ma zastosowanie w tym przypadku? Czy to naprawdę jest przypadek ponownego użycia kodu?) Celowo nie mówię ci, w którym języku, ponieważ mam nadzieję na odpowiedź agnostyczną dla języka. Metody są długie na kilka linii, wszystkie modyfikują kontener, jedna z nich przekształca/wyciąga coś w rodzaju "końcowego wyniku" z kontenera. Przez role mam na myśli: podmiana jednej na drugą byłaby poprawnym uruchamialnym kodem (w miejscach, w których używane są tylko popularne metody), ale skutkowałaby błędem logicznym/semantycznym. Przez dziedziczenie miałem na myśli wprowadzenie 3 klasy jako base/super z powszechnymi metodami, ale to byłoby wirtualne. Tak więc przez podstawienie miałem na myśli podstawienie typu „rodzeństwa”, a nie podtypu.


title: Przedstawiamy polimorfizm nowym programistom

text: Uczę Javy grupę czterech osób od około czterech miesięcy. Wcześniej wszyscy mieli bardzo ograniczone lub nie mieli żadnego innego doświadczenia w programowaniu. Przeszliśmy przez podstawowe struktury kontrolne i ich użycie oraz byliśmy w stanie rozwiązać niektóre z prostszych projektów Eulera. Rzeczy podobne do: int count = 0; for(int indeks = 0; indeks < 1000; indeks++) { if(indeks % 3 == 0 || indeks % 5 == 0) { liczba += indeks; } } System.out.println(liczba); Omówiliśmy również podstawowe rzeczy zorientowane obiektowo, takie jak klasy i ich zastosowania. Jednak nie omówiliśmy jeszcze dziedziczenia ani polimorfizmu. Chciałbym wprowadzić razem dziedziczenie i polimorfizm, ale nie jestem pewien, jak właściwie wytłumaczyć polimorfizm komuś, kto nigdy wcześniej go nie widział ani nie słyszał. Podsumowując moje pytanie w kilku słowach, szukam skutecznego sposobu na wprowadzenie polimorfizmu do nowych programistów.


title: Kiedy podzielić projekt na wiele podprojektów

text: Chciałbym wiedzieć, czy ma sens dzielenie projektu, nad którym pracuję, na dwa repozytoria zamiast jednego. Z tego co mogę powiedzieć: * Frontend będzie napisany w html+js * Backend w .net * Backend nie jest zależny od frontendu, a frontend nie jest zależny od backendu * Frontend będzie używał spokojnego API zaimplementowanego w zaplecza. * Frontend może być hostowany na dowolnym statycznym serwerze http. Obecnie repozytorium ma następującą strukturę: root: * frontend/* * backend/* Myślę, że błędem jest trzymanie obu projektów w tym samym repozytorium. Ponieważ oba projekty nie mają zależności między sobą, powinny należeć do poszczególnych repozytoriów i w razie potrzeby do repozytorium nadrzędnego, które ma submoduły. Powiedziano mi, że to bezcelowe i że nie odniesiemy z tego żadnych korzyści. Oto niektóre z moich argumentów: * Mamy dwa moduły, które nie zależą od siebie. * Posiadanie historii źródłowej obu projektów w dłuższej perspektywie może skomplikować sprawy (spróbuj poszukać w historii czegoś w interfejsie, gdy masz połowę zatwierdzeń, które są całkowicie niezwiązane z błędem, którego szukasz) * Konflikt i scalanie ( To nie powinno mieć miejsca, ale posiadanie kogoś, kto będzie pchał do backendu, zmusi innego programistę do wycofania zmian backendowych w celu wypchnięcia zmian frontendowych.) * Jeden programista może pracować tylko na backendzie, ale zawsze będzie musiał ściągać backend lub na odwrót. * Na dłuższą metę, kiedy nadejdzie czas na wdrożenie. W pewien sposób frontend można wdrożyć na wielu serwerach statycznych, mając jeden serwer zaplecza. W każdym przypadku ludzie będą zmuszeni albo sklonować za jego pomocą cały backend, albo stworzyć niestandardowy skrypt, który wypchnie na wszystkie serwery tylko frontend lub usunie backend. Łatwiej jest po prostu push/pull tylko frontend lub backend niż oba, jeśli potrzebny jest tylko jeden. * Kontrargument (jedna osoba może pracować nad obydwoma projektami), Stwórz trzecie repozytorium z submodułem i rozwijaj się z nim. Historia jest podzielona na poszczególne moduły i zawsze możesz tworzyć tagi, w których wersja backendu/frontendu naprawdę współpracuje ze sobą w synchronizacji. Posiadanie obu frontend/backendów w jednym repozytorium nie oznacza, że będą ze sobą współpracować. To po prostu połączenie obu historii w jedno wielkie repozytorium. * Posiadanie frontendu/backendu jako podmodułów ułatwi sprawę, jeśli chcesz dodać freelancera do projektu. W niektórych przypadkach tak naprawdę nie chcesz dawać pełnego dostępu do bazy kodu. Posiadanie jednego dużego modułu utrudni sprawę, jeśli chcesz ograniczyć to, co „postronni” mogą zobaczyć/edytować. * Wprowadzenie i naprawa błędu, wstawiłem nowy błąd w interfejsie. Następnie ktoś naprawi błąd w backendzie. W przypadku jednego repozytorium wycofanie przed nowym błędem spowoduje również wycofanie backendu, co może utrudnić naprawę. Musiałbym sklonować backend w innym folderze, aby backend działał podczas naprawiania błędu we frontendzie... potem próbowałem odtworzyć wszystko... Posiadanie dwóch repozytoriów będzie bezbolesne, ponieważ przenoszenie HEAD jednego repozytorium wygrało nie zmieniaj drugiego. A testowanie na innej wersji backendu będzie bezbolesne. Czy ktoś może mi podać więcej argumentów, aby go przekonać lub chociaż powiedzieć, dlaczego nie ma sensu (bardziej skomplikowane) dzielenie projektu na dwa podmoduły. Projekt jest nowy, a baza kodu ma już kilka dni, więc nie jest za wcześnie na naprawę.


title: RESTful URI, tworzenie nowego rzeczownika/uri lub dodanie parametru zapytania

text: Mam klasę Person z relacją jeden do wielu z zatrudnieniem. Osoba w CRM może mieć wiele Zatrudnień (dane historyczne). Mój obecny identyfikator URI REST dla tej klasy wygląda tak: http://domena/persons GET [kolekcja] http://domena/persons/{id} GET [zasób] http://domena/persons/{id}/zatrudnienia GET [kolekcja] Aby uzyskać CURRENT aktywne zatrudnienie (czyli zatrudnienie, w którym endDate jest NULL), czy powinienem utworzyć URI, czy należy to zrobić za pomocą QueryParam? Zasadniczo powinienem to zrobić: http://domain/persons/{id}/employments/current GET [zasób] lub http://domain/persons/{id}/employments?current GET [kolekcja z filtrem parametrów zapytania] I Myślę o drugim (z parametrem zapytania), ponieważ o ile rozumiem REST, zasób powinien być identyfikowany z niezmiennym identyfikatorem URI. Ponieważ obecne stanowisko pracy może się zmienić, należy to zrobić za pomocą QueryParam. Jakie są twoje sugestie?


title: Quiz C, zagadki zaciemnione C

text: Uważam, że jestem dobrym programistą C. Potrafię rozwiązać pytanie na poziomie początkującym w google code jam. Rozwiązałem wszystkie przykłady programowania w KN kings: programowanie w C. Biorąc pod uwagę problem, mogę wyrazić jego rozwiązanie w C (prawdopodobnie nie jest dobre, ale przez większość czasu działa z brutalną siłą). Kilka dni temu zarejestrowałem się na quiz C. I dzisiaj wziął udział w quizie. Od początku do końca byłem zdezorientowany, przez większość czasu czułem się odrzucony i nieszczęśliwy. Nie mogłem zrozumieć, co zrobiła większość pytań. To było dla mnie tajemnicze. Na przykład użyłem pętli for prawie 1000 razy, ale pętle for w tym quizie były po prostu tajemnicze i mylące. Większość pytań wyglądała na nielegalną składnię. Po teście poczułem się przygnębiony i wysłałem to pytanie. Chcę wiedzieć, czy rozwiązywanie zagadkowego kodu czyni cię dobrym czy świetnym programistą?. Proste rozwiązanie prostego pytania jest lepsze niż tajemnicze zamieszanie, prawda?. Jeśli naprawdę dobrze wypadłem w teście, co to oznacza? Jeśli wykonałem średnio lub źle, co to oznacza?. O tak, dostanę papier z quizu w poniedziałek i zaktualizuję ten poniedziałek wieczorem około 7:30. (GMT +5:30). Dzięki za troskę. Swoją drogą do diabła z wami ludzie, którzy zagłosowali na ten post. Wy, ludzie, nie możecie czekać na zmiany lub nie macie cierpliwości, żeby przynajmniej kogoś posłuchać. Nadal uważam, że w tym pytaniu nie ma nic złego i nie usunę go.


title: Dystrybucja oprogramowania na licencji GPL, które opcjonalnie łączy się z bibliotekami nie objętymi licencją GPL

text: Mogę znaleźć wiele informacji dotyczących ograniczeń nałożonych na łączenie bibliotek na licencji GPL z oprogramowaniem nie na licencji GPL. Chciałbym jednak zrobić coś odwrotnego - chciałbym rozpowszechniać oprogramowanie na licencji GPLv3, które ma opcję dynamicznego łączenia się z zastrzeżoną biblioteką współdzieloną. Zastrzeżona biblioteka nie stanowiłaby istotnego elementu działającego oprogramowania, ponieważ istnieją inne biblioteki open source (na licencji BSD), które można by zamiast tego podłączyć w czasie wykonywania (w szczególności myślę o połączeniu MKL BLAS z ATLAS, OpenBLAS itp.) . Znalazłem tę odpowiednią sekcję w FAQ GPL. * Czy to oznacza, że musiałbym jawnie przyznać wyjątek dla każdej możliwej biblioteki współdzielonej nie objętej licencją GPL, do której użytkownik może wybrać łącze w czasie wykonywania? * Czy muszę pisać wyjątki dla bibliotek, które są open source, ale nie są na licencji GPL (np. BSD)? * Jeśli biblioteka, do której linkujesz, nie jest objęta wyjątkiem (np. jeśli jest na licencji GPL lub LGPL), jaki byłby mój obowiązek rozpowszechniania kodu źródłowego tej biblioteki?


title: Jak rozwiązać spór dotyczący tytułu? Główny Programista/Programista i Konsultant

text: Pracuję nad projektem (oprogramowaniem) dla organizacji. Ktoś inny z tej organizacji zapytał, czy mógłbym coś zbudować dla organizacji. Zrobiłem to właściwie za darmo, bo chciałem wesprzeć tę organizację. Teraz pojawia się problem. Ta druga osoba wróciła i poprosiła mnie o dopracowanie tytułów/kredytów, które nam dano na ekranie informacyjnym. Ale on chce być nazywany głównym programistą, a mnie głównym programistą. Rzecz w tym, że nie dodał żadnego kodu do tej aplikacji. Chodzi o to, że czuję, że opracowałem/zaprogramowałem/zaprojektowałem całość. Zrobiłem 100% rzeczywistego produktu, w tym projekt. Jego wkład polegał na tym, czy możemy mieć tło w określonym kolorze (do projektowania) lub jak szybko „my” możemy włączyć inną funkcję. Może jestem jednostronny, ale technicznie rzecz biorąc, druga osoba nie ma żadnego „rozwojowego” zastosowania. Nadal cieszę się, że go mam, ponieważ jest moim kontaktem w organizacji i zainteresował się produktem, ale nie wiem, czy tytuł pasuje. Jak myślisz, jaki jest najlepszy tytuł/rozwiązanie? Czy jestem narcyzem/martwi się rzeczami, które nie mają znaczenia? Powiem jaśniej 1. Koleś pyta mnie, czy mogę coś zrobić 2. Mówię tak. Chcę pomóc organizacji, dla której pracuje (produkt nie jest nastawiony na zysk) 3. Buduję rzecz z designem i innymi rzeczami 4. Pierwsze uruchomienie. 5. Sugeruje pewne zmiany w projekcie, może funkcję. 6. Zmieniam + dodaję funkcje 7. Całkiem udany, generuje zainteresowanie powiększaniem 8. A potem kwestia tytułu Czy Lead Consultant byłby dobrym wyjściem z tego?


title: Unikanie problemów podczas kopiowania kodu

text: Od czasu do czasu kopiuję kawałek kodu i modyfikuję skopiowaną wersję. Bardzo dobrze wiem, że posiadanie dwóch kopii tego samego kodu to bardzo zły pomysł, ale te fragmenty kodu są małe i mają znaczące różnice. Problem polega na tym, że modyfikując kopię, czasami zapominam fragment oryginału, którego nie powinno tam być. Na przykład najpierw piszę (kod C#, ale to nie jest tutaj ważne): if (DateFrom != null) query = query.Where(x => x.Date >= DateFrom.Value); następnie kopiuję i wklejam i modyfikuję w następujący sposób: if (DateTo != null) query = query.Where(x => x.Date < DateFrom.Value); co nie jest poprawne, ponieważ w drugim wierszu powinna znajdować się `DateTo` zamiast `DateFrom`. Co byś zaproponował, aby uniknąć tego rodzaju błędu?


title: Podwójna helisa HTML 5/DNA

text: Jaki byłby najbardziej przyjazny dla wielu przeglądarek (IE9, Chrome, FF, Safari, Opera) sposób kodowania animowanej, interaktywnej podwójnej helisy? HTML 5/JavaScript jest w porządku. Flash lub Java nie. Nie jestem pewien, czy płótno, svg lub czysty css powinny być traktowane, ponieważ grafika nie jest typowo moja. W rzeczywistości naprawdę nie wiem, od czego zacząć, więc prawdopodobnie potrzebuję tylko popchnięcia we właściwym kierunku. Wszelkie porady są mile widziane!


title: Czy łamigłówki z kodowania tworzą dobre pytania do rozmowy kwalifikacyjnej?

text: Przeprowadzam rozmowy kwalifikacyjne na stanowiska programistów Java. Mój kolega upiera się, że ponad połowę rozmowy kwalifikacyjnej wypełniają łamigłówki kodowania java. Jego zdaniem, jeśli kandydaci potrafią poruszać się po pętlach, muszą być dobrzy. Jednym z takich przykładów łamigłówki kodowania jest i=0; for( i=1 ; i< 10 ;i++) { if(i%3 ==0) i++; przerwanie; jeśli(i%2 ==0) i++; } print(i); Kontynuacja: co się stanie, jeśli przerwa zostanie usunięta?


title: Jak przestać rozwodzić się nad problemami, a nie zadaniami?

text: Nie mogę powiedzieć, że jestem dobrym programistą, ale zarabiałem na programowaniu przez ostatnie dekady. Myślałem, że urodziłem się dla programowania i ludzie mówili, że jestem w tym bardzo dobry - w pewnym momencie. Ale po 10 latach programowania czuję, że moja efektywność programowania nie jest tak dobra jak innych. Oczywiście edukacja CS jest teraz o wiele lepsza i wielu młodych programistów jest mądrzejszych ode mnie. Ale jednym z moich problemów jest to, że kiedy wykonuję zadanie, mam tendencję do skupiania się na konkretnych problemach, z którymi się zmagam, zamiast skupiać się na wykonaniu zadania. Rozumiem, że ciągłe myślenie o tym nie rozwiązuje problemu. Ale zwykle to robię i łatwo się wyczerpuję. Mam nadzieję, że nie tylko ja czuję się w ten sposób. Czy czułeś to samo uczucie? Jeśli tak, jak pozbyłeś się tego okropnego nawyku?


Mój dział planuje pracować nad kilkoma kolejnymi wydawnictwami (obejmującymi rok) jednocześnie. Moce, które opowiadają, wspieramy to poprzez refaktoryzację całego kodu, którego dotyczy problem, na klasy takie jak AbstractGizmo, R1Gizmo, R2Gizmo itp. i używamy konfiguracji (przez Spring i/lub ANT) do kontrolowania, które klasy są używane w konkretnym wydaniu. Pozornie ma to oszczędzić nam pracy polegającej na łączeniu zmian w wielu gałęziach, zwłaszcza gdy zmiany znajdują się we wspólnym kodzie. Jednak widzę to jako jasne przypadki rozgałęziania i łączenia w kontroli wersji (w naszym przypadku TFS). Jednak mam bardzo małe doświadczenie w projektach, które mają takie aktywne strumienie rozwoju. Jestem pewien, że inni mają (jak Microsoft, z Windows XP, Vista i 7). Jaki jest najlepszy sposób obsługi wielu jednoczesnych „strumieni” rozwoju w kontroli wersji? Rozgałęziasz i scalasz zmiany w kontroli wersji, starasz się rozwijać wszystko w jednej gałęzi i używasz skryptów konfiguracyjnych lub budujących do asemblacji innej wersji, czy czegoś innego? PS Używamy TFS w tej chwili, ale nasza strategia kontroli wersji może nie być przez to ograniczona. Mój współpracownik naciska, aby przejść na Gita lub Mercuriala i wygląda na to, że ma trochę przyczepności.


title: Jakie są podobieństwa między Perlem a Javą?

text: Jestem przekonany, że uczę się Javy jako drugiego języka (jestem programistą Perla). Ale po przeczytaniu kilku samouczków online naprawdę nie mogę znaleźć między nimi żadnych podobieństw. Co zrozumiem podczas nauki języka Java?


title: FOSS Development: kto opracowuje pakiety specyficzne dla systemu operacyjnego?

text: Mam kilka projektów FOSS. Mogą być trochę kłopotliwe w uruchomieniu, chyba że masz już zależności, co, jak sądzę, jest normalne w przypadku projektów FOSS. Wiemy, że każdy darmowy system operacyjny ma swoje własne systemy zarządzania pakietami. Kilka z nich, takich jak homebrew na Mac OS czy AUR na Arch linux, jest bardzo przyjaznych dla wkładu społeczności. Zastanawiam się, kto dokładnie ma wnosić pakiety? Przede wszystkim zajmuję się przypadkiem małych lub rozwijających się projektów, ponieważ jest to dość standardowe, aby duże projekty były tam umieszczane przez opiekunów systemu operacyjnego. Z mojej perspektywy jest to coś w rodzaju problemu z jajkiem kurzym, ponieważ twoje oprogramowanie nie trafi do systemu pakietów, jeśli nie ma użytkowników, i jest mniej prawdopodobne, że zdobędzie użytkowników, jeśli nie będzie łatwe w instalacji i obsłudze . Na potrzeby dyskusji załóżmy, że oprogramowanie, o którym mowa, jest rzeczywiście użyteczne. Widzę, gdzie ludzie mogą tworzyć crapware lub spam, a to oczywiście powinno być trzymane z dala od jakiegokolwiek systemu pakietów. Podsumowując, czyja to praca? Czy umieszczanie własnej pracy w różnych repozytoriach pakietów systemu operacyjnego jest spamem dla programisty FOSS?


title: Ujawnianie ostrzeżeń\błędów z obiektów danych (które są również zwracaną listą)

text: Uwidaczniam obiekty danych za pośrednictwem zestawu zorientowanego na usługi (który w przyszłych zastosowaniach może stać się usługą WCF). Obiekt danych jest zaprojektowany w formie drzewa, a także utworzony z przydzielonych właściwości. Co więcej, niektóre usługi zwracają jeden obiekt, inne pobierają ich listę (w ten sposób uniemożliwia zgłaszanie wyjątków). Teraz chcę ujawnić ostrzeżenia dotyczące przepływu danych i zastanawiam się, jaki jest najlepszy sposób, aby to zrobić, mając na uwadze następujące kwestie: (1) separacja (2) łatwość dostępu. Z jednej strony chcę, aby zespół interfejsu użytkownika mógł uzyskać dostęp do ostrzeżeń (lub błędów) pól bez konieczności mapowania nazw pól na zewnętrzne źródło, ale z drugiej strony nie chcę, aby ostrzeżenia były „zawieszone” na sam obiekt (bo nie widzę w nim poprawnego projektu). Pomyślałem o stworzeniu nowego typu wrappera dla każdego pola, który będzie eksponował zdarzenia, a oni będą musieli rejestrować to, na którym im zależy (ale zupełnie nie jestem pewien). Chętnie wysłucham twoich przemyśleń. Czy mógłbyś skierować mnie do szanowanego wzorca projektowego? jaki wzór sprawdzi się tutaj najlepiej?


title: Jak zabrać się za „przejęcie” projektu open-source?

text: Jest projekt open-source, który mnie interesuje i regularnie używam. Jest on objęty licencją Apache License 2.0 i praktycznie nie ma już żadnej aktywności. Jest hostowany w Google Code i jestem zainteresowany jego dalszym rozwojem. Jestem nowy w procesie open source i staram się znaleźć odpowiedni sposób, aby to zrobić. Czy mogę to po prostu sprawdzić i wrzucić na github, abym mógł tam kontynuować jego rozwój na otwartej przestrzeni? Czy powinienem najpierw skontaktować się z „właścicielem” projektu? Poza tym, czy zostawiam wszystkie informacje o autorze na górze klas itp., mimo że zamierzam wprowadzać zmiany... (zakładam, że odpowiedź brzmi tak)? Ponadto, w jaki sposób mam praktycznie przestrzegać wymogu licencji „wszystkie modyfikacje są wyraźnie oznaczone jako dzieło modyfikatora”? Czy umieszczam komentarz przy każdej dokonanej przeze mnie zmianie? Jakiekolwiek wskazówki dotyczące tego, jaki jest tutaj normalny kurs / standard, byłyby bardzo mile widziane?


title: Czy klasa powinna sprawdzać poprawność argumentu przy użyciu zewnętrznej metody/usługi z testowaniem jednostkowym?

text: Mam klasę, która działa jako usługa i zwraca kod html strony internetowej, gdy jest dostarczany z adresem URL. Kod: interfejs publiczny IHtmlDownloader { IWebProxy Proxy { get; ustawić; } string UserAgent { get; ustawić; } string GetHtml(string url) } public class HtmlDownloader : IHtmlDownloader { WebClient _client; publiczne proxy IWebProxy { get { return _client.Proxy; } ustaw { _klient.Proxy = wartość; } } ciąg publiczny UserAgent { get { return _client.Headers[HttpRequestHeader.UserAgent].ToString(); } set { _client.Headers[HttpRequestHeader.UserAgent] = wartość; } } public HtmlDownloder() { _client = new WebClient(); } ciąg publiczny GetHtml(string url) { this.CheckValidity(url); var htmlOfWebsite = _client.DownloadString(url); return htmlOfWebsite; } } Teraz nie jestem pewien, jak dokładnie powinienem sprawdzić poprawność adresu URL. Wiem, że nie powinien to być null, spacja ani nic innego, ale czy powinienem sprawdzić, czy rzeczywiście jest to poprawnie zbudowany adres URL? Spowoduje to powstanie metody, która wykona walidację. Mógłbym po prostu utworzyć publiczną metodę statyczną wewnątrz `HtmlDownloader`, aby osoba wywołująca mogła zweryfikować adres URL, a może nawet nie statyczną (`GetUrl(string url)` jest w końcu wywoływana po utworzeniu instancji obiektu), ale byłaby błędna z co najmniej dwóch powodów: 1. Byłby to walidator mający zastosowanie w tak wielu miejscach i powinien być dostępny dla innych klas. 2. Nie mogę zakontraktować metody statycznej z interfejsem. Co więcej, nie powinien być statyczny, ale raczej usługą, abym mógł przetestować `HtmlDownloader` (usługa byłaby wstrzykiwana przez konstruktor). Wszystkie te pomysły są dość okropne i zaczynam myśleć, że nie powinienem niczego sprawdzać, ale po prostu utworzyć blok `try/catch`, który przechwyciłby właściwy wyjątek, a następnie wyrzucił wyjątek UrlNotFoundException z oryginalnym wyjątkiem dostarczonym przez InnerException . Mimo to dobrze byłoby sprawdzić poprawność adresu URL. Ale komu i jak? Czy dzwoniącemu należy wstrzyknąć odpowiednią usługę? Ale co się stanie, jeśli adres URL zostanie wygenerowany wyżej niż wywołujący, a wywołujący po prostu przekaże go do HtmlDownloader? Gdzie powinienem sprawdzić poprawność adresu URL? A może prosty fakt, że adres URL musi przejść przez kilka poziomów, to zapach kodu?


title: Jakie systemy liczbowe są przydatne w informatyce?

text: Zastanawiam się, jakiego systemu liczbowego używają różni programiści lub używaliby, jeśli ich język ma dla nich obsługę. Jako przykład, w C++ możemy użyć: * ósemkowe, poprzedzony 0 (np. `0377`) * domyślnie dziesiętny (np. `255`) * szesnastkowy, poprzedzony 0x (np. `0xff`) Podczas pracy z maską bitową, ja używam szesnastkowego, ale czasami chciałbym mieć możliwość bezpośredniego wyrażania liczb binarnych. Wiem, że jakiś język programowania obsługuje to ze składnią 0b (np. `0b11111111`). Czy jest jakiś inny system numeryczny przydatny w jakiejś dziedzinie informatyki (np. kryptografia, kodeki, grafika 3D itp.)?


title: Python porównuje wartości z 2 kolumn z dwóch oddzielnych plików CSV

text: Używam Pythona. Mam dwie kolumny (w oddzielnych plikach CSV), które zawierają tag ID. Idealnie chciałbym dodać kolumny informacji z jednego pliku CSV do drugiego za każdym razem, gdy pasuje tag ID. W większości przypadków tagi są wykonywane ręcznie, jednak może się zdarzyć, że brakuje jednego identyfikatora, a jeśli tak się stanie, chciałbym, aby po prostu kontynuował. Oto przykład danych: Od 1: ID 1 2 3 4 5 Od 2: ID ZmiennaX Brak zmiennej Y.......................... ............. 2 X1 Y1 brak .................................. ....... 4 x4 y4 5 x5 y5 Chciałbym wziąć wartości ze zmiennych xiy i dodać te kolumny do pierwszego pliku (z samymi identyfikatorami) zawsze, gdy identyfikatory pasują do każdego pliku. Kolejna rzecz, na którą warto zwrócić uwagę, te identyfikatory będą pojawiać się od czasu do czasu (może co 3-400 razy). Jeśli ktoś mógłby pomóc w tym temacie, bardzo bym to docenił! Dziękuję Ci!


title: implementacja dynamicznej obsługi zapytań na danych historycznych

text: **EDYTUJ :** _Udoskonalone pytanie, aby skoncentrować się na głównym problemie_ Kontekst: Mam dane historyczne dotyczące sprzedaży nieruchomości (domów) zebrane z różnych źródeł w scentralizowanym źródle danych w chmurze (załóżmy, że gromadzeniem informacji zajmuje się strona trzecia) opracować aplikację do wyszukiwania i pobierania danych z tego scentralizowanego źródła danych Przykładowe zapytania: **Proste** : dla podanego kodu pocztowego XYZ, jaka jest średnia cena domu dla domu z 3 sypialniami? **Kompleks** : Jaka jest szacunkowa cena domu pod adresem „DD,Some Street,XYZ Post Code” (obliczona na podstawie średnich wartości danych historycznych przefiltrowanych według różnych cech domu: kod pocztowy domu, liczba pokoi, całkowita powierzchnia i inne szczegółowe informacje, takie jak typ budynku, rok budowy, cechy)? Oprócz średniej ceny aplikacja powinna obsługiwać inne informacje o nieruchomości ** cena maksymalna lub minimalna..etc oraz trend (wykres) wybranego atrybutu nieruchomości w okresie**. Dlatego zapytania nie powinny wymuszać wyszukiwania na podstawie klucza podstawowego lub kilku stałych pól. Innymi słowy, zapytania mogą być Jak zmieniła się cena domu z 3 sypialniami (niezależnie od lokalizacji) w ciągu ostatnich 30 dni? Jakie nieruchomości możemy uzyskać za cenę X (niezależnie od lokalizacji lub typu domu) Wyzwaniem jest identyfikacja domeny (BI/ Data Analytical lub DB Design lub DB Query Interface lub związane z DW lub coś innego) ten problem (zapytanie dynamiczne na danych historycznych) należą, abym mógł dalej eksplorować **Moje dotychczasowe ustalenia** Mogę się mylić co do poniższych, więc proszę o poprawienie mnie jeśli tak sądzisz. Pokrótce przeczytałem o BI/Data Analytics - myślę jest ciężkim rozwiązaniem mojego problemu i ma problemy ze skalowalnością. DB Design - Jak rozumiem, RDBMS działa dobrze, jeśli znasz model danych w czasie projektowania. Oczekuję, że atrybuty dotyczące własności lub innego podmiotu (użytkownika), który wprowadzę, szybko ewoluują. stąd utrzymanie byłoby problemem. Ponieważ mam zamiar mieć wielu użytkowników wykonujących zapytania w tym samym czasie, wydajność będzie wąskim gardłem. Inne opcje, takie jak Graph DB (http://www.tinkerpop.com/) wydają się być nieco złożone (są dobre, ale korzystanie z tych narzędzi przeznaczone do celów ogólnych, sprawiają, że myślę jak programowanie w asemblerze, aby rozwiązać mój problem) Rozwiązanie związane z BigData polega na analizie danych z wielu niepowiązanych domen. Czy masz jakieś sugestie dotyczące miejsca, w którym ten problem pasuje? (Szczególnie, jeśli masz doświadczenie w projektowaniu/wdrożeniu back-endu dla ofert nieruchomości lub podobnych portali)


title: Niezmienniczość pętli a twierdzenia

text: W tę sobotę mam egzamin z koncepcji programowania i staram się znaleźć informacje, aby lepiej zrozumieć niektóre koncepcje. Jaka jest różnica między niezmiennikiem pętli a asercją? Dla mnie wyglądają tak samo. Czym dokładnie jest twierdzenie o niezmienności pętli `while`? Nie wiem, czy to ja, czy śmiesznie trudno jest znaleźć w sieci jakieś konkretne informacje o algorytmach i pseudokodzie.


Przeczytałem tutaj na P.SE więcej pytań, w których początkującym programistom zaleca się wybranie Pythona jako pierwszego języka programowania. Nie zrozum mnie źle, lubię Pythona. Bardzo to lubię! Ale jego filozofia obraca się wokół "Wszyscy zgadzamy się tutaj na dorosłych". Z punktu widzenia doświadczenia/wiedzy początkujący programista nie jest osobą dorosłą. Co w takim razie oznacza, że łatwiej jest strzelić sobie w stopę i nabrać złych nawyków, nawet jeśli przeżyjesz ranę. Myślę, że w „bardziej statycznym” języku byłoby trudniej strzelić sobie w stopę, bo będzie to bardziej restrykcyjne. Wracając do mojego pytania. Dlaczego Python jest zalecany jako podstawowy język programowania? Jakie są punkty, które sprawiają, że jest to dobre do nauczania języka programowania. A może... to osobiste preferencje doradcy?