title: Kiedy zatwierdzenie kontroli wersji jest zbyt duże?

text: Słyszałem w kilku miejscach "Nie rób dużych zatwierdzeń", ale tak naprawdę nigdy nie rozumiałem, co to jest "duże" zatwierdzenie. Czy jest duży, jeśli pracujesz nad kilkoma plikami, nawet jeśli są one powiązane? Ile części projektu powinieneś pracować jednocześnie? Dla mnie mam problem z próbą wykonania „małych zmian”, ponieważ zapominam lub tworzę coś, co tworzy coś innego, co tworzy coś innego. Następnie otrzymujesz takie rzeczy: Wykonano niestandardową kolejkę wychodzącą Bot -Nowe pole msgQueue, które jest niczym innym jak SingleThreadExecutor -sendMsg blokuje do momentu wysłania wiadomości i dodaje czas oczekiwania pomiędzy wysłaniem wiadomości -adminExist zaktualizowane wywołania (patrz kontroler) - Usunięte wywołania kontrolera sendMessage - Nowe pole msgWait oznacza czas oczekiwania między wiadomościami - Uruchomienie wtyczek serwisowych przeniesione do reloadPlugins -adminExists przeniesione z serwera z powodu globalnych administratorów. Sprawdza na poziomie kanału, serwera i globalnego Admina -Nowe metody getServer i getChannel, które pobierają odpowiedni obiekt Admin należy do BotEvent -toString() wyświetlają również extra i extra1 Channel -pole kanału przemianowane na name -Poprawiono literówkę w channel(int) Serwer - Przeniesiono administratora do kontrolera PluginExecutor - Dodano drobne testy, zostaną usunięte później Wtyczki JS - Zaktualizowano do zmian w frameworku - Zastąpiono InstanceTracker.getController() z Controller.instance - Dyskusja VLC teraz we własnym pliku Różne aktualizacje i zmiany projektu NB --- Pliki, których dotyczy problem Zmodyfikuj /trunk/Quackbot-Core/dist/Quackbot-Core.jar Zmodyfikuj /trunk/Quackbot-Core/dist/README.TXT Zmodyfikuj /trunk/Quackbot-Core/nbproject/private/private.properties Zmodyfikuj /trunk/Quackbot -Core/nbproject/private/private.xml Zmodyfikuj /trunk/Quackbot-Core/src/Quackbot/Bot.java Zmodyfikuj /trunk/Quackbot-Core/s rc/Quackbot/Controller.java Modyfikuj /trunk/Quackbot-Core/src/Quackbot/PluginExecutor.java Modyfikuj /trunk/Quackbot-Core/src/Quackbot/info/Admin.java Modyfikuj /trunk/Quackbot-Core/src/Quackbot /info/BotEvent.java Zmień /trunk/Quackbot-Core/src/Quackbot/info/Channel.java Zmień /trunk/Quackbot-Core/src/Quackbot/info/Server.java Zmień /trunk/Quackbot-GUI/dist/ Quackbot-GUI.jar Zmodyfikuj /trunk/Quackbot-GUI/dist/README.TXT Zmodyfikuj /trunk/Quackbot-GUI/dist/lib/Quackbot-Core.jar Zmodyfikuj /trunk/Quackbot-GUI/nbproject/private/private.properties Zmodyfikuj /trunk/Quackbot-GUI/nbproject/private/private.xml Zmodyfikuj /trunk/Quackbot-GUI/src/Quackbot/GUI.java Zmodyfikuj /trunk/Quackbot-GUI/src/Quackbot/log/ControlAppender.java Usuń /trunk /Quackbot-GUI/src/Quackbot/log/WriteOutput.java Modyfikuj /trunk/Quackbot-Impl/dist/Quackbot-Impl.jar Modyfikuj /trunk/Quackbot-Impl/dist/README.TXT Modyfikuj /trunk/Quackbot-Impl/ dist/lib/Quackbot-Core.jar M odify /trunk/Quackbot-Impl/dist/lib/Quackbot-GUI.jar Zmodyfikuj /trunk/Quackbot-Impl/dist/lib/Quackbot-Plugins.jar Zmodyfikuj /trunk/Quackbot-Impl/lib/javarebel.stats Dodaj /trunk /Quackbot-Impl/lib/jrebel.info Zmień /trunk/Quackbot-Impl/nbproject/private/private.properties Zmień /trunk/Quackbot-Impl/nbproject/private/private.xml Zmień /trunk/Quackbot-Impl/nbproject/ project.properties Modyfikuj /trunk/Quackbot-Impl/plugins/CMDs/Admin/reload.js Dodaj /trunk/Quackbot-Impl/plugins/CMD/Operator/hostBan Modyfikuj /trunk/Quackbot-Impl/plugins/CMD/Operator/mute .js Zmodyfikuj /trunk/Quackbot-Impl/plugins/CMDs/lyokofreak/curPlaying.js Zmodyfikuj /trunk/Quackbot-Impl/plugins/CMDs/lyokofreak/lfautomode.js Zmodyfikuj /trunk/Quackbot-Impl/plugins/listeners/onJoin. js Modyfikuj /trunk/Quackbot-Impl/plugins/listeners/onQuit.js Modyfikuj /trunk/Quackbot-Impl/plugins/testCase.js Dodaj /trunk/Quackbot-Impl/plugins/utils/whatsPlaying.js Modyfikuj /trunk/Quackbot- Jestem pl/src/Quackbot/impl/SandBox.java Dodaj /trunk/Quackbot-Impl/vlc_http Dodaj /trunk/Quackbot-Impl/vlc_http/current.html Zmień /trunk/Quackbot-Plugins/dist/Quackbot-Plugins.jar Zmień / trunk/Quackbot-Plugins/dist/README.TXT Modyfikuj /trunk/Quackbot-Plugins/dist/lib/Quackbot-Core.jar Modyfikuj /trunk/Quackbot-Plugins/nbproject/private/private.properties Modyfikuj /trunk/Quackbot-Plugins /nbproject/private/private.xml Zmień /trunk/Quackbot-Plugins/src/Quackbot/plugins/JSPlugin.java Dodaj /trunk/Quackbot-Plugins/vlc_http Dodaj /trunk/global-lib/jrebel.jar Tak.... Więc jeśli chodzi o pytania: * Jakie są niektóre czynniki, które powodują, że zatwierdzenie staje się zbyt duże ( _nieoczywiste rzeczy_ )? * Jak możesz zapobiec takim zatwierdzeniom? Proszę podać konkrety * A co, gdy jesteś w pół-wczesnych stadiach rozwoju, gdy sprawy toczą się szybko? Czy duże commity nadal są w porządku?


title: Jak duży powinien być pojedynczy commit?

text: W pracy wywiązała się dyskusja i chcę zasięgnąć opinii innych programistów. Podczas moich studiów używaliśmy SVN tylko do kontroli źródeł. Każdy zobowiązuje się do tego samego serwera, a wszystkie zmiany są ściągane na wszystkie komputery. W tym systemie łatwo jest wprowadzić zmiany: kiedy skończysz ze zmianami. Jednak to sprawia, że łączenie zestawów zmian przez wielu programistów jest kompletnym koszmarem. Jednak przez ostatni rok, kiedy programowałem zawodowo, używaliśmy Mercurial do kontroli kodu źródłowego. Na początku używałem go jak SVN: pracuj nad cechą, zatwierdzaj i naciskaj za jednym zamachem, ale dopiero po zakończeniu. Stopniowo moje nawyki zaczęły się zmieniać. Dowiedziałem się o gałęziach, jak commity mogą być wersją roboczą, publiczne lub tajne, a nawet używałem pendrive'a jako centralnego repozytorium. Moje commity stały się mniejsze, ale ich ilość wzrosła. Zamiast zatwierdzania i wypychania za jednym razem, wykonałbym zatwierdzenia dla każdej zmiany w nazwanej gałęzi. Oto jak wygląda repozytorium jednego z moich osobistych projektów: ![Układ repozytorium](http://i.stack.imgur.com/t0h7X.png) Widzę kilka zalet tego podejścia. * Małe zatwierdzenia oznaczają, że skupiają się na jednym temacie. Każde zatwierdzenie otrzymuje jednowierszowy opis zmian, dzięki czemu można je łatwo śledzić nawet po tygodniach bezczynności. * Nazwane gałęzie utrzymują Cię w temacie. Jeśli pracujesz na przykład w gałęzi "refactor-text-rendering", nie powinieneś wprowadzać zmian w bibliotece matematycznej, ponieważ nie jest to związane z tematem gałęzi. Jednak główny programista jest zirytowany moją metodologią. Czuje, że małe commits zaśmiecają historię repozytorium. Jego ulubioną metodologią jest praca w łatce. Po zakończeniu funkcji łączy on zatwierdzenia i wypycha je za jednym zamachem. Więc co wolisz? Przepływ świadomości historii zatwierdzeń czy łatka zmian co jakiś czas? A może coś zupełnie innego?


title: Co zrobić, jeśli mój własny kod opensource bardzo przypomina kod innego projektu?

text: Piszę klasę Java, część frameworka do tworzenia gier o otwartym kodzie źródłowym na licencji Apache 2.0. Istnieje inny framework, na tej samej licencji, który ma również klasę Java, która zajmuje się tym samym tematem, co moja. Niedawno to sprawdziłem, a moja implementacja jest bardzo podobna do tej. Heck, nawet zmienne lokalne. Różnice są minimalne. Ponieważ obie klasy są opensource, myślę, że to nie ma znaczenia. Jednakże, ponieważ kody są tak podobne, każdy może dojść do wniosku, że po prostu trochę je zmodyfikowałem i ostatecznie zacytowałem licencję: > * Musisz przekazać innym odbiorcom Dzieła lub Dzieł pochodnych kopię tej Licencji; > > * Musisz sprawić, aby wszelkie zmodyfikowane pliki zawierały widoczne informacje > o tym, że zmieniłeś pliki; > > Odkąd napisałem swoje zajęcia, nie ma potrzeby umieszczania ich informacji o prawach autorskich w moim kodzie. Nie można jednak udowodnić, że nie tylko skopiowałem ich kod i trochę zmodyfikowałem. Co należy zrobić w tym scenariuszu?


title: Przyczyny 32-bitowej lub 64-bitowej maszyny programistycznej

text: Zaraz zrobię nową instalację Linuksa, która będzie używana głównie do programowania. Widziałem benchmarki pokazujące poprawę szybkości wersji 64-bitowej, jednak trudno mi powiedzieć, jak bardzo te benchmarki przekładają się na poprawę codziennego użytkowania. I oczywiście należy wziąć pod uwagę inne aspekty. Sposób użycia Mam na myśli: * głównie programowanie Pythona, sporadycznie C, C++ i Java; * IDE korzystające z platform Java (Eclipse i IntelliJ); * w bardzo rzadkich przypadkach konieczność kompilacji na platformę 32-bitową; * nie planuję w najbliższym czasie mieć więcej niż 64 GB pamięci RAM (i nie mam nic przeciwko używaniu jąder PAE); * przedmiotowa maszyna ma 4GB RAM i Athlon II X2; Jakie są plusy i minusy wyboru dystrybucji i386 lub x86_64?


title: Dylemat freelancera... robić czy nie robić?

text: Moja obecna organizacja jasno stwierdziła, że nie powinienem pracować nad projektami freelancerskimi w dziedzinach, w których firma oferuje swoje usługi. Zgodziłem się i dołączyłem do organizacji. W momencie dołączenia wspomniałem również, że jestem członkiem organizacji pozarządowej od dwóch lat, nie jako programista, ale świadczący tam swoje usługi społeczne. Zgodzili się na to i wszystko działa sprawnie. Ale ostatnio moja organizacja pozarządowa zdecydowała się zbudować swoją stronę. Zostałem powołany do zespołu programistów, ale z tego powodu odmówiłem. Organizacja zgodziła się i wykluczyła mnie z zespołu programistycznego. Ale uparli się, żebym był tłumaczem i poprosili, żebym zorganizował tłumaczy z innych języków. Udało mi się sprowadzić zespół tłumaczy. Teraz moja organizacja pozarządowa planuje mianować mnie szefem zespołu tłumaczy, ponieważ czuli, że będąc zarówno programistą, jak i tłumaczem, mogę być pomostem między dwoma zespołami. Tu zaczyna się dylemat, moja firma zajmuje się tworzeniem stron internetowych, ale nie oferuje usług tłumaczeniowych. Za tłumaczenie strony organizacji pozarządowej. Tutaj moja firma bardzo rygorystycznie przestrzega zasad dotyczących freelancerów. Ale jestem trochę optymistyczny, że pozwolą mi być częścią projektu organizacji pozarządowych, która w pewnym sensie nie będzie konkurować z żadnym z ich produktów. Są surowi we freelancerach i jestem pewien, że mi na to nie pozwolą. Z drugiej strony, jeśli coś pójdzie nie tak, nie widzę w tym żadnych problemów prawnych i jestem podekscytowany, że mogę być częścią witryny. Co byś zrobił, gdybyś stanął w takiej sytuacji?


title: Sortowalny widok listy przy użyciu SQLite

text: Implementuję tutaj sortowalny widok listy za pomocą biblioteki bauerca. To działa, ale teraz muszę zdefiniować pewne rzeczy, w których potrzebuję pomocy. To jest funkcjonalność mojej aplikacji_ Mogę stworzyć do 5 nazw. Te nazwy są zapisywane w bazie danych SQLite. Następnie, w innej czynności, te nazwy są ładowane z bazy danych i wyświetlane w celu wybrania, których zamierzam użyć. W przypadku 5 nazw istnieje kilka kombinacji, których mogę użyć, ale podstawową zasadą tej aplikacji jest to, że po wybraniu niektórych nazw są one wyświetlane w widoku listy z możliwością sortowania, w którym mogę je posortować. Po ich posortowaniu należy je zapisać w innej bazie danych, aby zapamiętać położenie każdego z nich. W tym celu druga baza danych zawiera następujące kolumny: NAZWA, GRUPA, ZAMÓWIENIE. **Moje podejście jest takie:** jeśli wybiorę na przykład `NAME1` i `NAME2`, będzie to `GROUP2_1`. Jeśli wybiorę `NAME1` i `NAME3` będzie to `GROUP2_2`... i to ze wszystkimi możliwymi kombinacjami. Następnie w kolumnie `ORDER` zapisywana jest pozycja każdej nazwy w widoku listy. Wygląda jednak na to, że takie podejście z kolumną GROUP nie działa... zapisuje pozycję każdej nazwy, ale niezależnie od grupy, do której należy. Na przykład, jeśli mam te imiona: MARK PAUL JERRY Jeśli wybiorę MARK i JERRY, widok listy za pierwszym razem pokaże je w ten sposób: MARK JERRY Ale teraz je posortuję: JERRY MARK Więc ta kombinacja należy do GROUP2_1, a JERRY ma 1 wartość w kolumnie ZAMÓWIENIE i OZNACZAM 2. Jeśli teraz wrócę i wybiorę inną kombinację: MARK PAUL JERRY Powinno to być GROUP3_1, a teraz sortuję je w ten sposób: MARK JERRY PAUL Więc teraz MARK ma wartość ORDER 1, JERRY 2 i PAUL 3. Teraz, jeśli wrócę i wczytam ponownie pierwszą kombinację, wczyta nazwy z ostatnią przypisaną wartością ORDER, więc zamiast wczytywać w tej kolejności: JERRY MARK Załaduje je używając wartości ostatnich kombinacji : MARK JERRY Przepraszam za tak długie wyjaśnienie, ale nie znam innego najlepszego sposobu na wyjaśnienie mojego problemu. W podsumowaniu problem polega na tym, że wartość ORDER jest przypisywana do każdej nazwy, niezależnie od grupy, więc nie jest to prawidłowe podejście do tego, co muszę uzyskać. **Aktualizacja -- definicja klucza** To moja aktualna tabela: db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + TravelOrder._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + TravelOrder.NAME + " TEXT NOT NULL " + ");");


