title: Funkcje szablonów i szablony funkcji w C++

text: Natknąłem się na pytanie, które dotyczyło różnicy między szablonami funkcji a funkcjami szablonu w C++, a także klasami szablonów i szablonami klas. Miałem wrażenie, że szablony funkcji i funkcje szablonów to to samo. Czy jest jakaś różnica między tymi dwoma, jeśli tak, to co to jest?


title: Jak wybrać pomiędzy różnymi metodami obsługi/podnoszenia zdarzeń?

text: W sytuacjach, w których muszę napisać kod obserwatora/subskrybenta, jak mam wybrać między następującymi podejściami? A) Zadeklarowanie zdarzenia, które po prostu informuje klienta, że coś się dzieje, ale wymaga od klienta wykonania zapytania o dane, np. class SoothSayer{ int DaysUntilApocalypse{get;} event EventHandler<EventArgs> TheEndIsNigh; } B) Zadeklarowanie zdarzenia z konkretnym _XXXEventArgs_ zawierającym dane zdarzenia np. class SoothSayer{ event EventHandler<ApocalypsePendingEventArgs> TheEndIsNigh } class ApocalypsePendingEventArgs:EventArgs{ int DaysLeft{get;} } class SoothSayer{ public SoothSayer(Action<int> endIsNighCallback){ _endIsNightCallBack = endIsNighCallback; } }


title: System plików jak uprawnienia dla członków typu C++

text: ## Streszczenie ( **tl;dr** ) _Proszę przeczytać całe pytanie, to jest strasznie uproszczone:_ W jaki sposób można zastosować ograniczenia dotyczące stylu uprawnień plików uniksowych do przepływów danych/kontroli między typami, umożliwiając szczegółowy dostęp do niektórych klas -członkowie niektórych grup klas? ## Informacje podstawowe Jeśli myślisz o uniksowych systemach plików i uprawnieniach, istnieje różnorodny sposób kodowania uprawnień dostępu do plików użytkowników (zwłaszcza jeśli weźmiesz pod uwagę również FACL). Na przykład, jeśli katalog zawiera 3 pliki, mogą one należeć do kilku użytkowników, a różni inni użytkownicy mogą mieć ograniczone uprawnienia: -rwxr-xr-- jean-luc staff zaangażowanie.sh -rw-r----- william crew roster.txt -rw------- Beverly Beverly Pacjenci.txt ## Idea podstawowa Jak widać, w zależności od grup, w których znajduje się dany użytkownik, dozwolone są różne poziomy dostępu. Na przykład „członkowie załogi” mogą czytać plik „roster.txt”, który należy do „williama”, ale goście, którzy prawdopodobnie nie należą do „załogi”, nie mogą. Co ważniejsze, „załoga” grupy może składać się z wielu osób. Pomyślałem więc, że istnieje pewne podobieństwo do uprawnień dostępu w językach obiektowych, takich jak C++, jeśli myślisz o typach (klasach) jako użytkownikach. Chociaż funkcja może być tylko wykonana, ale nie odczytana, flagi `rwx` reprezentują znaczące opisy dla członków klasy. Składnik danych może być odczytywany (`r`) i zapisywany (`w`), być może przez akcesory, podczas gdy funkcje składowe mogą być wykonywane (`x`) lub nie. Jednak w C++ i innych językach obiektowych (o których wiem), jest to mniej więcej wszystko albo nic, jeśli na chwilę pominiemy dziedziczenie; Jeśli klasa `William` upubliczni swoją składową `Txt roster;`, wszyscy to zobaczą. Jeśli uczyni to prywatnym, nikt oprócz niego tego nie zobaczy. Może dodać jednego lub więcej przyjaciół, `przyjaciela JeanLuc;`, ale wtedy zobaczą oni wszystkich swoich prywatnych członków (odpowiednik przyznania `user:jean-luc:rwx` do wszystkich swoich plików, w żargonie FACL). Jest to całkowicie prostopadłe do dziedziczenia – „JeanLuc” i „William” nie są częścią tej samej hierarchii, nie są ze sobą spokrewnieni. **Więc głównym pomysłem byłoby zezwolenie na ograniczenia dostępu oparte na grupach, jako uogólnienie prywatnego/publicznego. Umożliwienie bardziej szczegółowego dostępu międzyklasowego do funkcji członkowskich i danych członkowskich.** Uważam, że ten idiom może pomóc w utrzymaniu/czytelności, ponieważ dodaje dodatkowe aspekty, aby ograniczyć uprawnienia do interakcji. Podobnie jak w przypadku systemów operacyjnych, gdzie dodaje to ważną warstwę bezpieczeństwa do systemu, ten sam znajomy wzorzec może zwiększyć bezpieczeństwo projektu C++. ## Myśli o reprezentacji w C++ Jednak nie potrafię myśleć o dobrym sposobie przedstawienia tego. Możesz rozłożyć obiekty `William` na kilka obiektów podtypów: `William_Crew`, `William_William` i tak dalej, reprezentujących odpowiednie grupy. To wydaje się być strasznie brzydkie. Innym pomysłem mogą być dedykowane typy z funkcjami forwardera, reprezentujące poszczególne grupy, takie jak: class Crew { // group class // w tej grupie są: friend JeanLuc; przyjaciel Geordi; przyjaciel Beverly; // ... statyczny Txt getRoster(William*); }; klasa William { przyjaciel Załoga; // Problem: Załoga ma pełny dostęp (rwx) Txt roster; }; Ale każda grupa musiałaby być dostosowana do konkretnej klasy, z którą ma być używana, co wydaje się być masowo zbędne, jeśli grupa jest używana przez kilku użytkowników/klas. ## Pytanie Podejścia, które przedstawiłem, nie są świetne (delikatnie mówiąc) i jestem pewien, że nie zadziałałyby zgodnie z zamierzeniami. Nie jestem pewien, czy jest to powieść/głupia/dobrze znany pomysł, ale **Zastanawiam się, jak można to zaimplementować za pomocą funkcji dostarczanych przez język C++**. Czy istnieją obiektywne argumenty, dlaczego byłoby to lub nie byłoby przydatne/pomocne?


title: Ile Twoja firma wydaje na książki?

text: Wydaje mi się, że kupowanie i czytanie książek to jedna z najważniejszych inwestycji, jakie może wykonać deweloper i jedna z najważniejszych inwestycji, jakie firma może wydać na dewelopera. Wiele razy miałem do czynienia z trudnym problemem, a to, co robiłem, to przeglądanie książki o algorytmach i natrafiałem na odpowiedź. I często zdarzało się, że mierzyłem się z problemem bez uprzedniego przeszukania literatury, tylko po to, by później dowiedzieć się, że moje rozwiązanie było do niczego, a właściwe rozwiązanie zostało już zapisane gdzie indziej. Ale wydaje mi się też, że wiele firm traktuje książki jako wydatek i dlatego należy je ciąć i „zabudżetować”. Smutne ale prawdziwe. Ile Twoja firma wydaje na książki?


title: Jak odnieść się do <% w asp.net

text: Zdałem sobie sprawę, że odnoszę się do `<%@` jako 'procent nawiasu kątowego w' i `<%$` jako 'procent nawiasu kątowego w dolarach', ale to jest bardzo niezdarne. Myślę, że `<%$` należy określać jako rodzaj powiązania, nie jestem w 100% pewien, co robi `<%@`, a Google nie lubi tego jako wyszukiwanego hasła. Jak programiści normalnie określają te terminy?


title: Łączenie kodu aplikacji z testami jednostkowymi

text: Pracuję nad projektem, w którym musimy zaimplementować i przetestować nowy moduł. Miałem na myśli dość przejrzystą architekturę, więc szybko spisałem główne klasy i metody, a następnie zaczęliśmy pisać testy jednostkowe. Podczas pisania testów musieliśmy wprowadzić sporo modyfikacji w oryginalnym kodzie, takich jak * Upublicznienie prywatnych metod w celu ich przetestowania * Dodanie dodatkowych metod dostępu do prywatnych zmiennych * Dodanie dodatkowych metod do wstrzykiwania mock obiektów, które powinny być użyte, gdy kod działa wewnątrz testu jednostkowego. Jakoś mam wrażenie, że są to symptomy, że robimy coś źle, m.in. 1. początkowy projekt był błędny (niektóre funkcjonalności powinny być od początku publiczne), 2. kod nie został poprawnie zaprojektowany do współpracy z testami jednostkowymi (być może dlatego, że zaczęliśmy projektować testy jednostkowe, gdy dość kilka klas zostało już zaprojektowanych), 3. implementujemy testy jednostkowe w niewłaściwy sposób (np. testy jednostkowe powinny bezpośrednio testować / adresować tylko publiczne metody API, a nie prywatne), 4. połączenie powyższych trzech punktów , a może jakieś dodatkowe kwestie, o których nie pomyślałem. Ponieważ mam pewne doświadczenie w testowaniu jednostkowym, ale daleko mi do bycia guru, byłbym bardzo zainteresowany przeczytaniem twoich przemyśleń na ten temat. Poza powyższymi pytaniami ogólnymi mam kilka bardziej szczegółowych, technicznych pytań: **Pytanie 1.** Czy ma sens bezpośrednie testowanie prywatnej metody m klasy A, a nawet upublicznienie jej w celu przetestowania? Czy też powinienem założyć, że m jest pośrednio testowane przez testy jednostkowe obejmujące inne, publiczne metody, które wywołują m? **Pytanie 2.** Jeśli instancja klasy A zawiera instancję klasy B (agregacja złożona), czy ma sens kpić z B w celu przetestowania A? Moim pierwszym pomysłem było to, że nie powinienem kpić z B, ponieważ instancja B jest częścią instancji A, ale potem zacząłem w to wątpić. Mój argument przeciwko szydzeniu z B jest taki sam jak dla 1: B jest prywatnym wrt A i jest używany tylko do jego implementacji, dlatego szydzenie z B wygląda na to, że ujawniam prywatne szczegóły A, jak w (1). Ale może te problemy wskazują na wadę projektową: może nie powinniśmy używać złożonej agregacji, ale proste skojarzenie od A do B. **Pytanie 3.** W powyższym przykładzie, jeśli zdecydujemy się na kpić z B, jak wstrzyknąć Instancja B w A? Oto kilka pomysłów, które mieliśmy: * Wstrzyknij instancję B jako argument do konstruktora A zamiast tworzyć instancję B w konstruktorze A. * Przekaż interfejs BFactory jako argument do konstruktora A i pozwól A użyć fabryki do utworzenia swojej prywatnej instancji B. * Użyj singletona BFactory, który jest prywatny dla A. Użyj statycznej metody A::setBFactory() do ustawienia singletona. Gdy A chce utworzyć instancję B, używa singletona fabrycznego, jeśli jest on ustawiony (scenariusz testowy), tworzy B bezpośrednio, jeśli singleton nie jest ustawiony (scenariusz kodu produkcyjnego). Dwie pierwsze alternatywy wydają mi się czystsze, ale wymagają zmiany sygnatury konstruktora A: zmiana API tylko po to, by było bardziej testowalne, wydaje mi się niezręczna, czy to powszechna praktyka? Trzecia ma tę zaletę, że nie wymaga zmiany sygnatury konstruktora (zmiana w API jest mniej inwazyjna), ale wymaga wywołania statycznej metody setBFactory() przed rozpoczęciem testu, co jest podatne na błędy IMO ( niejawna zależność od wywołania metody, aby testy działały poprawnie). Nie wiem więc, który wybrać.


title: Jak TDD rozwiązuje interakcję między obiektami?

text: Zwolennicy TDD twierdzą, że skutkuje to lepszym projektowaniem i oddzieleniem obiektów. Rozumiem, że pisanie testów najpierw wymusza użycie takich rzeczy, jak wstrzykiwanie zależności, co skutkuje luźno powiązanymi obiektami. TDD opiera się jednak na testach jednostkowych - testujących poszczególne metody, a nie integrację między obiektami. A jednak TDD oczekuje, że projekt będzie ewoluował od samych testów. Jak więc TDD może skutkować lepszym projektem na poziomie integracji (tj. międzyobiektowym), gdy ziarnistość, którą dotyczy, jest wyższa (poszczególne metody)?


title: Entity Framework i systemy rozproszone

text: Potrzebuję pomocy, a może tylko podpowiedzi w dobrym kierunku. Mam system, który jest rozdzielony na dwie aplikacje. Istniejący klient klasyczny VB.NET korzystający z Entity Framework 5 z podejściem „code first” i klientem asp.net Web Api w języku C#, który zostanie jeszcze zrefaktoryzowany. Powinno być możliwe dostarczenie OData. System i model danych nadal są zaangażowane, więc migracje będą następować w nieokreślonych odstępach czasu. Dlatego teraz zmagam się z zarządzaniem dostępem do mojej bazy danych w systemie Web API. Więc moim ulubionym podejściem byłaby my Entity Framework na obu systemach, ale mam kłopoty podczas tworzenia nowych migracji. Dwa rozwiązania, o których myślałem: **Shared Data Access dll** Pierwszym pomysłem było oddzielenie warstwy dostępu do danych do osobnego odniesienia do projektu z każdego z systemów. Kontekst byłby taki sam, o ile biblioteka dll jest aktualna w każdym systemie. W ten sposób oba rozwiązania byłyby w stanie dokonać migracji. Główny problem polega na tym, że aktualizacja systemu Web API jest znacznie bardziej skomplikowana niż w przypadku klienta Click Once Update Solution i nie każda migracja jest ważna dla Web API. Spowodowałoby to więcej problemów z aktualizacją i niezsynchronizowane biblioteki **Database First on Web Api** Drugim pomysłem było użycie bazy danych najpierw po stronie Web API. Wydaje się jednak, że po każdej aktualizacji modelu wszystkie adnotacje zostaną utracone. Inne rozwiązania z procedurami składowanymi zostały odrzucone z powodu braku obsługi i konserwacji OData. Czy ktoś wpada w takie same konflikty lub ma jakieś rady, jak taki problem można rozwiązać!


title: Strukturyzacja aplikacji szynowej z danymi statycznymi

text: Pracuję nad aplikacją railsową i do tej pory skupiałem się na api i funkcjonalności. Ale teraz coraz bardziej dochodzę do punktu, w którym będę chciał dodać statyczną treść, opisy oprogramowania i informacje pomocy. Informacje znajdujące się zazwyczaj w systemie CMS. Jak najlepiej to ustrukturyzować, aby móc nadal pracować z aplikacją. Nadal zachowujesz wygląd i styl aplikacji szynowej? Czy piszesz CMS w mojej aplikacji? Wydaje się to trochę naciągane. Czy są jakieś klejnoty, które to robią? Jaki jest de facto standard projektowania tego scenariusza?


