title: Porady, jak upewnić się, że witryna e-commerce jest bezpieczna przy użyciu PHP i MySQL

text: Jak mówi tytuł, chciałbym uzyskać porady od doświadczonych twórców stron internetowych na temat rozwiązywania problemów z bezpieczeństwem mojej witryny e-commerce. Projektuję bazę danych oraz kod, który komunikuje się z bazą danych w celu wprowadzania zmian itp. Mam kilka pytań, ale ogólnie dobra lista kontrolna, co zrobić, aby bezpieczeństwo było dość szczelne, ponieważ będę miał do czynienia kartami kredytowymi. Nie będę przechowywać numerów kart kredytowych. Pomocne byłyby linki do dobrych miejsc. Moją główną troską jest zapewnienie bezpieczeństwa bazy danych. Jestem całkiem nowy w tworzeniu stron internetowych i martwię się tylko o to. Mam pytanie dotyczące projektu bazy danych wykorzystywanej do transakcji online. Czy istnieje lepszy sposób na stworzenie schematu niż umieszczenie wszystkich informacji o użytkowniku w jednej tabeli: np. klient (identyfikator klienta, imię, nazwisko, nazwa użytkownika, hasło, adres, miasto, kraj, kod pocztowy) Czy lepiej byłoby przechowywać dane uwierzytelniające użytkownika w innej tabeli i połączyć je z identyfikatorem klienta? Przepraszam, jeśli nie jestem zbyt konkretny, ale jestem nowy w tworzeniu stron internetowych i mam głównie doświadczenie w programowaniu offline. Ponownie moim głównym zmartwieniem są kwestie bezpieczeństwa. Jeśli ktoś ma świetny artykuł na temat bezpieczeństwa, to też będzie w porządku. Dziękuję za Twój czas!


title: Programiści będą w przyszłości projektantami?

text: Czy w najbliższej przyszłości wszystko będzie zmierzać do potężnego interfejsu (mówię o aplikacjach desktopowych)? Konsola czy proste aplikacje GUI nie będą popularne? A czy to oznacza, że wszyscy programiści będą musieli zostać projektantami?


title: Tabela DB z kolumną dla każdego typu danych

text: Muszę zaprojektować DB do przechowywania danych klucz-wartość. Lista nazw kluczy nie jest stała i powinna się później rozwinąć. Nie chcę tworzyć tabeli z kolumną dla każdego klucza, ponieważ będę musiał często dodawać kolumny i może się ona za bardzo rozrosnąć, i zrozumiałem, że projekt Entity-Attribute-Value nie jest wydajny. Myślałem o następującym typie projektowania tabeli i pytam, czy ma to sens i czy ktoś może wymyślić jakieś wady związane z wydajnością, rozmiarem tabeli lub jakimkolwiek innym problemem - Każda kolumna w tabeli ma inne dane rodzaj; nieistotne kolumny dla klucza to NULL: ID |DataType |KeyName |ValInt |ValSmallInt|ValBool |ValStr |ValText |ValDate ------------------------- -------------------------------------------------- ---- 1 |1 (int) |Szerokość |100 |NULL |NULL | NULL | NULL | NULL 2 |1 (int) |Wysokość |200 |NULL |NULL | NULL | NULL | NULL 3 |2 (bool) |IsActive|NULL |NULL |false | NULL | NULL | NULL 4 |3 (tekst) |URL |NULL |NULL |NULL | NULL | w.com | NULL 5 |1 (int) |Rozmiar |4 |NULL |NULL | NULL | NULL | NULL 6 |4 (data) |Utworzono |NULL |NULL |NULL | NULL | NULL | 2012-02-02 Liczba kolumn będzie równa liczbie wszystkich typów danych (około 30?). Kolumna DataType jest flagą typu int, która jest używana dla wywołującego - mówi mu, z której kolumny ma pobrać wartość. Każdy wiersz jest w rzeczywistości właściwością jakiegoś obiektu w innej tabeli. Zestaw wierszy tworzy zestaw właściwości dla tego obiektu i zazwyczaj SELECT otrzyma cały zestaw.


title: Czy automatyczne instalowanie aktualizacji jest dobrą praktyką w systemach serwerowych/klienckich?

text: Pracuję nad automatycznym systemem aktualizacji dla starszego pakietu oprogramowania serwerowego/klienckiego napisanego w Delphi. Sposób, w jaki to projektuję, jest taki, że serwer klienta (klienta) uruchamia usługę, która... 1. okresowo sprawdza online w poszukiwaniu nowych wersji 2. automatycznie pobiera pliki 3. przechowuje informacje o najnowszych wersjach dla wszystkich komputerów klienckich 4. obsługuje pliki dla komputerów klienckich do aktualizacji Po pobraniu przez tę usługę plików aktualizacji podnosi flagę w bazie danych, ostrzegając wszystkie komputery klienckie o dostępnych aktualizacjach. ALE chodzi o to, że najpierw należy zainstalować serwer. Tak więc administrator zobaczy tę wiadomość i zatwierdzi aktualizację. Jednak administrator musi zaplanować czas na jego instalację. W zaplanowanym czasie serwer zaktualizuje się. Jeśli wszystko się powiedzie, w bazie danych zostanie podniesiona kolejna flaga, aby wszystkie komputery klienckie również się zaktualizowały. Jeśli coś się stanie, przywróci kopię zapasową, która została wykonana przed instalacją. Moje pytanie brzmi... Czy to dobra praktyka? Oczywiście automatyczne aktualizacje to bardzo dobra rzecz... **jeśli zrobione dobrze**. To oprogramowanie jest używane w czasie rzeczywistym w środowiskach detalicznych i hurtowych, więc jeśli coś pójdzie nie tak podczas zaplanowanej instalacji, ludzie mogą przyjść do pracy następnego ranka z uszkodzonym systemem. Chodzi o to, że bez względu na to, jak zautomatyzuję to, administrator nadal musi upewnić się, że wszystko poszło gładko. Dalsze kwestie... 1. Komputery klienckie muszą znać nie tylko informacje o serwerze bazy danych, ale także informacje o serwerze aktualizacji. 2. serwer może znajdować się w innej lokalizacji, która może wymagać konfiguracji zapory 3. zmiany w bazie danych mogą dać nieprzewidziane wyniki, które nie są znane, dopóki nie wydarzy się coś złego 4. komputery klienckie mogą być wyłączone i wymagają aktualizacji po uruchomieniu 5. a lista pełna możliwych scenariuszy, które mogą się nie udać Czy w tej sytuacji czułbyś się komfortowo, tworząc w 100% zautomatyzowany system aktualizacji dla wrażliwego oprogramowania? Ponieważ niektórzy z naszych klientów mają do 50 komputerów klienckich, które muszą zostać zaktualizowane, aby pasowały do bazy danych ich serwera.


title: Pobierz identyfikatory jednostek z dwóch podobnych kolekcji za pomocą jednej metody

text: Mam dwie listy: ogrody zoologiczne List<Integer, ZooEntity>; List<Integer, List<ZooEntity>> groupOfZoos; Te operacje zwrócą kolekcje wartości: Collection<ZooEntity> cz = zoos.values(); Kolekcja<List<ZooEntity>> czList = groupOfZoos.values(); To, co chcę osiągnąć, to uzyskać listę wszystkich identyfikatorów zoo. List<liczba całkowita> zooIds = identyfikatory cz + identyfikatory czList; Oczywiście mogę stworzyć dwie metody, aby zrobić to, co chcę: public List<Integer> getIdsFromFlatList(Collection<ZooEntity> list) { List<Integer> ids = new ArrayList<Integer>(); for (ZooEntity z : lista) { ids.add(z.getId()); } zwracają identyfikatory; } public List<Integer> getIdsFromNestedList(Collection<List<ZooEntity>> list) { List<Integer> ids = new ArrayList<Integer>(); for (List<ZooEntity> zList : lista) { for (ZooEntity z : zList) { ids.add(z.getId()); } } zwracają identyfikatory; } Jak widać te dwie metody są bardzo podobne i oto moje pytanie: Czy dobrze jest stworzyć jedną metodę (na przykład używającą generyków), która będzie pobierać identyfikatory z tych dwóch list (`zoos` i `groupOfZoos`). Jeśli tak, jak to powinno wyglądać? Jeśli nie, jakie jest najlepsze rozwiązanie? Przy okazji. To tylko przykład. Mam bardzo podobny problem w pracy i chcę to zrobić w ładny sposób (nie mogę zmienić encji, mogę zmienić tylko metody `getIds...()`).


title: Czy powinienem przechowywać False jako Null w boolowskim polu bazy danych?

text: Załóżmy, że masz aplikację, która ma pole logiczne w tabeli „Użytkownik” o nazwie „Nieaktywny”. Czy jest coś z natury złego w przechowywaniu wartości false jako null? Jeśli tak, czy możesz wyjaśnić, jakie powinny być wady? Rozmawiałem o tym z kimś kilka miesięcy temu i oboje zgodziliśmy się, że nie powinno to mieć znaczenia, o ile robisz to konsekwentnie w całej aplikacji/bazie danych. Ostatnio ktoś, kogo znam, podkreślał, że należy używać „prawda” „prawda” lub „fałsz”, ale tak naprawdę nie wyjaśnił, dlaczego.


title: Cukier syntaktyczny dotyczący parametrów funkcji

text: Czy istnieją nowoczesne języki programowania, w których nie trzeba określać typów dla każdego parametru w definicji funkcji? Np. procedura P(a, b, c, d: liczba całkowita) vs void P(int a, int b, int c, int d) Czy istnieje dobry powód, dla którego ta druga forma jest tak popularna? Dlaczego więcej języków nie pozwala na jednoczesne określenie typu wszystkich parametrów, tak jak w pierwszym formularzu?


title: Sprawdzanie błędów w paradygmacie aktorskim

text: Mam istniejącą aplikację Scala, którą próbuję zrefaktoryzować, aby używać Akka. Jednym z moich problemów jest zarządzanie sprawdzaniem błędów w aplikacjach aktorskich. Zwykle sprawdzanie błędów odbywa się za pomocą jednego z dwóch mechanizmów: * albo jeden zwraca wartość wskazującą na błąd, taki jak `Option[A]` lub `Failure[A]`, albo * przez użycie wyjątków. Żaden z tych stylów nie wydaje się tu szczególnie przydatny. Z jednej strony komunikaty aktora to zazwyczaj „uruchom i zapomnij”, stąd nie ma wartości zwracanych. [Przy użyciu Futures można mieć wartość zwracaną, ale na pewno nie jest zwyczajem prosić o futures w każdej wiadomości.] Z drugiej strony, przetwarzanie wiadomości zwykle odbywa się w innym wątku, więc nie można złapać wyjątku wynikającego z przetwarzania wiadomości. Można zasymulować pierwszy mechanizm, wysyłając z powrotem komunikaty o błędach lub potwierdzeniach, takie jak class FooActor extends Actor { def receive = { case Foo => ... if (errorCondition) sender ! ErrorMessage } } Ale jeśli trzeba to zrobić dla każdego aktora, staje się to dużo szablonowe i wydaje się, że biedna symulacja rozwijania stosu. > Jaka jest dobra strategia odzyskiwania po błędach w aplikacjach opartych na aktorach?


title: Jaka jest różnica w treści między tezą Chrisa Okasaki z 1996 r. a książką z 1999 r., Czysto funkcjonalne struktury danych?

text: Chcę przeczytać czysto funkcjonalne struktury danych. Bez trudu znalazłem pracę magisterską (która jest dostępna bezpłatnie w formacie PDF), ale widzę, że jest też dostępna książka. Chciałabym więc wiedzieć, jakie są różnice, jeśli w ogóle, między tymi dwiema publikacjami.


title: Algorytm tasowania bez „samomapowania”?

text: Aby losowo przetasować tablicę, bez uprzedzeń w kierunku jakiejkolwiek konkretnej permutacji, istnieje algorytm Knutha Fischera-Yeatsa. W Pythonie: #!/usr/bin/env python import sys z random import randrange def KFYShuffle(items): i = len(items) - 1 while i > 0: j = randrange(i+1) # 0 <= j <= i items[j], items[i] = items[i], items[j] i = i - 1 zwracaj elementy print KFYShuffle(range(int(sys.argv[1]))) Istnieje również algorytm Sattolo , który tworzy losowe cykle. W Pythonie: #!/usr/bin/env python import sys from random import randrange def SattoloShuffle(items): i = len(items) while i > 1: i = i - 1 j = randrange(i) # 0 <= j <= i-1 items[j], items[i] = items[i], items[j] zwraca elementy print SattoloShuffle(range(int(sys.argv[1]))) Piszę właśnie symulację z następującymi specyfikacjami algorytmu tasowania: 1. Algorytm jest bezstronny. Gdyby użyto prawdziwego generatora liczb losowych, żadna permutacja nie byłaby bardziej prawdopodobna niż jakakolwiek inna. 2. Żaden numer nie kończy się na pierwotnym indeksie. Dane wejściowe do przetasowania zawsze będą A[i] = i dla i od 0 do N-1 3. Powstają permutacje, które nie są cyklami, ale nadal spełniają specyfikację 2. Cykle utworzone przez algorytm Sattolo spełniają specyfikację 2, ale nie specyfikacja 1 lub 3. Pracowałem nad stworzeniem algorytmu spełniającego te specyfikacje, to co wymyśliłem było odpowiednikiem algorytmu Sattolo. Czy ktoś ma algorytm na ten problem?


title: to dobre podejście do implementacji wstrzykiwania zależności w aplikacji desktopowej?