title: REST czy kolejka komunikatów w wielowarstwowym systemie heterogenicznym?

text: Projektuję REST API dla systemu trójwarstwowego, takiego jak: `Aplikacja kliencka` -> `Front-end API cloud server` -> `user's home API server (Home)`. `Home` jest urządzeniem domowym i ma utrzymywać połączenie z `Front-endem` przez Websocket lub długą ankietę _(to pierwsze miejsce, w którym naruszamy REST. Później jest jeszcze gorzej)_. „Front-end” w większości tuneluje żądania „Klienta” do połączenia „Home” i sam obsługuje niektóre połączenia. Czasami „Home” wysyła powiadomienia do „Klienta”. „Front-end” i „Home” mają w zasadzie to samo API; Klient może łączyć się bezpośrednio z domem przez sieć LAN. W takim przypadku „Home” musi zarejestrować niektóre działania „Klienta” na samym „Froncie”. Zalety REST w tym systemie to: * REST jest czytelny dla człowieka; * REST ma dobrze zdefiniowane mapowanie czasowników (takich jak CRUD), rzeczowników i kodów odpowiedzi na obiekty protokołu; * Działa przez HTTP i przekazuje wszystkie możliwe serwery proxy; Kontrasty REST to: * Potrzebujemy nie tylko stylu komunikacji żądanie-odpowiedź, ale także publikowania-subskrypcji; * Kody błędów HTTP mogą być niewystarczające do obsługi błędów komunikacji trójwarstwowej; „Front-end” może zwrócić „202 Akceptowane” do jakiegoś wywołania asynchronicznego tylko po to, aby dowiedzieć się, że niezbędne połączenie „Home” jest zerwane i powinno być „503”; * `Home` musi wysyłać wiadomości do `Client`. `Klient` będzie musiał odpytywać `Front-end` lub utrzymywać połączenie. Rozważamy WAMP/Autobahn przez Websocket, aby uzyskać funkcjonalność publikowania/subskrybowania, kiedy uderzyło mnie, że już wygląda jak kolejka wiadomości. Czy warto oceniać rodzaj kolejki wiadomości jako transportu? Wygląda na to, że przeciwstawności kolejki wiadomości to: * Muszę sam zdefiniować czasowniki CRUD i kody błędów na poziomie wiadomości. * Czytałem coś o „wyższych kosztach utrzymania”, ale co to znaczy? jak poważne są te rozważania?


Załóżmy, że masz argumenty A1 >: A2 (kontrawariant) i zwracasz typy B1 <: B2 (kowariant). Odpowiednie funkcje są takie, że: A1 => B1 <: A2 => B2 Czasami ma to dla mnie sens - uchwycę to w mgnieniu oka. A potem kilka dni później jest dla mnie stracone, dopóki nie zmagam się z tym przez kolejną godzinę. Używając przykładu ze Scala MOOC Odersky'ego (to nie jest spoiler przypisania), Empty i NonEmpty są podtypami IntSet. Rozumiem, że nie można przekazać IntSet do funkcji oczekującej NonEmpty, ponieważ IntSet może być Empty. Dlatego to drugie (A2 => B2) nie może być podtypem pierwszego (A1 => B1). I rozumiem, że _możesz_ przekazać NonEmpty do funkcji oczekującej IntSet, najwyraźniej dlatego, że funkcja będzie wywoływać tylko metody specyficzne dla IntSet, które zaimplementowały wszystkie podtypy. Dlatego pierwszy _może_ być podtypem drugiego. Podobnie funkcja zwracająca IntSet nie może być podtypem funkcji zwracającej NonEmpty, ponieważ zwrócony IntSet nie musi koniecznie robić wszystkiego, co może zrobić NonEmpty. I odwrotnie, funkcja zwracająca NonEmpty _może_ być podtypem funkcji zwracającej IntSet, ponieważ zwrócona NonEmpty będzie zgodna z umową IntSet. Ale mam problem z uchwyceniem, jeśli _możesz_ przekazać NonEmpty do funkcji oczekującej IntSet i jeśli ta funkcja byłaby podtypem funkcji oczekującej NonEmpty (pozornie dlatego, że wywołuje metody specyficzne dla NonEmpty w swojej implementacji) , dlaczego miałbyś kiedykolwiek chcieć używać tej funkcji z podtypami? Czy ktoś ma przykłady tego, że jest to przydatne? Dlaczego warto korzystać z funkcji podtypów? Wydaje mi się, że przekazywanie w IntSet jest po prostu niebezpieczne, jeśli wiesz, że będzie on wywoływał funkcjonalność NonEmpty.


title: Interakcja Rails/Node.js

text: Wraz z moim współpracownikiem opracowujemy aplikację webową z rails i node.js i nie możemy osiągnąć konsensusu w sprawie konkretnej decyzji architektonicznej. Nasza konfiguracja jest w zasadzie serwerem rails pracującym z node.js i redis, gdy klient wysyła żądanie http do naszego rails API, w niektórych przypadkach nasza aplikacja rails wysyła odpowiedź do bazy danych redis, a następnie node.js przesyła odpowiedź przez websocket. Nasza spór pojawia się w następującym punkcie: mój współpracownik uważa, że używanie node.js do wysyłania danych do klientów jest w pewnym sensie logiką biznesową i powinno być wewnątrz modelu, więc w pierwszym napisanym przez siebie kodzie użył poleceń broadcast w callbackach i innych miejscach modelu, jest przekonany, że modele są najlepszym miejscem na interakcję pomiędzy szynami i węzłem. Z drugiej strony uważam, że używanie node.js należy do dziedziny runtime, moim zdaniem polecenia broadcast i inne interakcje node.js powinny znajdować się w kontrolerze i powinny być używane tylko w modelu, jeśli są przekazywane przez dobrze zdefiniowany interfejs , podobnie jak w sytuacji, gdy model potrzebuje dostępu do bieżącego użytkownika sesji. W tym momencie jesteśmy zmęczeni kłótniami o to samo, a nasza dyskusja polega na tym, że w kółko powtarzamy sobie te same opinie. Czy ktoś, najlepiej z doświadczeniem w tej samej konfiguracji, mógłby udzielić nam jednoznacznej odpowiedzi mówiąc, które rozwiązanie jest bardziej adekwatne i dlaczego?


title: Rozpowszechniaj licencję bez modyfikacji

text: Chciałbym udostępnić trochę kodu i trochę dokumentacji do swobodnego rozpowszechniania, ale nie, jeśli zostały one w jakikolwiek sposób zmodyfikowane. Zasadniczo musi być udostępniany „tak jak jest”. Powodem jest to, że chciałbym zachować kontrolę nad wszystkimi modyfikacjami bez zamykania tego źródła. Czy istnieje powszechnie dostępna licencja, która na to pozwala? Dziękuję


title: Jaki procent kodu i środowiska wykonawczego zazwyczaj pozwalasz na testowanie?

text: Kiedy piszę kod, pewna jego część służy tylko do rejestrowania, śledzenia lub innego „testowania” tego, co robi program. To nie jest testowanie jednostkowe; nie dzieje się tak, gdy działa w trybie "debugowania" lub czymś podobnym; to nie takie rzeczy jak oświadczenia asercyjne są usuwane przez jakiś etap kompilacji. Ale rzeczywisty kod produkcyjny i wykonanie w czasie wykonywania w celu poznania, co robi system i gdzieś to pisze. Oczywiście w różnych miejscach muszą znajdować się różne ustawienia (pliki konfiguracyjne, interfejsy administratora itp.), które pozwalają na mniej lub bardziej tego typu rzeczy. Ale nawet jeśli wszystkie ustawienia są na najniższym poziomie, nadal lubię, gdy mój system śledzi swój własny stan i zgłasza go w minimalistyczny sposób, który ja lub pracownicy działu operacyjnego mogą używać do rozwiązywania problemów nawet bez włączania/włączania innych ustawień. A więc oto moje pytanie: ile swojego kodu lub czasu działania systemu zazwyczaj poświęcasz na takie trwałe rozwiązywanie problemów? Mówię zarówno o kodzie, jak i czasie wykonywania, ponieważ są to dwie miary: ile linii kodu względem wszystkich linii kodu, ponieważ im więcej kodu, tym więcej konserwacji; i ile wydajności w czasie wykonywania, ponieważ te rzeczy zużywają czas procesora, jakkolwiek mały. I nie zawsze istnieje bezpośredni związek między wierszami kodu a zużyciem w czasie wykonywania. Osobiście z przyjemnością poświęcam na takie rzeczy do 10% mojego kodu i do 5% czasu wykonania. Czy kiedykolwiek czytałeś jakiekolwiek autorytety branżowe, które mają na ten temat opinię? Kto? Jaka jest Twoja opinia?


title: Jednoczesne przetwarzanie danych przez wiele osób

text: Załóżmy, że mam stronę, do której ma dostęp kilka osób jednocześnie, która zawiera listę informacji, które użytkownik musi w jakiś sposób przetworzyć, po czym albo jest ona oznaczona jako „zakończona” i skutecznie znika, albo zostaje pozostawiona nieprzetworzona i tym samym pozostawiona w lista do ponownego wypróbowania później. Jaki jest najlepszy sposób, aby upewnić się, że tylko jedna osoba zajmuje się daną pozycją na liście na raz, przy założeniu, że muszę pokazać listę (tj. brak jednego użytkownika/jednego wymagania, co bym wolał) i że każdy użytkownik może w dowolnym momencie kliknąć dowolny element na liście? Jest to problem, który pojawiał się kilka razy w mojej pracy i nie jestem zadowolony z rozwiązania, które do tej pory wdrożyłem. Miałem nadzieję, że ktoś ma lepszy pomysł. Zasadniczo moje rozwiązanie polegało na stworzeniu tabeli w bazie danych, aby śledzić, kto uzyskał dostęp do jakiego elementu i kiedy, a następnie włączaniu/wyłączaniu funkcji na tej podstawie (np. nie pozwalanie użytkownikowi na edytowanie informacji, jeśli zostały wyrejestrowane przez kogoś innego). Wygląda to mniej więcej tak (przy użyciu Oracle 11g... są one tutaj okrojone dla zwięzłości, z kolumnami INFO działającymi jako podstawka dla wszystkich innych kolumn, które są tutaj nieistotne). CREATE TABLE "SOME_INFO" ( "INFO_ID" NUMBER(19,0) NOT NULL ENABLE, "INFO" VARCHAR2 (20 BYTE) NOT NULL ENABLE, "IS_PROCESSED" CHAR(1) NOT NULL ENABLE, CHECK ("IS_PROCESSED" IN (' Y', 'N')) WŁĄCZ, OGRANICZENIE „PK_SOME_INFO” KLUCZ PODSTAWOWY („INFO_ID”) UŻYWAJĄC INDEKSU ); / CREATE TABLE "SOME_PERSON" ( "PERSON_ID" NUMBER(19,0) NOT NULL ENABLE, "INFO" VARCHAR2(20 BYTE) NOT NULL ENABLE, OGRANICZENIE "PK_SOME_PERSON" KLUCZ PODSTAWOWY ("PERSON_ID") PRZY UŻYCIU INDEKSU); / CREATE TABLE "PROCESS_HISTORY" ( "INFO_ID" NUMBER(19,0) NOT NULL ENABLE, "PROCESSOR_ID" NUMBER(19,0) NOT NULL ENABLE, "CHECKED_OUT" DATA NOT NULL ENABLE, "CHECKED_IN" DATE ); / "Wyewidencjonowanie" rekordu z SOME_INFO dla danego użytkownika jest realizowane przez WSTAWIENIE nowego rekordu do PROCESS_HISTORY z INFO_ID = INFO_ID wybranego rekordu, PROCESSOR_ID = użytkownicy PERSON_ID i CHECKED_OUT = aktualny czas (CHECKED_IN pozostaje NULL). „Zameldowanie” jest realizowane przez proste ustawienie CHECKED_IN na aktualny czas. Zautomatyzowany proces służy do okresowego wpisywania rekordów, które zostały wyewidencjonowane przez okres dłuższy niż wstępnie zdefiniowany maksymalny czas (czas ten różni się w zależności od strony w zależności od tego, co jest zaangażowane w przetwarzanie informacji). Na tej podstawie mogę stwierdzić, czy dany rekord jest aktualnie sprawdzany, czy nie, a tym samym odpowiednio zmienić zachowanie strony. Powiedziawszy to, nie mogę przestać myśleć, że musi być lepszy sposób na zrobienie tego. Mam nadzieję, że jest to dość powszechny problem, że istnieje standardowa lub półstandardowa metoda robienia tego, której po prostu nie byłem w stanie znaleźć.


title: Czy istnieje IDE dla Pythona, które tworzy ten sam rodzaj odblaskowego środowiska, które zapewnia Smalltalk?

text: Jak wie każdy, kto używał Smalltalk, jedną z głównych korzyści (poza językiem z późnym wiązaniem, który zniechęca do wielu złych praktyk) jest to, że system jest całkowicie przejrzysty i refleksyjny, co ułatwia zrozumienie interfejsów API i istniejącego kodu oraz zlokalizowanie funkcjonalności całkiem proste. Czy jest coś, co tworzy podobne środowisko dla Pythona? Kilka przykładów cech środowiska programistycznego smalltalk, które nie występują natywnie w pythonie to: * wyszukiwanie nazw klas/metod/itd. originate * zintegrowany debugger graficzny, który pozwala zbadać pełny stan wszystkiego w systemie i zobaczyć każdą instancję danego typu, a także wszystkie wątki. Zauważ, że używam okien, więc wszystko, co działa dobrze w oknach, byłoby szczególnie przydatne.