title: Czy programowanie w Pythonie jest szybsze niż w C, C++ czy Javie?

text: Wśród programistów panuje powszechne przekonanie, że im bardziej dynamiczny i luźniejszy język, tym bardziej produktywny będzie w nim programista. Guido van Rossum napisał o produktywności programowania przy użyciu Pythona w 1998 roku i przeszukując sieć. Nadal widzę ludzi odwołujących się dokładnie do tego twierdzenia: > Syntaktycznie kod Pythona wygląda jak wykonywalny pseudokod. Program > programowanie w Pythonie jest 5-10 razy szybsze niż przy użyciu C/C++ i 3-5 > razy szybsze niż przy użyciu Javy. W wielu przypadkach prototyp aplikacji > można napisać w Pythonie bez pisania kodu C/C++/Java. Często prototyp jest > wystarczająco funkcjonalny i działa na tyle dobrze, aby można go > dostarczyć jako produkt końcowy, co pozwala zaoszczędzić znaczną ilość czasu na opracowywanie. Innym razem prototyp może być przetłumaczony w części lub w całości na C++ lub Java -- > obiektowość Pythona czyni tłumaczenie prostym procesem. Czy ta kwestia została właściwie oceniona naukowo? Jeśli nie dla Pythona, to może dla rodzeństwa języków skryptowych, takich jak ruby, perl lub php? Nie szukam racjonalizacji, analogii ani wyjaśnień, dlaczego potencjalnie może być trudno odpowiedzieć, chyba że jest to opinia badaczy lub ekspertów, którzy poświęcili czas na zbadanie problemu. Początkowo zadałem to pytanie na sceptics.SE i ktoś zasugerował, że powinienem zadać je również tutaj.


title: Gdzie scrum master wyznacza granicę z problemami z blokowaniem?

text: Rozumiem koncepcję, że Scrum Master powinien usuwać przeszkody. Chciałbym jednak wiedzieć, gdzie dokładnie należy narysować linię. Na przykład członek zespołu może mieć przeszkodę, przez którą musi uzyskać wsparcie, aby zalogować się na aktywny serwer i uzyskać pewne szczegóły. Nie mogą zrobić trochę pracy, dopóki tego nie zrobią. Zasadniczo jest to problem blokujący. Ale czy to mistrz Scrum powinien udać się do działu Ops i zrobić to dla programisty, czy też programista może to zrobić sam, powinien po prostu zrobić to sam. W którym momencie problem staje się problemem blokującym?


title: Jak dobry jest 2. wydanie Podręcznika projektowania algorytmów w porównaniu z 1. wydaniem dla początkujących?

text: Szukam dobrej książki o algorytmach i strukturach danych dla początkujących. Czytałem kilka recenzji tych dwóch książek: Wprowadzenie do algorytmów i Podręcznik projektowania algorytmów. Wstęp do algorytmów jest powszechnie uznawany, ale jednocześnie wiele osób uważa świetną książkę, ale tylko jako biblię/odnośnik/encyklopedię. Podręcznik Projektowania Algorytmów wydaje się być uważany za zbyt prosty, „katalog zakupowy algorytmów” i niektórzy odradzają go. Rzecz w tym, że tego rodzaju opinie wydają się być oparte na pierwszym wydaniu. Według autora książki: „To nowo poszerzone i zaktualizowane drugie wydanie nadal usuwa „tajemnicę” z projektowania algorytmów oraz analizowania ich skuteczności i > skuteczności. podstawowy podręcznik do kursów projektowania algorytmów, który > zachowuje status najlepszego praktycznego przewodnika po algorytmach dla > programistów, badaczy i studentów." > > "Drugie wydanie zawiera wystarczającą ilość materiału, aby służyć jako podręcznik do > standardowego kursu Wprowadzenie do algorytmów. Zakładam, że czytelnik > ukończył odpowiednik > drugiego kursu programowania, zwykle zatytułowanego > Struktury danych lub Informatyka II." Więc moje pytanie brzmi, co sądzisz o drugiej edycji Podręcznika projektowania algorytmów dla początkującego, który chce poznać algorytmy i struktury danych? Czy rzeczywiście jest to lepsze niż I edycja do zadania? A może uważasz, że CLRS jest lepszą opcją?


title: Sposoby na przełamanie „syndromu idealnego programisty”

text: Prawdopodobnie nie jestem jedyną osobą, która tak się czuje. Ale mam coś, co nazywam „syndromem doskonałego programisty”, co wielu może powiedzieć, że jest to to samo, co bycie perfekcjonistą, ale w tym przypadku jest to domena programowania. Jednak dziedzina programowania jest nieco problematyczna dla takiego syndromu. Czy kiedykolwiek czułeś, że podczas programowania nie masz pewności lub nigdy nie jesteś wystarczająco pewny, że Twój kod jest czysty i dobry, zgodny z większością najlepszych praktyk? Jest tak wiele zasad, których należy przestrzegać, że czuję się jakoś przytłoczona. Nie żebym nie lubił przestrzegać zasad, oczywiście jestem programistą i uwielbiam programować, postrzegam to jako sztukę i muszę przestrzegać zasad. Ale też to kocham, to znaczy chcę i uwielbiam przestrzegać zasad, aby mieć dobre poczucie, że to, co robię, idzie we właściwy sposób.. ale chciałbym tylko mieć wszystko pod większą „kontrolą” w zakresie najlepszych praktyk i dobrego kodu. Może to brak organizacji? Może to brak doświadczenia? Może brak praktyki? Może to brak czegoś innego, co ktoś mógłby wskazać? Czy jest jakiś sposób na pozbycie się tego syndromu jakoś?


title: używanie algorytmu kolonii mrówek do tworzenia gry krzyżowej

text: Mam trudności z nauką o algorytmie kolonii mrówek (ACO), czytałem o generowaniu krzyżówki za pomocą (algorytm genetyczny) GA. Znam oba algorytmy GA ant ACO zwykle używane do optymalizacji, ale moje pytanie jest możliwe, jeśli utworzysz generator krzyżówek za pomocą ACO i jak to może działać na optymalizację w tym przypadku?


title: Problemy z kodem przykładowym

text: Niedawno poproszono mnie o napisanie przykładowego kodu, który rozwiąże trudny problem techniczny. Zastanawiałem się, jakie problemy można dobrze rozwiązać w kodzie, aby zademonstrować swoje umiejętności w takiej sytuacji. Widziałem podobne posty omawiające, czego szukają recenzenci w kontekście wywiadów na temat kodu, ale interesują mnie konkretne problemy, które mogą być dobre do rozwiązania. Na przykład ten bloger oferuje następujące przykładowe pomysły na kod: * Klasa narzędziowa do rejestrowania zdarzeń i błędów w pliku lub dziennikach zdarzeń systemowych z konfigurowalnym poziomem szczegółowości. * Zestaw procedur przechowywanych do utrzymywania i wyszukiwania danych w hierarchicznej strukturze drzewa. * Implementacja wzorca projektu singleton do serializacji dostępu do pliku zasobów. * Funkcja kalkulatora, która pobiera pojedynczy ciąg danych wejściowych, który zawiera liczby i operatory, i zwraca liczbowy wynik równania. Nie zapomnij o walidacji danych wejściowych, obsłudze błędów (dzielenie przez zero) i obawach dotyczących pierwszeństwa operatorów! * Metoda, która pobiera adres URL do witryny internetowej i ścieżkę lokalną oraz pobiera wszystkie pliki obrazów na podstawie tagów. * Utwórz metodę, która pobiera słowo kluczowe, wiadomość i poświadczenia logowania i używa interfejsu API Twittera, aby odpowiedzieć, aby opublikować wiadomość jako odpowiedź do dowolnych znajomych z określonego konta. Chciałbym zobaczyć tego typu przykłady, być może z trudniejszym problemem technicznym. Idealnie, przykładowe problemy wspierałyby zademonstrowanie zrozumienia konstrukcji/struktur danych Java i paradygmatu Mode-View-Controller (MVC). **AKTUALIZACJA** Udało mi się znaleźć fajną stronę internetową o nazwie Project Euler, która ma wszystkie rodzaje fajnych problemów, z których wiele może zaspokoić tę potrzebę. Ma świetne jedzenie dla mózgu, które pasuje do odpowiedzi whatsisname. Oczywiście celem jest znalezienie przykładów problemów, które dobrze byłoby rozwiązać w tej sytuacji, _nie_ kopiowanie i wklejanie kodu (zwłaszcza jeśli nie jest on Twój!).


title: Jak udokumentować koniecznie złożone struktury kodu?

text: Jeśli mam fragment kodu, który jest matematycznie lub strukturalnie dość złożony i nieredukowalny, jak mam go udokumentować? W szczególności, w jaki sposób mogę zapewnić, że osoba, która może nie mieć umiejętności matematycznych lub architektonicznych, które posiadam, zrozumie to z dokumentacji? Czy powinienem też udokumentować całą matematykę? Link do samouczka? Czy jakieś połączenie pomocy wizualnej w przypadku złożonych konstrukcji?


title: Czy komentarze są uważane za formę dokumentacji?

text: Kiedy piszę dla siebie małe skrypty, umieszczam swój kod wysoko w komentarzach (czasami komentuję więcej niż koduję). Wiele osób, z którymi rozmawiam, mówi, że powinienem dokumentować te skrypty, nawet jeśli są osobiste, więc jeśli kiedykolwiek je sprzedam, będę gotowy. Ale czy komentarze nie są formą dokumentacji? Czyż nie: $foo = "bar"; # to jest komentarz print $foo; # to wypisuje "pasek" uważać za dokumentację, zwłaszcza jeśli programista używa mojego kodu? A może uważa się, że dokumentacja znajduje się poza samym kodem?


title: Dobre techniki przyspieszające wykonywanie bazy danych

text: Mam aplikację ASP.Net, która korzysta z bazy danych MySQL. Moje zapytania nie działają tak szybko, jak bym chciał. Czy są jakieś standardowe sposoby na zwiększenie szybkości bazy danych MySQL poza umieszczeniem jej na szybszym komputerze? Na przykład (nie jestem pewien, czy to prawda, czy nie) za pomocą przygotowanych instrukcji nad transakcyjnym SQL. Używasz kluczy obcych, jeśli dotyczy? Rzeczy w tym kierunku. EDYCJA: Baza danych znajduje się na zdalnym komputerze


title: Czy CRTP jest często używany? i dlaczego jest/nie jest?

text: Zastanawiam się nad ciekawie powtarzającym się wzorem szablonu. Uważam, że jest to całkiem przydatne i można go dość dobrze dostosować do wielu zadań. Ale muszę przyznać, że nie widzę zbyt wiele kodu CRTP na wolności. Czy trudno to pojąć? Czy funkcje wirtualne są ogólnie łatwiejsze? Czy nie powinien być używany w 90% przypadków, w których pojawia się wirtualne słowo kluczowe?


title: SOA - Cztery zasady

text: Czytam o SOA i czterech zasadach wymaganych do złożenia wniosku SOA. Próbowałem różnych źródeł, ale wyjaśnienia są pokrętne. Szukam czegoś mniej abstrakcyjnego. Czy moja interpretacja jest prawidłowa? Te cztery zasady to: 1. Usługi mają wyraźne granice 2. Usługi są autonomiczne 3. Usługi mają wspólny schemat i kontrakt, a nie klasę 4. Usługi współdziałają w oparciu o politykę Moja interpretacja brzmi: 1. Metody, z których klient może korzystać, powinny być łatwe do używać i dobrze zdefiniować. 2. Usługi nie są zależne od innych. Zmiana jednej usługi nie wpływa w żaden sposób na inną. 3. Schemat przedstawia dane, które zostaną wysłane, umowa zawiera zdefiniowane sposoby wykonania usługi. Aby system był luźno powiązany, współdzielisz schemat i kontrakt zamiast klas i obiektów. 4. Polityka korzystania z usługi może oznaczać, że określony typ powiązania jest wymagany, aby można było z niego korzystać. Każdy, kto chce skorzystać z tej usługi, musi połączyć się z nią za pomocą tego typu powiązania.


title: Podejście do zmiany adresu e-mail użytkownika w aplikacji?

text: Jak mówi tytuł, jeśli użytkownik chce zmienić swój adres e-mail w aplikacji, pod względem programistycznym, jakie podejście (proces) zastosować? Gdzie przechowujesz nowy adres e-mail, dopóki użytkownik go nie potwierdzi?


title: Dlaczego pensje programistów są wyższe niż w większości innych popularnych „wykształconych” karier?

text: Zastanawiałem się nad tym od dawna i nawet na tej stronie nie udało mi się znaleźć odpowiedniej odpowiedzi. Porównując przeciętną pensję programisty z innymi typowymi karierami, w których wykształcenie jest najbardziej potrzebne, pensje, które otrzymują programiści, są zwykle znacznie wyższe. Przynajmniej na początkowych i średnich poziomach skali pracy. Nawet dla programistów, którzy nie mają żadnego stopnia naukowego, wynagrodzenie jest bardzo wysokie. Spróbuj porównać to na przykład z początkującymi i średnio doświadczonymi prawnikami, lekarzami i nauczycielami. I nie jest tak, że programiści są w dzisiejszych czasach rzadkością. Zasoby programistyczne są znacznie bogatsze niż prawo i medycyna. Jak myślisz, jaka jest tego przyczyna? ## EDIT: Tylko trochę statystyk, aby wykonać kopię zapasową mojego oświadczenia. ** Spróbuj napisać pełną, dokładną odpowiedź, a nie tylko „ROI” lub „Podaż i popyt”. Te proste odpowiedzi nie obejmują całego problemu.**


title: Jaka jest etykieta w negocjowaniu zapłaty za pracę programistyczną?

text: Powodem, dla którego zabieram ogólne pytanie biznesowe i umiejscawiam je w rozwoju oprogramowania, jest to, że jestem ciekaw, czy istnieją pewne trendy/etykieta/niuanse, które są typowe dla naszej branży. Na przykład, mogę sobie wyobrazić dwie różne postawy pracodawców wobec negocjacji dotyczących płatności: 1. damy ci najlepszą ofertę, więc nie możemy być elastyczni, ponieważ już prawie daliśmy ci wszystko, co możemy ci dać, 2. złożymy mu przeciętną ofertę i poddamy się lepszej, jeśli zostaniemy do tego zmuszeni. Jeśli spróbujesz grać twardą piłką w pierwszej postawie, prawdopodobnie będzie to kosztować cię pracę, ponieważ prosisz o więcej, niż mogą ci dać, jednak jeśli nie będziesz nalegać na lepszą wypłatę w drugiej postawie, otrzymasz gorszą oferta. Krótko mówiąc, aplikując do typowej pracy w naszej branży, jakie są typowe nastawienie pracodawców do ofert, które dają, jaki jest właściwy sposób proszenia o lepsze wynagrodzenie, czy te rzeczy różnią się między różnymi typami firm (na przykład startupy vs dobrze zakorzenione firmy) i jak te rzeczy różnią się między różnymi rodzajami kandydatów (absolwent vs student)?


