title: Aplikacja PHP inżynierii wstecznej bez czytania (brzydkiego) kodu

text: Mam nowego klienta, który ma tę aplikację PHP. Został napisany przez jednego programistę, który chciał „stworzyć jeszcze jeden framework” w 2005 roku. Około 3 lata później programista opuścił firmę, a wraz z nim całą wiedzę na temat tego, co faktycznie robi. Teraz, gdy aplikacja już weszła do produkcji, menedżer zatrudnił jeszcze kilku programistów / freelancerów (którzy też nie są już dostępni), aby naprawiali błędy tu i tam i rozwijali trochę więcej funkcji. Niektórzy próbowali przestrzegać nieudokumentowanych wytycznych oprogramowania, inni nie. Możesz sobie wyobrazić, jak wygląda dzisiaj kod… to kompletny bałagan! Rozmawiałem z menedżerem i powiedziałem mu, co myślę o jego oprogramowaniu i udało mi się go przekonać, żeby naprawdę pomyślał o przepisaniu tej cholernej rzeczy. Ale tutaj pojawia się mój problem: aby móc oszacować wysiłek potrzebny do przepisania, musiałbym wiedzieć, co robi ta rzecz. Menedżer może mi powiedzieć ze swojej perspektywy, co robi, ale po prostu nie ma na ten temat wiedzy technicznej. I jak w przypadku każdego oprogramowania, które rozwijało się przez lata, istnieją te „specjalne przypadki brzegowe”. Zasadniczo moim pomysłem jest "nagrywanie/rejestrowanie" systemu na żywo przez kilka tygodni, aby faktycznie uzyskać techniczne, nieco kompletne wnioski dotyczące tego, co ta rzecz robi przez większość czasu i jakie rzeczy rzadko są dotykane/używane. Np. jakie było żądanie i jaką drogą poszło, aby renderować wyniki. Czytanie i próba zrozumienia kodu jest niemożliwe. Pomogłoby jednak zobaczyć, które klasy/funkcje są wywoływane, a następnie je przeczytać/zrozumieć. Czy jest więc jakieś narzędzie do rejestrowania/rejestrowania żądań/odpowiedzi HTTP i wykresu wywołań aplikacji php, którą wyzwoliła? Najlepiej coś, co nie musiałoby być wpisane w kod? Porzuciłem PHP lata temu i jestem trochę zardzewiały z moim narzędziem PHP i standardowym zestawem narzędzi bibliotecznych, aby wiedzieć coś, co mogłoby mi tutaj pomóc.


title: Firma chce przenieść swoje programy do nowego frameworka/koncepcji - jakie są opcje?

text: Jest więc firma ubezpieczeniowa, która chce przenieść na dłuższą metę swoje autorskie oprogramowanie dla różnych produktów ubezpieczeniowych na nową platformę / framework / koncepcję / coś. Jedna z aplikacji ma ok. 700 stron. Potrzebowalibyśmy jakiejś aplikacji obsługującej przepływ pracy (produkty IBM websphere?). Kontrola transakcji, historyzacja, obsługa uruchamiania wsadów, integracja różnych systemów (w zasadzie nasza DB2 znajduje się na hoście zOs). Fronton to webowy interfejs użytkownika. Kod logiki biznesowej jest napisany w C++. Chcielibyśmy krok po kroku przenieść się do nowego środowiska. Jakie byłyby dobre opcje?


title: Bardziej idiomatyczna składnia dla aktualizacji wartości wektora drugiego poziomu

text: Jestem prawie pewien, że musi istnieć bardziej idiomatyczny sposób napisania tego: (defn update-2nd-level-vector [wartość indeksu mapy] (assoc map :key1 (assoc (get map :key1) :key2 (-> map (get-in [:key1 :key2]) (wartość indeksu asocjacyjnego))))) Przykład działania: => (aktualizacja-wektor drugiego poziomu {:key1 {:key2 [0 1]}} 0 1) {:klucz1 {:klucz2 [1 1]}}


title: Czym są pliki binarne?

text: Bardzo często widzę ludzi używających terminu **binaria** w innym kontekście. Czym są pliki binarne? Kolekcja na plikach binarnych, plikach instalacyjnych, plikach .dll czy co? A może jest to tylko ogólne określenie pewnej kolekcji plików na dysku?


title: Jakie jest najlepsze podejście do decyzji projektowych?

text: Mam dwie klasy (o nazwach `MyFoo1` i `MyFoo2`), które mają pewne wspólne funkcje. Jak dotąd nie wydaje mi się, żebym potrzebował dziedziczenia polimorficznego, ale w tym momencie rozważam następujące opcje: 1. Mieć wspólną funkcjonalność w klasie narzędziowej. Obie te klasy wywołują te metody z tej klasy narzędziowej. 2. Miej klasę abstrakcyjną i zaimplementuj w niej wspólne metody. Następnie klasy „MyFoo1” i „MyFoo2” będą pochodzić z tej klasy abstrakcyjnej. Jakieś sugestie, jaka byłaby najlepsza decyzja projektowa?


title: Model klienta OpenSSL do komunikacji półdupleksowej przez gniazdo

text: Przeczytałem w tym pytaniu SO, że komunikacja przez gniazdo OpenSSL może być tylko półdupleksem w jednym wątku. Zakładając, że to, co przeczytałem, jest prawdziwe, zastanawiam się, czy mogę zastosować problem z jedzeniem filozofa, aby wysłać SSL_write() i otrzymać SSL_read() na nieblokującym gnieździe w jednym wątku, który komunikuje się z serwerem OpenSSL TCP. Zarówno serwer, jak i klient są nieblokujące. Czy to byłby dobry model? Czy też powinienem zawsze ustawiać priorytet na czytanie SSL_read()? Jakie byłoby najlepsze podejście do kodu? Używam C++ do kodowania tego jednowątkowego nieblokującego modelu gniazda (bez BOOST lub innych bibliotek).


title: Kiedy używać stałych i plików konfiguracyjnych do utrzymania konfiguracji?

text: Często walczę ze sobą, czy umieścić określone klucze w moim web.config, w klasie Constants.cs lub czymś w tym rodzaju. Na przykład, gdybym chciał przechowywać klucze specyficzne dla aplikacji, niezależnie od tego, jaki może być przypadek. Mogę go przechowywać i pobrać z mojej konfiguracji sieciowej za pomocą kluczy niestandardowych lub użyć go, odwołując się do stałej w mojej klasie stałych. Kiedy chcesz używać stałych zamiast kluczy konfiguracyjnych? To pytanie naprawdę odnosi się do każdego języka, o którym myślę.


Pracuję na stronie, która ma dużo ustawień konfiguracyjnych i bezpieczeństwa i muszę sprawdzić, czy przeglądarka klienta jest w strefie zaufanej, czy nie używa JavaScript. Czy można ustalić, czy moja witryna internetowa jest używana jako witryna zaufana? Powodem, dla którego chciałbym to zrobić, jest to, że niektóre funkcje nie będą działać, jeśli witryna nie jest używana jako witryna zaufana, i chciałbym móc ostrzec użytkowników. Czy jest jakieś rozwiązanie?


title: Korelacja między ocenami na uczelni a wynikami pracy?

text: W Facts and Fallacies of Software Engineering na końcu faktu 2, Robert Glass mówi: > Problemem jest – i oczywiście jest problem, ponieważ nie działamy na > tym fakcie w naszej dziedzinie – nie wiemy jak by zidentyfikować tych „najlepszych” ludzi. Przez lata zmagaliśmy się z testami umiejętności programisty, certyfikowanymi egzaminami na procesory danych i programami samooceny ACM, a w ostatecznym rozrachunku po wydaniu na nie mnóstwa krwi i potu, a może nawet łez, okazało się, że korelacja między wynikami testu a wydajnością > w pracy jest zerowa. ( **Uważasz, że to było rozczarowujące? Dowiedzieliśmy się również, > w tamtym czasie, że oceny na zajęciach z informatyki i wyniki w pracy > drastycznie korelowały również [Sackman 1968].** ) Czy ten fakt potwierdzają nowsze artykuły ?


title: W przypadku małych programów, czy pojedyncza metoda powinna obsługiwać większość wywołań metod w celu scentralizowania przepływu programu?

text: Jestem całkiem nowy w OOP (i ogólnie w programowaniu), ale to, co robię, to to, że w przypadku, gdy nie muszę przekazywać wartości z jednej metody do drugiej, moje wywołania metod będą scentralizowane w niektóre klasy w pliku Form.cs. Na przykład: public void CentralMethod() { MethodA(); MetodaC(); MetodaD(); } MethodA() zrobi wtedy kilka rzeczy i wywoła bezpośrednio MethodB(), do którego przekaże wartość. Jednak po wykonaniu MethodB() sterowanie wraca do CentralMethod(), a następnie wywoływana jest MethodC() itd. Widzę, jak to jest koszmar w dużym projekcie, ale czy to w ogóle nawyk, w który należy się nabrać na stosunkowo niewielkim projekcie? Niekoniecznie robiłem to zgodnie z projektem, ale zauważyłem, że robię to, gdy nie ma logicznego sensu dołączanie niektórych wywołań metod do innych metod.


title: Czy cały stos infrastruktury oprogramowania można zbudować w całości ze źródła we własnym zakresie? Czy jest to praktyczne i zrównoważone?

text: Jestem wielkim fanem korzystania z oprogramowania open source, ale głównie używam do pracy społecznościowych wydań binarnych. Zastanawiam się nad firmami, które idą w górę i budują wszystko, czego używają w swojej infrastrukturze aplikacji serwera produkcyjnego, całkowicie ze źródła, we własnym zakresie, w celu promowania przejrzystości i obsługi (zamiast polegać na plikach binarnych). Czy jest to praktyczne i zrównoważone? Wygląda na to, że sama liczba zależności, które należy utrzymywać i budować ze źródeł dla niektórych głównych projektów open source, szybko skomplikowałaby sprawę.


title: Wybierz niestandardowe formaty wyjściowe z bazy danych za pomocą SQL

text: Planuję zrobić prostą aplikację do obsługi odpoczynku, a obecnie decyduję o architekturze. Zdecydowałem, że chcę napisać warstwę środkową w wielu językach, aby była łatwa do wdrożenia/integracji z jak najszerszą gamą systemów. Ze względu na konieczność przenoszenia kodu na wiele języków chcę zachować jak najprostszą logikę warstwy środkowej, aby złagodzić wysiłek związany z kodowaniem. Planuję umieścić jak najwięcej kodu w SQL. Na przykład, tradycyjnie, mogę wybrać jakieś dane z bazy danych, a następnie przejść przez tablicę wyników i przetworzyć je dalej przed wysłaniem z powrotem jako dobrze uformowanej odpowiedzi, jak być może jakiś kod HTML uzyskany z danych. Jednak biorąc pod uwagę, że chcę, aby warstwa środkowa była tak prosta, jak to tylko możliwe, wolałbym wykonać całe przetwarzanie jako SQL. Przygotowałem instrukcje sql, które wybierają z moich wyników poprzez łączenie i używanie agregatów grup dla powtarzających się elementów. Wydaje się, że wszystko działa dobrze, ale mam wątpliwości, czy opuściłem rezerwację. Obawiam się, że nie widziałem czegoś takiego, więc być może istnieje dobry powód, o którym nie pomyślałem. Moje pytanie brzmi... ### Czy pisanie złożonej logiki formatowania w SQL zamiast kodu aplikacji to zły pomysł? Jeśli chodzi o... 1. wydajność 2. utrzymanie kodu 3. ograniczenia języka 4. cokolwiek innego **n.b. Nie chcę używać PL_SQL ani niczego w tym rodzaju, interesuje mnie tylko używanie bardzo podstawowych poleceń SQL, aby osiągnąć moje formatowanie, ponieważ chcę, aby kod bazy danych był również przenośny między różnymi bazami danych **


title: Co spowodowało popularność funkcji lambda we współczesnych językach programowania głównego nurtu?

text: W ciągu ostatnich kilku lat anonimowe funkcje (AKA funkcje lambda) stały się bardzo popularną konstrukcją językową i prawie każdy główny / główny język programowania wprowadził je lub planuje wprowadzić w nadchodzącej rewizji standardu. Jednak funkcje anonimowe są bardzo starym i bardzo dobrze znanym pojęciem w matematyce i informatyce (wynalezionym przez matematyka Alonzo Churcha około 1936 roku i używanym przez język programowania Lisp od 1958 roku, patrz np. tutaj). Dlaczego więc dzisiejsze mainstreamowe języki programowania (z których wiele powstało 15 do 20 lat temu) nie obsługują funkcji lambda od samego początku i wprowadziły je dopiero później? A co spowodowało masowe przyjęcie funkcji anonimowych w ciągu ostatnich kilku lat? Czy istnieje jakieś konkretne wydarzenie, nowe wymaganie lub technika programowania, które zapoczątkowały to zjawisko? **WAŻNA UWAGA** Przedmiotem tego pytania jest wprowadzenie **anonimowych funkcji** w nowoczesnych językach głównego nurtu (a zatem, może z kilkoma wyjątkami, niefunkcjonalnych). Zauważ też, że funkcje anonimowe (bloki) są obecne w Smalltalku, który nie jest językiem funkcjonalnym, i że normalne nazwane funkcje były obecne od dawna nawet w językach proceduralnych, takich jak C i Pascal. Proszę nie uogólniać swoich odpowiedzi mówiąc o „przyjmowaniu paradygmatu funkcjonalnego i jego korzyściach”, bo to nie jest temat pytania.


title: Jakich technik lub narzędzi używasz, aby uprościć swoją aplikację?

text: Programuję nową aplikację na iOS od około 5 miesięcy i jestem na końcowym etapie. Mój zespół i ja zgodziliśmy się na uproszczenie aplikacji, gdy byliśmy już na tym etapie procesu rozwoju. To pytanie tak naprawdę nie dotyczy całego zespołu (gdzie są ludzie, którzy projektują na życie), ale bardziej z umysłu programisty. Mam tendencję do zagłębiania się w każdy najmniejszy szczegół osobistego projektu i wymyślania sposobu na stworzenie do niego funkcji, jak jestem pewien, że robi to większość innych programistów. Chociaż to zdecydowanie nie jest złe, trzeba to kontrolować. Więc proszę o to, czego wszyscy używacie, jeśli chodzi o techniki i narzędzia, aby pomóc sobie w utrzymaniu prostoty. Innymi słowy, w jaki sposób kontrolujesz swój umysł typu programisty, aby nie wymknął się spod kontroli :P