text: Chodzi o to, że mam zamiar stworzyć aplikację desktopową (z formularzami Windows .NET) A teraz zastanawiam się, czy naprawdę mądrym wyborem byłoby użycie dowolnego IoC (StructureMap, Ninject, Spring .Net), ja używałem ich wcześniej w aplikacjach internetowych Asp.Net, ale teraz wątpię w to, że praca z formularzami Windows, moje podmioty biznesowe będą się utrzymywać, gdy nawiguję po kartach, w przeciwieństwie do formularzy internetowych lub aplikacji mvc, w których konieczne byłoby wstrzyknięcie moich podmiot gospodarczy dla każdego nowego żądania, które jest wykonywane, mam na myśli to z powodu cyklu życia strony Asp.Net, gdzie jest wykonywana inicjalizacja i instancja kontroli. Może nie rozumiem sensu używania IoC, więc proszę powiedz mi, co twoim zdaniem byłoby lepszym wyborem?


title: Czy mogę WTFPL/CC0 części kodu GPL?

text: Wiem, że nie powinienem spodziewać się tutaj zawiadomienia prawnika, ale porady programistów byłyby dla mnie wystarczająco dobre. Chcę opublikować program, który jest pochodną programu na licencji GPL. Z informacji prawnej GPL rozumiem, że cała praca ma być również licencjonowana na licencji GPL. Teraz wolałbym opublikować swoją pracę na bardziej liberalnej licencji — mianowicie nie dbam o atrybucję. Wydaje mi się, że na przykład licencje CC0 lub WTFPL nie wymagają rozpatrywania utworu jako całości, prawda? Ponieważ są one zgodne z GPL, w zasadzie mógłbym po prostu powiedzieć coś takiego (oprócz informacji o GPL): > Ta praca jest GPL jako pochodna pracy foobara. Ponadto modyfikacje > w stosunku do oryginalnego foobar to WTFPL/CC0. Czy to byłaby ważna licencja?


title: Jaki jest prawidłowy sposób obsługi danych wyjściowych debugowania w Javie?

text: Ponieważ moje obecne projekty Java stają się coraz większe i większe, czuję podobnie rosnącą potrzebę wstawiania danych wyjściowych debugowania w kilku punktach mojego kodu. Aby odpowiednio włączyć lub wyłączyć tę funkcję, w zależności od otwarcia lub zamknięcia sesji testowych, zwykle umieszczam `private static final boolean DEBUG = false` na początku zajęć, które sprawdzają moje testy i używam go w ten sposób w trywialny sposób ( na przykład): public MojaKlasa { private static final boolean DEBUG = false; ... jakiś kod ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } i tym podobne. Ale to mnie nie zachwyca, ponieważ oczywiście działa, ale może być zbyt wiele klas, w których można ustawić DEBUG na wartość true, jeśli nie patrzysz tylko na kilka z nich. I odwrotnie, ja (jak - myślę - wielu innych) nie chciałbym przełączyć całej aplikacji w tryb debugowania, ponieważ ilość wysyłanego tekstu może być przytłaczająca. Czy istnieje więc poprawny sposób na rozwiązanie takiej sytuacji pod względem architektonicznym, czy też najbardziej poprawnym sposobem jest użycie elementu klasy DEBUG?


title: Lepsze rozwiązanie niż prosta metoda fabryczna, gdy konkretne implementacje mają różne atrybuty

text: abstract class Animal { function eat() {..} function sleep() {..} function isSmart() } class Dog extends Animal { public $blnCanBark; function isSmart() { return $this->blnCanBark; } } class Kot extends Animal { public $blnCanJumpHigh; function isSmart() { return $this->blnCanJumpHigh; } } .. i tak dalej do 10-20 zwierząt. Teraz stworzyłem fabrykę za pomocą prostej metody fabryki i spróbowałem utworzyć instancje w następujący sposób: class AnimalFactory { public static function create($strName) { switch($strName) { case 'Dog': return new Dog(); case 'Cat': zwróć nowe Cat(); domyślnie: przerwa; } } } Problem polega na tym, że nie mogę ustawić określonych atrybutów, takich jak blnCanBark, blnCanJumpHigh w efektywny sposób. Mogę wysłać je wszystkie jako dodatkowe parametry do stworzenia, ale nie będzie to skalowane do więcej niż kilku klas. Nie mogę też złamać dziedziczenia, ponieważ wiele podstawowych funkcji jest takich samych. Czy istnieje lepszy wzór, aby to rozwiązać?


title: Programowanie internetowe a programowanie Hardcore

text: Dlaczego pytania dotyczące HTML/CSS/JS/etc (programowanie internetowe i in.) zbierają więcej poglądów i odpowiedzi niż te dotyczące np. teorii automatów? Czy to oznacza, że ogromna część programistów to tylko „pośredni” programiści? (To nie jest sarkazm, naprawdę mnie to interesuje!)


title: „Zbuduj własną stronę internetową” — tworzenie systemu CMS o niejasnych wymaganiach w krótkim terminie

text: Jestem programistą Java odpowiedzialnym za tworzenie produktu, który pozwala klientom na "budowanie własnej witryny". Poświęciłem dużo czasu na zapoznanie się z Liferay, ponieważ nie mam żadnego doświadczenia w budowaniu CMS-ów i chcę albo z niego korzystać, albo mieć pomysły, jak zbudować przyzwoity system. Rama czasowa jest krótka, wymagania są niejasne, bla bla Czy Liferay to dobra technologia, z którą można pracować, pokazując klientowi (który może mieć bardzo małą wiedzę na temat obsługi komputera) interfejs użytkownika do zbudowania witryny? Chodzi o to, że chcę mieć moc i elastyczność, aby uniknąć krzywej uczenia się przy tworzeniu produktu podobnego do CMS, ale nie chcę tracić czasu na naukę nowej technologii tylko po to, aby znaleźć jej nadmiar lub nie mogę zrobić tego prostego - ale rzadko spotykane i niewdrożone - rzeczy, o które jesteśmy proszeni jako funkcje Idealnie chciałbym zapewnić wiele interfejsów internetowych do podstawowego API w celu tworzenia witryn - jeden, który jest bardzo wydajny, a drugi, który jest rozwodniony i łatwy w użyciu .


title: Czy C lub C++ są jedynymi możliwymi językami dla GC?

text: ### Wprowadzenie Właśnie skończyłem pisać kompilator do kompilacji języka funkcjonalnego na JVM jako projekt edukacyjny. Jednakże, ponieważ robię to tylko po to, aby się uczyć, pomyślałem, że może być interesujące napisanie dla niego natywnego backendu i RTS-a. Ponieważ planowałem, jak ten nowy backend będzie wyglądał, jedynym punktem, na który natykam się, jest odśmiecacz. Kompilator zaimplementowałem w Haskell. Ale nie mam ochoty pisać KG w Haskell, ponieważ, choć może to możliwe, byłoby to do bani. ### Pytanie Przyjrzałem się kilku garbage collectorom FOSS przed opublikowaniem i większość z nich została zaimplementowana w starym, dobrym ANSI C. Czy jest to nadal najbardziej akceptowany wybór do pisania GC w dzisiejszych czasach? Widziałem, że ta strona ma tendencję do marszczenia na pytania z wieloma odpowiedziami, więc mam nadzieję, że to uczyni to bardziej konkretnym: Jeśli jakiś startup pisał dzisiaj profesjonalną klasę gc, czy jedynym realnym wyborem dla nich jest C lub C++? To moje pierwsze pytanie, więc proszę o komentarz i daj mi znać, czy to pytanie nie jest odpowiednie dla programistów.


title: Ponowne użycie i abstrakcja kodu w FP vs OOP

text: Powiedziano mi, że ponowne użycie i abstrakcja kodu w OOP jest o wiele trudniejsze do wykonania niż w FP, i że wszystkie twierdzenia dotyczące zorientowania obiektowego (z braku lepszego terminu) są świetne w ponownym użyciu kodu była jawnymi kłamstwami Więc zastanawiałem się, czy ktoś tutaj mógłby mi powiedzieć, dlaczego tak jest, i może pokazać mi jakiś kod, aby poprzeć te twierdzenia, nie mówię, że wam nie wierzę Programiści funkcjonalni, po prostu zostałem „zindoktrynowany”, aby myśleć zorientowanym na obiekt, a zatem nie potrafi (jeszcze) myśleć na tyle funkcjonalnie, by sam to zobaczyć Cytując Jimmy’ego Hoffę (z odpowiedzi na jedno z moich poprzednich pytań): > Ciasto to kłamstwo, ponowne użycie kodu w OO jest znacznie trudniejsze niż w FP. W przypadku > wszystkiego, co przez OO twierdziło, że ponownie wykorzystuje się kod na przestrzeni lat, widziałem, jak następował > przez minimum razy. (możesz po prostu powiedzieć, że robię to źle, > jestem zadowolony z tego, jak dobrze piszę kod OO, ponieważ musiałem projektować i > utrzymywać systemy OO przez lata, znam jakość moich własnych wyników) Ten cytat jest na podstawie mojego pytania, chcę sprawdzić, czy jest coś z roszczeniem, czy nie


title: Tworzenie oprogramowania w oparciu o implementację referencyjną

text: Powiedzmy, że mam bibliotekę "A2" jako zależność w projekcie. Biblioteka "A2" wywodzi się z biblioteki "A1" (A2 jest rozwidleniem A1 z pewnymi modyfikacjami oryginalnego kodu źródłowego), w której ktoś dokonał kilku zmian w kodzie źródłowym biblioteki "A1". Powiedzmy, że jest nowa wersja „A1”. Chcę użyć nowej wersji, ale bez żadnych modyfikacji kodu źródłowego. Zamierzam określić, jakie zmiany zostały wprowadzone w oryginalnej bibliotece podczas wyprowadzania z niej biblioteki „A2” i udekorować najnowszą wersję biblioteki tymi zmianami. Czy to dobre podejście do rozwiązania tego problemu? jeśli nie, czy ktoś może zasugerować najlepsze podejście do rozwiązania tego rodzaju problemów?


title: Ewolucja API Win32

text: Czy interfejs API Windows 32 zmienił się z biegiem czasu? Czy książka Charlesa Petzolda „Programming Windows, 5th Edition” z 1998 roku nadal zawiera istotne informacje, czy też większość z nich jest przestarzała/nieaktualna? Jakie są wybitne przykłady ostatnich dodatków do API Windows 32 (jeśli są)?


title: Czy używasz i->0 dla pętli wstecznych?

text: Niektórzy piszą dla (int i=N; i-->0; ) doCoś(i); zamiast for (int i=N-1; i>=0; --i) doCoś(i); dla pętli wstecznych. `--> "operator"`1 wygląda na pierwszy rzut oka bardzo zagmatwany, ale jest trywialny: `i-->0` po prostu analizuje jako `(i--)>0`, a gdy już go zrozumiesz, zobaczysz to natychmiast. Główną wadą jest dziwny wygląd. Zaletą jest to, że zawsze będziesz miał rację (w przeciwieństwie do bardziej gadatliwej wersji oferującej możliwość zapomnienia czegoś, co naprawdę mi się kilka razy zdarzyło). _Co myślisz o używaniu `--> "operator"`?_ * * * 1Pierwszy raz zobaczyłem ten śmieszny termin w komentarzu do tego pytania.


title: Gdzie umieścić kod „pytanie świata”, kiedy oddzielamy obliczenia od skutków ubocznych?

text: Zgodnie z zasadą Command-Query Separation oraz Thinking in Data i DDD with Clojure należy oddzielić efekty uboczne (modyfikację świata) od obliczeń i decyzji, aby łatwiej było zrozumieć i przetestować obie części. Pozostawia to bez odpowiedzi pytanie: gdzie w stosunku do granicy umieścić „pytanie świata”? Z jednej strony żądanie danych z systemów zewnętrznych (takich jak bazy danych, interfejsy API usług ekstensywnych itp.) nie jest referencyjnie przejrzyste, a zatem nie powinno łączyć się z czystym kodem obliczeniowym i decyzyjnym. Z drugiej strony jest problematyczne, a może niemożliwe, oddzielenie ich od części obliczeniowej i przekazanie jej jako argumentu, ponieważ możemy nie wiedzieć z góry, o jakie dane możemy potrzebować.


title: Gdzie mogę opublikować program?

text: Skończyłem projektować małą aplikację dla Pandory i nie jestem pewien, jak mogę ją wydobyć i udostępnić wszystkim. Co powinienem zrobić, aby pomóc w reklamowaniu go publicznie i umożliwić innym osobom korzystanie z niego? W tej chwili jest darmowy i mam nadzieję, że tak pozostanie, więc nie chcę wydawać pieniędzy, aby go rozdawać. Właściwie zaprojektowałem tę aplikację tylko do użytku osobistego, ale hej, dlaczego mam być jedynym, który z niej korzysta?


title: O sortowaniu przez wstawianie, a zwłaszcza o tym, dlaczego mówi się, że kopiowanie jest znacznie szybsze niż zamiana?

text: From Lafore's "Data Structures and Algorithms in Java": (o sortowaniu przez wstawianie (które wykorzystuje kopiowanie + przesunięcie zamiast zamiany (używane w sortowaniu bąbelkowym i selekcji))) > Jednak kopia nie jest tak czasochłonna jak zamiana, więc dla danych losowych ten > algorytm działa dwa razy szybciej niż sortowanie bąbelkowe i szybciej niż > sortowanie przez wybór. Również autor nie wspomina jak czasochłonna jest zmiana. Z mojej kopii POV jest najprostsza operacja przypisania wskaźnika. Podczas gdy swap to 3x operacje przypisania wskaźnika. Co nie zajmuje dużo czasu. Również przesunięcie elementów N jest operacjami przypisania wskaźnika Nx. Proszę popraw mnie jeżeli się mylę. Proszę wyjaśnić, dlaczego to, co mówi autor, jest prawdą? Nie rozumiem.


title: Ścieżka kariery na stażu licencjackim

