title: Jak mogę zainspirować inżynierów do pozytywnego prowadzenia rozmów telefonicznych?

text: Nasza (średnia) firma (zatrudniająca 150 pracowników) odnotowała znaczny wzrost od zeszłego roku, w wyniku czego przeprowadzamy wiele rozmów kwalifikacyjnych, aby zatrudniać coraz więcej inżynierów do uruchamiania nowych projektów. Na początek proces rozmowy kwalifikacyjnej 1. Wznowienie przesiewowe przez dział HR 2. Telefoniczna rozmowa techniczna (przeprowadzona przez senior Engg) 3. Końcowa rozmowa techniczna + HR (przeprowadzona przez kierownika zespołu/PM) Po kilku analizach stwierdziliśmy, że rozmowy telefoniczne tak naprawdę nie stają się efektywne, przez co nie jesteśmy w stanie znaleźć odpowiedniej liczby inżynierów w ostatecznej rozmowie. Moja analiza wykazała, że inżynierowie nie uważają rozmowy kwalifikacyjnej za ważną/poważną czynność, ponieważ jest ona wewnętrzna i nie podlega rozliczeniu. Widzę też, że dla inżynierów noszenie etykietki „przesłuchującego” (przynajmniej przez telefon) nie jest zbyt prestiżowe. Mamy w firmie dobrych, doświadczonych inżynierów, którzy potrafią bardzo skutecznie przeprowadzić każdą rozmowę, ale ponieważ liczba rozmów telefonicznych jest duża, ta pula jest niewystarczająca. Dlatego staramy się korzystać również z innych inżynierów. Co można zrobić, aby zainspirować inżynierów do poważnego i pozytywnego przeprowadzania rozmów telefonicznych (nie traktując tego jako przyziemnej pracy)? * * * [Aktualizacja-2011.12.28] Dziękujemy za podzielenie się cennymi opiniami. To naprawdę pomogło mi spojrzeć na problem z różnych perspektyw. Równolegle omawiałem problemy z kilkoma kolegami i osobiście uważam, że nie ma jednej srebrnej kuli na taką kwestię. Będę musiał myśleć o procesie rekrutacji jako całości i planować usprawnienie różnych obszarów/etapów w nim.


title: Poprawny projekt pętli

text: Jaki jest poprawny projekt pętli „for”? Felix obecnie używa if len a > 0 do for var i in 0 upto len a - 1 do println a.[i]; gotowe, które obejmuje górną granicę. Jest to konieczne do obsługi pełnego zakresu wartości typowego typu liczb całkowitych. Jednak pokazana pętla for nie obsługuje tablic o zerowej długości, stąd specjalny test, ani odejmowanie 1 nie zadziała przekonująco, jeśli długość tablicy jest równa liczbie liczb całkowitych. (Mówię przekonująco, ponieważ może być tak, że 0 - 1 = maxval: to prawda w C dla unsigned int, ale czy na pewno jest to prawda dla unsigned char bez dokładnego zastanowienia się nad integralnymi promocjami?) Rzeczywista implementacja pętli for przez mój kompilator poprawnie obsługuje 0, ale wymaga to dwóch testów, aby zaimplementować pętlę: Continue: if nie (i <= bound) goto break body if i == bound goto break ++i goto Continue break: wrzuć do ręki zakodowane zero check w przykładzie tablicy i potrzebne są trzy testy. Gdyby pętla była wyłączna, prawidłowo obsłużyłaby zero, unikając specjalnego testu, ale nie byłoby sposobu na wyrażenie górnej granicy tablicy o maksymalnym rozmiarze. Zwróć uwagę na sposób C: for(i=0; predicate(i); increment(i)) ma ten sam problem. Predykat jest testowany po inkrementacji, ale kończący inkrement nie jest powszechnie ważny! Istnieje ogólny argument, że wystarczy prosta pętla wyłączności: promuj indeks na duży typ, aby zapobiec przepełnieniu i załóż, że nikt nigdy nie zapętli się do maksymalnej wartości tego typu.. ale nie jestem do końca przekonany: jeśli ty promowany do C's size_t i zapętlony od drugiej największej wartości do największej, otrzymasz nieskończoną pętlę!


title: Rozproszona kontrola wersji dla małych projektów

text: W przypadku bardzo małych projektów (tylko kilku deweloperów), jak efektywne są rozproszone systemy kontroli wersji (np. git) w porównaniu z systemami z centralnym repozytorium? Podoba mi się pomysł posiadania centralnego repozytorium, ponieważ wydaje się o wiele bardziej elegancki i zorganizowany. Jednak po obejrzeniu Google Talk Linusa Torvaldsa mam wątpliwości. Czy jednak wszystkie te korzyści są naprawdę zauważalne przy tak małym projekcie?


title: Czy nauka programowania na iOS tworzy blokadę?

text: Jeśli zaczynam swoją karierę (pierwszą pracę) od programowania na platformie iOS, czy to zamyka mnie tylko w programowaniu na iOS i Mac OS X? Zamykając mnie, mam na myśli wolę, która stworzy dla mnie bariery w zmianie technologii, ponieważ pracowałbym głównie z Objective-C. Jeśli tak, czy to ogranicza moje wybory zawodowe? Jestem zainteresowany porównaniem tego z programowaniem Androida, które jeśli zostanie podjęte, pozostawi mnie z umiejętnościami Java (popraw mnie, jeśli się mylę), których mogę użyć gdzie indziej.


title: Czy powinienem używać klasy lub słownika do przechowywania wartości formularza?

text: Pracuję nad aplikacją C# .NET, gdzie mam formularz z dużą ilością formantów. Muszę wykonać obliczenia w zależności od wartości kontrolek. Dlatego muszę przekazać wartości formularza do funkcji, a wewnątrz tej funkcji zostanie wywołanych kilka funkcji pomocniczych w zależności od elementu Control. Teraz mogę wymyślić dwa sposoby przekazania wszystkich wartości Form: i) Zapisz wszystko w Dictionary i przekaż Dictionary do funkcji lub ii) Posiadaj klasę z atrybutami, które odpowiadają każdemu elementowi Form. Które z tych dwóch podejść lub inne jest lepsze?


title: Pytanie do wywiadu z deweloperem interfejsu użytkownika

text: W wywiadach ciągle dostaję następujące pytanie; a sądząc po reakcjach, które otrzymałem, nie udzielam najlepszej odpowiedzi. „Jakiej metodologii używasz do tworzenia interfejsów użytkownika?” Co wydaje się dość obszernym pytaniem. Jakie są najlepsze praktyki poza podziałem pracy na znaczniki, arkusze stylów i javascript (logikę sterowania)? Czego mi brakuje w tym pytaniu? jakieś pomysły?


title: Czy mogę forkować kod źródłowy Linuksa, zmieniać go tak, aby odpowiadał moim pragnieniom, i twierdzić, że jest to moje własne jądro bez wykonywania jakiejkolwiek pierwotnej pracy?

text: Czy akceptowalną formą jest pobieranie źródeł jądra Linuksa z dowolnej wersji, zmienianie go, twierdzenie, że jest moje, a następnie rozpowszechnianie go dla zysku pieniężnego? W takim przypadku oprogramowanie o otwartym kodzie źródłowym ma prawo do pewnego rodzaju mechanizmu „chwyć, zmień, sprzedaj”, w którym każdy może po prostu majstrować przy czymś, aby wyglądało inaczej niż oryginalne źródło, aby działało to po swojemu i sprzedawać to tak, jakby zrobili to całkowicie sami. Czy to nie jest nielegalne?


title: Podczas pisania interpretera, w jaki sposób algorytm wnioskowania o typie powinien zmienić przeanalizowany AST? Czy powinno?

text: _Podczas pisania interpretera, w jaki sposób algorytm wnioskowania o typie powinien zaryzykować analizowany AST? Czy powinno? _ Czy analizowanie i wnioskowanie są koniecznie wykonywane jednocześnie? Zaimplementowałem silnie typizowany funkcjonalny interpreter języka, w którym każdą funkcję można zadeklarować tylko raz (tj. bez wariantów sygnatur). Gdy tylko parser implementacji bez typu został ukończony i zaczął działać, napisałem algorytm wnioskowania o typie, zasilany przez wynikowy AST parsera. Hindley- _Damas_ -Milner działa jak czar, ale program go używa i jeśli sprawdzanie typu się powiedzie, po prostu zapomina o sprawie i przekazuje AST do interpretera. Do tej pory „język docelowy” (tj. ten, w którym napisany jest interpreter) zaspokajał potrzeby typu interpretera, ale **zastanawiam się, czy takie podejście jest powszechne: odrzucić wszystkie wnioskowania o typie po „ ok."


title: Przykład pełnego kodu Eloqua API w JAVA

text: **Czy jest ktoś, kto opanował programowe pobieranie niektórych danych z Eloqua?** Przede wszystkim jestem mniej więcej nowicjuszem, jeśli chodzi o JAVA. Mogę podążać za samouczkami, przyjmować wskazówki i będę Google, aż moje palce będą krwawić. Rozumiem podstawy i jestem trochę zaznajomiony z OOP. Moim głównym problemem jest to, że mam termin na piątek (a jutro jest Święto Dziękczynienia). W każdym razie wszystkie fragmenty kodu Eloqua (które udało mi się znaleźć) ilustrują jeden aspekt konkretnego problemu i to wszystko. W moim przypadku **Byłbym bardzo wdzięczny za jakiś projekt JAVA** , ze wszystkimi niezbędnymi plikami do obsługi usług internetowych (WSDL, SOAP i być może WSIT) oraz główną klasą i wszystkim, co zawiera. Nie, nie chcę, żebyś wykonał dla mnie moją pracę! Daj mi tylko tyle, żebym mógł się odnaleźć, wprowadzić informacje, które muszę odzyskać i tak dalej. Zajmę się tym stamtąd. Jakieś wskazówki, linki lub sugestie?


title: Co słychać w idiomie Class::get(id) w PHP?

text: Jestem nowym programistą PHP (pochodzę z .NET). Doświadczony programista php, z którym pracuję, powiedział, że wywołanie statycznej metody get na klasie PHP z identyfikatorem jako parametrem jest powszechne w PHP. Czy istnieje nazwa tego idiomu? Czy istnieje powód, dla którego programiści to robią? Czy ktoś może wskazać link do przykładowej klasy? Chciałbym lepiej zrozumieć to, co mówi. Mówi o takim kodzie, jak sądzę, aby wyciągnąć samochód nr 1 z bazy danych: $samochód = Samochód::get(1)


title: Czy Java jest „martwa w wodzie” w wyniku zakupu Sun przez Oracle, a następnie pozwania Google?

text: Google wprowadził wiele przydatnych funkcji Java (guava, gson); Czy teraz, gdy firma Oracle kupiła firmę Sun, wpłynie to na jej przyszłe ulepszenia i wykorzystanie jako języka programistycznego? Jakie dokładnie, a nawet w przybliżeniu, są konsekwencje prawne? Myślałem, że Java jest open source i dlatego pozostanie nienaruszona ...? Czy Google powinien po prostu kupić Oracle, aby pozbyć się całego bałaganu, byłoby fajnie, prawda? Czy uważasz, że to początek końca Java jako powszechnie używanego języka? Jego dalszy sukces jako otwartej/wolnej technologii jest teraz wątpliwy?


title: Ogólne zasady pisania kompilatora X do Z w Y

text: Załóżmy, że X to język wejściowy, Z to język wyjściowy, a następnie f to kompilator napisany w języku Y. f = X -> Z Ponieważ f jest tylko programem, myślę, że Y może być dowolnym językiem, prawda? Możemy więc mieć kompilatory f1, f2, każdy napisany w Y1, Y2. f1 = f Y1 f2 = f Y2 g = Z -> M h = g . f # Otrzymujemy kompilator X -> M Weźmy na przykład kompilator cpython, X to Python, Z to kod VM Pythona, Y to C. cpython = Python -> PythonVMCode C interpreter = PythonVMCode -> Nothing interpreter2 = PythonVMCode -> MachineCode Źródła Pythona są kompilowane do kodu Python VM, plików .pyc, a następnie interpretowane przez interpreter. Wygląda na to, że istnieje kompilator, który może bezpośrednio wykonywać Python -> MachineCode, choć jest to bardzo trudne do zaimplementowania: hardpython = interpreter2 . cpython Możemy też napisać inny kompilator wykonujący pracę Python -> PythonVMCode, w innym języku, powiedzmy sam Python. mypython = Python -> PythonVMCode Python mypython2 = Python -> PythonVMCode Ruby Oto skomplikowany przykład PyPy. Jestem tylko nowicjuszem PyPy, popraw mnie, jeśli się mylę: PyPy doc http://doc.pypy.org/en/latest/architecture.html#pypy-the-translation-framework > Naszym celem jest zapewnienie możliwe rozwiązanie problemu języka > implementatorów: konieczność pisania l * o * p interpreterów dla l dynamicznych języków > i p platform z o kluczowymi decyzjami projektowymi. Możemy myśleć, że l to X, p to Y. Istnieje program, który tłumaczy wszystkie programy RPythona na C: rpython_compiler = RPython -> C Python pypy = Python -> Nic RPython translate = skompiluj program pypy napisany w RPythonie przy użyciu rpython_compiler py2rpy = Python -> RPython Python py2c = Python -> C Python py2c = rpython_compiler . py2rpy Programy RPython są takie same jak instrukcje VM, rpython_compiler to VM. **q1.** pypy to interpreter, program RPython, który potrafi interpretować kod Pythona, nie ma języka wyjściowego, więc nie możemy uznać go za kompilator, prawda? Dodano: * Właśnie odkryłem, że nawet jeśli po przetłumaczeniu pypy nadal jest interpreterem, tylko tym razem napisanym w C. * Jeśli zajrzymy głęboko do interpretera pypy, uważam, że musi istnieć jakiś kompilator, który kompiluje Pythona źródła do jakiegoś AST, a następnie wykonaj tak: compiler_inside_pypy = Python -> AST_or_so **q2.** Czy może istnieć kompilator py2rpy, który przekształca wszystkie programy w Pythonie do RPython? Nie ma znaczenia, w jakim języku jest napisane. Jeśli tak, otrzymujemy kolejny kompilator py2c. Jaka jest różnica między pypy a py2rpy w naturze? Czy py2rpy jest dużo trudniejsze do napisania niż pypy? **q3.** Czy istnieją jakieś ogólne zasady lub teorie na ten temat? Więcej kompilatorów: gcc_c = C -> asm? C # nie jesteś pewien, gimple czy rtl? g++ = C++ -> asm? C clang = C -> LLVM_IR C++ jython = Python -> JVMCode java ironpython = Python -> CLI C# **q4.** Biorąc pod uwagę f = X -> Z, program P napisany w X. Kiedy chcemy przyspieszyć P , co możemy zrobić? Możliwe sposoby: * przepisz P w bardziej wydajnym algorytmie * przepisz f, aby wygenerować lepsze Z * jeśli Z jest interpretowane, napisz lepszy interpreter Z (tutaj jest PyPy?) * przyśpiesz programy pisane w Z rekurencyjnie * uzyskaj lepszą maszynę ps. To pytanie nie dotyczy techniki pisania kompilatora, ale wykonalności i złożoności napisania pewnego rodzaju kompilatora.