title: Git: zmiana bazy na refaktor, który wpływa na docelową gałąź rebase

text: Załóżmy, że mam gałąź funkcji (tematów), której bazuje na gałęzi rozwoju. W trakcie projektu (przed scaleniem w mojej gałęzi funkcji) postanawiam, że muszę dokonać dużej refaktoryzacji do mojego projektu (na przykład po aktualizacji modułu trzeciej części). Więc robię tę dużą refaktoryzację w mojej gałęzi programistycznej. Teraz chcę zmienić bazę mojej gałęzi funkcji, aby móc skorzystać z zalet refaktoryzacji. **Problem** W mojej gałęzi funkcji wciąż są rzeczy, które wymagają refaktoryzacji, aby dopasować zmiany, które wprowadziłem w gałęzi deweloperskiej. Czy powinienem: 1. Cofnąć się do historii gałęzi funkcji, próbując edytować zatwierdzenia (za pomocą `rebase -i`), aby gałąź wyglądała tak, jakby cała praca została wykonana po refaktoryzacji. * Zaletą tego jest to, że utrzymuje historię w czystości. * Wadą jest to, że może to zająć dużo czasu, jeśli zmiany wprowadzone w gałęzi deweloperskiej powodują konieczność wprowadzenia wielu zmian w gałęzi funkcji. 2. Napraw rzeczy, które wymagają refaktoryzacji w mojej gałęzi funkcji i zatwierdź to. * Zaletą jest to, że znacznie łatwiej będzie zidentyfikować i naprawić rzeczy, które wymagają naprawy. * Wadą jest to, że teraz drzewo będzie miało _dwa_ commity dla refaktora. Jeden dla refaktora wykonanego dla całej gałęzi deweloperskiej i mniejszy commit zrobiony dla gałęzi funkcji, po połączeniu z nim będzie wyglądał trochę śmiesznie. Którą strategię powinienem wybrać? * * * **Przykład** Powiedzmy, że w gałęzi programistycznej zmieniam nazwę `functionA` na `functionB`. Teraz w mojej gałęzi funkcji nigdy nie modyfikowałem pliku zawierającego `functionA` (teraz `functionB` w fazie rozwoju). Tak więc, kiedy uruchamiam programowanie rebase w mojej gałęzi funkcji, następuje czysta zmiana bazy. Problem polega na tym, że jeśli kiedykolwiek wywołałem funkcję `functionA` w mojej gałęzi funkcji, teraz się nie powiedzie, ponieważ nazwa została zmieniona na `functionB`. Teraz powinienem po prostu znaleźć i zastąpić `functionA` -> `functionB` i wykonać jedno zatwierdzenie w gałęzi funkcji (opcja 2). A może powinienem cofnąć się do mojej historii, znajdując, gdzie wprowadziłem wywołanie `functionA` i przepisać zatwierdzenie, aby zostało wprowadzone jako wywołanie `functionB` (opcja 1)?


title: Czy warto przełączyć się z domowego interfejsu poleceń zdalnych na korzystanie z JMX?

text: Nie wiedząc zbyt wiele o JMX, zawsze zakładałem, że będzie to najlepsze podejście do wbudowania zdalnego zarządzania w naszą samodzielną aplikację serwerową Java. Nasza aplikacja serwerowa ma minimalne możliwości zdalnego sterowania, za pomocą poleceń tekstowych przesyłanych do niej przez gniazdo TCP/IP. Korzystając z podejścia domowego, uczciwie jest dodać nowe polecenie. (Po prostu utwórz nowy tekst polecenia i kod do obsługi tego w odbiorniku wiadomości). Z drugiej strony prawie nie zaimplementowaliśmy żadnych poleceń, mimo że istnieje wiele rzeczy, które chcielibyśmy móc wykonywać zdalnie. Staram się zważyć wartość przejścia na włączenie JMX (uczenie się go i budowanie interfejsów) w porównaniu z trzymaniem się podejścia domowego. Czy ktoś ma jakieś doświadczenie lub porady dotyczące zmiany istniejącej aplikacji na JMX?


title: Jak zrównoważyć kompatybilność wsteczną procesora programu, aby nadal móc korzystać z najnowocześniejszych funkcji?

text: Gdy dowiaduję się więcej o C i C++, zaczynam się zastanawiać: Jak kompilator może korzystać z nowszych funkcji procesorów bez ograniczania się tylko do osób z na przykład Intel Core i7? Pomyśl o tym: co roku pojawiają się nowe procesory z mnóstwem nowych technologii. Jednak nie można ich ograniczać tylko do nich, ponieważ znaczna część rynku nie będzie uaktualniać do najnowszych i najlepszych procesorów przez długi czas. Mniej więcej zastanawiam się, jak ogólnie radzą sobie z tym deweloperzy i kompilatory C i C++. Czy kompilatory tworzą kod podobny do „jeśli SSE jest obsługiwane, rób to za jego pomocą, w przeciwnym razie zrób to w wolniejszy sposób”, czy też programiści muszą zaimplementować swój algorytm dwa razy, czy co? Mniej więcej w jaki sposób wydajecie oprogramowanie, które wykorzystuje nowsze technologie procesorowe, zachowując jednocześnie niski wspólny mianownik?


title: Jaki jest najlepszy sposób na skalowanie i dzielenie zwinnego zespołu budującego aplikację internetową?

text: Niedawno dołączyłem do firmy, w której pracuję jako scrum master nad zwinnym projektem programistycznym budującym aplikację internetową. Zespół ma wkrótce osiągnąć maksymalny rozmiar dla zwinnego zespołu (spodziewamy się 9 w przyszłym tygodniu). Rozmawialiśmy o potencjalnym podzieleniu zespołu na dwa zespoły, nie tyle po to, by skrócić stójki (które w tej chwili nie są przesadne), ale po to, by ludzie nie byli kompletnie znudzeni podczas sesji planowania sprintu (które znowu nie są przesadnie długie). W projekcie istnieją dwie bardzo wyraźne warstwy - zaawansowane technicznie tworzenie zaplecza (jak poważnie złożone) oraz projektowanie/budowanie/integracja interfejsu użytkownika. Wygląda na to, że kiedy faceci od backendu mówią o kwestiach technicznych, ludzie od UI odchodzą i vice versa. Wydaje się, że to logiczny sposób na podzielenie zespołu, choćby po to, by zwiększyć wydajność czasową, ale mam jedno ogromne zastrzeżenie, że jedyne, co mogę zrobić, to ograniczenie współpracy i dzielenia się wiedzą. Te dwie drużyny po prostu nie będą miały dobrego pomysłu na to, co buduje reszta zespołu. Czy ktoś ma jakieś doświadczenie w radzeniu sobie z czymś takim?


title: Dlaczego preferować niestatyczne klasy wewnętrzne od statycznych?

text: To pytanie dotyczy tego, czy klasa wewnętrzna w Javie powinna być „statyczna”, czy nie. Szukałem tutaj i na StackOverflow, ale tak naprawdę nie mogłem znaleźć żadnych pytań dotyczących konsekwencji projektowych tej decyzji. Pytania, które znalazłem, dotyczą różnicy między statycznymi i niestatycznymi klasami wewnętrznymi, co jest dla mnie jasne. Jednak nie znalazłem jeszcze przekonującego powodu, aby kiedykolwiek używać niestatycznej klasy wewnętrznej w Javie - z wyjątkiem klas anonimowych, których nie uwzględniam w tym pytaniu. Oto moje rozumienie efektu używania statycznych klas wewnętrznych: * **Mniej sprzężenia:** Generalnie otrzymujemy mniej sprzężenia, ponieważ klasa nie ma bezpośredniego dostępu do atrybutów swojej klasy zewnętrznej. Mniej sprzężeń oznacza generalnie lepszą jakość kodu, łatwiejsze testowanie, refaktoryzację itp. * **Single`Class`:** Loader klas nie musi za każdym razem dbać o nową klasę, tworzymy obiekt klasy zewnętrznej. Po prostu otrzymujemy nowe obiekty dla tej samej klasy w kółko. W przypadku niestatycznej klasy wewnętrznej, ogólnie uważam, że dostęp do atrybutów klasy zewnętrznej jest uważany za profesjonalistę. Błagam, abym się różnił w tym względzie z punktu widzenia projektowania, ponieważ ten bezpośredni dostęp oznacza, że mamy wysokie sprzężenie i jeśli kiedykolwiek będziemy chcieli wyodrębnić klasę wewnętrzną do jej oddzielnej klasy najwyższego poziomu, możemy to zrobić dopiero po zasadniczo obróceniu w statyczną klasę wewnętrzną. Więc moje pytanie sprowadza się do tego: czy nie mam racji zakładając, że dostęp do atrybutów dostępny dla niestatycznych klas wewnętrznych prowadzi do wysokiego sprzężenia, a tym samym do niższej jakości kodu, i że wnioskuję z tego, że (nieanonimowe) klasy wewnętrzne powinny ogólnie być statyczny? Innymi słowy: czy istnieje przekonujący powód, dla którego preferuje się niestatyczną klasę wewnętrzną?


title: Karczowanie i wyśmiewanie granic

text: Załóżmy, że buduję JSON API i chciałbym dołączyć punkt końcowy, który zwraca listę ostatnio utworzonych postów. Gdzieś w moim systemie jest istniejący model Posta z następującym testem: * utwórz kilka postów w bazie (niektóre nowe, niektóre stare) * posts = Post.recent * upewnij się, że posty zawierają tylko nowe posty Teraz chcę przetestować Punkt końcowy JSON otacza tę funkcję ("kontroler"). Najbardziej oczywistym sposobem sprawdzenia tego byłby pełny test integracyjny, taki jak: * utwórz kilka postów w bazie danych (niektóre nowe, niektóre stare) * wyślij żądanie do /posts * zapewnij, że tylko nowe posty zostały zwrócone w odpowiedzi wydaje się powielać wiele z tego, co już jest testowane w modelu i zacznie spowalniać zestaw testów, ponieważ trzeba przetestować więcej ścieżek kodu (tj. Uwierzytelnianie, parametry ciągu zapytania itp.). Alternatywy… 1. Mock the model * mock Post.recent * wyślij żądanie do /posts * potwierdź, że Post.recent został wywołany 2. Stub model * stub Post.recent * wyślij żądanie do /posts * potwierdź, że skrót posty zostały zwrócone w odpowiedzi Jedna z tych opcji sama w sobie nie wydaje się wystarczająca do pełnego przetestowania kontrolera, ale po połączeniu wydaje się dość obszerna. Elementem, który pozostaje nieprzetestowany, jest umowa między modelem a kontrolerem dotycząca Post.recent. Co się stanie, jeśli zdecyduję się na refaktoryzację mojego modelu i testów modelu, a post.recent już nie istnieje… moje testy i tak przejdą pomyślnie, nawet jeśli system produkcyjny zawiedzie. Jak sobie z tym poradzić? Czy jedyną odpowiedzią są testy integracyjne? Jeśli tak, po co w ogóle zawracać sobie głowę karaniem i kpiniem?


title: Informacje o kopiowaniu praw autorskich na GPL

text: „GPL How to” zawiera następujące informacje na temat stosowania informacji o prawach autorskich do kodu skopiowanego z innych programów: > Jeśli skopiowałeś kod z innych programów objętych tą samą licencją, > skopiuj również ich informacje o prawach autorskich. Umieść wszystkie informacje o prawach autorskich razem, > tuż u góry każdego pliku. Zrobiłem _total_ refaktoryzację biblioteki C#, która sama była portem z kodu Visual Basic (VB). Oryginalny kod VB jest obecnie udostępniany na licencji Microsoft Public License (Ms-PL), ale pierwotnie na licencji GPL. Biblioteka C# jest na licencji GPL, kontynuując prace nad starszą biblioteką VB. Zasadniczo używałem tylko tej samej „techniki”, której używali. Nie obchodzi mnie robienie biblioteki na licencji GPL, więc nie o to chodzi. (Z tej odpowiedzi wnioskuję, że moja biblioteka może być uznana za pracę pochodną.) Uważam jednak za kłopotliwą konieczność kopiowania poprzednich informacji o prawach autorskich w każdym pliku źródłowym. Wolałbym odwoływać się do nich tylko w pliku README. To pytanie omawia potrzebę dodawania powiadomień do _każdego_ pliku źródłowego, ale nie ma zgodności między odpowiedziami. Dlatego chciałbym dodać licencję do każdego pliku jako środek bezpieczeństwa. Czy muszę dołączać informacje o prawach autorskich **projektów, na których opierała się moja biblioteka**, również we wszystkich plikach źródłowych?


title: Jaką rolę w bezpieczeństwie odgrywają DEP i ASLR?

text: Linie z CLR przez C#: Zarządzany moduł to standardowy 32-bitowy przenośny plik wykonywalny systemu Microsoft Windows (PE32) lub standardowy 64-bitowy przenośny plik wykonywalny systemu Windows (PE32+), który wymaga uruchomienia środowiska CLR. Nawiasem mówiąc, zestawy zarządzane zawsze korzystają z funkcji zapobiegania wykonywaniu danych (DEP) i randomizacji układu przestrzeni adresowej (ASLR) w systemie Windows; te dwie funkcje poprawiają bezpieczeństwo całego systemu. Pytanie: Chcę wiedzieć, w jakim kontekście tutaj jest bezpieczeństwo i co robi DEP i ASLR?


title: Codzienny Scrum, gdy zespół tylko naprawia błędy

text: Rozumiem wszystkie zalety Daily Scrum, a mój zespół robi to, gdy pracujemy nad historiami. Ale czasami mamy po prostu błędy do naprawienia przez kilka dni, kiedy czekamy na nowe historie, a kiedy to się dzieje, odkładamy codzienny scrum na bok. Niektórzy deweloperzy twierdzą, że „Nie ma potrzeby robienia Codziennego Scruma, gdy nie mamy nic do omówienia”. Nie wiem, czy codzienny Scrum, kiedy nie mamy nowej historii do opracowania, jest konieczny. Czy jest coś ciekawego, co możemy zrobić w codziennym scrumie, kiedy mamy tylko błędy do naprawienia?