text: Jestem studentką CS, która aktualnie poszukuje stanowisk stażowych, które są ważne dla mojej przyszłej kariery. Jestem pasjonatem projektowania i tworzenia stron internetowych i tak naprawdę uważam, że moja nisza jest w świecie programowania. Ostatnio dostałem oferty między dwiema firmami - pierwszą, w firmie offshore jako web developer, gdzie mam uczyć się C# i AJAX (wraz z podstawami: HTML, CSS, JS/JQuery, PHP, MySQL) i drugą jeden specjalizuje się w tworzeniu oprogramowania Java i Agile. Jestem lepszy w PHP niż w Javie. Oczywiste jest, że wybrałabym tę pierwszą, ale nadal jestem na płocie, ponieważ ta druga jest znana z tego, że daje solidne szkolenie i podstawy zarówno stażystom, jak i pracownikom, podczas gdy ta pierwsza jeszcze bardziej wystawi mnie na to, co chcę robić. Który powinienem wybrać – **solidne szkolenie w zakresie tworzenia oprogramowania i aplikacji** czy **aplikacja z prawdziwego życia do pracy programisty stron internetowych** na mój staż? **[AKTUALIZACJA]** Od 25 maja 2012 Dla wszystkich, przyszły tydzień będzie ostatnim moim stażem. Poszedłem z firmą Java/Agile i ta decyzja bardzo zmieniła moją ścieżkę kariery i ogólnie życie. Strach przed Javą już minął, zamiast tego pokochałem język, a wszystko podczas stażu tylko ugruntowało moją pasję do bycia web developerem. Dziękuję wam wszystkim!


title: Czy EF oznacza, że już nigdy nie będziesz musiał używać SQL lub projektować tabel bazy danych?

text: Czy Entity Framework oznacza, że nigdy nie będziesz musiał ponownie używać SQL lub projektować tabel bazy danych? Czy to oznacza „wytrwałość ignorancja”? Jestem nowy w EF i ORM w ogóle i chciałbym zrozumieć, ile z tego jest szumem, a ile rzeczywistością.


title: Jak mogę zdublować repozytorium łącza SVN do zwykłego folderu sieciowego?

text: Ja i mały zespół inżynierów rozważamy użycie SVN do przechowywania naszych schematów elektrycznych i bibliotek części; obecnie mamy tylko folder sieciowy, w którym umieszczamy wszystkie nasze pliki. Nasza firma posiada również osobny serwer SVN, do którego mamy dostęp. Zastanawiałem się, czy istnieje jakiś sposób, w jaki moglibyśmy użyć repozytorium SVN do przechowywania naszych plików i schematów, ale w jakiś sposób repozytorium SVN trunkingu zostanie automatycznie zdublowane w folderze sieciowym innym niż SVN, tak jak obecnie. Powodem, dla którego o to proszę jest to, że czasami ludzie nietechniczni potrzebują dostępu do naszych danych schematycznych, a my nie mamy wystarczających zasobów, aby nauczyć wszystkich, jak korzystać z SVN. W ten sposób moglibyśmy mieć wszystko pod kontrolą wersji, a także umożliwić innym osobom dalszy dostęp do danych w taki sam sposób, w jaki są przyzwyczajeni.


title: Jak definiujesz projekt dla web developera?

text: Jestem przede wszystkim projektantem stron internetowych i bardzo początkującym web developerem. Załóżmy, że mam kompleksową aplikację internetową, którą chcę opracować za pośrednictwem freelancera na Odesk.com. Jaki jest najlepszy sposób, aby skutecznie komunikować cały projekt, cele i wymagania? Modele szkieletowe, arkusze specyfikacji? Wszelkie przykłady/szablony na ten temat byłyby bardzo mile widziane.


title: Czy ma sens unikanie frameworka podczas budowania dużej aplikacji internetowej z PHP?

text: Będąc od kilku lat programistą aplikacji internetowych PHP, miałem swój udział w MVC i frameworkach. Na początku myślałem, że to najlepsza rzecz od czasu krojonego chleba; wszystko wydawało się bardzo łatwe do wdrożenia. Teraz jednak wydaje się, że im bardziej złożona aplikacja staje się, tym więcej kłopotów wprowadza framework, więc muszę opracować obejścia, aby je obejść. Takie obejścia są zwykle dość zniechęcające i skomplikowane, ponieważ muszę zagłębić się w kod rdzenia frameworka i wprowadzić zmiany, aby zachowywał się tak, jak chcę. Na przykład w jednym z moich projektów, w którym używam Slim(C)+Idiorm(M)+Twig(V) (który uważam za bardzo elastyczny), muszę stworzyć niestandardową funkcję tylko po to, aby wyświetlać dynamiczne dane w szablonach nadrzędnych; bez frameworka mógłbym po prostu wykonać mysql_query() w dołączonym pliku. Okej, frameworki są fajne, jeśli tworzę prostą stronę profilu firmy; Mogę po prostu ubić trochę kodu w jedną noc i zwykle są gotowe do rana, a ilość dobrych praktyk kodowania i wzorców projektowych, których się od nich nauczyłem, jest bardzo cenna. Ale tak naprawdę, w przypadku złożonej aplikacji internetowej, takiej jak wszechstronny internetowy system zarządzania szkołą, frameworki zwykle przeszkadzają w moim procesie biznesowym, jak w powyższym przykładzie. Więc moje pytanie brzmi: czy mogę po prostu wrócić do podstaw i użyć standardowego kodu PHP i bibliotek do wykonania mojego następnego projektu, w którym może istnieć miliard frameworków i bibliotek, pod warunkiem, że potrafię wystarczająco stosować dobre praktyki kodowania i podążać za rozsądnymi wzorcami projektowymi jak MVC? Mój zespół programistów jest dość mały: tylko 2 programistów i 1 projektant. Inny programista zgadza się z moimi powyższymi przemyśleniami.


title: Jak mogę uniknąć używania własnego imienia i nazwiska w identyfikatorach, pakietach lub przestrzeniach nazw projektów open source, które tworzę?

text: Dużo się rozwijam w swoim czasie. Wszystkie te projekty, nad którymi pracuję, służą wyłącznie do zabawy i nauki (jak na razie). Zwykle robię programowanie w Javie za pomocą Maven, ale jestem również znany z tego, że bawię się w .NET i Pythonie. Wszystkie projekty, nad którymi pracuję, korzystają z licencji open source, chociaż większość z nich nie znajduje się w żadnych publicznych repozytoriach kodu. Programowanie Java/Maven wymaga ode mnie używania unikalnego `groupId` (np. „com.mydomain”) i unikalnej struktury `package` (katalog), zwykle zawierającej `groupId`, podczas gdy rozwój .NET zachęca do unikalnych `przestrzeni nazw`, w których używaj konwencji podobnych do koncepcji `pakietu` Javy. Aby zapewnić niepowtarzalność, zwykle używam jednej z moich nazw domen z odwróconymi częściami (np. „ca.jessewebb”); Uważam, że jest to bardzo powszechna praktyka. Jestem w początkowej fazie tworzenia nowego, open source'owego projektu Java/Maven (nazwijmy go "newproj") i chciałbym go umieścić na GitHub. Moja nazwa użytkownika na GitHub to „jessewebb”, więc otrzymam adres URL taki jak: `https://github.com/jessewebb/newproj`. Nie chcę zawracać sobie głowy rejestracją nazwy domeny "newproj.com", więc zdecydowałem się użyć "ca.jessewebb" i "ca.jessewebb.newproj" odpowiednio jako `groupId` i `package`. Przyszło mi do głowy, że obecność mojej osobistej tożsamości w kodzie i jako część domu projektu (w adresie URL GitHub) prawdopodobnie spowoduje, że potencjalny współpracownik zastanowi się dwa razy nad zaangażowaniem się w mój projekt. To jest problem, nie chcę, żeby to był _mój_ projekt. Wolałbym, gdybym mógł zamiast tego przekazać wiadomość, że nie jestem właścicielem projektu. Teraz, szczerze mówiąc, to naprawdę nie jest taka wielka sprawa, ponieważ wątpię, aby moje projekty przyciągnęły duże zaangażowanie społeczności, ale uważam to również za jeszcze **więcej** powód, aby uniknąć jakiejkolwiek możliwości odstraszenia potencjalnych współtwórcy. Na przykład kilka lat temu stworzyłem projekt Google Code (nazwijmy go "oldproj"). Kiedy tworzyłem projekt, wiedziałem, że będę hostować go w Google Code, więc użyłem `groupId` i nazwy pakietu „com.googlecode.oldproj”, co jest odwrotnością domyślnej nazwy domeny, którą Google Code zapewnia każdemu nowemu projekt. Okazało się to niezbyt świetnym pomysłem; mniej więcej rok później przeniosłem kod do innego repozytorium i musiałem zmienić nazwy tych identyfikatorów (no cóż, _nie musiałem_, ale...). W tamtym czasie nie posiadałem żadnych nazw domen i ostatecznie kupiłem nazwę domeny „oldproj.com” i z niej korzystałem. Podobało mi się to, ponieważ nadało projektowi własną tożsamość i nie wszędzie stemplowałem swoje imię i nazwisko w kodzie. Równie łatwo mogłem zarejestrować nazwę domeny „jessewebb.ca” i użyć „ca.jessewebb.oldproj” jako nazwy pakietu, ale nie zrobiłem tego, ponieważ miałem wtedy te same obawy. Więc moje pytanie brzmi... Jak mogę uniknąć używania własnych nazw (domen) podczas tworzenia projektów open source, zachowując jednocześnie unikalność pakietów/przestrzeni nazw? W miarę jak projekty nabierają większego rozmachu, sensowne jest rejestrowanie nazw domen, ale wydaje się to głupie i marnowanie pieniędzy, aby zrobić to wcześniej. Zdaję sobie sprawę, że tak naprawdę nie muszę być **właścicielem** nazwy domeny, aby użyć jej w kodzie, ale to jest złe i może prowadzić do tego, że w międzyczasie squatter wyrwie ją spod Ciebie. Co robią inni ludzie z tym dylematem? Czy istnieją przykłady popularnych (szeroko używanych, dużej społeczności itp.) projektów open source, które zawierają tożsamość oryginalnego dewelopera jako część własnego identyfikatora (identyfikatorów)?


title: Frameworki do nauki bez nauki języków

text: Czytałem na frameworkach GUI, w tym WPF, GTK i Cocoa (UIKit). Tak naprawdę nie robię niczego związanego z Windows (jestem facetem od Maców i Linuksa) lub .NET, ale chciałbym móc łączyć GUI dla różnych systemów operacyjnych. Jesteśmy teraz w godnej pozazdroszczenia pozycji, jeśli chodzi o języki skryptowe wysokiego poziomu, które współpracują ze wszystkimi głównymi zestawami narzędzi GUI. Jeśli zajmujesz się programowaniem GUI dla Linuksa, możesz użyć GTK w C, ale dlaczego nie po prostu użyć PyGTK (lub PyQt). Podobnie dla Javy można użyć JRuby. Na Maca jest MacRuby. A w .NET jest IronRuby. To wszystko jest w porządku i dobrze, a jeśli budujesz poważny projekt, możesz napotkać kompromisy, gdy zdecydujesz, czy, powiedzmy, zbudować aplikację WPF w C# lub w IronRuby, lub czy zamierzasz używać PyGTK, czy nie . Moje subiektywne pytanie brzmi: co z nauką tych frameworków? Czy istnieją silne powody, dla których należy lub nie należy uczyć się czegoś takiego jak WPF lub Cocoa w znanym sobie języku, zamiast uczyć się również nowego języka? Nie mówię, że nigdy nie powinieneś uczyć się języka. Jeśli budujesz aplikacje Windows i nie znasz C#, może to stanowić pewien problem. Ale czy uważasz, że możesz najpierw nauczyć się frameworka? Jest to pytanie zarówno ogólne, jak i konkretne. Użyłem kilku klas Cocoa z Ruby i Pythona, używając takich rzeczy jak PyObjC i zawsze wydaje się, że występuje niedopasowanie impedancji z powodu sposobu, w jaki budowane są biblioteki Objective C. Mile widziane doświadczenia i mocne opinie!


title: Jak ustalić, co zgłasza wyjątek

text: Za każdym razem, gdy napotykam awarie, dokładny typ wyjątku zwykle daje wystarczającą ilość informacji, aby łatwo znaleźć winowajcę. **FileNotFoundException** prawie nie wystąpi podczas korzystania z gniazd. Niedawno natknąłem się na **SystemNotSupportedException** i nie miałem pojęcia, skąd może pochodzić, nadal nie. Ponadto nie mogę go odtworzyć, więc zostałem zaprojektowany, aby znaleźć go dzięki pracy detektywa, a nie tylko uruchamianiu debugera i zawieszaniu tego. Sprawdziłem artykuł MSDN na temat tego wyjątku, mając nadzieję, że może znaleźć coś w stylu „ten typ wyjątku jest zwykle zgłaszany w związku z operacjami na plikach / matematyka całkowita / jazda na dinozaurach do Taco Bell / you-get-it”, bezskutecznie, ponieważ MSDN kojarzy się tylko w drugą stronę, co jest zwykle bardziej przydatne. Oto moje pytanie: czy istnieje tabela przeglądowa lub coś, co pozwala mi określić, jakie operacje mogą spowodować określony wyjątek?


title: Różnica między inżynierem jakości a testerem

text: W firmie programistycznej istnieją trzy rodzaje prac 1. Programista 2. Inżynier jakości oprogramowania 3. Tester oprogramowania Rola programisty jest dość jasna, ale jaka jest różnica między pracą wykonywaną przez inżyniera jakości oprogramowania a testera oprogramowania? To dla mnie bardzo dziwne, dlaczego jest tak duża różnica w poziomie wynagrodzenia Inżyniera Jakości Oprogramowania i Testera Oprogramowania.


title: Jak przechowywać / nie przechowywać haseł