title: Problem optymalnej receptury

text: Załóżmy, że mam listę składników w mojej lodówce, które wkrótce wychodzą, oraz listę przepisów, które wykorzystują różne składniki. (Niektóre z nich obecnie nie mam.) Czy istnieje algorytm, który tworzy optymalny zestaw przepisów, w którym optymalny zestaw maksymalizuje liczbę zużytych składników w mojej lodówce i minimalizuje liczbę składników, które muszę kupić od Sklep? (Sformułowanie alternatywne: w grze karcianej mogę łączyć niektóre Karty zgodnie z różnymi Regułami; Mogę również zdobywać nowe Karty na różne sposoby. Jak znaleźć najlepszy zestaw Zasad, aby wykorzystać jak najwięcej Kart przy minimalnym wysiłku w zdobywaniu nowych Kart?)


title: Gevent - Spraw, aby połączenia blokujące były nieblokujące

text: Mam kod blokujący pokazany poniżej. Czy wywołanie `monkey.patch_all()` jest wystarczające/optymalne, aby nie blokowało? Czy Gevent obsługuje takie iteracje? # strona główna def front_page(): database = db.posts.find() # znajdź wszystkie elementy w kolekcji postów return render_template( 'index.html', database=database ) # pojedynczy post def single_post(slug): post = [v for k,v in db.posts.find_one( {'slug': slug} ).iteritems() ] # iteruj po znalezionych elementach i przechowuj je jako post return render_template( 'post.html', title=post[3], body=post[0], slug=post[2] ) # wyodrębnij tytuł, ślimak i ciało


title: Czy ten argument może wystarczyć?

text: Mamy dwie klasy C++ o nazwach `Important` i `Small` Klasa `Small` używa kilku metod i atrybutów z klasy `Important`, ale nie wszystkich. Ponieważ nasza aplikacja ma krytyczne znaczenie dla wydajności, zamiast kopiować wszystkie atrybuty (prawdopodobnie wskaźniki) `Ważne`, które są potrzebne w `Small` i przedefiniować kilka metod w `Small`, zdecydowaliśmy się po prostu pozwolić `Small` trzymać wskaźnik na ` Ważne`. Czy wydajność uzasadnia taki wybór projektu?


title: Test tematyczny GRE CS: Czy możesz polecić najlepsze książki do przeczytania?

text: Jestem od dawna profesjonalnym programistą C, planującym dostać się na studia magisterskie z informatyki. Uniwersytet wymaga, abym przedstawił wyniki testu przedmiotowego GRE CS. Mam zamiar siedzieć na nim w nadchodzącym październiku i do tego czasu muszę się do tego przygotować. Nie mam licencjatu CS, więc sugestie przeczytania moich tekstów licencjackich nie byłyby pomocne. Które książki poleciłbyś mi kupić i przeczytać, które będą obejmować maksymalny procent tematów testowych? Podział testu obejmuje: > **I. SYSTEMY OPROGRAMOWANIA I METODOLOGIA — 40%** > > A. Organizacja danych > > Typy danych > > Struktury danych i techniki implementacji > > B. Kontrola i struktura programu > > Iteracja i rekurencja > > Procedury, funkcje, metody i procedury obsługi wyjątków > > Współbieżność, komunikacja i synchronizacja > > C. Języki programowania i notacja > > Konstrukcje do organizacji danych i kontroli programu > > Zakres, wiązanie i przekazywanie parametrów > > Ewaluacja wyrażeń > > D. Inżynieria oprogramowania > > Formalne specyfikacje i twierdzenia > > Weryfikacja techniki > > Modele, wzorce i narzędzia tworzenia oprogramowania > > Systemy E Narzędzia do analizy i rozwoju systemu > > **II. ORGANIZACJA I ARCHITEKTURA KOMPUTERÓW — 15%** > > A. Projektowanie logiki cyfrowej > > Implementacja układów kombinacyjnych i sekwencyjnych > > Optymalizacja i analiza > > B. Procesory i jednostki sterujące > > Zestawy instrukcji > > Arytmetyka komputerowa i reprezentacja liczb > > Organizacja rejestru i jednostek ALU > > Ścieżki danych i sekwencjonowanie sterowania > > C. Pamięci i ich hierarchie > > Wydajność, implementacja i zarządzanie > > Pamięć podręczna, pamięć główna i wtórna > > Pamięć wirtualna, stronicowanie i segmentacja > > D. Sieci i komunikacja > > Struktury połączeń (np. magistrale, przełączniki, routery) > > Systemy i protokoły we/wy > > Synchronizacja > > E. Architektury o wysokiej wydajności > > Potokowanie procesorów superskalarnych i poza kolejnością > > Architektury równoległe i rozproszone > > **III. TEORIA I MATEMATYKA — 40%** > > A. Algorytmy i złożoność > > Dokładna i asymptotyczna analiza określonych algorytmów > > Algorytmiczne techniki projektowania (np. zachłanne, dynamiczne programowanie, dziel i > zwyciężaj) > > Górne i dolne granice złożoność konkretnych problemów >> Złożoność obliczeniowa, w tym NP-zupełność >> B. Automaty i teoria języków >> Modele obliczeń (automaty skończone, maszyny Turinga) >> Języki formalne i gramatyki (zwykłe i bezkontekstowe) >> Rozstrzygalność > > C. Struktury dyskretne > > Logika matematyczna > > Elementarna kombinatoryka i teoria grafów > > Prawdopodobieństwo dyskretne, relacje rekurencyjne i teoria liczb > > **IV. INNE TEMATY — 5%** > > Przykładowe obszary to analiza numeryczna, sztuczna inteligencja, grafika komputerowa, kryptografia, bezpieczeństwo i kwestie społeczne.


title: Przedstawiamy „20% czasu” w miejscu pracy

text: 20% czasu to kultura pracodawcy pozwalająca pracownikom spędzać 20% czasu na pracy nad projektami, które uważają za interesujące – może to być wymyślanie nowej aplikacji, ulepszanie istniejącego procesu itp. Niektórzy ludzie _mogą_ znać to jako skunks praca, jednak termin ten może nic dla Ciebie nie znaczyć (lub coś zupełnie innego). Istnieje wiele udokumentowanych przypadków, w których świetne produkty powstają z 20% pracy skunksa w firmie. Wydaje się, że sytuacja jest wygrana/wygrana; firma potencjalnie zyskuje świetny nowy produkt lub aplikację, a programista ma możliwość nagiąć swoje kreatywne mięśnie i wprowadzić innowacje. Wielokrotnie próbowałem wprowadzić jakąś formę 20%/Skunk pracy u mojego poprzedniego pracodawcy bez powodzenia. Jak mogę lepiej uzasadnić to kierownictwu? Jaki jest „właściwy” sposób podejścia do tego rodzaju organizacji pracy?


title: Wektor wskaźników do różnych klas pochodnych tej samej klasy bazowej

text: Piszę grę w C++, która ma różne typy wrogów. Zdefiniowałem podstawową klasę **_Enemy_** i mam też klasy pochodne **_enemy1_** , **_enemy2_** itd. Teraz do aktualizacji tych wrogów w każdej iteracji gry chcę mieć tablicę: * *_EnemyArray_** z elementami wskazującymi na istniejących wrogów, abym mógł zaktualizować je wszystkie za pomocą własnej wersji **_update()_** , itd. Jednym ze sposobów na zrobienie tego byłoby zdefiniowanie oddzielnych tablic dla każdego typu wroga i byłby to czysty sposób na rozwiązanie problemu. Zastanawiałem się jednak, czy fakt, że wszystkie te wrogie klasy pochodzą z tej samej klasy bazowej, umożliwia w jakiś sposób posiadanie mojej EnemyArray jako tablicy **_Enemy_** i dokonywanie później pewnych modyfikacji.


title: Czym jest sieć neuronowa w prostych słowach

text: Czy możesz wyjaśnić sieci neuronowe w _prostych słowach_ na przykładzie?


title: Pojedyncza odpowiedzialność: jak ten kod powoduje problemy?

text: Biorąc pod uwagę następujący interfejs interfejsu Modem { public void Dial(string pno); public void Hangup(); public void Wyślij(char c); znak publiczny Recv(); } Wujek Bob pisze > Jednak są tu pokazane dwie odpowiedzialności. Pierwszym > obowiązkiem jest zarządzanie połączeniami. Drugi to komunikacja danych. > > ... > > Czy te dwie odpowiedzialności należy rozdzielić? To zależy od tego, jak zmienia się aplikacja. Jeśli aplikacja zmieni się w sposób, który ma wpływ na > _sygnaturę funkcji connection_, projekt będzie pachniał > sztywnością, ponieważ **klasy, które wywołują _send_ i _read_ będą musiały być > rekompilowane i wdrażane ponownie częściej niż chcemy**. Czy ktoś może mi wyjaśnić, w jaki sposób podświetlone stwierdzenie jest prawdziwe? Dlaczego musiałbym ponownie kompilować kod, który wywołuje metody wysyłania/odbierania, jeśli zmieni się sygnatura połączenia? Mogłem wstrzyknąć gotowe połączenie do kodu za jego pomocą.


title: Tworzenie aplikacji mobilnych – architektura/platforma: Główny problem dotyczący wydajności: responsywność urządzenia/interfejsu użytkownika