title: Rozwój zawodowy: Znalezienie tego „projektu zwierzaka” do pracy – a następnie zarządzanie innymi zobowiązaniami

text: W tej chwili, jak wielu z was, jak przypuszczam, spędzam co najmniej 40 godzin pracując nad projektami, które wykorzystują określony zestaw technologii. Czasami robię konserwację i narzucam te technologie, a czasami robię nowe kompilacje.. ale mam narzucone umiejętności zespołu z powodu konserwacji (całkiem słusznie). Jednak mam rosnący zestaw technologii, z którymi chcę testować wody; czy są to niestandardowe frameworki JavaScript, czy nowe techniki programowania mobilnego. Nie mam jednak pojęcia, jak się z nimi uporać! Weźmy na przykład Chromium Embedded Framework; Zawsze byłem fanem interfejsu użytkownika aplikacji GitHub, a także pod wrażeniem Evernote i Spotify. Kiedy dowiedziałem się, jak te interfejsy zostały wyprodukowane, naturalnie spróbowałem pomyśleć o projekcie, którym mógłbym się bawić i produkować przez weekend. (Co przy minimalnej interakcji z systemem operacyjnym (być może prostych manipulacji plikami) powinno wystarczyć) **Ale nie przychodzi mi do głowy ani jedna rzecz do opracowania.** W pracy miałem za zadanie przekwalifikować się na Ruby on Rails; nie chcąc iść w ciemno - postanowiłem wbić kilka książek i wypróbować kilka technik. Teraz poza zwykłymi przykładami z Lynda.com i bardzo dobrym projektem _"Agile Web Development with Rails"_ z książki... **Nie przychodzi mi do głowy żadna rzecz do opracowania**. rozważ przyczynienie się do stworzenia jakiegoś oprogramowania FOSS, a dzięki frameworkom, z których regularnie korzystam, mam kilka pomysłów i należę do odpowiednich list mailingowych – np. listy mailingowej Apache Cordova i tam, gdzie jest to wymagane, podpisałem odpowiednie dokumenty. (np. w przypadku projektów na licencji Apache) **Czasami dobrze jest mieć pomysł i realizować go od zera, zwłaszcza jeśli jesteś nowy w tej technologii. Więc jak moi koledzy programiści radzą sobie z tym, a co ważniejsze, w jaki sposób zdobywasz pomysły, które pozwalają ci korzystać z tego konkretnego frameworka/technologii? Czasami ciężko jest przekuć pomysły w konkretne technologie.** Obawiam się, że to połowa sukcesu, a druga **połowa to jak utrzymać taki projekt, gdy zobowiązania zawodowe mogą pochłaniać Twój osobisty czas** , a jak to jest to, że przestoje są cennym towarem!


title: Czy mówienie „Obiekt JSON” jest zbędne?

text: Jeśli JSON oznacza JavaScript Object Notation, to mówiąc obiekt JSON, czy naprawdę nie mówisz „JavaScript Object Notation Object”? Czy powiedzenie „ciąg JSON” byłoby bardziej poprawne? A może lepiej byłoby po prostu powiedzieć JSON? (jak w „Te dwie usługi przekazują między sobą JSON”).


title: Zalety/wady NFA w porównaniu z DFA i na odwrót

text: Jakie są względne zalety i wady zarówno DFA, jak i NFA w porównaniu ze sobą? Wiem, że DFA są łatwiejsze do wdrożenia niż NFA i że NFA wolniej osiągają stan akceptacji niż DFA, ale czy są jakieś inne wyraźne, dobrze znane zalety/wady?


title: Czysty, modułowy kod a frameworki MV*

text: Słyszałem dużo o "nowych" frameworkach MV*. Majstrowałem przy KnockoutJS, tworząc aplikację do fakturowania, ale zdecydowanie wolę pisać czysty, modułowy kod w surowym JavaScript - w razie potrzeby wykorzystując interfejsy API narzędziowe i inne biblioteki. Biorąc pod uwagę metodyczne/ustrukturyzowane/SOLID podejście do pisania aplikacji JavaScript, w którym przestrzegane są OOP, SOC, SRP i inne zasady projektowania, czy użycie frameworków MV* nie byłoby zbyteczne? Czy są jakieś artykuły, które wyrażają/rozwiązują te obawy? Znalazłem jedno w przeszłości _uwaga — przeniosłem to pytanie z SO do tej witryny, ponieważ jest bardziej odpowiednie dla tej grupy odbiorców._


title: Czy animacje i inne cukierki do oczu są uważane za wymagania niefunkcjonalne?

text: Widziałem wiele list w Internecie, które zawierają wiele „aplikacji” (obsługiwalność, skalowalność, przenośność itp.), ale nie jestem pewien, czy animacje, przejścia ekranów i podobne funkcje są wymaganiami funkcjonalnymi, czy niefunkcjonalnymi.


title: Czy powinniśmy używać zastępczych kluczy podstawowych dla każdej tabeli?

text: Opracowujemy model danych dla marketingowej bazy danych, która będzie importować pliki transakcji, klientów, zapasów itp., a dyrektywa to JEDEN proces, który działa dla każdego klienta. Powiedziano nam, że każdy klient będzie miał inny układ importu i różne kolumny, które identyfikują klucz podstawowy tabeli. Naszym początkowym pomysłem jest uzyskanie od klienta definicji kolumn, które czynią każdy rekord unikalnym, przechowywanie ich w tabeli mapowania, a następnie posiadanie tabel przeglądowych, które automatycznie tłumaczą te klucze podstawowe na wewnętrzne klucze zastępcze dla każdej tabeli docelowej, tak aby każda tabela była zgodna do klucza podstawowego liczby całkowitej, bez względu na to, ile kolumn/typów jest używanych do utworzenia rzeczywistego pk. Pierwszym poważnym problemem, jaki zauważyłem, było to, kiedy/jeśli trzeba zmapować z powrotem do tabel wyszukiwania, aby uzyskać dane, których nie przechowywaliśmy w głównym modelu danych, ale zostałem zapewniony, że wszystko, co kiedykolwiek chcemy wykonać w zapytaniu, zostanie zduplikowane w wyszukiwaniu i główne tabele, więc nie powinno to być problemem. Wydaje się, że ten rodzaj elastyczności spowoduje poważne ograniczenia: 1. Stosu technologicznego (brak możliwości dynamicznego mapowania tych importowanych plików w SSIS, potrzeba dużo dynamicznego SQL lub java/c#) 2. Skalowalności (w oparciu o poprzednie obawy i początkowe testowanie, byłoby to trudne do skalowania bez obaw o szybkość) 3. Złożoność (już napotykamy pewne złożone zmiany w kodzie, gdy próbujemy zaimplementować wszystkie te tabele z historycznym rejestrowaniem zmian, zachowując na przykład mapowanie do tabel przeglądowych) Moje pytanie - Czy jest to wykonalne, czy też brakuje nam innego oczywistego rozwiązania?


title: Czy architektura zorientowana na usługi wymaga zasady solidności?

text: Staram się migrować coraz więcej naszej infrastruktury IT do _Service-Oriented Architecture (SOA)_ , co oznacza rozdzielenie niezależnych zadań i realizację tych zadań jako usługi oddzielone, po prostu dostępne przez HTTP. Jeśli nie podoba ci się określenie SOA, po prostu wstaw inny - podstawową ideą jest umieszczenie funkcjonalności w małych modułach i eksponowanie ich za pomocą dobrze zdefiniowanych interfejsów. Oznacza to również dużo dokumentacji i komunikacji, ponieważ ludzie mają tendencję do myślenia w zintegrowanych systemach. Kiedy łączę wiele usług w nowy komponent, zawsze staram się wyłapać błędy: jeśli jedna usługa ulegnie awarii, reszta systemu powinna działać jak najlepiej. Prawdopodobnie znasz Małpę Chaosu, o czym pamiętam. Jeśli jednak inne osoby korzystają z usług, mają tendencję do myślenia o niezawodnych częściach. Czy dobre SOA wymaga zasady solidności? Krótko mówiąc, jeśli korzystasz z usługi, nie powinieneś oczekiwać wysokiej jakości: bądź świadomy wszelkiego rodzaju błędów: odpowiedź usługi może nie zawierać wszystkich informacji (brakujące pola), może zawierać dodatkowe, nieznane części, może bardzo odpowiadać powolny lub może w ogóle nie działać. Czy jest to właściwość luźnego sprzężenia, czy po prostu jestem zbyt leniwy, aby zagwarantować ścisłą jakość usług? ;-)


title: Czy w projekcie MVC architekt informacji definiuje modele?

text: Definicja odpowiedzialności architekta informacji wydaje się idealnie pasować do definicji „modelu” we wzorcu MVC. Ale nigdy nie słyszałem, aby te dwie koncepcje były omawiane razem. Czy w dużym projekcie, który ma dedykowanego architekta informacji, a także zespół programistów, architekt informacji faktycznie mówi „Model A ma właściwości x, y i z oraz ma klucze obce do modeli B i C...” itp., czy po prostu wyrażają koncepcje bardziej niejasno i pozwalają zespołowi programistów przełożyć to na modele MVC? Zastanawiam się tylko, jaka jest najczęstsza praktyka.


title: Czy firmy technologiczne stosują wiele praktyk algorytmicznych, które studiowaliśmy na studiach?

text: Karierę dopiero zaczynam, bardzo interesuje mnie projektowanie algorytmów. Jakoś nie rozumiem tego, jak firma technologiczna mogłaby wykorzystać paradygmat algorytmiczny? Chodzi mi o to, czy w projektach z prawdziwego życia faktycznie korzystamy z programowania dynamicznego, zachłannych technik, algorytmów grafowych itp. Czy rzeczywiście jest przyszłość dla ludzi, którzy są dobrzy w tym temacie. Rozumiem, że istnieje wiele różnych projektów opartych na javie, html5, css, javascript, j2ee itp., które nigdy nie używają algorytmów. Ale czy istnieją firmy korzystające z paradygmatu algorytmicznego do tworzenia oprogramowania / rozwiązywania złożonych problemów (biznesowych lub innych), czy tylko do wyjaśniania rozmów kwalifikacyjnych. p.s. Rozumiem, że tworzenie oprogramowania opiera się również na innych tematach, na przykład wzorcach projektowych.


title: Wiele zespołów scrumowych przechodzi do jednego backlogu

text: Obecnie mamy 5 zespołów scrumowych, które pracują nad własnym backlogiem produktu za ostatni rok. Każdy zespół pracuje na własnym, dedykowanym systemie, ale podstawową technologią jest ta sama platforma .Net. Odbyło się wiele dyskusji na temat przejścia do zespołów opartych na funkcjach, pracujących na jednym backlogu. Powodem jest to, że jeden z naszych głównych systemów ma dużo pracy i nie ma wystarczającej wydajności, aby wykonać całą pracę w ciągu roku. Innym powodem, który uważam za istotny jest to, że daje większą elastyczność w szybkim dostosowywaniu się do zmian w portfelu. Podjęto decyzję o zmianie dwóch zespołów, aby pracowały nad jednym backlogiem, ale twórcy nie mają doświadczenia z innymi systemami. Jedną z rzeczy, które robimy, jest cross-skilling poprzez przeniesienie programisty systemu doświadczenia do zespołu. Moje pytanie brzmi, czy doświadczyłeś przejścia do jednego zaległości dla dwóch lub więcej różnych systemów. Jakie były Twoje wyzwania? Co musiałeś zrobić, aby to zadziałało?


title: Oblicz elipsę na podstawie 4 punktów

text: Muszę przesunąć obiekt na podstawie 100 obracających się obrazów. Obiekt musi poruszać się po ścieżce, która tworzy elipsę, gdy obracam obraz na podstawie moich gestów. Mam **4 punkty** , _2 pary przeciwległych punktów na osi X/Y_ , na elipsie, ale jak obliczyć resztę punktów w **code-behind**, abym mógł **obliczyć** nową **wartość X/Y** mojego **następnego/poprzedniego punktu**? Obecnie po prostu obracam swój obiekt w kółko, co jest początkiem, ale wcale nie tym, czego chcę... ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/rhyj2.png)


title: Czy w Androidzie możemy pozwolić fragmentowi poznać inne fragmenty?