title: Co zrobić, gdy Twój „nieudolny” projekt faktycznie „udaje się”?

text: Co byś zrobił, gdybyś był w sytuacji, w której projekt, nad którym pracujesz, jest oczywiście słabo zbudowany i będzie miał w przyszłości niepowodzenia i będzie koszmarem do utrzymania ... ale jest uważany za „sukces” przez kierownictwo, ponieważ klienci Są szczęśliwi? Czy po prostu nie powinno mnie to obchodzić? Czy to w porządku, że klienci nawet nie zdają sobie sprawy, że mogą mieć lepszą aplikację niż ta? W którym momencie przestaję dbać o to, by dobrze budować i po prostu płynąć z prądem?


title: Jak zintegrować platformę testowania jednostkowego JavaScript opartą na przeglądarce z moim przepływem pracy?

text: Zastanawiam się, jak bezproblemowo włączyć framework testowania jednostek JavaScript do mojego przepływu pracy. Kontekst jest taki, że mamy istniejący algorytm przetwarzania danych + aplikację internetową do jego wyświetlania, bez automatycznego testowania lub ciągłej integracji. Używamy Eclipse jako naszego IDE. W przypadku modyfikacji JavaScript aplikacji internetowej, fajnie byłoby dodać kilka testów jednostkowych, a qUnit wygląda prosto, dużo wsparcia społeczności itp. Oto jak obecnie myślę, że przepływ pracy będzie przebiegał: * Rozgałęź kod JavaScript, sprawdź go, zmodyfikuj to. W razie potrzeby zrefaktoryzuj go, aby był bardziej testowalny. * Napisz testy jednostkowe qUnit zgodnie z powyższym samouczkiem. * Uruchom Tomcat w Eclipse, uruchom stronę testową qUnit. * Otwórz przeglądarkę, sprawdź, czy wszystkie testy przeszły pomyślnie. * Przekaż kod z powrotem do oddziału. * Połącz gałąź z powrotem do pnia. * W tym momencie mógł wystąpić konflikt scalania, więc testy jednostkowe musiałyby zostać uruchomione ponownie, aby łącze trunkingowe sprawdziło, czy nadal działają. Problem tutaj, nadal wydaje się trochę kłopotliwy, aby uruchomić testy jednostkowe, kilka kliknięć, aby uruchomić i sprawdzić wyniki. Teraz, gdy mamy problem z połączeniem z powrotem do bagażnika, rozwiązanie ciągłej integracji, takie jak Jenkins, byłoby tutaj dobre, ale biorąc pod uwagę, że na razie nie wchodzi to w rachubę, skupmy się po prostu na tym, jak możemy ułatwić przeprowadzanie testów jako programista. Czy uważasz, że czegoś tu brakuje, czy to, co proponuję, jest rozsądne?


title: Rozproszone śledzenie problemów

text: Rozproszone śledzenie problemów wydaje mi się pomysłem na pasowanie, ale nigdy tak naprawdę nie wystartowało w wielkim stylu. Czy jest ku temu dobry powód? ## Jestem świadomy: * wszędzie bugz * zbyt skomplikowane, aby skonfigurować * zbyt wiele wymagań * rozsądnie udane, używane w niektórych dużych projektach * kopalne * próbuje zintegrować zbyt wiele rzeczy i kończy się tym, że jest nieco gorszą wersją wszystkich ich - może z wyjątkiem rozproszonej części śledzenia problemów, która jest przyzwoita (chyba najlepsza, jaką widziałem) * kilka innych mniejszych projektów * żaden z nich nie zyskał na popularności Zastanawiam się nad stworzeniem własnego, ale zanim zacznę, chciałbym wiedzieć, dlaczego żaden z pozostałych nie wystartował w wielkim stylu. ## Przewidywane problemy: (myślę, że wszystkie można przezwyciężyć) * łączenie rozproszonych problemów w miarę ich aktualizacji jest złożone, podobnie jak łączenie dowolnych plików kodu * ciągłość konwersacji może zostać zniszczona, ponieważ komentarze mogą pojawić się w dowolnym momencie, być może nie w poprawny przepływ * oczekiwanie serwera centralnego z aktualnymi problemami


title: Jak właściwie wykorzystać kod HMVC firmy Codeigniter

text: Mam problemy z owijaniem mózgu wokół tego, jak prawidłowo wykorzystać modułowe rozszerzenie dla Codeigniter. Z tego, co rozumiem, moduły powinny być całkowicie niezależne od siebie, abym mógł pracować nad jednym modułem i nie musieć się martwić o to, nad którym pracuje mój kolega z zespołu. Tworzę frontend i backend dla mojej witryny i nie mam pewności, jak powinienem uporządkować aplikacje. Pierwszą częścią mojego pytania jest to, czy powinienem używać kontrolerów głównych aplikacji do uruchamiania modułów, czy też użytkownicy powinni przechodzić bezpośrednio do modułów za pomocą adresów URL? IE: w mojej funkcji publicznej welcome.php index() { $this->data['blog'] = Modules::run( 'blog' ); $this->data['main'] = Modules::run( 'random_image' ); $this->load->view('v_template', $this->data); } public function calendar() { $this->data['blog'] = Modules::run( 'blog' ); $this->data['main'] = Modules::run( 'kalendarz' ); $this->load->view('v_template', $this->data); } Moją drugą częścią pytania jest to, czy powinienem utworzyć oddzielne foldery modułu front/back end -config -controllers welcome.php -admin admin.php -core -helpers -hooks -language -libraries -models -modules-back -dashboard -logged_in -login -register -upload_images -delete_images -modules-front -blog -calendar -random_image -search -views v_template.php -admin av_template.php Każda pomoc byłaby bardzo mile widziana.


title: Czy „aplikacja internetowa” Ruby jest zaprojektowana inaczej niż „witryna internetowa” w PHP?

text: Z mojego punktu widzenia Ruby jest językiem, którego można używać do tworzenia aplikacji desktopowych. W jaki sposób przekształca się to w „aplikację internetową” — i czy „aplikacja internetowa” naprawdę różni się od interaktywnej witryny internetowej?


title: Jak porównać czas kompilacji i czas testu jednostkowego?

text: Czy zależy to w dużym stopniu od rodzaju projektu (np. oprogramowanie naukowe vs system bankowy vs gra)? Jeśli tak, to w jakich obszarach różnica jest największa i najmniejsza? Z twojego doświadczenia, czy można bezpiecznie powiedzieć, że z reguły czas potrzebny na uruchomienie testów jednostkowych jest co najmniej o rząd wielkości większy niż czas potrzebny na zbudowanie oprogramowania?


title: Co oferuje Symfony Framework, czego nie oferuje Zend Framework?

text: Zawodowo współpracuję z Zend Framework od około roku. Żadnych większych skarg. Z pewnymi modyfikacjami wykonał dobrą robotę. Zaczynam pracę nad projektem pobocznym, w którym chcę mocno polegać na MongoDb i Doctrine. Pomyślałem, że dobrym pomysłem może być poszerzenie horyzontów i poznanie innego frameworka na poziomie przedsiębiorstwa. Wydaje się, że wokół Symfony jest dużo szumu. Po szybkim przejrzeniu strony i dokumentacji muszę przyznać, że wyszedłem dość rozczarowany. Zastanawiam się, co, jeśli w ogóle, Symfony ma do zaoferowania, czego Zend nie ma? Jaka byłaby korzyść z wyboru Symfony?


title: Czy uczelnie powinny kłaść większy nacisk na uczenie studentów wzorców projektowych?

text: Chociaż słyszałem o wzorcach projektowych wymienianych na kilku kursach na uniwersytecie, znam tylko jeden kurs, który faktycznie uczy wzorców projektowych. W prawie wszystkich innych dziedzinach (algorytmy, równoległość, architektura, języki dynamiczne, paradygmaty itp.) istnieje kilka, często kurs podstawowy i kurs zaawansowany. Czy uniwersytety powinny kłaść większy nacisk na nauczanie studentów o wzorcach projektowych i organizować więcej kursów na temat wzorców projektowych? Czy brak wiedzy na temat wzorców projektowych jest powszechny wśród świeżo upieczonych młodszych programistów?


title: Czuję się trochę… niedostatecznie obciążony na moim kursie uniwersyteckim

text: Obecnie jestem studentem drugiego roku studiów na kierunku Informatyka. Oczywiście w ramach mojego programu nauczania są kursy programowania. Jednak czuję się bardzo rozczarowany jego postępem. Dużo się nauczyłam, aw wolnym czasie lubię kodować jako hobby. Obecnie jestem na kierunku Informatyka II. Nigdy nie brałem CS 1, ponieważ wydawało mi się to raczej proste – zapytałem kogoś z działu, czy zastąpiłby moje wymagania CS 1, gdybym zdał egzamin końcowy (co zrobiłem śpiewająco). W każdym razie lekcja idzie dość wolno. Wygląda na to, że reszta klasy ma trudności ze zrozumieniem podstawowych pojęć, które profesor musi ciągle powtarzać, aby pomóc im zrozumieć. Czy to normalne? Patrząc na plan zajęć, wydaje mi się, że wiem wszystko oprócz jednej lub dwóch rzeczy pod sam koniec semestru. Czy mogę na to spojrzeć z innej perspektywy, żeby nie wydawało się to takie nudne?


title: Wywiad Microsoft SDE vs Microsoft SDET Wywiad i zasoby do nauki

text: Zawsze słyszałem, że wywiady SDE są znacznie trudniejsze do złamania niż SDET. Czy to naprawdę prawda? Słyszałem również, że jeśli kandydat nie radzi sobie dobrze na rozmowie kwalifikacyjnej SDE, czasami oferuje się mu również stanowisko SDET. Ile prawdy jest w tych rozmowach? Byłbym bardzo wdzięczny, gdyby ktoś umieścił dobre zasoby i wskazówki, jak przygotować się do wywiadów z Microsoftem.. jakie książki przeczytać, jakie notatki, strony z pytaniami dotyczącymi programowania online itp. Podaj jak najwięcej informacji. Z góry dziękuję wszystkim za cenną pomoc i wkład.


title: Relacja między projektami a rozwiązaniami w VS

text: Za chwilę zaczniemy z nowym oprogramowaniem i istnieją mieszane opinie na temat organizacji oprogramowania. Z przyjemnością wysłucham, co inni mogą mieć do powiedzenia na temat przedstawionych opcji, a także do jakich innych względów można się odnieść przy podejmowaniu takiej decyzji. 1. Podejście hierarchiczne 2. Podejście wymienne Podejście nr 1 składałoby się z pojedynczego rozwiązania w VS z wieloma powiązanymi z nim projektami (takich jak _Narzędzia_ , _Usługa_ , _Eksporter_ , _Gui_ itp.). Wszystko byłoby w jednej kolekcji i tym samym katalogu głównym (dla pliku rozwiązania) i podkatalogach (dla plików projektu), że tak powiem. Podejście nr 2 składałoby się przede wszystkim z zestawu projektów, które nie są ze sobą powiązane (oczywiście poza referencjami), podczas gdy celem rozwiązania (lub rozwiązań, jeśli chcielibyśmy stworzyć różne konfiguracje dla różnych dostaw) byłoby wyłącznie w celu odniesienia się do (zewnętrznych) projektów gromadzących je w GUI. Byłoby n+1 katalogów (jeden dla każdego pliku projektu i dodatkowy dla pliku rozwiązania lub później dla plików rozwiązań). Przedyskutowaliśmy sprawę i wymieniliśmy zalety każdego podejścia i chociaż zgadzamy się co do faktów, członkowie zespołu nie są na tej samej stronie, co do wyboru. Jesteśmy bardzo demokratyczną organizacją, więc decyzja musi być przekonująca dla wszystkich (a przynajmniej zdecydowanej większości) i nie będzie żadnego odgórnego rozkazu od szefa. Nie ma wcześniejszej bazy kodu i nie trzeba uwzględniać kwestii finansowych. Które podejście jest lepsze? Co jest bardziej powszechnie stosowanym standardem w branży? Jakie względy można wziąć pod uwagę, aby zapewnić sztywność wyboru? # Edytuj Jest również w pełni możliwe, że nasz obecny projekt będzie podlegał sytuacji opisanej w tym pytaniu \- zarówno jako ten, który "pożycza" projekty z innych źródeł, jak i ten, od którego projekty są "pożyczane".


title: Wzorce projektowe, artykuły czy materiały dotyczące paradygmatów niezorientowanych na przedmiot?

text: Po obejrzeniu tego filmu na InfoQ o funkcjonalnych wzorcach projektowych, zastanawiałem się, jakie zasoby są dostępne na temat wzorców projektowych dla paradygmatów niezorientowanych obiektowo. Jest ich wiele dla świata OO (GOF, itp.) i architektury (EoEAA, itp.), ale nie wiem, co jest tam dla funkcjonalnych, logicznych lub innych paradygmatów programowania. Czy jest cokolwiek? Komentarz w filmie sugeruje, że być może nie - czy ktoś wie lepiej? (Nawiasem mówiąc, przez wzorce projektowe nie mam na myśli funkcji językowych ani struktur danych, ale podejście wyższego poziomu do projektowania aplikacji - jak omówiono w załączonym filmie)


title: W Perlu najlepszym sposobem na wstawienie znaku co N znaków

text: Chciałbym znaleźć najlepszy sposób w Perlu na wstawianie znaku co N znaków w ciągu. Załóżmy, że mam następujące: my $str = 'ABCDEFGH'; Chciałbym wstawić spację co dwa znaki, aby otrzymać: my $finalstr = 'AB CD EF GH'; Niewinnym sposobem byłoby: mój $finalstr; while ($str =~ s/(..)//) { $finalstr .= $1.' '; } (Ale ostatnie miejsce mnie nie uszczęśliwia.) Czy możemy zrobić coś lepszego? Czy możliwe jest użycie pojedynczego wzorca podstawienia s///, zwłaszcza aby użyć tego samego ciągu $str (i nie używać $finalstr)? * * * Kolejny krok: zrób to samo, ale z tekstem przed i po wzorach do wycięcia (i na pewno do zachowania), powiedz na przykład '<<' i '>>': my $str = 'blah < <ABCDEFGH>> bla'; moje $finalstr1 = 'bla <<AB CD EF GH>> bla"; moje $finalstr2 = 'bla << AB CD EF GH >> bla'; # alternatywny


title: JAVA IDE - Warunkowe punkty przerwania

text: Czy ktoś wie, czy istnieją jakieś IDE, które mogą trafić w punkty przerwania pod warunkiem? Na przykład, jeśli przeglądam dużą listę lub iteruję mapę lub coś, mogę chcieć zawiesić wykonanie tylko wtedy, gdy identyfikator == "foo" 1.) Czy jest to w ogóle możliwe do zaimplementowania dla IDE 2.) Czy są dostępne jakieś wtyczki dla Eclipse, aby to zrobić teraz?