title: Wiodące publikacje aplikacji internetowych

text: Prawie każda duża branża ma swoje standardowe publikacje, które są uważane za „konieczne lektury” w tej konkretnej dziedzinie. Po spędzeniu trochę czasu w Google szukając publikacji aplikacji internetowych, wyszedłem pusty; czy są jakieś wysokiej jakości publikacje aplikacji internetowych dostępne online lub w formie drukowanej, które ktoś może mi wskazać?


title: Czy umieścić logikę biznesową w procedurze składowanej, czy nie?

text: Zawsze toczy się dyskusja na ten temat - "Czy umieścić logikę biznesową w Procedury Zapisanej, czy nie?". Jeśli zdecydujemy się nie używać narzędzia ORM i nie umieszczać logiki biznesowej w procedurze składowanej, to gdzie umieścimy logikę biznesową? W moich poprzednich aplikacjach zawsze wolałem umieszczać całą logikę biznesową tylko w procedurach składowanych. Następnie z kodu .NET wywołuję te procedury składowane przy użyciu bloków aplikacji dostępu do danych. SQLHelper itp. Ale to nie może być cały czas scenariuszem. Więc zrobiłem trochę googlowania, ale skończyło się to zamieszaniem....... Jakieś sugestie...?


title: Gdzie mogę otrzymać kopię pierwszej generacji klasycznego „Sortowanie, sortowanie”?

text: Nie mogę nawet ustalić, kto to zrobił – nawet strona IMDB jest w większości pusta, a Wikipedia nie ma na jej temat żadnych informacji. Jak na tak przydatny film w CompSci, wydaje mi się dziwne, że jedyną sensowną obecnością w Internecie, jaką mogę znaleźć, są okropnej jakości kopie lub fragmenty na YouTube. [Uwaga: SO twierdzi, że to pytanie zostało przeniesione tutaj, ale podany przez nich adres URL daje 404 i nie mogę go znaleźć, przeszukując Programrs.SE, więc pytam ponownie...]


title: Pisanie CV na praktyki?

text: Jestem studentem studiów licencjackich i zaczynam szukać praktyk. Dużo rozumiem, jak upiększyć życiorys z prawdziwego świata – kładąc nacisk na zadania wykonane w poprzednich miejscach pracy i tak dalej – ale nie jestem pewien, czy będzie to dobrze przekładać się na CV ze stażu o niskim doświadczeniu. Życiorysy stażów są oznaczone przez: * Niewiele lub żadnych przeszłych prac w pełnym wymiarze czasu pracy lub staży związanych z oprogramowaniem * Niewiele lub żadnych działań niezwiązanych ze szkołą związanych z oprogramowaniem Oczywiście, jeśli nie masz żadnego doświadczenia ani zajęć do wymienienia, jesteś całkiem nieźle utknął . Załóżmy więc, że mamy po jednym z nich. Zastanawiam się w zasadzie: 1. Czego firma najbardziej szuka od kandydatów na staż? Wcześniejsza praca, GPA/zajęcia, projekty zewnętrzne (Open Source, itp.), pewne zestawy umiejętności (języki) 2. Czy powinienem kłaść nacisk na _zadania_ czy _prace/stanowiska_ podczas wymieniania moich doświadczeń? 3. Czy warto wymienić umiejętności? Jeśli tak, to które konkretnie?


title: Czy użyłbyś (dialektu) LISP-a do aplikacji w świecie rzeczywistym? Gdzie i dlaczego?

text: LISP (i dialekty takie jak Scheme, Common LISP i Clojure) nie zyskały dużego poparcia w branży, mimo że są całkiem przyzwoitymi językami programowania. (W tej chwili wygląda na to, że zyskują na popularności). Nie jest to bezpośrednio związane z pytaniem, czy użyłbyś dialektu LISP w programie produkcyjnym? Jaki program i dlaczego? Uwzględniono również przypadki integracji z innym kodem (np. C), ale pamiętaj, że to właśnie masz na myśli w swojej odpowiedzi. Preferowane są ogólne koncepcje, ale odpowiednie są również konkretne zastosowania.


title: Weź udział w projekcie open source

text: Obecnie przechodzę bardzo twórczą fazę jako programista. Myślę, że to dobry czas, aby przyczynić się do projektu open source. Nie jako „stały” deweloper projektu, ale w sposób „pożądany” w wielu projektach. Usługi hostingowe typu open source, które znam, to SourceForge i CodePlex. Jakieś sugestie, które pomogą mi w tym kierunku?


title: Identyfikowalność elementów pracy w TFS 2010

text: Utworzyłem projekt Windows Form (rozwiązanie VS) w ramach projektu TFS 2010. Być może w końcu dodam więcej rozwiązań do projektu TFS. **Moje pytanie** : Czy możemy stworzyć Use Case WIT dla konkretnego rozwiązania w ramach projektu TFS? Co więcej, czy możliwe jest stworzenie „macierzy śledzenia”, która zaczyna się na poziomie Przypadku Użycia i schodzi do poziomu kodu (przynajmniej poziomu przestrzeni nazw) tego konkretnego rozwiązania VS?


title: Podstawowe TDD: utknąłem z pisaniem testu, abym mógł napisać kod, który chcę

text: Mam klasę Season. Ten sezon ma kilka właściwości: wśród nich lista gier. Powinno to być wypełnione z tego samego źródła, co pozostałe właściwości sezonu. Mam test, aby upewnić się, że wszystkie pozycje na tej liście są typu Gra. Nie ma sztywnych wymagań, aby sezon zawierał jakieś gry, więc sprawdzanie, czy lista nie jest pusta, nie byłoby całkowicie poprawne – jednak sezon testowy, którego używam, zawiera wiele gier. Pisanie "minimalnej ilości kodu do przejścia testu" jest już zrobione, ponieważ jest to pusta lista (więc nie ma żadnych obiektów spoza gry). Jaki byłby _podstawowy_ sposób TDD, aby uzyskać kod produkcyjny do parsowania + dodawania gier do obiektu sezonu? Czy _pragmatycznym_ sposobem byłoby testowanie poprzez rozmiar? * * * Alternatywą byłoby wygenerowanie listy gier w moim teście i sprawdzenie, czy Season.games == list_of_games Problem polega na tym, że jest mnóstwo kontaktów zagranicznych, które będą wchodzić do tych gier, tworząc test kod równoważny metodzie, którą testuję — co moim zdaniem nie jest tak, jak powinno działać. A może powinienem je zbudować „ręcznie” z danych testowych — zamiast je analizować?


title: W C# co to jest czas życia lub żywotność zmiennej stałej?

text: W C#, jeśli zadeklaruję stałą zmienną, czy przydzielona jest do niej jakakolwiek pamięć, ponieważ działa ona jako zamiennik czasu kompilacji? Jak długo trwa zmienna?


title: Dlaczego spakowane struktury nie są częścią języka C?

text: Każdy kompilator C oferuje opcję "pakowania" struktur C (np. `__attribute__ ((__packed__))` lub `#pragma pack()`). Teraz wszyscy wiemy, że pakowanie jest wymagane, jeśli chcemy przesyłać lub przechowywać dane w niezawodny sposób. Musiało to być również wymagane od pierwszych dni języka C. Zastanawiam się więc, dlaczego spakowane struktury nie są częścią specyfikacji języka C? Nie ma ich nawet w C99 czy C11, mimo że konieczność ich posiadania jest znana od dziesięcioleci? Czego mi brakuje? Dlaczego jest specyficzny dla kompilatora?


title: Podejście oddolne czy odgórne?

text: Nie jestem pewien, czy tytuł _naprawdę_ pasuje do pytania, ale doszedłem do wniosku, że jest to najbliższy przegląd mojego pytania. Pracuję nad aplikacją internetową, która (dość mocno) wykorzystuje funkcje CSS specyficzne dla przeglądarki, takie jak -moz-transform) i jestem ciekaw, jak podejść do tych, którzy mają większe doświadczenie w tworzeniu tego typu aplikacji. Dla kontekstu, odnoszę się _wyłącznie_ do rozwoju front-endu (mój potok zaplecza jest całkiem solidny :)). Moim zdaniem istnieją dwie metody rozwoju: * Uzyskaj nową funkcjonalność działającą we wszystkich przeglądarkach, wprowadzając nowy kod dopiero po przetestowaniu wszystkich odpowiednich przeglądarek. * Uzyskaj pełną funkcjonalność w jednej przeglądarce. Po ukończeniu aplikacji rozpocznij testowanie w innych przeglądarkach i w razie potrzeby wprowadź poprawki. Generalnie śledzę to drugie. Czuję, że pozwala mi to skoncentrować się na podstawowej funkcjonalności i szybciej ukończyć więcej, niż gdybym zasadniczo zatrzymywał rozwój funkcjonalny za każdym razem, gdy coś nowego zostało ukończone, aby poradzić sobie z niuansami przeglądarki. Więc jakie praktyki stosujesz _ty_, jeśli chodzi o rozwój po stronie klienta? Nie pracuję zawodowo jako programista stron internetowych, więc najlepsze praktyki w tworzeniu stron internetowych są nieco trudniejsze do zdobycia, poza moimi własnymi próbami i błędami (i zaleceniami w3c). Jednak zawsze warto uczyć się od tych mądrzejszych od Ciebie :).


title: Ile masz kredytu, gdy używasz wtyczek itp.?

text: Często samodzielnie tworzę aplikację. Ale czy naprawdę? Dziwnie się czuję z tym twierdzeniem i nigdy nie wiem, kiedy to prawda. To znaczy, zaprojektowałem to, zakodowałem, ale użyłem wtyczki XYZ. Czy nadal mogę twierdzić, że zrobiłem to sam, mimo że nie stworzyłem wtyczki, której używałem? Rozważ tę rozmowę? > **ME:** Zaprojektowałem i opracowałem tę aplikację całkowicie samodzielnie. > > **Inne:** Super, jak zaprogramowałeś część XYZ? > > **ME:** Nie programowałem tej części, używałem wtyczki XYZ. > > **Inne:** Więc tak naprawdę nie programowałeś go _WSZYSTKO_ sam niż sam? Chodzi mi o to, że jeśli muszę przyznać im kredyt za wtyczkę, której użyłem, to czy muszę również podać kredyt autorów języka, którego użyłem, a także kredyt autorów IDE? Gdzie mam narysować linię? To jest po prostu coś, co zawsze przecina moją kopalnię, gdy tylko zamierzam wziąć pełny kredyt za projekt i zastanawiałem się nad opiniami innych w tej sprawie.


title: Rozwidlenie oprogramowania na podwójnej licencji GPL z prawami autorskimi należącymi do firmy

text: Po otrzymaniu kilku gróźb posiadacza praw autorskich do oprogramowania z podwójną licencją (GPL2 i komercyjnego), aby kupić wersję komercyjną dla projektów w produkcji, myślę o zrobieniu widelca. W przypadku GPL2 i komercyjnej podwójnej licencji z oprogramowaniem chronionym prawem autorskim należącym do firmy, czy rozwidlenie wersji GPL2 jest opcją? Czy rozwidlenie jest dobrym sposobem radzenia sobie z takimi przypadkami? ## Informacje ogólne Oprogramowanie to webowy system CMS wydany w 2 wersjach: bezpłatnej, otwartej na licencji GPL2 oraz komercyjnej, zawierającej wsparcie techniczne i dodatkowe funkcje. Problem w tym, że teraz, opierając swoją argumentację na „dystrybucyjnej” definicji GPL2, firma będąca właścicielem praw autorskich argumentuje, że dostarczanie oprogramowania i niektórych rozszerzeń klientowi jest uważane za „dystrybucję”. I że taka „dystrybucja” podlega zobowiązaniu GPL2 do uwolnienia niestandardowego kodu rozszerzenia. Rozszerzenia na zamówienie to głównie projekty, szablony i bardzo specyficzne funkcjonalności. Zasadniczo dają mi 3 możliwości: 1. Zakup komercyjnej wersji na licencji dla projektów opartych na GPL w wersji produkcyjnej, 2. Usunięcie wszystkich projektów w produkcji opartej na wersji GPL2, 3. Wydanie wszystkich rozszerzeń jako kod GPL2. Pierwsze 2 opcje nie są realistyczne w przypadku gotowych projektów. Trzecia opcja może być w porządku, ale ponieważ większość rozszerzeń jest bardzo specyficzna, wyczyszczenie kodu, aby mogli go używać inni użytkownicy, oznacza dużo pracy, a także nie jestem pewien, czy klienci docenią udostępnienie ich projektów stron internetowych i określonych funkcji publicznie. Holding zajmujący się prawami autorskimi kontaktował się nawet bezpośrednio z niektórymi klientami, dając im „wybór”. Wiem, że jest to bardzo korporacyjna interpretacja GPL2 i takie działanie nie zbliża się do legalności, ale jako niezależny programista nie chcę ryzykować angażowania się w długie i męczące procedury prawne. * * * PS. To pytanie zostało po raz pierwszy zadane na Stack Overflow, gdzie wydawało się, że jest poza zakresem i zamknięte, po przeczytaniu niniejszego FAQ na stronie, dyskusja na temat licencjonowania oprogramowania wydaje się w porządku.


title: Czy nazwanie funkcji po obejściu, które naprawi, to dobra czy zła forma?

text: Powiedzmy, że musisz napisać kod, aby naprawić błąd, który na pierwszy rzut oka przez innego inżyniera wydawałby się dziwny lub niepotrzebny. Czy byłoby dobrą czy złą formą umieszczenie kodu w metodzie o nazwie na przykład „preventWindowFromJumpingWhenKeyboardAppears” lub po prostu nazwanie jej „forceSpecifiedWindowPosition”, a następnie dodanie komentarza o tym, dlaczego robisz to podczas wywoływania metody?


title: Wykonanie atrakcyjnego, ale wciąż technicznego diagramu architektury