text: Myślę, że znalazłem sprzeczne wskazówki projektowe w dokumentacji Google Android na temat fragmentacji. Pierwsze zdanie poniżej radzi, aby każdy fragment był nieświadomy innych fragmentów i zawsze komunikował się tylko z ćwiczeniem i pozwól ćwiczeniu zdecydować, co należy zrobić. > Tworzenie wywołań zwrotnych zdarzeń do działania > > W niektórych przypadkach może być potrzebny fragment, aby udostępnić zdarzenia w działaniu. > Dobrym sposobem na to jest zdefiniowanie interfejsu wywołania zwrotnego wewnątrz fragmentu > i wymaganie, aby aktywność hosta go zaimplementowała. Gdy działanie otrzyma > wywołanie zwrotne przez interfejs, może w razie potrzeby udostępnić informacje innym fragmentom w układzie. > > Na przykład, jeśli aplikacja wiadomości zawiera dwa fragmenty w działaniu — jeden do > pokazania listy artykułów (fragment A), a drugi do wyświetlenia artykułu > (fragment B) — wtedy fragment A musi poinformować działanie, kiedy lista element jest > zaznaczony, aby mógł powiedzieć fragmentowi B, aby wyświetlił artykuł. W tym przypadku interfejs OnArticleSelectedListener jest zadeklarowany wewnątrz fragmentu A: Ale druga instrukcja później na tej samej stronie, fragment listy bezpośrednio tworzy fragment szczegółu. if (mDualPane) { // Możemy wyświetlić wszystko na miejscu z fragmentami, więc zaktualizuj // listę, aby podświetlić wybrany element i pokazać dane. getListView().setItemChecked(indeks, prawda); // Sprawdź, który fragment jest aktualnie wyświetlany, w razie potrzeby wymień. DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != index) { // Utwórz nowy fragment, aby pokazać ten wybór. szczegóły = DetailsFragment.newInstance(indeks); // Wykonaj transakcję, zastępując istniejący fragment // tym wewnątrz ramki. FragmentTransaction ft = getFragmentManager().beginTransaction(); if (index == 0) { ft.replace(R.id.details, details); } else { ft.replace(R.id.a_item, details); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); Więc moje pytania: czy te są ze sobą sprzeczne? Czy należy to pozostawić Aktywności? Czuję się zdezorientowany, więc każde wyjaśnienie jest mile widziane.


title: Sprawdź jakąś wartość między każdym wywołaniem funkcji

text: Czy możesz polecić fajny sposób sprawdzania określonej wartości między wywołaniami zestawu funkcji? Np. coś takiego w Pythonie (może nie być strasznie 'Pythonic'): self.error_code = 0 # to zostanie ustawione przez każdą funkcję, jeśli wystąpi błąd self.function_list = [self.foo, self.bar, self.qux, self.wobble] ... def execute_all(self): podczas gdy nie self.error_code i self.function_list: func = self.function_list.pop() # pobierz każdą funkcję func(kod_błędu) # wywołaj ją, jeśli self.error_code: # wykonaj coś Pomysł polega na tym, że kolejne funkcje nie będą wywoływane, jeśli ustawiono `self.error_code` i wszystkie funkcje będą wywoływane po kolei, jeśli wszystko jest w porządku. Każdy może wymyślić lepszą alternatywę dla tego w Pythonie, a może podejście niezależne od języka? Chcę uniknąć posiadania tego kodu w każdym wywołaniu funkcji (np. „if self.error code: return”), aby nie uzyskać tego samego sprawdzenia we wszystkich funkcjach.


title: Dlaczego zasoby ciągów są zazwyczaj przechowywane na zewnątrz kodu, a nie wewnątrz kodu?

text: Ogólnie rzecz biorąc, na wielu platformach piszę moje zasoby ciągów do pliku .resx lub .xml, a następnie otrzymuję je przy użyciu podejścia zależnego od platformy. Oznacza to, że w systemie iOS pobieram je za pośrednictwem `NSBundle.MainBundle` i używając `Context.Resources` w systemie Android. Jakie są zalety takiego podejścia i dlaczego nie ma do niego bezpośredniego dostępu w kodzie, na przykład: 1. W projekcie wieloplatformowym każda platforma może uzyskać do niego bezpośredni dostęp, bez integracji. 2. Podczas budowy nie ma obaw o to, czy zasoby są dobrze zbudowane. 3. Koder może korzystać z takich funkcji, jak obsługa wielu języków Krótko mówiąc: jaki jest powód, dla którego zasoby tekstowe są tak skonstruowane? [Edytuj] Załóżmy, że mój plik jest częścią „podstawowego” projektu współdzielonego między innymi projektami. (Pomyśl o PCL, wieloplatformowej strukturze pliku projektu.) I załóżmy, że mój plik jest po prostu całkowicie podobny do pliku .resx/.xml, wyglądającego tak (nie jestem profesjonalistą w xml, przepraszam!): Parametry Parametry Tak więc jest to w zasadzie niestandardowy xml, w którym wskazujesz klucz/język, aby uzyskać właściwy ciąg. Plik byłby częścią aplikacji, tak jak dodajesz dowolny dostępny plik wewnątrz aplikacji, a system ma dostęp do zasobów tekstowych, zakodowanych przy użyciu PCL. Czy spowodowałoby to obciążenie aplikacji?


title: Środowisko uruchomieniowe ASP.net/IIS

text: Nie mam doświadczenia w konfigurowaniu IIS/ASP.net. Klient poprosił mnie o rozszerzenie funkcjonalności niestandardowej aplikacji internetowej, której nie stworzyłem. Niestety nie mają oryginalnego projektu/kodu źródłowego programu Visual Studio. Próbuję ściągnąć aplikację z ich produkcyjnego serwera IIS i skonfigurować ją do rozwoju na moim komputerze. Mam już skonfigurowane nowe wystąpienie witryny sieci Web w usługach IIS na moim komputerze i skopiowałem kod do jego katalogu. Kiedy uzyskuję do niego dostęp (`http://localhost`), aktualnie otrzymuję w aplikacji odwołanie o wartości null. Oczywiście jest to dość ogólny błąd, który może być spowodowany błędem, ale wydaje mi się, że jest związany z konfiguracją IIS. Upewniłem się, że obie witryny korzystają z tej samej wersji .NET i działają w trybie zintegrowanego potoku. Jakieś pomysły na co jeszcze powinienem się przyjrzeć? Serwer produkcyjny: Server 2008 R2 (64-bitowy), IIS 7.5 Komputer deweloperski: Win7 (64-bitowy), IIS 7.5


title: Kontraktowanie poza etatowym kontraktowaniem pracy

text: Jestem pełnoetatowym konsultantem firmy wykonawczej. Zasadniczo jestem tylko pełnoetatowym pracownikiem, a kiedy moja obecna umowa się kończy, rzucam się do „ławki”, aż znajdą mi inny kontakt. Jeden z niezależnych wykonawców, z którymi jestem kolegą, rzucił mi pracę (obecnie jest przepełniony) dla bardzo małej firmy składającej się z zaledwie kilku pracowników, aby przeprowadzić pewne prace konserwacyjne na swojej stronie internetowej. Mój podręcznik mówi: „Żadna osoba nie może świadczyć usług doradczych za opłatą w konkurencji z [FIRMA]”. Ale ta firma nie jest klientem mojego pracodawcy (i wątpię, by kiedykolwiek była, ponieważ są tak małe). Na dodatek, niektórzy z moich współpracowników dla mojej firmy albo rozmawiają na DL o samodzielnym zawieraniu kontraktów, albo nawet utworzyli firmy, aby zawierać zewnętrzne kontrakty z klientami zewnętrznymi. Czy wykonywanie prac na zlecenie jest bezpieczne, nawet jeśli jesteś pełnoetatowym wykonawcą w firmie konsultingowej? (Oczywiście pytanie prawnika, ale chciałbym otrzymać informację zwrotną od każdego z doświadczeniem)


title: Jakiego algorytmu sortowania używa STL?

text: Niedawno zacząłem używać biblioteki `<vector.h>` i zastanawiałem się, ponieważ wszystkie operacje są już zaimplementowane, **IF** metoda algorytmu sortowania jest najbardziej wydajna. Wszystko działa idealnie, nie ma wątpliwości, ale czy powinienem się martwić o jego wydajność? Jeśli chcę posortować do 6-7 milionów numerów, czy powinienem wdrożyć własną metodę sortowania za pomocą szybkiego sortowania?


title: Czy istnieje nazwa koncepcji hierarchii wielu krótkich metod w klasie?

text: Refaktoryzacja, którą często wykonuję, polega na tym, że natrafiam na dużą metodę, taką jak public void doSomething() { // do Pierwsza rzecz doPartA1(); doCzęśćA2(); //teraz coś innego doSomethingElse(); zróbWięcejCośInnego(); robićEvenMore(); // w końcu zrób to someStuff(); niektóreWięcej Rzeczy(); } i użyj metody extract, refaktoryzując to tak: public void doCoś() { doFirstThing(); Zrób coś innego(); robić coś(); } private void doFirstThing() { doPartA1(); doCzęśćA2(); } ... Wiem, że korzyści płynące z tego są takie, że powielanie jest łatwiej wykrywane, komentarze są zastępowane metodami opisowymi, a metody można testować z większą dokładnością. Ponadto w dużej klasie łatwiej jest wyodrębnić i pogrupować wybrane metody/pól jako kandydata do wyodrębnienia do nowej klasy. Ale myślę, że co najważniejsze, oznacza to, że jeśli patrzę na doSomething() po raz pierwszy, być może będę musiał przeczytać tylko 3 wiersze kodu, aby wiedzieć, co robi, zamiast 7. Jeśli nie rozumiem w pełni funkcji doEvenMore( ), mogę wybrać czytanie metody i tak dalej, przechodząc przez klasę jak hierarchię. Efektywnie zaczynam czytać metodę krótkiego punktu wejścia i muszę czytać niższe metody w dowolnej klasie, gdy muszę głębiej zagłębić się. Tak więc moje pytanie - czy istnieje nazwa tego pojęcia w programowaniu i jaki jest najłatwiejszy, najbardziej zwięzły sposób na jej wyjaśnienie lub zademonstrowanie? Czasami było mi trudno wyjaśnić korzyści kolegom, dlaczego dobrze jest dzielić duże metody, nawet jeśli te nowe metody są wywoływane tylko z jednego miejsca. EDIT: Postaram się być jaśniejszy: nie pytam o pojęcie metod ekstrakcji, pytam o zasadę, która sprawia, że metody ekstrakcji są w tym przypadku właściwym wyborem np. Gdybym miał zduplikowany kod w oryginalnej metodzie, wyodrębniłbym metodę ze względu na zasadę DRY. W powyższym przypadku nie, ale nadal dobrze jest wyodrębnić metody ze względu na zasadę X. Co to jest X?


title: API Apache Wave

text: Chciałbym stworzyć aplikację opartą na Apache Wave. Gdzie mogę dowiedzieć się więcej o pracy z Apache Wave i/lub API dla instancji działającej lokalnie? W tej chwili zakres tego, co mogę znaleźć, wydaje się być API dla _Google Wave_ (uruchamiającego serwery Google) i że jest napisany w Javie.


title: Jak dodawać adnotacje do wystąpienia w diagramach klas UML?

text: Biorąc pod uwagę ten pseudokod: class B { } class A : B { int val; }; alfa = nowy A(); Jaką strzałkę narysuję między „alfa” i „A” na diagramie klas UML? Czy jest to w ogóle coś, do czego służy UML? +-------+ +-------+ +-------+ | alfa | --??-- | A |------|>| B | | | | | | | +-------+ +-------+ +-------+ W moim przypadku naprawdę chcę wyraźnie wyrazić, że `alfa` tworzy instancję `A`. Więc jeśli nie ma sposobu w UML, po prostu wymyślę sposób -- co jest w porządku, ale chcę wiedzieć, czy UML może już to wyrazić. Moja sytuacja jest taka, że próbuję wytłumaczyć OOP przyjacielowi, który jest bardzo wizualny. Dlatego chcę spróbować wizualnie rozróżnić te dwie relacje (dziedziczenie i instancję), aby mógł je odróżnić mentalnie.


title: Jaka jest różnica między C# a wizualizacją C#?

text: Powiedzmy, że chcę rozpocząć naukę C#, aby móc za jego pomocą programować Unity. Szukam dobrej recenzowanej książki i jest na niej napisana "Naucz się Visual C#!". Zadaję sobie pytanie, jaka jest różnica między Visual C# a C#? Jeśli znam Visual C#, czy znam również C#?


title: Wygodniejsza praca na zapleczu, często określana jako rola na froncie

text: Ostatnio złożyłem podanie i otrzymałem różne role w tworzeniu stron internetowych. Jedyną rzeczą, która ciągle się pojawia, jest to, że jestem bardziej przystosowany do rozwoju front-endu niż back-endu. Ma to sens, biorąc pod uwagę moje doświadczenie, które zaczynałem jako projektant. Problem polega na tym, że podczas gdy pracowałem nad dużą aplikacją używającą ExtJS, projektowanie i rozwijanie w ExtJS było dla mnie naprawdę frustrujące. Co dziwne, praca nad tym projektem sprawiła, że zacząłem tworzyć strony internetowe, ponieważ moje umiejętności kodowania zostały docenione przez niektórych starszych programistów. Podkreślam to w swoim CV, ale zastanawiam się, czy to może być pomyłka. Używam JavaScript również trochę poza tworzeniem stron internetowych. W szczególności w Photoscript i InDesign do tworzenia operacji wsadowych. Często zakłada się, że mam specjalistyczną wiedzę na temat JavaScript, podczas gdy dopiero zaczynam mierzyć się ze stylem OOP JavaScript. Używam dużo kodu proceduralnego lub po prostu używam bibliotek takich jak jQuery i Google Maps. Stworzyłem kilka eksperymentalnych aplikacji w Node i Knockout, które na szczęście mi się podobały, chociaż Node jest backendem. Kiedyś unikałem JavaScript i jQuery w niektórych projektach internetowych, ponieważ skupiałem się na SEO i używałbym Javascript tylko wtedy, gdy naprawdę tego potrzebowałem. Podczas wywiadów otrzymuję pytania dotyczące JavaScriptu i front-end developmentu. Ale naprawdę chciałem porozmawiać o PHP i rozwoju po stronie serwera, więc chyba widać moje tło. Jak sobie z tym poradzić, gdy ktoś skontaktuje się ze mną w sprawie roli lub aplikuję bezpośrednio, nie sprzedając mojej krótkiej pozycji?


title: Jaka jest zaleta curry?

text: Właśnie dowiedziałem się o curry i chociaż wydaje mi się, że rozumiem tę koncepcję, nie widzę żadnej dużej korzyści z jej używania. Jako trywialny przykład używam funkcji, która dodaje dwie wartości (napisane w ML). Wersja bez curry byłaby fajna add(x, y) = x + y i byłaby wywoływana jako add(3, 5), podczas gdy wersja curry jest fajna add x y = x + y (* skrót od val add = fn x = > fn y=> x + y *) i zostanie wywołane jako add 3 5 Wydaje mi się, że to tylko cukier składniowy, który usuwa jeden zestaw nawiasów z definiowania i wywoływania funkcji. Widziałem curry jako jedną z ważnych cech języków funkcjonalnych i w tej chwili jestem nim trochę rozczarowany. Koncepcja tworzenia łańcucha funkcji, które zużywają każdy pojedynczy parametr, zamiast funkcji, która pobiera krotkę, wydaje się dość skomplikowana w użyciu do prostej zmiany składni. Czy nieco prostsza składnia jest jedyną motywacją do curry, czy też brakuje mi innych zalet, które nie są oczywiste w moim bardzo prostym przykładzie? Czy curry to tylko cukier syntaktyczny?


title: Licencja Anti Cloud Open Source

text: Pracuję nad projektem monitorowania open source opartym na przeglądarce, który chcę udostępnić społeczności. Martwię się, że ktoś przejmie projekt, zmieni jego nazwę, wdroży go w chmurze i zacznie pobierać opłaty od osób, które nawet nie wiedzą, że mój projekt istnieje. Wiem, że może nie powinnam mieć nic przeciwko, ale to po prostu trochę ugrzęzło mi w gardle, jeśli ktoś wziął taką darmową przejażdżkę i nic nie wpłacił. Czy istnieje jakakolwiek powszechna licencja open source, która może temu zapobiec. Wiem, że GPL czy AGPL nie.


title: Jakie są zalety PHP?

text: Wszyscy wiedzą, że ludzie, którzy mają uprzedzenia do niektórych języków programowania. Zwłaszcza PHP wydaje się cierpieć z powodu problemów z przeszłości i innych rzeczy (takich jak luźne typy) i jest często nazywany niezbyt poważnym językiem programowania, który nie powinien być używany w profesjonalnych aplikacjach. W tym szczególnym przypadku PHP: Jak argumentujesz, używając PHP jako wybranego języka programowania dla aplikacji internetowych? Jakie są korzyści, gdzie PHP jest lepsze niż ColdFusion, Java itp.?


title: Połącz jquery/jqueryui/qtip/custom javascript w jeden zminimalizowany plik

text: Używam jQuery, jQueryUi i qTip w mojej aplikacji internetowej wraz z niestandardowym JavaScriptem, który napisałem. Wszystkie trzy wymienione przeze mnie biblioteki JavaScript są objęte licencją MIT. Z tego, co przeczytałem, wystarczy dołączyć kopię licencji MIT dla każdej z tych bibliotek w mojej aplikacji internetowej. Czy mogę umieścić każdą licencję jako osobny plik w katalogu „licenses” mojego projektu? Miałbym więc katalog licencji z "jQuery-MIT-LICENSE.txt", "jQueryUi-MIT-LICENSE.txt" i "qTip-MIT-LICENSE.txt". A może muszę umieścić licencje na samej górze plików JavaScript? Nie rozumiem, gdzie dokładnie te licencje należy umieścić w mojej aplikacji internetowej... To, czego ostatecznie chcę, to połączyć wszystkie pliki JavaScript w jedną zminimalizowaną wersję, aby przyspieszyć ładowanie i chcę umieścić licencje w czymkolwiek jest właściwe miejsce...


title: Zwiększ wydajność VS 2010 za pomocą dysku SSD

text: Po wyszukaniu w Internecie ulepszeń wydajności podczas korzystania z Visual Studio 2010 z dyskiem półprzewodnikowym, usłyszałem wiele różnych opinii. Wiele osób twierdziło, że korzystanie z dysku SSD nie przynosi żadnych korzyści, ale inni mówili dokładnie odwrotnie. Jestem trochę zdezorientowany sprzecznymi opiniami i tak naprawdę nie mogę podjąć decyzji, czy zakup dysku SSD miałby coś zmienić. Jakie masz doświadczenia z tym problemem i jakiego dysku SSD używałeś?


title: Geokodowanie aplikacji, która nie wyświetla map?

text: Mamy sytuację, w której nasi użytkownicy muszą geokodować lokalizację (programowo zmienić opis na współrzędne szerokości/długości geograficznej) z poziomu aplikacji, która nie może wyświetlić obrazu graficznego. Ponieważ Yahoo Geocoding API i Google Geocoding API wymagają, aby wynik był używany do wyświetlania map (co jest obrazem graficznym), oznacza to, że nie możemy ich użyć natychmiast. Czy dostępna jest usługa geokodowania – usługa internetowa lub zainstalowana lokalnie (preferowana, jeśli nie wymaga dostępu do sieci) – którą można wykorzystać w takim scenariuszu przy rozsądnym modelu cenowym? W tym konkretnym scenariuszu możemy korzystać z aplikacji Windows, bibliotek Java lub zdalnych usług internetowych. Propozycje?


title: Jeśli programujesz w wielu systemach operacyjnych, czy lepiej mieć wiele komputerów + wyświetlaczy?

text: Programuję na iOS i Linux. Mój preferowany system operacyjny to Ubuntu. Teraz mój sklep z oprogramowaniem (ja i partner) rozwija się również dla systemu Windows. Teraz pytanie brzmi, czy bardziej wydajne jest posiadanie wielu stacji roboczych, po jednej dla każdego docelowego systemu operacyjnego? Wydajność i produktywność to wyższy priorytet niż oszczędność pieniędzy. Mam stacjonarną stację roboczą i7 3,4 Ghz z systemem Ubuntu i zwirtualizowanym systemem Windows z dwoma wyświetlaczami i składam jeszcze mocniejszy i7 Hackintosh z 16 GB pamięci RAM (by zastąpić mojego słabego Macbooka Pro 2,2 Ghz i5). Moim konkretnym dylematem jest to, czy powinienem sprzedać pierwszy komputer i potrójny rozruch na drugim, czy kupić dwa dodatkowe wyświetlacze i uruchamiać oba komputery stacjonarne jednocześnie. Doceniłby odpowiedzi od programistów, którzy piszą oprogramowanie dla wielu systemów operacyjnych. Uruchamianie systemów gościa w VirtualBox na jednym systemie nie jest idealne, ponieważ z mojego doświadczenia wynika, że wydajność jest poważnie obniżona podczas wirtualizacji. Zatem wybór jest między podwójnym/potrójnym uruchamianiem na jednym systemie a posiadaniem dwóch systemów, jednego dla OSX + iOS/Windows (podwójny rozruch), a drugiego dla Ubuntu (którego wolę używać jako głównego systemu operacyjnego). Przez większość naszej pracy jednocześnie piszę aplikację serwerową w systemie Linux i klienta na iOS (lub Windows lub OS X).


title: Czym różni się wzór elewacji od warstw abstrakcji?

text: **Właśnie przeczytałem o wzorze fasady i znalazłem ten przykład, w którym klient (użytkownik komputera) wywołuje metodę `startComputer()`, która wywołuje wszystkie złożone rzeczy:** _Źródło: wikipedia_ /* Złożone części */ class CPU { public void freeze() { ... } public void jump(długa pozycja) { ... } public void wykonaj() { ... } } class Memory { public void ładuje(długa pozycja, bajt[] danych) { ... } } class Dysk twardy { public byte[] read(long lba, int size) { ... } } /* Fasada */ class Komputer { private CPU cpu; prywatna pamięć pamięci; prywatny dysk twardy dysk twardy; komputer publiczny () { this.cpu = nowy procesor (); this.memory = new Memory(); this.hardDrive = nowy dysk twardy(); } public void startComputer() { cpu.freeze(); memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE)); cpu.jump(BOOT_ADDRESS); cpu.execute(); } } /* Klient */ class You { public static void main(String[] args) { Fasada komputera = new Komputer(); fasada.startKomputer(); } } Tutaj widzimy klasę klienta (You) tworzącą nową fasadę, wywołującą metodę `startComputer()`. Ta metoda tworzy instancję kilku obiektów i wywołuje ich metody, zamykając je wewnątrz klasy fasady, gdzie `'skleja je razem'`. ### Pytanie 1: **Ale dokładnie czym to się różni od warstw abstrakcji?** Wczoraj stworzyłem funkcję logowania do aplikacji internetowej, w której `doLogin($username, $password)` zawierał `'kompleks' -layer wywołanie metody, która aktualizuje informacje logowania o użytkowniku, ustawia sesje do logowania i tworzy instancje kilku obiektów itp., aby wykonać to zadanie. Ta warstwa wywołałaby również inny, jeszcze niższy poziom, który zajmowałby się operacjami podobnymi do CRUD, takimi jak sprawdzanie statusu aktywacji, istnienie konta i inne rzeczy, takie jak przetwarzanie ciągów za pomocą algorytmów mieszających. Ta metoda _(na poziomie modelu, spójrz na 'przegląd warstwy' poniżej)_ zwróci tablicę z kluczem 'sukcesu' lub kluczem 'komunikat_o_błędach', działając jako rodzaj wartości logicznej dla warstwy wywołującej ją. To, co rozumiem, jest znane jako „warstwy abstrakcyjne”, ukrywające złożone procedury przed architekturą wyższego poziomu, ale kiedy czytam o wzorze elewacji, wydaje mi się, że używam go przez cały czas? ### Pytanie 2: **Czy moje podejście do abstrahowania mechanizmu logowania byłoby złym wyborem w architekturze MVC? (jeśli nie, proszę podać przykłady dlaczego)** Biorąc pod uwagę, że powinno być bardzo łatwo zdecydować, dokąd zmierza wynik końcowy (HTML, AJAX itp.), czy nie byłoby to mądrym wyborem, aby uniknąć wielu IF, ponieważ to można sobie z tym poradzić w warstwie kontrolera? ### Przegląd warstw: **Warstwa kontrolera:** `$model->doLogin(POST VARIABLES TUTAJ)` **Warstwa modelu:** (Czy to fasada?) Ustawia sesje, aktualizuje dane logowania w bazie danych itp., wywołuje niezależne komponenty w celu uzyskania informacji: `$user_id = $user->getId();` i `$session->sessionExists();` **Warstwa niezależnej klasy:** Każda klasa na tej warstwie jest niezależna i ma niewiele lub nie ma jej wcale sprzęganie. W końcu dlaczego miałoby to robić? Zadaniem warstwy powyżej jest zbudowanie aplikacji i użyczenie interfejsu API do sterowania nią. ### Pytanie 3: **Czy wzorzec fasady jest używany tylko do kierowania wywołań do podklas w formie podobnej do API, czy może po prostu najczęściej?** _Mam na myśli:_ Obiekt A tworzy instancję obiektu B i pożycza metoda do kontrolowania metod obiektu B poprzez własną metodę: <?php class A { private $_objectB; funkcja publiczna __construct() { $this->_objectB = new B(); } funkcja publiczna callMethodB() { $this->_objectB->methodB(); } } klasa B { funkcja publiczna metodaB() { die('Wuhu!'); } } // -------------------------- $objectA->callMethodB(); // Wuhu! _zamiast:_ $obiektA->obiektB->metodaB(); // Wuhu!