title: Czy rekursywne rozwidlenie jest uważane za antywzorzec?

text: Zaczynam majstrować przy rozwidleniu procesów, żeby to wyczuć. Pomyślałem, że napiszę przykład, w którym praca jest rozdzielana między procesy potomne, a wyniki są przekazywane rodzicowi; w ten sposób może działać równolegle na kilku procesorach. W mojej pierwszej próbie rozwidlam się w pętli, co oznacza, że za każdym razem wszystkie istniejące procesy (oryginał, dzieci, wnuki itp.) wytwarzają kolejne rozwidlenie. To sprawia mi problemy (zużycie pamięci, szybki wzrost liczby procesów, śledzenie potoków do przekazywania danych w łańcuchu, itp.) i zastanawiam się, czy nie natknąłem się na antywzorca. **Mógłbym** po prostu rozwidlić N dzieci bezpośrednio od rodzica. Zdaję sobie sprawę, że często zdarza się fork i exec wiele razy; na przykład terminal rozwidla powłokę, a powłoka rozwidla edytor. Ale **czy jest uważane za złą praktykę rozwidlanie „rekursywnie”, gdy wszystkie dzieci są tego samego typu?**


title: Emacs-as-OS: przestarzały?

text: Próbując osiągnąć status przynajmniej początkującego z tak legendarnym edytorem, od dwóch miesięcy koduję w Emacsie. Staram się mieć otwarte serce, ale ciągle nie zgadzam się z jednym podstawowym wyborem projektu: że Emacs pozwala swoim użytkownikom nigdy nie odchodzić. W świecie z 2010 roku myślę, że każda poboczna funkcja Emacsa jest beznadziejnie za dedykowanym oprogramowaniem: * Nigdy nie użyłbym wbudowanej przeglądarki; Chrome wyprzedza o lata. * Nigdy nie użyłbym jego okropnej funkcji; Path Finder (Mac OS X) odpowiada moim potrzebom. * Nigdy nie użyłbym wbudowanego e-maila; interfejs internetowy Gmaila ma bardziej przydatne funkcje, takie jak Priorytety. * Itd. Oczywiście, mogę od czasu do czasu zagłębić się w Emacs, aby użyć wyrażeń regularnych itp. do jednego z powyższych zadań, ale poza wyrażeniami regularnymi naprawdę nie widzę powodu, aby kiedykolwiek dotykać tych funkcji pobocznych. Jestem całkowicie nowicjuszem, ale mam silne przeczucie, że Emacs-as-an-OS jest przestarzały. Eksperci Emacsa, czy uważasz, że wybór Emacsa jako kompleksowego środowiska jest właściwym wyborem na rok 2010 i przyszłość? Czy istnieją jakieś szczególne cechy peryferyjne, które wciąż są na czasie lub wyprzedzają swoje czasy w porównaniu z alternatywami?


title: Jakie masz sugestie dotyczące nauki myślenia?

text: Po pierwsze, nie jest to ogólne pytanie „uczyń mnie lepszym programistą”, mimo że wynik zadania tego pytania może _wydawać się_ do niego podobny. Na programrs.SE czytałem i widziałem, jak zamykają się tutaj, tutaj, tutaj, tutaj i tutaj. Wszyscy wiemy, że istnieje wiele ogólnych sugestii dotyczących doskonalenia umiejętności programowania (np. czytanie SO, czytanie polecanych książek, obserwowanie blogów, angażowanie się w projekty open source itp.). To jest **nie** to, o co mi chodzi. Doceniam również aktywne czytelnictwo tej witryny i mam nadzieję, że działa ona na moją korzyść, dając kilka świetnych odpowiedzi. Z przeczytanej tu korespondencji wynika, że istnieje ogromna liczba doświadczonych osób, które zajmują się lub pracowały w dziedzinach związanych z programowaniem. A większość z was potrafi przekazywać myśli w wymowny, zwięzły sposób. **Niedawno zauważyłem różnicę między kimś, kto potrafi programować, a programistą, który _naprawdę_ potrafi myśleć**. Nie wierzę, że aby stać się świetnym programistą, po prostu poddajemy się całemu życiu gąbczastego zachowania (tj. wchłaniamy wszystko, co dotyczy naszej dziedziny poprzez czytanie, słuchanie, oglądanie itp.). Powiedziałbym nawet, że znając każdą koncepcję programistyczną, która pozwala rozwiązać problem X szybciej niż wszyscy wokół ciebie, jeśli nie możesz _pomyśleć_, ogromnie się ograniczasz - jesteś tylko szybkim robotem. Lubię wierzyć, że bycie świetnym programistą ma zupełnie inne oblicze, które nie jest związane z tym, ile wiesz o programowaniu, ale chodzi o to, jak dobrze możesz przeplatać nowe koncepcje i stosować je w swoim zawodzie lub hobby programistycznym. Nie widziałem, by ktokolwiek zagłębiał się w ten aspekt ludzkiego umysłu i programowania ani nie zajmował się nim. (Tak, możliwe jest również, że nie szukałem wystarczająco mocno - przepraszam, jeśli tak jest.) Więc dla każdego, kto spędził czas na myśleniu o tym, o czym wspomniałem powyżej - a może to wszyscy tutaj, ponieważ jestem niewiele w tyle w moim rozwoju osobistym/zawodowym - **jakie są Twoje sugestie dotyczące nauki myślenia?** Oprócz zwykłego czytania, **co jeszcze zrobiłeś, aby być lepszym od innych ludzi w swojej/naszej dziedzinie?* *


title: Jak zaprojektować definicję klasy podczas dziedziczenia z wielu interfejsów

text: Biorąc pod uwagę dwie definicje interfejsów... IOmniWorkItem = interface ['{3CE2762F-B7A3-4490-BF22-2109C042EAD1}'] function GetData: TOmniValue; funkcja GetResult: TOmniValue; funkcja GetUniqueID: int64; procedura SetResult(wartość stała: TOmniValue); // procedura Anuluj; funkcja DetachException: Wyjątek; funkcja FatalException: Wyjątek; funkcja IsCanceled: logiczna; funkcja IsExceptional: logiczna; Właściwość Dane: TOmniValue czytać GetData; właściwość Wynik: TOmniValue odczyt GetResult zapis SetResult; właściwość UniqueID: int64 read GetUniqueID; koniec; IOmniWorkItemEx = interfejs ['{3B48D012-CF1C-4B47-A4A0-3072A9067A3E}'] funkcja GetOnWorkItemDone: TOmniWorkItemDoneDelegate; funkcja GetOnWorkItemDone_Asy: TOmniWorkItemDoneDelegate; procedura SetOnWorkItemDone(const Wartość: TOmniWorkItemDoneDelegate); procedura SetOnWorkItemDone_Asy(const Wartość: TOmniWorkItemDoneDelegate); // właściwość OnWorkItemDone: TOmniWorkItemDoneDelegate odczyt GetOnWorkItemDone zapis SetOnWorkItemDone; właściwość OnWorkItemDone_Asy: TOmniWorkItemDoneDelegate odczyt GetOnWorkItemDone_Asy zapis SetOnWorkItemDone_Asy; koniec; ... jakie są twoje pomysły na sformułowanie deklaracji klasowej, która dziedziczy po obu z nich? Mój obecny pomysł (ale nie wiem, czy jestem z niego zadowolony): TOmniWorkItem = class(TInterfacedObject, IOmniWorkItem, IOmniWorkItemEx) strict private FData : TOmniValue; FonWorkItemDone : TOmniWorkItemDoneDelegat; FonWorkItemDone_Asy: TOmniWorkItemDoneDelegate; FWynik : TOmniValue; FUniqueID : int64; ściśle chroniona procedura FreeException; zabezpieczona //funkcja IOmniWorkItem GetData: TOmniValue; funkcja GetResult: TOmniValue; funkcja GetUniqueID: int64; procedura SetResult(wartość stała: TOmniValue); zabezpieczona //funkcja IOmniWorkItemEx GetOnWorkItemDone: TOmniWorkItemDoneDelegate; funkcja GetOnWorkItemDone_Asy: TOmniWorkItemDoneDelegate; procedura SetOnWorkItemDone(const Wartość: TOmniWorkItemDoneDelegate); procedura SetOnWorkItemDone_Asy(const Wartość: TOmniWorkItemDoneDelegate); publiczny konstruktor Create(const data: TOmniValue; uniqueID: int64); destruktor Zniszcz; nadpisanie; public //IOmniWorkItem procedura Anuluj; funkcja DetachException: Wyjątek; funkcja FatalException: Wyjątek; funkcja IsCanceled: logiczna; funkcja IsExceptional: logiczna; Właściwość Dane: TOmniValue czytać GetData; właściwość Wynik: TOmniValue odczyt GetResult zapis SetResult; właściwość UniqueID: int64 read GetUniqueID; public //Właściwość IOmniWorkItemEx OnWorkItemDone: TOmniWorkItemDoneDelegate odczyt GetOnWorkItemDone zapis SetOnWorkItemDone; właściwość OnWorkItemDone_Asy: TOmniWorkItemDoneDelegate odczyt GetOnWorkItemDone_Asy zapis SetOnWorkItemDone_Asy; koniec; Jak zauważono w odpowiedziach, kompozycja jest dobrym podejściem do tego przykładu, ale nie jestem pewien, czy ma zastosowanie we wszystkich przypadkach. Czasami używam dziedziczenia wielokrotnego tylko po to, aby podzielić dostęp do odczytu i zapisu do niektórych właściwości na część publiczną (zazwyczaj tylko do odczytu) i prywatną (zazwyczaj tylko do zapisu). Czy nadal obowiązuje tutaj skład? Nie jestem do końca pewien, ponieważ musiałbym przenieść kwestionowaną właściwość z klasy głównej i nie jestem pewien, czy jest to właściwy sposób. Przykład: // publiczna część interfejsu interfejsu IOmniWorkItemConfig = funkcja interfejsu OnExecute(const aTask: TOmniBackgroundWorkerDelegate): IOmniWorkItemConfig; function OnRequestDone(const aTask: TOmniWorkItemDoneDelegate): IOmniWorkItemConfig; function OnRequestDone_Asy(const aTask: TOmniWorkItemDoneDelegate): IOmniWorkItemConfig; koniec; // prywatna część interfejsu IOmniWorkItemConfigEx = interface ['{42CEC5CB-404F-4868-AE81-6A13AD7E3C6B}'] function GetOnExecute: TOmniBackgroundWorkerDelegate; funkcja GetOnRequestDone: TOmniWorkItemDoneDelegate; funkcja GetOnRequestDone_Asy: TOmniWorkItemDoneDelegate; koniec; // implementacja klasy TOmniWorkItemConfig = class(TInterfacedObject, IOmniWorkItemConfig, IOmniWorkItemConfigEx) strict private FOnExecute : TOmniBackgroundWorkerDelegate; FOnRequestDone : TOmniWorkItemDoneDelegat; FOnRequestDone_Asy: TOmniWorkItemDoneDelegate; publiczny konstruktor Create (domyślnie: IOmniWorkItemConfig = nil); public //IOmniWorkItemConfig funkcja OnExecute(const aTask: TOmniBackgroundWorkerDelegate): IOmniWorkItemConfig; function OnRequestDone(const aTask: TOmniWorkItemDoneDelegate): IOmniWorkItemConfig; function OnRequestDone_Asy(const aTask: TOmniWorkItemDoneDelegate): IOmniWorkItemConfig; public //funkcja IOmniWorkItemConfigEx GetOnExecute: TOmniBackgroundWorkerDelegate; funkcja GetOnRequestDone: TOmniWorkItemDoneDelegate; funkcja GetOnRequestDone_Asy: TOmniWorkItemDoneDelegate; koniec;


title: Przetestuj prostą grę dla wielu graczy (do czterech graczy) na Androida na jednej maszynie programistycznej

text: Pracuję nad grą dla wielu graczy na Androida (bardzo proste jest to, że nie ma używanego silnika gry). Gra oparta jest na Java `Socket`. Cztery urządzenia połączą się z serwerem gry, a nowy wątek będzie zarządzać ich sesją. Serwer gry obsłuży wiele takich sesji (po 4 graczy w każdej). Martwię się o testowanie tej gry. Wiem, że można uruchomić wiele emulatorów Androida, ale mój laptop programistyczny ma bardzo ograniczone możliwości (3 GB RAM, 2 Ghz Intel Core2Duo i wbudowana karta graficzna). A ja już używam Ubuntu do tworzenia gry, dzięki czemu mam więcej dostępnej pamięci użytkownika niż w systemie Windows. W związku z tym laptop spali się na śmierć po uruchomieniu 4 instancji emulatora. Nie mam dostępu do żadnego urządzenia z Androidem, nie mam też innej maszyny z wyższą konfiguracją. I wciąż muszę rozwijać i testować tę grę. **P.S. :** Jestem studentem CS i obecnie nigdzie nie pracuję, a ta gra to projekt uniwersytecki, więc jeśli są jakieś płatne rozwiązania, nie mogę sobie na to pozwolić. Co mogę zrobić, aby bezproblemowo przetestować aplikację? możliwość przetestowania nawet 4 klientów (tj. tylko 1 sesji) wystarczyłaby, jest w porządku, jeśli nie mogę symulować rzeczywistego środowiska z około 10-20 aktywnymi sesjami gry (z 4 graczami w każdej).


title: Testowanie jednostkowe - pierwsze kroki