text: Obecnie badam różne alternatywy dla budowania mobilnej aplikacji do obsługi wiadomości błyskawicznych na iOS i Androida, używając serwera XMPP (prawdopodobnie ejabberd) jako zaplecza. Główne wymagania to ładny interfejs użytkownika i oczywiście dobra wydajność na większości urządzeń. Zidentyfikowałem trzy różne alternatywy, z których dwie obejmują użycie Marmalade SDK Option A): Użyj Marmalade C++, tworząc interfejs użytkownika za pomocą bibliotek Marmalade, takich jak IwNUI/INUI. W tej opcji interfejs użytkownika jest tworzony w kodzie C++. Zakładam, że powinno to być dobre pod względem wydajności, jednak nie jestem pewien, jak łatwo jest uzyskać ładny, niestandardowy interfejs użytkownika, który ma dobry/nowoczesny charakter, taki jak inne wysokiej jakości aplikacje. Kolejna zaleta: byłoby to ukierunkowane na system iOS/Android z jedną bazą kodu. Opcja B): Również Marmalade, używając C++ s3eWebView API do ładowania lokalnych stron internetowych spakowanych w pakiecie aplikacji. Interfejs użytkownika zostałby zaprojektowany na tych stronach internetowych przy użyciu HTML/CSS/JavaScript. Do logiki aplikacji można użyć JavaScript lub C++, ponieważ istnieje most JavaScript (http://docs.madewithmarmalade.com/display/MD/The+Javascript+interface) do komunikacji między C++ a kodem JavaScript. Celowałby również w iOS/Androida za jednym razem. Opcja C): Bez marmolady: Idź z dwoma bazami kodu. Użyj Objective-C (tj. „standardowego sposobu”) dla iOS i Google Android SDK dla Androida. Zbuduj aplikację dwukrotnie. Obecnie skłaniam się ku Opcji B, ponieważ pozwoliłoby to na użycie jednej bazy kodu i wykorzystanie istniejących technologii HTML5/CSS/JavaScript (fajne zwłaszcza dla UI) wraz z możliwością korzystania z C++. Jednak moje obawy dotyczą tego, czy reakcja urządzenia/interfejsu użytkownika będzie w tym przypadku akceptowalna. Przeprowadziłem kilka wstępnych testów prostych rzeczy, takich jak ładowanie rozwijanych menu CSS3 do s3eWebView przez C++, i wydaje się to dość responsywne (tj. Menu rozwija się szybko i płynnie).


title: Jak deterministyczne są identyfikatory SessionID z identyfikatorów GUID z SHA?

text: Załóżmy, że używam następującego kodu do generowania pseudolosowych identyfikatorów sesji: sessionID = SHA-512(GENERATE-GUID()) Identyfikatory GUID są dość deterministyczne, tj. Widzę wiele identyfikatorów GUID z wieloma tymi samymi liczbami szesnastkowymi. Moje proste pytanie brzmi: Jak deterministyczne są moje wynikowe identyfikatory sesji? Algorytmy SHA mają tworzyć bardzo różne skróty, nawet jeśli niewielka liczba bitów jest różna ze względu na efekt kaskadowy, więc jak łatwo można „odgadnąć” (w rozsądnym czasie) inny identyfikator sesji z wynikowych skrótów?


title: Czy można zmodyfikować natywny plik wykonywalny i zmienić (dynamiczną) bibliotekę, od której zależy?

text: Powiedzmy, że kompiluję prostą aplikację o nazwie `myproggy`, która zależy od biblioteki dynamicznej `libfoo`. Zakładając, że mam inną dynamiczną bibliotekę `libbaz`, która implementuje absolutnie ten sam interfejs (innymi słowy ma definicje tych samych funkcji co libfoo), czy można zmodyfikować `myproggy` tak, aby zależała od `libbaz` bez potrzeby przebudowy ? Mogę to łatwo zrobić w przypadku, gdy mogę dynamicznie załadować bibliotekę, ale co jeśli nie mogę, a także nie mogę ponownie skompilować biblioteki? Mam też świadomość związanych z tym kwestii bezpieczeństwa.


title: Jak ta relacja powinna być ustrukturyzowana w relacyjnej bazie danych?

text: W ostatnim projekcie zostałem poproszony o wdrożenie systemu eventowego. „Wydarzenie” musiało mieć „Lokalizacja”, która pierwotnie została określona jako zwykła fizyczna lokalizacja z kilkoma opcjonalnymi dodatkowymi uwagami. Potem zmieniła się specyfikacja (jak mają w zwyczaju) i musieliśmy też organizować wydarzenia „online”. Nie miałyby one fizycznego adresu, ale nadal potrzebowałyby notatek dotyczących sposobu uczestnictwa (np. adresu URL, instrukcji dołączania). Zdecydowaliśmy się dostosować istniejącą tabelę Location poprzez dodanie pola `IsOnline` i wyglądało to tak: +-----------------+ +------- --------+ | Wydarzenie | | Lokalizacja | +------+ +---------------+ | Identyfikator | .--+ Identyfikator | | Nazwa | | | Nazwa | | Podsumowanie | | | Adres | | Data | | | Kod pocztowy | | Pojemność | | | IsOnline | | Identyfikator lokalizacji +--' | Notatki | +-----------------+ +---------------+ Przykład fizycznego i internetowego wpisu w wyglądzie tabeli Lokalizacja w ten sposób: +----+----------------+------------------------- --------------+----------+----------+----------------- --------------------------+ | Identyfikator | Nazwa | Adres | Kod pocztowy | IsOnline | Notatki | +----+----------------+--------------------------- -----------+----------+----------+----- -----------------------+ | 1 | Wydarzenie fizyczne | 10 Downing Street, Londyn | SW1A 2AA | 0 | Poproś policjanta o wpuszczenie | | 2 | Wydarzenie online | http://programmers.stackexchange.com | zero | 1 | Będziesz potrzebować konta stackexchange | +----+----------------+--------------------------- -----------+----------+----------+----- -----------------------+ Działa (obecnie) w naszym prostym przypadku użycia, ale wyraźnie jest to trochę hack i dał mi do myślenia - co byłby prawidłowym, znormalizowanym sposobem modelowania tego rodzaju relacji (gdzie jednostka musi mieć A lub B, ale nie oba)?


title: Jeśli miałbym twierdzić, że znam C++, jakich bibliotek byś się spodziewał?

text: Nie jestem pewien co do definicji znajomości języka programowania, więc jako przykład wybieram C++. Ile potrzeba, aby ktoś został zakwalifikowany jako znający C++? * Czy powinni znać podstawową składnię? * Szablon i programowanie generyczne? * Flagi kompilatora i ich przeznaczenie (ściana, różnica między O1, O2 i O3)? * STL? * Strategie zbierania śmieci? * Zwiększyć? * Wspólne biblioteki, takie jak zlib, curl i libxml2?


title: Zintegrowane okno konsoli PowerShell

text: Chciałbym mieć otwartą kartę dla programu PowerShell wewnątrz mojego VS2012. Istnieją inne konsole, do których mam dostęp, takie jak „Okno poleceń” i „Konsola menedżera pakietów”. Czy jest jakiś sposób na otwarcie okna konsoli Powershell? Załączam obrazek, który pokazuje, gdzie chciałbym zobaczyć okno PS.![tutaj wpisz opis obrazu](http://i.stack.imgur.com/zgwn8.png) http://i.imgur.com/ kDs9Yhv.png


title: Proste C: Jak prawidłowo zeskanować te informacje?

text: OK, to proste pytanie, ale z jakiegoś powodu po prostu nie potrafię odpowiedzieć poprawnie. Muszę zeskanować z pliku setki linii kodu i zapisać go w tablicy (z którą normalnie mogę wykonać dobrą robotę), jednak w pewnym momencie kod określi liczbę, która następnie odpowiada następnej partii znaków ints i pływa w różnych tablicach. Jak wiem, nie opisuję tego poprawnie, oto przykład. jeden wiersz pliku, który czytam, będzie zawierał coś zbliżonego do tego. > 0221 T 2 S P 850 150 0,90 0,75 500 24 2 2012 G A 7 9600,00 0,1 1000 > Nazwa_miejsca > > 0104 L 1 F 400 1,00 0,75 500 24 2 2012 G A 7 9600,00 0,1 1000 Sala balowa Mam problem z tą częścią > 0221 T **2 S P 850 150** 0,90 0,75 500 24 2 2012 G A 7 9600,00 0,1 1000 > Nazwa miejsca > > 0104 L **1 F 400** 1,00 0,75 500 24 2 2012 G A 7 9600,00 0,1 1000 Sala balowa Reszta po tym jest Generalnie dokładnie to samo, jednak w tym momencie liczba z przodu decyduje o wszystkich wartościach, które wchodzą. Niemal całkowicie nie wiem, jak napisać sposób, który może to zeskanować i poprawnie przechowywać dane w tablicach


title: Jak nazwać zmienną, gdy słowo jest zarówno rzeczownikiem, jak i czasownikiem?

text: Natknąłem się na problem narożny z ogólnymi wytycznymi: * rzeczowniki dla zmiennych * czasowniki dla funkcji W szczególności mam przypadek, w którym słowo jest niejednoznaczne - może być albo czasownikiem **_lub_** rzeczownikiem. A w niektórych przypadkach, gdy omawiamy aplikację, zostanie ona użyta _na oba_ sposoby w tym samym zdaniu. Moim zamiarem jest upewnienie się, że program pozostanie czytelny dla przyszłych programistów, a także dla mnie, gdy wrócę do sekcji kodu kilka miesięcy później. Jednym z przykładów jest „bateria”. `Bateria` ma `charge` i możesz również `charge()` baterię. Myślę, że posiadanie zarówno `Battery.Charge` jak i `Battery.Charge(value)` będzie mylące dla przyszłych programistów. Moim obecnym rozwiązaniem jest po prostu wybranie innego słowa dla jednego lub obu tych przypadków (zmienna i funkcja). Mój problem z takim podejściem polega na tym, że zmienna obiektu `Bateria` i funkcja dla `ładowania` nie zgadzają się z dyskusjami projektowymi dotyczącymi `Baterii`. **Moje pytanie brzmi, czy istnieje inny/lepszy sposób na poradzenie sobie z tym konfliktem w konwencji nazewnictwa?** * * * Trochę dodatkowej lektury na ten temat. Żaden tak naprawdę nie odnosił się do konkretów mojego pytania. * Istotne zwięzłe wytyczne nazewnictwa metod * Konwencje nazewnictwa dla zmiennych * Wybrana odpowiedź z Jakich wytycznych nazewnictwa stosujesz?


title: Niestandardowe mojo i narzędzia maven

text: Piszę wtyczkę maven, która opiera się na kilku narzędziach java. Jestem z niego całkiem zadowolony i chcę się nim podzielić ze społecznością. Interesuje mnie prawidłowy sposób obsługi zależności od tych narzędzi: 1. Użyj zwykłego sposobu zależności - umieść w centralnym repozytorium. Ale nie jestem właścicielem tych narzędzi i nie zamierzam ich konserwować. Ale mógłbym rozpocząć dyskusję z autorem 2. Jak widziałem kilka innych wtyczek wymaga od użytkownika pobrania tych narzędzi i podania ścieżki do nich poprzez konfigurację. Ale są to narzędzia java, a także jest to znacznie mniej wygodne dla końcowych użytkowników. Pytam społeczność, co byłoby najlepsze i "właściwe" w sposób, aby sobie z tym poradzić.


title: Projekt RESTful: wiele relacji między tymi samymi 2 podmiotami

text: Jestem w trakcie projektowania usług internetowych RESTful i utknąłem w pewnym momencie. Projekt jest bardzo prosty z 3 jednostkami: - Projekt - Status - Pracownik Część, z którą mam problem, to uchwycenie relacji: - Projekt ma aktualny status (1 do 1 między Projektem a Statusem). - Projekt ma wiele „możliwych kolejnych statusów” (1 do wielu pomiędzy projektem a statusem). Projektant programu Visual Studio nie zezwala na definiowanie tych dwóch różnych relacji między tymi dwiema jednostkami. Zdaję sobie sprawę, że to tylko narzędzie do modelowania, ale jednocześnie chcę wiedzieć, czy to właściwe podejście. Ponadto w przypadku tego projektu nie jestem pewien, jak uzyskać dostęp do encji Status przy użyciu tych dwóch relacji. http://serviceRootURL/Project(2)?$expand=Status // Dla bieżącego statusu http://serviceRootURL/Project(2)?$expand=SubsequentStatus // Dla kolejnego statusu Czy można używać dowolnych nazw relacji z rozwinąć słowo kluczowe? _(Pytanie prawdopodobnie dotyka również trochę OData, ponieważ staram się, aby moja biblioteka była zgodna z OData.)_


title: Czy są jakieś zalety korzystania z DVCS dla samodzielnego programisty?

text: W tej chwili używam visual svn na moim serwerze i mam ankhsvn/tortoise na moim osobistym komputerze. Działa wystarczająco dobrze i nie muszę się zmieniać, ale jeśli widzę jakieś korzyści z używania DVCS, mogę spróbować. Jeśli jednak nie ma sensu używać go bez innych ludzi, to nie będę się tym zawracał. Więc ponownie, pytam, czy są jakieś korzyści z używania DVCS, gdy jesteś jedynym programistą?


title: Zamoczyć stopy w open source – tworzyć mały projekt na własnym VS, przyczyniając się do dużego?

text: Chcę przyczynić się do społeczności open source, ale nigdy wcześniej tego nie robiłem i mam pewne obawy dotyczące procesu współpracy - obawiam się, że po prostu „wpadnę w drogę” innym programistom i od tego czasu (ja załóżmy), że są dość uprzejmymi facetami, będą się źle czuć, mówiąc mi, żebym się odczepił. Wyobrażam sobie takie rzeczy, jak dodanie funkcji X w wersji 1.3.0, aby zdać sobie sprawę, że tak naprawdę było w wersji 1.1.5, ale została ona celowo usunięta w wersji 1.1.8 z powodu Y. Jako niezależny wykonawca (freelancer) pracuję bardzo rzadko z innymi programistami, jako zespołem, i rozumiem, że współpraca programistyczna to złożony obszar (przeczytałem kilka książek o zarządzaniu dużymi zespołami, wydaje się, że jest to delikatny obszar, przynajmniej dla mnie). Na moje aktualne pytanie - czy powinienem zacząć od czegoś małego (co stworzę) i czekać, aż dołączą do niego inni współpracownicy (ci, którzy będą wiedzieć, jak "to działa", tak abym mógł powoli skupić się na części dotyczącej współpracy ), czy też powinienem spróbować dołączyć do dużego projektu, w którym jest dużo aktywności, abym mógł zobaczyć duży obraz (ale ryzykując, że będzie to dla nich ból) ?


title: Czy powinienem zachęcać młodszych programistów do używania jawnego lub niejawnego pisania?

text: Chcę zasięgnąć opinii społeczności na temat tego, czy wskazane byłoby nauczenie młodszych programistów kodowania z niejawnym typowaniem (przy użyciu var), czy też powinienem zachęcać do używania typów jawnych. To nie jest tak naprawdę pytanie o zalety lub wady niejawnego typowania. Młodsi programiści (przynajmniej ci, z którymi mam do czynienia) mają tendencję do rozwijania bardzo długotrwałych nawyków kodowania w pierwszych latach pracy jako zawodowi programiści, a ja staram się przemyśleć potencjalne wady rozpoczynania programisty z niejawnym podejściem do pisania. Czy istnieją konkretne scenariusze, które uzasadniałyby propagowanie jawnego pisania? A co w ramach dyscypliny TDD? **A w kwestii ReSharper...** @Eben Geer wspomniał o ReSharper w swojej odpowiedzi. Czy powinniśmy zachować domyślną sugestię używania niejawnego wpisywania w szablonach inspekcji używanych przez naszych młodszych programistów?


title: Kod funkcji + kod infrastruktury - jak ustrukturyzować commity / kwestie JIRA?

text: Załóżmy, że pracujesz nad funkcją opisaną przez **pojedynczy bilet JIRA** i podczas pracy: 1. Tworzysz **kod specyficzny dla funkcji**, taki jak GUI lub określone zachowanie przypadku użycia. 2. Część kodu była ogólna, więc umieściłeś ten **kod infrastruktury** we współdzielonej bibliotece. Jako przykład (celowo prosty) powiedz, że bilet dotyczy zmiany wiadomości gdzieś w aplikacji i że wiadomość powinna zawierać gdzieś w niej bieżący rok. Więc najpierw zmieniasz kod PHP, w którym znajduje się wiadomość, a także tworzysz funkcję pomocniczą `getCurrrentYear()` w swojej bibliotece `DateUtils`. Jaka jest obecnie najlepsza praktyka przechowywania tych zmian w repozytorium kodu źródłowego i przypisywania tych zmian kodu do biletów JIRA? (Przypisanie zatwierdzenia do ticketa JIRA oznacza w naszym przypadku dodanie tagu do komunikatu zatwierdzenia, na przykład _"Zaimplementowana funkcja #123"_.) Jak widzę, są następujące główne opcje: 1. Utwórz jeden zatwierdzenie i przypisz w do danego biletu JIRA. 2. Utwórz dwa zatwierdzenia (jeden dla logiki przypadku użycia i jeden dla kodu infrastruktury). Przypisz oba do jednego biletu JIRA. 3. Przypisz tylko zatwierdzenie specyficzne dla funkcji do problemu JIRA i pozostaw inne nieprzypisane (podczas przeglądania zgłoszenia w JIRA, tylko pierwszy zatwierdzenie będzie widoczny w zakładce "kod źródłowy"). 4. Podobny do 3, ale masz ogólne zgłoszenie, takie jak „Ulepszenia infrastruktury”. Czy istnieje najlepsza praktyka / zalecany sposób? Jakie są korzyści i problemy wynikające z różnych możliwości?


title: Projektowanie bazy danych - Optymalizacja relacji

text: Mam zamiar rozpocząć przeprojektowanie aplikacji, w której odpytywanie bazy danych jest szczególnie irytujące. Zamierzam przeprojektować bazę danych tak bardzo, jak to możliwe, ale kształt danych nie może się zbytnio zmienić. Baza danych zawiera tabelę główną i 10 innych tabel, z których każda reprezentuje typ rekordu. Główna tabela zawiera wszystkie dane wspólne dla typów rekordów. Identyfikator rekordu, DateLogged itp. Łącznie około 30-40 kolumn. Wszystkie pozostałe tabele są zupełnie inne, ponieważ każdy typ rekordu bardzo się od siebie różni. Wszystkie mają po około 20-30 kolumn. Główna tabela ma kolumnę o nazwie type, która jest int. Jednak nigdzie nie odnosi się do typów rekordów, do których odnoszą się numery typów. Możesz to sobie wyobrazić, patrząc na procedury. Główna tabela musi łączyć się z tabelą każdego typu, aby umożliwić wyszukiwanie. Dodałem obraz przedstawiający to, co próbuję opisać. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/FbdZp.png) Czy istnieje lepszy sposób na tworzenie tych relacji? Chciałbym porzucić pełne procedury przechowywane używane z ADO.NET i przenieść się do EF. Muszę wymyślić lepszy sposób powiązania danych, aby ludzie w przyszłości nie musieli wypracowywać relacji, przeszukując zapisane procedury w poszukiwaniu wskazówek.


title: Projektujesz solidną architekturę dla wielu typów eksportu?

text: Szukam wzorców lub wskazówek architektonicznych dotyczących nadchodzącej funkcji, którą projektuję. Zasadniczo jest to funkcja eksportu z wieloma celami eksportu i szukam sposobu, aby była wystarczająco ogólna, gdy podłączanie nowych celów eksportu nie wymaga wielu podstawowych zmian. Przez cele eksportu mam na myśli po prostu różne typy danych wyjściowych, czy to PDF, prezentacje PowerPoint, dokumenty Word, RSS itp. Mam podstawowy zestaw danych, który jest reprezentowany w JSON i XML. Dane te są wykorzystywane do konstruowania obrazów (przy użyciu dowolnych typów liczb lub eksportu [np. PNG, JPG, GIF itp.), wykresów, reprezentacji tekstowych, tabel i innych. Próbuję znaleźć sposób na wyabstrahowanie całego renderowania i układu do jakiegoś rodzaju silnika renderowania lub układu, który obsługuje dodawanie dalszych celów eksportu. Wszelka pomoc/sugestie/zasoby, jak do tego podejść, byłyby bardzo mile widziane. Z góry dziękuję. Za obrazową reprezentację tego, co staram się osiągnąć. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/aAvE9.png)


title: TDD: Co się dzieje przed pierwszym testem jednostkowym?

text: Głównie rozumiem teorię TDD, ale nie wiem, jak zacząć. Siadam do napisania testu jednostkowego na własny projekt i realizuję. . . Nie mam pojęcia, co testuję. Jakie obiekty, jaka funkcjonalność itp. Powiedzmy, że chcę napisać aplikację, która pomoże naszej rodzinie zarządzać zadaniami domowymi. Oto kilka pytań, które mam w głowie: Jak przejść od tego pomysłu do mojego pierwszego testu? Ile powinienem zdecydować przed rozpoczęciem, a ile obliczyć po rozpoczęciu pisania testów? Kiedy podejmuję decyzje typu, czy przechowywać dane w pliku tekstowym, czy w bazie danych? Czy powinienem przeprowadzić testy akceptacyjne użytkowników przed rozpoczęciem? Czy powinienem zaprojektować interfejs użytkownika? Czy powinienem mieć specyfikację? (Zdaję sobie sprawę, że przynajmniej niektóre z tych przykładowych pytań znajdują się prawdopodobnie w "szarej strefie"). Oprócz pytania tytułowego dotyczącego dostania się do pierwszego testu jednostkowego, czy mógłbyś podać przykład tego, jak może wyglądać pierwszy test jednostkowy dla projektu takiego jak przykładowy projekt?


title: Jak obsłużyć wielokrotne przetwarzanie bibliotek, które już tworzą podprocesy?

text: Mam pewne problemy z wymyśleniem dobrego rozwiązania, aby ograniczyć podprocesy w skrypcie, który korzysta z wieloprocesowej biblioteki, a sam skrypt jest również wieloprocesowy. Zarówno biblioteka jak i skrypt są przez nas modyfikowalne. Uważam, że pytanie dotyczy bardziej projektowania niż rzeczywistego kodu, ale co jest warte, jest napisane w Pythonie. Celem biblioteki jest ukrycie szczegółów implementacji różnych routerów internetowych. Z tego powodu biblioteka posiada metodę fabryczną „Proxy”, która jako parametr przyjmuje adres IP routera. Fabryka następnie sonduje urządzenie za pomocą zestawu możliwych serwerów proxy. Zwykle jest jeden serwer proxy, który od razu wie, że jest w stanie wysyłać polecenia do tego urządzenia. Wszystkim innym zwykle powrót zajmuje trochę czasu (biorąc pod uwagę limit czasu). Jedną z myśli było po prostu zapytanie urządzenia o identyfikator, a następnie wybranie odpowiedniego serwera proxy za pomocą tego, ale aby to zrobić, musisz już wiedzieć, jak wysłać zapytanie do urządzenia. Wyabstrahowanie tej wiedzy jest jednym z głównych celów biblioteki, więc staje się to trochę „wymaganiem okrężnym”/zakleszczeniem: Aby połączyć się z urządzeniem, musisz wiedzieć, jakiego proxy użyć i wiedzieć, jakiego proxy utworzyć, musisz połączyć się z urządzeniem. Sondowanie urządzenia jest więc – jak widzimy – najlepszym rozwiązaniem, jak na razie, poza trzymaniem gdzieś tablicy przeglądowej. Biblioteka aktualnie zabija wszystkie pozostałe procesy po znalezieniu poprawnego proxy. I tak, zawsze jest tylko jeden dobry serwer proxy na urządzenie. Obecnie istnieje około 12 pełnomocników. Jeśli więc tworzy się instancję proxy przy użyciu fabryki, pojawia się 12 podprocesów. Jak dotąd było to bardzo przydatne i działało bardzo dobrze. Ale ostatnio ktoś inny chciał użyć tej biblioteki do "przesłania" polecenia do wszystkich urządzeń. Wziął więc bibliotekę i napisał swój własny, wieloprzetworzony skrypt. To oczywiście zrodziło procesy `12 * n`, gdzie `n` jest liczbą adresów IP, do których nadawał. To przysporzyło nam dwóch problemów: 1. Host, na którym wykonano polecenie, zwolnił prawie do zatrzymania. 2. Przerwanie skryptu za pomocą `CTRL`+`C` powoduje całkowite zatrzymanie systemu. Nawet konsola sprzętowa już nie reagowała! Może to być spowodowane pewną dziwnością Pythona, która wciąż wymaga zbadania. Być może jest to związane z http://bugs.python.org/issue8296 **Ważnym pytaniem leżącym u podstaw** jest to, jak zaprojektować bibliotekę, która wykonuje wieloprocesowe przetwarzanie, więc inne aplikacje, które używają tej biblioteki i same chcą być wieloprzetwarzane nie napotykaj ograniczeń systemowych. Moją pierwszą myślą było wymaganie przekazania puli do biblioteki i wykonanie wszystkich zadań w tej puli. W ten sposób osoba korzystająca z biblioteki ma kontrolę nad wykorzystaniem zasobów systemu. Ale instynkt podpowiada mi, że musi być lepsze rozwiązanie. * * * **Zastrzeżenie:** Moje doświadczenie z przetwarzaniem wieloprocesowym jest dość ograniczone. Zaimplementowałem kilka prostych, które nie wymagały kontroli dostępu do zasobów. Więc nie mam jeszcze żadnego _praktycznego_ doświadczenia z semaforami czy muteksami. **p.s.:** W przyszłości możemy mieć wystarczająco dużo informacji, by zrobić to bez sondowania. Ale baza danych, która zawierałaby odpowiednie informacje, jeszcze nie działa. Intryguje mnie również projekt wieloprocesowej biblioteki wieloprocesorowej :)


title: Ogólny parser reguł do zasad gry planszowej RPG - jak to zrobić?

text: Chcę zbudować ogólny parser reguł dla systemów RPG w stylu pióra i papieru. Reguła może zwykle obejmować od 1 do N jednostek, od 1 do N ról kości i obliczać wartości na podstawie wielu atrybutów jednostki. Na przykład: Gracz ma SIŁĘ 18, jego aktualnie wyposażona broń daje mu premię +1 SIŁY, ale malus ZD -1. Atakuje istotę potwora, a logika gry jest teraz wymagana do uruchomienia zestawu zasad lub akcji: Gracz rzuca kostką, jeśli uzyska na przykład 8 lub więcej (podstawowa wartość ataku, którą musi przekazać, jest jednym z jego podstawowych atrybutów!) jego atak się powiódł. Następnie potwór rzuca kośćmi, aby obliczyć, czy atak przejdzie przez jego zbroję. Jeśli tak, obrażenia są otrzymywane, jeśli nie, atak został zablokowany. Poza prostymi regułami matematycznymi mogą również mieć ograniczenia, takie jak zastosowanie tylko do określonej klasy użytkownika (na przykład wojownik kontra czarodziej) lub dowolny inny atrybut. Więc nie ogranicza się to tylko do operacji matematycznych. Jeśli znasz systemy RPG, takie jak Dungeon and Dragons, będziesz wiedział, co zamierzam. Mój problem polega na tym, że nie mam pojęcia, jak dokładnie zbudować ten najlepszy możliwy sposób. Chcę, aby ludzie mogli ustawić dowolny rodzaj reguły, a później po prostu wykonać akcję, taką jak wybór gracza i potwora, i uruchomić akcję (zestaw zasad, taki jak atak). Mniej proszę o pomoc ze stroną bazy danych, ale więcej o to, jak wymyślić strukturę i parser, aby moje reguły były elastyczne. Nawiasem mówiąc, językiem z wyboru jest php. **Edytuj I:** Pozwól, że doprecyzuję swój cel: chcę stworzyć przyjazny dla użytkownika interfejs (który nie wymaga od nikogo nauki języka programowania) do tworzenia mniej lub bardziej złożonych reguł gry. Prosty powód: do użytku osobistego, aby nie musieć zapamiętywać wszystkich zasad przez cały czas, po prostu nie gramy tak często, a sprawdzanie ich za każdym razem jest przeszkodą. Ponadto: Wygląda na zabawne zadanie do zrobienia i nauczenia się czegoś. :) **To, czego do tej pory próbowałem:** Po prostu zastanawiam się nad koncepcją zamiast marnować czas na budowanie niewłaściwej architektury. Do tej pory mam pomysł, aby umożliwić użytkownikowi tworzenie tylu atrybutów, ile chce, a następnie przypisywać tyle atrybutów, ile chce, do dowolnego rodzaju jednostki. Istotą może być gracz, potwór, przedmiot, cokolwiek. Teraz podczas obliczania danych dane są udostępniane parserowi reguł, aby parser reguł mógł wykonywać takie czynności, jak jeśli Player.base_attack + dice(1x6) > Monster.armor_check, a następnie Monster.health - 1; Pytanie dotyczy tego, jak stworzyć ten parser. **Edytuj II:** Oto przykład dość podstawowej wartości, ale aby ją poprawnie obliczyć, należy wziąć pod uwagę wiele różnych rzeczy i zmiennych: > Premia do ataku podstawowego (okres) Twoja premia do ataku podstawowego (powszechnie określana jako BAB > przez społeczność d20) to premia do rzutu ataku wynikająca z klasy postaci > i poziomu. Podstawowe premie do ataku rosną w różnym tempie dla różnych > klas postaci. Postać zyskuje drugi atak na rundę, gdy jej podstawowa premia do ataku osiągnie +6, trzeci z podstawową premią do ataku +11 lub wyższą, a czwarty z podstawową premią do ataku +16 lub wyższą. Podstawowe bonusy do ataku > zdobyte z różnych klas, np. dla postaci wieloklasowej, kumulują się. Podstawowa premia do ataku postaci > nie daje więcej ataków po osiągnięciu > +16, nie może być mniejsza niż +0 i nie zwiększa się ze względu na poziomy klasy po osiągnięciu > 20 poziomu postaci. W przypadku > niektórych wyczynów wymagana jest minimalna premia do podstawowego ataku. Możesz go przeczytać tutaj http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term) wraz z linkami do klas i atutów, które ponownie mają swoje własne zasady obliczania wartości wymaganych do ataku podstawowego. Zacząłem myśleć, że utrzymanie go tak ogólnego, jak to możliwe, utrudni również wykonanie dobrego parsera reguł.


