title: Czy rozszerzenia reaktywne i ETL idą w parze?

text: Nie do końca rozumiem rozszerzenia reaktywne, ale moja wstępna lektura sprawiła, że pomyślałem o kodzie ETL, który posiadam. W tej chwili jest to w zasadzie przepływ pracy do wykonywania różnych operacji w określonej kolejności w oparciu o warunki, które znajdują się w miarę postępu. Mogę również wyobrazić sobie sposób napędzany zdarzeniami, w którym tylko niewielka ilość imperatywnej logiki powoduje wystąpienie reakcji łańcuchowej. Oczywiście nie potrzebuję nowego modelu programowania, aby stworzyć taką współpracę sterowaną zdarzeniami. Tak samo zastanawiam się, czy ETL jest dobrym rozwiązaniem do potencjalnego dalszego eksplorowania Rx. Czy moje połączenie w prawidłowym kierunku jest równe? Jeśli nie, czy mógłbyś krótko poprawić błąd w mojej logice?


title: Jak rozpocząć refaktoryzację mojej aplikacji w C++, która jest głównie proceduralna?

text: Mamy program napisany w C++, który jest w większości proceduralny, ale używamy niektórych kontenerów C++ ze standardowej biblioteki (wektorów, map, list itp.). Ciągle wprowadzamy zmiany w tym kodzie, więc nie nazwałbym go zastałym fragmentem starszego kodu, który możemy po prostu dokończyć. Jest wiele problemów z tym kodem, co utrudnia nam wprowadzanie zmian, ale widzę trzy największe problemy: 1. Wiele funkcji robi więcej (o wiele więcej) niż jedną rzecz 2. Naruszamy DRY zasada lewa i prawa 3. Mamy zmienne globalne i stan globalny na górze wazoo. Pomyślałem, że najpierw powinniśmy zaatakować obszary 1 i 2. Po drodze możemy "zdeglobalizować" nasze mniejsze funkcje od dołu do góry, przekazując informacje, które są obecnie globalne jako parametry, do funkcji niższego poziomu z funkcji wyższego poziomu, a następnie skoncentrować się na wymyśleniu, jak usunąć potrzebę jak najwięcej zmiennych globalnych. Właśnie skończyłem czytać Code Complete 2 i The Pragmatic Programmer i dużo się nauczyłem, ale czuję się przytłoczony. Chciałbym wdrożyć testowanie jednostkowe, przejść z podejścia proceduralnego na OO, zautomatyzować testowanie, zastosować lepszy system logowania, w pełni walidować wszystkie dane wejściowe, wdrożyć lepszą obsługę błędów i wiele innych rzeczy, ale wiem, czy zaczynamy to wszystko od razu, pieprzylibyśmy się. Myślę, że na początek najważniejsze są trzy wymienione przeze mnie trzy. Wszelkie sugestie są mile widziane. Jesteśmy zespołem dwóch programistów w większości z doświadczeniem w tworzeniu wewnętrznych skryptów. Trudno będzie uzasadnić poświęcenie czasu na refaktoryzację, zwłaszcza jeśli nie możemy obciążyć klienta kosztami tego czasu. Wierzcie lub nie, ale ten projekt okazał się na tyle udany, że zajęliśmy się nim w pełnym wymiarze godzin, a kilku konsultantów było zajętych używaniem go do pracy z klientami.


title: Jakie są opcje kariery w Delphi

text: Jestem świeżo upieczonym pracownikiem firmy antywirusowej w Indiach. Pracujemy w Delphi 7. Teraz wiem, że delphi nie jest zbyt szeroko stosowane. Obawiam się, że będę czymś w rodzaju pariasa w branży zdominowanej przez Javę i C itp. Moja firma też nie jest tak wspaniała. W niedalekiej przyszłości chciałbym przejść do większej firmy. Czy możesz mi powiedzieć kilka firm (mnc), które realizują swoje projekty w delphi? Dziękuję


title: Wywiad: Przejrzyj kod innego programisty

text: Jeden z moich kolegów niedawno odszedł i zostałem poproszony o przejrzenie kodu osoby udzielającej wywiadu, która miała go zastąpić. Nie mam pojęcia, jaki kod przyniesie ze sobą, a ponadto nigdy wcześniej nie obarczano mnie taką odpowiedzialnością, więc chętnie udzielę użytecznego i sprawiedliwego wkładu. Czy ktoś może podać zwięzłą listę rzeczy, na które należy zwrócić uwagę? _Rozumiem, że to bardzo obszerne pytanie, ale wydaje się, że jest to również bardzo odpowiednie forum, na którym można je zadać._


title: Jak na jednej witrynie może pracować wiele osób?

text: Hej chłopaki, ostatnio oglądałem The Social Network i to może być głupie pytanie, ale jak to możliwe, że wiele osób może pracować na jednej stronie? To znaczy, jeśli pracują na tej samej stronie, jak to możliwe? A także, czy można przesyłać pliki do hosta online bez ich udostępniania? Z góry dziękuję.


title: Dystrybucja mojej aplikacji w obrazie wirtualnej maszyny Debiana — jak spełnić zobowiązania GPL?

text: Mam stworzoną przeze mnie aplikację dla systemu Linux i stworzyłem samodzielny obraz VMWare, który można pobrać, aby wypróbować aplikację bez konieczności instalowania i konfigurowania serwera Linux. Stworzyłem ten obraz VMWare, zaczynając od podstawowego systemu Debian, instalując kilka pakietów, a następnie konfigurując wszystkie pakiety i demony, od których zależy moja aplikacja. Po załadowaniu obraz VMWare uruchamia się bezpośrednio na serwerze X, na którym działa tylko moja aplikacja i nie ma menedżera okien, więc jest to bardziej "urządzenie wirtualne" niż normalne środowisko Linux Desktop. Użytkownicy na ogół nigdy nie zobaczą wiersza poleceń ani żadnej aplikacji innej niż moja własna. (Moja aplikacja sama zajmuję się kwestiami licencyjnymi) Teraz chciałbym rozpowszechniać ten obraz, ale nie jestem pewien, jak spełnić moją GPL (i inne licencje, na których są wydawane różne komponenty Debiana) Obowiązki. Jak rozumiem, mam do spełnienia dwa podstawowe obowiązki. 1. Dostarczenie informacji o prawach autorskich i licencji dla każdego używanego przeze mnie składnika. Jak rozumiem, wszystkie informacje, które muszę przedstawić, znajdują się w katalogu /usr/share w Debianie, ale ponieważ moi użytkownicy zazwyczaj nigdy nie dotykają konsoli ani terminala, nigdy tego nie zobaczą. Czy udostępnienie pliku tekstowego zawierającego konkatenację wszystkich plików znajdujących się w /usr/share spełnia ten obowiązek. 2. Udostępnienie kodu źródłowego dla wszystkich dystrybuowanych przeze mnie komponentów. Ponieważ nie tworzę obrazu ze źródeł, ale z pakietów binarnych, nie mogę dostarczyć rzeczywistego kodu źródłowego, który spowoduje wygenerowanie dokładnie mojego obrazu. Czy udostępnienie mirrora ftp i oferta wysłania tego mirrora na DVD ze źródłami Debiana dla wszystkich używanych przeze mnie pakietów spełnia ten obowiązek? 3. Co jeszcze muszę zrobić, aby legalnie rozpowszechniać ten obraz?


title: Najlepszy sposób na przeszukiwanie struktury katalogów

text: Pracuję nad programem Pythona, który organizuje bibliotekę muzyczną. Program zasadniczo pomoże mi wykryć błędnie napisane nazwy plików lub katalogów, złe tagi FLAC lub nieznane/zbędne pliki. Upewni się również, że pliki FLAC mają prawidłowe nazwy zgodnie z ich znacznikami FLAC itp. Struktura, o której pomyślałem, wygląda następująco (`/` jest korzeniem biblioteki muzycznej): / [kategoria] [wykonawca] [rok] - [wydanie] [numer utworu] - [tytuł].flac [...] [wykonawca] - [wydanie].jpg [wykonawca] - [wydanie].cue [wykonawca] - [wydanie].log Różni wykonawcy [artysta_0 [, wykonawca_1 [, ...]]] - [rok] - [wydanie] [numer utworu] - [tytuł].flac [...] [wykonawca_0 [, wykonawca_1 [, ...]]] - [wydanie ].jpg [wykonawca_0 [, wykonawca_1 [, ...]]] - [wydanie].cue [wykonawca_0 [, wykonawca_1 [, ...]]] - [wydanie].log [...] [... ] Zacząłem pisać trochę kodu, ale dość szybko zauważyłem, że nie jest to zbyt łatwy problem rozwiązywać. Napisałem 4 funkcje, `kategoria`, `artysta`, `release` i `file`, które są odpowiednio wywoływane podczas iteracji we wszystkich katalogach. W zasadzie tak (pseudokod): func category: sprawdź każdy plik w tym katalogu: artist(file) func artist: sprawdź każdy plik w tym katalogu: release(file) func release: sprawdź każdy file in this directory: file(file) func file: wykonaj kilka sprawdzeń (znaczniki FLAC itp.) dla każdego pliku w katalogu głównym: category(file) Zastanawiam się teraz, czy są jakieś znane algorytmy lub techniki, które można wykorzystać do rozwiązać ten problem w elegancki sposób?


title: Dlaczego podniesienie funkcji binarnej do listy monad obejmuje wszystkie kombinacje elementów?

text: Powiedzmy, że jeśli chcę utworzyć iloczyn kartezjański dwóch list, mógłbym zrobić (tu w Haskell, ale mogę zrobić to samo, np. w Scali lub dowolnym innym języku obsługującym FP) cartesianProd = liftM2 (,) następnie >cartesianProd [1 ,2] [3,4] >[(1,3),(1,4),(2,3),(2,4)] Oczywiście, użycie (podnoszenie) `+` zamiast parowania krotek, da wykaz sum wszystkich kombinacji. Zgodnie z definicją FP, „podnoszenie to koncepcja, która pozwala przekształcić funkcję w odpowiednią funkcję w innym (zwykle bardziej ogólnym) ustawieniu”. Sposób, w jaki to rozumiem, jeśli mam argumenty monadyczne, mogę przekształcić moją funkcję binarną, aby działała z nimi przez liftM2. Skąd jednak pochodzi produkt kartezjański? Intuicyjnie oczekiwałbym `[(1,3), (2,4)]` z powyższego przykładu.


title: Test rozmowy kwalifikacyjnej PHP. Jakakolwiek rada?

text: Niedługo będę robił krótki test/projekt PHP (20-30 minut) na rozmowie kwalifikacyjnej. Jest to praca z pensją od juniora do średniej (chociaż w specyfikacji pracy nie ma określonego poziomu wiedzy) w agencji medialnej. Szukam porady, gdzie skoncentrować moją powtórkę? Czy powinienem skupić się na podstawowych koncepcjach (wzorcach projektowych) czy bardziej na przypominaniu składni metody? Nie jestem pewien, czy podczas testu będę miał dostęp do sieci, czy to normalne? jakiś przykład tego, co może oznaczać mały projekt? Jakakolwiek rada byłaby przyjmowana z wdzięcznością.


title: Jak ulepszyć wzorzec konstruktora Blocha, aby był bardziej odpowiedni do użycia w klasach, które mogą być wielokrotnie rozszerzane i rozszerzane podrzędnie?

text: Duży wpływ wywarła na mnie książka Joshuy Blocha Efektywna Java (wydanie drugie), prawdopodobnie bardziej niż jakakolwiek książka o programowaniu, którą czytałem. W szczególności, jego Wzorzec Budowniczy (punkt 2) miał największy wpływ. Pomimo tego, że konstruktor Blocha zaprowadził mnie znacznie dalej w ciągu kilku miesięcy niż w ciągu ostatnich dziesięciu lat programowania, wciąż uderzam w tę samą ścianę: Rozszerzanie zajęć o samopowracające łańcuchy metod jest w najlepszym razie zniechęcające, aw najgorszym koszmar --zwłaszcza, gdy w grę wchodzą generyki, a _zwłaszcza_ z **_samoodniesieniami generycznymi_** (takimi jak `Porównywalne<T rozszerza Porównywalne<T>>`). Mam dwie podstawowe potrzeby, z których tylko druga chciałabym się skupić w tym pytaniu: 1. Pierwszym problemem jest „jak udostępnić samozwracające się łańcuchy metod, bez konieczności ich ponownego wdrażania w każdym ...jeden...klasa?" Dla tych, którzy mogą być ciekawi, omówiłem tę część na dole tego posta z odpowiedziami, ale nie na tym chcę się tutaj skupić. 2. Drugi problem, który proszę o komentarz, to „jak zaimplementować builder w klasach, które same mają być rozszerzane o wiele innych klas?” Rozszerzenie klasy za pomocą konstruktora jest oczywiście trudniejsze niż rozszerzenie bez. Rozszerzanie klasy, która ma konstruktora _który implementuje również `Needable`, a zatem ma powiązane z nim znaczące generyki_, jest niewygodne. Oto moje pytanie: Jak mogę ulepszyć (to, co nazywam) Bloch Builderem, abym mógł swobodnie dołączyć konstruktora do _dowolnej_ klasy — nawet jeśli ta klasa ma być „klasą bazową”, która może być rozbudowane i rozszerzone wielokrotnie — _bez zniechęcania mojej przyszłej jaźni lub użytkowników mojej biblioteki_ , z powodu dodatkowego bagażu, jaki narzuca im konstruktor (i jego potencjalne generyki)? * * * _**Addendum_** Moje pytanie skupia się na części 2 powyżej, ale chciałem nieco rozwinąć problem pierwszy, w tym jak sobie z nim poradziłem: Pierwszy problem to „jak udostępnić samopowracające łańcuchy metod , bez konieczności ponownego wdrażania ich w każdej...pojedynczej...klasie?" Nie chodzi o to, aby _rozszerzające klasy_ nie musiały ponownie zaimplementować tych łańcuchów, co oczywiście musi - raczej, jak zapobiec konieczności ponownego -zaimplementować każdą funkcję samopowrotną, aby _ich_ użytkownicy mogli z nich skorzystać? W tym celu wymyśliłem projekt, którego potrzebują użytkownicy, dla którego wydrukuję tutaj szkielety interfejsów i na razie to zostawię. U mnie zadziałał (ten projekt był tworzony przez lata... najtrudniejszą częścią było unikanie zależności kołowych): interfejs publiczny Chainable { Chainable chainID (boolean b_setStatic, Object o_id); Obiekt getChainID(); Obiekt getStaticChainID(); } interfejs publiczny Needable<O,R extends Needer> extends Chainable { boolean isAvailableToNeeder(); Needable<O,R> startConfigReturnNeedable(R n_eeder); R getActiveNeeder(); wartość logiczna is NeededUsable(); R koniecCfg(); } interfejs publiczny Potrzebujący { void startConfig(Class<?> cls_needed); wartość logiczna isConfigActive(); Klasa getNeededType(); void neeadableSetsNeeded(Obiekt o_w pełni skonfigurowany); }