title: Zapobieganie RSI (powtarzające się urazy przeciążeniowe)

text: Mam 16 lat i uwielbiam programować i grać na pianinie. Nierzadko przez cały dzień waliłem w mysz i klawiaturę. Nie czuję przy tym żadnego bólu. Jednak nadal się martwię, ponieważ często słyszę od ludzi, że nigdy nie mogą pisać dłużej niż 10 minut bez silnych bólów. Biorąc pod uwagę moje dwa hobby, programowanie i granie na pianinie, **bardzo mnie to martwi. Moja obecna sytuacja jest taka: * Klawiatura G15 i mysz G5 * Krzesło, które wygląda tak (oparcie krzesła jest zaskakująco wspierające): http://www.ikea.com/nl/nl/images/products/torbjorn- Bureaustoel__0084333_PE210956_S4.JPG * W mojej „normalnej pozycji siedzącej” stół jest na wysokości pępka. * Ekran LG Flatron L194wt (zbyt mały IMO, wkrótce nowy) Czy powinienem się martwić o RSI / podobne problemy zdrowotne? Jeśli tak, co mogę/powinienem z tym zrobić?


title: Co zrobić z 7 przyciskową myszą jako programista?

text: Właśnie dostałem nową mysz z 7 przyciskami. Czy jest jakiś sposób na użycie tych dodatkowych przycisków w Eclipse lub Emacsie? Czy można mieć przycisk myszy do kompilacji? Masz inne pomysły na wykorzystanie dodatkowych przycisków? Używam Linuksa, ale chciałbym również usłyszeć od użytkowników Windows lub Mac, tylko po to, aby uzyskać kilka pomysłów.


title: Jak przetestować wydajność lub problemy z blokowaniem udostępniania bazy danych innej aplikacji?

text: Mam typowy webapp Spring/Hibernate Tomcat, który ma tabelę user_info. Próbuję utworzyć inną aplikację internetową, która wykona akcje CRUD w tabeli user_info. Rozważam udostępnianie tej samej bazy danych między dwiema aplikacjami. Aplikacje będą używać C3P0 do buforowania bazy danych. Jaki jest najlepszy sposób przetestowania wydajności i wszelkich problemów (np. blokowania), które mogą wyniknąć z udostępnienia bazy danych innej aplikacji?


title: Zrozumienie różnic: tradycyjny interpreter, kompilator JIT, interpreter JIT i kompilator AOT

text: Próbuję zrozumieć różnice między tradycyjnym interpreterem, kompilatorem JIT, interpreterem JIT i kompilatorem AOT. Interpreter to po prostu maszyna (wirtualna lub fizyczna), która wykonuje instrukcje w jakimś języku komputerowym. W tym sensie JVM jest interpreterem, a fizyczne procesory są interpreterami. Kompilacja z wyprzedzeniem oznacza po prostu kompilację kodu do jakiegoś języka przed jego wykonaniem (interpretacją). Jednak nie jestem pewien dokładnych definicji kompilatora JIT i interpretera JIT. Zgodnie z definicją, którą przeczytałem, kompilacja JIT to po prostu kompilacja kodu _tylko_ przed jego interpretacją. Więc w zasadzie kompilacja JIT jest kompilacją AOT, wykonaną tuż przed wykonaniem (interpretacją)? A interpreter JIT to program, który zawiera zarówno kompilator JIT, jak i interpreter, i kompiluje kod (JIT) tuż przed jego zinterpretowaniem? Proszę wyjaśnić różnice.


title: Rozpoczęcie rozwoju Androida

text: Rozważam naukę programowania Androida. Posiadam podstawową wiedzę w C++. Pobrałem wtyczkę ADT i zaćmienie. Teraz zaczynając od http://developers.android.com widzę, że kody były w XML. Więc szukałem w Google do nauki XML. Najlepszą stroną, jaką znalazłem, była http://www.w3schools.org, ale tam odkryłem, że do nauki XML muszę nauczyć się HTML i CSS. Nauczyłem się więc podstaw HTML i CSS. Ale teraz uważam, że nauka java jest koniecznością. Czy ktoś może dać pomysł na języki sekwencyjne, których powinienem się teraz uczyć? Czy powinienem też nauczyć się php, mysql. BTW mam marzenie o pracy w google :p


title: Czy powinieneś kiedykolwiek używać prywatnych w polach i metodach w C#?

text: Jestem trochę nowy w C# i właśnie dowiedziałem się, że: w C# wszystkie pola i metody w klasie są domyślnie prywatne. Oznacza to, że: class MojaKlasa { ciąg mójString } jest tym samym co: class MojaKlasa { prywatny ciąg mójString } Czy skoro są takie same, czy powinienem używać słowa kluczowego private w polach i metodach? Wiele próbek kodu online używa słowa kluczowego private w swoim kodzie, dlaczego tak jest?


title: Dlaczego język JavaScript jest inny w różnych programach/witrynach?