title: jak opatentować oprogramowanie

text: Jestem zainteresowany opatentowaniem oprogramowania, które stworzyłem z grupą ludzi. Mieszkam w Europie. Nie mam pojęcia, jak się do tego zabrać, ale wielu użytkowników mówi mi, że powinienem go opatentować dla bezpieczeństwa. Więc zastanawiałem się, od czego zacząć? W sieci jest tak wiele linków, które dają mi mnóstwo informacji. Miałem tylko nadzieję na bardziej bezpośrednią odpowiedź. Jeśli potrzebujesz więcej informacji, daj mi znać, chętnie się podzielę.


title: Jak zorganizowane są operatory w pamięci?

text: Jak są zorganizowane/zapisywane operatory w pamięci w kontekście języka programowania. Czy są to procedury/funkcje gdzieś zapisane, a kompilatory po prostu manipulują rzeczami, aby wywoływać te procedury za każdym razem, gdy operatory są używane w programie?


title: Jak ładowanie/przechowywanie bajtów jest realizowane przez procesor?

text: Wiem, że w maszynie 32bit procesor odczytuje z pamięci 32bity na raz. ponieważ rejestry w tym przypadku mają również rozmiar 32-bitowy, mogę zrozumieć, jak to działa. To, czego nie rozumiem, to sposób, w jaki procesor implementuje instrukcje ładowania 1 bajta. czy ładuje całe słowo, w którym znajduje się pojedynczy bajt, do rejestru, a następnie wykonuje pewnego rodzaju "przesunięcie bajtów", czy też procesor może załadować pojedynczy bajt, w tym przypadku, gdy ma miejsce maskowanie bajtu, czy dzieje się tak aż do bajt został załadowany do rejestru, czy dzieje się tak, gdy bajt jest przesyłany przez magistralę danych? PS Procesor, którego używam, to MIPS, instrukcje, o których mówię, to: lb lub lbu


title: Czy klucze formularza zmniejszą ilość otrzymywanego spamu?