title: Certyfikat Microsoft : 70-511 Czy test praktyczny jest wystarczający do zarządzania egzaminem?

text: Po przeczytaniu zestawu szkoleniowego Self-Paced Training **Tworzenie aplikacji Microsoft Windows przy użyciu Microsoft .NET Framework 4** , uruchomiłem przygotowanie do egzaminu Microsoft Press Training Kit. Chciałbym wiedzieć, czy wystarczy przekazać i zarządzać 70-511? **EDYTUJ** Ok, dziś rano nie zdałem egzaminu. Odradzam więc osoby, które chcą zdać certyfikat bez znaczącego doświadczenia. Dla twojej informacji, oto mój wynik: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/BmVEq.png) Jak widać, nie udało mi się zrealizować dwóch celów egzaminu: * „Budowanie Interfejs użytkownika przy użyciu podstawowych technik”, który obejmuje następujące rozdziały: * Wybierz najbardziej odpowiednią klasę kontroli * Zaimplementuj układ ekranu przy użyciu zagnieżdżonych hierarchii kontroli. * Twórz i stosuj style i motywy. * Zarządzaj zasobami wielokrotnego użytku. * Zaimplementuj animację w WPF. * „Zwiększanie funkcjonalności i użyteczności rozwiązania” * Integracja WinForm i WPF w aplikacji. * Implementuj procesy asynchroniczne i wątki. * Włącz funkcje globalizacji i lokalizacji. * Implementuj operacje przeciągania i upuszczania w aplikacjach i między nimi. * Zaimplementuj funkcje bezpieczeństwa aplikacji. * Zarządzaj ustawieniami użytkownika i aplikacji. * Implementuj właściwości zależności. Naprawdę nie rozumiem, dlaczego zawiodłem pierwszy obiekt. Myślę, że znam podstawy WPF. Z drugiej strony wiem, dlaczego oblałem drugi egzamin obiektywny: jest to aspekt, którego nie opanowałem. Ten egzamin pokazuje mi moją słabość. Teraz skupię się na nich.


title: Sposób myślenia o programowaniu

text: Zacznę od stwierdzenia, że jestem na drugim roku studiów na kierunku Inżynieria Oprogramowania na R.I.T w Nowym Jorku. Nie miałem doświadczenia w programowaniu w liceum i odkąd poszedłem do college'u, programowałem swój tyłek. Miałem kilka problemów, próbując przemyśleć rzeczy z logicznego punktu widzenia i byłem ciekawy, dla wszystkich profesjonalistów i ludzi, którzy programują od najmłodszych lat: Jak podchodzicie do sytuacji? Czy pomysły na wdrożenie czerpiesz z wcześniejszych doświadczeń, czy po prostu przychodzą do Ciebie?


title: Czy powinienem używać JavaScript SPA zaprojektowanego, gdy ważne jest bezpieczeństwo?

text: Poprosiłem o coś podobnego na stackoverflow z konkretnym fragmentem kodu, ale chcę spróbować zadać to pytanie w szerszym sensie. Mam więc tę aplikację internetową, którą zacząłem pisać w sieci szkieletowej przy użyciu architektury pojedynczej strony (SPA), jednak sam zaczynam zgadywać ze względu na bezpieczeństwo. Teraz nie przechowujemy i nie wysyłamy informacji o kartach kredytowych ani niczego podobnego za pośrednictwem tej aplikacji internetowej, ale przechowujemy poufne informacje, które ludzie do nas przesyłają, i będziemy mieć również możliwość ponownego pobrania. Oczywiście troska o bezpieczeństwo, którą mam z JavaScriptem, polega na tym, że nie można ufać niczemu, co pochodzi z JavaScript, jednak w aplikacji Backbone SPA wszystko jest wysyłane przez JavaScript. Istnieją dwie funkcje bezpieczeństwa, które będę musiał zbudować w JavaScript; uprawnienia i uwierzytelnianie. Element uwierzytelniający to po prostu ja zastępuję metodę Backbone.Router.prototype.navigate, aby sprawdzić fragment, który próbuje załadować i jeśli JavaScript application.session.loggedIn nie jest ustawiony na true (i nie wyświetlają żadnej uwierzytelnionej strony) , są automatycznie przekierowywane na stronę logowania. Użytkownik mógłby łatwo zmodyfikować application.session.loggedIn na wartość true (lub zmodyfikować metodę Backbone.Router.prototype.navigate), ale wtedy musiałby też nie tak łatwo dynamicznie osadzić link na stronie (lub zmodyfikować obecny), który ma odpowiednie klasy, atrybuty data-* i wartości href, aby następnie załadować stronę, która powinna być załadowana tylko wtedy, gdy użytkownik jest zalogowany (i ma uprawnienia). Więc mam obiekt acl, który zajmuje się uprawnieniami. Wszystko, co ktoś musiałby zrobić, aby wyświetlić strony lub części stron, których nie powinien być w stanie, to wywołać acl.addPermission(resource, permission) z odpowiednimi uprawnieniami lub zmodyfikować acl.hasPermission(), aby zawsze zwracała wartość true, a następnie odeszła a następnie z powrotem na stronę. Teraz niektóre rzeczy to EMCAScript 5, takie jak Object.seal() lub Object.freeze(), które pomogłyby w niektórych z nich, jednak musimy obsługiwać IE 8, który nie obsługuje tych elementów funkcjonalności. Teraz interfejs API REST przeprowadza również kontrole bezpieczeństwa przy każdym żądaniu, więc technicznie, nawet jeśli są w stanie zobaczyć części interfejsu, których nie powinni być w stanie, nadal nie powinni mieć wpływu na żadne dane. Główną korzyścią dla mnie w tworzeniu aplikacji JavaScript SPA jest to, że aplikacja jest o wiele bardziej responsywna, ponieważ przesyła tylko minimalną ilość danych JSON dla żądanej akcji i wykonuje również minimalną ilość pracy. Są też inne rzeczy, które moim zdaniem są korzystne, na przykład będziesz musiał opracować API dla danych (co jest dobre, jeśli chcesz rozszerzyć swoją aplikację na różne platformy/technologie) lub jest to bardziej separacja między front-endem i back-end jednak jeśli bezpieczeństwo jest problemem, naprawdę mądrze jest przejść drogą aplikacji JavaScript SPA dla front-endu?


title: Jak mogę wysłać wejście audio jako fragment HTTP?

text: Próbuję stworzyć interfejs z zewnętrznym serwerem i nie wiem od czego zacząć. Musiałbym pobrać dźwięk jako dane wejściowe do mojego komputera i wysłać go do zdalnego serwera jako podzielone żądanie HTTP. Interfejs API, z którym próbuję się połączyć, jest opisany tutaj p1-5 http://dragonmobile.nuancemobiledeveloper.com/public/Help/HttpInterface/HTTP_Services_for_NDEV_v1.2_Silver_Version.pdf Nigdy nie pracowałem programowo z dźwiękiem, więc nie wiem jaki byłby najprostszy sposób na to? Czy istnieją rozwiązania, które już to robią? Natknąłem się na odniesienia do Shoutcast, VLC, Icecast, FFMPeg, Darkice, ale nie wiem, czy są one odpowiednie do tego, co próbuję osiągnąć, czy nie.


title: Kodowanie do ASCII, gdzie oryginalne kodowanie ciągu nie jest znane

text: Biorąc pod uwagę, że nie znamy kodowania łańcucha, jaki jest najlepszy sposób na upewnienie się, że jest on przekształcany na ASCII? Również w takich sytuacjach jesteśmy skłonni zaakceptować potencjalną utratę danych.


title: Uważam, że moje rozwiązanie jest lepsze niż mojego szefa, więc czy powinienem go zignorować?

text: Pracuję z php i sql. Uważam, że mój sposób realizacji funkcji jest lepszy niż to, co proponuje mój szef. Właśnie teraz wyjaśnił mi, jak sprawdzić listę adresów e-mail i nie podoba mi się jego pomysł. Zaproponowałem moją, która jest lepsza i szybsza do wdrożenia, ale on się nie zgodził. Teraz myślę, że pójdę dalej i zrealizuję swój pomysł, ponieważ jego pomysł nie był dla mnie wystarczająco jasny. Myślisz, że będzie szalony?


title: Czym w instrukcji if są „klauzula if” i „klauzula then”?

text: Jestem trochę zdezorientowany co do nomenklatury części instrukcji _if_. Rozważmy następujący przykład: 1: if warunek, to 2: instrukcja_1; 3: w przeciwnym razie 4: oświadczenie_2; 5: koniec jeśli; Jaka jest „klauzula if” w tym oświadczeniu? Oto kilka możliwości: * Czy to wiersze #1 i #2? * Czy to linia nr 1? * Czy to linia #2? * Czy _warunek_ jest w wierszu nr 1? A w tym samym przykładzie, jaka byłaby „klauzula ówczesna”? * Czy to linia #2? * Czy to słowo kluczowe _then_ plus wiersz nr 2? * Czy to tylko synonim „klauzula if”? Moim głównym odniesieniem jest Code Complete 2nd Ed., ale wydaje się, że autor używa wyłącznie terminu „zdanie warunkowe”, którego znaczeniem w tym przykładzie są wiersze 1 i 2.


title: Co to jest ServletUtilities?

text: Odpowiedź w tym pytaniu sugeruje utworzenie klasy ServletUtilities do obsługi konwersji tekstu między ciągami Java i tekstem XML. > Generalnie, kiedy tworzysz aplikację internetową JEE, tworzysz klasę > obsługującą ogólne konwersje, jak ta, w klasie o nazwie > ServletUtilities. Poszukałem trochę w Google dla ServletUtilities, ale nie mogę znaleźć na ten temat zbyt wiele. Czy posiadanie klasy ServletUtilities jest konwencją? Jak często to jest? Kiedy powinieneś go mieć? Kiedy należy go używać?


title: Uruchamianie gry HTML canvas bez umiejętności graficznych

text: Chcę zająć się tworzeniem gier hobbystycznych, ale mam pewne niefortunne utrudnienia, które sprawiają, że utknąłem w niezdecydowaniu; Nie mam talentu artystycznego, nie mam też doświadczenia z grafiką 3D. Ale to tylko projekt hobbystyczny, który może nigdzie się nie udać, więc chcę rozwijać rzeczy, na których mi zależy; jeśli gra wykaże duży potencjał, moje graficzne „stuki” można zastąpić czymś bardziej wyrafinowanym. Jednak chcę, aby mój silnik graficzny renderował coś w przybliżeniu do celu końcowego. Gra jest oparta na kafelkach, a każdy kafelek jest kwadratem. Każda płytka ma również elewację. Moja platforma docelowa (podlegająca modyfikacji) to renderowanie JavaScript do kanwy HTML 5, z kontekstem 2D lub WebGL. Moje pytanie do tych z was, którzy mają doświadczenie w tworzeniu gier, brzmi: czy łatwiej jest stworzyć grę izometryczną, używając silnika graficznego 2D i sprite'ów, czy grę 3D, używając prymitywów 3D i podstawowych tekstur? Zdaję sobie sprawę, że istnieją ograniczenia w rzutowaniu izometrycznym, ale jeśli ułatwia to rozwijanie mojego jednorazowego silnika graficznego, nie mam nic przeciwko wprowadzonym brodawkom wizualnym. A może łatwiej jest reprezentować świat 3D za pomocą rzeczywistego silnika 3D?


title: migracja bazy danych: schemat aktualizacji wdrożony na komputerach klienckich