text: Jestem nowy w programowaniu i mam pytanie, które od jakiegoś czasu mnie nurtuje. Dlaczego język JavaScript jest inny w różnych programach/witrynach. Użyłem Codecademy do ćwiczeń i zauważyłem, że różni się od Eclipse i Unity. Na przykład w codecademy używasz: var blabla = "coś", aby zadeklarować zmienną. Jednak w Eclipse używasz: int x = 2, String x = "hej". Dlaczego tak jest? Z góry dziękuję.


title: Wybór abstrakcji klas, gdy istnieje wiele wykonalnych podejść

text: Mam problem z zaprojektowaniem struktury klasy dla niektórych funkcji wyszukiwania. Całkiem możliwe, że podchodzę do tego całkowicie niepoprawnie, ale odkładając to na bok, jestem ciekawy, jak inni ludzie podeszliby do tej sytuacji w następujący sposób: Potrzebujemy funkcji wyszukiwania, która pozwoli użytkownikom uzyskać dostęp do informacji o przesyłkach: * Ludzie będą mogli wyszukiwać za pośrednictwem 3 różne metody wyszukiwania — MethodA, MethodB, MethodC. (Aby dać pewną perspektywę na to, co rozumiem przez „metodę”, pomyślmy o nich jako o takich rzeczach, jak wyszukiwanie jednowierszowe, które wykona inteligentne parsowanie, inna metoda ma określone pola formularza do wprowadzania każdego parametru itp.) * Ludzie będą możliwość wyszukiwania za pomocą 3 różnych typów wyszukiwania - TypeA, TypeB, TypeC. (Na przykład wyszukiwanie według właściciela, wyszukiwanie według adresu paczki itp.) Sytuacja nie jest zbyt skomplikowana, ale utknąłem w tym, czy powinienem projektować moje klasy wokół obiektu metody abstrakcyjnej, czy obiektu typu abstrakcyjnego. Zasadniczo powinienem to zrobić: public class ConcreteMethodA : BaseMethod { public ReturnDataType GetResultsTypeA(){}; public ReturnDataType GetResultsTypeB(){}; //Itp. } Albo tak: public class ConcreteTypeA : BaseType { public ReturnDataType GetResultsMethodA(){}; public ReturnDataType GetResultsMethodB(){}; //Itp. } Jeśli masz jakąś radę, jak rozwiązać mój konkretny scenariusz, z pewnością to docenię. Mnie jednak bardziej interesuje **heurystyka** w podejściu do tego rodzaju problemu projektowego.


title: Kiedy uczyć się wersji wiersza poleceń narzędzia programistycznego?

text: Prawie każde narzędzie programistyczne ma wersję z wiersza poleceń; wiele z nich ma również wersję gui. Nauczenie się różnych poleceń i różnych opcji/przełączników wersji wiersza poleceń zajmuje dużo czasu i wysiłku. Mam więc kilka pytań (które niekoniecznie wykluczają się wzajemnie): 1) Kiedy zawracałbyś sobie głowę uczeniem się/zapamiętywaniem poleceń w wersji wiersza poleceń narzędzia, które jest również dostępne w wersji gui? 2) Jakich narzędzi powinienem nauczyć się w wersji wiersza poleceń? .... kompilatory ? system kontroli wersji ? itd itd


title: Lepsze podejście do refaktoryzacji kodu podczas wykonywania testów A/B

text: Zostałem poproszony o refaktoryzację kodu komponentu w celu obsługi testów A/B. Jakie jest lepsze podejście: 1) Przekaż wartość logiczną do metod i sprawdź, czy ta flaga znajduje się w treści metody? method(flag abTest): if A_VERSION_ENABLED: // Wykonaj logikę 'A' else // Wykonaj logikę 'B' 2) Utwórz dedykowane metody dla każdej wersji? codeForATest() codeForBTest()


title: z wykorzystaniem metod i klas statycznych

text: Wiem, że statyczne metody/zmienne są związane z klasą, a nie z obiektami klasy i są przydatne w sytuacjach, gdy musimy liczyć np. liczbę utworzonych obiektów klasy. Z drugiej strony niestatyczne elementy członkowskie mogą wymagać pracy nad konkretnym obiektem (tj. Użyj zmiennych zainicjowanych przez konstruktor) **Moje pytanie, co powinniśmy zrobić, gdy nie potrzebujemy żadnej z funkcji?** Powiedz, że po prostu potrzebuję funkcja użyteczności, która akceptuje wartości i zwraca wartość opartą wyłącznie na przekazanych wartościach. Chcę wiedzieć, czy takie metody powinny być statyczne, czy nie. W jaki sposób wpływa to na wydajność programowania i która jest lepsza praktyka/konwencja kodowania i dlaczego. PS: Nie chcę wywołać debaty, chcę tylko subiektywnej odpowiedzi i/lub referencji.


title: Jaka jest podstawowa różnica między licencjami MIT i Boost Open Source?

text: Jaka jest podstawowa różnica między licencją open source MIT: Niniejszym udziela się nieodpłatnie każdej osobie otrzymującej kopię tego oprogramowania i powiązanych plików dokumentacji („Oprogramowanie”) na korzystanie z Oprogramowania bez ograniczeń , w tym bez ograniczeń > prawa do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania sublicencji i/lub > sprzedawania kopii Oprogramowania oraz zezwalania na to osobom, którym Oprogramowanie jest > dostarczone, z zastrzeżeniem następujące warunki: > > Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu powinna być zawarta > we wszystkich kopiach lub istotnych częściach Oprogramowania. > > OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB > DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, > PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY NA TEMAT UMOWY, CZYNNEGO LUB INNEGO, WYNIKAJĄCEJ > Z OPROGRAMOWANIA LUB Z UŻYTKOWANIEM LUB INNEGO TRANSAKCJE > W OPROGRAMOWANIU. oraz licencja Boost Open Source : > Niniejszym udziela się nieodpłatnie każdej osobie lub organizacji > uzyskania kopii oprogramowania i dołączonej dokumentacji objętej > niniejszą licencją ("Oprogramowanie") do używania, powielania, wyświetlania, dystrybuować, > wykonywać i przesyłać Oprogramowanie, a także przygotowywać prace > pochodne Oprogramowania, a także zezwalać na to osobom trzecim, którym Oprogramowanie jest dostarczane, > z zastrzeżeniem następujących postanowień: > > Informacje o prawach autorskich w Oprogramowanie i całe to oświadczenie, w tym > powyższe udzielenie licencji, niniejsze ograniczenie i następujące wyłączenie odpowiedzialności, muszą > być zawarte we wszystkich kopiach Oprogramowania, w całości lub w części, oraz we wszystkich > dziełach pochodnych Oprogramowania, chyba że takie kopie lub prace pochodne są > wyłącznie w formie kodu wynikowego wykonywalnego maszynowo, generowanego przez procesor języka źródłowego. > > OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB > DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI PRZYDATNOŚCI HANDLOWEJ, > PRZYDATNOŚCI DO OKREŚLONEGO CELU, TYTUŁU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU > POSIADACZE PRAW AUTORSKICH LUB KTOKOLWIEK DYSTRYBUTOR OPROGRAMOWANIA NIE PONOSI ODPOWIEDZIALNOŚCI > ZA JAKIEKOLWIEK SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY Z UMOWY, CZYN CZYNNY LUB W INNY SPOSÓB, > WYNIKAJĄCE Z OPROGRAMOWANIA LUB W ZWIĄZKU Z UŻYTKOWANIEM LUB INNE W OPROGRAMOWANIU. Chcę zrobić wyjątek od fragmentu „zachowaj tę informację o prawach autorskich”.


title: Jak skutecznie omówić z klientem ograniczenia językowe?

text: Chciałbym poznać pomysły, które są wykorzystywane do wyjaśniania klientowi ograniczeń języka używanego do ulepszenia istniejącego projektu. Biorąc pod uwagę scenariusz, projekt istniał w VC++ 6.0, a klient poprosił o ulepszenie, które mogłoby zawierać komponent przezroczystości (alfa) w części kolorowej (obecnie przy użyciu `gdi`). Dowiedziałem się, że biblioteka `gdiplus` obsługuje taką funkcję, ale nie mogłam jej znaleźć dla MSVS 6.0, ponieważ jest już przestarzała (nie mogła nawet znaleźć dla niej plików msdn) nie obsługuje gdiplus. Musiałem to wyjaśnić mojemu klientowi, więc stworzyłem aplikację w nowszym MSVS i dołączyłem zarówno `gdi` jak i `gdiplus` i narysowałem kilka obiektów używając obu bibliotek obok siebie. Więc dał mu pomysł, że można naprawić następujący punkt, jeśli przeniesiemy go do nowszej wersji kodu. Ponieważ klient sam będąc programistą rozumiał to. Ale zdarzają się przypadki, kiedy klienci nie są programistami i nie mają wiedzy na temat programowania. W takich przypadkach trudno jest wyjaśnić problem.


title: Jak nazywa się następujący wzorzec (anty)? Jakie są jego zalety i wady?