text: Pracuję dla firmy, która ma sklep internetowy i stale mamy do czynienia z wieloma spamowymi recenzjami produktów i fałszywymi kontami klientów. Wszystkie są tworzone przez zautomatyzowane systemy i są bardziej uciążliwe niż cokolwiek innego. To, o czym myślę (zamiast captcha, które można zepsuć) to dodanie pewnego rodzaju klucza formularza do wszystkich odpowiednich formularzy. Wiem na pewno, że niektórzy spamerzy używają XRumer i wiem, że rzadko żądają strony przed wysłaniem nam danych formularza (czy to jest definicja CSRF?), więc pomyślałbym, że powiązanie klucza z każdym żądanym formularzem będzie co najmniej powstrzymać falę. Wiem również, że spamerzy są leniwi i nie sprawdzają swojej pracy, w przeciwnym razie zobaczyliby, że nigdy nie opublikowaliśmy recenzji spamu i nigdy nie uzyskali żadnych przychodów z naszej strony. Czy udałoby się to znacznie zmniejszyć liczbę recenzji produktów spamowych i tworzonych kont klientów, które obserwujemy? EDYCJA: Aby wyjaśnić, co rozumiem przez „Klucze formularza”: mam na myśli tworzenie unikalnego identyfikatora (lub „klucza”), który będzie używany jako niewidoczne, statyczne pole formularza. Ten klucz będzie również przechowywany w bazie danych (w odniesieniu do sesji użytkownika) lub w zmiennej cookie. Gdy obiekt docelowy formularza otrzymuje żądanie, klucz musi zostać zweryfikowany, aby dane formularza mogły zostać przetworzone. Te nieznośne boty nie będą miały klucza, ponieważ nie ładują skryptu java, który generuje formularz (wysyłają tylko ślepe żądanie do celu), a nawet jeśli raz załadują javascript, będą miały tylko jeden prawidłowy klucz i nie jestem pewien, czy w ogóle używają plików cookie.


title: Czy lepiej przekazać cały obiekt, czy użyć setera?