text: Pracuję nad aplikacją, która po wdrożeniu jest instalowana lokalnie na komputerach klienckich i korzysta z lokalnego serwera bazy danych. O dziwo, nie planowałem zmian w schemacie - a teraz to musi się zmienić. Przeglądając wiele pytań SO i Programistów oraz googlując, znalazłem kilka strategii: * **wiele plików SQL.** Po jednym dla każdej wersji. Podczas aktualizacji użyj numeru wersji, aby zdecydować, który plik SQL wykonać * **jeden plik SQL.** Brak instrukcji `drop`, tabele utworzone za pomocą opcji `create table if not is — więc podczas aktualizacji lub instalacji pierwszego czas, po prostu uruchom ten plik. Wszystko już w bazie będzie w porządku, wszystkie nowe tabele itp. zostaną utworzone * **zdmuchnij, a następnie odbuduj bazę.** 1. zrób kopię wszystkich danych 2. usuń cały schemat 3. załaduj nowy schemat 4. przeładuj dane * **automatycznie wygenerowany plik diff.** Niektórzy nie ufają; narzędzie do generowania takiego pliku kosztuje (??) Szukam porady, która pomoże wybrać między tymi strategiami. Dodatkowa uwaga: dane są zgodne w górę (jeśli to właściwy termin): żadna ze zmian w schemacie nie wiąże się z usuwaniem tabel lub kolumn ani zmianą relacji FK/PK.


title: Opracowywanie narzędzi pomocy dla gier, czy jest to legalne w stosunku do twórcy gry?

text: Wyobraź sobie, że do gry strategicznej czasu rzeczywistego, do badań i zabawy stworzono narzędzie, które monitoruje minimapę gry i ostrzega użytkownika, jeśli ruch wroga zostanie wykryty. Czy sprzedawanie i/lub rozpowszechnianie takich rzeczy wiąże się z kwestiami prawnymi w stosunku do Warunków korzystania z gier przez twórców gry lub podobnych (biorąc pod uwagę ich użycie w trybie dla wielu graczy)?


title: Frameworki Javascript dla dużych zespołów programistycznych

text: Moja firma ponownie ocenia, jakiego rodzaju frameworka internetowego chcemy używać. Obecnie używamy frameworka Ext 4.0, ale pojawiają się pytania, że może to nie być odpowiedni framework do użycia. Podoba mi się to, co ma do zaoferowania Ext (bogate GUI, pakiet danych i system klas), czy istnieją inne frameworki, które są podobne? Czy istnieją frameworki dostosowane do średnich/dużych firm programistycznych? Info: Potencjalnie 100 programistów konwertuje grube ekrany klientów do sieci. Modelowanie danych jest ważne, a także bogate wsparcie GUI. Ważna jest również konserwacja i jednolitość wielu produktów. Wszelkie informacje są bardzo mile widziane.


title: Prywatne interfejsy w pakiecie

text: Jest to zasadniczo to samo, co kodowanie do interfejsów, ale rozgrywa się w prawdziwym świecie komunikacji, gdy istnieją różne złożoności inżynierskie, takie jak niezmienność opublikowanych interfejsów i implementacji itp. * * * Rozważmy następującą sytuację: Obiekt na poziomie systemu operacyjnego- zorientowana biblioteka z zestawem opublikowanych interfejsów i implementacją dostarczoną przez system operacyjny. Niektóre punkty rozszerzeń są udostępniane, aby strony trzecie mogły rozszerzać określone zachowania, implementując podzbiór opublikowanych interfejsów i rejestrując je w systemie operacyjnym. Programista przygląda się całemu zestawowi opublikowanych interfejsów i mówi do siebie: „Wydaje się, że mogę ponownie zaimplementować większość funkcji (przy użyciu lepszych algorytmów), w tym te obszary, które nie są oznaczone jako rozszerzalne”. I tak działa programista. Dopiero gdy własna implementacja programisty łączy się (w stylu COM) z implementacją systemu operacyjnego i kończy się niepowodzeniem, programista zdał sobie sprawę, że **zestaw obiektów** zaimplementowany przez system operacyjny w dużym stopniu opiera się na komunikacji przy użyciu niepublikowanych interfejsów, ponieważ opublikowany interfejs był minimalistyczny i blokował wiele możliwości optymalizacji(*). (*) W zadaniach kodowania/dekodowania/transkodowania (kompresji danych/obrazu/dźwięku/wideo) dobrze wiadomo, że niektóre etapy potoków mogą się wzajemnie znosić, jeśli wykonują dokładnie odwrotną operację/odwrotność, np. „G(F(x)) == x”. Typowa interakcja wygląda tak: 1. Konsument pyta producenta, czy implementuje specjalny interfejs X, który zna tylko sprzedawca V. 2. Jeśli tak, Konsument rozmawia z Producentem za pomocą interfejsu X i sprawdza, czy jest dokładnie odwrotnie (#1). 3. Jeśli tak, Konsument prosi Producenta o jego „wyższy etap” (tj. pominięcie Producenta) (nr 2), aby w efekcie oba zostały anulowane. (#1) i (#2) to możliwości, których brakuje w minimalistycznym opublikowanym interfejsie. Na pierwszy rzut oka wydaje się, że sprzedawca również może mieć szansę je zapewnić, ale nie chce tego robić. Może się również zdarzyć, że udostępnienie tych interfejsów zorientowanych na wydajność poważnie zanieczyści przestrzeń nazw. * * * Efektem końcowym jest to, że za każdym razem, gdy programista dostarcza własną implementację określonej klasy, albo (i) nie powiodłoby się, albo (ii) działałby bardzo wolno, ponieważ nie mógłby wchodzić w interakcje z resztą _pakietu_ za pomocą ulepszone interfejsy wewnętrzne znane tylko temu _pakietowi_. Czy jest to częstszy problem w przypadku niektórych odmian technologii zorientowanej obiektowo? A może jest to bardziej powszechne w przypadku niektórych odmian inżynierii opartej na komponentach? Zwolennicy OOP będą argumentować, że refaktoryzacja i publikowanie tych interfejsów rozwiązałoby problem. Zakłada to możliwość dystrybucji nowej wersji biblioteki wraz z nowym zestawem interfejsów. W przypadku niektórych technologii nie jest to możliwe. * * * Znaczenie dla com polega na tym, że jego metoda `QueryInterface` umożliwia wykonywanie zapytań w czasie wykonywania (i odpowiedzi w czasie wykonywania) dodatkowych interfejsów zaimplementowanych przez klasę. Jego odpowiednik w Javie byłby jak biblioteka, która intensywnie wykorzystuje `instanceof` dla wewnętrznych interfejsów pakietu. _Do recenzentów: jestem otwarty na sugestie, jak sprowadzić pytanie do jego istoty._ Dzięki temu pytaniu poprawnym terminem wydaje się być Mixin. * * * Ta odpowiedź jest częściowo trafna, ale mój przykład skupia się na utraconych możliwościach optymalizacji w ramach jednej biblioteki. Zasadniczo, jeśli zewnętrzny realizator nie wykonał obu: 1. Zaimplementuj zarówno koder, jak i dekoder 2. Zaimplementuj własny, zastrzeżony interfejs zarówno w koderze, jak i dekoderze, aby wykryć i ominąć operacje, które wzajemnie się znoszą Następnie implementacja uzyska „wydajność bazową” tylko w przypadku współpracy z różnymi koderami/dekoderami innych dostawców.


title: Wartość utrzymania wyników debugowania

text: Programista w naszym zespole zaśmieca swój kod danymi wyjściowymi debugowania. Przekazuje wiele parametrów do metod, które są używane tylko do debugowania. Osobiście uważam, że to zaśmieca kod. Jeśli muszę coś debugować, wolę używać punktów przerwania i okna obserwacyjnego zamiast czytać wszystkie dane wyjściowe debugowania. Dokonuję poważnych zmian w kilku klasach napisanych przez tego innego programistę, czy powinienem zachować jego wyniki debugowania, czy mogę uzasadnić ich usunięcie? Jestem w tym zespole dopiero od kilku miesięcy i nie chcę denerwować tego programisty, ale spodziewam się, że rzadko będzie aktualizował tę część systemu.


title: Biblioteki licencyjne (które wykonują generowanie kodu itp.) i granice GPL

text: Chcę naprawdę otworzyć projekt, który zaczął się jako osobiste hobby, ale nie znam szczegółów licencjonowania. Ten projekt dostarcza kilka bibliotek dla danego języka $, a także niektóre opakowujące narzędzia wiersza poleceń dla tych bibliotek. Te biblioteki, pod wieloma względami, generują więcej kodu w tym samym języku, kodu, który może być ponownie wykorzystany przez wywołującego. W moich szkicach zawsze używałem licencji w stylu MIT ze względu na zwięzłość, ale to niepublikowane kopie, które przeglądam teraz, aby połączyć je w ostatecznie wydaną wersję. Chciałbym użyć zasad stylu GPL do użycia/wkładu _mojego kodu_ (nazwijmy to frameworkiem). Ale. Czy wybór GPLv2 (3?) do mojego projektu może ograniczyć rzeczy, które dany użytkownik może zrobić z kodem generowanym lub zarządzanym przez moje biblioteki/narzędzia? (tj. komercyjny zysk z tak wygenerowanego kodu bez wydawania jej ulepszeń/zmian w moim kodzie) Czy jest coś do rozważenia (w prostym języku) przy licencjonowaniu kodu generującego kod? **Aktualizacja:** Aby odpowiedzieć na kilka komentarzy: 1. _Co chcesz osiągnąć dzięki swojej licencji?_ Najlepsze cele dla zdrowia projektu (z punktu widzenia społecznościowego projektu open source). 2. _Kogo chcesz używać swojego kodu?_ Ktokolwiek 3. _Co chcesz, aby się stało ze zmianami?_ Aby być przeniesionym do projektu tak często, jak to możliwe. 4. _Co chcesz, aby się stało z wygenerowanym kodem?_ Aby mój wybór licencji nie miał na ciebie wpływu. Należy do użytkownika, który go wygenerował. 5. _A co z pieniędzmi - jeśli użytkownik zarabia pieniądze, czy chcesz, aby wpłynęło to na licencje?_ Jeśli użytkownik zarabia na wygenerowanym kodzie, to świetnie. Jeśli użytkownik zarabia _modyfikując_ mój kod, chciałbym wymusić opublikowanie zmian. Z tymi odpowiedziami przeprowadziłem terapię grupową. Teraz wybierając GPL (2? 3?) mogę być ok czy nie? **Update2** > Więc muszą dołączyć/skompilować twoją bibliotekę ze swoją > ją wdrożoną, aby mogła działać? tak, biblioteka musi być wcześniej zainstalowana lub dołączona do wyniku (jest na to opcja).


title: Jak właściwie monitorować pamięć JVM?

text: Zastanawiam się, jak monitorować pamięć JVM przy niskim nakładzie pracy w środowisku produkcyjnym, nawet w godzinach szczytu. Załóżmy, że mam dwa serwery aplikacji tomcat w środowisku produkcyjnym, a za nimi skonfigurowano równoważenie obciążenia. Jeśli widzę statystyki pamięci jvm, mogę powiedzieć równoważeniu obciążenia, aby przestał wysyłać żądanie do serwera, który napotka problem z OOM. Czy to ma sens? Jconsole lub VisualVM pochłaniają więcej zasobów wydajnościowych nie jest moim wyborem.


title: Programowanie GUI - kto powinien być właścicielem

text: Nie wiem nic o programowaniu gui. Próbuje się uczyć. Mam proste pytanie... Na przykład mam mały program. Mam klasę, która rozszerza JFrame o główne okno (MyWindowClass) i moją klasę "logiki" (MyClass), które coś robią (na przykład obliczają coś i chcę to wyświetlić w oknie). Czy powinienem to zaimplementować w następujący sposób: class MyClass { // ... // ... MyWindowClass window; }; Lub tak: class MyWindowClass extends JFrame { // ... MyClass c; }; Nie wiem, która klasa powinna być właścicielem, a która klasa powinna mieć główną metodę... Proszę o pomoc... Próbuję pisać w Javie (Swing), ale to chyba ogólne pytanie.


title: Jaka data praw autorskich dotyczy aktualizacji projektu open-source z zeszłego roku?

text: W 2011 wydałem trochę kodu open-source, który był licencjonowany przy użyciu licencji Apache. W związku z tym wszystkie pliki źródłowe mają na górze komunikat z tabliczką znamionową: /* Copyright 2011 My Name Licensed under the Apache License... <blah blah> */ Teraz jest rok 2012 i jestem gotowy do wydania wersji 1.1 . W związku z tym większość plików źródłowych została w jakiś sposób poruszona. Dodano też kilka nowych plików z kodem źródłowym. Jak zaktualizować datę praw autorskich do istniejących plików? Czy poniższe aktualizacje są poprawną aktualizacją każdego pliku źródłowego? (tzn. zmień 2011 na "2011-2012") /* Copyright 2011-2012 My Name Licensed under the Apache License... <blah blah> */ Czy nowe pliki źródłowe również mają zastosowanie `Copyright 2011-2012`? A może nowy kod po prostu otrzymuje `Copyright 2012`?


title: Strategia rozgałęziania dla równoległego rozwoju, która nie będzie w tym samym wydaniu?

text: Mój zespół pracuje nad produktem, który ze względów biznesowych musi być regularnie wypuszczany. Pojawił się problem polegający na tym, że chcemy równolegle rozwijać nadchodzące wydanie, a także „następne” wydanie. Ma to stać się standardową praktyką, więc nie jest tak proste, jak wycinanie gałęzi funkcji dla nowej pracy. Nieustannie będziemy mieć co najmniej 2 zespoły pracujące nad różnymi wersjami tego samego produktu. Czy istnieje najlepsza praktyka SCM dla tego rodzaju ustaleń?


title: Jakie są zalety korzystania z języka szablonów?

text: Pracuję nad aplikacją CakePHP, a widoki składają się z surowego html z osadzonymi instrukcjami echa php, które z biegiem czasu stały się dość niechlujne. Zanim wejdę i przepiszę kod, zastanawiam się, czy jest sens przepisywać widoki za pomocą silnika szablonów, takiego jak Twig lub Smarty, ale nie mam doświadczenia z silnikami szablonów. Jakie są wszystkie zalety korzystania z silnika szablonów?


title: Konstruowanie automatu skończonego

text: Mam pytanie egzaminacyjne, na które nie jestem pewien odpowiedzi. Pytanie brzmi: > W organizacji X prawidłowe nazwy użytkowników mają następującą strukturę. Nazwa użytkownika może być albo nazwą pracownika, po której następuje dwukropek, a następnie nazwa działu lub ciągiem jednej lub kilku liter alfanumerycznych składających się > z małych i wielkich liter oraz cyfr od 0 do 9. Wszystkie nazwy użytkowników kończą się > z kropką ("."). Nazwisko pracownika jest wyrażone jako imię, po którym następuje > podkreślenie, a następnie nazwisko. Imię i nazwisko muszą > zaczynać się od wielkiej litery, po której następuje dowolna liczba > małych liter. Wszystkie nazwy działów to dowolna liczba małych > wielkich liter. Wyraź język dla poprawnych nazw użytkowników jako wyrażenie > regularne. Mam odpowiedź: > [A-Z][a-z]+"_"[A-Z][a-z]+":"[a-z]+"." | [A-Za-z0-9]+"." Kolejne pytanie to: > Skonstruuj deterministyczny automat skończony do rozpoznawania użytkownika > nazwy jak opisano w pytaniu 1. Dla którego mam to:![automaty skończone](http://i.stack.imgur.com/4ukWq. jpg) Mam wrażenie, że to jest złe, ponieważ [A-Z] jest podgrupą [A-Za-z0-9] i DFA nie może mieć tego samego symbolu wychodzącego z jednego stanu. Czy ktoś ma pomysł jak to rozwiązać / czy to jest poprawne? Dziękuję !


title: Jak jest kompilowane IDE?

text: Chciałbym poznać ogólną procedurę kompilacji/kompilacji/tworzenia IDE. Dodatkowo, jakie są niektóre narzędzia/skrypty używane do tworzenia IDE? Nie chcę powiedzieć, że kompilacja IDE ** wymaga ** IDE. Było to po prostu ogólne założenie, że ponieważ IDE jest również tylko częścią oprogramowania, wydaje mi się logiczne, że mogą użyć poprzedniej wersji IDE do zbudowania następnej. Chcę zrozumieć, jak zbudowane są IDE.


title: Czy ktoś korzysta z Team Software Process (TSP) i/lub Personal Software Process (PSP)?

text: Więcej informacji na ten temat tutaj: http://en.wikipedia.org/wiki/Team_Software_Process Jakie masz doświadczenia?


title: Koncepcje: Testowanie poziomu API

text: Jestem absolwentem college'u, wkrótce ukończę studia. WIĘC zacząłem poszukiwania pracy. Więc moje pytanie jest dla New Grad, który jest zainteresowany QA (w szczególności testowaniem API Level). Jaki jest wymagany poziom znajomości **JAVA**? Nie jestem zbyt dobry w Javie, ale potrafię ocenić siebie na 5/10. Czy firmy oczekują od kandydata posiadania rozległej wiedzy na temat kodowania w Javie, czy tylko podstawowej Javy. Jeśli jest to tylko podstawowa java, na jakich koncepcjach powinienem się bardziej skupić? Dziękuję


title: Jak zaktualizować plik w exe

text: Konwertuję plik HTML5 na .exe za pomocą konwertera HTML EXECUTABLES. Po konwersji na exe całkowity rozmiar wynosi około 70 do 80 MB. Problem polega więc na tym, że kiedy aktualizuję jeden plik CSS, muszę ponownie przekonwertować cały projekt do exe i przekazać go mojemu klientowi i za każdym razem muszę wgrywać plik 80 MB dla bardzo małych zmian. Czy istnieje inna alternatywna opcja aktualizacji określonego pliku zamiast ponownej konwersji do exe.


title: Atrybuty datetime timedelta Pythona

text: W module python `datetime` obiekty `timedelta` zajmują tygodnie, dni, godziny, minuty, sekundy i mikrosekundy jako argumenty podczas tworzenia instancji. Jednak po utworzeniu „timedelta” jedynymi dwoma atrybutami, jakie ma na liście, są dni, sekundy i mikrosekundy. Dlaczego to?


title: Jako samodzielny programista, jak mogę efektywnie wykorzystać tablicę w programowaniu?

text: Programuję od jakiegoś czasu i często zapisuję swoje myśli, ponieważ odkryłem, że pomaga mi to skoncentrować się na rozwiązaniu. Mam wrażenie, że marnuję dużo papieru. Z drugiej strony czuję się niepewnie, jeśli chodzi o instalowanie białej tablicy w mojej osobistej kostce, ponieważ wydaje mi się, że tablica jest bardziej konkretnie używana do omawiania rozwiązań z innymi programistami. Jakie masz doświadczenia z robieniem notatek? Czy tablica jest przydatna poza sytuacjami współpracy?


title: Jak śledzić powszechny, ale rzadko używany kod?

text: General OO uczy nas hermetyzowania, a najlepsze praktyki uczą organizacji. W efekcie otrzymujemy kod wielokrotnego użytku, samodokumentujący, który uwalnia nas od wszelkich szczegółów dotyczących implementacji. Tak więc, jeśli muszę wywołać wiersz poleceń systemu Windows, używam mojej klasy wiersza poleceń. class CommandLine { CommandLine(){} Invoke(string command) {} CloseAsync(){} Close Sync(){} } Z biegiem czasu te proste enkapsulacje zamieniają się w biblioteki. Możemy nawet mieć dalsze klasyfikacje poprzez przestrzenie nazw. Działa to bardzo dobrze w tym samym języku. Zwłaszcza, gdy jest to język, którego programista często używa. Ale często spotykam się z sytuacjami, zwłaszcza w mniej używanych językach, w których muszę przypomnieć sobie prostą, wspólną koncepcję, która może wcale nie być klasą. Na przykład nie piszę dużo jQuery, ale piszę wystarczająco dużo, gdy mam dość szukania właściwej składni dla `$(document).load`... czy jest to $(document).ready() lub... $(document).read(function(){});... Ten rodzaj kodu płyty kotłowej, którego cel dobrze rozumiem, ale brakuje mi doświadczenia i regularnego używania języka do zapamiętania składni w tym tkwi mój problem. Widziałem, jak niektórzy programiści pisali bloga, aby po prostu zapamiętać ten pomysł. Moje zwykłe podejście to... > Google "ładowanie dokumentu" > GOogle "ładowanie dokumentu jQuery" > ...znajdź fragment kodu > Google "Jquery gotowy do dokumentu"...gotowe > I zwykle było to w porządku. Ale zauważyłem również, że w SO, niektórzy z najlepszych odpowiedzi, na przykład Jon Skeet, wydają się bardzo szybko wyciągać odpowiedzi z płyty kotła ... tak szybko zastanawiam się, czy zbudowali jakiś materiał referencyjny, aby szybko wyszukać i uderzyć razem ten kod na forum, fragmentarycznie lub w całości. Chciałbym użyć tej samej koncepcji (jeśli istnieje...) do przechowywania moich fragmentów „document.ready”, aby móc ich używać do własnego kodowania. Czy istnieje więc wydajne przechowywanie i wyszukiwanie? Jak najlepiej przechowywać i organizować te nieregularne, ale często przydatne fragmenty? Bonus… jeszcze bardziej interesujące jest to, że moje podejście do kodowania nie nadaje się do wywiadów na tablicy (gdzie nie mamy google, ale oczekuje się, że napiszemy kod). Jak radzisz sobie z tym problemem, gdy masz do czynienia z „rzadziej używanymi” językami w swoim słowniku?


title: Czy mogę zachować zamknięte źródło mojego programu, jeśli połączę go ze statyczną biblioteką, której źródłem jest GNU GPLv2?

text: Wkładam dużo pracy w mój program, a po jego zakończeniu chcę po prostu założyć małą witrynę internetową i sprzedawać każdą kopię programu, ale nie chcę żadnych problemów prawnych. Czy muszę szukać innej biblioteki, czy mogę "bezpiecznie" do niej zalinkować?


title: Relicencjonowanie kodu BSD 2/3 z klauzulą 2/3 na GPL

text: Załóżmy, że udostępniam kod źródłowy na nowej licencji BSD. Czy wolno komuś innemu wziąć ten kod, dokonać w nim modyfikacji i rozpowszechniać go na warunkach GPL? Z Wikipedii: > _Wiele najpopularniejszych licencji wolnego oprogramowania, takich jak oryginalna licencja MIT/X >, licencje BSD (w obecnej formie z dwoma klauzulami) i LGPL, jest > „zgodnych z GPL”. Oznacza to, że ich kod może być połączony z programem na > GPL bez konfliktu (nowa kombinacja miałaby zastosowanie do > całości). Jednak niektóre licencje wolnego oprogramowania/open source nie są kompatybilne z GPL->. Zakładam, że to sugeruje, że można przelicencjonować kod nowego BSD na GPL?


title: Właściwe użycie atrybutów danych HTML

text: Piszę kilka wtyczek JavaScript, które są uruchamiane automatycznie po wykryciu odpowiedniego znacznika HTML na stronie. Na przykład, po wykryciu klasy `tabs`, wtyczka tabs jest ładowana dynamicznie i automatycznie stosuje funkcjonalność tabulatorów. Wszelkie opcje dostosowywania wtyczki JavaScript są ustawiane za pomocą atrybutów danych HTML5, bardzo podobnie do tego, co robi Twitter Bootstrap Framework. Odwołanie do powyższego systemu polega na tym, że gdy już działa, nie musisz się martwić ręcznym tworzeniem wtyczek, po prostu piszesz znaczniki HTML. Jest to szczególnie miłe, jeśli ludzie, którzy nie znają dobrze JavaScript (lub w ogóle) chcą korzystać z twoich wtyczek, co jest jednym z moich celów. Ta konfiguracja działa bardzo dobrze, ale w przypadku niektórych wtyczek stwierdzam, że potrzebuję bardziej solidnego zestawu opcji. Wygląda na to, że mam do wyboru element z wieloma atrybutami danych lub zezwolenie na pojedynczy atrybut „opcje danych” z obiektem opcji JSON jako wartością. Posiadanie wielu atrybutów wydaje się niezgrabne i powtarzalne, ale przejście na trasę JSON sprawia, że jest to nieco bardziej skomplikowane dla nowicjuszy i chciałbym uniknąć pełnego JavaScriptu w atrybutach, jeśli mogę. Nie jestem do końca pewien, który sposób jest najlepszy. 1. Czy istnieje trzecia opcja, której nie rozważam? 2. Czy istnieją zalecane najlepsze praktyki dla tego konkretnego przypadku użycia?


title: Jaka jest zaleta przypisania funkcji do zmiennej var?

text: Biorąc pod uwagę ten przykład JavaScript, znalazłem var sum = function() { var i, sum = 0; for(i = 0; i < argumenty.długość; i += 1) { suma += argumenty[i]; } zwróć sumę; }; Jaka jest korzyść z przypisania funkcji do zmiennej var?


title: Jaki jest najlepszy sposób na diagramowe przedstawienie architektury wątkowości systemu?

text: Jeszcze nie znalazłem idealnego sposobu na diagramowe przedstawienie ogólnej architektury wątków dla systemu (przy użyciu UML lub w inny sposób). Jestem za techniką diagramowania, która pokazałaby wszystkie wątki w danym systemie i jak one ze sobą współdziałają. Jest kilka podobnych pytań — interakcja wątków rysunkowych, diagramy UML aplikacji wielowątkowych i intuicyjne podejście UML do przedstawiania wątków, ale nie odpowiadają one w pełni na moje pytanie. Jakie są niektóre techniki, które okazały się przydatne do zobrazowania ogólnej architektury wątków w systemie?


title: Gdzie powinienem umieścić moje metody użytkowe?

text: Jestem bardzo nowy w Visual Studio i C# i zastanawiam się, jak najlepiej utworzyć repozytorium rodzajów metod narzędziowych. Na przykład potrzebujemy metody, która zwraca bieżący rok obrotowy i inne wartości specyficzne dla firmy. Czy najlepiej byłoby utworzyć plik klasy narzędziowej, który będzie importowany do każdego projektu? Lub stworzyć nowy projekt tymi metodami i dodać go do obecnego rozwiązania? Na przykład w Pythonie stworzyłem jajko, które zawiera wszystkie metody narzędziowe, które następnie instaluję w pakietach witryn.


title: Jakimi tematami badawczymi mogę się zająć z zaledwie rocznym doświadczeniem?

text: Chciałem zagłębić się w badania, ale nie jestem pewien, czy dam radę, skoro mam tylko dwie czwarte informatyki. Idę na Uniwersytet Waszyngtoński, jeśli to istotne. To jest strona poświęcona badaniom. Uważam, że nie jestem w stanie ocenić, co jest możliwe przez pierwszy rok przeglądania strony. Większość rzeczy wygląda onieśmielająco, ale jestem pewien, że mógłbym gdzieś rozwiązać jakiś problem, gdybym faktycznie go zaatakował.


title: Jaki jest przepływ pracy z 2 osobami nad projektem?

text: Przychodzę do ciebie jako początkujący programista, który pracuje nad własnym projektem (który ładnie się rozwija). Mój współzałożyciel również uczył się programowania i osiągnął punkt, w którym prawdopodobnie mógłby zacząć naprawiać niektóre rzeczy i sprawiać, by niektóre rzeczy się wydarzyły. Zadał bardzo dobre pytanie, które brzmiało „jak to zadziała”. Coś, o czym mogłem tylko teoretyzować, ponieważ nigdy nie programowałem z nikim innym. Czy możesz mi doradzić, jak najlepiej przebiegać praca. Używamy git. Czy powinniśmy być właścicielami określonych części systemu? Sprawdzasz kod? Przegląd kodu? Jak pracujesz z >1 deweloperem?


title: Nauka Groovy vs nauka Pythona, Ruby lub Perla, aby uzyskać wgląd w programowanie w językach dynamicznych

text: Chciałbym poznać programowanie w językach dynamicznych i odkryłem, że Groovy byłby naprawdę łatwy do nauczenia, ponieważ jest mocno oparty na Javie. czy nie przegapię niczego ważnego dotyczącego programowania języków dynamicznych, jeśli pójdę ścieżką Groovy zamiast powiedzmy Ruby lub Python? Nie zamierzam za bardzo programować w dynamicznym języku, to głównie w celach edukacyjnych. dziękuje Ci za pomoc.


title: Kod półkowy w Team Foundation Server (TFS)

text: Jestem całkiem nowy w używaniu TFS i chciałbym wiedzieć, jak ty lub twój zespół korzystacie z funkcji „półki” tfs. Mamy następujące wytyczne dotyczące korzystania z TFS: \- wykonaj polecenie „Pobierz najnowsze” przed zaewidencjonowaniem i spróbuj skompilować/skompilować \- nie ewidencjonuj kodu, który się nie kompiluje \- na koniec dnia, jeśli pracujesz nie jest kompletna/częściowo skończona, powinieneś „odłożyć” oczekujące zmiany. Pierwsze dwie mają sens, ale tak naprawdę nie rozumiem ostatniej. Zapytałem mojego mgr i powiedział, że to po to, aby wiedział, że faktycznie wykonałeś trochę pracy na ten dzień, co ma sens, ale nadal zastanawiam się, do czego inne zespoły używają funkcji „półki”?


title: Jak myślisz i tworzysz programy?

text: Jestem facetem od QA i projektantem i idę do rozwoju. Jak większość programistów tworzy programy? Dzięki projektowi buduję z mglistym wyobrażeniem tego, co mam na myśli i dostosowuję swój projekt, aby iść naprzód i dobrze wyglądać. Z kodowaniem próbuję tej samej metodologii. Ciągle testuję i debuguję swój kod i wprowadzam poprawki do mojego kodu. Problem w tym, że nie sądzę, żeby tak to się robiło. Kiedy patrzę na przykład na dobry JavaScript, wszystko jest rozbite na równomiernie rozmieszczone funkcje. Nie tworzę w ten sposób swojego kodu. Czy zwykle musisz usiąść i rozrysować swoje zajęcia i funkcje, zanim zaczniesz pisać?


title: Najlepszy sposób na obsługę relacji z produktami i dostawcami

text: > **Możliwe zduplikowanie:** > najlepszy sposób na radzenie sobie w relacji „wielu do wielu”? Relacja między produktem a dostawcą jest zbyt duża, a nowa klasa ma zostać stworzona? A może jest wiele do jednego?


title: Najlepsza praktyka mapowania zewnętrznego identyfikatora w moim systemie

text: Zrobiłem kilka wyszukiwań „mapowanie identyfikatorów” i „mapowanie identyfikatorów zewnętrznych” i nie mogę znaleźć niczego sensownego w witrynie ani w Google, więc oto moje pytanie/scenariusz. Zajmuję się tworzeniem aplikacji, która dopasuje niektóre rekordy z naszego wewnętrznego systemu do „tych samych” rekordów z systemu zewnętrznego (spoza firmy). Wymiana danych (odbieranie danych z zewnętrznego systemu) jest nieistotna (może to być TXT, CSV, XML, Excel, itp.). W pewnym momencie będę musiał dopasować nasz wewnętrzny identyfikator klienta do zewnętrznego identyfikatora klienta. Chodzi o to, że wiem, że **mój identyfikator jest niezmienny** , ale **Nie wiem, czy zewnętrzny identyfikator jest zmienny**. I nie ma sposobu, aby wiedzieć, ponieważ system zewnętrzny jest poza moją kontrolą i może zostać zmieniony bez mojej wiedzy w dowolnym momencie. Mam więc 2 scenariusze: * Najlepszy przypadek: identyfikator zewnętrzny jest niezmienny; * Najgorszy przypadek: zewnętrzny identyfikator jest zmienny (w ramach poniższych ograniczeń); Dlatego opracowuję tabelę mapowania z następującymi atrybutami: * Identyfikator klienta systemu wewnętrznego; * Identyfikator klienta systemu zewnętrznego; Dość standardowe rzeczy. Prawdziwe pytanie brzmi: **Co powinienem dodać do tej tabeli, aby przygotować się na najgorszy scenariusz ?** Ograniczenia: * Jeśli identyfikator jest zmienny, będzie on używany codziennie, więc nie może być identyfikator wewnętrzny-do-zewnętrzny 1-do-wielu tego samego dnia (jest to reguła biznesowa, którą można wymusić); * Identyfikator zewnętrzny może być dowolną liczbą — od liczby całkowitej do identyfikatora GUID lub kodu pocztowego. Ale nic większego niż GUID;


title: Jak należy zarządzać zależnościami w aplikacji modułowej?

text: Załóżmy, że mamy taką strukturę: Aplikacja -- Moduły -- Moduł1 -- Kontroler -- PublicHelper --Moduł2 -- Kontroler -- PublicHelper Gdzie Public Helper modułu może zapewnić funkcje pomocnicze. W prawie każdym pomocniku modułu, pomocnik musi uzyskać dostęp do publicznych metod pomocniczych innego modułu. Załóżmy na przykład, że w aplikacji PHP: Module1 udostępnia funkcjonalność tworzenia sprzedaży, a jako część klasy Module1PublicHelper extends AbstractModuleHelper { public function createSale($customerId, $param, $param) { $userPublicHelper = // pobierz instancję użytkownika public helper $currentUser = $userPublicHelper->getCurrentUser(); } } class Module2PublicHelper extends AbstractModuleHelper { funkcja public getCurrentUser() { //zrób coś return $user; } } W tej sytuacji metoda musi uzyskać instancję, nową lub inną, publicznego pomocnika użytkownika. Biorąc pod uwagę, że wszystkie klasy Module Public Helper są tworzone z minimalnym zestawem parametrów konstruktora, np. EntityManager, jaki byłby najlepszy sposób na zdobycie jego kopii? Oczywiście nie możemy tak naprawdę wstrzyknąć publicznej klasy pomocniczej użytkownika do klasy zawierającej `createSale` Jednym z rozwiązań byłoby użycie lokalizatora usług lub rejestru, jednak testowanie aplikacji nie jest łatwe.


title: Czy programista powinien zawsze używać kontroli wersji?

text: > **Możliwe powielenie:** > Kontrola wersji dla niezależnych programistów? Słyszałem stwierdzenia w stylu: „Cóż, to tylko ja pracuję nad tym projektem, więc nie muszę go poddawać kontroli kodu źródłowego” oraz „Nie ma potrzeby pracy w wersji kontrolowanej w tym projekcie, to jest taki mały". Moim zdaniem bez względu na to, jak mały jest projekt, tak długo, jak dodaje on wartość klientowi (a oni też za to płacą), my, programiści, powinniśmy kontrolować jego wersję; zwłaszcza od polityki firmy. Czy jestem szalony, czy mój punkt widzenia ma sens. Pytanie: Czy prace programistyczne powinny być zawsze kontrolowane pod kątem wersji?


title: jak wykonać kopię zapasową kodu na komputerze lokalnym?

text: > **Możliwe powielenie:** > Kontrola wersji dla niezależnych programistów? Mam folder zawierający cały mój kod (kod roboczy, kod eksperymentu). Chciałbym utworzyć kopię zapasową w pliku zip na zewnętrznym dysku twardym lub cokolwiek, co jest najlepsze. Jak robicie kopię zapasową kodu? Czy konfigurujesz własny serwer kontroli źródła? Czy używasz skryptu do skompresowania wszystkich plików?


title: Kontrola wersji dla niezależnych programistów?

text: Czy uważasz, że warto korzystać z kontroli wersji, jeśli jesteś niezależnym programistą, a jeśli tak, to dlaczego? Czy przechowujesz repozytorium na własnym komputerze lub w innym miejscu, gdzie może służyć jako kopia zapasowa?


title: Zespół 1: Czy potrzebuję oprogramowania do zarządzania projektami i wersjonowania?

text: > **Możliwe powielenie:** > Kontrola wersji dla niezależnych programistów? Pracuję jako Młodszy Programista w 1 zespole. Poszukuję sugestii jakie programy do zarządzania projektami typu open source/darmowe (nie pamiętam właściwego terminu?), czyli takie rzeczy jak Github byłyby odpowiednie dla potrzeb moich i firmy. Tworzę strony internetowe używając tylko javascript, HTML & CSS, tworzę wieloplatformowe aplikacje mobilne używając Mosync C++ API oraz tworzę aplikacje Facebook iFrame używając HTML, javascript, css i ich Graph API. Szef naprawdę nie chce wykupić abonamentu z "Programu Zarządzania Projektami" (przy okazji co to za termin?), więc szukałbym bezpłatnej usługi. Obecnie używam DropBox, ponieważ pozwala mi on pracować z dowolnego miejsca i daje ograniczoną możliwość powrotu do starszej wersji pliku, ale odkryłem, że dokonałem zmiany w projekcie i zepsuło coś innego, więc musiałem iść powrót do starej wersji pliku i nie było go w dropboxie (może przechowują tylko ostatnią wersję przed zapisem). **Gdybyś był w jednoosobowym zespole, czy uważasz, że konieczne byłoby użycie tego? A jeśli tak, z jakiej usługi byś skorzystał?**


title: Jakie jest najlepsze narzędzie do lokalnej kontroli wersji do użytku osobistego?

text: > **Możliwe powielenie:** > Kontrola wersji dla niezależnych programistów? Zastanawiałem się, czy istnieje narzędzie, które działa jako Visual Source Safe, ale tylko na komputerze lokalnym. Zasadniczo chciałbym zameldować się i wymeldować na moim lokalnym komputerze, gdy koduję w moim osobistym projekcie z domu.


title: Kontrola wersji dla jednoosobowego zespołu deweloperskiego?

text: Niedawno rozpocząłem pracę w małej firmie jako samotny programista. Zanim doszedłem, nie było prawdziwej dokumentacji/kontroli wersji/itd. był na miejscu. Najlepsze, jakie mają, to dokumenty Microsoft Word i arkusze kalkulacyjne Excel, aby śledzić wszystko, co tworzy zespół inżynierów. Osobiście, między innymi, chciałbym wprowadzić kontrolę wersji dla własnego dobra, ale są bardzo niezdecydowani. Moje pytanie, czy kontrola wersji jest rozsądna dla samotnego programisty? Jakie są niektóre korzyści płynące z kontroli wersji dla samotnego programisty? Ponadto, jakie są korzyści dla, powiedzmy, 2-3 osobowego zespołu? A skoro jest to firma prywatna, czy Github czy prywatny serwer Git byłby najlepszy?


title: Czy powinienem używać repozytorium kodu, jeśli tylko ja pracuję nad projektem?

text: > **Możliwe powielenie:** > Kontrola wersji dla niezależnych programistów? Nie jestem pewien, czy powinienem używać repozytorium kodu, gdy jako jedyny pracuję nad projektem.


title: Notacja infiksowa a notacja prefiksowa – co wolisz?

text: Uczyłam się Clojure i patrzyłam na Scheme i CL, które wprowadziły mnie w świat notacji prefiksowej. Na początku mi się to nie podobało, ale wciąż zaczyna na mnie rosnąć. Szczerze mówiąc, wciąż są długie obliczenia, które są dla mnie trudne do zrozumienia, ale myślę, że jest to kwestia tego, że potrzebuję więcej ekspozycji / praktyki i to zrozumiem. Ale to prowadzi mnie do pytania: jaki rodzaj zapisu preferujesz i dlaczego?


title: Czy istnieje nazwa problemu niepodanego/pustego/pustego?

text: Pracuję z kodem, w którym dane są przechowywane/wymieniane w strukturach typu Hashtable/Dictionary/Associative-Array, np. { 'alpha': None, 'bravo': '', # 'charlie' nie jest podane } nie ma dużo standaryzacji, które pole jest „dane”, a kiedy podane, czy może być podane jako None/Null/Nil lub pusty ciąg. W rezultacie kod jest zaśmiecony kontrolami typu `if hasattr(obj, 'alpha')` i domyślnymi funkcjami awaryjnymi. **Czy istnieje nazwa lub slangowe określenie tego rodzaju (imho) antywzorca?** AKTUALIZACJA: wygląda na to, że obecnie nie ma nazwy, więc chciałbym usłyszeć sugestie. Obecnie mamy te: * Incorporeal Horde (podziękowania dla psr)


title: Obawa o bezpieczeństwo usługi internetowej

text: Obecnie pracuję nad projektem zwierząt domowych z dwoma moimi kumplami. Ta usługa sieciowa zapewni podstawowe funkcje, takie jak logowanie/modyfikacja hasła/rejestracja itp. Wszyscy jesteśmy zadowoleni z jQuery i ASP.NET. Pomysł mojego przyjaciela to - `Ustawić usługę sieciową na tej samej domenie i wysłać jej dane do rejestracji, walidacji i odzyskania hasła przez jQuery ajax.` Ten sam proces będzie również używany w innych operacjach CRUD. Nie jestem jednak pewien, czy nie jest to ogromne zagrożenie bezpieczeństwa? Czy normalna osoba nie mogłaby napisać kodu, który mógłby stworzyć tysiące fikcyjnych użytkowników w naszej aplikacji? Czy skonfigurowanie pomocniczej usługi sieciowej, która obsługuje autoryzację (OAUTH 2.0 lub coś w tym rodzaju) i wywołuje usługę sieciową, która łączy się bezpośrednio z bazą danych, zmniejszy zagrożenie bezpieczeństwa?


title: Jak podzielić program na klasy?

text: Więc po pewnym czasie pracy w dziedzinie programowania nadal nie wymyśliłem, jak dokładnie powinny być skonstruowane programy, mam na myśli duży zestaw. Myślę, że wynika to również z pracy w rozwoju przedsiębiorstwa. Powiedz, że chcę napisać program, komunikator do sieci LAN. Skąd mam naprawdę wiedzieć, jakie zajęcia zrobić dla tego programu? Jak najlepiej i najefektywniej podzielić program na mniejsze części i klasy? To tylko przykład. Nie mam na myśli konkretnie tego zestawu problemów, zastanawiam się nad ogólnym podejściem. EDYCJA: Zadałem to pytanie tutaj, ponieważ dokładnie mówi w centrum pomocy: > O jakie tematy mogę tutaj zapytać? > > Programers Stack Exchange to strona z pytaniami i odpowiedziami dla profesjonalistów i studentów w > rozwoju oprogramowania i dziedzinach pokrewnych, którzy są zainteresowani uzyskaniem od ekspertów > odpowiedzi na pytania koncepcyjne dotyczące tworzenia oprogramowania. > > Jeśli masz pytanie dotyczące... > > wymagań oprogramowania > > architektury i projektowania oprogramowania > > koncepcji algorytmów i struktury danych Moje pytanie, zgodnie z moim rozumieniem, dotyczy _architektury oprogramowania i projektowania_. Nie jest to konkretne pytanie dotyczące kodowania, w przeciwnym razie zostałoby zadane na Stackoverflow. To jest **pytanie koncepcyjne**, które powinno tu pasować. Komentarze i odpowiedzi odnoszą się do tego, że istnieje wiele książek na ten temat. Zaakceptowałbym nawet tytuł książki jako odpowiedź, jeśli książka odpowiada na moje pytanie. Jeśli odpowiedź nie pasuje do tej formy pytań i odpowiedzi, przynajmniej można by mi wskazać właściwy kierunek. W końcu wszyscy jesteśmy tutaj, żeby się czegoś nauczyć.


title: Wyszukiwanie wszystkich pobliskich punktów w chmurze punktów

text: Jaki jest najlepszy sposób przechowywania danych chmury punktów 3D, optymalizując czas potrzebny na znalezienie **wszystkich** punktów w sferze przestrzeni 3D, a także czas potrzebny na wstawienie nowych punktów danych do zestawu danych? Tło: Mam chmurę danych punktów 3D (każdy punkt zawiera również dodatkowe dołączone dane) i muszę być w stanie wykonać zapytanie, aby szybko znaleźć wszystkie punkty w określonej przez użytkownika sferze przestrzeni 3D, a także szybko dodawać punkty do zbioru danych. Moja obecna implementacja wykorzystuje naiwną liniową tablicę punktów danych, ale nic dziwnego, że nie skaluje się ona dobrze, gdy mój zestaw danych rośnie. Moim priorytetem jest szybkość, zarówno przy znajdowaniu punktów w chmurze, jak i wstawianiu nowych punktów do chmury (chciałbym uniknąć konieczności ponownego równoważenia drzew po każdym wstawieniu, jeśli mogę). Nigdy nie usuwam punktów ze zbioru danych, więc szybkość usuwania punktów nie jest w ogóle ważna. Użycie pamięci również nie jest ważne -- jestem całkiem szczęśliwy, że mogę wykorzystać pamięć w tym problemie, jeśli to przyspieszy!


title: ROI w wyborze rozwiązania CMS

text: W firmie, w której pracuję, potrzebujemy CMS. Musimy dokonać wyboru, najpierw pracować z istniejącym systemem CMS ( Drupal, Joomla, cokolwiek ) lub rozwijać własny. Wiem na pewno, że rozwijanie własnego to właściwe podejście. Potrzebujemy całej elastyczności, jaką możemy uzyskać, a rozwijanie własnej jest najlepszym sposobem, aby to osiągnąć. Ale muszę to sprzedać w oparciu o zwrot z inwestycji wyższemu kierownictwu (mój szef). Zasadniczo pod względem czasu i pieniędzy. Mogę przekonać wyższe kierownictwo, że rozwijanie własnego jest najlepszym sposobem, nawet nie wspominając o ROI, ale chciałbym mu również przedstawić te dane. Dlatego staram się zbadać zwrot z inwestycji przy użyciu już istniejących rozwiązań CMS VS, tworząc własny, spersonalizowany CMS (w oparciu o bibliotekę open source lub nie). Po wyszukiwaniu w google znalazłem to: Wybierz między komercyjnym, open source lub niestandardowym CMS, ale link jest z 2003 r., zawiera trochę prawdy, ale świat bardzo się zmienił od 2003 r. I wydaje się, że nie mogę znaleźć cokolwiek innego na ten temat. Stworzyłem własny CMS (właściwie to wciąż go rozwijam, zawsze jest w toku), więc wiem, że nie jest to najłatwiejsze zadanie i że wymaga czasu. Czy ktoś może mi dać jakieś wskazówki? Na ROI jednego rozwiązania VS drugiego?


title: Szanse nowego języka

text: Tworzę nowy język z kilkoma fajnymi funkcjami, takimi jak OOP, statyczne pisanie, imperatyw itp. Głównym powodem stworzenia języka było dowiedzenie się więcej o budowie kompilatora. Moje pytanie brzmi, jakie są szanse, że mój język będzie znany? Co mogę zrobić, aby mój język był używany przez wielu? Wiem, że jest wiele podobnych projektów i znacznie lepszych niż mój, ale chcę, aby ten projekt odniósł sukces. Projekt jest prawie ukończony. Myślę, że zawiera przydatne narzędzia, takie jak automatyczna alokacja pamięci, menedżer pamięci, wskaźniki i kilka innych. Chciałbym wiedzieć, czy mój projekt może mieć przyszłość, czy też powinienem go porzucić jak wiele innych? Dziękuję Ci.


title: Praca z konstruktorem statycznym w Javie

text: Nie zrozumiałem w pełni konstruktorów statycznych w Javie. Jeśli jest to dozwolone, dlaczego jest dozwolone? W jakich scenariuszach byś go używał? Jakiemu celowi miałby służyć? Czy ktoś może mi podać prosty przykład?


title: Jak oswoić się z javascriptem i jego bibliotekami (jQuery)?

text: Jestem miłośnikiem php, pracuję z php przez ostatnie 2 lata, a także jestem freelancerem w różnych produktach php, takich jak wordpress, joomla, drupal. Czuję się dobrze z php, próbowałem nauczyć się JavaScript i innych jego bibliotek, ale czuję się nieswojo. Również. Więc czy ktoś dałby sugestię, jak mogę nauczyć się javascript?


title: Bezpieczne Open Source?

text: Chcę, aby moja delikatna aplikacja (właściwie antywirus) była otwarta, ale chcę mieć kontrolę nad tym, kto naprawdę uzyskuje źródło, czy nie. Najlepiej, aby złożyły wniosek, a ja lub administratorzy zatwierdzam ich wnioski. Czy jest do tego jakaś platforma internetowa? Głównym powodem kontroli/bezpieczeństwa jest uniemożliwienie twórcom złośliwego oprogramowania łatwego wykrycia, w jaki sposób ominąć metody sprawdzania ukrywania wykorzystywane do wykrywania złośliwego oprogramowania. Edycja: Szukam porady - być może, aby usłyszeć od kogoś, kto zrobił coś podobnego. Dziękuję!


title: Pytanie dotyczące zgodności licencji

text: Mam pytanie dotyczące licencji na oprogramowanie. Planuję umieścić licencję na framework, który napisałem. Moim zamiarem jest, aby licencja była otwarta, aby utrzymać społeczność. Aby było jasne, wyjaśnię, jak oczekuję, że wszystko będzie działać. Framework zdefiniuje wspólne API dla określonej funkcjonalności, a także klasę Proxy, która wywoła implementację tego API. Proxy będzie częścią frameworka, ale wewnętrznie będzie wywoływać rzeczywistą implementację, która zostanie opracowana głównie przez kogoś innego. Tak więc zasadniczo chcę móc: * Rozpowszechniać moją bibliotekę jako bezpłatną i z otwartym kodem źródłowym * Zezwalać na używanie mojej biblioteki w oprogramowaniu komercyjnym * Zezwalać na to, aby komercyjne produkty były zależne od mojej biblioteki, tj. dostarczać pracę pochodną, o ile jest ona wynikiem linkowania do mojego frameworka API (bez używania kodu źródłowego bezpośrednio w (nie)modyfikowanej formie) i licencjonowania ich prac pochodnych według własnego uznania. * Zapewnij legalne środki poszanowania licencji wszelkich wdrożeń stron trzecich przywoływanych przez moją bibliotekę. Oznacza to, że aplikacja komercyjna powinna być w stanie korzystać z mojej biblioteki lub innej komercyjnej biblioteki zaprojektowanej do współpracy z moją biblioteką, o ile przestrzega ona moich warunków licencyjnych oraz warunków innej licencji komercyjnej.


title: TDD: Napisz osobny test do inicjalizacji obiektu lub opierając się na innych testach wykonujących go

text: To wydaje się być powszechnym wzorcem, który pojawia się w niektórych testach, nad którymi ostatnio pracowałem. Mamy klasę, a często jest to przestarzały kod, którego projekt nie może być łatwo zmieniony, a który ma kilka zmiennych składowych. Istnieje jakaś funkcja "Inicjalizuj" lub "Ładuj", która wprowadza obiekt w prawidłowy stan. Dopiero po zainicjowaniu/załadowaniu elementy członkowskie są w odpowiednim stanie, aby można było skorzystać z innych metod. Więc kiedy zaczynamy pisać testy, pierwszym testem jest "TestLoad" i wszystko, co tam umieszczamy, to ćwiczenie logiki inicjalizacji. Wtedy możemy dodać jeden (lub kilka) testów TestLoadFailureXXX i te są zdecydowanie wartościowe. Następnie zaczynamy pisać testy sprawdzające inne zachowania, ale wszystkie wymagają załadowania obiektu. Więc wszystkie zaczynają od uruchomienia dokładnie tego samego kodu, co "TestLoad". Więc moje pytanie: czy TestLoad jest w ogóle konieczny? Czy wyjmujesz go i pozwalasz innym testom po prostu ćwiczyć obciążenie? A może zostaw to, żeby sprawy były bardziej wyraźne? Wiem, że każda funkcja testu jednostkowego nie powinna pokrywać się (lub w jak najmniejszym stopniu) z innymi funkcjami testowymi, ale wydaje się, że w przypadku ładowania jest to nieuniknione. I czy nam się to podoba, czy nie, jeśli coś w kodzie ładującym się zepsuje, skończymy z całym zestawem testów niepowodzeń. Czy jest jakieś inne podejście, którego może tutaj brakować? * * * Dziękuję za odpowiedzi. Zdecydowanie ma sens, że chcesz zobaczyć „Test inicjalizacji”, a jeśli to się nie powiedzie, wiesz, od czego zacząć. Jeśli ma to znaczenie, to pytanie dotyczy głównie C++ i używamy frameworka CppUnit. A teraz, dzięki sleske, będę stale życzył sobie, aby CppUnit obsługiwał zależności testowe. Może kiedyś będę musiał coś zhakować :)


title: Czy Python to dobry wybór do tworzenia interfejsów użytkownika? Jeśli tak, wxPython czy Tkinter?

text: Nie mogę się doczekać opracowania aplikacji desktopowej przy użyciu Pythona. Jestem początkującym i nie mam wystarczającej wiedzy na temat Pythona. Jestem programistą Java. Chociaż mam pewne doświadczenie w budowaniu interfejsów użytkownika za pomocą huśtawek, widzę, że aplikacje tworzone na huśtawkach są cholernie powolne. Cóż, może to być jeden z powodów, dla których wiele głównych implementacji jest wykonywanych w C/C++, tak jak w przeglądarkach/grach itp. Tworzenie interfejsu użytkownika w C++ może być lepszą opcją, ale wolę wybrać język programowania wysokiego poziomu niż C/C++. Zdecydowałem się więc na Pythona, zakładając, że będzie działał dobrze w przypadku huśtawek java, ponieważ sam python jest natywnie kompilowany na C/C ++. Czy mogę więc przyjąć to założenie, że python jest lepszy niż huśtawki java, aby opracować interfejs użytkownika? A może sugerujesz język, który jest lepszy niż python do tworzenia interfejsów użytkownika? Jeśli w ogóle korzystam z Pythona, jakiego zestawu narzędzi powinienem użyć Tkinter lub wxPython i dlaczego? proszę pomóż mi.


title: Co właściwie oznacza „abstrakcje nie powinny zależeć od szczegółów”?

text: Większość czytelników zna słynną zasadę inwersji zależności Boba Martina, która mówi: 1. Moduły wysokopoziomowe nie powinny zależeć od modułów niskopoziomowych. Oba powinny zależeć od abstrakcji 2. Abstrakcje nie powinny zależeć od szczegółów. Szczegóły powinny zależeć od abstrakcji Myślę, że wszystko dobrze rozumiem, z wyjątkiem pierwszego zdania w drugim wierszu - "Abstrakcje nie powinny zależeć od szczegółów". Co to dokładnie oznacza? Jaki byłby prosty przykład abstrakcji zależnej od szczegółu?


title: Jak programista studiów licencjackich powinien maksymalnie organizować swój czas nauki?

text: Zacząłem ostatnio programować (przed ostatnim rokiem studiów CS) i teraz czuję, że jest tam dla mnie morze odkrytych skarbów. Postanowiłem więc pokryć jak najwięcej, zanim po studiach będę szukać pracy. Zacząłem więc czytać książki (The C++ Programming Language, Introduction to Algorithms, Cracking the Coding Interview, Programming Pearls, etc ), uczestniczyć w serwisach StackExchange, rozwiązywać problemy (InterviewStreet i ProjectEuler), kodować dla open source, rozmawiać z innymi programistami/ mentorów i starają się uczyć coraz więcej. **Dobrze, więc w czym problem??** Problem polega na tym, że próbuję robić wiele rzeczy, ale wątpię, czy nadal właściwie wykorzystuję swój czas. Czytam wiele książek i czasami po prostu zostawiam książkę w połowie (przeskakując z jednej książki do drugiej), czasami spędzam zbyt dużo czasu na pogawędkach, a także gubię się gdzieś w ogromnym świecie Internetu, a na koniec marnotrawstwo ciężaru uczęszczania zajęcia (myślę, że moi nauczyciele nie znają się wystarczająco dobrze lub wolę uczyć się samodzielnie) Może niektórzy z Was mieli podobną sytuację. Jak zorganizowałeś swój czas? Lub jak myślisz, jak najlepiej zorganizować to dla studenta? I jakie błędy popełniam, przed którymi możesz mnie ostrzec


title: Jak zaimplementować klasy w moim języku skryptowym?

text: Załóżmy, że mam plik kodu, który odczytuje (użyję składni w języku Java) i jest on interpretowany. Coś w rodzaju skryptu rubinowego. klasa A{ int nazwapola = 4; A(){...} void doCoś(){...} } InstancjaOfA = new A(); A.nazwapola = 7; Rozumiem, że tak się dzieje, gdy ten plik jest interpretowany. 1. Plik jest leksyfikowany i analizowany 2. Generowane jest drzewo AST lub Parse 3. Drzewo Parsowania jest przeszukiwane w celu wygenerowania kodu w czasie wykonywania reprezentującego klasę. 4. Co się wtedy dzieje? Jak definicja przekształca się w instancję? A jaki rodzaj reprezentacji wewnętrznej jest wymagany do reprezentowania klasy? Czy interpreter przechowuje AST dla klasy w celu ponownego przetworzenia za każdym razem, gdy tworzona jest instancja, czy też tworzona jest inna forma? Śledziłem wzorce z książki Wzorce implementacji języka Terrence'a Parra. Myślę, że rozumiem, jak zbudować tabelę symboli i obiekty zakresu. Jestem trochę rozmyty, jak wziąć strukturę taką jak klasa i utworzyć jej instancję.


title: Jak zdefiniować identyfikator naturalny w bazie danych?

text: Istnieje wiele podręczników. Próbuję stworzyć bazę danych do przechowywania informacji o tych dokumentach. Ale jest mały problem. Jak mogę nadać sensowny identyfikator do instrukcji? Czy za nadawaniem dokumentom znaczącego identyfikatora kryje się jakiś standard lub logika? Jeśli nie ma standardu, czy możesz mi powiedzieć, jak mam to zrobić? przykład: table : identyfikator instrukcji | nazwa ręczna EDYCJA: Nieistotne ID 1 lub M1 lub foo 2 C2 bar 3 P123 nazwa ... ... ... (i) (ii) (iii) (i) Nie ma dla mnie znaczenia, ponieważ jeśli jakaś pozycja zostanie usunięta, może być luka. ex 1 33 100. (ii) losowy znak może być mylący, gdy próbuje się nadać nazwę nowemu podręcznikowi (iii) Dlaczego nadawanie nazwy nie jest preferowane, ponieważ znalezienie nazwy do podręcznika jako ID jest trudne po 500 podręcznikach. Znaczenie: nowy identyfikator * Można go łatwo wyprodukować, nawet jeśli po 1000 instrukcji * Nie powinno być tak skomplikowane


title: Potrzebujesz licencji open-source z niewielkim dodatkiem komercyjnym

text: Pracuję nad projektem open-source i ludzie mogą go używać i modyfikować, tutaj bez problemu. Jedyną rzeczą, na którą nie chcę pozwolić, jest to, aby ludzie ją wykorzystywali i zarabiali na mojej pracy (ponieważ takie są moje plany!). Jakiej licencji powinienem użyć, aby spełnić te wymagania?


title: Ile wątków powinno jednocześnie uzyskiwać dostęp do systemu plików?

text: Mamy moduł w aplikacji, który przechowuje dane w wielu plikach i wielopoziomowych katalogach i uzyskuje do nich dostęp z wielu wątków (zarówno odczyty, jak i zapisy). Struktura katalogów jest oparta na podzielonej wartości hash, takiej jak: b1/94/6a/92/a.txt b1/94/6a/ee/a.txt a1/0e/db/bb/b.txt ... Jeśli wywołujący usuwa plik, moduł natychmiast usuwa puste katalogi. Ile powinien wynosić poziom współbieżności modułu? Czy warto tworzyć i usuwać foldery z wielu wątków jednocześnie? Czy systemy plików mogą je skutecznie obsłużyć? Czy warto korzystać z modułu wielowątkowego? (O wiele łatwiej byłoby napisać jednowątkowy.) (Aplikacja jest napisana w Javie i działa głównie w systemie Windows, NTFS, innym niż SSD, ale jestem również zainteresowany innymi systemami operacyjnymi i plikami, jeśli są różnice.)


title: Czego za wszelką cenę byś nie wymyślał na nowo?

text: Niedawno musieliśmy ponownie wynaleźć silnik kolejkowania o wysokiej dostępności, taki jak RabbitMQ (z różnych powodów). Oczywiście okazało się to bardziej czasochłonne i kosztowne niż oczekiwano. Jakich rzeczy unikniesz odbudowy za wszelką cenę? Jakie typy komponentów powinny być raczej ponownie wykorzystane?


title: Jak opisać style i podejścia do programowania w C++?

text: Jak mogę powiedzieć coś więcej niż tylko „C++” w moim CV, raportach lub innych pismach, aby jasno przekazać, jakiego rodzaju programowanie w C++ zajmuję się? Czy istnieją dobrze zdefiniowane style C++? („Style” może nie być właściwym słowem.) Przykłady: używanie C++ jako „ulepszonego C” wykorzystującego silniejsze sprawdzanie czcionek, subtelności składniowe, ale niewielkie lub lekkie użycie klas; używanie ciężkich technik OO, w których prawie wszystko jest tworzone w klasę (a mogą być różne style) - ale unikanie szablonów i zaawansowanych technik; i intensywne korzystanie z metaprogramowania i każdej najnowocześniejszej zaawansowanej funkcji C++. Widziałem kod, w którym tak intensywnie wykorzystuje się terminologię informatyczną i zaawansowane funkcje, że tylko doktor CS byłby w stanie to zrozumieć, a kod był tak przejrzysty i prosty, że mogli go zrozumieć EE i fizycy ze skromnymi umiejętnościami programowania. Nie chodzi tu o dosłownie kodowanie stylów – skomplikowane szczegóły dotyczące nawiasów, wcięć, komentowanie i tak dalej – ale o swoją filozofię dotyczącą tego, czym jest dobry kod, podejście do organizowania tego wszystkiego oraz stopień fanatyzmu lub niechęci do stosowania różnych głównych technik, procedur proceduralnych. vs OO vs funkcjonalne i tak dalej. Czy takie odmiany można kategoryzować w sensowny sposób? Jak nazwać je dla kogoś, kto nie jest ekspertem w tworzeniu oprogramowania, z ilością wiedzy, której można oczekiwać od dobrego dyrektora lub rekrutera (nieważne PHB)? Idealnie byłoby, gdyby każdy mógł powiedzieć w swoim CV „C++ w stylu blah-blah” lub „mumbleific C++” i znaleźć pracę lub projekty freelance w tej kategorii/stylu C++. Udoskonalony koder w C++ mógłby uniknąć projektów pełnych kodu z rozbudowanym szablonem. (W pewnym stopniu to pytanie może być bardziej ogólne niż C++, ale C++ istnieje od lat i jest wieloparadygmatyczny, co prowadzi do największego zamieszania.)


title: Zmiana pracy i pozostawienie projektu bez lidera (czyli mnie)

text: > **Możliwe zduplikowanie:** > W którym momencie w trakcie projektu nie ma sensu odejść? Prowadzę projekt, który trwa od około półtora roku. Dwóch z nas nad tym pracowało. Jeden to facet od bazy danych. Jestem facetem z javascript/ui. Oznacza to, że zasadniczo nie ma pokrywania się wiedzy o kodzie. To jest ta rzecz. Ktoś zaraz zaoferuje mi słodką pracę z prawie 30% podwyżką. Chociaż jestem całkowicie zadowolony z mojej obecnej pracy i uwielbiam ten projekt, nowy byłby lepszy i nie wyobrażam sobie odmowy. Dużym problemem jest to, że mój projekt ma wejść do produkcji za kilka tygodni. Uważam, że nowi faceci zdyskwalifikowali nową pracę, będąc złymi ludźmi, którzy zrujnowaliby mi życie, gdyby nie współpracowali i pozwolili mi zacząć po wdrożeniu. Ponieważ wydają się przyzwoitymi, etycznymi ludźmi, nie spodziewam się, że będzie to problem. Obecny projekt zostanie zbrutalizowany przez moją nieobecność. Pociesza mnie fakt, że zdecydowanie poprosiłem o dublowanie przez co najmniej sześć miesięcy. To nakłada trochę odpowiedzialności na głowę szefa, ale i tak będzie to naprawdę zła rzecz. Co robią inni z was, gdy jesteście krytyczni dla projektu, gdy nadszedł czas, aby przejść dalej? Czy jestem zobowiązany do pozostania w pobliżu, nawet jeśli pojawi się coś lepszego? Wiem, że mój małżonek sprzeciwiłby się, gdybym znalazł kogoś innego. Czy to dotyczy pracy? Mam teraz dublera, chociaż jest świeżo po studiach. Nie zastąpi mnie w najbliższym czasie. To mały sklep i szef zostanie zmiażdżony. Przeżywam traumę w oczekiwaniu, że mu powiem, i czuję się winna z powodu praktycznych konsekwencji. Szukam pocieszenia i strategii, jak poradzić sobie z tą zmianą. Dziękuję za wysłuchanie. ==========================Kolejne uwagi ======================== == @ChaosPandion, Szansa: Nie, nie mogę zostać, żeby dokończyć projekt. Będę nalegał na kompromis, w którym kończę obecny sprint (za około miesiąc), ale do wykonania zostało jeszcze co najmniej pół roku, prawdopodobnie rok solidnej, pełnoetatowej pracy. Nie spodziewałbym się, że nowy pracodawca utrzyma tę pracę tak długo.


title: Jak wracasz do kodu, gdy nie pamiętasz, co robiłeś?

text: No cóż, mam trochę problemów z prokrastynacją i tak dalej, ale te stają się nieskończenie gorsze, kiedy nie pamiętam, co powinienem robić. To znaczy znam swój projekt, do tej pory pisałem 100% kodu i mniej więcej wiedziałem co robię, ale nie pamiętam dokładnie co, nie pamiętam jaki plik edytowałem i dlaczego . Jak wrócić na właściwe tory? (ponieważ w tej chwili moja technika otwierania kodu źródłowego i wpatrywania się w niego nie działa)


title: Przykład algorytmu dla początkujących, średniozaawansowanych i złożonych/eksperckich?

text: Chciałbym poznać zakres złożoności algorytmów. Myślę, że byłoby to interesujące i pomocne dla takich jak ja, którzy próbują lepiej zrozumieć, jak formułowane są algorytmy i jak je dekonstruować. Czy możesz zaproponować algorytm podstawowy z wyjaśnieniem, algorytm średniozaawansowany z wyjaśnieniem, a może poziom ekspercki (z wyjaśnieniem lub bez)?


title: Co mogę zrobić, aby mój kod był utrzymywany w lekkim środowisku programisty?

text: Jestem analitykiem danych kontraktowych, więc przeskakuję między pracami co 3-6 miesięcy, co uważam za dobre dla mnie, ale prowadzi do pewnych problemów, jeśli chodzi o kodowanie. Zajmuję się głównie statystykami (podobne pytanie zadałem na temat weryfikacji krzyżowej, ale odpowiedzi nie są tutaj istotne), ale odkryłem również, że świat biznesu uwielbia excel i uwielbia kopiować i wklejać to samo w kółko nawet więcej. To sprawiło, że nauczyłem się pisać skrypty VBA, a następnie programy VB.NET, aby zautomatyzować jak najwięcej tych raportów. Jestem pewien, że moje programy nie są najbardziej eleganckie, ale wkładam sporo wysiłku, aby działały w tylu przypadkach, ile mogę przetestować, dodaję wyjątki i próbuję kodować, aby program mógł obsługiwać zmiany w plikach że przetwarza, ale jest pewien limit, jeśli usuniesz ogromną część danych, istnieje duża szansa, że mój program się potknie, co, zgadzam się, nieuchronnie się wydarzy. Zwykle dość drobna zmiana w kodzie rozwiązuje problem, a ja staram się skomentować mój kod i uczynić go czytelnym przy założeniu, że jakaś inna osoba będzie musiała go kiedyś przeczytać. Mój problem polega na tym, że generalnie dostaję zespoły ludzi, którzy zasadniczo nie mają doświadczenia z programowaniem (tak jak VBA byłby ogromnym obciążeniem dla każdego, z kim bezpośrednio pracuję). Zastanawiam się, co powinienem robić jako osoba, która napisała kod, aby jak najlepiej go utrzymać. Mam na myśli dwa podejścia (opisane dalej), ale bardzo chętnie zasięgnę porady. Rozwiązanie 1: Znajdź bardziej doświadczonych technologicznie współpracowników i przeprowadź ich przez programy oraz jakie podstawowe zmiany można wprowadzić. Szczerze mówiąc automatyzacja programu Excel jest tak łatwa, jak to tylko możliwe, jeśli chodzi o programowanie, więc czuję, że mógłbym nauczyć kogoś podstaw obsługi tego programu dość szybko. Rozwiązanie 2: Skontaktuj się z działem IT i pokaż im, co się dzieje, a może będą w stanie pomóc. Problem polega na tym, że dział IT jest ciągle zawalony (co na pewno wielu z was wie) i czuję się trochę jak palant, gdy wrzucam na niego więcej rzeczy. Zostawiam swój osobisty adres e-mail z miejscami i chętnie odpowiadam na szybkie pytania za pośrednictwem poczty e-mail, ale uważam potrzebę bardziej wyczerpującej konserwacji za coś nieuniknionego i chciałbym się upewnić, że dochowuję należytej staranności, aby upewnić się, że zostanie to zrobione . Wyobrażam sobie jakąś kombinację dwóch przedstawionych tam podejść, ale czy są jakieś ostrzeżenia, które powinienem przekazać IT? Czuję, że byłbym zirytowany, gdybym zaczął otrzymywać prośby o naprawienie programu, którego nigdy nie widziałem, od jakiegoś przypadkowego faceta, którego już nie ma.


title: Jak dokonać refaktoryzacji do czystszej wersji utrzymywania stanów widżetu?

text: **Backstory** Odziedziczyłem sporo kodu, który chciałbym zrefaktorować. Jest to aplikacja UI napisana w javascript. **Obecny stan:** Mamy główną aplikację, która składa się z kilku elementów interfejsu użytkownika. A każdy komponent ma pola wejściowe, pola tekstowe, menu itp.), takie jak „bilet”, „informacje o kliencie” itp. Na podstawie danych wejściowych, skąd aplikacja została wywołana, kto jest użytkownikiem, włączamy/wyłączamy, ukrywamy, pokazujemy , zmień tytuły. Niestety aplikacja urosła do punktu, w którym naprawdę trudno ją skalować, dodawać nowe funkcje. Główny sterownik (kod aplikacji) wywołuje funkcje uzbrajania/rozbrajania odpowiednich komponentów. Tak więc wiele rzeczy wygląda tak: Główna jednostka aplikacji function1() { **call_function2()** component1.setX(true); komponent1.zestawY(prawda); komponent2.setX(fałsz); } call_function2() { // może powtórzyć część kodu function1 o nazwie } i mamy tego dużo w głównej unii. Sprzątam ten bałagan. Jaki jest najlepszy sposób na utrzymanie stanu widżetów? Daj mi znać, jeśli potrzebujesz wyjaśnienia.


title: Czy każdy programista może mieć 4-5 lat doświadczenia z Androidem w marcu 2012 roku?

text: Dzisiaj czytałem okólnik o pracy, który wszedł do naszej wewnętrznej grupy Yahoo. Stwierdzono, że **potrzebny programista Androida z 4-5-letnim doświadczeniem**. Nie jestem programistą z takim doświadczeniem. Niedawno zacząłem uczyć się androida. Punkt, który przykuł mój wzrok to _4-5 lat_. Myślałem, że Android jest bardzo nowy. Nikt nie powinien mieć 4-letniego doświadczenia. Więc szukam w Google historii Androida. I znalazłem to na stronie ctoedge.com, > Android SDK został po raz pierwszy wydany jako wersja „wczesna” w listopadzie > 2007. We wrześniu 2008 r. T-Mobile ogłosił dostępność T-Mobile G1, > pierwszego smartfona opartego na Platforma Android. Kilka dni później > Google ogłosiło dostępność Android SDK Release Candidate 1.0. W październiku 2008 r. Google udostępnił kod źródłowy platformy Android na licencji open source Apache. Czy możesz mi teraz powiedzieć, jacy programiści mieliby 4-5 lat doświadczenia w marcu 2012 roku? Czy naprawdę istnieją? Dla mnie to coś w stylu _Potrzebny doświadczony programista Java z 18-20 letnim doświadczeniem_


title: SOLID vs metody statyczne

text: Oto problem, z którym często się spotykam: Niech będzie projekt sklepu internetowego, który ma klasę Product. Chcę dodać funkcję, która umożliwia użytkownikom publikowanie recenzji do produktu. Mam więc klasę Review, która odwołuje się do produktu. Teraz potrzebuję metody, która wyświetla wszystkie recenzje produktu. Istnieją dwie możliwości: (A) public class Product { ... public Collection<Review> getReviews() {...} } (B) public class Review { ... static public Collection<Review> forProduct( Produkt produkt ) { ...} } Patrząc na kod, wybrałbym (A): Nie jest statyczny i nie potrzebuje parametru. Jednak wyczuwam, że (A) narusza zasadę pojedynczej odpowiedzialności (SRP) i zasadę otwarte-zamknięte (OCP), podczas gdy (B) nie: * (SRP) Kiedy chcę zmienić sposób zbierania recenzji dla produktu , muszę zmienić klasę Product. Ale powinien być tylko jeden powód, dla którego należy zmienić klasę Product. A to z pewnością nie opinie. Jeśli spakuję każdą funkcję, która ma coś wspólnego z produktami w Produkcie, wkrótce będzie trzaskać. * (OCP) Muszę zmienić klasę Product, aby rozszerzyć ją o tę funkcję. Myślę, że to narusza część zasady „Zamknięte na zmiany”. Zanim otrzymałem prośbę od klienta o wykonanie recenzji, uznałem Produkt za gotowy i „zamknąłem” go. Co jest ważniejsze: przestrzeganie zasad SOLID, czy posiadanie prostszego interfejsu? A może robię tu coś złego? **Wynik** Wow, dzięki za wszystkie świetne odpowiedzi! Trudno wybrać jedną jako oficjalną odpowiedź. Pozwolę sobie podsumować główne argumenty z odpowiedzi: * pro (A): OCP to nie prawo i czytelność kodu też ma znaczenie. * pro (A): relacja encji powinna umożliwiać nawigację. Obie klasy mogą wiedzieć o tej relacji. * pro (A)+(B): wykonaj jedno i drugie i deleguj w (A) do (B), aby produkt był mniej podatny na zmianę. * pro (C): umieść metody wyszukiwania w trzeciej klasie (usługa), gdzie nie są statyczne. * contra (B): utrudnia kpiny w testach. Kilka dodatkowych rzeczy, które wniosły moje uczelnie w pracy: * pro (B): nasz framework ORM może automatycznie generować kod dla (B). * pro (A): ze względów technicznych naszego frameworka ORM, w niektórych przypadkach konieczna będzie zmiana encji „zamkniętej”, niezależnie od tego, dokąd trafia wyszukiwarka. Więc i tak nie zawsze będę mógł trzymać się SOLID. * contra (C): za dużo zamieszania ;-) **Wniosek** Używam obu (A)+(B) z delegacją dla mojego obecnego projektu. Jednak w środowisku zorientowanym na usługi pójdę z (C).


title: Proces tworzenia oprogramowania na część etatu Projekt uniwersytecki dla 1 programisty?

text: Niedługo będę robił projekt uniwersytecki w niepełnym wymiarze godzin, a ramy czasowe to około 8 miesięcy z około 10-15 godzinami tygodniowo spędzonymi na pracy nad nim, z przeglądem przez korepetytora co kwartał. Moje pytanie brzmi, jaki proces tworzenia oprogramowania poleciłbyś użyć, gdy kurs wymaga samodzielnej pracy w celu zarządzania sobą i projektem? Chciałem zastosować iteracyjne podejście tygodniowe lub dwutygodniowe do mojej pracy, ale wiele procesów wydaje się być dostosowanych do zespołów ludzi. Patrzę na XP (Extreme Programming) OR Scrum jako coś, co jest mniej niż normą dla pracy uniwersyteckiej, ale znowu Scrum, o którym jeszcze nie wiem, a mam pytanie; czy możesz powiedzieć, że robisz XP bez programowania w parach? ponieważ mój nauczyciel wydaje się uważać, że muszę trzymać się wszystkich praktyk, w przeciwnym razie nie mogę tego zrobić (nieważne, jeśli pracuję sam). Możemy mieć również wkład ze strony użytkownika zewnętrznego, ale ze względu na małe ramy czasowe pracy w niepełnym wymiarze godzin może być bardziej korzystne dla mnie bycie użytkownikiem, co nie jest tym, co wolę, biorąc pod uwagę, jak mogę zagubić się w projekcie.


title: Tworzenie biblioteki kodów

text: Więc jestem w trakcie tworzenia (i utrzymywania) własnej biblioteki kodu z szybkimi snippetami, aby ułatwić życie. Zakładam, że wiele innych osób robi to, aby pomóc. Moje pytanie brzmi, jakie rzeczy przechowujesz w tej tak zwanej bibliotece. Ponadto, czy używasz jakichś narzędzi do organizowania tej biblioteki?


title: czy lokalizacja numerów nie jest po prostu niepotrzebna?

text: Właśnie przeczytałem tę stronę http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx Jedną z rzeczy, które zrobili, było przekonwertowanie daty arabskiej do kalendarza arabskiego. Zastanawiam się, czy to w ogóle dobry pomysł. Czy rzeczywiście będzie to denerwujące/dezorientujące dla użytkownika (nawet jeśli użytkownik jest Arabem). Moje drugie pytanie brzmi, czy naprawdę musimy zmienić 33 899,99 na 33,899,99 dla niektórych kultur, takich jak niemiecka? Chodzi mi o to, że nie zaszkodzi to zrobić, ponieważ biblioteka już to za nas robi, ale czy nie spowodowałoby to większego zamieszania dla użytkownika (nawet jeśli jest Niemcem itp.). Jestem pewien, że bez względu na kulturę, z której pochodzą ci ludzie, jeśli podam ci liczbę 33 899,99, nie ma mowy, abyś się pomylił? (chyba że moja strona internetowa/aplikacja jest pierwszą stroną internetową/aplikacją, z której korzystałeś w całym swoim życiu, co prawdopodobnie jest możliwe, ale prawdopodobieństwo jest tak niskie) Miałem na myśli „uniwersalny” jako format, który wszyscy zobaczą i będą wiedzieć, co to jest oznacza. Nie musi to być jakiś standard napisany czarno na białym i tym podobne. Dopóki każdy może go przeczytać i od razu bez zamieszania wiedzieć, co przedstawia ten tekst, jest to uniwersalne. Dla pewności 1.234,00 na pewno nie jest uniwersalne. Mam na myśli to, że jestem pewien, że można znaleźć kogoś, kto przez całe życie używał komputerów, ale nigdy nie spotkał się z tym formatem liczb. Ponieważ większość stron internetowych/aplikacji używała 1,234.00 bez zmian w celu dostosowania lokalizacji, uważam, że to de facto (uniwersalny format, który każdy zobaczy i będzie wiedział, co to oznacza). Co do dat, jeśli napiszemy 01.02.03 to na pewno nikt nie będzie wiedział (od razu, od razu, bez dwuznaczności) jaka to data. Ale nikt nie może się mylić 2 stycznia 2003, 1 lutego 2003, 3 lutego 2001, jeśli napisaliśmy je jako takie, prawda? Btw to pytanie dotyczy lokalizacji, nie mów mi takich rzeczy jak "Hej, nie wszyscy dobrze czytają po angielsku!" ponieważ jest to kwestia internacjonalizacji (która wykracza poza ten temat). Pozostańmy przy dyskusji o lokalizacji.


title: Czy oprócz formalnej specyfikacji języka programowania, który projektuję, powinienem podać odniesienie do języka?

text: Projektuję język programowania i chciałbym dostarczyć do niego pełną dokumentację. Do tej pory planowałem napisać następujące dokumenty: 1. Wstępny zarys projektu, głównie jako przypomnienie projektu i proponowanych zmian, a także pomoc w konstruowaniu wszystkich innych dokumentów po zakończeniu fazy projektowania . 2. Formalne określenie składni i semantyki języka, zarówno w języku angielskim, jak iw odpowiedniej formalnej notacji matematycznej. 3. Samouczek. Odkryłem, że niektóre języki mają referencje, a w Wikipedii odkryłem, że referencje językowe i specyfikacje językowe nie są takie same, referencje są zwykle mniej szczegółowe, ponieważ są skierowane do użytkowników języka, a nie do jego implementatorów. Chciałbym jednak wiedzieć... 1. Jakie części specyfikacji języka są zwykle pomijane w odwołaniu do języka? 2. Czy naprawdę przydatne jest zapewnienie odniesienia do języka, kiedy ostatecznie dobry programista powinien zapoznać się ze specyfikacją języka jako ostatecznym źródłem informacji? 3. W przypadku, gdy odpowiedź na poprzednie pytanie brzmi „Tak”... Czy naprawdę warto ryzykować wprowadzanie sprzeczności między specyfikacją języka a referencją językową?


title: Dlaczego podczas szacowania historyjek użytkowników używamy story pointów zamiast osobodni?

text: W metodykach zwinnych (np. SCRUM) złożoność/wysiłek potrzebny do opracowania historyjek użytkownika mierzy się w Story points. Punkty Story służą do obliczania liczby historyjek użytkownika, które zespół może wziąć w iteracji. Jaka jest korzyść z wprowadzenia abstrakcyjnego pojęcia (punktów historii), gdzie możemy po prostu użyć konkretnego pomiaru, np. szacunkowych osobodni? Możemy również obliczyć prędkość, oszacować pokrycie iteracji itp. przy użyciu szacunkowych osobodni. W przeciwieństwie do tego, story pointy są trudniejsze do wykorzystania (ponieważ pojęcie jest abstrakcyjne), a także trudniejsze do wyjaśnienia interesariuszom. Jaką to zaletę?


title: Jak prawidłowo obsługiwać transakcje dostępu do plików?

text: Poszukuję dobrych praktyk lub rad dotyczących **mechanizmów transakcji dostępu do plików**. Będziemy mieć wiele instancji aplikacji rozproszonych w nadmiarowej sieci (chmurze) obserwujących katalog na serwerze NAS dostępnym w 100%. Poszukuję również alternatywnej architektury, która byłaby bardziej odpowiednia. * Co minutę będziemy mieć dostęp do systemu z tysięcy urządzeń mobilnych. Urządzenia tworzą plik binarny (na przykład obraz), który jest wysyłany do usługi RESTful bez transformacji. Urządzenie musi wykonać zadanie szybko, aby oszczędzać baterię. * Ponieważ usługa RESTful musi pobierać dane wejściowe tak szybko, jak to możliwe, plik binarny jest obecnie zapisywany bezpośrednio jako plik na serwerze NAS o 100% dostępności. * Jeśli wystąpi błąd (plik nie zostanie poprawnie zapisany), klient zostanie o tym powiadomiony i może spróbować ponownie. Musimy zbudować usługę roboczą, która będzie _obserwować_ folder plików w poszukiwaniu nowych plików do ich przetworzenia. Pracownik przekonwertuje je na inny format, a następnie przeniesie je do innego folderu na serwerze NAS. Do obsługi obciążenia użyjemy jak największej liczby instancji. Moją główną troską jest dostęp do plików. Usługa RESTful zapisuje do pliku tymczasowego z rozszerzeniem ignorowanym przez usługę procesu roboczego (.tmp), a po zapisaniu ostatniego bajtu zmienia nazwę pliku. Proces jest szybki, ale nie możemy sobie pozwolić na przypadek, w którym co najmniej dwie usługi robocze uzyskują dostęp do tego samego pliku w tym samym czasie. Potrzebujemy jakiegoś mechanizmu transakcyjnego lub innego wzorca architektury przedsiębiorstwa. **Czy istnieje jakiś mechanizm transakcyjny systemu plików, który skaluje się?**


title: Jak obsłużyć plik wejściowy dostarczony w konkursach programistycznych?

text: W konkursach programistycznych, takich jak Google CodeJam, Facebook Hacker Cup, do każdego pytania dołączany jest plik wejściowy do testowania własnego kodu do tego programu. Uderza mnie tylko w tym momencie. Nie rozumiem, czy ten plik wejściowy powinien być odczytany przez mój program, czy służy tylko do testowania poprawności mojego programu dla różnych przypadków testowych podanych w tym pliku wejściowym i mogę skopiować każdy przypadek testowy podany w pliku wejściowym jeden przez jeden ręcznie i sprawdź, czy dane wyjściowe dostarczone przez mój program są prawidłowe, czy złe. Byłoby dla mnie bardzo pomocne, gdyby każdy, kto aktywnie uczestniczył w tak konkurencyjnych konkursach, mógł podzielić się swoimi poglądami.


title: Najlepsza praktyka: Czy komunikaty o błędach powinny być obsługiwane przez interfejs API czy przez aplikację?

text: Projektuję aplikację, która współdziała z RESTful API. Podczas zwracania komunikatów o błędach, takich jak „Nie można zarejestrować użytkownika”, Czy komunikat o błędzie powinien być generowany przez aplikację? czy przez API? Szukam najlepszych praktyk.


title: W pełni stabilny, unikalny algorytm na miejscu w O(n)

text: Czy istnieje algorytm, który przy posortowanej tablicy _zamienia_ wszystkie _pierwsze_ unikalne elementy na początek tablicy i duplikaty do końca, jednocześnie pozostając stabilnym dla _zarówno_ unikalnej podtablicy, jak i zduplikowanej podtablicy, i działa w `O( n)` swapy (a najlepiej jedno przejście)? Powinien zwrócić długość unikalnej części tablicy. Wymyślone przykładowe dane wejściowe/wynikowe (Używając Pythona, ponieważ jest łatwy do odczytania): >>> A = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5] # już posortowane >>> r = Unikalne (A) >>> r 5 >>> A [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] >>> A[:r] # porcja posortowana [1, 2, 3, 4, 5] >>> A[r:] # część zduplikowana [1, 2, 3, 4, 5] Stabilność oznacza, że nawet jeśli dwa lub więcej kluczy są równe, kolejność kluczy w wyniku pozostaje . Np. jeśli `A[i] == A[j] == A[k] oraz i < j < k` w oryginalnej tablicy, wszystkie te właściwości są przechowywane w całej tablicy po uruchomieniu algorytmu Unique. (Nawet jeśli `A[i]` może znajdować się w unikalnej podtablicy, a oba `A[j]` i `A[k]` znajdują się w podtablicy duplikatów). element podczas iteracji po tablicy. Następny unikalny element jest zamieniany na element po zakończeniu bieżącej unikalnej podtablicy: def Unique1(A): if len(A) <= 1: zwróć 0 i = 0 for j in range(1, len(A)) : if A[i] < A[j]: i += 1 if i < j: A[i], A[j] = A[j], A[i] return i + 1 Zamienia pierwsze unikalne elementy posortowanej tablicy do początku tablicy, działa w jednym przebiegu (tak samo jak `O(n)`) i jest stabilne dla unikalnej podtablicy, **ale** nie spełnia wymagań, ponieważ miesza duplikaty podtablica: >>> A = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5] >>> r = Unique1(A) >>> A[r:] # duplikaty części [3 , 2, 4, 1, 5] # nie posortowane Chociaż zmiany wprowadzane przez algorytm w unikalnej podtablicy są dość oczywiste, nie widzę, co się dzieje z podtablicą duplikatów, ale mam wrażenie, że można to odwrócić gdybyśmy wiedzieli lub przechowywali więcej informacji n o duplikatach. Zauważ, że ponowne sortowanie podtablicy duplikatów nie jest uruchamiane, ponieważ 1: jest to „O(n log n)”, a nie „O(n)” i 2: łamie stabilność. Przychodzi mi też na myśl inny algorytm, który zamienia nowo znalezione unikalne przedmioty aż do następnej pozycji. Chociaż spełniałby pozostałe warunki, miałby zamiany `O(n^2)`. Czy możliwy jest taki unikalny algorytm? A jeśli nie to dlaczego nie?