text: Czy ktoś ma jakieś rady dotyczące tworzenia „atrakcyjnego” diagramu architektury oprogramowania? Mój menedżer polecił mi, aby mój obecny diagram architektury (który został zbudowany tylko przy użyciu programu Visio i podstawowych ikon) był bardziej „atrakcyjny” dla prezentacji, którą muszę przedstawić osobom nietechnicznym na poziomie wykonawczym. Domyślam się, że chciał mieć coś, co można pokazać klientom lub marketingowcom. Jakieś konkretne zestawy ikon lub konkretne wskazówki, które ludzie mają? Nie mogę opublikować mojego obecnego diagramu ze względu na ochronę prywatności, ale aby uzyskać ogólny pomysł, to tylko tekst, linie i ikony serwera (http://www.227volts.com/wp-content/uploads/2009/03/exchange2007visiostencils.jpg) to jest zestaw ikon, którego używam. Jestem naprawdę zdezorientowany, jak zrobić coś takiego „bardziej atrakcyjnego” (do diabła, myślę, że czerń i biel są zawsze najlepszymi kombinacjami kolorów :P) Edytuj: Czyli coś takiego http://rollerweblogger.org/ roller/resource/linkedin- Today.png nadal uważany za „profesjonalny” ze wszystkimi kolorami i tak dalej? Zapytałem mojego menedżera, a on powiedział tylko, że jest bardziej rynkowy, unikając pytań o to, co konkretnie powinienem zrobić.


title: Qos aplikacji obejmujące priorytet i przepustowość

text: Nasz menedżer chce, abyśmy wykonali aplikację qos, która jest zupełnie inna niż dobrze znane systemowe qos. Mamy wiele usług trzech typów, mają priorytety, menedżer chce zawiesić żądania usług o niskim priorytecie, gdy nie ma wystarczającej przepustowości dla usług o wysokim priorytecie. Ale jeśli żądania usług o wysokim priorytecie zmniejszą się, przepustowość dla usług o niskim priorytecie powinna wzrosnąć, a żądania usług o niskim priorytecie będą ponownie dozwolone. Powinien istnieć algorytm obejmujący priorytet i przepustowość. Nie wiem, jak zaprojektować algorytm, czy ktoś może pomóc w naprawieniu tego? Wszystkie te usługi są objęte tym samym procesem. Ustawiamy maksymalną przepustowość dla trzech rodzajów usług przez porty usług przez TC (TC to narzędzie linux qos, którego nazwa oznacza kontrolę ruchu).


title: Czy pod względem architektonicznym warstwa abstrakcji bazy danych, taka jak Entity Framework firmy Microsoft, unieważnia potrzebę oddzielnej warstwy dostępu do danych?

text: # Tak było Przez lata zorganizowałem swoje rozwiązania programowe w następujący sposób: * Warstwa dostępu do danych (DAL), aby wyodrębnić biznes związany z dostępem do danych * Warstwa logiki biznesowej (BLL) do zastosowania reguł biznesowych do zestawów danych, obsługi uwierzytelniania itp. * Utilities (Util), która jest po prostu biblioteką popularnych metod narzędziowych, które zbudowałem z biegiem czasu. * Warstwa prezentacji, która może oczywiście być przeglądarką internetową, komputerową, mobilną, cokolwiek. # Tak jest teraz Od około czterech lat korzystam z Entity Framework firmy Microsoft (jestem głównie programistą .NET) i stwierdzam, że posiadanie DAL staje się bardziej kłopotliwe niż czyste ze względu na fakt, że Entity Framework wykonał już zadanie, które mój DAL wykonywał: abstrahuje działalność polegającą na uruchamianiu CRUD w bazie danych. Tak więc zazwyczaj kończę z DAL, który ma kolekcję metod takich jak ta: public static IQueryable<SomeObject> GetObjects(){ var db = new myDatabaseContext(); return db.SomeObjectTable; } Następnie w LOKALU metoda ta jest używana jako taka: public static List<SomeObject> GetMyObjects(int myId){ return DAL.GetObjects.Where(ob => op.accountId == myId).ToList(); } Jest to oczywiście prosty przykład, ponieważ LOGIKA LOGICZNA zazwyczaj miałaby kilka dodatkowych linii logiki, ale wydaje się po prostu nieco przesadne, aby utrzymywać DAL dla tak ograniczonego zakresu. Czy nie byłoby lepiej po prostu porzucić DAL i po prostu napisać moje metody LOGIKI biznesowej jako takie: public static List<SomeObject> GetMyObjects(int myId){ var db = new myDatabaseContext(); return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList(); } Rozważam usunięcie DAL z przyszłych projektów z powodów wymienionych powyżej, ale zanim to zrobię, chciałem tutaj przepytać społeczność o twoją prognozę/prognozę/opinie, zanim zabiorę się za projekt i odkryję problem, który zrobiłem nie przewidywać. Wszelkie myśli są doceniane. # Aktualizacja Wydaje się, że konsensus jest taki, że oddzielny DAL nie jest konieczny, ale (wnioskuję tutaj) jest dobrym pomysłem, aby uniknąć blokady dostawcy. Na przykład, jeśli mam DAL, który abstrahuje wywołania EF, jak pokazano powyżej, jeśli kiedykolwiek przejdę do innego dostawcy, nie muszę przepisywać mojej BLL. Tylko te podstawowe zapytania w DAL musiałyby zostać przepisane. Powiedziawszy to, trudno mi wyobrazić sobie scenariusz, w którym tak się stanie. Mogę już stworzyć model EF bazy danych Oracle, MSSQL jest dany, jestem prawie pewien, że MySql jest również możliwy (??), więc nie jestem pewien, czy dodatkowy kod kiedykolwiek zapewniłby opłacalny zwrot z inwestycji.


title: Pozyskiwanie, przechowywanie i zarządzanie danymi

text: Posiadam urządzenie, które może mierzyć różne wartości w czasie, jedna próbka na sekundę. Po jednym pomiarze mogę wyeksportować dane w postaci pliku CSV. Jeden wiersz na sekundę z sygnaturą czasową i około 20 kolumnami (wartościami). Teraz pytanie brzmi, jak przechowywać te masy danych, aby dane były dostępne. Chcę z nim pracować za pomocą Matlaba. Mam na przykład 50 plików danych, z których każdy reprezentuje jeden przebieg pomiarowy. Każdy zawiera około 120 tsd. próbki 20 wartości typu float, na przykład temperatura. Byłoby wspaniale, gdybym mógł poprosić na przykład o wszystkie próbki w tej samej temperaturze. Tak naprawdę szukam oprogramowania, które może obsłużyć i uporządkować te dane lub podpowiedzi, jak (i jakiego rodzaju) bazę danych zbudować. Dziękuję za pomoc!


title: Monitoruj proces

text: Mam kilka wcześniejszych postów mówiących o tym, jak używać Pythona do "zrobienia czegoś", gdy rekord jest wstawiany lub usuwany do bazy danych postgres. W końcu zdecydowałem się na kolejkę wiadomości do obsługi "zadań" (beanstalkd). Mam wszystko skonfigurowane i uruchomione z innym procesem Pythona, który obserwuje kolejkę i „robi rzeczy”. Tak naprawdę nie jestem facetem od "systemów", więc nie jestem pewien, jaki jest dobry sposób na monitorowanie procesu, aby upewnić się, że jeśli się nie powiedzie lub umrze, że uruchomi się ponownie i wyśle powiadomienie. Google dał kilka dobrych pomysłów, ale pomyślałem, że pytając tutaj, mógłbym uzyskać sugestie od ludzi, którzy na pewno musieli zrobić coś podobnego. Proces jest krytyczny dla systemu i po prostu musi zawsze działać, a jeśli nie działa, należy go rozwiązać, a inne części systemu „wstrzymać” do czasu rozwiązania problemu. Pomyślałem, że po prostu uruchamiam cronscript co minutę lub dwie, który sprawdza, czy proces jest uruchomiony. Jeśli nie, uruchamia go ponownie. Inny skrypt (a może po prostu inna funkcja pierwszego) będzie monitorować zadania i jeśli zadania oczekujące na przetworzenie osiągną określony próg, aby również zaznaczyć, że istnieje poważny problem. Szczegóły dotyczące procesu... Proces aktualizuje zamówienia w starszym systemie o ilość artykułów, które zostały wysłane lub zamówione z powrotem z naszego magazynu. Więc jeśli te rzeczy nie zostaną zrobione, to po zafakturowaniu zamówienia będzie miało nieprawidłowe ilości, a zaangażowane osoby nie będą miały dobrego sposobu, aby to zauważyć, chyba że sprawdzają każdą linię. Pomyślałem, że mogę również mieć flagę na zamówieniu, która mówi „tak, zostałem dotknięty”, a jeśli nie, po prostu powiadom agenta faktury. Ta sama metoda będzie używana do aktualizowania zamówień o informacje o wysyłce na podstawie tego, kiedy zamówienia są wysyłane z UPS Worldship. Nie wiem, myślę, że sobie z tym poradzę, ale to po prostu wydaje się „niezdarne”.


title: c++ napisz własny parser xml vs używając tinyxml

text: Obecnie jestem w zadaniu generowania pliku XML dla pliku tekstowego srt zawierającego sygnatury czasowe i odpowiedni tekst. Aby wygenerować plik exe, który akceptuje wprowadzanie nazwy pliku i wyprowadza odpowiedni plik XML do wykorzystania jako część zautomatyzowanego skryptu. Czy wskazane jest używanie do tego Tinyxml? Edycja: twoje komentarze na ten temat są bardzo mile widziane jaki jest najłatwiejszy sposób na wygenerowanie xml w c++?


title: Etymologia „Struny”

text: Jest więc oczywiste, że ciąg rzeczy jest sekwencją rzeczy, a więc sekwencją znaków/bajtów/itd. równie dobrze można nazwać ciągiem. Ale kto pierwszy nazwał je strunami? I kiedy? A w jakim kontekście tak utknął? Zawsze się nad tym zastanawiałem.


title: Jak zarządzasz zadaniami przepływu pracy dla rozproszonego zespołu?

text: Pracuję dla małej firmy programistycznej, która jest odpowiedzialna za dostarczanie około tysiąca niestandardowych pakietów oprogramowania dla około 100 klientów. Zmagamy się ze śledzeniem procesu wydawania. Całość jest dość powtarzalna, ale ze względu na różne procesy dystrybucji, od momentu podpisania umowy do momentu, w którym produkt wychodzi za drzwi, jest około 2 tuzinów kroków. Aby skomplikować sprawy, mamy do czynienia z kilkoma różnymi „typami” pracowników. Mamy sprzedawcę, który otrzymuje wszystkie wymagania i warunki transakcji. Posiadamy programistów, którzy wykonują wszelkie modyfikacje wymagane przez klienta. Istnieje inny typ pracownika, który wykonuje pracę polegającą na uruchomieniu ostatecznej wersji, testowaniu i dystrybucji produktu. Szukam pomysłów, jak ludzie zarządzają tego rodzaju procesami, ponieważ staramy się rozwiązać niektóre problemy, które dręczą nas od jakiegoś czasu. Przede wszystkim widzimy wiele problemów z sekwencjonowaniem wydarzeń ORAZ przekazywaniem informacji związanych z każdym produktem do zespołu konstruktorów/dystrybucji. Obecnie używamy SVN (SCM), Jenkins/Hudson (Build) i Redmine (Feature/Bug Tracker). Czy istnieją rozwiązania programowe, czy jest to tylko wewnętrzny proces, który musimy udokumentować i zrozumieć? Naprawdę chciałbym znaleźć sposób, aby wszyscy byli świadomi stanu konkretnej aplikacji i powiadamiali ludzi, że mają coś zrobić.


title: Jak starszy programista powinien monitorować innego starszego programistę?

text: Pracuję z nowym starszym programistą, który ma prawie takie samo doświadczenie jak ja. Ma swój własny projekt do pracy, ale muszę się upewnić, że nic nie zepsuje. Jak mogę go monitorować, skoro nie jest młodszy? Czy sprawdzam jego kod? Minusy tego są takie, że nie jestem tak zagłębiony w projekt jak on sam, więc jest to dla mnie czasochłonne (poza tym mam swój własny projekt). Czy przeprowadzam QA tylko z perspektywy innego seniora? Wszelkie porady tutaj są mile widziane. Byłem ostatnio w takiej samej sytuacji, w której liczyłem, że inny senior obsłuży wszystkie bilety właściwie, a potem zajęło mi 3 tygodnie, aby naprawić jego niedopatrzenia. Więc nie chcę znowu być w tej samej sytuacji.


Czy istnieje odpowiednia biblioteka Boost dla C?


title: Czy język może nas ogłupić?

text: Czy języki programowania, w których głównie kodujemy, naprawdę zmieniają sposób, w jaki myślimy o problemach? Rodzaj programowania typu hipotezy Sapira–Whorfa. A jeśli tak, to czy tak naprawdę nie oznacza to, że **są** języki programowania, które mogą nas zrobić, no cóż, nie głupich, ale ograniczonych? **AKTUALIZACJA:** to pytanie w rzeczywistości nie dotyczy uznania faktu, że wszyscy powinniśmy znać co najmniej trzy lub cztery języki. To jest oczywiste. Ale co, jeśli istnieją jakieś „niebezpieczne” języki, których lepiej w ogóle się nie uczyć?


title: Dlaczego ludzie przechowują wysyłkę i obsługę w nagłówku zamówienia, a nie w elemencie zamówienia?

text: Pracowałem nad kilkoma systemami zamówień. Każdy z nich śledził wysyłkę i obsługę jako część nagłówka zamówienia, a nie jako element zamówienia. Dla mnie bardziej sensowne byłoby trzymanie ich razem z pozycjami zamówienia, nawet jeśli informacje nie są wyświetlane użytkownikowi w ten sposób. Jakie są powody trzymania ich w nagłówku?


title: Wyjaśniasz interfejsy początkującym programistom?

text: Miałem dyskusje z innymi programistami na temat interfejsów (C#). Próbowałem użyć analogii do interfejsów będących jak kontrakt między programistami. Oznacza to, że kiedy projektujesz interfejs, projektujesz zgodnie z „przemyślanym planem”. To nie latało. Inni programiści (o ograniczonym doświadczeniu) nie mogli zrozumieć koncepcji. Albo co gorsza, odmówił udziału. Jak wytłumaczysz takim ludziom, że **są** powody, by używać interfejsów? Dziękuję


title: Odpowiedni diagram UML

text: Jaki jest odpowiedni diagram UML, jeśli chcę wyświetlić, jak użytkownik żąda strony internetowej, wprowadza jakieś dane, a następnie wysyła formularz (a jeśli walidacja się nie powiedzie, użytkownik jest przekierowywany z powrotem na żądaną stronę)?


title: Jak uniknąć „złej intuicji programisty w zakresie optymalizacji”?

text: Widziałem artykuł, który zawierał takie stwierdzenie: > Deweloperzy uwielbiają optymalizować kod i nie bez powodu. To jest tak satysfakcjonujące > i zabawne. Ale o wiele ważniejsza jest wiedza, kiedy należy zoptymalizować. Niestety, > programiści na ogół mają straszną intuicję, gdzie faktycznie będą występować problemy z wydajnością aplikacji. Jak programista może uniknąć tej złej intuicji? Czy istnieją dobre narzędzia do znajdowania, które części kodu naprawdę wymagają optymalizacji (dla Javy)? Czy znasz jakieś artykuły, wskazówki lub dobre lektury na ten temat?


title: Gdzie mogę dowiedzieć się o współprojektowaniu sprzętu/oprogramowania?

text: Jestem zaangażowany w projekt oprogramowania wbudowanego, w którym musimy również określić docelowy sprzęt. Pochodzę głównie ze środowiska programistycznego i chciałbym dowiedzieć się więcej o jednoczesnym projektowaniu oprogramowania i sprzętu. Czy są jakieś książki/zasoby/kursy, które mógłbyś polecić?


title: Kiedy pojawiają się „funkcje statyczne”?

text: OK, nauczyłem się, co to jest funkcja statyczna, ale nadal nie rozumiem, dlaczego są one bardziej przydatne niż prywatne funkcje składowe. To może być trochę nowe pytanie, ale dlaczego nie zastąpić wszystkich prywatnych funkcji składowych funkcjami statycznymi?


title: Jak odpowiadasz na pytania klientów: "Od czasu aktualizacji..."?

text: Od czasu aktualizacji ludzie ciągle dzwonią i mówią: „Od czasu aktualizacji X, Y i Z są powolne, złe i ulegają awarii”. To się działo od zarania aktualizacji. Czego ludzie oczekują? Gamma pojawia się po wersji beta, a testy gamma zawsze zmieniają naszych użytkowników w The Incredible Hulks... Być może nigdy nie słyszałeś o tym od klienta, być może jesteś na studiach lub jesteś programistą FLOSS, który może rozrzucić winę na więcej niż 5 lub 6 chłopaków, być może przeprowadzacie testy jednostkowe swojego kodu, być może nie jesteście w tej interesującej sytuacji, w której klienci dzwonią do was, prosząc o dokładną porę dnia, o której wydacie dzisiejszą łatkę (chciałbym to zrobić Microsoftowi) lub może jesteś żałosnym sukinsynem jak ja, który właśnie wysłał nową aktualizację, wrócił do domu i boi się wrócić jutro do pracy. W każdym razie i tak będziesz mądrzejszy ode mnie. Jak radzisz sobie z krytyką w formie „Musisz być złym programistą, ponieważ pogarszasz swoje oprogramowanie”?


title: Zachęcanie użytkowników do pisania przyzwoitych i użytecznych raportów o błędach

text: Czy ktoś zna dobry sposób na **_skłonienie użytkowników do napisania w połowie przyzwoitego_** (czytaj: _przydatne_ ) **_zgłoszenie błędu_**? Chcieliśmy umieścić coś, co miałoby sens dla większości użytkowników (było łatwe do odczytania i zrozumienia), a jednocześnie dostarczyłoby przydatnych informacji również programistom. _**Nie działa po kliknięciu niebieskiego przycisku! Ahhh, właśnie straciłem tydzień pracy ... aby to działało._** nie jest zbyt przydatne, ponieważ jest. Zacząłem naprawiać listę, ale pomyślałem, żeby sprawdzić z wami, czy podobna metoda już istnieje.


title: Jak upewnić się, że zgłaszane problemy nie są spowodowane błędnymi danymi uwierzytelniającymi lub literówkami klienta?

text: Kilka razy znalazłem się w sytuacji, w której klient zgłasza problem typu „Nie mogę się już zalogować na swoje konto_”. Rzeczywiście, przy próbie zalogowania się przy użyciu danych uwierzytelniających klienta wszystko działa. Następnie zaczynasz testować w innych środowiskach i sytuacjach, ale nadal działa to za każdym razem. Po wielu testach zaczynasz się zastanawiać, czy użytkownik używa właściwych danych uwierzytelniających. Niektórzy klienci obrażają się, gdy o to proszą. Inni są tak pewni, że wprowadzają właściwe poświadczenia, że nawet nie zawracają sobie głowy próbowaniem poświadczeń, które im wyślesz. Jak mogę się upewnić, że klient używa właściwych poświadczeń?


title: Za mało informacji w Bugs / Tickets

text: Pracuję w małym zespole programistów, który obsługuje kilka programów, z których korzysta duża firma z wieloma lokalizacjami. Używamy Spiceworks do zgłaszania problemów i próśb o wsparcie w całym dziale IT, nie tylko dla programistów. Ciągle otrzymujemy mandaty z następującymi lub podobnymi treściami: „Funkcja X jest zepsuta, proszę ją naprawić, jest to pilne” Teraz to stwierdzenie jest dla mnie praktycznie bezużyteczne i marnuje mój i ich czas, podczas gdy często próbuję rozwiązać problem tylko po to, by odkryć, że jest to coś, czego nie zdali sobie sprawy lub co powinno zostać przydzielone komuś innemu. Teraz moje pytanie brzmi, w jaki sposób mógłbym spróbować skłonić ludzi do pisania więcej informacji w błędach? Myślałem o kilku pomysłach, takich jak szablon, ale jestem pewien, że zostałyby zignorowane. Jedyne, co przychodzi mi na myśl, że prawie na pewno zadziała, to odmowa wykonania wszelkich zgłoszeń niepoprawnie napisanych, ale mam wątpliwości, czy będę mógł to zrobić. Nawiasem mówiąc, ludzie zgłaszający błędy mają problemy z używaniem podstawowych funkcji komputera, więc nie mogę ich poprosić o zrobienie czegokolwiek bardzo technicznego bez większego wysiłku. Dziękuje wszystkim


title: Czy używanie F# jest wystarczająco dobre, aby nauczyć się ważnych koncepcji programowania funkcjonalnego Haskella?

text: Pochodzę z Linuksa i Rubiego. Byłem zainteresowany nauką programowania bardziej funkcjonalnego, aw szczególności stylu ML. Próbowałem czytać książkę Real World Haskell i spróbować trochę Haskella w ten sposób. Ale trudno mi się tego nauczyć, ponieważ Haskell jest dla mnie bardzo dziwny i nie sądzę, żebym naprawdę się tego nauczył, dopóki nie spróbuję zrobić z nim czegoś prawdziwego. Dlatego rozważam zamiast tego naukę F#, ponieważ zgaduję, że w ten sposób mogę upiec dwie pieczenie na jednym ogniu: nauczyć się paradygmatu języka funkcjonalnego w stylu ML, a także nauczyć się API programowania Windows (biblioteki .NET). Wydaje się to być bardziej produktywną drogą niż poznanie odpowiedników biblioteki Haskell wszystkich bibliotek Ruby, które pokochałem, ale pozostawanie w wszechświecie Linux/OSX. Moje pytanie brzmi: jak brzmi to rozumowanie? Czy F# jest odpowiednim substytutem Haskella, jeśli chcesz poznać pomysły i techniki programowania, których uczy Haskell?


title: Minusy pracy w domu

text: Jestem programistą dla dużej korporacji, a obecnie pracuję w domu dwa dni w tygodniu i bardzo mi się to podoba. Jednak z powodu żonglowania personelem biuro mojego zespołu może zostać zamknięte w ciągu najbliższych kilku miesięcy. Zapytano mnie o moje przemyślenia na ten temat i nie jestem do końca pewien. Uwielbiam moje dwa dni w domu i nie miałbym nic przeciwko nawet czterem; ale moim zdaniem pójście do biura jest niezbędne. Kiedy jestem w biurze, jem lunch z innymi programistami, dzielę się domowymi smakołykami i omawiam specyfikę pracy. Ponieważ jestem również całkiem nowym członkiem zespołu, wciąż dużo się uczę, a od czasu do czasu jeden z członków zespołu musi mi pokazać, jak zrobić coś, co byłoby niezwykle trudne do zrobienia przez telefon lub komunikator. Dla tych z Was, którzy pracują w domu w pełnym wymiarze godzin i nie mają biura, aby spotkać się z innymi współpracownikami, jakie problemy się pojawiły? Jak sobie z nimi radziłeś? Uwaga dodatkowa: nie martwię się o podział pracy / domu, mam wolny pokój ustawiony jako moje biuro (z tylko rzeczami biurowymi w nim [stojące biurko, drukarka, książki itp.]) i jestem w związek bez perspektyw na dzieci, a mój partner rozumie, że nie przeszkadza mi w pracy).


title: Microsoft Visual Web Developer 2008 Express?

text: Właśnie natknąłem się na to, szukając w Google samouczków HTML/CSS. Czy ktoś poleca to oprogramowanie do budowania stron internetowych? A może powinienem zamiast tego po prostu nauczyć się kodowania ręcznego ołówkiem i papierem? Chcę tylko skupić się na właściwym obszarze. Oto link: http://msdn.microsoft.com/en-us/beginner/bb964635.aspx


title: Jak należy zarządzać identyfikacją obiektów?

text: Mam aplikację java/swing w (miejmy nadzieję) strukturze MVC. Oto przegląd moich klas modeli: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/egVUN.png) Jeden lub więcej pracowników może pracować w jednym miejscu pracy i jednym „pracownik” może pracować w różnych „miejscach pracy” (oczywiście nie w tym samym czasie). „Pracownik” może mieć przypisane różne typy „daty”. „Miejsce pracy” zawiera listę wszystkich swoich „pracowników”. Każda „data” ma odniesienie do swojego „pracownika”. Wszystkie obiekty modelu są zmienne. Do celów zarządzania zaimplementowałem `Database.java`, który jest odpowiedzialny za przechowywanie klas modeli w klasach kolekcji java i przy zamknięciu programu zapisywanie wszystkich obiektów do pliku xml (do tego zadania używam prostego frameworka xml java). Zawiera następujące trzy listy: `Lista<Miejsce pracy>`, `Lista<Pracownik>` i `Lista<Data>`. Procedura wygląda następująco: 1. Załaduj plik xml przy starcie programu 2. Dodaj/edytuj/usuń obiekty-modeli do/w/z bazy danych (praca z kolekcjami Database.java 3. Zapisz wszystkie obiekty-modele z kolekcji Database do plik xml przy wyjściu z programu (Jeśli do tej pory coś złego w moim sposobie myślenia, proszę powiedz mi lepszy sposób! Naprawdę to docenię.) * * * Oto pytanie: **Jaki jest właściwy sposób identyfikacji modelu -objects?** Przychodzą mi do głowy dwie możliwości: 1. Użyj referencji do obiektów * (+) Nie ma dodatkowego kodu do obsługi generowania nowych unikalnych identyfikatorów * (-) "Każdy" może edytować obiekty (Ponieważ jest to projekt prywatny "Wszyscy" to tylko ja) 2. Używaj unikalnych identyfikatorów dla każdego obiektu * (-) więcej kodu * (+) baza danych może zwracać kopie obiektów modelu do edycji i tylko wtedy, gdy kontroler wywoła metody bazy z skopiowanymi obiekty modelu zostaną zaktualizowane * * * **EDYTUJ:** Była ważna część, o której zapomniałem wspomnieć n: Multi-Threading i Multi-User Na oba z pewnością można odpowiedzieć „Nie”. Aplikacja będzie rodzajem oprogramowania do planowania jednego użytkownika, które zastąpi obecne „planowanie długopisem i papierem”. Powiedziałbym, że głównym wymogiem jest unikanie budżetowania pracowników, którzy są na wakacjach lub nie zapominanie o budżetowaniu pracowników, którzy wracają z urlopu następnego dnia. Ponieważ to są błędy, które często się zdarzają. Nie ma również potrzeby głębszej analizy obiektów modelu, a tym samym złożonych zapytań do bazy danych _w tej chwili_. Dlatego podoba mi się pomysł wykorzystania XML do stworzenia samodzielnej aplikacji. A może istnieje dobry powód, aby wysadzić kod w powietrze, aby spełnić mało prawdopodobne wymagania?


title: jakaś biblioteka/moduły monitorowania strony internetowej do wykorzystania na mojej stronie?

text: Staram się zbudować witrynę, w której użytkownik będzie mógł dodawać swoje witryny, które powinny być monitorowane, oraz przeglądać szczegółowy raport i statystyki. A także powinien być w stanie monitorować lokalne serwisy internetowe (głównie), 1) czy jest jakaś popularna biblioteka java do monitorowania strony internetowej? (w sensie pingowania witryny i załadowania treści itp., lub pokazania, czy witryna działa, czy nie) 2) Również w celu sprawdzenia przepływu witryny (jeśli to możliwe)? Przykład: Przejdź do strony logowania, znajdź pola , wypełnij pola i wyślij formularz i zatwierdź pomyślne logowanie, czy nie. Wiem, że to wygląda na duże, ale każda mała część może być pomocna. Znalazłem kilka projektów monitorujących, ale obsługują one tylko normalne strony internetowe, ale nie lokalne/inne usługi sieciowe, a także nie mogą zweryfikować przepływu witryny.