text: Dopiero zaczynam testowanie jednostkowe, ale nie jestem pewien, czy naprawdę rozumiem, o co w tym wszystkim chodzi. Czytam tutoriale i książki na ten temat, ale mam tylko dwa szybkie pytania: 1. Pomyślałem, że celem testów jednostkowych jest przetestowanie kodu, który faktycznie napisaliśmy. Jednak wydaje mi się, że aby po prostu móc uruchomić test, musimy zmienić oryginalny kod, w którym to momencie nie testujemy tak naprawdę kodu, który napisaliśmy, ale raczej kod, który napisaliśmy do testowania. 2. Większość naszych kodów opiera się na źródłach zewnętrznych. Jednak po refaktoryzacji naszego kodu, nawet jeśli złamałoby to oryginalny kod, nasze testy nadal działałyby dobrze, ponieważ zewnętrzne źródła są tylko zlepkami w naszych przypadkach testowych. Czy nie jest to sprzeczne z celem testów jednostkowych? Przepraszam, jeśli zabrzmię głupio, ale pomyślałem, że ktoś mógłby mnie trochę oświecić. Z góry dziękuję.


title: Zazwyczaj ilu programistów na svn?

text: Zacząłem wdrażać svn w swoich projektach szkolnych. W branży zazwyczaj ilu programistów korzysta z tego samego svn? Czy numery wersji są powiązane z liczbą programistów pracujących nad programem? Czy svn byłoby uważane za część rozwoju Agile?


title: Czy tworzenie czegoś w pobraniu to zła praktyka kodowania, jeśli to nie istnieje?

text: Mam więc usługę sieciową, która ma coś w rodzaju `getAccount`, w którym zwraca identyfikator do konta, jeśli go otrzymał, w przeciwnym razie zgłosi wyjątek. Klient zawsze będzie chciał utworzyć konto, jeśli zostanie zgłoszony wyjątek z tymi samymi informacjami, z którymi wykonano get. Tworzę wygodną bibliotekę dla klientów, która będzie obsługiwać wszystkie wywołania usług internetowych w środku, aby nie musieli wiedzieć, jak sami wykonywać wywołania. Zastanawiam się nad tym, że w tej bibliotece, gdybym miał utworzyć `getAccount(nazwa_konta)`, które otrzyma konto, jeśli istnieje, a jeśli nie utworzy go i zwróci informacje, czy to zła rzecz? Czy powinienem pozostawić klientowi obsługę wyjątków, czy po prostu nazwać to w stylu getOrCreateAccount? Czy to ma znaczenie? Czy tworzenie czegoś w operacji get to zła praktyka?


title: Czy specyfikacja funkcjonalna jest „dokumentem projektowym”?

text: Trochę więc pogubiłem się w terminach, więc przede wszystkim przedstawiam to, czego się do tej pory nauczyłem: Specyfikacja wymagań systemowych - czego chcą użytkownicy, co system ma robić Wymagania funkcjonalne - jak będą rzeczy, których chcą użytkownicy faktycznie działa w aplikacji Również powiedziałbym, że ta ostatnia jest dokumentem projektowym. Czy to prawda, czy istnieje inny dokument oprócz tych?


title: Używanie WCF jako interfejsu API dla dostępu do bazy danych przez GUI, czy nie?

text: Pierwotnie zadałem to pytanie na Stackoverflow, ale zasugerowano, aby przenieść pytanie tutaj. Zadawałem to pytanie jakiś czas temu na forach MSDN, ale chciałbym uzyskać drugą opinię od StackOverflow, ponieważ wypróbowałem tę trasę i znalazłem kilka CONS, ale chciałbym również usłyszeć więcej opinii. Scenariusz: Mam program obsługi systemu Windows, który wyodrębnia dane z plików i wstawia je do bazy danych MS SQL. Istnieje program z graficznym interfejsem użytkownika, który wykonuje pewne filtrowanie i obliczenia oraz wyświetla dane SQL w czasie rzeczywistym. Tak więc GUI w zasadzie wyświetla selektywne rekordy z bazy danych w dowolnym momencie. Powinno być również możliwe, aby GUI wstawiało i aktualizowało rekordy na podstawie reguł. Również dane pobierane z Bazy Danych mogą być ogromne i dobrze byłoby również umożliwić zdalny dostęp do danych przez GUI (nie krytyczne) Więc moje pytanie bardziej szczegółowo: 1 - czy powinienem utworzyć usługę WCF w moim programie Service, który udostępnia interfejs API, aby uzyskać dostęp i aktualizować rekordy? ZALETY: * Mogę zmienić backendową bazę danych i nie musiałbym aktualizować aplikacji GUI. * GUI byłby wolny od sql. * zezwolić GUI na bezpośredni dostęp do bazy danych oraz samo pobieranie i aktualizowanie. 2 - zezwól GUI na bezpośredni dostęp do Bazy Danych oraz samodzielne pobieranie i aktualizowanie. ZALETY: * zabezpieczenia już wdrożone szybciej niż opcja 1 łatwiejsza do wdrożenia * zmiany w rekordach mogą wywołać zmianę danych zamiast odpytywania o nowe dane do wyświetlania w czasie rzeczywistym. * GUI może uzyskać zdalny dostęp do danych, jeśli dostęp do bazy danych SQL jest skonfigurowany jako dostęp zdalny (możliwe zagrożenie bezpieczeństwa?) Oto oryginalne pytanie: http://social.msdn.microsoft.com/Forums/pl-PL/architecturegeneral/ gwint/8ef537c5-9a79-42b5-a6a0-f7278d3f506e


title: Jak mogę ponownie wykorzystać obiekt z innego projektu?

text: Mam pierwszy projekt, który ma funkcję przeglądania, wstawiania i aktualizowania rekordu pracownika, z tym ewentualnie stworzę klasę java dla UI i kolejną dla połączenia z bazą danych z poleceniami do przeglądania, wstawiania i aktualizowania rekordu. Potem mam drugi projekt, który wyliczy wynagrodzenie pracownika. Jak mogę ponownie wykorzystać obiekt z pierwszego projektu? Czy powinienem pobrać plik Java, plik klasy lub oba z pierwszego projektu i zapisać go w folderze projektu drugiego projektu? Jak dodać cechę obiektu z pierwszej klasy?


title: git, maven i jenkins - przepływ pracy wersjonowania, tworzenia i budowania wydań

text: Jaki jest preferowany sposób wykonywania następujących czynności z git, maven i jenkins: Tworzę aplikację, którą chciałbym utrzymać w gałęziach "dev" i "release". Chciałbym, żeby Jenkins zbudował oba. Może być tak, że artefakty wydania będą miały wersje takie jak 1.5.2, a kompilacje deweloperskie będą po prostu 0.0.1-SNAPSHOT. Nie chciałbym mieć 2 różnych plików pom.xml. Zajrzałem do profili, ale wygląda na to, że nie są w stanie zmienić wersji artefaktów. Jednym ze sposobów, na który patrzyłem, może być dodanie „kwalifikatora” do testowych wersji. Oczywiście mógłbym po prostu zmienić nazwę pliku, ponieważ prawdziwy artefakt - informacje na ten temat nie są ważne, ponieważ aplikacja jest samodzielna. Jaki byłby preferowany sposób na zrobienie tego? Albo jak byś to zrobił?


title: Szef prosząc o pracę w nadgodzinach, ale pod radarem

text: Więc któregoś dnia mój szef (nazwijmy go Colfax) poprosił mnie o pracę nad projektem, ale żebym z nikim o tym nie rozmawiał (w tym z innymi programistami z mojego zespołu) i że musiałoby to być zrobione poza normalną pracą godziny. W zamian Colfax zaoferował mi „nieoficjalne” dni urlopu równe liczbie godzin spędzonych na projekcie. Kiedy zapytałem Colfaxa, czy jego szef (nazwijmy go Schuyler) wiedział, co oferuje, Colfax powiedział, że Schuyler nie wie i zasugerował, że on (Colfax) wpadnie w kłopoty, jeśli Schuyler się dowie. Mój szef powiedział też, że gdybym się na to zgodził, moje wysiłki zostaną zapamiętane do „przyszłego rozważenia”. Praca jest dla naszego pracodawcy, więc wszystko jest na porządku dziennym. Mam jednak nieprzyjemne przeczucie co do całej sprawy. Część mnie chce pracować nad projektem -- jak wiecie -- kodować i kodować coś fajnego i dość prostego. Z drugiej strony cała sprawa wydaje się obskurna i podstępna. Czy byłbym „złym pracownikiem” za odmowę dodatkowej pracy? A może jestem moralnie usprawiedliwiony, aby nie wykonywać pracy? **AKTUALIZACJA** Wiem, że minęło trochę czasu, odkąd wysłałem to pytanie, ale pomyślałem, że ludzie, którzy uczestniczyli w dyskusji, mogą być zainteresowani tym, że Colfax zrezygnował kilka miesięcy po tej rozmowie. Tak więc, gdybym poszedł za nim, prawdopodobnie poszłoby to na marne. Niezależnie od tego dziękuję wszystkim za komentarze.


title: Zalecany proces przeglądu kodu z mercurial

text: Zazwyczaj używaliśmy Perforce i SmartBear's Code Collaborator w `Big Corp`, a teraz będziemy również używać Mercurial w niektórych projektach. Code Collaborator obsługuje Mercurial (używamy wersji 5) i próbuję określić, kiedy najlepszy czas (podczas procesu commit/push to server) jest najlepszym/efektywnym czasem na przegląd kodu dzięki


title: Alternatywy dla oDesk.com do pracy kontraktowej? czy oDesk jest już jednym z najlepszych?

text: > **Możliwy duplikat:** > Gdzie mogę znaleźć pracę programistyczną online? Widziałem w jednym wątku oDesk.com wzmiankę o pracy kontraktowej i pracy jako freelancer, a osoby wymienione do wynajęcia proszą o 15 USD za godzinę i do 80 lub 100 USD za godzinę -- z tych, które widziałem w przypadku prac programistycznych. Zastanawiam się, jakie są alternatywy poza korzystaniem z oDesk.com do pracy w ramach umowy programistycznej? (Opłata, którą pobiera, wydaje się dość wysoka, że za 80 USD / godzinę, którą wystawiam, obciąża pracodawcę 8,89 USD / godzinę, więc pracodawca musi zapłacić 88,89 USD / godzinę.)


title: Jak powinienem zacząć z Lispem?

text: Programuję od lat, przerabiając różne iteracje Blub (BASIC, Assembler, C, C++, Visual Basic, Java, Ruby w dowolnej kolejności "Blub-ness") i chciałbym się nauczyć Seplenienie. Jednak mam dużo intertia, co z ograniczonym czasem (rodzina, praca na cały etat itp.) I komfortowym szczęściem z moim obecnym Blubem (Java). Więc moje pytanie jest takie, biorąc pod uwagę, że jestem kimś, kto naprawdę chciałby nauczyć się Lispa, jakie byłyby pierwsze kroki, aby uzyskać dobry wynik, który **demonstruje wyższość Lispu w tworzeniu stron internetowych**? Może nie rozumiem sedna sprawy, ale w ten sposób początkowo widziałbym zastosowanie mojej wiedzy Lisp. Myślę "użyj dialektu A, użyj IDE B, postępuj zgodnie z instrukcjami na stronie C, kwestionuj swoje zdrowie psychiczne po monadach za pomocą doradcy D". Chciałbym tylko wiedzieć, co ludzie tutaj uważają za optymalny zestaw wartości dla A, B, C i być może D. Również dyskusja na temat względnej wartości uczenia się tak potężnego języka, w przeciwieństwie do, powiedzmy, zostania Railsami ekspert. Żeby dodać trochę więcej szczegółów, będę rozwijać na MacOS (lub Linux VM) - żadne podejście oparte na Windowsie nie będzie potrzebne, dzięki. **Uwagi dla osób, które tylko przeglądają stronę** Zamierzam pozostawić to pytanie otwarte przez jakiś czas, aby móc wyrazić opinię na temat sugestii, gdy już je przejrzę. Jeśli zdarzy ci się przeglądać i czujesz, że masz coś do dodania, zrób to. Byłbym bardzo wdzięczny za twoją opinię. **Ciekawe linki** Zakładając, że wchodzisz na Lisp z Javy, ten zestaw linków pozwoli Ci szybko zacząć. 1. Używanie wtyczki La Clojure firmy Intellij do integracji Lispa (videocast) 2. Lisp dla sieci 3. Internetowa wersja Practical Common Lisp (c/o Frank Shearar) 4. Land of Lisp - gra oparta na `(+ (+ bardzo dziwaczna) )` sposób, ale wszystko jest takie proste 5. Zainstaluj Clojure i Sublime 2 na MacOS jako **doskonały** przewodnik dla początkujących 6. Spójrz na książkę Clojure in Action. Pracował dla mnie.


title: Jak zarządzać zaległościami trackera problemów

text: Od kilku lat sumiennie używamy Traca, a nasza lista "aktywnych biletów" rozrosła się do prawie 200 pozycji. Należą do nich błędy o zbyt niskim priorytecie i zbyt skomplikowane do naprawienia na razie, prośby o nowe funkcje, które zostały odroczone, problemy, które nigdy tak naprawdę nie generowały skarg, ale wszyscy zgadzają się, że powinny zostać kiedyś naprawione, planowane refaktoryzacje kodu i inne niedociągnięcia projektowe, które robimy. chcieć stracić orientację itp. W rezultacie, przy prawie 200 z tych problemów, lista jest prawie przytłaczająca; nie jest już przydatne jako źródło tego, nad czym trzeba teraz popracować. Jaki jest najlepszy sposób śledzenia tego typu problemów? Częściowo problem polega na tym, że niektóre z tych kwestii mają tak niski priorytet, że mogą nigdy nie zostać rozwiązane. Nie znoszę tracić z oczu tych przedmiotów (podobnie jak nie chcę wyrzucać czegoś z domu na wypadek, gdybym kiedyś tego potrzebował); czy muszę je wyrzucić (oznaczając je jako niepoprawne) i założyć, że mogę je znaleźć w przyszłości, jeśli kiedykolwiek będę ich potrzebować?


title: Przełącz relację rodzic-dziecko w języku C#

text: Używając C# i WPF mam sytuację, w której moje dane są zorganizowane hierarchicznie. Używam widoku drzewa do przedstawienia tego: * Grupa_01 * Obiekt_01 * Materiał_01 * Tekstura * Materiał_02 * Tekstura_02 * Grupa_02 * Obiekt_02 * Materiał_03 * Tekstura_03 Chciałbym móc zmienić kolejność hierarchii, na przykład móc utworzyć dane zaczynając od materiałów i znać wszystkie obiekty, które używają tego konkretnego materiału * Materiał_02 * Obiekt_01 * Grupa_01 * Obiekt_02 * Grupa_02 Jaka jest zalecana struktura danych do organizowania danych? I jak mogłem łatwo przełączać się między tymi wizualizacjami?


title: Co powinien wiedzieć programista C?