text: Tworzę witrynę internetową, która pozwoli użytkownikom agregować w jednym miejscu informacje przechowywane w ich profilach internetowych („kanały danych”). Zastanawiam się - jaki jest akceptowany (z punktu widzenia bezpieczeństwa) sposób przechowywania informacji o nazwie użytkownika / haśle w mojej bazie danych? Normalnie wyprowadziłbym z hasła wartość salted-hash i zapisałbym ją, ale to oczywiście nie zadziałałoby w tym przypadku, ponieważ witryny z „kanałami danych” potrzebowałyby rzeczywistego hasła. Przechowywanie danych uwierzytelniających w postaci zwykłego tekstu nie wchodzi w grę, ponieważ stanowiłoby to ogromne zagrożenie bezpieczeństwa. Nieprzechowywanie haseł w bazie danych, proszenie użytkowników o wpisywanie ich na początku każdej sesji, a następnie trzymanie ich w pamięci w sesji również nie wydaje się realną opcją, ponieważ wejście do te same hasła wielokrotnie. Na razie wydaje się, że jedyną opcją jest szyfrowanie haseł jakoś, ale nie wiem, jakie są najlepsze wzorce projektowe dla takiej opcji. A może jest sposób na poradzenie sobie z tym problemem, nawet się nie zastanawiałem... Co poleciłbyś?


title: Jaka jest złożoność obliczeniowa metody Groovy unique()?

text: **Pytanie 1** Jaka jest złożoność obliczeniowa metody Groovy `unique()`? **Pytanie 2** Jak mogłem to rozgryźć sam? Metoda `unique()` jest zdefiniowana w klasie `DefaultGroovyMethods`. Kod źródłowy można znaleźć tutaj: org.codehaus.groovy.runtime.DefaultGroovyMethods. Czy możesz wskazać mi fragment kodu, który ilustruje odpowiedź na pytanie 1?


title: Refaktoryzacja z Pythona do Rubiego z licencją BSD v3?

text: Istnieje projekt napisany w Pythonie, który działa świetnie i jest na licencji BSDv3. Chciałem użyć go jako szablonu bazowego dla projektu ruby, zamiast zaczynać od zera. Refaktorowałbym (konwertował) kod z Pythona na Ruby, tak jakby autor napisał klejnot rubinowy wraz ze swoją biblioteką Pythona. Moje pytanie brzmi, jaki należy przyznać autorowi biblioteki Pythona? Wystarczy wspomnieć, że klejnot jest oparty na bibliotece Pythona lub bardziej rozbudowany?


title: Czy warto się uczyć apletów Java?

text: Jestem na dobrej drodze do nauki Javy. Uważam, że większość tekstów kładzie nacisk na aplety Java. Pomyliłem się co do znaczenia. Czy jest to coś szeroko stosowanego? Czy muszę poświęcać temu więcej czasu?


title: Sprawdzanie równości parametru żądania