text: Oto mój początkowy kod, który chciałbym zmodyfikować za pomocą wzorca projektowego strategii. klasa Bar { int a; intb; ... } Klasa Foo { Bar *bar; bool action1(){ // ta funkcja wykonuje dużo pracy używając tylko "bar.a" } bool action2(){ // ta funkcja wykonuje dużo pracy używając tylko "bar.a" } void command( ){ ... Bar bar2 = nowy Bar(); słupek = słupek2; // ta funkcja modyfikuje pasek atrybutów. ... } ... } Próbuję oddzielić kod zarówno action1 jak i action2 od klasy Foo, tworząc obiekt strategii, który będzie realizował te akcje. Nie wiem, która z tych implementacji jest lepsza. Pierwsze rozwiązanie: class ActionStrategy { Bar *bar; bool akcja1(); akcja logiczna2(); } Klasa Foo { Bar *bar; ActionStrategy strategia bool akcja1(){ strategia.akcja1(); } bool akcja2(){ strategia.akcja2(); } void command(){ ... Bar bar2 = new Bar(); słupek = słupek2; // ta funkcja modyfikuje pasek atrybutów. ... } ... } Drugie rozwiązanie: class ActionStrategy { int a; bool akcja1(); akcja logiczna2(); } Klasa Foo { Bar *bar; ActionStrategy strategia bool akcja1(){ strategia.akcja1(); } bool akcja2(){ strategia.akcja2(); } void command(){ ... Bar bar2 = new Bar(); setBar(bar2); // ta funkcja modyfikuje pasek atrybutów. ... } void setBar(Bar* cel) { bar = cel; strategia.a = cel->a; } ... }


title: Diagram klas UML: jak zapisywać relacje obserwator-podmiot?

text: Jak mogę opisać na diagramie klas UML, że instancja ClassA jest zarejestrowana jako obserwator instancji ClassB? (Oba implementują odpowiednie interfejsy). To tak naprawdę nie pasuje do diagramu klas, ponieważ są statyczne, ale jeśli jest to coś ważnego dla projektu - jak można to opisać w tego typu diagramie? Edycja: Aby wyjaśnić: wiem, jak opisywać wzorzec Observer w UML. Moje pytanie jest bardziej szczegółowe. Zarejestrowanie ClassA jako obserwatora ClassB jest ważne dla projektu, jednak nie jestem pewien, czy związek pomiędzy tymi dwiema klasami jest odpowiedni, ponieważ **ClassA i ClassB nie wiedzą o sobie nawzajem. Są całkowicie oddzielone i połączone tylko przez wzór obserwatora**.


title: Jakie są podstawowe operacje manipulacji stosem?

text: Tworzę maszynę wirtualną zorientowaną na stos, więc zacząłem uczyć się Forth, aby uzyskać ogólne zrozumienie, jak to będzie działać. Następnie wymieniłem podstawowe operacje manipulacji stosem, które musiałbym zaimplementować w mojej maszynie wirtualnej: drop (a -- ) dup ( a -- a a ) swap ( a b -- b a ) rot ( a b c -- b c a ) Uważam , że następujące cztery operacje manipulacji stosem mogą być użyte do symulacji dowolnej innej operacji manipulowania stosem. Na przykład: nip ( a b -- b ) swap drop - rot ( a b c -- c a b ) rot rot tuck ( a b -- b a b ) dup - rot over ( a b -- a b a ) swap tuck Jednak chciałem wiedzieć czy Wymieniłem wszystkie podstawowe operacje na stosie niezbędne do manipulowania stosem w dowolny możliwy sposób. Czy są jakieś bardziej podstawowe operacje manipulacji stosem, które musiałbym zaimplementować, bez których moja maszyna wirtualna nie byłaby kompletna?


title: Czy czarter jest ważny dla inżynierów oprogramowania?

text: Mieszkam w Wielkiej Brytanii i zajmuję się tworzeniem oprogramowania od ponad 10 lat, więc uważam, że jestem rozsądną drogą w mojej karierze. Z przerwami w różnych pracach, które miałem, byłem członkiem różnych instytucji, z których BCS i IEE były głównymi. W tej chwili nie jestem również członkiem. Mam tendencję do pracy w obszarach, w których większość ludzi jest inżynierami systemowymi, a nie inżynierami oprogramowania, ale generalnie istnieje nacisk, aby spróbować wyczarterować wszystkich na takim lub innym poziomie. Jednak właściwie nie wiem, jaki pożytek ma dla mnie czarter. Wielu starszych ludzi, z którymi pracowałem, mówi, że nigdy się tym nie przejmowali. Nigdy nie było to częścią żadnej rozmowy kwalifikacyjnej, w której byłem i wydaje się, że nie ma to żadnego wpływu na wynagrodzenie / szkolenie / warunki itp. Czy ktoś może mi więc powiedzieć, czy patrzenie na czarterowanie ról w oprogramowaniu jest przydatne lub ważne, a jeśli tak, czy powinienem patrzeć na BCS lub IEE?


title: Jak prawidłowo uzyskać początkowe API przy użyciu TDD?

text: To może być dość niemądre pytanie, ponieważ jestem przy moich pierwszych próbach w TDD. Uwielbiałem poczucie pewności, jakie daje i ogólnie lepszą strukturę mojego kodu, ale kiedy zacząłem go stosować do czegoś większego niż jednoklasowe przykłady zabawek, napotkałem trudności. Załóżmy, że piszesz swego rodzaju bibliotekę. Wiesz, co ma robić, znasz ogólny sposób jego implementacji (z punktu widzenia architektury), ale ciągle „odkrywasz”, że musisz wprowadzać zmiany w swoim publicznym API podczas kodowania. Być może musisz przekształcić tę prywatną metodę we wzorzec strategii (a teraz musisz przekazać wykpiwaną strategię w swoich testach), być może błędnie umieściłeś odpowiedzialność tu i tam i podzieliłeś istniejącą klasę. Kiedy ulepszasz istniejący kod, TDD wydaje się naprawdę dobrze pasować, ale kiedy piszesz wszystko od zera, API, dla którego piszesz testy, jest nieco „rozmyte”, chyba że robisz duży projekt z góry. Co robisz, gdy masz już 30 testów na metodzie, która ma zmienioną sygnaturę (i dla tej części zachowanie)? To wiele testów do zmiany, gdy się zsumują.


title: Problemy JSF z powodu współdzielonego stanu po stronie serwera

text: W swoim najnowszym radarze technologicznym ludzie z ThoughtWorks zalecili unikanie JSF, ponieważ próba stworzenia statefulness przez HTTP kończy się „powodując cały szereg problemów związanych ze współdzielonym stanem po stronie serwera”. Używam JSF 2.x od prawie kilku lat, podoba mi się i nie mogę powiedzieć, żebym spotkał się z takimi problemami. Ale nie mam z tym zbyt dużego doświadczenia, ao wiele mniej z alternatywami, więc chciałbym zrozumieć, co to za „cała masa problemów”? Pytania dotyczące JSF zwykle wywołują gorące dyskusje, więc myślę, że warto wyjaśnić: chodzi o JSF 2.x, ale nie o to, że jest lepszy lub gorszy niż X lub Y, czy jest to architektonicznie właściwe, aby umieścić stan w HTTP, czy nic podobnego. Chciałbym tylko wiedzieć, jakie są te problemy, ponieważ radar nie idzie na szczegóły.


title: Jak odfiltrować rozdrażnionych programistów w wywiadach?

text: Miałem więc teraz kilka sytuacji, w których programiści przeszli przez zespoły przeprowadzające wywiady śpiewająco, tylko po to, by po przybyciu na scenę okazywać skrajną drażliwość za każdym razem, gdy krytyka jest skierowana w ich stronę. Nie mówię o drażliwości poza dniem, ale o posiniaczonym ego 24/7. W przypadku niektórych pracowników dotyczy to opinii dotyczących przeglądu kodu, ale inni mogą nawet zawierać sugestie dotyczące debugowania (nawet jeśli mają rację). Jak odfiltrować drażliwych kandydatów podczas rozmowy kwalifikacyjnej w sposób, który nie przysporzy Ci kłopotów z HR? (Myślę tu o czymś dalekim od Blade Runnera). Dodatkowo, jak możesz pomóc takim programistom lepiej radzić sobie zarówno z rzeczywistą, jak i domniemaną krytyką?


title: Jakich technik mogę użyć do refaktoryzacji kodu zorientowanego obiektowo na kod funkcjonalny?

text: Spędziłem około 20-40 godzin na tworzeniu części gry przy użyciu JavaScript i HTML5 canvas. Kiedy zaczynałem, nie miałem pojęcia, co robię. Zaczęło się więc jako weryfikacja koncepcji i teraz dobrze się układa, ale nie ma automatycznych testów. Gra zaczyna stawać się na tyle złożona, że mogłaby skorzystać na automatycznych testach, ale wydaje się to trudne, ponieważ kod zależy od mutacji stanu globalnego. Chciałbym dokonać refaktoryzacji całości za pomocą Underscore.js, funkcjonalnej biblioteki programistycznej dla JavaScript. Część mnie uważa, że powinienem zacząć od zera, używając stylu programowania funkcjonalnego i testowania. Myślę jednak, że refaktoryzacja kodu imperatywnego w kod deklaratywny może być lepszym doświadczeniem w nauce i bezpieczniejszym sposobem dotarcia do mojego obecnego stanu funkcjonalności. Problem polega na tym, że wiem, jak powinien wyglądać mój kod, ale nie wiem, jak zamienić w niego mój obecny kod. Mam nadzieję, że niektórzy ludzie mogą udzielić mi wskazówek, takich jak książka Refactoring i Working Effectively With Legacy Code. * * * Na przykład, jako pierwszy krok myślę o "zakazaniu" globalnego stanu. Weź każdą funkcję, która używa zmiennej globalnej i przekaż ją jako parametr. Kolejnym krokiem może być „zakazanie” mutacji i zawsze zwracanie nowego przedmiotu. Wszelkie porady byłyby mile widziane. Nigdy wcześniej nie brałem kodu OO i refaktorowałem go do kodu funkcjonalnego.


title: Wzorce projektowe — warstwa usług

text: Obecnie dużo czytam o wzorcach projektowych i oglądam różne filmy Pluralsight z ich biblioteki. Do tej pory nauczyłem się następujących rzeczy: 1. Wzorzec repozytorium 2. Wzorzec jednostki pracy 3. Wzorzec Fabryka abstrakcyjna 4. Czytam świetną książkę "DI in .NET" Teraz czytam dużo o **Services** i **Service Warstwy** i chciałem uzyskać porady na temat najlepszego miejsca, w którym można je przeczytać i dowiedzieć się o nich. Zakładam, że pasuje to do projektu opartego na domenie i od tego powinienem zacząć? Termin „usługa” wydaje się być powszechnie używany w IT i może mylić dokładne znaczenie. Moje pytania to: 1. Co to jest **Warstwa usług** 2. Gdzie jest najlepsze miejsce, aby się o nich dowiedzieć. Wiem, że prawdopodobnie jest mnóstwo interwebów/książek/blogów na ten temat, ale kilka dobrych obszarów na początek byłoby miło. Jeśli będę zbyt niejasny, daj mi znać.


title: Dziedziczenie, polecenia i pozyskiwanie zdarzeń

text: Aby nie przerabiać rzeczy kilka razy, chciałem podzielić na czynniki zwykłe rzeczy. Na przykład załóżmy, że mamy krowę i konia. Krowa produkuje mleko, koń biegnie szybko, ale oboje jedzą trawę. klasa publiczna Roślinożerne { chronione int Ilość; public void EatGrass(int ilość) { var evt= Build.GrassEaten .WithQuantity(ilość); PodnieśZdarzenie(evt); } public void Apply(GrassEaten evt) { _quantity= evt.Quantity; } } public class Horse : Roślinożerne { private bool _HasFastRun; public void RunFast() { var evt= Build.FastRun; PodnieśZdarzenie(evt); } public void Apply(FastRunevt) { _HasFastRun= true; } } public class Krowa: Roślinożerna { private bool _IsMilkProduced; public void ProduceMilk() { var evt= Build.MilkProduced; PodnieśZdarzenie(evt); } public void Apply(MilkProduced evt) { _IsMilkProduced= true; } } Aby zjeść Grass, moja aplikacja otrzymuje polecenie w Json lub xml, lub cokolwiek, co deserializuje do tej klasy: namespace Herbivorous { public class EatGrass : CommandBase { public Guid IdHerbivorous {get; set;} public Guid CommitId {get; set;} public long Wersja {get; set;} public int Ilość {get; set;} } } Procedura obsługi polecenia powinna być : public class EatGrassHandler : CommandHandler<EatGrass> { public override CommandValidation Execute(EatGrass cmd) { Contract.Requires<ArgumentNullException>(cmd != null); Herbivorous herbivorous= EventRepository.GetById<Herbivorous>(cmd.Id); if (herbivorous.IsNull()) wyrzuć nowe AggregateRootInstanceNotFoundException(); roślinożerne.EatGrass(cmd.Ilość); EventRepository.Save(roślinożerne, cmd.CommitId); }     }      na razie w porządku. Dostaję obiekt Roślinożerny, mam dostęp do jego funkcji EatGrass, nie ma znaczenia, czy jest to koń czy krowa. Jedyny problem jest tutaj: EventRepository.GetById<Herbivorous>(cmd.Id) W rzeczy samej, wyobraźmy sobie, że mamy krowę, która wyprodukowała mleko rano, a teraz chce jeść trawę. EventRepository zawiera zdarzenie MilkProduced, a następnie przychodzi polecenie EatGrass. Dzięki CommandHandlerowi nie ma już krowy, a roślinożerca nie wie nic o produkcji mleka . co powinien zrobić? Czy powinienem mieć wyraźne polecenie kontekstowe, takie jak: namespace Herbivorous.Cow { public class EatGrass: CommandBase { public Guid IdHerbivorous {get; set;} public Guid CommitId {get; set;} public long Wersja {get; set;} public int Ilość {get; set;} } public class ProduceMilk : CommandBase { public Guid IdHerbivorous {get; set;} public Guid CommitId {get; set;} public long Wersja {get; set;} } } Oznaczałoby to, że zewnętrzny komponent, który prosi mojego roślinożercę o zjedzenie trawy, powinien wiedzieć, że w tym ograniczonym kontekście mówimy o krowie. w poprzednim dowództwie mówiliśmy o ogólnym zachowaniu roślinożernym, więc kontekst mojego wezwania nie był istotny. Wiedzieliśmy, że potrzebujemy roślinożerców do jedzenia trawy, to wszystko. To jest mój główny problem możliwy wyciek specyficznej domeny z jednego ograniczonego kontekstu do drugiego. Właściwie może to również oznaczać, że nie mogę obsługiwać abstrakcji podczas pracy nad interfejsami między kilkoma aplikacjami. Zastanawiam się... Albo mogę po prostu zaakceptować każde wydarzenie podczas odbudowy mojego roślinożercy. Oznacza to, że jeśli nie znajdzie metody, aby zastosować to zdarzenie, będzie dobrze, próbując zastosować następną z jego strumienia. To jest naprawdę proste rozwiązanie, ale nie daje mi spokoju, wiedząc, że zdarzenia mogą nie zostać zastosowane (i nie powodować błędów) podczas ponownego nawadniania mojego obiektu. (Właściwie im więcej o tym myślę, tym mniej czuję się winny..) Dzięki za pomoc, dopiero zaczynam z tego rodzaju problemami i chętnie dowiem się czegoś od kogoś bardziej doświadczonego.


title: Dlaczego duże projekty z dużymi budżetami są bardziej narażone na niepowodzenie?

text: Słyszałem dwa powody niepowodzenia projektów systemów informatycznych. 1. Duże projekty z dużymi budżetami są bardziej podatne na niepowodzenie 2. Gdy istnieją dwa zespoły izolujące, jeden zajmuje się projektowaniem oprogramowania, a drugi wdrażaniem. Te dwie przyczyny niepowodzenia są opisane jako recepta na katastrofę, ale ja tego nie rozumiem. Czy ktoś może wyjaśnić, dlaczego są to przepisy na katastrofę?


title: LGPL a aplikacja komercyjna w PHP

text: Mam dość konkretne pytanie dotyczące licencjonowania, ale przede wszystkim chciałbym powiedzieć, że przeczytałem już wiele pytań i odpowiedzi, ale nadal nie jestem pewien, jaki jest problem w tym konkretnym zakresie. Jak rozumiem z innych pytań i odpowiedzi, możesz rozpowszechniać swoją komercyjną aplikację nawet z biblioteką LGPL, o ile ta biblioteka może zostać zastąpiona inną jej wersją przez samego użytkownika. Oznacza to, że spakujesz go jako .dll lub cokolwiek innego. Pozostała część aplikacji pozostaje na licencji własności. Jest to w ogóle jasne w przypadku skompilowanego oprogramowania. Ale moje pytanie brzmi: jak to się ma do oprogramowania, które nie jest skompilowane (które jest rozpowszechniane jako kod źródłowy, ale nadal jest zastrzeżone) jak wszystkie aplikacje PHP? Aby było naprawdę jasne, pokażę ci dokładny przykład. Buduję aplikacje CMS do różnych celów. Wszystkie są różne, ale większość z nich dzieli ten sam "podstawowy element" - edytor JavaScript WYSIWYG. Chciałbym użyć takiego, który jest na licencji GPL/LGPL/MPL. Jest więc kilka pytań: * Czy mogę w ogóle używać tego edytora LGPL, aby reszta mojej aplikacji pozostała zastrzeżona? * Co muszę zrobić, aby móc to zrobić? * Czy są jakieś specjalne "sposoby dystrybucji" biblioteki, takie jak oddzielne archiwum ZIP lub coś takiego? Jeśli chodzi o osoby, dla których angielski nie jest językiem ojczystym, bardzo trudno jest mi odczytać licencje w ich oryginalnej formie. Po prostu nie chcę mieć żadnych kłopotów.


title: Zarezerwuj rekomendacje i porady dotyczące wzorców analizy: modele obiektów wielokrotnego użytku

text: Jestem programistą i posiadam wiedzę z zakresu projektowania oo, m.in. SOLID i szukam dobrej książki o modelowaniu obiektowym. Czy poniższą książkę nadal dobrze się czyta? Wzorce analityczne: modele obiektów wielokrotnego użytku Data publikacji Martina Fowlera: 19 października 1996 r.


title: Czy ktoś woli czcionki proporcjonalne?

text: Czytałem artykuł na Wikipedii na temat stylu programowania i zauważyłem coś w argumencie przeciwko kodowi wyrównanemu w pionie: > Poleganie na czcionce o stałej szerokości; formatowanie tabelaryczne zakłada, że edytor > używa czcionki o stałej szerokości. Większość nowoczesnych edytorów kodu obsługuje czcionki proporcjonalne, a **programista może preferować użycie czcionki proporcjonalnej dla > czytelności**. Szczerze mówiąc, nie sądzę, żebym kiedykolwiek spotkał programistę, który wolał proporcjonalną czcionkę. Nie mogę też wymyślić żadnych naprawdę dobrych powodów, aby z nich korzystać. Dlaczego ktoś wolałby proporcjonalną czcionkę?


title: Czy błędy są częścią długu technicznego?

text: Nasz Scrum Master ciągle określa błędy jako dług techniczny. Czy ma rację, czy błędy są uważane za dług techniczny w świecie Agile?


title: Wykorzystanie oprogramowania do mapowania myśli w zarządzaniu projektami/zadaniami

text: Niedawno „odkryłem” mapowanie myśli, a nawet znalazłem tutaj kilka osób, które go polecają. Wydaje się, że to naprawdę przydatne narzędzie, ale nie jestem pewien, jak zastosować je w mojej pracy i/lub projektach hobbystycznych. Naprawdę chcę zorganizować swój czas i pracę, ponieważ czuję, że moje projekty są ostatnio w stagnacji, a to nie jest przyjemne. Dlatego interesują mnie wszelkie wskazówki, które masz, jeśli korzystasz z map myśli, jak organizujesz swoje projekty, TODO, pomysły...? Na przykład: czy przechowujesz oddzielne mapy myśli dla projektów, zadań, pomysłów, czy masz osobne mapy myśli dla każdego projektu? Jak organizujesz mapy myśli swojego projektu? Podziel się swoimi przemyśleniami i pomysłami. (Zasugeruj alternatywne metody, jeśli uważasz, że mapy myśli są do bani, ale podaj swoje powody) _[Czy możemy stworzyć tę społeczność wiki, ponieważ nie ma "właściwej" odpowiedzi?]_


title: Czy PHP faktycznie jest frameworkiem internetowym?

text: Czytałem artykuł/wywiad ( _Language War: PHP vs. Ruby_ (Jeffrey Way; marzec 2011)) napisany przez programistę Envato używającego Ruby. Mówi: „PHP to platforma internetowa w przebraniu języka”. Nie wyjaśnił tego stwierdzenia, więc zacząłem się zastanawiać, czy to prawda, a jeśli tak, to w jaki sposób. Zrobiłem trochę badań, ale nie mogłem znaleźć żadnych informacji na ten temat. Zastanawiam się, jak to stwierdzenie jest prawdziwe i co sprawia, że PHP nie jest językiem programowania. I dlaczego inne języki, takie jak Python czy Ruby, nie pasują do tej kategorii?


title: Co jest lepszą praktyką - metody pomocnicze jako instancje czy statyczne?

text: To pytanie jest subiektywne, ale byłem ciekaw, jak podchodzi do tego większość programistów. Poniższy przykład jest w pseudo-C#, ale powinno to dotyczyć również Javy, C++ i innych języków OOP. W każdym razie, pisząc metody pomocnicze w moich klasach, zwykle deklaruję je jako statyczne i po prostu przekazuję pola, jeśli metoda pomocnicza ich potrzebuje. Na przykład, biorąc pod uwagę poniższy kod, wolę użyć **Metoda Call #2**. class Foo { Bar _bar; public void DoSomethingWithBar() { // Wywołanie metody #1. ZróbCośZBarImpl(); // Wywołanie metody #2. DoSomethingWithBarImpl(_bar); } private void DoCośZBarImpl() { _bar.DoCoś(); } private static void DoCośZBarImpl(Bar bar) { bar.DoCoś(); } } Mój powód, dla którego to robię, jest taki, że jest jasne (przynajmniej moim zdaniem), że metoda pomocnicza ma możliwy efekt uboczny na innych obiektach - nawet bez czytania jej implementacji. Zauważyłem, że mogę szybko gromadzić metody, które wykorzystują tę praktykę, a tym samym pomagają mi w debugowaniu. Co _wolisz_ robić we własnym kodzie i jakie są powody, dla których to robisz?


title: Jak stać się prawdziwym poliglotą programistycznym?

text: Pracuję jako programista Java, ale C i C++ zawsze były moimi ulubionymi językami na studiach. Niestety nie mam okazji z nimi pracować tak często, jak bym chciał. W rezultacie czasami uświadamiam sobie, że nie pamiętam czegoś dość ważnego (dzisiejszy przykład: dziedziczone chronione składowe nie mogą być dostępne w konstruktorach klas pochodnych). Innym przykładem mogą być Python i Haskell, których lubię używać, ale których nie używam na co dzień. Wpadłem na pomysł, aby napisać własną wiki z łatwymi do zapomnienia rzeczami (np. triki i wskazówki dotyczące basha), ale nie widzę sensu pisania tam wszystkiego, o czym mogę zapomnieć o najfajniejszych językach programowania. Wiem, że najlepiej byłoby mieć projekty poboczne (chcę zacząć pracę nad jakimś projektem open source C/C++ po ukończeniu studiów), ale obecnie muszę pisać pracę dyplomową i pracować, więc po prostu nie mam czasu na Zrób to. Jak zachować ostrość w językach, których nie używasz na co dzień?


title: DDD z podmiotami bez powiązań

text: _Zastrzeżenie: Nie jestem w 100% pewien, że rozumiem niektóre praktyki i koncepcje w DDD, więc na to pytanie można właściwie odpowiedzieć poprzez wyjaśnienie pomysłów_ Pracuję w przestarzałym systemie (napisanym w PHP), w którym narzędzie bazy danych nie zapewnia mapowania relacyjnego obiektów, a zatem obiekty wychodzące z warstwy dostępu do bazy danych są mniej więcej lustrzanymi odbiciami wierszy zwracanych przez zapytanie. W przypadku nowszych modułów próbuję zastosować DDD. Jednak borykam się z tym, jak zbudować bogaty model domeny, gdy moje encje nie mają relacji. Weźmy na przykład następujące wymaganie: `użytkownicy mogą zobaczyć wiadomości, które wcześniej zaakceptowali`, gdzie zaakceptowana wiadomość jest wewnętrznie rejestrowana w pojedynczym nowym wierszu w tabeli bazy danych. Gdybym używał ORM i czy moje encje miały relacje, mógłbym napisać coś podobnego do `$user->getAcceptedMessages()`, co zwróciłoby kolekcję encji wiadomości. Ponieważ jednak tego nie mam, jestem rozdarty między dwoma podejściami: 1. Wypełnij relacje jako część budowania encji w repozytorium. Zapytania mogą stać się duże, nieporęczne i trudne do utrzymania wraz ze wzrostem liczby relacji i zmianą schematu. 2. Utwórz usługi dla takich akcji, które zależą od repozytorium i użytkownika, np. `UserMessageAcceptanceService`. Podejrzewam jednak, że może to prowadzić do anemicznego modelu domeny. Czy którekolwiek podejście jest sensowne w tym scenariuszu? A może jakaś forma ORM jest warunkiem skutecznego zastosowania DDD?


title: Jaki byłby niewymyślny powód posiadania obiektu z prywatnym konstruktorem kopii oraz operatorem przypisania?

text: Szukasz niekonceptualnych/niewymyślonych powodów, dla których należałoby użyć obiektu zarówno z `prywatnym` konstruktorem kopiującym, jak i `prywatnym` operatorem przypisania? _Jak w jakim problemie ta technika/praktyka rozwiązuje, czego inna technika nie może rozwiązać?_


title: Licencja GPL+FE dotyczy również czcionek używanych w interfejsie użytkownika oprogramowania?

text: Wyjątek dotyczący czcionki GPL umożliwia osadzenie czcionki w cyfrowym pliku „dokumentu” bez konieczności udostępniania samego „dokumentu” GPL. Teraz zastanawiam się, co jest uważane za „dokument”? Jeśli czcionka GPL+FE jest osadzona w oprogramowaniu do renderowania interfejsu użytkownika, czy oprogramowanie może zostać wydane z licencją inną niż GPL?


title: Dobra architektura do przekazywania danych do wielu interfejsów API

text: * Mam hipotetyczny scenariusz, w którym muszę przekazać dane do interfejsów API od wielu różnych dostawców, w zależności od „tożsamości dostawcy” dostarczonej przez jeden z elementów danych. * Jeśli mam dane jako obiekty w wyliczalnym obiekcie nadrzędnym, jaki byłby dobry sposób na przekazanie obiektów do odpowiedniego interfejsu API w rozsądnie luźno powiązany sposób? * Nawet jeśli definicja API byłaby jakoś ściślej zakodowana na sztywno, jaki byłby dobry sposób na faktyczne przekazanie obiektów do API? * Piszę rozwiązanie w C#, chociaż liczy się ogólna architektura, a nie konkretna implementacja


title: Jakie kroki mogę podjąć, aby pomyślnie zintegrować nowe funkcje z istniejącą aplikacją?

text: Potencjalnie mogę mieć trochę pracy, aby zaimplementować nowe funkcje w istniejącej aplikacji internetowej klienta. (Nie napisałem oryginalnej aplikacji). Nigdy nie stworzyłem aplikacji, która nie byłaby napisana od zera i martwię się integracją nowych funkcji bez przerywania usługi na zbyt długi czas (lub w ogóle). Nie sądzę, że klient ma skonfigurowane istniejące repozytorium kodu. Pomyślałem, że mój proces rozwoju powinien przebiegać w następujący sposób: * Utwórz repozytorium SVN i przechowuj w nim cały bieżący kod, w tym (lub w razie potrzeby stwórz je) pliki SQL, które byłyby potrzebne do stworzenia aktualnej struktury bazy danych. * Spraw, aby aplikacja klienta działała tak, jak na serwerze testowym z mock-data w bazie danych serwera testowego. * Pracuj tak daleko, jak to możliwe, w cyklach, aby napisać kod dla jednej funkcji naraz, a następnie przenieś go do działającej aplikacji. _To jest ten fragment, którego nie jestem pewien. Przez krótki czas będę przesyłał nowe pliki i użytkownicy najprawdopodobniej będą mieli problemy z użytecznością (awarie). Czy podczas wykonywania tej czynności powinienem wyświetlić stronę „Praca na serwerze”? Jak mam to zrobić?_ * Wydaje mi się również, że dodawanie jednej funkcji na raz może powodować problemy, ponieważ niektórzy z nich oczekują, że inne funkcje będą działać poprawnie. Przypuszczam, że odpowiedzią na to jest dodanie tylko zestawu funkcji, które mogą istnieć jako samodzielny moduł. * Oczywiście testowałbym nowy kod na maksa przed migracją. Będę wdzięczny za wszelkie wskazówki, uwagi lub komentarze do tego, co napisałem powyżej. Naprawdę chcę, żeby to działało płynnie dla mojego klienta (i dla mnie!) Pozdrawiam


title: Dobre, proste powody posiadania wielu środowisk

text: Przez całą swoją karierę pracowałem w firmach, które miały zbiór różnych środowisk do różnych celów. Zawsze mieliśmy mniej więcej nasze środowisko graficzne, środowisko testowe, środowisko QA, środowisko pomostowe i środowisko produkcyjne. Dotyczyło to zarówno serwerów/aplikacji, jak i wszelkich używanych przez nas źródeł danych. Kiedy zaczynałem pracę w mojej obecnej firmie, odkryłem, że 90% aplikacji zostało opracowanych w środowisku desktopowym w oparciu o produkcyjne źródła danych lub bezpośrednio na serwerze produkcyjnym, w zależności od platformy. Nie było to szczególnie zaskakujące, ponieważ zostałem zatrudniony częściowo do wprowadzenia zmian w celu poprawy funkcjonowania zespołu programistów, co jasno wynikało z mojego procesu rozmowy kwalifikacyjnej. Powoli zaczęliśmy zmieniać filozofię i już wkrótce większość aplikacji mogła działać w środowisku desktopowym, testowym lub produkcyjnym. Niedługo potem pojawiła się też inscenizacja. Teraz większość naszych programistów dostrzega zalety tej metodologii i broni jej czujnie. Mamy jednak wiele starszych aplikacji, które nigdy nie zostały zmigrowane. Mamy również wielu starszych programistów, którzy uważają to za stratę czasu. Niestety, dostaliśmy usty, ale nigdy nie mieliśmy pełnego poparcia ze strony kierownictwa. Około rok temu dostaliśmy to, co uważaliśmy za zobowiązanie do znacznego zainwestowania w to, ale nic się nie zmaterializowało pomimo znacznego planowania, które w to włożyliśmy. Teraz dowiadujemy się, że potrzebujemy coraz więcej środowisk. Potrzebujemy pomocy ze strony zespołów administracyjnych serwera/sieci w konfiguracji i potrzebujemy udziału interesariuszy biznesowych w celu wsparcia cyklu wydań. Jesteśmy teraz w miejscu, w którym projekt może funkcjonować, co rozsądni programiści uznaliby „normalnie” tylko wtedy, gdy masz odpowiednich ludzi do projektu i czas na stworzenie odpowiednich środowisk. Chciałbym przedstawić pełną argumentację, ale kierownictwo tak naprawdę nie ma czasu i zainteresowania wysłuchaniem mnie, dopóki nie pojawi się krytyczny problem. Nie mogę tak naprawdę wyrazić korzyści, ponieważ zawsze wydawało mi się to po prostu drugą naturą. Zastanawiałem się, czy istnieją jakieś **dobre, proste, niepodważalne powody wyodrębniania środowisk, które skłoniłyby menedżerów bez doświadczenia programistycznego do poparcia tego pomysłu**. Czy są jakieś dobre źródła/literatura na ten temat?


title: Jakie są rzeczy niezbędne, aby zostać dobrym architektem technicznym?

text: Byłem po prostu ciekaw, jak zostać dobrym architektem technicznym lub co sprawia, że programista jest dobrym architektem. Podziel się swoimi spostrzeżeniami i artykułami.


title: O ochronie ważnych działań na serwerze

text: Tworzymy serwis internetowy. I potrzebujesz, aby nasze ważne działania (np. przelew pieniędzy) były chronione przed przypadkowym telefonem. We frontendzie prosimy użytkownika o potwierdzenie takich działań. Ok. Ale jak zapobiec przypadkowemu wywołaniu w przypadku błędu programisty? Czy to dobry pomysł, że akcja wymaga tokena potwierdzającego od dewelopera, aby kontynuować?


title: Zaprojektuj pytania dotyczące pulpitu nawigacyjnego opartego na Node.JS

text: Sprawdziłem z meta i najwyraźniej to najlepsze miejsce, aby zapytać! Firma, w której pracuję, ma wiele środowisk, a więc wiele skrzynek Nagios/Icinga itp. w każdym środowisku. Obecnie mamy deskę rozdzielczą, ale powstała ona szybko wiele księżyców temu i wymaga wymiany. Obecnie zeskrobuje kod HTML każdego pudełka, buduje statyczny plik HTML i powtarza. Stworzyłem dowód koncepcji za pomocą PHP/MySQL (ponieważ jestem w tym dobry), który ma stronę, która jest dynamicznie generowana z bazy danych MySQL, a następnie jest skrypt w tle, który pobiera dane z API Nagios/Icinga (lub ośrodków do skrobania w przypadku braku API). Działa to dobrze, ale chciałem nauczyć się Node.JS i z tego, co przeczytałem, jest to dobre dla pulpitów nawigacyjnych - zwłaszcza, że mogę chcieć interakcji w przyszłości. Więc moje pytanie brzmi, gdzie w tej witrynie znajduje się strona Node.JS, a gdzie nie siedzi? Na przykład, czy powinienem używać Node.JS do samego pulpitu nawigacyjnego, który siedział na czymś takim jak MongoDB (nigdy go nie używałem, ale chciałbym raz wypróbować NoSQL), aby pokazać ludziom bieżące problemy itp., A następnie mam skrypt w tle w PHP/Perl, który zajmuje się pobieraniem? Lub (opcja 2) czy Node wykonuje dashboard ORAZ pobieranie danych? Czy mam dwie instancje Node? Chciałbym również mieć stronę konfiguracyjną opartą na sieci Web (jak strona ustawień administratora) zamiast ustawień plików płaskich - ponownie, czy jest to coś łatwego do zrobienia w tej samej strukturze Node, czy też Node jest całkiem pojedynczym celem (wystarczy wyświetlić pulpit nawigacyjny, po prostu pobierz, po prostu wykonaj formularze itp.) Mogę wykonać wszystkie powyższe czynności za pomocą PHP/MySQL dość łatwo i szybko, ale Node.JS i MongoDB wydają się obecnie bardzo popularne i czuję, że coś mi brakuje.


title: Dokumentacja wymagana do zleconego oprogramowania (produktu)

text: Firma, w której pracuję, zleciła firmie programistycznej wyprodukowanie oprogramowania zgodności dla kilku dużych firm. W ramach naszej umowy wymaga się od nich dostarczenia nam kodu src i dokumentacji na wypadek, gdybyśmy w przyszłości chcieli przejąć i dalej rozwijać projekt we własnym zakresie lub zlecić przejęcie innej firmie. Jakie są najlepsze praktyki dotyczące dokumentacji oprogramowania w tym przypadku? Tj. O co mam ich prosić, by nam zapewnili, gdyby w przyszłości przejęła je trzecia firma? W tej chwili po prostu dostarczyli nam kod src i automatycznie wygenerowany dokument klasy (nawet diagram klas, tylko listę wszystkich klas, parametrów itp.). Mam nadzieję, że ktoś wskaże mi właściwy kierunek, abym mógł stworzyć mały dokument z naszymi wymaganiami.


title: Czy wykonywanie wywołania DAO w konstruktorze obiektu jest uważane za złą praktykę?

text: Próbuję znaleźć najlepszy projekt tworzenia instancji obiektu, który wymaga dwóch oddzielnych wywołań do warstwy danych za pośrednictwem DAO. Obiekt nie nadaje się do użytku, dopóki te wywołania nie zostaną wykonane (ponieważ wymaga danych pobranych z bazy danych). Wymyśliłem trzy możliwe rozwiązania: 1. Stworzyć w samym DAO metodę, która pobiera niezbędne dane z bazy danych, a następnie przekazuje je do konstruktora obiektu. Obiekt jest przekazywany z powrotem jako wartość zwracana. 2. Utwórz metodę w klasie, która korzysta z obiektu. Ta metoda wykonałaby oba wywołania metod publicznych w DAO, a następnie utworzyłaby instancję i zwróciła obiekt jak w kroku 1. 3. Przekaż DAO jako parametr do konstruktora obiektu. Konstruktor wykonałby następnie oba niezbędne wywołania do DAO, ustawiając własne zmienne składowe bez potrzeby Setters. DAO nie jest używane inaczej niż w konstruktorze. Przykłady, jeśli SomeObject to obiekt, który chcę utworzyć, a Foo to klasa, która będzie z niego korzystać: 1 - DAO Zawiera logikę: public SomeObject getSomeObject(){ // ta metoda DAO wywoływana przez klasę Foo data1 = getData1( ); dane2 = pobierzDane2(); zwróć nowy SomeObject(data1,data2); } 2 - Klasa wykorzystująca obiekt zawiera logikę: public class Foo { ... public void useSomeObject() { SomeObject obj = createSomeObject(); obj.doStuff(); } private SomeObject createSomeObject() { data1 = dao.getData1(); dane2 = dao.getData2(); SomeObject someObject = new SomeObject(data1,data2); zwróć jakiśObiekt; } } 3 - SomeObject przyjmuje DAO jako parametr i używa go w konstruktorze: public class SomeObject { ... public SomeObject(DAO dao) { data1 = dao.getData1(); dane2 = dao.getData2(); } ... } Mam nadzieję, że te przykłady wystarczą, aby przekazać mój punkt widzenia. Czy któreś z tych rozwiązań jest uważane za lepszy projekt niż inne? Jeśli nie, jakie rozwiązanie uważa się za najlepszą praktykę? Dziękuję.


title: Czy VB.Net jest przestarzały przez firmę Microsoft?

text: Wszedłem na tę stronę internetową firmy Sony: http://www.sonycreativesoftware.com/scripting_in_vegas_pro_and_sound_forge > Sugerujemy używanie C# do swoich skryptów, ponieważ chociaż obecnie możesz > pisać skrypty w Jscript i Visual Basic.NET, w tych dwóch językach zostały > przestarzałe przez Microsoft, co oznacza, że mogą przestać być wspierane w pewnym > momencie w przyszłości. AFAIK VB.Net jest całkiem zdrowy i nie mogłem znaleźć żadnego innego źródła tego twierdzenia. FWIW, strona wydaje się być dość stara (zrzuty ekranu mają w nazwie datę 2008). Czy ktoś może rzucić na to trochę światła?


title: Zwinne ponowne testowanie

text: Około dwa lata temu napisałem trochę kodu, który został wdrożony w środowisku produkcyjnym. Kod usuwa z systemu informacje sprzed sześciu lat. Kiedy został po raz pierwszy wdrożony, usunięto tylko 300 rekordów (ponieważ tylko 300 miało sześć lat). Teraz jest 10 000 - 10 000 rekordów, które jutro będą miały sześć lat. Chcę ponownie przetestować kod, ale kierownik projektu jest temu przeciwny (ponieważ zajmuje to trochę czasu - jeden dzień). Procedura usuwania jest bardzo złożona (zasada sześciu lat jest tylko jedną z zasad, ale jest główną zasadą). System ewoluował w ciągu ostatnich dwóch lat. Czy rozsądne jest wyznaczenie czasu na ponowne testowanie, czy powinienem założyć, że jeśli zadziałało w tym czasie, to będzie działać teraz (jak zakłada kierownik projektu)? Czy istnieje proces Agile opisujący tego rodzaju testy?


title: Strategia z wykorzystaniem SVN do przełączania się między serwerem testowym a produkcyjnym. (z zachowaniem plików konfiguracyjnych)

text: Chciałbym poznać Twoją opinię na temat mojej konfiguracji w tej chwili, jak robię rzeczy z SVN i czy możesz znaleźć dla mnie lepsze rozwiązanie. Byłbym bardzo wdzięczny, gdyby ktoś znalazł lepsze rozwiązania moich problemów. Chciałbym to zrobić jak najlepiej i jak najefektywniej. Moja sytuacja wygląda następująco: prowadzę stronę PHP podłączoną do bazy mysql. Mam subdomenę na której testuję wszystko. Istnieją również dwie bazy danych: pierwsza do celów testowych, druga do serwera produkcyjnego. Mam projekt w Netbeans i jestem z nim połączony z ftp, więc każda dokonana przeze mnie zmiana jest bezpośrednio przenoszona na stronę. Ponadto jestem podłączony do serwera SVN i część testowa strony znajduje się w katalogu trunk. Za każdym razem, gdy chcę przesłać zmiany na serwer, zatwierdzam mój bagażnik, a następnie kopiuję go do tagów. Potem przygotowałem kolejny projekt w Netbeans, już podłączony do tego samego SVN, ale do ostatniej kopii tagu. Po skopiowaniu trunk do katalogu tagów przechodzę do drugiego projektu i przełączam się na najnowszą wersję w tagach. Teraz mam w jakimś innym katalogu każdy plik konfiguracyjny przygotowany w odpowiedniej strukturze katalogów - kopiuję go do swojego projektu produkcyjnego. Następnie klikam "Uruchom" w Netbeans i otwiera się okno, które pozwala mi akceptować transfery do sftp, ale tym razem do produkcyjnej części strony. Moje pytanie brzmi: czy to najlepszy sposób? Czy w SVN nie ma bardziej intuicyjnych narzędzi lub opcji, więc nie muszę za każdym razem kopiować plików konfiguracyjnych?


title: Czy PGM (Pragmatic General Multicast) jest w stanie zapewnić niezawodne dostarczanie wiadomości za pomocą multiemisji IP?

text: Mam aplikację serwerową, która rozsyła notowania giełdowe do wielu klientów w naszej sieci wewnętrznej. Wraz ze wzrostem liczby klientów połączenia unicast (TCP) między serwerem a klientami nie są już skalowane. Dlatego szukałem multicastów. Ze względu na wrodzoną zawodność multicastu IP, szukałem niezawodnego multicastu i znalazłem Pragmatic General Multicast (PGM). Rzeczy takie jak tłumienie NAK, korekcja błędów do przodu itp. brzmią jak rzeczy, których potrzebuję i które musiałbym wdrożyć, używając surowego UDP. Zanim przekonwertuję aplikację o znaczeniu krytycznym na ten protokół, mam kilka pytań: * **Jak szeroko stosowany jest PGM?** Nie ma wielu trafień na to w Stack Overflow, Server Fault lub nowej Network Engineering Stack Exchange strona. RFC pochodzi z 2001 roku, a artykuł w witrynie Microsoft Research pochodzi z 2003 roku. Dlaczego nie zostało to już przyjęte jako standard? * **Jak opłacalna jest implementacja PGM przez Microsoft?** Dokumentacja jest niezwykle skąpa i większość projektów wykorzystujących PGM (np. zeroMQ) wydaje się być zbudowana na OpenPGM. Ale użycie API gniazd, które jest dostarczane z systemem operacyjnym i które już znam, i które ma dobrą obsługę w Delphi i C# (językach, których używam) wydaje się lepsze niż poleganie na dodatkowych bibliotekach, które muszą być budowane osobno i mają swoje własne własne zależności. Czy są jakieś wady MS-PGM, o których powinienem wiedzieć? * **Jakie są alternatywy?** Czy istnieją inne protokoły zapewniające niezawodność programowania multiemisji, ale np. pozwolić na zmianę kolejności pakietów? To nie byłby problem, ale właściwie funkcja, ponieważ pozwoliłaby mi kontynuować przetwarzanie niektórych instrumentów, nawet jeśli pakiety dla innych zostałyby utracone.


title: Zmniejszenie cykli zależności i zmniejszenie sprzężenia

text: Próbuję nauczyć się tworzyć wysokiej jakości kod obiektowy i studiuję koncepcje takie jak SOLID. Obecnie pracuję nad systemem encja-komponent-proces dla małego silnika gry. Obecnie mam to zaimplementowane w następujący sposób: * Istnieje `ScreenStack`, który zawiera stos `Screen` * Każdy `Screen` ma `EntityManager` i `ProcessManager`. * `ProcessManager` aktualizuje wszystkie jednostki `Process` z `EntityManager`. * Proces 'Process' obsługuje całą logikę gry, więc musi być w stanie użyć 'ScreenStack', aby ewentualnie popchnąć i pop ekrany. Może również tworzyć, usuwać i zmieniać encje, więc potrzebuje `EntityManager` z `Screen`. Zasadniczo „Proces” musi wiedzieć wszystko o grze, ponieważ ma na nią duży wpływ, ale czuje się źle. Jak mam to lepiej wdrożyć? Wygląda na to, że wszystko ma wyraźną hierarchię zależności, dopóki nie dojdziesz do procesu, w którym zostanie wyrzucony przez okno. Wydaje się również, że istnieje ścisłe sprzężenie, gdy chciałbym wcisnąć nowy ekran. Powiedzmy na przykład, że mam proces na ekranie `MainMenu`, który sprawdza wybór menu. Jeśli klikniesz „Nowa gra”, muszę popchnąć nowy ekran, który zostanie utworzony w tym momencie. Czytałem, że nie powinienem losowo wrzucać „nowego”, co wydaje się robić.


title: Czy temat MQ będzie utrzymywał komunikaty, gdy jeden z konsumentów nie działa?

text: Jeśli mam temat websphere MQ i 3 słuchaczy zasubskrybowało ten temat. Jeden słuchacz jest wyłączony, gdy wiadomość pojawia się w temacie. Inni słuchacze przyswajają wiadomość. Kiedy słuchacz wróci, czy wiadomość nadal tam będzie? Moje instynktownie nie, ale nie mogę powiedzieć tego na pewno.


title: Jak ustawić i sprawdzić pojedynczy bit w języku programowania, który nie obsługuje operacji bitowych?

text: Używam języka programowania (bardziej języka skryptowego), który nie obsługuje żadnych operatorów bitowych, takich jak AND, OR, XOR, NOT (oraz shift). Obsługiwane są jednak typowe operacje arytmetyczne i logiczne, takie jak + - * / % > >= < <= == !=, logiczne AND, OR, NOT i sterowanie przepływem (while, for, if,...). Jest jak „podzbiór C”, ale bez tych operatorów binarnych. Moje pytanie i tak nie dotyczy tego konkretnego języka. Zastanawiałem się, czy istnieje jakiś (matematyczny?) sposób na ustawienie i sprawdzenie bitu na określonej pozycji w języku programowania, który nie obsługuje operacji bitowych: a = 0; //00000000b a = togglebit(a, 5); //0010000b a = togglebit(a, 2); //00100100b a = 0xFE; //11111110b wynik bool = bit kontrolny(a, 4); //prawda Na przykład istnieje sposób na wykonanie przesunięcia binarnego w lewo lub w prawo przy użyciu mnożenia lub dzielenia liczb całkowitych : a = a * 2; //podobne do przesunięcia w lewo : a = a << 1; a = a/2; //podobne do przesunięcia w prawo : a = a >> 1; Szukam czegoś podobnego ale do ustawienia lub sprawdzenia flagi.


title: Jakich prostych technik używasz do poprawy wydajności?

text: Mówię o sposobie, w jaki piszemy proste procedury, aby poprawić wydajność bez utrudniania czytania kodu... na przykład jest to typowe dla tego, czego się nauczyliśmy: for(int i = 0; i < collection.length( );i++ ){ // tu rzeczy } Ale zwykle robię to, gdy „foreach” nie ma zastosowania: for(int i = 0, j = collection.length(); i < j; i++ ){ // rzeczy tutaj } Myślę, że to lepsze podejście, ponieważ wywoła metodę `długości` tylko raz... moja dziewczyna mówi, że jest to zagadkowe. Czy jest jakaś inna prosta sztuczka, którą stosujesz w swoich własnych projektach?


title: Zmienna globalna w bibliotece współdzielonej Linux

text: Załóżmy, że mamy następującą konfigurację w systemie Linux, bibliotekę .so o nazwie „libcnt.so” i 3 aplikacje w przestrzeni użytkownika: „app1”, „app2”, „app3”. Ta biblioteka robi jedną prostą rzecz, mówi do aplikacji (aplikacja dynamicznie łączy bibliotekę w czasie wykonywania) przez liczbę aplikacji, które są już połączone. Aplikacje powinny mieć dostęp do licznika linków. Moja wiedza na temat C i Linuksa jest w tym aspekcie nieco ograniczona, ale jak rozumiem, informacje te powinny być przechowywane w zmiennej globalnej wewnątrz obiektu współdzielonego. Coś takiego: w libcnt.h extern int cnt_loads; w libcnt.c int cnt_loads = 0; // gdzie każde linkowanie zwiększa ten licznik lub coś... Więc moje pytanie brzmi, jak powinien być zadeklarowany i/lub zdefiniowany w bibliotece .so, aby zagwarantować, że wiele aplikacji z przestrzeni użytkownika otrzyma tę samą instancję tego licznika zmiennej?


title: Licencja GNU GPlv3 — oprogramowanie zapewnia usługę — nie jest rozpowszechniana

text: Mam kilka pytań odnośnie licencji GNU GPLv3. Moja aplikacja ma zamknięte źródło i nie zamierzam udostępniać jej publicznie. Jednak _generuje_ elementy komercyjne. Wykorzystanie bibliotek DLL licencjonowanych na podstawie powyższej licencji jest używane i _powiązane_ z oprogramowaniem, które generuje te produkty komercyjne. Chciałbym tylko doprecyzować, że ponieważ oprogramowanie tak naprawdę nie jest rozpowszechniane - tylko to, co oprogramowanie generuje. W związku z tym nie byłoby wymagane udostępnianie źródła itp. Licencjonowane biblioteki dll nie są w żaden sposób modyfikowane. Po drugie, z zainteresowania. Kiedy GNU GPLv3 jest używane przez oprogramowanie komercyjne (powiedzmy, że to oprogramowanie jest wydane). Tym razem licencjonowany materiał jest plikiem EXE, a nie .DLL, a zatem nie jest faktycznie _powiązany_ z kodem oprogramowania. Zamiast tego oprogramowanie wykonuje licencjonowane oprogramowanie bezpośrednio i wysyła mu argumenty w stylu wiersza poleceń i używa tego, co zwraca plik exe. Czy kod źródłowy musiałby zostać wydany? Dzięki, jestem nowy w królestwie tych licencji i trochę zdezorientowany.


title: Czy w Pure Fabrication (GRASP) chodzi tylko o „zachowanie”, czy o „lukę reprezentacyjną”, czy o rzeczywistą „rzeczywistość”?

text: Czy Pure Fabrication odnosi się do zwiększonej luki reprezentacyjnej tylko w zakresie odpowiedzialności behawioralnej, tj. klas oprogramowania dodanych do modelu domeny w celu obsługi TYLKO zachowania, czy też obejmuje jakąkolwiek klasę oprogramowania, która reprezentuje coś, co nie istnieje w modelu domeny? Jeśli jest to druga opcja, czy oznacza to, że wszystkie Pure Fabrications razem faktycznie SĄ luką reprezentacyjną? A może Czysta fabrykacja odnosi się do jakiejkolwiek klasy, która reprezentuje coś, co nie istnieje w prawdziwym świecie? Co oznaczałoby, że oddzielenie Czystej Fabryki i innych klas stałoby się bardzo naukowym rozróżnieniem. Powodem tego pytania był poniższy tekst na wypadek, gdyby jakieś informacje ogólne mogły pomóc zrozumieć moje zakłopotanie. > Czysta Fabrykacja: Problem: jaki obiekt powinien ponosić odpowiedzialność, gdy > nie chcesz naruszać High Cohesion and Low Coupling lub innych celów, > ale rozwiązania oferowane przez Eksperta (na przykład) nie są odpowiednie? Istnieje > wiele sytuacji, w których przypisanie odpowiedzialności tylko do warstwy domeny > klas oprogramowania prowadzi do problemów w zakresie słabej spójności lub sprzężenia lub > niskiego potencjału ponownego wykorzystania. > > Rozwiązanie: Przypisz wysoce spójny zestaw obowiązków do sztucznej > lub klasy wygody, która nie reprezentuje koncepcji domeny problemowej. > ...coś wymyślonego, aby wspierać wysoką spójność, niskie sprzężenie i ponowne użycie. Taka > klasa to fabrykacja wyobraźni. Np. program obsługi bazy danych. Ten > obiekt będzie fasadą frontonu na dużej liczbie obiektów > pomocniczych zaplecza. (persistentStorage nie jest pojęciem domeny, ale czymś wymyślonym > lub sfabrykowanym dla wygody programisty.) > > Projekt obiektów można ogólnie podzielić na dwie grupy: > > 1. Wybrane przez dekompozycję reprezentacyjną. (wspiera cel > małej luki reprezentacyjnej) > > 2. Te wybrane przez dekompozycję behawioralną (klasa dogodności wymyślona przez programistę > w celu zgrupowania niektórych powiązanych zachowań lub metod. > > > > (Applying UML and Patterns, Addison Wesley Professional, 2004)


title: Czy można napisać logikę na poziomie aplikacji w formacie XML lub zwykłego tekstu?

text: Na przykład system, w którym programista nie musi już pisać kodu źródłowego, zamiast tego może użyć XML lub jakiegoś zdefiniowanego tekstu do skonstruowania logiki na poziomie aplikacji.


title: Jak zaszyfrować kod źródłowy na serwerze internetowym?

text: Posiadam aplikację internetową opracowaną w Pythonie, HTML, CSS i JavaScript. Klient instaluje go na dowolnej własnej Maszynie i używa go za pośrednictwem swojej sieci LAN. Krótko mówiąc, klient konfiguruje serwer sieciowy na dowolnej własnej maszynie. Ponieważ jest to aplikacja internetowa, cały kod źródłowy jest otwarty dla klienta w głównym katalogu dokumentów serwera WWW. Chcę zaszyfrować cały kod źródłowy w głównym katalogu dokumentów w taki sposób, aby nie wpływało to na działanie aplikacji internetowej. Czy jest jakiś sposób na zaszyfrowanie w tym celu Pythona, HTML, CSS i JavaScript.


title: DevOps a inżynierowie oprogramowania

text: Zdaję sobie sprawę, że wszystkie definicje DevOps są dość niejasne, a to pytanie jest subiektywne, ale wciąż jest to coś, na co nie mogłem znaleźć odpowiedzi. Czy jest jakaś różnica, pod względem prestiżu, między DevOps a inżynierami oprogramowania? Czy doświadczenie jest wymienne? Czy N-letnie doświadczenie DevOps jest wymienne z N-letnim doświadczeniem w inżynierii oprogramowania? A może nawet patrzę na pytanie w złym świetle?


title: Kontrola wersji zarządzania wydaniami?

text: Niedawno wystąpił problem z wdrożeniem, w którym okazało się, że obiekty wersji nie były zsynchronizowane w jednym ze środowisk. Mamy dużą grupę baz danych i różne zespoły mają różne obowiązki i właściciele - mógłbym kodować na schemacie X, Y, Z, ale będę też miał zależności od obiektów należących do innych grup. Jest tak samo bez względu na technologię - biblioteki java mają różne wersje, a jakie nie. Moim celem jest, aby _coś_ było na stronie internetowej lub w tabeli bazy danych lub coś, co widzę, że dla obiektu A mam zainstalowaną wersję X w produkcji, X + 1 w UAT i QA, a X + 2 zainstalowaną w DEV. Jak radzą sobie z tym inni ludzie? Jak odbierasz zmiany wersji? Czy polegasz na SCM? Numery kompilacji? Wartość skrótu kodu źródłowego? Interesuje mnie zarządzanie spójnością wersji w różnych technologiach - na przykład java do db.