title: Czy korzystałeś z telefonu Grapple?

text: Szukam sposobu na łatwe przeniesienie aplikacji opartych na treści z jednej platformy mobilnej na drugą. A ostatnio natknąłem się na grapple mobile, który twierdzi, że potrafi skompilować jeden kod napisany w js i css na prawie wszystkie platformy. Używałeś go? Czy takie aplikacje są zatwierdzone przez Apple? (AFAIK Apple ograniczył rozwój do Object-c, c, c++)


title: Wspólna praca z WebDesignerem - najlepsze praktyki

text: Jestem programistą. Zawsze pracowałam sama. Zwykle robię tylko back-end, ale teraz mam projekt internetowy, który chcę przekazać projektantowi, aby był piękny. To, czego szukam, to sugestie, najlepsze praktyki, polecana literatura, aby ułatwić i oddzielić (łatwe do połączenia) dla obu części. Dużo googlowałem, więc to, czego chcę, to twoja osobista opinia, doświadczenie na ten temat. 1 - Back-endem będzie Java. 2 - Poza back-endem, którego nie wybrałem (opinie ???) na temat tego, co jest najlepsze (JSF, tylko HTML (REST)) dla frontendu Każda pomoc i wgląd są bardzo mile widziane Z góry dziękuję


title: Gdzie znajdę współpracowników do projektów hobbystycznych

text: Jestem jedną z tych osób, które uczą się przez działanie i często poza pracą wpadam na nowy pomysł na projekt, który może być zabawny, a później być może opłacalny. Mam sporo pomysłów, ale zazwyczaj się wypalam, często dlatego, że jestem sama przy projektach. Większość moich kolegów ma dzieci lub nie chce wykorzystywać wolnego czasu na hobbystyczne projekty. Dlatego często trudno jest znaleźć inne osoby, z którymi mógłbym pracować przy moich hobbystycznych projektach. Moje pytanie brzmi zatem, czy jest dobre miejsce na znalezienie współtwórców dla małych projektów non-open source?


title: Klasa z dodatkowym polem