text: Mam tabelę kodów, która przechowuje pary nazwa-wartość i nazwę grupy. W tym przykładzie pozwólcie, że zademonstruję z dwoma wierszami, że każdy wiersz będzie reprezentował jedną wartość w tym samym menu rozwijanym. Group Name = 'Drop_Down_1' Name = 'Wartość 1' Value = 'To jest moja wartość' Group Name = 'Drop_Down_1' Name = 'Wartość 2' Value = 'To jest moja wartość 2' Ta wartość byłaby poza listą rozwijaną na stronie internetowej. Po wybraniu i przesłaniu kod zaplecza otrzyma wartość „To jest moja wartość”, jeśli ta wartość z menu została wybrana. Teraz w zależności od wyboru rozwijanego chcę coś zrobić. Więc teraz muszę porównać ciąg w poleceniu żądania z czymś. To czego NIE chcę robić to coś takiego: if(requestParam.equals('To jest moja wartość') { zrób coś } else if(requestParam.equals('To jest moja wartość 2') { zrób coś innego } Teraz Mogę wysłać zapytanie do bazy danych i uzyskać odpowiednie kody z powrotem i sprawdzić je pod kątem równości.Ale skąd mam wiedzieć, jakie działanie należy wykonać?


title: Co trzeba by zrobić, aby programiści zapłacili za coś, co jest już swobodnie dostępne jako open source?

text: Na przykład wiem, że istnieją wersje open-source czytników/napisów IL, takie jak Cecil i CCI firmy Microsoft (źródło zamknięte). Co trzeba zrobić, aby programiści zapłacili za coś, co jest już dostępne za darmo? Zawsze chciałem założyć własnego ISV, pisząc własne narzędzia i sprzedając je na wolnym rynku, ale trudno jest ocenić popyt, biorąc pod uwagę, że darmowe alternatywy już istnieją. Czy ktoś jeszcze ma jakieś udane doświadczenia ze sprzedażą komercyjnej wersji produktu typu open source?


title: Jak reprezentowałbyś obiekt, który może być wielu typów, przechowując go jako dokument w MongoDB?

text: Nieco w związku z tym pytaniem powiem, że mam kategorię przedmiotu, która w zależności od tego, jaki rodzaj przedmiotu posiadam, ma różne ograniczenia co do tego, co zawiera. (jeśli możesz przeredagować poprzednie zdanie, aby było bardziej sensowne, doceniłbym to) Na przykład var SomeSchema = new Schema({ _id: ObjectID, [... duża liczba wspólnych pól ...] type: // Restricted jakoś do składowych stałej tablicy danych: //w zależności od typu może to być ograniczone - czasem liczba całkowita, czasem tablica, itd... }); Jaka jest idiosynkratyczna metoda definiowania tego typu schematu? Czy właściwe jest zdefiniowanie pojedynczego schematu i obsługi typów wewnątrz jego członków, czy też lepiej jest z oddzielnym schematem dla każdego typu?


title: Jak symulować terminal bankomatu w punkcie sprzedaży?

text: Ostatnio zacząłem te same projekty, aby poprawić swoje umiejętności programistyczne, więc spróbowałem stworzyć oprogramowanie dla punktów sprzedaży. Zacząłem montować wymagany sprzęt (drukarka biletów, skaner kodów kreskowych…) do osobistego laboratorium, ale nie mogę znaleźć sposobu na wdrożenie procesu płatności za pomocą terminala bankomatu. Czy istnieje możliwość zasymulowania procesu płatności za pomocą sprzętu?


title: O konwencjach nazewnictwa: czy poleciłbyś krótkie nazwy, czy dłuższe, bardziej opisowe nazwy?

text: Kolega konsekwentnie prosi mnie o skrócenie identyfikatorów (głównie nazw klas). Używamy CamelCase i rzadko, jeśli w ogóle, używamy 4 słów w nazwie, ale często dostaję prośby o skrócenie z 3 do 2 lub nawet z 2 do 1. Preferuję najbardziej opisową nazwę i jestem w stanie znaleźć taką o akceptowalnej długości, 95% czasu to 3 słowa lub mniej. **Spróbowałbyś zejść krócej?** Ostatnio przyszło mi do głowy, że może nie ma autouzupełniania, ale nie zapytałbym go o to, bo nie chciałbym go urazić. Jest facetem od vi/vim, który sprawił, że pomyślałem...


title: Czy detektory zdarzeń powinny mieć słabe referencje?

text: Zazwyczaj detektory zdarzeń nie powinny przeżyć obiektu, który je zarejestrował. Czy to oznacza, że detektory zdarzeń powinny być domyślnie utrzymywane przez słabe referencje (przechowywane w słabych kolekcjach przez detektory obiektów, w których są zarejestrowane)? Czy istnieją uzasadnione przypadki, w których słuchacz powinien przeżyć swojego twórcę? A może taka sytuacja jest błędem i nie należy na to pozwalać?


title: Radzenie sobie z długiem technicznym i zbliżającym się uwolnieniem

text: Załóżmy, że masz projekt, który jest poplątanym bałaganem. Brak struktury kodu i złamanie jednego obszaru psuje całą rzecz. Naprawienie jednego obszaru łamie inny obszar. Najbliżej tego, co możesz naprawić, jest napisanie kodu, który jest prawie jak ponowne wykonanie całej rzeczy. Ale potem **wydanie w przyszłym tygodniu**. Oto kilka faktów, które faktycznie pogarszają sytuację: * Testy są bardzo minimalne. Sprawia, że trudno jest znaleźć złamanie. * Kod nie ma struktury. Wyobraź sobie, że jedna aplikacja ma wszystko _w jednym pliku_. * Brak dokumentacji. Bardzo trudne do zreplikowania żądań serwera, gdy nie ma dokumentacji na temat parametrów do wysłania i czego się spodziewać. Co należy zrobić, aby zaradzić tej sytuacji? Najlepszą rzeczą, jaką można zrobić, to przedłużyć wydanie projektu, ale to nie ja jestem tym, który dyktuje sytuację. Skomentowałem jednak tę kwestię.


title: Jak śledzić funkcje w dużym projekcie?

text: Obecnie pracuję nad własnym projektem od nieco ponad 2 miesięcy (niewiele mam czasu). Celem tego projektu jest możliwość zdalnej aktualizacji wszystkich moich systemów Linux z jednej aplikacji graficznej. Problem, który mam, polega na tym, że buduję dwie aplikacje: klienta i serwer. Wraz ze wzrostem rozmiarów obu programów coraz trudniej mi jest zarządzać tym, co należy zrobić. Podczas kodowania staram się myśleć o rzeczach, które trzeba zrobić, a po dodaniu kolejnego programu zaczyna mi kręcić się w głowie. **Czy jest jakaś technika, dzięki której mogę śledzić funkcje: jeszcze nie zostały zaimplementowane i są obecnie rozwijane w dużym projekcie?**


title: Dodać javascript do wszystkich stron (dla buforowania) czy tylko do stron, które wymagają skryptów (dla mniejszego rozmiaru strony)?

text: Używam bitów javascript na mojej stronie do galerii obrazów, płynnego przewijania itp. Te skrypty nie są używane na każdej stronie (na przykład nie każda strona ma galerię obrazów). Jednak skrypty nie są zbyt duże i większość użytkowników będzie musiała je w końcu pobrać (galeria obrazów jest bardzo ważna dla strony). Teraz jakie byłyby plusy i minusy tych dwóch (wzajemnie wykluczających się) sposobów włączania skryptów: * dodaj je do każdej strony (aby wszystkie były buforowane po jednym wyświetleniu strony) * dodaj je tylko na tych stronach, na których są używane (więc są buforowane tylko wtedy, gdy są potrzebne, ale niektóre strony potrwają trochę dłużej)? Nie pytam o opinie, chciałbym tylko wiedzieć, czy są jakieś plusy i minusy, które przeoczyłem.


title: Po co wprowadzać zmiany do kontroli wersji co trzy minuty?

text: Częstotliwość commitów zależy od dwóch czynników: * samego programisty: niektórzy programiści mają tendencję do częstego zatwierdzania, inni mogą spędzać godziny bez commitowania, * bieżąca praca: ten sam programista może być zmuszony do bardzo częstego zatwierdzania podczas wykonywania ryzykownych operacji refaktoryzacji lub podobnych zadań i dość rzadko podczas pracy nad innymi częściami bazy kodu. Z tego, co zaobserwowałem, początkujący mają tendencję do angażowania się średnio jeden lub dwa razy dziennie. Deweloperzy z kilkuletnim doświadczeniem prawdopodobnie angażują się średnio raz na godzinę. Zatwierdzanie co piętnaście minut jest prawdopodobnie najlepszą rzeczą do zrobienia, ale rzadko spotykam się z taką częstotliwością zatwierdzania. **Pytanie:** Zauważyłem w dziennikach Google Closure Library, że prawie co trzy minuty jest on zatwierdzany przez tego samego programistę. Jakie są zalety tak wysokiej częstotliwości? Czy istnieją konsekwencje w sposobie pisania kodu? Czy ma to związek z faktem, że w Google codebase jest kompilowane i testowane na serwerach, więc należy zatwierdzić kod, aby sprawdzić, czy kompiluje się i przechodzi wszystkie testy jednostkowe i integracyjne?


title: Migracja starego projektu Asp.net 1.1 do mvc 3 lub 4

text: musimy przeprowadzić migrację bardzo starego projektu, który ma ponad 500 formularzy internetowych i 400 tabel i jest to w dużej mierze zależne od procedur składowanych, aktualna specyfikacja to: 1. Asp.Net : .NET wersja 1.1 2. język: VB 3. wykorzystuje architekturę dwuwarstwową (UI i biznes (obejmuje również DataAccess)) 4. XML służy do przekazywania danych między interfejsem użytkownika a warstwą Biz 5. W celu uzyskania dostępu do danych używane są zapytania sql i procedury składowane, które pobierają dane jako zbiór danych. 6. Domena związana z finansami. 7. dużo javascript do walidacji Planowana specyfikacja: 1. Asp.net 4.0 z c# 2. MVC 3 lub 4 Teraz moje pytania to 1. Czy jest możliwe zaimplementowanie mvc tylko dla warstwy UI, jeśli to możliwe to jak wykorzystać obecny biznes warstwa? Również nie mamy klasy i właściwości, ponieważ używa xml do przekazywania danych, musimy również użyć tej samej starszej bazy danych. 2. Nie chcemy używać frameworka Entity, ze względu na wydajność, przestarzała baza danych (nieodpowiednio zaprojektowana), wykorzystuje ponad 700 procedur składowanych. 3. jak stworzyć model tj. poziom domeny lub poziom projektu ponieważ moje rozwiązanie zawiera 14 projektów? 4. Czy można zaimplementować wzorzec Repozytorium w osobnej warstwie?


title: Jaki jest najlepszy zestaw narzędzi do tworzenia aplikacji korporacyjnych dla małych i średnich firm?

text: Potrzebujesz darmowego, szybkiego (programistycznego i wykonawczego) i niezawodnego (transakcje i blokowanie) zestawu narzędzi do tworzenia aplikacji korporacyjnych dla małych i średnich firm. Myślę o frameworku aplikacji + framework UI + DB, który pomoże mi w szybszym tworzeniu oprogramowania. Jak wiadomo, oprogramowanie biznesowe wymaga stworzenia wielu podobnych interfejsów użytkownika. Moją ideą jest ...utworzenie nowego formularza z liczbą pól N i podłączenie go do bazy danych dla podstawowych operacji CRUD w ciągu 30min do 1h. Posmakowałem stosu technologii Intersystems Cache z dodanym do tego frameworkiem aplikacji. Szczerze mówiąc...to niesamowite... Szukam czegoś podobnego w opensource. Jakieś sugestie?


title: Lepszy projekt dla ogólnej podwójnie połączonej listy, wokół której planuję tworzyć różne opakowania?

text: Obecnie piszę kod C dla podwójnie połączonej listy (dll), wokół której chcę pisać otoki do implementacji stosu, kolejek itp. Zamiast pisać oddzielne kody dla nich wszystkich. Użyję `void *`, aby umożliwić podwójnie powiązaną listę pracy z dowolnym typem danych. Pomysł jest w zasadzie taki sam, jak ta implementacja stosu za pomocą wskaźników na moim githubie. Mam na myśli 2 różne projekty * Umieszczenie wielkości elementów wraz z danymi konserwacyjnymi. Ułatwiłoby to kodowanie, ale każda instancja biblioteki dll byłaby w stanie używać tylko określonego typu danych. * Umieszczenie rozmiaru elementu w węzłach. To byłoby bardziej ogólne, ale mam obawy, czy takie podejście byłoby łatwiejsze w użyciu? To jest zamieszanie, które chciałem wyjaśnić przed wdrożeniem jakiegokolwiek konkretnego. Jeśli jest jakaś niejasność co do tego, co próbuję zaimplementować, proszę pytaj, a wyjaśnię.


title: Realistyczny czas na naukę nowego frameworka/API

text: Mam swoje pomysły, ale zawsze czuję, że jestem zbyt pesymistyczny. Więc chciałbym usłyszeć więcej opinii. Ile czasu potrzebujesz na rozpoczęcie kodowania przy użyciu nowego frameworka, aby Twój kod był gotowy do produkcji i nie stał się później koszmarem wsparcia dla: Powiedzmy frameworki o dużej skali: ATL/MFC/STL/WTL/.NET/COM/BOOST I frameworki/API na małą skalę: MSXML/Silverlight/ADO/LIBXML/WIN32/OpenGL/DirectX/CUDA Jakie są twoje szacunki dla obu typów, [od;do] dla starszych/młodszych programistów. Wszelkie pomysły dotyczące tego, co może skrócić czas nauki, mówią: `Książka>Dokument API` lub `Poradniki>Książka`


title: Jakim rodzajem testu jest „kontrola spójności”?

text: Niektóre lub wszystkie testy, które piszę i przeprowadzam, sprawdzają spójność, np. zapewnić, że jeśli utworzę nowe konto użytkownika, to utworzone konto faktycznie ma taką samą nazwę, jak nazwa podana podczas rejestracji. A teraz, aby sprawdzić, czy poprawnie zaimplementowałem paginację, przypuszczam, że mogę sprawdzić, czy dla dowolnego danego dużego zestawu wyników, uzyskanie „następnej strony”, czasami powtarzane razy, a nie tylko raz, w końcu doprowadzi do tej samej ostatniej strony, co pobranie ostatniej stronę bezpośrednio (co odbywa się w inny sposób niż przechodzenie przez jedną stronę na raz, przejście bezpośrednio do ostatniej strony wykonanej przy użyciu odwróconej kolejności i uzyskanie pierwszej strony z odwróconej kolejności. W naszych projektach staramy się postępować zgodnie z ale czasami wydaje mi się, że nie jest dokładne, czy test jest testem jednostkowym, czy integracyjnym, podczas gdy w rzeczywistości zarówno testy integracyjne, jak i testy jednostkowe są w większości lub tylko „kontrolami spójności”. Nie widziałem żadnego innego rodzaju testu niż dla spójności (zarówno testy jednostkowe, jak i testy integracyjne wykonują asercje), ale wydaje się, że mockowanie jest używane bardziej w testach integracyjnych niż w testach jednostkowych i niż test jednostkowy jest mniejszy i dla pojedynczego komponentu lub metody, podczas gdy test integracyjny jest „większy”, ale to wciąż nie jest dokładna różnica. Jakim więc rodzajem testu jest sprawdzenie spójności? Czy jest to test jednostkowy czy test integracyjny?


title: Co muszę wiedzieć przed skontaktowaniem się z deweloperem/zespołem deweloperskim?

text: Mam niewielkie doświadczenie w programowaniu stron internetowych. Mam jednak pomysł na stronę internetową, którą chciałbym urzeczywistnić. Miałaby wiele takich samych funkcji, z których korzysta strona taka jak TripAdvisor, ale oczywiście na mniejszą skalę, a jej główną cechą jest system oceny użytkowników. Chociaż idealnie byłoby, gdybym sam nauczył się tego, jak to zrobić, uważam, że byłoby to nierealne, biorąc pod uwagę złożoność i czasochłonność tego. Dlatego moje pytanie brzmi, co będę musiał wiedzieć i zrozumieć, zanim zwrócę się do zespołu tworzącego strony internetowe?, tj. Jakie pytania będą mi zadać, gdy usiądę, aby porozmawiać z nimi o moim pomyśle? Na marginesie, jakie są prawne ograniczenia w tworzeniu strony internetowej, które już zostały zrobione? Istnieje niewielka liczba (2 lub 3) stron internetowych, które zasadniczo robiłbym tak samo, ale moim zdaniem zapewniłbym użytkownikom znacznie więcej przydatnych funkcji w bardziej przyjazny dla użytkownika sposób.


title: Wzorzec projektowy do walidacji danych

text: Jaki byłby najlepszy wzorzec projektowy dla tego problemu: Mam obiekt A. Obiekt A można zarejestrować lub usunąć z bazy danych, w zależności od żądania użytkownika. Walidacja danych odbywa się przed rejestracją lub usunięciem obiektu. Istnieje zestaw reguł, które należy sprawdzić przed zarejestrowaniem obiektu i inny zestaw reguł do usunięcia. Niektóre z tych zasad są wspólne dla obu operacji. Jak dotąd uważam, że wzorzec projektowy Chain of Responsibility pasuje najbardziej, ale mam problemy z jego wdrożeniem.


title: Moje wyzwania programistyczne

text: Uwielbiam programować i nie wyobrażam sobie bez niego życia. Problem polega na tym, że kiedy opracowuję własne, unikalne algorytmy, trudno mi właściwie koordynować swoje myślenie i spędzam więcej niż rozsądny czas próbując zwizualizować rozwiązanie, chociaż zwykle znajduję rozwiązanie. Myślę, że spędzanie tak dużej ilości czasu na „niezbyt twardym” algorytmie pokazuje, że moja strategia myślenia może być zła. Czy doświadczyłeś podobnych problemów? Jak to rozwiązujesz? Czy się mylę? Proszę doradź mi.


title: Zgodność między diagramem klas a diagramem sekwencji

text: Czy „wiadomość” przekazywana między „obiektami” w „Diagramie sekwencji” pasuje do „metod” w „Diagramie klas”?


title: Jak crackerzy określają liczbę iteracji algorytmu haszującego?

text: Czy cracker musi znać liczbę iteracji, których algorytm mieszający używa do obliczania wartości skrótu? Jeśli o tym nie wiedzą, jak to rozgryzają? Ile czasu zajmie zrozumienie tego, niż gdyby nie wiedzieli? Mogę tylko zgadywać, że próbują wielu najpopularniejszych haseł i próbują z różnymi iteracjami, i zobaczą, jaka liczba iteracji zwraca najbardziej poprawne hasła. Czy to w ogóle zadziała?


title: Problem z połączeniem SlidingMenu i ExpandableListView

text: Jak powiedziałem, próbuję połączyć SlidingMenu (https://github.com/jfeinstein10/SlidingMenu) z ExpandableListView, ale mam problem, którego nie wiem, jak naprawić, więc mam nadzieję, że ktoś tutaj może. Obecnie ustawiam układ menu za pomocą funkcji 'setMenu(resId)', która ustawia poprawny układ menu slajdów, ale problem polega na tym, że ustawia tylko układ pliku XML, który po prostu zawiera i nic więcej ( Więc wszystko, co dostaję, to biały ekran). Wszystkie inne dane i ustawienia dla ExpandableListView są ustawiane w moim pliku SlideMainMenu.java, ale to nigdy nie jest wywoływane podczas ustawiania układu XML dla menu slajdów. Jak więc mogę się upewnić, że mój plik .java jest wywoływany, gdy mój plik XML jest zawyżony? Najprawdopodobniej jest to bardzo łatwe, ale w tej chwili po prostu nie mogę tego rozgryźć. Powinienem wspomnieć, że jestem całkiem nowy w Androidzie/Java i uczę się na bieżąco. Funkcja setMenu: menu.setMenu(R.layout.expand_listview_main); Początek SlideMainMenu.java public class SlideMainMenu extends Aktywność { ExpandableListAdapter listAdapter; ExpandableListView expandableListView; List<String> listDataHeader; HashMap<String, List<String>> listDataChild; @Zastąp chronione void onCreate(Bundle protectedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.slide_left_main_menu); Toast.makeText(getParent(), "SlideMenuInit sukces", Toast.LENGTH_LONG).show(); // TEST expandableListView = (ExpandableListView) findViewById(R.id.ExpandableListView_Main); przygotowanieListyDanych(); listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); expandableListView.setAdapter(listAdapter);


title: Dlaczego operator przypisania przypisuje do lewej strony?

text: Niedawno zacząłem uczyć znajomego programowania (używamy Pythona), a kiedy zaczęliśmy omawiać tworzenie zmiennych i operatora przypisania, zapytała, dlaczego wartość po prawej jest przypisana do nazwy po lewej, a nie odwrotnie . Wcześniej nie myślałem o tym zbyt wiele, ponieważ wydawało mi się to naturalne, ale powiedziała, że od lewej do prawej wydaje się jej bardziej naturalne, ponieważ tak większość z nas czyta języki naturalne. Pomyślałem o tym i doszedłem do wniosku, że znacznie ułatwia to odczytanie kodu, ponieważ przypisane nazwy (które programista będzie musiał ponownie wykorzystać) są łatwo widoczne, wyrównane po lewej stronie. wyrównane = 2 włączone = 'foo' + 'bar' + 'foobar' the = 5.0 / 2 left = 2 + 5 W przeciwieństwie do: 2 = wyrównane 'foo' + 'bar' + 'foobar' = włączone 5.0 / 2 = the 2 + 5 = prawo # Jakie były znowu nazwy...? Teraz zastanawiam się, czy są też inne powody dla tego standardu. Czy kryje się za tym historia? A może jest jakiś techniczny powód, dla którego jest to dobra opcja (nie wiem zbyt wiele o kompilatorach)? A czy są jakieś języki programowania, które przypisują właściwą stronę?


title: W jaki sposób profesjonalni programiści aplikacji korzystają z systemów kontroli wersji, takich jak GIT i Subversion?

text: Jestem początkującym programistą i od samego początku zastanawiałem się, jak profesjonalnie używać narzędzi, takich jak GIT i Subversion (nie mam zbyt dobrego zrozumienia tych narzędzi), aby zaspokoić potrzeby swojego projektu. Jeśli go użyją, jak mam skonfigurować coś takiego? Moje aplikacje nie są tak duże i nie pracuję jeszcze w zespole, czy bardzo by mi pomogły? Na tej stronie są pytania dotyczące korzystania z narzędzi, ale potrzebuję wsparcia dla początkujących.


title: Dlaczego kreatywność jest uważana przez architektów za złą praktykę?

text: Jeśli robisz coś twórczego (na przykład zrobiłem nowe podejście do logowania) to uważaj to za złą praktykę. dobrą praktyką w Javie jest umieszczenie statycznego rejestratora pola w każdej klasie. Moje podejście tworzy statyczne 5 statyczne pole w jednej klasie (mniej kodu) i po prostu wywołuje metody, które mają do niego dostęp. Nie dbam o moje ramy rejestrowania, to tylko przykład. Uważam, że każda najlepsza praktyka, która jest wymuszona z powodu braku dobrej wydajności lub powodu czystego kodu, jest złą praktyką. Rozumiem na przykład, że wszystkie dane, które można zmienić, powinny znajdować się w plikach xml lub właściwościach, ponieważ później, jeśli trzeba ręcznie zmienić WAR, łatwiej jest zmienić .xml niż .class. Można by zregenerować WAR, ale wtedy umieszczanie stałych w xml i właściwości nie miałoby sensu.


title: Ile programista musi wiedzieć o Linuksie?

text: Zastanawiałem się tylko, czy typowy programista PHP musi być bardzo zaznajomiony z Linuksem. Studiuję teraz Linuksa i uważam, że część wiedzy o Linuksie nie jest wymagana do pracy programisty PHP (nie jestem pewien, czy mam rację). Na przykład vi lub programowanie powłoki. Podsumowując: czego powinienem się nauczyć o Linuksie, jeśli chcę tylko dostać pracę programisty PHP.


title: Kiedy powstał pierwszy model „REST” i technologia przyjaznego adresu URL?

text: Wszyscy wiedzą, że „obecnym” sposobem działania jest posiadanie czytelnych dla użytkownika adresów URL. Na przykład: http://example.com/blog/edit/1234 Zamiast: http://example.com/blog.php?action=edit&id=1234 Kiedy dokładnie ludzie zaczęli tworzyć technologie internetowe obsługujące to? Pamiętam, że w mrocznych czasach na początku 2000 roku nie przypominam sobie, żebym kiedykolwiek widział przyjazny adres URL. W rzeczywistości myślę, że Stackoverflow (w roku 2008/9) mógł być pierwszym, kiedy je zauważyłem. Kiedy dokładnie stało się to tak popularne i jakie były pierwsze serwery/frameworki zbudowane z myślą o przyjaznych adresach URL? Interesuje mnie również to, kiedy przepisywanie do przyjaznych adresów URL stało się powszechne, a kiedy serwowanie przyjaznych adresów natywnie stało się powszechne


title: Jak poradzić sobie z tą niestety nie hipotetyczną sytuacją z użytkownikami końcowymi?

text: Pracuję w średniej wielkości firmie, ale z bardzo małą siłą IT. W zeszłym roku (2011) napisałem aplikację, która cieszy się dużą popularnością wśród dużej grupy użytkowników końcowych. Zbliżyliśmy się do końca zeszłego roku i część funkcjonalności (od teraz będę nazywać funcA) nie została dodana do aplikacji, która była potrzebna na sam koniec. Tak więc ta aplikacja działa na żywo/produkcja od końca 2011 roku, mogę dodać bez problemu. Wczoraj cała grupa użytkowników końcowych zaczęła narzekać, że funcA, której nigdy nie było w aplikacji, przestała działać. Naszym priorytetem w tej firmie jest to, że jeśli aplikacja jest uszkodzona, musi być najpierw naprawiona przed priorytetowymi projektami. Porównałem kod i zapytania i nie ma różnicy od 2011 roku, co jest dowodem A. Udało mi się wtedy nakłonić jednego z użytkowników końcowych do przyznania, że to nigdy nie zadziałało jako dowód B, ale od tego czasu ten użytkownik końcowy wrócił i powiedział, że to działało wcześniej. . . . użytkownicy ją przyswoili. Przejrzałem również moje notatki dotyczące tego projektu, który ma wymagania i codzienne aktualizacje dotyczące projektu, który konkretnie stwierdza, że „funkcja nie została osiągnięta z powodu ograniczeń czasowych”, dowód C. Rozmawiałem z wieloma z nich i widzę, gdzie mogą się pomylić, ponieważ są bardzo dalecy od programowania, ale wiem również, że są wystarczająco inteligentni, aby działać w grupie, aby ominąć nakazy priorytetyzacji projektów w celu uzyskania funkcjonalność, którą chcą ułatwić sobie pracę. Najgorsze jest to, że teraz zaczyna się myślenie grupowe, a mój szef i szef działu IT zaczynają im wierzyć, mimo że nie ma żadnych zmian w kodzie lub zapytaniach. Jeśli chodzi o przeglądanie stanu logiki, to jest bardzo okrojona i sucha do tego stopnia, że jeśli 1 = 1, funcA nie zadziała. Na tym kończy się opis mojego scenariusza, ale staram się nie zagłębiać się w moje wskaźniki wydajności z tego powodu, co zasadniczo skłoniłoby mnie do naprawienia problemu produkcyjnego, który nie istnieje, który prawdopodobnie przejmie kontrolę 1 miesiąc. Szukam bezpośrednich odpowiedzi na to pytanie. To pytanie nie dotyczy rantów, ankiet ani dyskusji, ponieważ nie jest to format dla StackExchange. Proszę nie zniechęcaj mnie zbyt strasznie, jest to dość powszechne na tej konkretnej stronie stosu, szukam uczciwych odpowiedzi na tę sytuację i nie mogłem znaleźć bardziej odpowiedniego forum.


title: Tematy badawcze dotyczące uruchamiania i optymalizacji witryny o dużym natężeniu ruchu

text: Zakopuję wiele moich pomysłów z obawy, że nie wiem wystarczająco dużo o skalowaniu aplikacji internetowych i witryn o dużym natężeniu ruchu. To powiedziawszy, chciałbym poznać ogólne tematy do zbadania, aby upewnić się, że Twoja aplikacja internetowa nie zepsuje się / nie spowolni, gdy zaczniesz docierać do ruchu na poziomie Twittera. Szukam tematów badawczych, najlepiej z dodatkowymi zasobami. Na przykład: **Upewnij się, że optymalizujesz zapytania SQL (zobacz High Performance MySQL Optimization)**


title: wywoływanie metod w wyrażeniu warunkowym

text: W często cytowanym (jeśli datowanym) odnośniku do standardów kodowania C# (pdf; z Lance Hunt), znajduje się stwierdzenie > 33\. Unikaj wywoływania metod w wyrażeniu warunkowym. Nie widziałem tego zalecenia nigdzie indziej, w tym w wytycznych .NET (tutaj lub tutaj). W przeciwieństwie do innych bardzo rozsądnych wskazówek zawartych w dokumencie Hunta, ta sugestia wydaje mi się nieintuicyjna. Czy ktoś może to uzasadnić?


title: Łatwe przesuwanie czasu w obu kierunkach podczas rebase

text: Po napisaniu kilku commitów bardzo często nad nimi używam `git rebase -i`, aby je przetestować, w razie potrzeby podzielić, wziąć części z jednego commita i `zgnieć` do innego, bardziej odpowiedniego. Ale jest problem. Powiedzmy, że dzisiaj szukam błędu, który powoduje 5 ostatnich zatwierdzeń. Bazuję interaktywnie na ostatnim, o którym wiadomo, że działa (nie daj mi spokoju, z jakiegoś powodu nie używam `git bisect`). Następne zatwierdzenie wprowadza błąd, ale jest wielkim bałaganem niezwiązanym z nim kodem. Więc `git reset HEAD~`, a następnie tworzę kilka wewnętrznie logicznych zatwierdzeń. Oto problem. Nie wiem, które jest pierwszym problematycznym commitem. Więc wybieram `edytuj` dla wszystkich zatwierdzeń podczas zmiany bazy. Po tym, jak skończę z problematycznym zatwierdzeniem, mam kilka zatwierdzeń z przeszłości, które chciałbym przetestować dalej. Obecnie wielokrotnie wykonuję `git rebase --continue`, aż do zakończenia rebase, a następnie ponownie interaktywnie rebase. Ma to kilka problemów: * To nudne. Przynajmniej chciałbym polecenie, które przeniesie się na początek gałęzi, pomijając wszystkie zadeklarowane commity `edit`. * Niekończące się połączenia. Muszę często scalać i wolałbym najpierw wykonać sensowną pracę polegającą na podzieleniu oryginalnego zatwierdzenia, a dopiero po tym `git commit --ammend` ostatnie zatwierdzenia, aby były zgodne z edytowaną historią. * * * **TL;DR;** Jak mogę osiągnąć to dwukierunkowe przechodzenie na gałęzi, jednocześnie tworząc, usuwając i zmieniając zatwierdzenia? A może ten przepływ pracy jest koncepcyjnie niepoprawny?


title: Czy ZeroMQ to dobry wybór, aby aplikacja Pythona i zestaw zarządzany w języku C# działały razem?

text: Mam zadanie polegające na rozmowie z interfejsem API opartym na .NET (mianowicie AutoCAD) w celu pobierania danych, wysyłania poleceń i reagowania na zdarzenia. Chcę oddzielić operacje API i odpowiednią logikę programu (w dużej mierze już zaimplementowaną w Pythonie), używając naturalnych narzędzi dla obu: C# DLL dla pierwszego i aplikacji Pythona dla drugiego. Aby połączyć te dwie części, zacząłem wymieniać JSON w wiadomościach ZeroMQ. Jestem na wczesnym etapie rozwoju, ale niedawno odkryłem, że ZeroMQ nie gwarantuje dostarczenia/zamówienia wiadomości, mam zastrzeżenia, czy jest to wykonalna droga. W tej chwili moja aplikacja jest bardzo podstawową parą REQ/REP i zamierzam obsługiwać reagowanie na zdarzenia i wykonywanie różnych poleceń, dodając coś w rodzaju pola „odbiorca-funkcja” do mojego formatu wiadomości. Powodem, dla którego chcę korzystać z ZMQ, jest to, że czasami będę w stanie skalować oprogramowanie do większego, rozproszonego rozwiązania dla wielu użytkowników. Jestem programistą świeckim, więc prosiłbym o radę na temat tej architektury. Czy powinienem po prostu kontynuować i planować radzenie sobie z niezawodnością/porządkowaniem wiadomości, gdy pojawią się problemy? Czy powinienem rozważyć opracowanie jakiegoś wrappera REST wokół ZMQ?


title: Czy mogę korzystać z bibliotek open source w moim projekcie, który został udostępniony w domenie publicznej?

text: Piszę aplikację na Windows Phone, którą zamierzam udostępnić w domenie publicznej (czyli kod źródłowy i powiązane zasoby). Moja aplikacja korzysta jednak z kilku bibliotek open source innych firm (łączących się z nimi statycznie). Czy udostępnienie mojego kodu do domeny publicznej ma jakiekolwiek znaczenie w odniesieniu do licencji bibliotek open source, których używam, czy też musiałbym upewnić się, że moja (nie)licencja jest zgodna z licencjami open source, tak samo jak musiałbym, gdybym wydał kod źródłowy przy użyciu licencji open source (lub zachował kod w postaci zamkniętego źródła, jeśli o to chodzi)? Udostępnienie mojego kodu do domeny publicznej nie ma żadnego znaczenia, skąd mam wiedzieć, czy licencja open source nadaje się do użytku z kodem udostępnionym do domeny publicznej?


title: Czy można bezpiecznie przekonwertować ścieżki plików Windows na ścieżki plików Unix za pomocą prostej zamiany?

text: Na przykład powiedzmy, że mam tak, że wszystkie moje pliki zostaną przeniesione z komputera z systemem Windows na komputer z systemem Unix jako taki: `C:\test\myFile.txt` to `{somewhere}/test/myFile.txt` ( litera dysku jest w tym momencie nieistotna). Obecnie nasza biblioteka narzędziowa, którą sami napisaliśmy, udostępnia metodę, która w prosty sposób zastępuje wszystkie ukośniki odwrotne ukośnikami przednimi: public String normalizePath(String path) { return path.replaceAll("\\", "/"); } Ukośniki są zarezerwowane i nie mogą być częścią nazwy pliku, dlatego należy zachować strukturę katalogów. Jednak nie jestem pewien, czy istnieją inne komplikacje między systemami Windows a ścieżkami unix, o które mogę się martwić (np. Nazwy inne niż ASCII itp.)


title: Czy jest jakiś sens w dystrybucji oddzielnych zestawów .NET 3.5 i 4.0?

text: Chcę rozpowszechniać bibliotekę .NET, która jest zgodna z .NET 3.5. Biblioteka zawiera odwołania tylko do zewnętrznych zarządzanych bibliotek, które są przeznaczone dla profilu klienta .NET 3.5 lub niższego. Czy jest jakiś sens w dystrybucji mojej biblioteki jako oddzielnego docelowego zestawu .NET 3.5 i 4.0?


title: Obsługa wyjątków w programie, który musi działać 24/7

text: Przeczytałem, że powinniśmy przechwytywać tylko wyjątki, które można obsłużyć, co sprawia, że przechwytywanie podstawowej klasy wyjątków (w tym przypadku C#) jest złym pomysłem (oprócz innych powodów). Obecnie jestem częścią projektu, w którym do tej pory nie widziałem niczego poza wychwyceniem wyjątku podstawowego. Wspomniałem, że uważa się to za złą praktykę, ale odpowiedź brzmiała: „Ta usługa musi działać 24/7, więc tak właśnie jest”. Ponieważ nie otrzymałem dobrej odpowiedzi na pytanie, jak prawidłowo obsługiwać wyjątki w programie, który musi działać 24/7, jestem teraz tutaj. Nie udało mi się znaleźć żadnych informacji / sugestii, jak radzić sobie z obsługą wyjątków w "krytycznych" programach / usługach, które muszą działać przez całą dobę (i w tym przypadku uważam, że może być ok, jeśli usługa nie działa przez minutę lub dwa, więc nawet nie krytyczne). Rozumiem, że zależy to od dokładnego charakteru programu. Wymagania dla programu, który może powodować problemy zagrażające życiu, są zupełnie inne niż w przypadku skanera dziennika w grze online. Dwa przykłady: 1: Usługa z wyprzedzeniem dla klientów kolei brytyjskich, używana podczas wyszukiwania w Internecie stacji kolejowych. 2: Program, który automatycznie steruje zwrotnicami dla powyższych linii kolejowych w oparciu o informacje w czasie rzeczywistym dostarczane z różnych czujników na torach, pociągach itp. Pierwszy program prawdopodobnie nie spowodowałby większego problemu, gdyby zepsuł się na minutę lub dwie, podczas gdy ten ostatni może spowodować ofiary w ludziach. Sugestie, jak sobie z nimi radzić? Wskaż, gdzie mogę znaleźć więcej informacji i przemyśleń na ten temat?


title: jak napisać bezpieczny kod, jeśli jesteś jedynym programistą

text: Pracuję w firmie funduszy hedgingowych od dwóch lat i jestem jedyną osobą, która pisze prawie wszystkie kodeksy. Jak dotąd na szczęście nie ma usterki oprogramowania ani błędu powodującego utratę pieniędzy. Nie ma jednak gwarancji, że nigdy nie wystąpi. Zastanawiam się tylko, czy istnieje sposób na napisanie bezpiecznego kodu. Oczywiście jednym ze sposobów jest test jednostkowy. Jednak niektóre przypadki testowe nie są łatwe do przetestowania, a niektóre sytuacje mogą wystąpić tylko w określonym dniu, np. pracowity dzień handlowy i program nie może sobie z tym poradzić. FYI moja firma zatrudni w najbliższych miesiącach mniej starszych deweloperów. EDIT: Ze względu na bezpieczeństwo program nie pozwala na wysyłanie na rynek wielu błędnych zleceń jak Knight Capital . W ekstremalnym stopniu awaria programu jest znacznie lepsza niż to. Ponieważ jestem programistą, a także testerem, oprogramowanie jest gotowe do wydania na podstawie mojej decyzji. Zgadzam się, że tester jest wymagany. Jednak obawiam się, że tester musi znać całą logikę systemu transakcyjnego, który jest poufny.


title: Zagadnienia szkoleniowe SAP / ABAP jako młodszy programista

text: Niedawno ukończyłem informatykę i zostałem zrekrutowany przez partnera SAP jako „Konsultant SAP NetWeaver” (tak przynajmniej nazywa mnie szef). W pracy stwierdzono, że żadne wcześniejsze doświadczenie w SAP ani ABAP nie jest niezbędne, a także, że pracownik zostanie odpowiednio przeszkolony. Mam zerowe doświadczenie w SAP i ABAP (nie mam też żadnego wartego wymienienia doświadczenia zawodowego, bo mam 21 lat), pracuję w tej firmie od miesiąca (jedynym pracownikiem firmy jest właściwie szef). Pierwszym zadaniem, które musiałem wykonać było stworzenie nowego pakietu deweloperskiego, obejmującego domeny, elementy danych, struktury, tabele, typy tabel, klasy, interfejsy, grupy funkcyjne, raporty, personalizację wielu implementacji BADi itp., systemu, który został zoptymalizowany i przeprojektowany (przez szefa). W jaki sposób osiągnąłem powyższe (właściwie wciąż próbując), miałem jeden lub dwa przykłady od szefa, jak stworzyć każdą z wyżej wymienionych rzeczy. Większość z powyższych nie stanowiła żadnego problemu, ale teraz, gdy przeszedłem do kodowania, mam kilka poważnych problemów. Przede wszystkim, jak wspomniano powyżej, nie mam żadnego doświadczenia z SAP ani ABAP, co oznacza, że jestem ignorantem, jeśli chodzi o możliwości języka, składnię, instrukcje itp. oraz wszystko wokół SAP NetWeaver i Środowisko pracy ABAP. Muszę stworzyć kilka prostych zagnieżdżonych pętli do pobierania określonych składników każdego z obiektów zawartych w strukturze, która to struktura jest zawarta w innej strukturze i jest zawarta w typie tabeli. Na przykład... mam funkcję, która wyprowadza wszystkie wynajmowane obiekty zawarte w kontrakcie, a dla każdego wynajmowanego obiektu muszę wyprowadzić pewne specyficzne komponenty wszystkich ich obiektów architektonicznych. Chociaż byłoby to łatwe do osiągnięcia w języku, w którym mam już pewną wiedzę. Trudno mi to zrobić z moimi obecnymi umiejętnościami w ABAP. Chodzi mi o to, że nawet różnica w funkcjach LOOP psuje moją zdolność do kodowania, nawet fakt, że staram się przestrzegać konwencji nazewnictwa, o której mówi klient, sprawia, że patrzę na wszystko dwa razy, aby zrozumieć, co właściwie piszę. Nie potrafię nawet poprawnie obsłużyć debuggera. Przepraszam za wszystkie powyższe informacje, ale przed zadaniem pytania musiałem przedstawić Państwu sytuację. Wszystko, co dał mi szef, to książka ABAP Objects i oczywiście dostęp do systemu. Czy tego powinienem się spodziewać po treningu? Podczas gdy szef był raczej zdumiony tym, jak szybko udało mi się odtworzyć wszystkie obiekty deweloperskie do nowego pakietu i wprowadzić odpowiednie zmiany w dokumentacji, tłumaczeniu, nazewnictwie itp., teraz myśli, że nie wiem czym jest struktura, tabela lub pętla. A faktem jest, że wiem to wszystko, ale nie w ABAP... Nie wiem jak postępować ani jak mam podejść do mojej sprawy, szef nie może marnować ze mną dużo czasu, bo jest wszystkim czas biegania do klientów, a także samodzielne projektowanie i wdrażanie dodatków. Czy powinienem oczekiwać od niego czegoś więcej?


title: Deque na podstawie drzew binarnych

text: Jest to prosta niezmienna deque oparta na drzewach binarnych. Co o tym myślisz? Czy taka struktura danych, a może jej udoskonalenie, wydaje się przydatna? Jak mógłbym go ulepszyć, najlepiej nie pozbywając się jego mocnych stron? (Nie w sensie większej liczby operacji, w sensie innego projektu) Czy tego rodzaju rzeczy mają nazwę? Czerwone węzły są nowo tworzone; niebieskie są ponownie używane. Węzły nie są w rzeczywistości czerwone ani nic, to tylko dla podkreślenia. ![http://goo.gl/KzOFR](http://i.stack.imgur.com/76kzH.png) Zauważ, że prawa deque _nie_ przyjmują O(n). Każdy dostęp do elementu w deque zależy od tego, jak dawno został on wstawiony. Możesz wykonać dowolną operację dodawania do kolejki lub łączenia w O(1). Możesz również użyć "wagi" każdego węzła nie będącego liściem, aby zmienić orientację drzewa, na przykład uczynić dostęp dla wszystkich prawych kosztownym, a dostęp lewostronny tanim lub zapewnić dostęp O (logowanie) do dowolnego końca. Ten proces przyjmuje najgorszy przypadek O(n), w zależności od początkowej orientacji drzewa. Alternatywnie mógłbym "szukać" najlżejszego węzła, do którego wstawić dany węzeł, zamieniając wszystkie operacje na operacje O(logn).


title: Najbliższa lokalizacja — Heapify lub Build-heap

text: Powiedzmy, że mamy zestaw punktów danych GPS i Twoją aktualną lokalizację. Jeśli zostaniesz poproszony o podanie najbliższego punktu Twojej aktualnej lokalizacji, możemy użyć stosu, w którym kluczem będzie odległość. Teraz, jeśli zaktualizujemy bieżącą lokalizację, podejrzewam, że tylko kilka kluczy zmieni się na tyle, aby naruszyć właściwość sterty. Czy bardziej efektywne byłoby odbudowanie sterty po ponownym obliczeniu kluczy, czy uruchomienie heapify (zakładając, że tylko kilka kluczy zostało wystarczająco zmienionych). Zakłada się, że nie skaczemy z nową lokalizacją (nowa aktualna lokalizacja jest blisko ostatniej bieżącej lokalizacji).


title: Walidacja encji i wzorca a ograniczenie bazy danych

text: Jeśli chodzi o wydajność: Jaki jest lepszy sposób sprawdzania poprawności danych wejściowych użytkownika? Jeśli myślisz o numerze telefonu i chcesz tylko numery w bazie danych, ale może zaczynać się od 0, więc użyjesz varchar: Czy lepiej to sprawdzić za pomocą modelu encji w następujący sposób: @Size(min = 10, max = 12) @Cyfry(ułamek = 0, liczba całkowita = 12) @Kolumna(nazwa = "numer_telefonu") private String numer_telefonu; A może lepiej jest użyć po stronie bazy danych CHECK (i nie sprawdzać w modelu encji) dla tej samej funkcji?


title: C++ i korzystanie ze starych wersji Visual Studio

text: Bazując na zachowaniu niektórych naszych klientów, zacząłem się zastanawiać, czy wiele sklepów deweloperskich c++ zdecydowało się po prostu zatrzymać na vs2005. Czy to tylko dziwactwo z kilkunastu dużych organizacji, którym dostarczamy DLL+IMPLIB, czy też ogólnie branża nie jest zainteresowana modernizacją? Zwróć uwagę, że nie ma tu pracy MFC, tylko kompilacja kodu C++ dla systemu Windows, która jest również dostarczana na Linuksie i tak dalej. A pytanie brzmi: „Czy to moja wyobraźnia, czy też duże firmy, które tworzą takie rzeczy, jak wyszukiwarki w C++, właśnie przestały aktualizować?” **UWAGA** Żadna z dotychczasowych odpowiedzi nie wydaje się przedstawiać rzeczywistych osobistych doświadczeń związanych z podjęciem decyzji o uaktualnieniu lub nie, ale raczej oferuje ogólne zasady lub zgłasza bardzo niejasne pogłoski.


title: Czy trywialni chronieni getters to rażąca przesada?

text: Coś, o czym naprawdę wcześniej nie myślałem (składnia AS3): private var m_obj:Object; funkcja zabezpieczona pobierz obj():Object { return m_obj; } prywatny var m_str:String; funkcja chroniona pobierz str():String { return m_str; } Przynajmniej podklasy nie będą mogły ustawić m_obj lub m_str (chociaż nadal mogą modyfikować m_obj). **Moje pytanie:** Czy to tylko rażąca przesada? * * * Pytanie tego programisty: Kiedy i dlaczego należy używać getterów/setterów dla właściwości klas zamiast po prostu czynić je publicznymi? został zaproponowany jako duplikat. To pytanie jest inne, ponieważ dotyczy tylko właściwości publicznych i prywatnych oraz tego, czy właściwość powinna być opakowana za pomocą metod pobierających i ustawiających. Na moje pytanie skupiam się na zmiennych _protected_ i jak dziedziczenie klas będzie współdziałać z tymi zmiennymi. Zatem alternatywną implementacją byłoby: protected var m_obj:Object; //bardziej dostępna niż zmienna prywatna z chronionym getterem var m_str:String; //bardziej dostępna niż zmienna prywatna z chronionym getterem Moje pytanie jest podobne, ponieważ mówię o użyciu chronionych getterów _trywialnych_ do blokowania _podklas_ przed zapisem do zmiennych, ale aby umożliwić im inny dostęp. W językach takich jak AS3 pozwoli to nawet na dokonywanie jakichkolwiek zmian w zmiennych zmiennych obiektowych, o ile same referencje nie są modyfikowane.


title: Zmienne nazwy bitów informacji kontaktowych

text: Jestem w trakcie refaktoryzacji kodu i chciałbym uzyskać kilka pomysłów na nazewnictwo zmiennych, aby moje nowe nazwy wyraźnie odzwierciedlały dane, które przechowują. Mam klasę o nazwie „ContactMethod”, która ma dla mnie sens; każda instancja to inny sposób skontaktowania się z kimś. Mój problem pojawia się podczas nazywania właściwości `ContactMethod`. Na przykład jednym wystąpieniem może być numer faksu 555-555-5555, podczas gdy innym może być adres e-mail bob@email.com; Mam właściwość o nazwie „contactMethodType”, która przechowuje wartości „fax” lub „email”, ale nie wiem, jak nazwać część „555-555-5555” lub „bob@email.com”. Czy ktoś tutaj stworzył dobrą ogólną nazwę dla tych informacji kontaktowych? _(PS - stara konwencja polegała na nazywaniu go "Phone" z polami "phoneType" zawierającymi wartość "fax"/"email" oraz "phoneId" zawierającymi numer/adres. Fuj.)_


title: Implementacja obiektów z kilkoma równoważnymi reprezentacjami

text: Zastanawiam się, czy istnieją wzorce, referencje lub przydatne zasoby dotyczące implementacji obiektów, które mogą mieć kilka równoważnych reprezentacji. Na przykład: Załóżmy, że chcę zaimplementować `Prostokąt` i stworzę go używając jego `długości` i `szerokości`: class Prostokąt: def __init__(self, length, width): self.length = length self.width = szerokość i załóżmy, że teraz chcę również mieć możliwość utworzenia instancji „prostokąta” przy użyciu jego „przekątnej” i „obszaru”. Moją główną troską jest to, że nie chcę przechowywać w obiekcie zbędnych informacji (w tym przypadku tych czterech właściwości), tylko absolutne minimum możliwe do zdefiniowania. Załóżmy też, że mógłbym chcieć pobrać jeden zestaw właściwości po utworzeniu `Prostokąta` za pomocą innego: r = Rectangle(długość=3, szerokość=4) attach r.diagonal == 5 Do tej pory próbowałem tego: class Prostokąt: def __init__(self, **kwargs): params = set(kwargs.keys()) if params == set(['długość', 'szerokość']): self._length = kwargs['długość'] self ._width = kwargs['szerokość'] elif params == set(['obszar', 'przekątna']): self._area = kwargs['obszar'] self._diagonal = kwargs['diagonal'] else: podnieś ValueError ('Nieprawidłowe argumenty wejściowe') @property def length(self): if hasattr(self, '_length'): zwróć self._length elif hasattr(self, '_area') and hasattr(self, '_diagonal'): length, width = ad2lw(self._area, self._diagonal) #r = Prostokąt(długość= length, width=szerokość) #return r._length return length else: raise NotImplementedError('Brak dostępnego konwertera') # To samo z pozostałymi trzema właściwościami def ad2lw(area, diagonal): # Niejasny powrót matematyczny l, w Czy jest to jakikolwiek znany wzorzec czy jest na to standardowy sposób?


title: MVC w aplikacji komputerowej — czy widok może kiedykolwiek zawierać odwołanie do modelu?

text: (Określam, że jest to aplikacja komputerowa, aby ludzie nie odnosili się konkretnie do internetowych implementacji MVC). Tytuł mówi prawie wszystko. W strukturze MVC - **czy Widok _kiedy__ może zawierać odniesienie do Modelu?** Czy też Kontroler powinien być używany jako „pośrednik” do komunikacji między Widokiem a Modelem - zawsze - iw obu kierunkach? Jeśli odpowiedź brzmi „nie, nie może” – **dlaczego?**


title: Cienka linia: czytelność a prędkość

text: Czy istnieje granica między czytelnością a szybkością kompilacji lub przetwarzania? Poza skrajnymi przypadkami, nie sądziłem, że warto byłoby nawet oszczędzać tę odrobinę więcej na rzecz czytelności... Na przykład; złym pomysłem, moim zdaniem byłoby usunięcie wszystkich komentarzy na temat „gotowego” produktu, aby uzyskać trochę dodatkowej prędkości.


title: Czy miałeś do czynienia z utwardzaniem przestrzeni?

text: Bardzo chętnie zapoznam się z najlepszymi praktykami, jeśli chodzi o utwardzanie przestrzeni. Na przykład czytałem (choć nie mogę już znaleźć tego artykułu), że niektóre podstawowe części łazików marsjańskich nie używały dynamicznej alokacji pamięci, w rzeczywistości było to zabronione. Czytałem również, że staromodna pamięć rdzeniowa może być preferowana w przestrzeni kosmicznej. Przyglądałem się niektórym projektom związanym z Google Lunar Challenge i zastanawiałem się, jak by to było dostać kod na Księżyc, a nawet po prostu w kosmos. Wiem, że płyty utwardzone w przestrzeni kosmicznej oferują trochę zdrowego rozsądku w tak trudnym środowisku, jednak zastanawiam się (jako programista C), jak musiałbym dostosować swoje myślenie i kod, gdybym pisał coś, co działałoby w kosmosie? Myślę, że następne kilka lat może pokazać większy wzrost prywatnych firm kosmicznych, naprawdę chciałbym mieć przynajmniej trochę wiedzy na temat najlepszych praktyk. Co dzieje się z programem, jeśli promieniowanie, zimno lub ciepło bombarduje płytę, która doznała uszkodzenia izolacji? Myślę, że celem jest trzymanie ludzi w statku kosmicznym (jeśli chodzi o naprawianie lub wymianę rzeczy) i unikanie misji naprawczych. Co więcej, jeśli zarząd utrzymuje jakiś krytyczny system, wczesne ostrzeżenia wydają się najważniejsze. Jak zdobyć w tym doświadczenie poprzez testy i próby i błędy (z wyjątkiem wystrzelenia własnego satelity?)


title: Jak działa nagrywanie wideo i odtwarzanie go w czasie rzeczywistym?

text: Chcę zrozumieć, jak działa nagrywanie wideo (i audio) i odtwarzanie go w czasie rzeczywistym (na tym samym komputerze lub przez sieć)? Rozumiem dla pliku zapisanego na dysku. Czytasz i odtwarzasz, ale w przekodowaniu nie wiesz, jak długi jest plik, kiedy się skończy itp. Czy ktoś może to wyjaśnić, najlepiej za pomocą jakiegoś kodu (lub pseudokodu)? Dziękuję


title: Android -> Interfejs serwera Ruby -> Mongodb

text: Przez kilka dni łamałem sobie tym głowę. Przeprowadzę mój scenariusz przez ciebie i mam nadzieję, że mi pomożesz. W mojej głowie tak to wygląda: mam aplikację na Androida. Chcę, aby moja aplikacja na Androida wykonywała wywołania (funkcje) do bazy danych MongoDB za pośrednictwem interfejsu Ruby na serwerze. np. Aplikacja na Androida wysyła HTTP GET ? z nazwą funkcji, powiedzmy getFriends dla tego użytkownika Ruby Interface odbiera to żądanie z aplikacji, pobiera wątek z puli wątków i wywołuje odpowiednie wywołanie funkcji zaimplementowane w Ruby, do Mongodb. Ruby Interface pobiera wyniki z Mongodb i wysyła HTML POST do aplikacji na Androida. Więc myślę, że tak to działa. Wiem o sterowniku ruby dla mongo db i interakcji z mongodb z ruby, ale jak sprawić, aby back-end ruby nasłuchiwał wiadomości przychodzących i czy te wiadomości powinny być wykonywane przez gniazda lub interfejs http ala Net::http w ruby ?


title: Czy powinniśmy tworzyć klasy tylko po to, aby pogrupować właściwości?

text: Projektuję trochę oprogramowania, które zintegruje się z naszym systemem korporacyjnym za pomocą usług internetowych. Mamy do czynienia ze zleceniami pracy, które są potrzebne do utrzymania sprzętu. Trochę się spieramy co do struktury kontraktu. Po mojej stronie są dwie metody, chciałbym mieć jedną klasę zlecenia pracy ze wszystkimi właściwościami związanymi z tym zleceniem. przykład (uproszczony) WO - class Number - właściwość Description - właściwość WarrantyStatus - właściwość WarrantySettlementDate - właściwość LabourSteps<LabourStep>[] - właściwość list Children<WO>[] - właściwość list Ze swojej strony chcą utworzyć klasę zlecenia pracy, ale dla każdej logicznej grupy danych chcą utworzyć inną klasę, aby otoczyć właściwości. przykład (uproszczony) WO - klasa WOHeader - klasa Number - właściwość Description - właściwość Warranty - klasa WarrantyStatus - właściwość WarrantySettlementDate - właściwość LabourSteps<LabourStep>[] - właściwość list Children<WO>[] - właściwość list Teraz będą mieli ok. 8 klas w pełnej definicji, że chcą stworzyć wszystko z kilkoma właściwościami w każdym. Wydaje mi się to trochę przesadzone i ma trochę zapachu kodu lub anty-wzoru. Na przykład mam dwie klasy, WO i LabourStep. Mają 4 klasy dla tego samego WO,WOHeader,Gwarancji,LabourStep. Zawsze będzie tylko jeden WOHeader na WO i taki sam dla gwarancji. Mój wydaje się o wiele prostszy do zarządzania zmianami (dodaj nową właściwość do WO i to wszystko), ale jest mniej czytelny dla człowieka. Z ich strony struktura jest nieco łatwiejsza do odczytania przez człowieka, ale wydaje się, że wpycha logiczny widok na umowę, do której tak naprawdę nie należy. A dodanie nowej właściwości potencjalnie wymaga modyfikacji WO i utworzenia nowej klasy, jeśli dodano nową grupę logiczną. Te dodatkowe klasy służą tylko do grupowania właściwości. Jaka jest właściwa droga? ======EDIT========== Frank - całkowicie zgadzam się z Twoimi przemyśleniami i tak podchodzę do swojego rozwoju. Z wyjątkiem tego przypadku, monolityczny system korporacyjny innej firmy, z którym się integrujemy, został napisany w bardzo ogólny sposób, aby spróbować obsłużyć jak najwięcej firm. Dane są rozłożone na trzy tabele w odwzorowaniu jeden do jednego, przy czym większość znajduje się w jednej tabeli. Prawie nie ma potwierdzenia. W tym systemie nie ma pojęcia „Gwarancji” obiektu/rzeczy. To tylko 3 właściwości w porównaniu z WO. Wszystko, co zrobi usługa sieciowa, to będzie działać jak magazyn danych, z WO utrwalonym jako całość. np. getWO() updateWO() createWO(). Nigdy nie będzie metod get/updateWarranty(). To tylko jeden blok danych do odczytu/utrwalenia. Z naszej strony nigdy nie używamy wyników bezpośrednio z usług internetowych, nawet jeśli są one nasze. Konwertujemy je na odpowiednie modele, a następnie z nich korzystamy. Dla nas umowa o dane bardzo różni się od modelu. W kontrakcie danych nie ma logiki biznesowej, jest to wyłącznie kontener do pobierania danych z jednej części systemu do drugiej bez ścisłego ich łączenia. Oznacza to, że możemy łatwo zmienić, aby utrwalić się w bazie danych zamiast w usłudze sieciowej, a wszystko, co trzeba zrobić, to dopasować interfejs usługi sieciowej. Pozwala nam to również modyfikować nasze własne modele, które mogą nawet zawierać wyniki z wielu usług internetowych, bez obawy o ograniczenie lub zmianę formatu umów dotyczących danych. Więc kiedy myślę w tych kategoriach, posiadanie kontraktów danych podzielonych na klasy WOHeader lub WOWarranty po prostu nie ma sensu. Nigdy nie będzie używany w ten sposób, nawet przez nich. Jest po prostu dla ładnej logicznej grupy właściwości, które same w sobie nic nie znaczą. Blok regionu wokół tych właściwości miałby taki sam efekt netto. Jednak etapy pracy i szczegóły dotyczące sprzętu mają dużo sensu, aby znajdować się w oddzielnych klasach, ponieważ są to oddzielne jednostki, a nie tylko właściwości zleceń pracy.


title: Czy boostrapping ogranicza osiągalną prędkość nowego kompilatora?

text: Dobrze rozumiem, w jaki sposób kompilator C został boostrapowany od samego siebie i jak musiało to być bardzo wydajne, skoro pierwsza wersja pre-bootstrappingowa została napisana w asemblerze, który jest tak niski, jak to tylko możliwe. ALE dzisiaj mamy zupełnie inną sytuację, z językami pisanymi najpierw w innych językach stosunkowo wysokiego poziomu (np. Clojure). Pytanie 1: Trudno mi sobie wyobrazić, że ** kompilator z ładowaniem początkowym może być _szybszy_ w czymkolwiek niż jego odpowiednik bez ładowania ładowanego. Czy to możliwe?** Pytanie 2: Zwłaszcza gdy zrobisz krok, w którym napiszesz nową wersję swojego kompilatora w nowym języku: **Czy jakieś nieefektywności, które istniały w kodzie niebootstrapowanym, mogą zostać naprawione, czy też jest generowanie kodu nowego kompilatora nawiedzanego przez te wiecznie?** To ma jeszcze większe znaczenie, ponieważ nie możesz łatwo wrócić i naprawić je później!


title: Jak zachować kolejność żądań w tle

text: Mam do czynienia z implementacją interfejsów dla niektórych dość archaicznych systemów, do obsługi wpłat online na konta ze zmagazynowaną wartością (pomyśl o kontach kart kampusowych dla studentów). Oto mój dylemat: etap 1 procesu polega na przekazaniu użytkownika do witryny innej firmy w celu dokonania transakcji kartą kredytową, na przykład w starym systemie PayPal. Krok drugi obejmuje użycie zastrzeżonego protokołu do komunikacji z dotychczasowym systemem w celu przeprowadzenia faktycznego depozytu. Krok drugi wymaga, aby każda transakcja miała unikalny numer sekwencyjny, a numery sekwencyjne żądań były w porządku. Ponieważ rejestrujemy każdą transakcję w Postgresie, moją pierwszą myślą było pobranie liczby z sekwencji w DB, gwarantującej unikalność. Ale ponieważ mamy do czynienia z żądaniami internetowymi, które mogą nadejść niemal jednocześnie, i ponieważ opóźnienie w powrocie z procesora płatności off-ste jest poza naszą kontrolą, zawsze istnieje szansa na sytuację wyścigu w kolejności zwracanych żądań. do zastrzeżonego systemu, a jeśli sekwencje są niesprawne, żądanie nie powiedzie się po cichu (genialne, prawda?). Myślałem o kolejkowaniu żądań w Redis i wykorzystaniu do ich przetwarzania pracowników Resque (pojedynczy pracownik, pojedynczy proces, więc są przetwarzane w kolejności), ale musimy być w stanie przekazać użytkownikowi informację zwrotną, czy transakcja została przetworzona pomyślnie, więc wydaje mi się to mniej wykonalne. Próbowałem sprawić, aby ta aplikacja dobrze obsługiwała współbieżność (tak bardzo, jak to możliwe dla aplikacji Ruby on Rails), ale teraz jesteśmy w sytuacji, w której musimy wchodzić w interakcję z systemem, który jest zaprojektowany jako jednoprocesowy, jednowątkowy i sekwencyjny. Jeśli przynajmniej dał błąd "niezgodności", mógłbym po prostu zwiększyć (lub usunąć następną wartość z sekwencji), ale jest zaprojektowany tak, aby po cichu zawodził w przypadku JAKIEGOKOLWIEK błędu. Obsługujemy limity czasu w sposób, który blokuje we/wy, ale ponieważ aplikacja używa wielu procesów roboczych (jednorożec), nie ma gwarancji. Wszelkie pomysły/sugestie będą mile widziane.


title: Projekt i struktura klas Online Sklep internetowy

text: Mam nadzieję, że zapytałem o to na właściwym forum. Zasadniczo projektujemy sklep internetowy i projektuję strukturę klas do zamówienia produktu i chcę wyjaśnić, co mam do tej pory: Czyli klient przychodzi, wybiera produkt, wybiera ilość i wybiera „Zakup” (ja używam wzorca fasady - więc podsystemy są wykonywane, gdy ta czynność jest wykonywana). Moja struktura klasy: <Zamówienie> <Produkt> <Klient> Nie ma dziedziczenia, więcej Skojarzenie <Zamówienie> ma <Produkt>, <Klient> ma <Zamówienie> . Czy ta struktura wygląda dobrze? Zauważyłem, że nie zajmuję się "Ilością" osobno, chciałem tylko dodać to do klasy "Produkt", ale czy uważasz, że powinna to być klasa sama w sobie? Mam nadzieję, że ktoś może pomóc.


title: Jak zaprojektować relację między Grą a Graczem w grze?

text: Obecnie próbuję stworzyć kolekcjonerską grę karcianą i mam już cały szereg funkcji działających, ale utknąłem teraz w części, w której jeden gracz może zaatakować innego gracza (ściślej: karty potworów innego gracza na boisku ). Gra została zaprojektowana przede wszystkim z myślą o dwóch graczach, chociaż otwarcie jej na przyszłe rozszerzenia nigdy nie jest złym pomysłem. Oto projekt, który do tej pory miałem, pokazany jako minimalistyczny przykład w pseudo-kodzie: class Game Private finał Własny prywatny finał gracza Przeciwnik class Gracz prywatny finał String name ... Gra zapętla się nad wszystkimi graczami i pozwala im wykonywać swoją turę , co może wiązać się z zaatakowaniem innego gracza. Ta metoda ma następującą strukturę: class AttackMonsterAction private final int monsterIndex private final int targetMonsterIndex private final Player targetPlayer public void performAction(final Player player) Jeśli ma to jakieś znaczenie, koduję to w Javie. Moje konkretne pytanie jest następujące: Jak stworzyć projekt mojej klasy tak, aby `AttackMonsterAction` wywoływana z określonego obiektu `Player` mogła odwoływać się do „innego gracza”?


title: Dlaczego Alan Kay powiedział: „Internet był tak dobrze zrobiony, ale sieć była przez amatorów”?

text: OK, więc sparafrazowałem. Pełny cytat: > Internet był zrobiony tak dobrze, że większość ludzi myśli o nim jako o zasobach naturalnych, takich jak Ocean Spokojny, a nie o czymś, co zostało stworzone przez człowieka. > Kiedy ostatnio technologia o takiej skali była tak > wolna od błędów? Dla porównania sieć to żart. Sieć zrobili amatorzy. -> Alan Kay. Próbuję zrozumieć historię Internetu i sieci, a to stwierdzenie jest trudne do zrozumienia. Czytałem gdzie indziej, że Internet jest teraz używany do zupełnie innych celów niż został zaprojektowany, i być może to ma znaczenie. Co sprawia, że Internet jest tak dobrze zrobiony, a co sprawia, że sieć jest tak amatorska? _(Oczywiście Alan Kay jest omylny i nikt tutaj nie jest Alanem Kayem, więc nie możemy dokładnie wiedzieć, dlaczego to powiedział, ale jakie są możliwe wyjaśnienia?)_ *Patrz także _oryginalny wywiad_ *.