text: W ciągu ostatnich kilku miesięcy kilka razy potknąłem się o następującą technikę / wzór. Jednak nie mogę znaleźć konkretnej nazwy, ani nie jestem w 100% pewien wszystkich jej zalet i wad. Wzorzec wygląda następująco: W interfejsie Java zestaw typowych metod jest zdefiniowany jak zwykle. Jednak przy użyciu klasy wewnętrznej przez interfejs wycieka domyślna instancja. interfejs publiczny Pojazd { public void przyśpiesz(); public void decelerate(); public static class Default { public static Vehicle getInstance() { return new Car(); // lub użyj Springa do pobrania instancji } } } Wydaje mi się, że największą zaletą jest to, że developer musi wiedzieć tylko o interfejsie, a nie jego implementacjach, np. na wypadek, gdyby chciał szybko utworzyć instancję. Pojazd jakiśPojazd = Pojazd.Default.getInstance(); jakiśPojazd.przyspieszyć(); Co więcej, widziałem, jak ta technika jest używana razem ze Springiem w celu dynamicznego dostarczania instancji w zależności od konfiguracji. W związku z tym wygląda na to, że może to pomóc w modularyzacji. Niemniej jednak nie mogę pozbyć się wrażenia, że jest to niewłaściwe użycie interfejsu, ponieważ łączy interfejs z jedną z jego implementacji. _(Zasada inwersji zależności itp..)_ Czy ktoś mógłby mi wyjaśnić, jak nazywa się ta technika, a także jej zalety i wady? **Aktualizacja:** Po pewnym czasie do namysłu ponownie sprawdziłem i zauważyłem, że następująca singletonowa wersja wzorca była używana znacznie częściej. W tej wersji publiczna instancja statyczna jest udostępniana przez interfejs, który jest inicjowany tylko raz (ponieważ pole jest ostateczne). Ponadto instancja jest prawie zawsze pobierana za pomocą Springa lub ogólnej fabryki, która oddziela interfejs od implementacji. interfejs publiczny Pojazd { public void przyśpiesz(); public void decelerate(); public static class Default { public static final Vehicle INSTANCE = getInstance(); prywatny statyczny Pojazd getInstance() { return new Car(); // lub użyj Spring/factory tutaj } } } // Co pozwala na pobranie pojedynczej instancji za pomocą... Vehicle someVehicle = Vehicle.Default.INSTANCE; _W skrócie:_ wygląda na to, że jest to niestandardowy wzorzec singleton/factory, który w zasadzie pozwala wyeksponować instancję lub singletona przez jego interfejs. Jeśli chodzi o wady, kilka z nich zostało wymienionych w poniższych odpowiedziach i komentarzach. Jak dotąd zaletą wydaje się być jego wygoda.


title: Dlaczego EJBContainer nie ma metod zarządzania transakcjami i innymi usługami niskiego poziomu EJB

text: Czytałem, że EJBContainer jest odpowiedzialny za takie rzeczy jak zarządzanie transakcjami, zarządzanie cyklem życia EJB, zarządzanie pulami fasoli itp. Więc przyjrzałem się kodowi źródłowemu Ale wydaje się, że nie ma metod na zarządzanie transakcjami, zarządzanie cyklem życia EJB, zarządzanie pulami fasoli. Więc jak się tym zajmujemy?


title: Wersjonowanie przepływu pracy

text: Uważam, że mam fundamentalne nieporozumienie, jeśli chodzi o silniki przepływu pracy, które byłbym wdzięczny, gdybyś mógł mi pomóc. Nie jestem pewien, czy moje nieporozumienie dotyczy konkretnego silnika przepływu pracy, którego używam, czy jest to ogólne nieporozumienie. Zdarza mi się używać Windows Workflow Foundation (WWF). **Wersja TLDR** WWF umożliwia wdrażanie procesów biznesowych w długotrwałych przepływach pracy (pomyśl miesiące, a nawet lata). Po uruchomieniu nie można zmienić przepływów pracy. Ale jaki proces biznesowy nie może się zmienić w dowolnym momencie? A jeśli proces biznesowy ulegnie zmianie, czy nie chciałbyś, aby Twoje oprogramowanie odzwierciedlało tę zmianę dla już rozpoczętych „wystąpień” procesu biznesowego? czego mi brakuje? **Tło** W WWF definiujesz przepływ pracy, łącząc zestaw czynności. Istnieją różne typy działań \- niektóre z nich służą do kontroli przepływu, takie jak IfElseActivity i WhileActivty, podczas gdy inne umożliwiają wykonywanie rzeczywistych zadań, takich jak CodeActivity, który umożliwia uruchamianie kodu .NET i InvokeWebServiceActivity, który pozwala dzwonić do serwisów internetowych. Aktywności są łączone z przepływem pracy za pomocą projektanta wizualnego. Prawie przeciągasz i upuszczasz czynności z przybornika do obszaru projektanta i łączysz ze sobą działania. Przepływ pracy i czynności mają parametry wejściowe, parametry wyjściowe i zmienne. Mamy jeden przepływ pracy, który czasami działa w ciągu kilku dni, ale może działać przez 5-6 miesięcy. WWF dba o utrwalenie stanu przepływu pracy (jakie czynności aktualnie wykonujemy, jakie są wartości zmiennych itd.). Jak dotąd myślę, że WWF ma sens. Niektórzy ludzie wolą zaimplementować programową reprezentację procesu biznesowego za pomocą projektanta wizualnego niż pisać to wszystko w kodzie. **Więc na czym polega problem?** Czego tak naprawdę _nie otrzymuję_, to: WWF jest przeznaczony do obsługi długotrwałych przepływów pracy. Ale jednocześnie WWF nie ma wbudowanej funkcjonalności, która pozwala modyfikować działające przepływy pracy. Więc jeśli modelujesz proces biznesowy za pomocą przepływu pracy i uruchamiasz go przez 6 miesięcy, lepiej mieć nadzieję, że proces biznesowy się nie zmieni. Ponieważ jeśli tak, będziesz musiał mieć wiele wersji przepływu pracy wykonywanych w tym samym czasie. Wydaje mi się to fundamentalnym błędem projektowym, ale jednocześnie wydaje się bardziej prawdopodobne, że coś źle zrozumiałem. Dla nas miało to pewne **efekty w świecie rzeczywistym**: * Co miesiąc wydajemy nowe wersje, ale niektóre przepływy pracy mogą działać przez rok. Oznacza to, że mamy kilka wersji workflow działających równolegle, czyli kilka wersji logiki biznesowej. Jest to równoznaczne z posiadaniem wielu różnych wersji kodu działających w środowisku produkcyjnym w tym samym systemie w tym samym czasie, co staje się nieco trudne do zrozumienia dla użytkowników. (w zależności od tego, czy kliknęli przycisk „Start” 9 lub 10 miesięcy temu, oprogramowanie będzie zachowywać się inaczej) * Nasz przepływ pracy odnosi się do różnych typów encji, a ponieważ WWF teraz utrwalił się i zserializował, nie możemy tak naprawdę dokonać refaktoryzacji encji od tego czasu nie można wznowić istniejących przepływów pracy (deserializacja nie powiedzie się Otrzymaliśmy kilka **sugestii, jak sobie z tym poradzić** * Kiedy tworzymy nową wersję przepływu pracy, anuluj wszystkie uruchomione przepływy pracy i utwórz nowe. Ale w w naszych przepływach pracy jest dużo pracy ręcznej i jeśli zaczynamy od zera _wiele_ osób musi powtórzyć swoją pracę. Czuję, że ta alternatywa może działać w przypadku prostych przepływów pracy, ale staje się owłosiona, aby automatycznie dowiedzieć się, jakie działania pominąć, jeśli w przepływie pracy została wykonana poważna refaktoryzacja.* Kiedy tworzymy nową wersję przepływu pracy, uaktualnij stare wersje u korzystać z nowej funkcji WWF 4.5 do uaktualniania przepływów pracy. Ale wtedy musielibyśmy pominąć używanie projektanta wizualnego i napisać kod, aby wstrzyknąć działania we właściwe miejsca w przepływie pracy. Według MSDN ta funkcja aktualizacji jest przeznaczona tylko do drobnych poprawek, a nie większych zmian. czego mi brakuje?


title: Wiele historyjek użytkownika ma te same zadania techniczne: co robić?

text: _Małe wprowadzenie do mojej sprawy:_ W ramach większego produktu mój zespół jest proszony o zrealizowanie małego IDE dla DSL. Użytkownik tego produktu będzie mógł wykonywać wywołania funkcji w kodzie, a także jesteśmy proszeni o dostarczenie kilku przydatnych bibliotek funkcji. Zespół wraz z PO umieścił na ścianie pewną liczbę historyjek użytkownika dotyczących różnych bibliotek dla użytkownika IDE. Podczas szacowania pierwszej z tych historii zespół zdecydował, że _mechanizm wywoływania funkcji_ byłby angażującym, ale nie do końca oczywistym zadaniem, więc oszacowanie tej historyjki użytkownika podniosło się z prostej 3 do bardziej niebezpiecznej 5. _Przejście do problemu :_ Następnie zespół przeniósł się do historyjek użytkownika dotyczących innych bibliotek, w rzeczywistości 10 historyjek, i dodał te 2 punkty " _mechanizmu wywołania funkcji_ " do każdej z tych historyjek użytkownika. To natychmiast podniosło sumę punktów dla iloczynu 20 punktów! Wszyscy w zespole wiedzą, że każda historyjka użytkownika może zostać wybrana przez Zamawiającego do następnej iteracji w dowolnym momencie, więc nie powinniśmy izolować tej części w jednej historyjce użytkownika, ale te 20 punktów wydaje się strasznie nierealne! _Zaproponowałem rozwiązanie, ale absolutnie nie jestem usatysfakcjonowany:_ Stworzyliśmy „Historię projektu” i nałożyliśmy na nią te denerwujące 2 punkty. Kiedy jednak zdaliśmy sobie z tego sprawę i zademonstrowaliśmy to naszym klientom, nie byliśmy w stanie pokazać im czegoś naprawdę wartościowego w tej historii! _Tutaj problem polega na tym, czy powinniśmy ignorować zasadę posiadania izolowanych historyjek użytkownika (bez żadnych zależności między nimi)._ Co byś zrobił, a nawet lepiej, co zrobiłeś w takich sytuacjach? * * * _(mała notka: zgodnie z sugestią przeniosłem to pytanie ze stackoverflow)_


title: Czy mój JavaScript wygląda w tym na duży?

text: Jako programiści masz pewne zasłony, za którymi możesz się schować za pomocą swojego kodu. Dzięki PHP cały Twój kod jest wstępnie przetwarzany po stronie serwera, więc dla użytkownika nigdy nie ujrzał on światła dziennego. Jeśli może spieszysz się z jakimś kodem do terminu, dopóki działa poprawnie, użytkownik nigdy nie musi wiedzieć, ile przekleństw umieściłeś w komentarzach. Jednak z coraz większą liczbą aplikacji pisanych dla sieci, z wrażeniami desktopowymi zaimplementowanymi przez AJAX i popularnymi frameworkami, takimi jak jQuery, które są powiązane z każdym Tomem, Dickiem i Harrym, jak programista może zachować trochę godności i ukryć swój kod JavaScript bez obnosi się jak brudne pranie, gdy użytkownik kliknie prawym przyciskiem myszy->Wyświetl źródło lub Sprawdź element. Czy istnieją sposoby na ukrycie logiki/kodu aplikacji JavaScript?


title: Definiowanie nazw rang dla pracowników

text: Chcę stworzyć listę rang dla pracowników mojej firmy. Jesteśmy integratorem open source, który zwykle pracuje z istniejącymi rozwiązaniami, a także buduje niestandardowe rozwiązania. Nie chcemy nazywać naszych pracowników zwykłymi starszymi konsultantami, praktykantami i chcielibyśmy przyznać im rangi, tak jak robią to fora dla użytkowników. Czy ktoś ma jakieś sugestie dotyczące tego?


title: Przypadki użycia powiązane sekwencyjnie, jak sobie z tym poradzić?

text: Wyrażę moje wątpliwości na przykładzie. Załóżmy, że mam następujące wymaganie: > _Klient potrzebuje strony w swojej witrynie internetowej, która wyświetla wszystkie posiadane przez niego > produkty z polem ilości z boku każdego produktu. Odwiedzający stronę > musi być w stanie wpisać żądane ilości, wybrać jedną lokalizację > i poprosić o budżet. Po zapytaniu o budżet, odwiedzający musi > zostać przeniesiony na stronę z podsumowaniem żądanych produktów, wraz z > cenami i polami do wypełnienia danych kontaktowych, aby kontynuować negocjacje > w razie potrzeby_ Aby to zorganizować, zdecydowałem się budowanie dwóch przypadków użycia: „Wymagaj budżetowania” i „Zapytaj o produkty”. Pierwszy z nich to: > Tytuł: Wymagaj budżetowania > > Aktor: Odwiedzający witrynę > > Scenariusz: > > * Odwiedzający wybiera, aby zobaczyć produkty > > * Gdy odwiedzający chce dodać produkty do budżetu > > * Odwiedzający wypełnia żądana ilość produktu w > odpowiednim polu > * gość wybiera swoją lokalizację, aby oszacować cenę wysyłki > > * gość wysyła zapytanie > > Następnie gość zostanie przekierowany na stronę z informacją, o co prosi i pola, które wymagają produktów. Jest to kolejny przypadek użycia, ale jest blisko związany z pierwszym, ponieważ jest w sekwencji. Nie wiedziałem dokładnie, jak sobie z tym poradzić. Pomyślałem więc o zastosowaniu warunku wstępnego: > Tytuł: Zapytaj o produkty > > Aktor: Odwiedzający stronę > > Warunek wstępny: gość poprosił o budżet > > Scenariusz: > > * Odwiedzający przegląda produkty i ceny > > * Jeśli chce poprosić o produkty > > * Odwiedzający wypełnia swoje dane kontaktowe i wysyła do działu sprzedaży > > * Jeśli nie, opuszcza stronę > > Ale nie jestem pewien, czy jest to właściwy sposób, myślę, że " rozszerzenie” było właściwym sposobem na wyrażenie tego, ale myślę, że jeszcze tego nie zrozumiałem. Jak postępować, gdy przypadki użycia są ze sobą ściśle powiązane?


title: Używasz neo4j do zarządzania zadaniami projektowymi i harmonogramami?

text: Rozważam wykorzystanie Neo4j do zarządzania zadaniami projektowymi i harmonogramami oraz obliczania ścieżek krytycznych. Oczywiście zadania i kamienie milowe byłyby węzłami, a zależności byłyby relacjami. Czy są jakieś najlepsze praktyki, zasoby lub implementacje, do których mogę się odwołać?


title: Jaką dokumentację powinni dostarczyć deweloperowi projektanci UX?

text: Interesujące byłoby usłyszeć, co jest używane oprócz szkiców inżynierów UX podczas tworzenia GUI. Niestety nasz zespół UX zapewnia tylko minimalne wymagania dla ekranów GUI. Uważam, że lepszym rozwiązaniem byłoby użycie niektórych tabel z wymaganiami i maszynami stanów, czy może to być po prostu tekstowy opis zachowania GUI? Czy to jest coś, czego używasz? Próbowałem porozmawiać z naszym zespołem UX, ale wygląda na to, że nie można uzyskać od nich niczego poza szkicami graficznymi i zastanawiam się, czego używają inni. Nasz projekt jest obecnie przeznaczony dla iPhone'a, ale przydatne może być wysłuchanie wszelkich porad, nawet jeśli programujesz na dowolną inną platformę, a nawet komputer stacjonarny lub sieć. Dziękuję!


title: Czy można powiedzieć, że CSS to AOP?

text: Skoro selektory są odpowiednikiem punktów, a reguły robią to samo, co porady, - czy możemy powiedzieć, że kaskadowe arkusze stylów są zgodne z paradygmatem zorientowanym aspektowo? I następstwo tego: „każdy koder CSS wykonuje AOP”? Znalazłem to podobieństwo jakiś czas temu, ale genialny post poniżej potwierdził moje przemyślenia na ten temat: Za każdym razem, gdy używasz CSS, wykonujesz Programowanie Aspektowe > Kiedy piszesz następujące oświadczenie CSS, wstrzykujesz zachowanie > zasady w całej witrynie, bez dotykania kodu, który już jest > tam... > > Programowanie aspektowe jest najbardziej niezrozumianym paradygmatem programowania. > Ale zasadniczo powodem, dla którego istnieje CSS, jest ten sam powód, dla > > aby lepiej oddzielić problemy w kodzie.


title: Wszystkie możliwe rozwiązania równania, gdzie operatory są arbitralne?

text: Mając coś takiego: 1 5 3 4 = 18 muszę określić (za pomocą algorytmu), czy istnieje kombinacja operatorów i nawiasów, która prowadzi mnie do 18. Tylko "+" i "*" oraz "(" i ") " są dozwolone. Przykład: 1 + 5 + ( 3 * 4 ) = 18 Czy oprócz brutalnej siły istnieje jakiś konkretny algorytm, który jest w stanie obliczyć wszystkie możliwe kombinacje w rozsądnym czasie? RPN może pomóc w zakodowaniu możliwych rozwiązań, ale tych samych jest dużo (4^n ?).


title: Wskazówki dotyczące wywiadów telefonicznych

text: Za kilka dni mam przeprowadzić pierwszą rozmowę telefoniczną (to ja udzielam wywiadu) i zastanawiam się, jak do tego podejść (jak się przygotować, czego się spodziewać itd.) . Praca jest dla inżyniera oprogramowania. Jak zwykle przebiegają te rzeczy? Co poradziłbyś komuś, kto ma przeprowadzić rozmowę telefoniczną?


title: Jak sprawić, by programista zastosował ładne akcenty projektowe?

text: Mamy małą firmę zajmującą się projektowaniem stron internetowych i liczymy z jednym projektantem. Obecnie nie możemy sobie pozwolić na zbyt dużą rozbudowę w obszarze projektowania, co oznacza, że projektant tworzy główny projekt strony internetowej (co często oznacza: stronę główną), a następnie programiści pracują nad tym, aby zrobić z niej stronę internetową. Ogólnie to działa dla nas. Zauważyłem jednak dużą różnicę między zdolnościami różnych programistów do stosowania „ładnych elementów projektu” na stronie internetowej. Biorąc pod uwagę, że mamy tylko projekt strony głównej, często musimy sami ustrukturyzować wewnętrzne sekcje. Nic wielkiego, nie potrzeba żadnego programu do projektowania, ale w grę wchodzą umiejętności CSS. Załóżmy więc, że musimy pokazać listę różnych sekcji w witrynie. Będę miał treść i przydzielę to dwóm programistom. Jeden wymyśli to: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/jw6Lr.png) A inny zrobi wszystko, co w jego mocy - i ma tę samą wiedzę o CSS - ale może tylko wymyśl coś takiego: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/aVTiU.png) UWAGA: przykładowy obraz pobrany ze strony MailChimp. Drugi programista zdaje sobie sprawę, że jego „projektowi” brakuje stylu i wymaga poprawy, ale po prostu nie jest w stanie stworzyć czegoś ładnego bez naszkicowania tego przez kogoś innego. Chce nad tym popracować, ale nie wiem, jakie byłoby dobre podejście. Jakieś wskazówki? Ktoś z podobnymi doświadczeniami?


title: Jak śledzić licencje na oprogramowanie innych firm?

text: Jak śledzić licencje na biblioteki innych firm, których używasz w swoim oprogramowaniu? Jak sprawdziłeś licencje? Czasami licencje się zmieniają lub biblioteki zamieniają licencje — jak możesz być na bieżąco? W tej chwili mam arkusz kalkulacyjny Excela z arkuszami roboczymi oprogramowania firm trzecich, licencjami i projektami, w których je wykorzystujemy (zorganizowane jak relacyjna baza danych). Wygląda na to, że działa dobrze, ale myślę, że dość szybko stanie się nieaktualny.


title: Jakie są konkretne znaczenie terminów: funkcje, metody, procedury i podprogramy?

text: Zastanawiam się, jakie są konkretne różnice w terminologii, której używamy do grupowania powiązanych części kodu. Czasami widziałem terminy używane zamiennie: wiele języków OO używa nawet słowa kluczowego "funkcja" do zdefiniowania metody. (Dlaczego?) Jeśli chcesz być precyzyjny, jakie są konkretne znaczenia każdego z nich? A może jest to po prostu jak każdy język wybierze to nazwać?


title: Jaki jest najlepszy sposób obsługi błędów w kodzie?

text: Więc jestem trochę zaniepokojony obsługą błędów... Obecnie moja ścieżka wykonania wygląda mniej więcej tak: > Users.aspx -> App_Code/User.cs -> Data Layer/User.cs Więc teraz, kiedy próbuję zaktualizować rekord użytkownika, umieszczam blok Try/Catch w programie obsługi zdarzeń i upewniam się, że tylko klasa App_Code współdziała z warstwą danych. Wyjątki, które występują w warstwie danych, według mojego zrozumienia, powinny pojawić się w poniższej obsłudze zdarzeń. W warstwie danych zacząłem od tego: public void Update() { var product = (z pw db.products gdzie p.productid == id select p).FirstOrDefault(); if (product != null) { // aktualizacja rzeczy } } Więcej informacji na reddicie. Po rozmowie z przyjacielem polecił coś takiego: public void Update() { int count = db.users.Count(u => u.userid == id); if (count == 0) // nie znaleziono użytkownika { throw new ValidationException(String.Format("Nie znaleziono użytkownika dla id {0}.", id)); } if (count > 1) // wielu użytkowników { throw new ValidationException(String.Format("Znaleziono wielu użytkowników dla id {0}.", id)); } var użytkownik = db.users.FirstOrDefault(u => u.userid == id); // aktualizacja rekordu użytkownika } Następnie udałem się na IRC, gdzie zasugerowali utworzenie własnych wyjątków. Widzę tutaj plusy, ale wydaje się to trochę niepotrzebne, gdy opcja mojego przyjaciela będzie działać dobrze. Zasadniczo jestem po prostu zdezorientowany, jak mam sobie z tym poradzić... Oczywiście moja początkowa opcja jest niewystarczająca, ale wygląda na to, że tworzenie własnych wyjątków może zbytnio komplikować sprawy. Więc co powinienem tutaj zrobić?


title: Czy funkcje wyższego rzędu w FP mogą być interpretowane jako pewnego rodzaju wstrzykiwanie zależności?

text: Zgodnie z tym artykułem w programowaniu / projektowaniu obiektowym **dependency injection obejmuje * zależnego konsumenta, * deklarację zależności komponentu, definiowanych jako kontrakty interfejsowe, * iniektor, który tworzy instancje klas implementujących daną zależność interfejs na życzenie. Rozważmy teraz funkcję wyższego rzędu w funkcjonalnym języku programowania, np. filtr funkcji Haskell :: (a -> Bool) -> [a] -> [a] z `Data.List`. Funkcja ta przekształca listę w inną listę i w celu wykonania swojej pracy wykorzystuje (zużywa) zewnętrzną funkcję predykatu, którą musi dostarczyć jej wywołujący, np. filtr wyrażeń (\x -> (mod x 2) == 0) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] wybiera wszystkie liczby parzyste z listy wejściowej. Ale czy ta konstrukcja nie jest bardzo podobna do wzorca zilustrowanego powyżej, gdzie * funkcja `filter` jest **odbiorcą zależnym** , * podpis `(a -> Bool)` argumentu funkcji jest **interfejsem kontrakt** , * wyrażenie używające wyższego rzędu to **wtryskiwacz**, który w tym konkretnym przypadku wstrzykuje implementację `(\x -> (mod x 2) == 0)` kontraktu. Mówiąc bardziej ogólnie, czy można powiązać funkcje wyższego rzędu i ich wzorce użycia w programowaniu funkcjonalnym ze wzorcem wstrzykiwania zależności w językach obiektowych? Lub w odwrotnym kierunku, czy wstrzykiwanie zależności można porównać do użycia jakiejś funkcji wyższego rzędu?


title: Czy Wordpress jest bardziej odpowiedni niż Magento/Opencart dla takiej strony?

text: Założeniem witryny jest to, że użytkownik płaci niewielką opłatę za reklamowanie przedmiotu, który chce sprzedać. Dlatego to użytkownik jest odpowiedzialny za dodawanie "produktów", a nie administrator. Przesłanie produktu spowoduje utworzenie strony produktu dla tego produktu. Jest to dość powszechny framework, który na pewno znasz. Moją pierwszą myślą było, że najlepiej będzie używać Magento – głównie dlatego, że musi akceptować płatności – a produkty będą rosły, tworząc katalog produktów skategoryzowanych. Jednak – nie ma koncepcji koszyka na zakupy. Kupujący nie kupuje przedmiotu online ani nie przechodzi do kasy. Po prostu patrzą na produkt i kontaktują się ze sprzedawcą, jeśli im się podoba. Następnie kupujący i sprzedający biorą go stamtąd. Z tego powodu zaczynam podejrzewać, że Magento jest być może zbyt przesadą, lub po prostu nieodpowiednim CMS, jeśli istnieje procedura kasy (inna niż przesyłający dokonujący płatności). Więc wtedy zaczynam myśleć o Wordpress .... Hmmm Wymagania funkcji: * Użytkownik może dodawać treści za pomocą formularza * Użytkownik może zostać przekierowany do bramki płatności * Dla każdej listy produktów - seria zdjęć powinna być wyświetlana w formie miniatury Możliwość powiększania/obracania zdjęć byłaby mile widziana W skrócie - CMS e-commerce, czy coś prostszego?


title: Czy nielegalne jest przepisywanie każdej linii projektu open source w nieco inny sposób i używanie go w projekcie o zamkniętym kodzie źródłowym?

text: Istnieje pewien kod, który jest na licencji GPL lub LGPL, który rozważam użycie w projekcie iPhone'a. Gdybym wziął ten kod (JavaScript) i przepisał go w innym języku do użytku na iPhonie, czy byłby to problem prawny? Teoretycznie proces, który się wydarzył, polega na tym, że przeszedłem przez każdą linię projektu, nauczyłem się, co robi, a następnie ponownie zaimplementowałem idee w nowym języku. Wydaje mi się, że jest to jak uczenie się, jak coś wdrożyć, a następnie ponowne wdrożenie niezależnie od oryginalnej licencji. Dlatego skopiowałeś tylko algorytm, którego prawdopodobnie mogłeś nauczyć się z innego miejsca niż oryginalny projekt. Czy licencja obejmuje również konkretną implementację lub algorytm? EDYTUJ------ Naprawdę cieszę się, że ten temat tworzy dobrą rozmowę. Aby dać trochę więcej wsparcia projektowi, zaangażowany kod przeprowadza pewnego rodzaju analizę dźwięku. Uważam, że nauka lub wdrożenie nie jest trywialne, chociaż byłem przygotowany do podjęcia tego zadania (jestem na poziomie, na którym mogę zaimplementować algorytm FFT, a to miało wyjść poza to). niski poziom LOC, więc nie sądziłem, że zrobienie prostego portu nie będzie zbyt trudne. Bardzo podoba mi się pomysł ponownego wydania mojego portu, a także wykorzystania go w aplikacji. Nie widzę z tym żadnego problemu i byłby to świetny sposób na oddanie czegoś społeczności. Miałem zamiar dodać zdanie, że nie chcę dyskutować o kwestiach moralnych, ale cieszę się, że tego nie zrobiłem, ponieważ wydaje się, że trochę rozpaliło to debatę. Nadal czuję się trochę dziwnie, używając kodu open source do uczenia się. Czy to oznacza, że czegokolwiek, czego się uczy z projektu open source, nie może być używane w projekcie o zamkniętym kodzie źródłowym? A jak długo po lub inaczej musi nastąpić wdrożenie, aby nie zostało uznane za naruszenie licencji? Mroczny! EDYCJA 2 -------- Pytanie uzupełniające


title: Zalety języków innych niż OOP i dobre zastosowania

text: Jestem programistą C#, ale znam też Javę, JavaScript, XSLT, trochę C i Perla, e inne, o których być może zapomniałem. Jednak najbardziej znanym mi paradygmatem jest OOP. Zawsze myślałem, że OOP jest naturalną ewolucją programowania proceduralnego, ale zastanawiałem się, czy OOP jest aż tak doskonały. Po przeczytaniu kilku artykułów w sieci i kilku pytań tutaj stwierdziłem, że wiele osób się z tym nie zgadza, a niektórzy twierdzą nawet, że OOP to zła opcja. Podczas programowania naprawdę doceniam używanie lambd, LINQ, typów anonimowych i naprawdę lubię JavaScript z jego prototypowaniem i dynamiczną naturą. Ale nadal nie przychodzi mi do głowy żaden scenariusz, w którym OOP nie jest opcją lub gdzie inne paradygmaty pasują lepiej. Jedyne, co przychodzi mi do głowy, to to, że czasami programowanie z OOP jest naprawdę nudne i powolne, tak jak konieczność deklarowania klasy, importowania innych klas i deklarowania metody, określania jej parametrów, zwracania typu i nazwy tylko po to, aby pokazać „Hello, World !" na ekranie konsoli. Ale nadal, w przypadku rzeczywistych programów, wydaje się, że jest to coś, co rekompensuje jego koszt. W jakich scenariuszach inne paradygmaty pasują lepiej niż OOP? Jakie są jego zalety w porównaniu z OOP i czy OOP pogarsza sytuację, zamiast pomagać? W szczególności, jakie są zalety i w jakich scenariuszach przewyższa programowanie proceduralne i funkcjonalne?


title: Zoptymalizowany uciekinier postaci specjalnej kontra dopasowanie/wzór

text: Muszę uciec od znaków specjalnych, które są wysyłane do Apache Lucent. Ponieważ kod będzie działał na serwerze produkcyjnym, chcę, aby kod był jak najszybszy. Widziałem wiele sposobów, aby to zrobić: Używanie wzorca Używanie zastępowania Używanie biblioteki Zobacz: http://www.javalobby.org/java/forums/t86124.html Zastanawiam się: * W przypadku trywialnych przypadków, takich jak ten, regex lub zwyczaj? * Czy poniższe można dalej zoptymalizować. /* * Lucene obsługuje unikanie znaków specjalnych, które są częścią składni * zapytania. Obecne znaki specjalne na liście to + - && || ! * ( ) { } [ ] ^ " ~ * ? : \ * * Aby zmienić ten znak, użyj \ przed znakiem. */ String query = "http://To+*jest||a&&test(cokolwiek!!!!! !)"; char[] queryCharArray = new char[query.length()*2]; char c; int length = query.length(); int currentIndex = 0; for (int i = 0; i < length; i++ ) { c = query.charAt(i);switch (c) { case ':': case '\\': case '?': case '+': case '-': case '!': case '( ': case ')': case '{': case '}': case '[': case ']': case '^': case ''': case '~': case '*': queryCharArray[currentIndex++ ] = '\\'; queryCharArray[bieżącyIndeks++] = c; przerwanie; case '&': case '|': if(i+1 < length && query.charAt(i+1) == c) { queryCharArray[currentIndex++] = '\\'; queryCharArray[bieżącyIndeks++] = c; queryCharArray[bieżącyIndeks++] = c; i++; }         przerwanie; domyślnie: queryCharArray[currentIndex++] = c; } } zapytanie = new String(queryCharArray,0,currentIndex); System.out.println("TEST="+zapytanie);


title: Ukryj menu administratora, jeśli nie ma opcji administratora

text: Jeśli masz menu „Zadania administracyjne” i różne zadania administracyjne (np. 10), które możesz osobno przypisać każdemu użytkownikowi, ale są użytkownicy, którzy nie mają żadnych zadań administracyjnych, jak poradzisz sobie z „Ukrywaniem menu administracyjnego” dla ci użytkownicy? Myślałem o 3 sposobach: 1) JavaScript, sprawdź, czy menu Admin jest puste, a następnie ukryj je. 2) Sprawdź wszystkie uprawnienia w menu administratora za pomocą licznika i pokaż go, jeśli licznik > 0. Następnie ponownie sprawdź uprawnienia dla każdego elementu do wyświetlenia. 3) Zapisz wszystkie uprawnienia w tablicy asocjacyjnej. Przetestuj wszystko i przypisz „prawda” do przyznanych pozycji. Budując menu, miej funkcję, która sprawdza, czy przyznano co najmniej jedno uprawnienie. Nie musiałbym ponownie sprawdzać uprawnień względem bazy danych, tylko względem tablicy dla każdego elementu. Czy jest lepszy sposób?


title: Identyfikacja, w jaki sposób serwer uwierzytelnia użytkowników

text: Próbuję zbudować bota, który przeanalizuje listę zajęć oferowanych przez moją uczelnię i da mi znać, kiedy ta, której szukam, będzie otwarta. Problem polega na tym, że aby dostać się do pola rejestracji/wyszukiwania muszę się zalogować przy użyciu nazwy użytkownika i hasła uczelni. Próbuję dowiedzieć się, jakiego protokołu używa moja szkoła do uwierzytelnienia mnie, abym mógł podać mojemu botowi moje dane uwierzytelniające i pozwolić mu się zalogować, aby mógł uzyskać dostęp do strony rejestracji/wyszukiwania, więc jak mogę dowiedzieć się, jakie one są używając, więc mogę dowiedzieć się, jak zaimplementować go w dowolnym języku, który zdecyduję się użyć. Przeszedłem przez przechwytywanie pakietów, ale wszystko, co widzę, to synchronizacja/potwierdzenie SSL, co, jak sądzę, jest celem SSL haha. Czy ktoś może polecić, jak dowiedzieć się, jakiego protokołu używa moja szkoła do logowania użytkowników?