text: Powiedzmy, że mam klasę zwierząt... z polami zawierającymi imię, wzrost i wagę. Chcę stworzyć klasę ptaka, który jest zwierzęciem, ale ma też, powiedzmy, rozmiar skrzydła. Jak mogę to zrobić? Moim ogólnym pomysłem jest stworzenie klasy zwierząt i klasy ptaków, która dziedziczy zwierzę i ma dodatkowe pole ... ale wtedy różne rodzaje ptaków odziedziczą tę klasę. **Moje pytania:** * Czy moje rozwiązanie jest odpowiednim podejściem OO do tego typu problemu? * Czy istnieje znany wzorzec projektowy do obsługi problemów modelowania danych tego typu?


title: widoczność:ukryta widoczność vs:zwiń

text: W CSS, jaka jest różnica między widocznością:ukrytą a widocznością:zwiń W W3Schools są one podawane jako oddzielne, ale nie widzę różnicy w ich danych wyjściowych. Próbowałem go w Google Crome.


title: Czy klasy, wyliczenia i inne byty powinny być umieszczane w osobnych plikach?

text: Kierownik zespołu\architekt mojej firmy twierdzi, że projekt na dużą skalę jest łatwiejszy do zrozumienia, jeśli „jednostki połączone logiką” są umieszczone w jednym pliku .cs. Cytuję: * "Cała struktura logiki i interfejs i klasa widać w jednym miejscu, jest to argument, którego nie można obalić. Aby zobaczyć to samo, ale z mnóstwem plików trzeba użyć narzędzia, diagram klas, R# do nawigacji itp." * „Podążając za kiepską teorią mógłbym krzyczeć, że armia rozdzielonych plików jest fajna, ale jeśli chodzi o wprowadzanie zmian w istniejącym kodzie, szczególnie jeśli nie byłeś autorem tego kodu, bardzo trudno jest zrozumieć wiele rozproszonych plików Tak więc na forach można napisać, że „jeden wyliczenie-jeden plik”, ale w praktyce takie podejście nigdy nie powinno być stosowane „*”... Jeśli chodzi o rozdzielenie bazy kodu między programistami, w dzisiejszych czasach nie ma problemu edytować jednocześnie ten sam plik. Scalanie nie stanowi problemu." Wiele razy słyszałem i czytałem, że musimy utworzyć jeden plik .cs na enum, klasę i tak dalej, i to jest najlepsza praktyka. Ale nie mogę go przekonać. Mówi, że nie ufa żadnym znanym programistom, takim jak Jon Skeet. Nawiasem mówiąc, oto opinia Skeeta na ten temat: Gdzie jest najlepsze miejsce do zlokalizowania typów wyliczeń? Co myślisz? Czy istnieje prawdziwy problem? A może jest to kwestia gustu i powinna być regulowana przez standard kodowania organizacji?


title: Podstawowa przesłanka dotycząca sortowania zliczającego. Jaki jest związek k z Big Oh?

text: Czytam (Cormen) o sortowaniu liczenia. Rozumiem strukturę algorytmu, ale stwierdzenie: > W praktyce zwykle używamy sortowania liczącego, gdy mamy k = O(n), > w którym to przypadku czas wykonania to Theta(n). Nie jest dla mnie jasne. k to po prostu zakres liczb całkowitych oczekiwanych na wejściu. Dlaczego notacja asymptotyczna jest używana w tym zdaniu dla k? Nie rozumiem.


title: Jak ustrukturyzować testy jednostkowe dla wielu obiektów, które wykazują to samo zachowanie?

text: W wielu przypadkach mogę mieć istniejącą klasę z pewnym zachowaniem: class Lion { public void Eat(Herbivore herbivore) { ... } } ...i mam test jednostkowy... [TestMethod] public void Lion_can_eat_herbivore( ) { var herbivore = buildHerbivoreForEating(); var test = BuildLionForTest(); test.Jedz (roślinnożerne); Assert.IsEaten(roślinnożerne); } Teraz muszę stworzyć klasę Tygrysa z zachowaniem identycznym z klasą Lwa: class Tiger { public void Eat(Herbivore herbivore) { ... } } ...a ponieważ chcę tego samego zachowania, chcę muszę uruchomić ten sam test, robię coś takiego: interface IHerbivoreEater { void Eat(Herbivore herbivore); } ...i refaktoryzuję test: [TestMethod] public void Lion_can_eat_herbivore() { IHerbivoreEater_can_eat_herbivore(BuildLionForTest); } public void IHerbivoreEater_can_eat_herbivore(Func<IHerbivoreEater> budowniczy) { var herbivore = buildHerbivoreForEating(); var test = builder(); test.Jedz (roślinnożerne); Assert.IsEaten(roślinnożerne); } ...a następnie dodaję kolejny test dla mojej nowej klasy `Tiger`: [TestMethod] public void Tiger_can_eat_herbivore() { IHerbivoreEater_can_eat_herbivore(BuildTigerForTest); } ...a potem refaktoryzuj moje klasy `Lion` i `Tiger` (zwykle przez dziedziczenie, ale czasami przez skład): class Lion : HerbivoreEater { } class Tiger : HerbivoreEater { } abstract class HerbivoreEater : IHerbivoreEater { public void Eat( Roślinożerne roślinożerne) { ... } } ...i wszystko w porządku. Jednakże, ponieważ funkcjonalność jest teraz w klasie `HerbivoreEater`, wydaje się, że jest coś nie tak z testowaniem każdego z tych zachowań na każdej podklasie. Jednak to właśnie podklasy są faktycznie zużywane, a jedynie szczegółem implementacji jest to, że dzielą one nakładające się zachowania (na przykład „Lwy” i „Tygrysy” mogą mieć zupełnie inne zastosowania końcowe). Wielokrotne testowanie tego samego kodu wydaje się zbędne, ale zdarzają się przypadki, w których podklasa może i zastępuje funkcjonalność klasy bazowej (tak, może to naruszać LSP, ale spójrzmy prawdzie w oczy, `IHerbivoreEater` jest tylko wygodnym testowaniem interfejs - może to nie mieć znaczenia dla użytkownika końcowego). Myślę, że te testy mają pewną wartość. Co robią inni ludzie w tej sytuacji? Czy po prostu przenosisz swój test do klasy bazowej, czy testujesz wszystkie podklasy pod kątem oczekiwanego zachowania? **EDYTUJ** : W oparciu o odpowiedź z @pdr myślę, że powinniśmy rozważyć to: `IHerbivoreEater` jest tylko kontraktem podpisu metody; nie określa zachowania. Na przykład: [TestMethod] public void Tiger_eats_herbivore_haunches_first() { IHerbivoreEater_eats_herbivore_haunches_first(BuildTigerForTest); } [TestMethod] public void Cheetah_eats_herbivore_haunches_first() { IHerbivoreEater_eats_herbivore_haunches_first(BuildCheetahForTest); } [TestMethod] public void Lion_eats_herbivore_head_first() { IHerbivoreEater_eats_herbivore_head_first(BuildLionForTest); }


title: Czy Scrum może używać specyfikacji technicznych w Backlogu Produktu zamiast historyjek użytkownika?

text: W firmie, w której aktualnie pracuję, zaczęliśmy realizować projekty Scrum. Nie było tak trudno przekonać managerów do przejścia z wodospadu na Scrum. Robimy projekt, w którym przebudowujemy naszą platformę od podstaw. Tak więc (większość) funkcjonalności jest znana, a większość ulepszeń ma raczej charakter techniczny. W tym przypadku uzasadnione byłoby posiadanie zadań technicznych, a nie historyjek użytkownika. Nasz backlog zawiera wszelkiego rodzaju zadania techniczne, takie jak: * Przepisanie klasy DB z MySQL na PostgreSQL. * Zaimplementuj rejestrowanie systemu. * Przepisz pamięć podręczną obiektów. Rzeczy, które pojawiają się podczas stand-upów, to to, że długie „zadania badawcze” są pożądane, ale nigdy nie są wykonywane. Ponadto członkowie zespołu twierdzą w połowie sprintu, że należy dodać nieplanowane zadania. Jak powinien sobie z tym poradzić Scrum Master? Czy to możliwe, że dla tego rodzaju projektu Scrum NIE jest drogą do zrobienia?


title: Najlepsze praktyki dotyczące buforowania zapytań wyszukiwania

text: Próbuję poprawić wydajność mojego ASP.net Web Api, dodając pamięć podręczną danych, ale nie jestem pewien, jak dokładnie to zrobić, ponieważ wydaje się, że jest to bardziej złożone niż większość scenariuszy buforowania. Przykładem jest to, że mam tabelę Lokalizacji i interfejs API do pobierania lokalizacji za pomocą wyszukiwania w celu autouzupełniania. /api/location/Londo i zapytanie będzie wyglądało jak SELECT * FROM Locations WHERE Nazwa taka jak 'Londo%' Te lokalizacje zmieniają się bardzo rzadko, więc chciałbym je buforować, aby zapobiec podróżom do bazy danych bez rzeczywistego powodu i poprawić odpowiedź czas. Patrząc na opcje buforowania używam systemu Windows Azure Appfabric, problem polega na tym, że to tylko pamięć podręczna klucz/wartość. Ponieważ mogę odzyskać przedmioty tylko na podstawie kluczy, nie mogłem ich użyć w tym scenariuszu, o ile mi wiadomo. Czy to, co próbuję zrobić, jest złym wykorzystaniem systemu pamięci podręcznej? Czy powinienem zajrzeć do bazy danych NoSql, która mogłaby działać jako pamięć podręczna, aby coś takiego poprawić, aby poprawić wydajność? Czy powinienem buforować całą tabelę/kolekcję w jednym kluczu z określoną strukturą danych, która może pomóc w wyszukiwaniu, a następnie przeprowadzić wyszukiwanie po pobraniu danych?


title: Czy ktoś robi testy sprzętowe dotyczące kompilacji kodu?

text: Widziałem wiele witryn, które testują nowy sprzęt pod kątem wydajności w grach, zip niektórych plików, kodowania filmu lub cokolwiek innego. Czy są jakieś, które testują wpływ nowego sprzętu (takiego jak dyski SSD, nowe procesory, prędkości pamięci RAM lub cokolwiek innego) na prędkości kompilacji i łącza, zarówno w systemie Linux, jak i Windows? Byłoby naprawdę dobrze dowiedzieć się, co jest najważniejsze dla szybkości kompilacji i móc się na tym skupić, zamiast po prostu ekstrapolować z innych testów.


title: Ustawianie zmiennych $_POST jako sposobu przekazywania danych / Nieprzekazywanie parametrów w funkcjach