text: Jakie są koncepcje/techniki/funkcje językowe, które każdy porządny programista C powinien znać/być świadomy (wyłączając ogólną inżynierię oprogramowania i tym podobne, i skupiając się tylko na rzeczach specyficznych dla C). Chciałbym wiedzieć, żebym mógł uzupełnić niektóre możliwe luki w mojej wiedzy na temat języka C.


title: Jak śledzić przesyłanie plików i zwracać status przesyłania za pomocą REST?

text: Użytkownicy naszego oprogramowania będą chcieli zbiorczo przesyłać potencjalnie duże ilości plików na nasze serwery. Pożądane jest wtedy, abyśmy wyświetlali status przesyłania za każdym razem, gdy użytkownik przegląda ekran przesyłania. To nie musi być bardziej wymyślne niż pasek postępu ze statusem procentowym. ![Nasz użytkownik będzie chciał przesłać wiele plików naraz i zobaczyć stan ich przesyłania.](http://i.stack.imgur.com/04DEU.png) Moje pytanie brzmi, jak mogę śledzić przesłane pliki i zwróć je w dowolnym momencie za pomocą prostego żądania GET w '/upload/status'. Pierwsze rozwiązanie ma na celu śledzenie żądanego przesyłania i przetwarzania w tabeli bazy danych. W ten sposób jest to tak proste, jak sprawdzanie bazy danych za każdym razem, gdy użytkownik chce zobaczyć swój status przesyłania. ![przesłane pliki są zapisywane w bazie danych](http://i.stack.imgur.com/KHf7v.png) Czy jest to realne i poprawne rozwiązanie do obsługi stanu przesyłania plików w usłudze REST? Czy powinienem szukać rozwiązań gdzie indziej?


title: Jakie są najbardziej niezbędne niejęzykowe rzeczy, które programista powinien wiedzieć?

text: Ostatnio dużo o tym myślałem. Obecnie pracuję w małej firmie internetowej, prawie skończyłem szkołę i napisałem aplikację na iPhone'a, ale nie jestem pewien, na czym jeszcze muszę się skupić. Zdecydowałem, że chcę programować, więc aktywnie czytam wszystko, co mogę dostać w swoje ręce, co dotyczy Objective-C / C++ (Cocoa, OpenGL itp.). Ale to nie są rzeczy, o których mówię. Wiem, że muszę „opanować” jeden lub dwa języki. To, o czym mówię, to inne „rzeczy”. Rzeczy takie jak uczenie się i używanie kontroli źródła, wzorce projektowe itp. Na jakiej rzeczy (lub rzeczach, tylko jedna na odpowiedź) twoim zdaniem powinienem się jednocześnie skoncentrować? Możesz wziąć pod uwagę w swojej odpowiedzi, że chcę przejść wyżej wspomnianą ścieżkę kariery, ale nie musisz. Chcę tylko ładnej listy rzeczy do zbadania i wykorzystania w mojej karierze. UWAGA: Zadałem to pytanie na Stackoverflow i po kilku dobrych odpowiedziach zostało zamknięte i powiedziano mi, że powinienem je przenieść tutaj. Oto oryginał: http://stackoverflow.com/questions/4452857/what-are-the-most-necessary-non-language-specific-things-a-programmer-needs-to-kn Jedna rzecz to dużo odpowiedzi dotyczyły umiejętności ludzi, co jest w porządku, i zgadzam się, ale szukałem bardziej programowania konkretnych rzeczy, takich jak, nie wiem, uczenie się szesnastkowych lub wzorców projektowych (może konkretnych) itp.


title: Gdzie umieścić przykładowe implementacje w moim frameworku?

text: Stworzyłem dość prosty framework szablonów i mam domyślne implementacje dla niektórych moich interfejsów używanych do przekazywania informacji. Przechowuję je w przestrzeni nazw MyFramework.Default Jednak nie jestem pewien, gdzie umieścić przykładowe implementacje, takie jak szablon, który tworzy konkretną klasę. Wydaje się, że ten szablon byłby przydatny dla osób korzystających z mojego frameworka, ale nie jestem pewien, czy należy on do oddzielnego zestawu, czy może do przestrzeni nazw w ramach frameworka. Jeśli jest to przestrzeń nazw, czy istnieje jakaś konwencja jej nazwy?


title: Unikaj zostania programistą „teoretykiem”

text: Znalazłem ten artykuł w kilku postach na SO. Wpadam w szósty archetyp; „Teoretyk”. Definiuje „Teoretyka” jako: > Teoretyk wie wszystko o programowaniu. Może on spędzić cztery godziny na wykładach o historii niejasnego języka programowania lub dostarczając dowodu na to, że napisany przez ciebie kod jest mniej niż idealnie optymalny, a jego uruchomienie może zająć dodatkowe trzy nanosekundy. Problem polega na tym, że Teoretyk nie wie nic o rozwoju oprogramowania. Kiedy Theoretician pisze kod, jest on tak „elegancki”, że zwykli > śmiertelnicy nie potrafią go zrozumieć. Jego ulubioną techniką jest rekurencja, a każdy blok kodu jest dopracowywany na maksa kosztem terminowości i czytelności. >> Teoretyk również łatwo się rozprasza. Proste zadanie, które powinno zająć > godzinę, zajmuje Teoretykom trzy miesiące, ponieważ uznają, że istniejące > narzędzia są niewystarczające i muszą zbudować nowe, aby zbudować nowe biblioteki, aby zbudować zupełnie nowy system spełniający ich wysokie standardy. Teoretyk może zostać zamieniony w jednego z twoich najlepszych graczy, jeśli zmusisz go do gry w ramach samego projektu i przestanie spędzać czas na pracy nad The Ultimate Sorting Algorithm. Nawet gdy pracuję nad czymś, co powinno być prostym projektem, mam tendencję do gubienia się w próbach przeprojektowania wszystkiego od zera (To prawdopodobnie wyjaśnia, dlaczego zmarnowałem około 2 lat, próbując stworzyć system operacyjny od zera. Ale nawet ja to zauważyłem ostatecznie było bezcelowe). Co może mi pomóc tego uniknąć? I trzymać się zasad KISS? Dziękuję


title: Najlepsze miejsce na rozpoczęcie bloga

text: Chcę zacząć pisać bloga programistycznego iw ten sposób promować się oprócz CV. Czy możesz mi polecić dobrą stronę, która będzie łatwa do założenia bloga i ma wbudowaną wysoką funkcjonalność składni. Widziałem bloggera i wordpress.com i nie jestem pewien, czy zacząć, płatne strony również mogą być opcją. Dzięki za pomoc.


title: Jak mam skonfigurować folder źródłowy?

text: Mam /src/main/ z całym moim kodem (mam też /src/online, /src/prvlibs, /src/test itp.), ale teraz myślę o przeniesieniu kilku nieaktywnych projektów z folderu. Jasne, że mogę wejść i usunąć wszystkie obiekty, (niektóre) pliki projektów itp., Więc nie zajmuje to 200 MB wygenerowanych danych. Ale myślę, że może być fajnie tylko dla 20 projektów lub mniej zamiast kilkunastu prototypów, które nie są jednorazowymi testami. Używam git do kontroli źródła (ale jestem pewien, że wszystkie scm robią to samo). Nie lubią brakujących plików, a jeśli je usunę, nie są łatwe do przeglądania. Podoba mi się, jak mogę zatwierdzić wszystkie moje źródła, przechodząc do /src/main i zatwierdzając. I mogę je wszystkie popchnąć równie łatwo. Ale problem polega na przenoszeniu folderów (na mój zewnętrzny dysk twardy i zachowaniu historii). Czy każdy folder powinien mieć swoje własne repozytorium? czy jest jakieś obejście, z którego mogę skorzystać? Jeśli każdy folder ma swoje własne repozytorium, czy istnieje prosty sposób na przesłanie wszystkich moich folderów na dysk HD (lub witrynę internetową) w celu utworzenia kopii zapasowej?


title: Jakie tło jest potrzebne, aby zrozumieć The Art of Computer Programming, tom 4A?

text: Niedawno zainwestowałem w nowo wydrukowany czterotomowy zestaw _Sztuki programowania komputerowego_ Donalda Knutha. Tak jak ten plakat, prawdopodobnie nie mam teraz czasu na przeczytanie całego zestawu, mając pracę programisty na pełen etat. , spędzanie czasu z dziewczyną, wykonywanie prac domowych itp., choć nie mam wątpliwości, że byłoby to fascynujące. Transport publiczny nie jest dostępny w przypadku moich dojazdów i chyba że istnieje wersja „książki na płycie CD”, konsumowanie materiału podczas moich dojazdów prawdopodobnie nie wchodzi w rachubę. Po przeczytaniu tej recenzji tomu 4A zdałem sobie sprawę, że przynajmniej część informacji może być bardzo pomocna w mojej tezie. Nawiasem mówiąc, praca jest pod mój doktorat z muzyki, który odszedł nieco dłużej niż bym chciał. Wygląda na to, z opisu recenzenta, że algorytmy kombinatoryczne mogą być bardzo pomocne w rozwiązaniu problemu, który próbuję rozwiązać. Czy będę musiał przeczytać pierwsze trzy tomy, aby zrozumieć czwarty? Chociaż nie mam dyplomu z informatyki per se, mam spore doświadczenie i udało mi się ukończyć kursy z algorytmów, kompilatorów i baz danych. Czy ktoś z was przeczytał część lub całość tomu 4A? Jakie było Twoje przeszłość (lub jej brak), które pomogło (lub pomogłoby) w zrozumieniu materiału?


title: Najlepsze praktyki dotyczące architektury (MVC): Repozytorium zwraca obiekt i skład członkowski obiektu, do którego uzyskano bezpośredni dostęp lub repozytorium zwraca skład członkowski obiektu

text: Z punktu widzenia architektury, które podejście jest preferowane (i dlaczego)? $validation_date = $users_repository->getUser($user_id)->validation_date; * Wydaje się naruszać prawo Demeter poprzez dostęp do składowej obiektu zwróconego przez wywołanie metody * Wydaje się naruszać Encapsulation poprzez bezpośredni dostęp do składowej obiektu `$validation_date = $users_repository->getUserValidationDate($user_id);` * Wydaje się naruszać zasadę pojedynczej odpowiedzialności jako $ users_repository nie zwraca już tylko obiektów użytkownika


title: System oddzielony w niewłaściwych miejscach: meta-problem?

text: Na poziomie meta często stwierdzam, że kiedy organicznie rozwijam bazę kodu, części systemu, które w końcu muszą o sobie wiedzieć (przynajmniej przez jakiś interfejs), zostały bezlitośnie rozdzielone. Zdarza się to często w badaniach kodu prototypu, gdzie często myśli się o poprawkach i małych ulepszeniach, które nie były planowane w oryginalnej bazie kodu. Zwykle niektóre ustawienia lub dane muszą zostać przeszukane przez około 15 milionów warstw wywołań funkcji w sposób, którego nigdy nie przewidziałem, projektując kod. Prowadzi to do bardzo brzydkiego dylematu: 1. Użyj brzydkiego hacka. Może to być kolejna zmienna globalna, przenosząca dane do klasy, do której wyraźnie nie należy, umieszczając w środku kodu kilka instrukcji print, które wcześniej nie miały nic wspólnego z logiką we/wy, wykonując pozornie proste zadanie w bardzo okrężny sposób, aby zmieściło się w mojej oryginalnej bazie kodu, itp. 2. Refaktoryzacja operacji strzelby. W praktyce prawie nigdy się to nie udaje, ponieważ kod prawdopodobnie i tak będzie musiał zostać napisany od nowa, jeśli ma stać się jakością produkcyjną, trudno było go uruchomić za pierwszym razem, trudno go przetestować lub po prostu mam wyższe priorytety niż pisanie czyste, nadający się do utrzymania kod, gdy albo mam termin, albo wiem, że na razie to tylko prototyp. Co więcej, następna poprawka może złamać wszelkie fajne abstrakcje, które wymyślę. Czy są jakieś dobre meta-wskazówki lub zasady projektowania, które w pierwszej kolejności pomogą mi uniknąć takich sytuacji? **_NIE_** szukam odpowiedzi, które po prostu zalecają refaktoryzację po fakcie, ponieważ koszmarna sesja refaktoryzacji chirurgii shotgun jest dokładnie tym, czego staram się unikać.


title: Czy 12-strunowa powinna być w swojej klasie i dlaczego?

text: To pytanie dotyczy projektu pracy domowej w mojej pierwszej klasie programowania Java (program online). Zadanie polega na stworzeniu klasy „instrumentu strunowego” przy użyciu (między innymi) tablicy nazw String reprezentujących nazwy ciągów instrumentów („A”, „E” itp.). Pomysł na 12-strunowy wykracza poza zakres zadania (w ogóle nie musi być uwzględniony), ale teraz, gdy o tym pomyślałem, chcę dowiedzieć się, jak to zrobić. Część mnie czuje, że 12-strunowa powinna mieć swoją własną klasę, ale inna część mnie uważa, że powinna być w klasie gitary, ponieważ jest to gitara. Przypuszczam, że stanie się to jasne w miarę postępów, ale pomyślałem, że zobaczę, jaki rodzaj odpowiedzi tutaj otrzymam. Poza tym, dlaczego mieliby prosić o String[] dla nazw ciągów instrumentów? Wygląda na to, że char[] ma więcej sensu. Dziękuję za wgląd. Oto mój dotychczasowy kod (praca w toku): public class Guitar { private int numberOfStrings = 6; private static int numberOfGuitars = 0; private String[] stringNotes = {"E", "A", "D", "G", "B", "A"}; private boolean tuned = false; prywatna gra logiczna = fałsz; public Guitar(){ numberOfGuitars++; } public Guitar(boolean dwanaścieString){ if(dwanaścieString){ stringNotes[0] = "E, E"; ciągUwagi[1] = "A, A"; ciągUwagi[2] = "D, D"; ciągUwagi[3] = "G, G"; ciągUwagi[4] = "B, B"; stringNotes[5] = "E, E"; liczbaStringów = 12; } } public int getNumberOfStrings() { return numberOfStrings; } public void setNumberOfStrings(int strings) { if(strings == 12 || strings == 6) { if(strings == 12){ stringNotes[0] = "E, E"; ciągUwagi[1] = "A, A"; ciągUwagi[2] = "D, D"; ciągUwagi[3] = "G, G"; ciągUwagi[4] = "B, B"; stringNotes[5] = "E, E"; liczbaStrings = stringi; } if(strings == 6) numberOfStrings = strings; }//if else System.out.println("***BŁĄD***Gitara może mieć tylko 6 lub 12 ciągów***BŁĄD***"); } public void getStringNotes() { for(int i = 0; i < stringNotes.length; i++){ if(i == stringNotes.length - 1) System.out.println(stringNotes[i]); else System.out.print(stringNotes[i] + ", "); }//dla     }


title: Rozwój algorytmów na stanowiskach pracy

text: Mam wykształcenie matematyczne, ale także rozważam karierę w jakiejś formie tworzenia oprogramowania. W szczególności jestem zainteresowany dowiedzeniem się, jakie branże najprawdopodobniej będą miały większe skłonności do tworzenia algorytmów / rozwiązywania problemów matematycznych i logicznych, niż do tworzenia czystych aplikacji itp. Oczywiście zakładam, że pewien podzbiór kanonicznych struktur danych i związane z nimi algorytmy (drzewa, listy, tablice haszujące, zbiory, mapy z wyszukiwaniem, wstawianiem, przechodzeniem itp.) będą w większości obecne w tworzeniu oprogramowania. Jednak gdzie jest bardziej prawdopodobne, że napotkam problemy o bardziej dyskretnej naturze matematycznej (kombinatorycznej, teoria grafów, zbiory, struny, ...) wyraźnie lub bardziej prawdopodobne w przebraniu. Wszelkie wskazówki są bardzo cenione (w tym możliwe projekty open source, które mógłbym wykorzystać do dalszych poszukiwań aplikacji i ewentualnie przyczynić się do ich rozwoju).


title: Odległość od punktu do n-wymiarowej linii

text: Rozwiązanie dla przypadku 3-d można znaleźć tutaj; Chciałbym otrzymać wersję uogólnioną. Nie ma prostego uogólnienia algorytmu Mathworld, ponieważ iloczyn krzyżowy jest zdefiniowany tylko dla 3 i 7 wymiarów, więc rozumiem.


title: Wydobywanie przydatnych informacji z dowolnego tekstu

text: Filtrujemy i analizujemy miejsca pod kątem wydarzeń. Najwyraźniej pisanie języka zapytań o domenę dla zwykłych ludzi nie wchodzi w grę. Używam C# 4.0 i .NET 4.0 i mam stosunkowo wolną rękę, aby używać wszelkich dostępnych narzędzi typu open source. </background-info> Jeśli pojawi się żądanie dotyczące „PIĘTRO B”, sprzedawcy chcą, aby pojawiło się ono po wpisaniu „PIĘTRO A-PIĘTRO F” w filtrze. Jedynym problemem, jaki mam, jest to, że nie ma absolutnie żadnej struktury analizowanych parametrów. Otrzymuję ciąg już połączony (w rzeczywistości używa tyldy zamiast myślnika). Przykłady, które widziałem do tej pory z dopasowaniami po każdym: * 101WC-199WC (musi pasować do 150WC) * AAA-ZZZ (musi pasować do AAA, BBB, ABC, ale nie BB) * LOGE15-LOGE20 (musi pasować do LOGE15, ale nie LOGE150) Na początku chciałem spróbować po prostu usunąć numeryczną część dolnej i górnej części, a następnie zwiększyć przez to. Problem, jaki mam, polega na tym, że tylko niektóre wpisy mają liczby, czasami zwiększają się liczby ORAZ litery, a czasami wszystkie litery, które się zwiększają. Ponieważ nie mogę narzucić żadnego rodzaju gramatyki do użycia (bardzo chciałem [..] składni rozwinięcia), utknąłem przy użyciu tych wpisów. Czy są jakieś sugestie, jak podejść do tego problemu z analizowaniem?


title: Lokalizacja rozwiązań programistycznych na dysku - Wspólne lub indywidualne

text: Na dzisiejszym spotkaniu naszego zespołu jeden z członków wyższego szczebla przedstawił propozycję, że powinniśmy mieć wspólną lokalizację/strukturę dla naszych rozwiązań rozwojowych. Kilka jego punktów to: 1. Uwspólnienie oznacza, że mówiąc o projektach i wysyłając e-maile, wszyscy nadają na tych samych falach i wiedzą, gdzie szukać. 2. Jeśli kiedykolwiek zajdzie potrzeba zakodowania ścieżki lokalizacji, będzie ona działać na wszystkich komputerach programistów. Miał więcej punktów na poparcie swojej sugestii, ale niestety rozproszyłem się podczas dyskusji i nie usłyszałem ich wszystkich. Nie mam problemu z tym pomysłem i widzę jego zalety, ale zastanawiałem się, czy jest to powszechne, a nawet zalecane, aby wszyscy programiści umieszczali swój kod w tej samej strukturze folderów. A może deweloperzy lubią mieć elastyczność rozwiązań lokalizacyjnych, gdziekolwiek chcą? Obecnie do kontroli wersji używamy **SVN**. W tym przypadku jego zaleceniem było umieszczenie całego kodu w: c:\Work\Development\<Klient>\<projekt>\Code\<rozwiązanie>\ kod, jak sądzę, faktyczna ścieżka jest nieistotna dla tego pytania, ale została dodana dla kompletności.


title: Zasada KISS zastosowana do projektowania języka programowania?

text: **KISS** ("keep it simple, fool" lub "keep it simple Georgia", patrz np. tutaj) jest ważną zasadą w tworzeniu oprogramowania, mimo że najwyraźniej wywodzi się z inżynierii. Cytując z artykułu w Wikipedii: > Zasadę tę najlepiej ilustruje historia, w której Johnson przekazał zespołowi > inżynierów projektantów garść narzędzi, z wyzwaniem, że projektowany przez nich odrzutowiec > musi być naprawiany przez przeciętnego mechanika > pole w warunkach bojowych tylko tymi narzędziami. Stąd „głupi” > odnosi się do związku między sposobem, w jaki rzeczy się psują, a wyrafinowaniem > dostępnym, aby je naprawić. Gdybym chciał zastosować to w dziedzinie tworzenia oprogramowania, zamieniłbym „samolot odrzutowy” na „oprogramowanie”, „przeciętny mechanik” na „przeciętny programista” i „w warunkach bojowych” na „w oczekiwanym rozwoju/utrzymaniu oprogramowania warunki” (terminy, ograniczenia czasowe, spotkania/przerwy, dostępne narzędzia itp.). Powszechnie przyjmuje się więc, że należy starać się zachować oprogramowanie **proste** (lub **proste głupie** , w przypadku pominięcia przecinka), aby można było później nad nim łatwo pracować. Ale czy zasadę KISS można zastosować również do projektowania języka programowania? Czy znasz jakieś języki programowania, które zostały zaprojektowane specjalnie z myślą o tej zasadzie, tj. aby „pozwalać przeciętnemu programiście w przeciętnych warunkach pracy na pisanie i utrzymywanie jak największej ilości kodu przy najmniejszym wysiłku poznawczym”? Jeśli cytujesz jakiś konkretny język, byłoby wspaniale, gdybyś mógł dodać link do jakiegoś dokumentu, w którym ta intencja jest jasno wyrażona przez projektantów języka. W każdym razie byłbym zainteresowany poznaniem intencji (udokumentowanych) projektantów, a nie Twojej osobistej opinii na temat konkretnego języka programowania.


Widziałem kilku programistów szukających rozwiązania tego problemu: **uzyskiwanie dostępu do informacji o sesji z innego WAR** (nawet w tym samym EAR) - oto kilka przykładów: Jakiś sposób na współdzielenie stanu sesji między różnymi aplikacjami w tomcat? , Sesja dostępowa innej aplikacji webowej, różne pliki WAR, współdzielone zasoby, Tomcat: Jak współdzielić dane między dwiema aplikacjami?, Co robi atrybut crossContext w Tomcat? Czy umożliwia współdzielenie sesji? i tak dalej... Z tego, co szukałem, jest kilka konkretnych rozwiązań w zależności od kontenera, ale jest to jakoś ' **wbrew specyfikacji** '. Przejrzałem również specyfikację Java EE bez żadnego powodzenia w znalezieniu odpowiedzi. Niektórzy programiści mówią o łączeniu aplikacji internetowych, ale ja raczej się z tym nie zgadzam. Jaki jest powód, dla którego trzyma się WAR w tym samym EAR, jeśli nie łączy się? Na przykład do EJB można uzyskać dostęp lokalnie (nawet jeśli znajdują się w innym JAR EJB w tym samym EAR). Mówiąc dokładniej, jeden z moich WAR-ów obsługuje uwierzytelnianie i autoryzację i chciałbym udostępnić te informacje innym WAR-om (w tym samym EAR). Udało mi się wcześniej obejść podobne problemy, pakując pliki WAR jako pliki JAR i umieszczając je w pojedynczym projekcie WAR (WEB-INF/lib). Jednak nie podoba mi się to rozwiązanie (wymaga ogromnego wysiłku w nazewnictwie serwletów i tak dalej). I żadne rozwiązanie nie odpowiedziało na pierwsze (i najważniejsze) pytanie: **Dlaczego WARs nie mogą udostępniać informacji o sesji?**


title: Jakie informacje nigdy nie mogą pojawiać się w logach?

text: Mam zamiar napisać firmowe wytyczne dotyczące tego, co nigdy nie może pojawiać się w logach (ślad aplikacji). W rzeczywistości niektórzy programiści starają się zawrzeć jak najwięcej informacji w śledzeniu, **co sprawia, że przechowywanie tych dzienników jest ryzykowne, a przesyłanie ich** jest niezwykle niebezpieczne, zwłaszcza gdy klient nie wie, że te informacje są przechowywane, ponieważ nigdy się tym nie przejmowałem i nigdy nie czytaj dokumentacji i/lub komunikatów ostrzegawczych. Na przykład, mając do czynienia z plikami, niektórzy programiści są kuszeni, aby prześledzić **nazwy plików**. Np. przed dodaniem nazwy pliku do katalogu, jeśli prześledzimy wszystko na błędach, łatwo będzie zauważyć np., że dodana nazwa jest za długa, a błąd w kodzie polegał na zapomnieniu o sprawdzeniu długości połączony ciąg. Jest to pomocne, ale **to dane wrażliwe i nigdy nie mogą pojawiać się w logach**. W ten sam sposób: * **Hasła** , * Adresy IP i informacje o sieci (adres MAC, nazwa hosta itp.)¹, * Dostęp do bazy danych, * Bezpośrednie dane wprowadzone przez użytkownika i przechowywane **dane biznesowe** nigdy nie mogą się pojawiać w śladzie. Jakie inne rodzaje informacji należy usunąć z dzienników? Czy są już napisane jakieś wytyczne, z których mogę skorzystać? * * * ¹ Oczywiście nie mówię o rzeczach takich jak logi IIS czy Apache. To o czym mówię to rodzaj informacji, które są zbierane wyłącznie w celu debugowania samej aplikacji, a nie śledzenia aktywności niezaufanych podmiotów. * * * **Edytuj:** Dziękujemy za odpowiedzi i komentarze. Ponieważ moje pytanie nie jest zbyt precyzyjne, postaram się odpowiedzieć na pytania zadawane w komentarzach: * Co robię z logami? Dzienniki aplikacji mogą być przechowywane w pamięci, co oznacza albo w zwykłym dysku twardym na hoście lokalnym, w bazie danych, ponownie w zwykłym lub w zdarzeniach systemu Windows. W każdym przypadku istnieje obawa, że te źródła mogą nie być wystarczająco bezpieczne. Na przykład, gdy klient uruchamia aplikację, która przechowuje dzienniki w postaci zwykłego pliku tekstowego w katalogu tymczasowym, każdy, kto ma fizyczny dostęp do komputera, może je odczytać. Logi aplikacji mogą być również przesyłane przez Internet. Na przykład, jeśli klient ma problem z aplikacją, możemy poprosić ją o uruchomienie tej aplikacji w trybie pełnego śledzenia i przesłanie nam pliku dziennika. Ponadto niektóre aplikacje mogą automatycznie wysyłać do nas raport o awarii (i nawet jeśli pojawiają się ostrzeżenia o wrażliwych danych, w większości przypadków klienci ich nie czytają). * Czy mówię o konkretnych dziedzinach? Nie. Pracuję tylko nad ogólnymi aplikacjami biznesowymi, więc jedynymi danymi wrażliwymi są dane biznesowe. Nie ma nic związanego ze zdrowiem lub innymi dziedzinami objętymi określonymi przepisami. Ale dziękuję za rozmowę, prawdopodobnie powinienem zajrzeć do tych pól, aby uzyskać wskazówki dotyczące tego, co mogę zawrzeć w wytycznych. * Czy nie jest łatwiej zaszyfrować dane? Nie. Utrudniłoby to każdą aplikację, zwłaszcza jeśli chcemy korzystać z diagnostyki C# i `TraceSource`. Wymagałoby to również zarządzania uprawnieniami, co nie jest najłatwiejsze do zrobienia. Wreszcie, jeśli mówimy o logach przesłanych do nas od klienta, musimy mieć możliwość ich odczytania, ale bez dostępu do danych wrażliwych. Tak więc technicznie łatwiej jest w ogóle nie umieszczać poufnych informacji w dziennikach i nie dbać o to, jak i gdzie te dzienniki są przechowywane.


title: Jak mogę zmienić swoją karierę z administrowania serwerem Windows na tworzenie oprogramowania?

text: Jestem absolwentem studiów inżynierskich na kierunku Inżynieria Telekomunikacyjna. Dostałem pracę wsparcia serwera wkrótce po ukończeniu college'u. Mam w sumie 2 lata doświadczenia w obsłudze serwerów Windows. Jednak chcę przejść do tworzenia oprogramowania i odejść od administrowania serwerami. Jakie kursy lub certyfikaty mogę przejść, aby przejść do roli programisty?


title: Diagramy klas UML: Jak pokazać zależność

text: Proszę rozważyć program z czterema klasami: Klasa A, B, C i D. Klasy A i B są podklasami abstrakcyjnej nadklasy C. Klasa D jest zależna od C. Znaczenie: Zawiera pole `C objectOfTypeC`. Jak wiemy, polimorficznie referencja `objectOfTypeC` może zawierać obiekty klasyד A i B. Wartość tej referencji może zmieniać się dynamicznie w czasie wykonywania. Ten rodzaj sytuacji jest bardzo powszechny w OOP. Typowym przykładem jest wzorzec Strategia, w którym kilka klas dziedziczy lub implementuje klasę abstrakcyjną lub interfejs `SuperType`. Inna klasa `SomeClass` zawiera referencję typu `SuperType` i jest w stanie dynamicznie przechowywać różne instancje podklas `SuperType` w tym referencji. Moje pytanie brzmi: mam dwa pomysły, jak można to pokazać na diagramie klas UML, ale nie jestem pewien, który z nich jest poprawny. ![tu wpisz opis obrazu](http://i.stack.imgur.com/G8lkt.png) ![tu wpisz opis obrazu](http://i.stack.imgur.com/aswgA.png) _( Uwaga: w tych przykładach super typem jest interfejs, ale może to być również klasa abstrakcyjna, a nawet zwykła superklasa)._ Która opcja jest bardziej poprawna?


title: Python - jak uzyskać pozycję kursora w widżecie tekstowym Tkinter

text: Chcę uzyskać pozycję kursora (wiersz i kolumnę) punktu wstawiania Tkinter.Text, ale dla konkretnej sytuacji poniżej. PROBLEM: Mój projekt edytora tekstu wymaga niestandardowego cofania/ponawiania dla Tkinter.Text. Wstawiłem ten sam ciąg dla Testu pierwszego i testu drugiego poniżej, ale cofnij nie działa spójnie z powodu niespójnej zmiennej kolumny w obsłudze zdarzeń KeyRelease podanej przez Tkinter. Wydaje się, że problem polega na tym, że wpisuję zbyt szybko dla drugiego testu, co powoduje złą wartość kolumny. Czy możesz mi pomóc znaleźć problem? DWA PROCES ODTWORZENIA BŁĘDU: TEST JEDEN * 1. Wpisz ten ciąg powoli: 'jeden dwa trzy' * 2. Naciśnij F1, aby zobaczyć cofanie każdego słowa. * Wynik: działa dobrze. (Przynajmniej dla mnie. Efaza: pisz powoli.) TEST DRUGI * 1. Wpisz ten sam ciąg tak szybko, jak potrafisz: 'raz dwa trzy' * 2. Naciśnij F1, aby zobaczyć cofanie każdego słowa. * Wynik: pobiera niewłaściwą kolumnę i nie cofa się prawidłowo. (Zrestartuj skrypt i powtórz ten krok, jeśli na początku nie widzisz błędu, czasami działa to dobrze z szybkim pisaniem. Zwykle otrzymuję go po 3 do 4 próbach.) PYTANIE: Czy jest to błąd w Tkinter, czy czy nie rozumiem czegoś konkretnego w Tkinter, co generowałoby spójne kolumny dla moich rekordów cofania/ponawiania? z Tkinter import * class TextView(Text): def __init__(self, root): Text.__init__(self, root) self.history = History(self) self.bind("<KeyRelease>", self.keyRelease) # used aby przechwycić znak na raz w keyRelease. Jeśli spacja zostanie naciśnięta, tworzy obiekt Worda i dodaje go do historii cofania/ponawiania. self.word = "" def keyRelease(self, event): if event.keysym == "space": self.word += " " self.makeWordRecord() else: self.word += event.char def makeWordRecord(self , ): if len(self.word): index = self.index(INSERT) wordEvent = Word(index, self.word) self.history.addEvent(wordEvent) self.word = "" def undo(self, event) : self.makeWordRecord() self.history.undo() def redo(self, event): self.history.redo() class History(object): def __init__(self, text): self.text = text self.events = [] self.index = -1 # utwórz pusty rekord dokumentu, wiersz pierwszy, kolumna pierwsza, bez tekstu self.addEvent(Word("1.0", "")) def addEvent(self, event): if self.index + 1 < len(self.even ts): self.events = self.events[:self.index +1] self.events.append(event) self.index +=1 def undo(self): if self.index > 0: self.events[self .index].undo(self.text) self.index -=1 def redo(self): if self.index +1 < len(self.events): self.index +=1 self.events[self.index] .redo(self.text) class Word(object): def __init__(self, index, word): self.index = indeks self.word = słowo def undo(self, text): line = self.index.split(" .")[0] kolumna = int(self.index.split(".")[-1]) startIndex = linia + "." + str(kolumna - len(self.word)) endIndex = linia + "." + str(int(kolumna)) text.delete(startIndex, endIndex) def redo(self, text): line = self.index.split(".")[0] column = int(self.index.split(" .")[-1]) startIndex = linia + "." + str(kolumna - len(self.word)) text.insert(startIndex, self.word) if __name__ == "__main__": root = Tk() root.geometry("400x200+0+0") textView = TextView (root) textView.pack() root.bind("<F1>", textView.undo) root.bind("<F2>", textView.redo) root.mainloop()


title: Najlepszy sposób na naukę kodowania?

text: Zdecydowałem, że chcę nauczyć się programować, aby pewnego dnia móc tworzyć własne gry wideo, więc zacząłem uczyć się c++. Korzystałem ze strony o nazwie learncpp.com. Pierwsza połowa lekcji sprawia mi dużo frajdy i głównie to rozumiem. Mniej więcej w połowie lekcji niesamowicie się nudzę. Przedzieram się przez lekcje, myśląc, że w końcu to do mnie zapadnie. Wkrótce zdaję sobie sprawę, że nie mam pojęcia, o czym te lekcje mówią. Nie zrozum mnie źle, uwielbiam łamigłówki, logikę i takie tam, ale po prostu tego nie rozumiem. Czuję, że nie było sposobu, aby faktycznie pracować z rzeczami, których się nauczyłem. Nie było ćwiczeń. Nie nauczyłem się kodować, nauczyłem się, jak wygląda kod. Odkryłem, że najlepiej się uczę, kiedy sam to robię, a rzeczy nie są dla mnie kładzione na talerzu. Jaki jest dla mnie praktyczny sposób nauki kodu?


title: Dodanie pola do klasy w czasie wykonywania - wzorzec projektowy

text: Wyobraź sobie, że Twój klient chce mieć możliwość dodania nowej właściwości (np. koloru) do produktu w swoim e-sklepie w swoim CMS. Zamiast mieć właściwości jako pola: class Car extends Product { protected String type; chronione w siedzeniach; } Prawdopodobnie zrobiłbyś coś takiego: class Product { protected String productName; chronione właściwości Map<String, Property>; } klasa Właściwość { chroniona nazwa ciągu; chroniona wartość ciągu; } To znaczy tworzenie własnego systemu typów na bazie istniejącego. Wydaje mi się, że można to postrzegać jako tworzenie języka specyficznego dla domeny, czy nie? Czy to podejście jest znanym wzorcem projektowym? Czy rozwiązałbyś problem inaczej? Wiem, że są języki, w których mogę dodać pole w czasie wykonywania, ale co z bazą danych? Czy wolałbyś dodać/zmienić kolumny lub użyć czegoś, jak pokazano powyżej? Dziękuję za Twój czas :).


title: MVVM czy MVC? Chcesz używać tego samego zestawu klas dla WPF i ASP.NET

text: Jestem nowicjuszem w zakresie Wzorców Projektowych. Właśnie zacząłem uczyć się MVC, kiedy słyszę nowy buzz, MVVM. Chcę poznać spostrzeżenia obu tych elementów, przeprojektowując starą aplikację inwentaryzacyjną i do fakturowania, którą opracowałem dla klienta. Chcę napisać zarówno aplikację WPF opartą na systemie Windows, jak i wersję opartą na sieci Web. Jeśli to możliwe, chcę użyć tego samego zestawu klas, jeśli nie, to przynajmniej z niewielką modyfikacją. Przeczytałem kilka artykułów, ale nie śledzę omówionej tam architektury i wysokopoziomowych koncepcji .NET 3.5 i 4. Chcę iść krok po kroku, projektując tylko to, czego naprawdę potrzebuję w moim prawdziwym projekcie. Czy jest jakieś proste odwołanie krok po kroku do MVVM? Czy MVVM jest nadzbiorem czy podzbiorem MVC? Który wzorzec jest nowoczesny i który powinienem wybrać dla wersji aplikacji Windows i Web? Są pewne klasy, które rzadko muszę łączyć z Widokiem. W takim przypadku zaprojektowanie tej samej klasy w sposób MVVM okaże się dodatkową pracą.


title: Główny programista czy co?

text: Brałem udział w projekcie, w którym programowałem 80%. Mój szef powiedział, czego chce i jak chciał ustrukturyzować kod, ale to ja faktycznie napisałem kod (w sposób, w jaki mi powiedział). Czy jestem „głównym programistą”? Albo coś innego?


title: Jakie jest najbardziej zwięzłe rozwiązanie do przetwarzania tekstu i plików?

text: Muszę wykonać przetwarzanie tekstu w plikach takich jak `"zamień drugą kolumnę trzeciego wiersza wszystkich plików w bieżącym folderze na ciąg 'hello'"` lub `"wypisz wszystkie pliki w folderze ./Hello i zapisz wynik do pliku ./Hello.txt"`. Myślałem, że Python będzie dobrym rozwiązaniem, ale w rzeczywistości tak nie jest, ponieważ nie można bezpośrednio nadpisywać plików. Ale mogę się mylić, ponieważ jestem początkujący. Oto działający przykład z Pythonem: Mam listę nazw plików w `listRef.txt` i chcę zapisać w innym pliku tekstowym `list.txt` wszystkie nazwy plików, które NIE SĄ obecne w folderze `C: \interface\output` : import os symbolsRef = [] #Lista plików do listy Pythona dla linii w open(r'C:\interface\listRef.txt', "r"): symbolsRef.append(line) #Usuń z listRef wszystkie linie zawierające nazwy istniejących plików dla symb w os.listdir(r'C:\interface\output'): symbolsRef.remove(symb[0:-4]+'\n') #Zapisz listę pliki w folderze do pliku tekstowego z open(r'C:\interface\list.txt', "w") jako presentList: dla nazw plików w symbolachRef: print(filenames[0:-1], file = presentList) Jak możesz zobacz Muszę utworzyć listę, pracować z listą, a następnie zapisać ją z powrotem do mojego pliku wyjściowego. Mogę się mylić, ale jestem przekonany, że z innymi rozwiązaniami można zrobić lepiej. Podaję ten roboczy przykład, aby doświadczony programista mógł porównać długość tego samego programu, ale zakodowanego z innym rozwiązaniem. Czym więc jest, z Twojego doświadczonego punktu widzenia, rozwiązanie, które - ogólnie - wymaga najmniejszej liczby linii kodu do wykonania szerokiej gamy zadań związanych z przetwarzaniem tekstu i plików: użycie wyrażenia regularnego, zastępowanie wierszy i kolumn zależnych od indeksu, lista folderów, tworzenie-usuwanie-zastępowanie plików. Czy to skrypty powłoki z sed i awk, Perl, specjalne biblioteki w Pythonie, czy może jakieś dedykowane oprogramowanie?


title: Jak mogę zweryfikować zaszyfrowane hasło Wordpress za pomocą aplikacji Delphi?

text: Mam aplikację Delphi (D2007), która łączy się z instalacją Wordpress (V4.0, PHP V5.3) i pobiera zaszyfrowane hasła. Chciałbym, aby aplikacja była w stanie zweryfikować, czy wprowadzone hasła są zgodne z zapisanym haszowanym hasłem. O ile dobrze rozumiem, hasz to Blowfish używający losowo generowanych soli, które są łączone w hasz...? **Pas** : newnewnew **Hash** : $P$BA8BEfC.y9WjbpiRqLQHbKrc2sQfbk0 Bawiłem się **DCPcrypt**, ale nie zrobiłem jeszcze żadnego postępu i nie jestem pewien, czy to, co chcę osiągnąć, jest możliwe dziękuję


title: Czy powinienem być profesjonalistą w programowaniu C#, aby budować dobre aplikacje internetowe przy użyciu ASP.NET?

text: Nie wiem, czy jest specjalne programowanie w C# dla sieci, czy jest to samo?. Jeśli jest taki sam, to na jakich tematach powinienem się skupić w C#, aby wykorzystać go do budowania aplikacji webowych przez ASP.NET (formularze webowe czy MVC). Na przykład, jeśli chcę zbudować stronę internetową dla jednego z ośrodków zdrowia, czy będę potrzebować dużej wiedzy w C#? Tak więc, * Na jakich tematach powinienem się skupić w C#, aby mieć wystarczającą pewność siebie, aby budować małe - średnie strony internetowe?


title: Nowy przepływ pracy w chmurze przy użyciu Github, Cloud9ide i CloudFoundry

text: Tak więc czas zmienia się w kierunku rozwoju / przetwarzania w chmurze. Próbuję uzyskać nowy przepływ pracy „w chmurze” oparty na usługach, z których będę korzystać: Github, Cloud9ide i CloudFoundry. Oto co mam na myśli: * Github działa jak centralne (główne repozytorium) tak jak wczorajszy lokalny system plików. Każda usługa będzie opierać swoją usługę na tym głównym repozytorium. Workflow: 1. Github: Tworzę nowe repozytorium Github, które służy jako główne repozytorium projektu. 2. Cloud9ide. Otwieram repozytorium Github i piszę moje testy i implementację (BDD/TDD). Kiedy będę gotowy, zapisuję (zatwierdzam) go w głównym repozytorium na Github. 3. X: Działająca instancja Jenkinsa wykrywa, że ktoś zatwierdził i pobiera najnowsze zatwierdzenie, kompilacje, wdrożenia, testy (yeti i/lub selen) i zgłasza, czy testy zostały pomyślnie zaliczone, czy nie. Jeśli nie, dokonuję kolejnego zatwierdzenia, dopóki wszystkie testy nie zaliczą. 4. X: Uruchamiam polecenia CloudFoundry, aby wypchnąć główne repozytorium Github na serwer CloudFoundry, które automatycznie wdroży moją aplikację. Nadal nie rozumiem, gdzie będzie to środowisko X. Na lokalnym serwerze, na którym muszę zainstalować Jenkinsa? Czy mogę zainstalować go na Cloud9ide (gdy java jest obsługiwana) czy będzie w innej usłudze w chmurze? Ponadto środowisko X musi być w stanie pobrać (sklonować) repozytorium Github i uruchomić skrypty kompilacji. A ponieważ koncepcja Cloud9ide jest bardzo nowa i nie było żadnych innych poprzedników, naprawdę zastanawiam się, jak będzie wyglądał przepływ pracy. Wszyscy znamy przepływ pracy Github. Znamy teraz przepływ pracy CloudFoundry (wdrażanie/skalowanie za pomocą spokojnego narzędzia API/wiersza poleceń). Ale jak będzie działać Cloud9Ide, wciąż jest dla mnie nieco niejasne. Ktoś na Cloud9ide wspomniał, że będą przyciski typu „wdróż”, więc mogę je wdrożyć jednym kliknięciem. Ale myślę, że będzie to zależeć od tego, z jakimi usługami zostanie podpięty proces, itp. Czy ktoś mógłby oświecić ten temat przepływu pracy w chmurze i wypełnić luki. Dziękuję.