text: Mam starszą aplikację internetową PHP, w której prawie każda funkcja tworzy odniesienia do zmiennych $_POST - pobierając ich wartości ORAZ **ustawiając je (lub ustawiając nowe zmienne POST)** jako środek komunikacji z kodem wywołującym lub inne funkcje. np: function addevent() { ... $add_minutes=$_POST['minuty']; ... $_POST['event_price']=''; ... } Myślałem, że najprostszym podejściem byłoby przekazanie funkcji wszystkich potrzebnych jej wartości i zwrócenie wszystkiego, co generują. Jako programista starej szkoły, choć teraz trochę nie w kontakcie, uważam tę strukturę za groteskowo niepokojącą - w której dane są przekazywane arbitralnie w różne miejsca. Co myślą inni? Czy powyższe podejście jest obecnie do przyjęcia? * * * Edytuj 1 Jeden prawdopodobnie prawdziwy przypadek użycia jest następujący. Jest to funkcja, która obsługuje tagi embed lub przesłany plik. function brandEvent($edit_id='') { ... switch($_POST['upload_or_embed']) { case 'embed': ... // używa $_POST['embed_video_code'] ... break; case 'upload': ... // używa RÓŻNYCH zmiennych POST ... } } Czy to rozsądna struktura kodu?


title: Kiedy oznaczyć historyjkę użytkownika jako wykonaną w scrum?

text: W Scrumie istnieje pojęcie, które kładzie nacisk na **dostarczenie wykonalnych jednostek** na koniec każdego sprintu. Każda działająca jednostka mapuje również bezpośrednio lub pośrednio do historyjek użytkownika, a kiedy w nowym sprincie PO wprowadza nowe PBI (nowe historyjki użytkownika), oznacza to, że praktycznie zespół nie zawsze może wrócić do poprzednich historyjek użytkownika, aby wykonać resztę pracy, co z kolei oznacza, że kiedy wdrażasz historyjkę użytkownika, powinieneś zrobić to tak kompletnie, jak jest to znane zespołowi w tym czasie, i nie powinieneś niczego zapomnieć (coś w stylu „przepraszam, zapomniałem zaimplementować walidacja dla tej kontrolki wejściowej” lub „Nie wiedziałem, że sprawdzanie w różnych przeglądarkach jest częścią historii użytkownika”). Z drugiej strony, po każdej historyjce użytkownika pojawia się test, kompatybilność wsteczna, kryteria akceptacji, wdrażanie i coraz więcej koncepcji. Kiedy więc członkowie zespołu mogą wiedzieć, że historyjka użytkownika jest **całkowicie** przygotowana, nie tylko na potrzeby demonstracji, i rozpocząć nową?


title: Nauka C, C++ i C#

text: Jestem pewien, że jesteście zmęczeni tym pytaniem, ale po przedzieraniu się przez wiele godzin podobnych postów i pytań naprawdę nie poczyniłem żadnego postępu w zakresie moich konkretnych obaw. Miałem nadzieję, że rzucicie trochę światła na kilka moich pytań, zanim zdecyduję się na kierunek działania. TŁO: Chcę zapisać się do jakiegoś programu, aby nauczyć się języka programowania / zdobyć certyfikat / stopień do pracy w terenie. Zawsze byłem zainteresowany, kupiłem książkę o VB w liceum i parałem się. Teraz po wielkiej przerwie chcę być poważny. Pytanie 1: Czytałem, że uczenie się najpierw C, a następnie C++ lub C# przynosi efekt przeciwny do zamierzonego, ponieważ rozwijasz złe nawyki. Na wielu kursach uniwersyteckich, które oglądałem, nauka C/C++ jest obowiązkowa, aby przejść dalej. Czy powinienem zawracać sobie głowę nauką C? W związku z tym naprawdę nie rozumiem różnicy między C i C++ lub C# w tej sprawie poza tym, że zawiera .NET (który, jak rozumiem, jest kompilacją narzędzi i bibliotek, które ułatwiają i przyspieszają programowanie). Pytanie 2: Gdzie nauczyliście się programować? Gdzie polecasz? Czy można wylądować w programowaniu stanowisk będąc samoukiem? Czy moja największa szansa to technika ITT czy zwykła uczelnia? Zamierzałem zapisać się do JC i odejść stamtąd, ale nie mogę zdecydować, co robić. OSTATNIE pytanie :) Słyszałem, że C++ jest "portowany" do .NET. Prawdziwe? A jeśli tak, czy to sprawi, że C++ stanie się solidnym, pożądanym językiem do nauki? Dzięki za opiekę. :)


title: Czy nauka korzystania z C (lub C++) jest wymogiem, aby być dobrym (doskonałym) programistą?

text: Kiedy zacząłem uczyć się programowania, _prawdziwi_ programiści mogli pisać asembler we śnie. Każda poważna nauka informatyki obejmowałaby sporą część szkolenia i praktyki w programowaniu przy użyciu asemblera. Od tego czasu to się zmieniło, do tego stopnia, że widzę, że stopnie z informatyki z asemblerem, jeśli w ogóle są uwzględnione, są spychane do jednego zadania i jednego rozdziału, co daje w sumie dwa tygodnie pracy z 4 lat nauki. Wydaje się, że programowanie w C/C++ podążało podobną ścieżką. Nie dziwi mnie już przeprowadzanie wywiadów z absolwentami uniwersytetów, którzy nie spędzili więcej niż dwa tygodnie na programowaniu w C++, a czytali o C tylko w jakiejś książce. Podczas gdy najpoważniejsze stopnie CS nadal wydają się obejmować znaczną ilość czasu na naukę i używanie jednego lub obu języków, trend wyraźnie zmierza w kierunku mniej narzuconego C/C++ w szkole. Wyraźnie można zrobić karierę produkującą dobrą pracę bez czytania lub pisania nawet jednej linii kodu C lub C++. Biorąc to wszystko pod uwagę, czy nauka dwóch języków jest warta wysiłku? Czy w ogóle muszą się wyróżniać? (poza oczywistymi, niespecyficznymi poradami, takimi jak „dobry wybór języków jest prawdopodobnie ważny dla kompleksowej edukacji” i „prawdopodobnie dobrym pomysłem jest ciągłe próbowanie i uczenie się nowych języków przez całą karierę programisty, po prostu rozciągnąć szare komórki")


title: Czy można przetrwać w branży IT bez znajomości C i C++?

text: Jestem tylko absolwentem Indii i posiadam wiedzę z zakresu Java, JSP i Servlets, tworzenia aplikacji na Androida oraz niektórych programów na iOS. Nie mam tła w C lub C++ i trochę słabego tła w strukturach danych i algorytmach. Chcę wiedzieć, czy mogę zrobić udaną karierę w branży IT bez znajomości C lub C++, ale z silną znajomością Javy i Pythona (o czym myślę o nauce w następnej kolejności). Jeśli chodzi o część Struktury danych i algorytmy, planuję przestudiować je ponownie z implementacją w Javie, ponieważ nie znam biegle C ani C++. Czy mogę się rozwijać w przyszłości, jeśli znam Struktury Danych przez Javę?


title: Jenkins do automatyzacji wdrażania aplikacji ASP.NET

text: Czy istnieje możliwość zautomatyzowania/półautomatycznego wdrażania aplikacji internetowych ASP.NET przy użyciu Jenkins? Może znajdować się w kontrolowanych lub niekontrolowanych środowiskach, ponieważ niekontrolowany użytkownik musi wprowadzić identyfikator użytkownika i hasło. Szukam sposobów kopiowania plików z miejsca docelowego do miejsca docelowego i uruchamiania skryptów sql w scenariuszu farmy sieci Web. **Edytuj** Obecnie używamy plików bat do xcopy/configure puli aplikacji/cmd sql itp. w celu wdrożenia aplikacji. Ale aby to zadziałało, zespół wsparcia produkcyjnego musi pobrać kod źródłowy, skompilować projekt i uruchomić pliki bat w celu wdrożenia aplikacji. Teraz chcemy zautomatyzować wdrożenie bez pobierania kodu źródłowego przez użytkownika, a użytkownik końcowy musi tylko odwiedzić adres URL i wypełnić parametry identyfikatora użytkownika i hasła oraz wybrać tag svn i powinien zostać wdrożony. Ale Jenkins działa z anonimowym logowaniem, więc istniejący plik bat nie będzie działał, ponieważ nie ma uprawnień do uruchamiania skryptu. Chciałbym więc wiedzieć, czy istnieją jakieś alternatywy dla takiej sytuacji. Będzie dobrze, jeśli kontekst użytkownika zostanie podszyty za pomocą wprowadzonego identyfikatora użytkownika i hasła, co pozwoli na uruchomienie istniejącego pliku wsadowego bez dalszych zmian. Jeśli nie jest to możliwe, chcielibyśmy również zbadać inne pomysły, ale nie mamy elastyczności w wyborze zautomatyzowanego narzędzia, takiego jak marionetka itp., powinniśmy pozostać przy tych plikach wsadowych.


title: Niestandardowe alfabetyczne sortowanie tablicy w Javie

text: Mam wymóg, aby odczytać plik tekstowy z liniami w formacie tag=wartość, a następnie wyprowadzić plik z określonymi tagami wymienionymi jako pierwszymi, a reszta posortowana alfabetycznie. Przychodzący plik jest sortowany losowo z wyjątkiem pierwszego wiersza. Wyjście wymaga, aby pierwsze dwie linie były zawsze takie same. Na przykład, biorąc pod uwagę następujące tagi: NAZWA WIEK SSN STAN NAJWIĘKSZA NR_ZALEŻNIKÓW Na wejściu zawsze najpierw będzie NAZWA, a pozostałe tagi (są ich dosłownie setki) będą posortowane losowo. Wynik musi mieć najpierw numer SSN, a na drugim IMIĘ, a resztę posortować alfabetycznie, więc otrzymałbym: SSN NAZWA WIEK STATUS OBECNY NO_OF_DEPENDENTS Uwaga: To tylko przykładowe znaczniki. Właściwy plik zawiera 13 pól, które należy wypisać jako pierwsze, a pozostałe kilkaset w kolejności alfabetycznej. Próbuję znaleźć najlepszy sposób na sortowanie. W tej chwili planuję odczytać wiersze w przychodzącym pliku i połączyć je w dwa obiekty List. Pierwszy będzie zawierał konkretne tagi, które należy umieścić jako pierwszy, a drugi będzie zawierał wszystko inne. Następnie posortuję drugą listę i połączę ją z pierwszą listą. Wydaje się to skomplikowane i czuję, że brakuje mi prostszego lub bardziej eleganckiego podejścia.


title: Jakie są dobre narzędzia do zarządzania dziennikiem kodowania/zarządzania kodowaniem online?

text: Szukam internetowego, bezpłatnego narzędzia do zarządzania kodowaniem, w którym mógłbym rejestrować mój proces kodowania, na przykład błędy do naprawienia i zostały naprawione. Jakie są dobre rekomendacje?


title: Gdzie powinienem umieścić moją metodę

text: Piszę program Java przy użyciu wzorca projektowego MVC. Mam klasy `Przedmiot` i `Dostawca`. W bazie danych są one połączone poprzez tabelę `item_supplier`. Piszę metodę, która da mi wszystkich dostawców dla konkretnego elementu (używając itemID): `public ArrayList<Supplier> getItemSuppliers(int itemID)` Mam też warstwę DB i mam `DBItem` i `DBSupplier` . Gdzie powinna iść ta metoda? Użyję go tylko (głównie) na moim `ItemUI`, więc myślę o `DBItem` jako właściwym miejscu. \-- Zwykle gdy mamy wzorzec SalesLineItem (Sales * - 1 SalesLineItem 1 - * Item) mamy osobną klasę, ale w takim przypadku potrzebuję takiej jak moja jedyna interakcja z tą tabelą (`item_supplier`) będzie z tą metodą drukowania (i jednej aktualizacji)? Zasadniczo, czy muszę wykonać klasę warstwy modelu `ItemSupplier` i odpowiednio `DBItemSupplier`, czy mogę po prostu mieć te dwie metody `getItemSuppliers` i `updateItemSuppliers` na `DBItem` lub `DBSupplier` (a jeśli ta druga, gdzie ?)


title: Czy SRP (Zasada Jednolitej Odpowiedzialności) jest obiektywna?

text: Rozważ dwóch projektantów interfejsu użytkownika, którzy chcą zaprojektować „atrakcyjne dla użytkownika” projekty. „Przyciąganie użytkownika” to koncepcja, która nie jest obiektywna i tkwi jedynie w umyśle projektantów. W ten sposób projektant A może na przykład wybrać kolor czerwony, podczas gdy projektant B wybierze kolor niebieski. Projektant A tworzy układ, który jest zupełnie inny niż projektant B i tak dalej. Czytałem o SRP (Single Responsibility Principle) i to, co zrozumiałem, było rodzajem subiektywnej analizy lub podziału odpowiedzialności, która może się różnić między projektantem OO a innym projektantem OO. Czy mam rację? Innymi słowy, czy możliwe jest posiadanie dwóch doskonałych analizatorów zorientowanych obiektowo i projektantów, którzy wymyślą dwa różne projekty dla jednego systemu opartego na zasadzie SRP?


title: Jak mogę wybrać, czego użyć do napisania mojej następnej usługi internetowej w C#?

text: Mam zamiar napisać kilka serwisów internetowych od podstaw i jestem trochę zdezorientowany podejściem, jakie należy przyjąć. Oczywistymi wyborami były WCF i MVC 4 Web API, ale mam trudności z podjęciem decyzji. Dwa ważne czynniki to uczynienie go samoopisującym się (np. MEX itp.) i łatwym do spożycia (może RESTful?). Staram się wybrać, który z nich odrzucić na rzecz drugiego. Tak jak to się dzieje, coraz więcej słyszę o REST, więc prawdopodobnie powinienem iść w tym kierunku, ale najwyraźniej jest to również możliwe do zaimplementowania za pomocą WCF. Jestem rozdarty, jak najlepiej postępować, i nie ma zbyt wielu informacji, które mówią „Och, w dzisiejszych czasach programiści zawsze używają X, ponieważ Y”, więc trudno jest ocenić zalety każdego z nich i jak łatwo te zalety są do wdrożenia.


title: Czy darowizny liczą się jako „użytek komercyjny”?

text: Powiedzmy, że buduję społeczność, która korzysta z jakiejś aplikacji internetowej. Ta aplikacja internetowa wykorzystuje zmodyfikowaną wersję motywu na licencji GPLv2. Dodatkowo społeczność korzysta z mechanizmu darowizn, aby się sfinansować. Koszty ogólne darowizn zostaną zwrócone społeczności w jakiejś formie, więc nie ma za tym żadnego celu komercyjnego. Pytania: 1. Czy muszę opublikować zmodyfikowaną wersję motywu, jeśli tylko go używam? 2. Czy jest to „użytek komercyjny” w rozumieniu GPL? (Nie jestem pewien, czy to właściwa strona SE)


title: Korzystanie z mikroframeworków lub rozwijanie własnego

text: Bardzo podoba mi się mikroframework w Pythonie o nazwie Flask. Używam go przez ostatnie 2 miesiące i uważam go za doskonały. Teraz chciałbym go użyć we wdrożeniu, ale obawiam się kilku rzeczy. Po pierwsze, mimo że jest to mikroframework, zależy od Werkzeug (właściwości typu framework WSGI), co w przypadku napotkania problemu utrudnia debugowanie. Po drugie, nie jest bardzo popularny, co oznacza, że trudno byłoby uzyskać wsparcie. Myślałem więc, że mógłbym rzucić swój własny mikroframework w Pythonie, który nie ma wszystkich funkcji Flask, ale tylko te, których potrzebuję, i wiedziałbym o tym na wskroś i mógłbym rozwiązać wszelkie problemy, które mógłbym spotkanie, szacuję, że zajmie to 1000-2000 linii, a dla mnie około 2-3 tygodni, a prawdopodobnie dużo mniej z zespołem 2. Co proponujecie?


title: Programowanie z dysleksją

text: Mam bardzo ciężką Dysleksję wraz z Dysnomią i Dysgrafią. Wiem o tym od dziecka. Moje umiejętności czytania i pisania są dość kiepskie, ale nauczyłem się sobie z tym radzić. Jednak w dzisiejszych środowiskach IDE bardzo łatwo jest mi się skoncentrować i pozostać w strefie podczas programowania. Ale kiedy piszę tekst (jak ten post), znacznie trudniej jest mi się skupić. Ogólnie rzecz biorąc, czy osoby z dysleksją łatwiej czytają i piszą kod w porównaniu z ogólnym czytaniem i pisaniem? Jakich sztuczek i narzędzi używają osoby z dysleksją, aby pomóc im opanować programowanie lepiej niż normalne czytanie i pisanie?


title: Pętla gry na Androida w osobnym wątku

text: Mam zamiar przenieść grę, która została pierwotnie napisana na iOS i mam pewne wątpliwości, jak pewne rzeczy należy zrobić. Szukałem wielu przykładów pętli gry dla Androida i prawie wszędzie pętla gry jest zaprojektowana do uruchamiania w osobnym wątku, a nie w głównym wątku interfejsu użytkownika, co wydaje mi się w porządku i logiczne. Jednak moja scena gry jest kombinacją grafiki OpenGL i standardowych widoków Androida (przyciski, etykiety itp.) i z założenia podstawowa logika gry i rysowanie OpenGL byłyby wykonane w osobnym wątku, a reszta standardowych rzeczy byłaby wykonana w głównym wątku interfejsu użytkownika. W wielu sytuacjach będę musiał wywoływać funkcje, które powinny działać w wątku gry z głównego wątku interfejsu użytkownika i odwrotnie. Jako bardzo prosty, prosty przykład, gdy użytkownik wykonuje dotyk (który jest wykrywany w wątku interfejsu użytkownika), zdarzenie powinno być propagowane i przetwarzane przez wątek gry. Czy znasz jakieś dobre mechanizmy lub wzorce, jak takie wzajemne oddziaływanie wątku? Czy istnieje prostsze rozwiązanie pętli gry, być może przez nie uruchamianie pętli w osobnym wątku?


title: W jaki sposób mogę przyspieszyć czas tworzenia aplikacji?

text: Zauważyłem, że z biegiem czasu krzywa uczenia się przesuwa się z próby nauczenia się języka lub technologii (tak jak to działa) do tego, jak tworzyć aplikacje szybciej i z mniejszą ilością kodu. Bardzo mnie interesuje, jak inni programiści skrócili czas potrzebny na wprowadzenie aplikacji na rynek. Wiem na pewno, że ucząc się tylko jednej rzeczy, możesz zaoszczędzić mnóstwo czasu. Na przykład zacząłem uczyć się wyrażeń lambda i kodu, który normalnie zajmował 3 linie, teraz zajmuje tylko 1 i jest znacznie szybszy do pisania. Innym kątem są skróty i narzędzia w samym IDE. Na przykład nie mogę uwierzyć, że nie wiedziałem, jak usunąć nieużywane instrukcje using z mojego kodu źródłowego, więc robiłem to ręcznie, dopóki nie dowiedziałem się, że w VS jest narzędzie do ich usuwania. Czy są jakieś zasoby do nauki szybszych sposobów tworzenia aplikacji? Skróty klawiaturowe, narzędzia, programy, referencje? Czy jest jakiś punkt odniesienia, w którym można się tego nauczyć? Jeśli nie, czy możesz podzielić się tym, jak nauczyłeś się niektórych z tych wskazówek? **UWAGA:** To pytanie dotyczy .NET, C# i IDE programu Visual Studio


title: W jaki sposób kod JavaScript staje się asynchroniczny podczas korzystania z wywołań zwrotnych?

text: Dużo czytałem online, próbując dowiedzieć się, jak napisać asynchroniczny kod JavaScript. Jedną z technik często pojawiających się w moich badaniach jest użycie wywołań zwrotnych. Chociaż rozumiem proces pisania i wykonywania funkcji zwrotnej, jestem zdezorientowany, dlaczego wywołania zwrotne wydają się automagicznie powodować asynchroniczne wykonywanie JavaScriptu. Tak więc moje pytanie brzmi: w jaki sposób dodanie funkcji zwrotnych do mojego kodu JavaScript powoduje, że wspomniany kod jest automagicznie asynchroniczny?


title: Metoda fabryczna: czy Produkt musi być innej klasy niż Twórca?

text: Chcę zbudować trzy witryny w PHP. Robię to tak wolno, przemyślanie i ostrożnie, jak tylko mogę, aby dowiedzieć się jak najwięcej o takich rzeczach jak OOP i architektura oprogramowania. Z dotychczasowych doświadczeń wiem, że nadejdzie czas, kiedy będę zadowolony z możliwości logowania. Prawdopodobnie chcę mieć różne typy logów, przez co mam na myśli to, że w pliku `.ini` chcę mieć możliwość określenia, czy logowanie powinno trafiać do pliku tekstowego (być może pliku rozdzielanego tabulatorami lub pliku CSV), a tabela bazy danych lub sygnały dymne. Miałbym (powiedzmy) klasę Logger, która definiowałaby na przykład metodę AddEntry(). Dla każdego typu dziennika utworzyłbym podklasę, która umie odpowiednio zalogować się do pliku CSV, zapisać do bazy danych lub rozpalić ogień. Ponieważ wiem, że będę chciał mieć instancję podklasy, ale do czasu uruchomienia nie będę wiedział, którą podklasę utworzyć, pomyślałem, że użyję wzorca Factory Method. Jednakże, kiedy patrzę na artykuł w Wikipedii, zauważam, że `Creator` i `ConcreteCreator` mają inny typ niż `Product`, jeśli poprawnie czytam UML. Moje pytanie sprowadza się do tego: chcę, aby metoda fabryki była statyczną metodą samej klasy bazowej Logger. Jeśli to zrobię, czy zastawiam się na pułapkę, której jeszcze nie widzę? Czy istnieje powód, dla którego „Creator” i „ConcreteCreator” miałyby być innego typu niż „Produkt”?


title: Jaka jest różnica między usterką, błędem i defektem?

text: > **Możliwy duplikat:** > Różnica między defektem a błędem w testowaniu Jaka jest różnica między błędem, błędem i defektem w pisaniu technicznym informatyki, zwłaszcza w inżynierii oprogramowania? Chcę zacytować odpowiedź Daniela Josepha na temat Stack OverFlow: > Cytując Body of Knowledge > Inżynierii Oprogramowania > > Zazwyczaj, gdy używane jest słowo „defekt”, odnosi się ono do „usterki” zdefiniowanej > poniżej. Jednak różne kultury i standardy mogą używać nieco > różnych znaczeń tych terminów, co doprowadziło do prób > ich zdefiniowania. Częściowe definicje zaczerpnięte ze standardu (IEEE610.12-90) to: > > Błąd: „Różnica… między obliczonym wynikiem a poprawnym wynikiem” > > Błąd: „Nieprawidłowa definicja kroku, procesu lub danych w komputerze > program ” > > Porażka: „[nieprawidłowy] skutek błędu” > > Błąd: „Ludzkie działanie, które prowadzi do nieprawidłowego wyniku” W oparciu o moje rozumienie powyższej definicji, błąd jest wynikiem błędu, tj. niepowodzenia. Czy ktoś mógłby wyjaśnić jaśniej?


title: Różnica między błędem, defektem a wadą

text: Czytałem "Software Security: Building Security In" iw pierwszym rozdziale spotkałem się z 3 pojęciami: błąd, wada i wada. Autor podał definicję każdego z nich, ale nie mogłem ich do końca zrozumieć. Czy ktoś może podać kilka przykładów dla każdego terminu? Co to jest wada, a co to wada? Myślę, że wiem, co to jest błąd, błąd to awaria części systemu, która powoduje niepożądane skutki, czy to awaria na niewłaściwym wejściu, czy błędna kalkulacja serii obliczeń. Czy ktoś może omówić więcej i poprawić mnie, jeśli się w tym mylę? **AKTUALIZACJA** Dokładniej w książce, o której wspomniałem wyżej, są one (słowa) przedstawione w sposób wyróżniający, dlatego proszę o więcej informacji. W tej książce znajduje się kilka przykładów wskazujących, która próbka należy do jakiej i do jakiej kategorii. Na przykład: Przepełnienie bufora jest uważane za błąd, a problemy z nadpisywaniem metod (problemy z podklasami) są powiązane z kategorią błędów. Ponownie problemy z obsługą warunków wyścigu są uważane za błędy, a problemy z obsługą błędów (nieudane otwieranie) są uważane za wady! Chcę więcej omówienia tych kwestii.


title: Czy powiedziałbyś swojemu przełożonemu o zamiarze ubiegania się o możliwość rozwoju w innym miejscu?

text: Podoba mi się firma, w której obecnie pracuję jako programista .NET - high-tech, świetna atmosfera, wspaniali ludzie i wielka sprawa. Mam również dość elastyczności i odpowiedzialności, ponieważ staram się być na bieżąco z najnowszymi technologiami i wymyślać architekturę dla naszych aplikacji desktopowych, gdy musimy zaprojektować coś nowego, co jest rzadką okazją. Ogólnie jest to świetne miejsce, aczkolwiek z przeciętnym wynagrodzeniem. Minęły już prawie 4 lata, a pod względem wzrostu i wyzwań sytuacja ulega stagnacji. Obecnie mam dobrą perspektywę rozwoju z poprzednim pracodawcą, którego bawię i będę miał duże szanse przy wystarczającym wysiłku. Ale ani nie poprosiłem o awans, ani nie przedstawiłem dokładnie swoich ambicji zawodowych mojemu obecnemu menedżerowi. Więc jest to uczucie, że stawiam go w niekorzystnej sytuacji. Mój obecny menedżer jest zrównoważonym facetem, co sprawia, że myślę, że mogę przedyskutować z nim to wyzwanie. W końcu mógłby być dla mnie punktem odniesienia w przyszłości. Jestem też pewien, że można powiedzieć coś dobrego o uczciwości i profesjonalizmie oraz unikaniu korzystania z innej oferty w celu uzyskania awansu wewnętrznego. Chcę rozwijać się zawodowo, ale nie mogę sobie pozwolić na narażanie relacji lub podpalanie mostów. Czy porozmawiałbyś ze swoim menedżerem o zajmowaniu stanowiska w innym miejscu? Gdybym był menedżerem, z pewnością byłbym wdzięczny, gdyby jeden z moich pracowników podszedł do mnie, aby o tym porozmawiać. Gdyby był jednym z moich kluczowych facetów, z pewnością zrobiłbym to, co konieczne, aby go zatrzymać.


title: Kiedy należy wykonać kopię zapasową plików?

text: W naszej firmie nie korzystamy z kontroli źródeł, więc kopie zapasowe wykonujemy ręcznie. Mój nawyk jest taki: kopiuję tylko te skrypty, w których usunąłem fragmenty kodu, a te skrypty, w których dodałem tylko fragmenty kodu, których nie archiwizuję. Czy rozsądne jest tworzenie kopii zapasowych za każdym razem, gdy coś zmieniasz, czy są jakieś warunki do subwersji plików? A kiedy tworzymy kopię zapasową zmienionych plików, czy powinniśmy wykonać kopię zapasową tylko tego pliku, czy całego projektu?


Jakie czynniki należy wziąć pod uwagę przy ustalaniu ceny oprogramowania komputerowego?


title: random.choice w innych językach

text: Python ma fajną funkcję w standardowej bibliotece `random.choice`, która zwraca losowy element z sekwencji. Ale żaden z innych języków, w których opracowałem, nie zawierał takiej funkcji. Czy inne języki zapewniają taką funkcję? Dlaczego nie?


title: Zgodność z PCI, FDMS i TransArmor

text: Tak więc otrzymałem zadanie pracy nad projektem integracyjnym, w którym poprosimy klientów o dane karty kredytowej i prześlemy je do naszych partnerów integracyjnych, którzy przetworzą dane dotyczące płatności/cc i zrealizują resztę zamówienia. Tak więc jednym z zadań, aby stać się zgodnym z PCI. Jednak partner również chce uzyskać zgodność z PCI i powiedzieli, że w ramach tego procesu nie mogą akceptować informacji cc przez Internet z zewnętrznego źródła. Ale potem czytałem o tym i dowiedziałem się, że istnieje sposób, aby zostać TPA (akcepterem stron trzecich), który może pozwolić na przekazanie karty kredytowej partnerowi. Słyszałem również słowo FDMS rzucone na pierwszym spotkaniu - niektóre badania doprowadziły mnie do wniosku, że oznacza to First Data Merchant Services. Odkryłem, że First Data jest procesorem handlowym, który faktycznie kontaktuje się z bankami wydającymi, aby sprawdzić karty kredytowe, a następnie odebrać płatność. Partner chce osiągnąć poziom zgodności z PCI, w którym nie przechowuje kart kredytowych, więc powiedział, że gdy weźmie karty kredytowe, wyśle je do FDMS za pomocą czegoś zwanego TransArmor, gdzie wysyłają informacje CC do FDMS i odsyłają token - i to jest to, czego używają, aby uzyskać dostęp do informacji CC. Zrobiłem swoje badania na ten temat i jest tam wiele informacji i nie mogę znaleźć jasnego i zwięzłego miejsca, w którym mógłbym o tym wszystkim przeczytać - więc mam kilka pytań na temat całego procesu: 1. Czy jest jedno miejsce, w którym mogę przeczytać, co dokładnie jest potrzebne, aby uzyskać zgodność z PCI? 2. Czy istnieją różne poziomy zgodności z PCI? 3. Gdzie dokładnie w tym wszystkim mieści się TPA? 4. Czy istnieje przykład działania TransArmor? Wiele załadowanych pytań, ale dzięki wszystkim!


title: Jak zarządzać swoją dokumentacją funkcjonalną?

text: Nasza dokumentacja funkcjonalna / biznesowa jest rozłożona w plikach Word w naszym firmowym intranecie. Trudno jest znaleźć i zaktualizować informacje. Musi być lepszy sposób. Jakieś pomysły? Pomyśleliśmy, że Wiki będzie działać świetnie. Wydawałoby się, że jest to łatwy sposób na znalezienie informacji, a dla indywidualnych programistów i analityków łatwe i szybkie dodawanie fragmentów dokumentacji. Bylibyśmy ciekawi, czy inne zespoły programistyczne (lub analizy biznesowe) z powodzeniem korzystają z Wiki. Celem tej dokumentacji jest wewnętrzny zespół programistów: programiści, qa oraz w mniejszym stopniu analitycy biznesowi.


title: Czy muszę wyczyścić/odbudować projekt przed debugowaniem/opublikowaniem go w programie Visual Studio?

text: To prawdopodobnie głupie pytanie, ale czy muszę wyczyścić/odbudować przed debugowaniem lub opublikowaniem projektu programu Visual Studio? Widzę, że inni programiści robią to cały czas iw pewnym momencie zacząłem to robić bez zastanowienia. Wydaje się, że nawykiem zawsze jest czyszczenie, czekanie, przebudowywanie, czekanie, publikowanie. Wiem, że nie zawsze to robiłem… Myślę, że zacząłem to robić po spędzeniu trochę czasu na debugowaniu błędu, tylko po to, by odkryć, że zniknął, gdy wyczyściłem i przebudowałem rozwiązanie. Miałem ten problem więcej niż raz, więc wiem, że to nie była jednorazowa sprawa, ale wydaje się, że to ogromna strata czasu, aby zawsze czyścić/przebudowywać swoje projekty.


title: Dlaczego coffeescript zamiast javascript?

text: Myślę, że w jakiś sposób budowanie języka, który kompiluje się do innego języka, wydaje się od samego początku złym pomysłem, zamiast uczyć się poprawnie javascript od samego początku. Zajrzyj do Douglas Crockfords Good Parts, a potem jesteś uzależniony. A javascript nie jest trudny – pisanie dobrego kodu jest trudne niezależnie od języka! Jeśli napiszesz gówniany kod w javascript, prawdopodobnie napiszesz gówniany kod w coffeescript lub lattescript lub jaki będzie smak dnia. A twierdzenie, że składnia coffeescriptu jest piękna, mija mnie. Lubię moje nawiasy klamrowe i składnię C - i wolałbym pracować w takim języku (przepraszam VB!). A więcej zabawek, języków i schematów do robienia tego samego od nowa nie wydaje mi się już postępem!


title: Jak radzić sobie z „zewnętrznymi” zależnościami w scrumie?

text: Jeśli zaplanowałeś wiele historyjek użytkownika do sprintu, a jedna historyjka kandydata jest zależna od tego, czy jakiś zewnętrzny dostawca dostarczy coś twojemu zespołowi. Na przykład dostawca usług online dodający nowe wywołanie API do swojego systemu lub włączający Twoje konto testowe w swoim systemie lub tym podobne. Wiesz, że to nadchodzi „wkrótce”. Czy idziesz dalej i dodajesz historię do sprintu, mając nadzieję, że dostarczą to, co jest wymagane na czas, abyś mógł ukończyć swoją historię ** czy ** czekasz do następnego sprintu, kiedy wiesz, że będzie gotowy i możesz zacznij natychmiast, nawet jeśli oznacza to nie rozpoczęcie historii tak wcześnie, jak to możliwe. Jeśli to pierwsze, jak radzisz sobie z „niezarobionymi” punktami historii utraconymi z powodu zależności? częściowy kredyt (eek!) lub weź go na brodę.