title: Kopiowanie (rozgałęzianie) projektu open source do własnego repozytorium

text: Obecnie używam projektu open source o nazwie CodeFirstMembership dla jednego z moich projektów. Jest krytyczny problem, który muszę ominąć, a im częściej go używam, tym więcej znajdę rzeczy, które muszę zmodyfikować. Jest to niezwykle przydatne, z wyjątkiem tego, że nie wygląda na to, aby programista miał dużo czasu na jego aktualizację (całkowicie fajnie, wszyscy tam byliśmy). Zastanawiam się nad etykietą i legalnością oraz ogólnymi odpowiedziami typu „hej, ukradłeś mój kod, szarpiesz”, które otrzymałbym, gdybym skopiował kod źródłowy, przeniósł go na github i stworzył własny widelec. Na Github robimy to cały czas, rozgałęziając projekty, ale CZUJE się to mniej chaotycznie, ponieważ istnieje połączenie z oryginałem. Czy jest coś nie tak ze mną, że to robię, legalne lub inne, skoro nie ma informacji o prawach autorskich ani licencji związanych z tą biblioteką?


title: czy można usunąć informacje o prawach autorskich z bezpłatnego API o otwartym kodzie źródłowym, nawet jeśli wyraźnie zabroniono Ci tego robić?

text: Zastanawiam się tylko, czy tekst taki jak poniższy, który pojawia się w plikach źródłowych darmowego API o otwartym kodzie źródłowym, oznacza cokolwiek w sądzie // Niniejszym udziela się bezpłatnego pozwolenia każdej osobie otrzymującej kopię // niniejsze oprogramowanie i powiązane pliki dokumentacji („Oprogramowanie”) do obsługi // Oprogramowania bez ograniczeń, w tym bez ograniczeń praw do // używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania podlicencji i/lub sprzedaży / // kopie Oprogramowania i zezwolić na to osobom, którym Oprogramowanie jest // dostarczone, pod następującymi warunkami: // // Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu będą dołączone do // wszystkich kopii lub części Oprogramowania. // // OPROGRAMOWANIE JEST DOSTARCZANE "TAK JAK JEST", BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB // DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, // PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU // AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ // ODPOWIEDZIALNOŚĆ, CZY NA TEMAT UMOWY, CZYNNEGO LUB INNEGO, WYNIKAJĄCEJ Z OPROGRAMOWANIA LUB Z NIEJ KORZYSTANIE LUB INNE OBROTY W // OPROGRAMOWANIU.


title: Dzielenie obrazu na wiele części w celu poprawy postrzeganej wydajności? Dobry czy zły?

text: Od czasu do czasu muszę pracować nad stroną internetową, która zawiera ogromne tło w rozmiarze i rozdzielczości (rozdzielczość 1920 x 1080, rozmiar ponad 2mb). Używałem preloaderów i działały bardzo dobrze, z wyjątkiem tego, że użytkownicy muszą trochę poczekać. Zauważyłem, że mapa google dzieli duży obraz na wiele kawałków. Zbadałem to i odkryłem, że faktycznie zwiększa postrzeganą wydajność. Czy to prawda?


title: Jaka jest różnica między tablicą a stosem?

text: Według Wikipedii stos: > jest abstrakcyjnym typem danych „ostatnie weszło, pierwsze wyszło” (LIFO) i liniową strukturą danych. Podczas gdy tablica: > jest strukturą danych składającą się ze zbioru elementów (wartości lub > zmiennych), z których każdy jest identyfikowany przez co najmniej jeden indeks lub klucz tablicy. O ile rozumiem, są dość podobne. Jakie są więc główne różnice? Jeśli nie są takie same, co może zrobić tablica, czego nie może stos i na odwrót?


title: Czy cierpię na nadużywanie enkapsulacji?

text: Zauważyłem coś w moim kodzie w różnych projektach, co wydaje mi się zapachem kodu i czymś złym do zrobienia, ale nie mogę sobie z tym poradzić. Próbując pisać "czysty kod", mam tendencję do nadużywania prywatnych metod, aby mój kod był łatwiejszy do odczytania. Problem polega na tym, że kod jest rzeczywiście czystszy, ale też trudniej go przetestować (tak, wiem, że mogę testować prywatne metody...) i ogólnie wydaje mi się to złym nawykiem. Oto przykład klasy, która odczytuje niektóre dane z pliku .csv i zwraca grupę klientów (kolejny obiekt z różnymi polami i atrybutami). public class GroupOfCustomersImporter { //... Pola wywołania .... public GroupOfCustomersImporter(String filePath) { this.filePath = filePath; klienci = nowy HashSet<Klient>(); utwórzCSVReader(); czytać(); konstrukcjaTTRP_Instance(); } private void createCSVReader() { //.... } private void read() { //.... Odczytuje plik i inicjuje atrybuty klasy } private void readFirstLine(String[] inputLine) { //... Metoda używana przez metodę read() } private void readSecondLine(String[] inputLine) { //.... Metoda używana przez metodę read() } private void readCustomerLine(String[] inputLine) { //... Metoda używana przez metodę read() } private void constructGroupOfCustomers() { //this.groupOfCustomers = new GroupOfCustomers(**atrybuty klasy**); } public GroupOfCustomers getConstructedGroupOfCustomers() { return this.GroupOfCustomers; } } Jak widać, klasa ma tylko konstruktor, który wywołuje pewne prywatne metody, aby wykonać zadanie, wiem, że to nie jest dobra praktyka, nie jest to ogólnie dobra praktyka, ale wolę hermetyzować wszystkie funkcje w klasie zamiast tworzyć metody public w takim przypadku klient powinien działać w ten sposób: GroupOfCustomersImporter importer = new GroupOfCustomersImporter(ścieżka pliku) importer.createCSVReader(); czytać(); GroupOfCustomer group = konstruujGoupOfCustomerInstance(); Wolę to, ponieważ nie chcę umieszczać bezużytecznych linii kodu w kodzie po stronie klienta, przeszkadzając klasie klienta szczegółami implementacji. Czy to rzeczywiście zły nawyk? Jeśli tak, jak mogę tego uniknąć? Zwróć uwagę, że powyższe jest tylko prostym przykładem. Wyobraź sobie, że ta sama sytuacja ma miejsce w czymś nieco bardziej złożonym.


title: Kiedy można NIE naprawiać uszkodzonych okien?

text: W odniesieniu do zepsutych okien, czy są chwile, kiedy refaktoryzację najlepiej zostawić na przyszłą działalność? Na przykład, jeśli projekt mający na celu dodanie nowych funkcji do istniejącego systemu wewnętrznego jest przydzielony do zespołu, który do tej pory nie pracował z systemem i otrzymuje krótki harmonogram, w którym ma pracować - czy może być kiedykolwiek uzasadnione odroczyć główne refaktoryzacje do istniejącego kodu, aby w tym scenariuszu dotrzymać terminu?


title: Czym są łączniki i ładowarki? Jak oni pracują?

text: Staram się lepiej zrozumieć takie rzeczy, jak linkery i ładowarki. Do jakiej dziedziny informatyki należą? Kompilator, system operacyjny, architektura komputerowa? Gdzie łączniki i ładowarki wchodzą w grę podczas opracowywania?


title: Konstrukcje do owijania sprzętowej maszyny stanu

text: Używam sprzętu z dobrze zdefiniowanym C API. Sprzęt jest stanowy, a odpowiednie wywołania interfejsu API muszą być w odpowiedniej kolejności, aby sprzęt działał poprawnie. Same wywołania API zawsze będą zwracać, przekazując flagę, która informuje, czy wywołanie zakończyło się powodzeniem, a jeśli nie, to dlaczego. Sprzęt nie zostanie pozostawiony w jakimś źle zdefiniowanym stanie. W efekcie wywołania API informują pośrednio o aktualnym stanie sprzętu, jeśli stan nie jest prawidłowy do wykonania danej operacji. Wydaje się, że jest to dość powszechny sprzętowy styl API. Moje pytanie brzmi: czy istnieje dobrze ugruntowany wzorzec projektowy do pakowania takiej maszyny stanu sprzętu w języku wysokiego poziomu, tak aby zachować spójność? Mój program jest w Pythonie. Idealnie chciałbym, aby sprzętowa maszyna stanów była wyabstrahowana do znacznie prostszej maszyny stanowej i opakowana w obiekt reprezentujący sprzęt. Nie jestem pewien, co powinno się stać, jeśli podjęto próbę stworzenia wielu obiektów reprezentujących ten sam sprzęt. Przepraszam za drobne niejasności, nie jestem zbyt kompetentny w tej dziedzinie, więc łowiem również pomoc w opisie!


title: Jak mogę pracować nad różnymi projektami bez utraty koncentracji?

text: Pracuję na pełen etat (deweloper) i na koniec dnia pracuję na pół etatu (deweloper). Jak pracujesz z różnymi projektami, nie tracąc skupienia? Często skupiam się na pracy w pełnym wymiarze godzin, gdy pracuję w niepełnym wymiarze godzin lub na odwrót.


title: Jak zrobić MVC we właściwy sposób?

text:
Od kilku miesięcy zajmuję się MVC, używając frameworka CodeIgniter w PHP, ale nadal nie wiem, czy naprawdę robię wszystko dobrze. Obecnie robię: **Model** \- tutaj umieszczam zapytania do bazy danych (select, insert, update, delete). Oto przykład jednego z modeli, które posiadam: function register_user($user_login, $user_profile, $department, $role) { $department_id = $this->get_department_id($department); $role_id = $this->get_role_id($rola); array_push($user_login, $department_id, $role_id); $this->db->query("WSTAW DO tbl_users SET nazwa_użytkownika=?, hashed_password=?, salt=?, Department_id=?, role_id=?", $user_login); $user_id = $this->db->insert_id(); array_push($user_profile, $user_id); $this->db->query(" WSTAWIĆ DO tbl_userprofile SET imię=?, midname=?, lastname=?, user_id=? ", $user_profile); } **Kontroler** \- rozmawia z modelem, wywołuje metody w modelu, które odpytują bazę danych, dostarcza dane, które wyświetlą widoki (alarmy o powodzeniu, alerty o błędach, dane z bazy), dziedziczy kontroler nadrzędny, który sprawdza, czy użytkownik jest zalogowany. Oto przykład: function create_user(){ $this->load->helper('encryption/Bcrypt'); $bcrypt = nowy Bcrypt(15); $user_data = array( 'username' => 'Username', 'firstname' => 'Imię', 'middlename' => 'Drugie imię', 'lastname' => 'Nazwisko', 'hasło' => 'Hasło', 'dział' => 'Dział', 'rola' => 'Rola' ); foreach ($user_data as $key => $value) { $this->form_validation->set_rules($key, $value, 'required|trim'); } if ($this->form_validation->run() == FALSE) { $departments = $this->user_model->list_departments(); $it_roles = $this->user_model->list_roles(1); $tc_roles = $this->user_model->list_roles(2); $assessor_roles = $this->user_model->list_roles(3); $data['data'] = array('departments' => $departments, 'it_roles' => $it_roles, 'tc_roles' => $tc_roles, 'assessor_roles' => $assessor_roles); $data['content'] = 'admin/create_user'; rodzic::error_alert(); $this->load->view($this->_at, $data); } else { $username = $this->input->post('username'); $salt = $bcrypt->getSalt(); $hashed_password = $bcrypt->hash($this->input->post('password'), $salt); $fname = $this->input->post('imię'); $mname = $this->input->post('drugie imię'); $lname = $this->input->post('lastname'); $departament = $this->input->post('department'); $rola = $this->input->post('role'); $user_login = array($username, $hashed_password, $salt); $user_profile = array($fnazwa, $mnazwa, $lnazwa); $this->user_model->register_user($user_login, $user_profile, $department, $rola); $data['content'] = 'admin/użytkownik_widoku'; parent::success_alert(4, 'Użytkownik pomyślnie zarejestrowany!', 'Możesz teraz zalogować się przy użyciu swojego konta'); $data['data'] = array('username' => $username, 'fname' => $fname, 'mname' => $mname, 'lname' => $lname, 'department' => $department, 'rola' => $rola); $this->load->view($this->_at, $data); } } **Widoki** \- tutaj umieszczam kod html, css i JavaScript (kod walidacji formularza dla bieżącego formularza, pętla przez dane dostarczone przez kontroler, kilka instrukcji if do ukrywania i pokazywania rzeczy w zależności od dane dostarczone przez administratora).  <form class="well min-form" method="post">

Rejestracja użytkownika

 Nazwa użytkownika <input type="text" id="nazwa użytkownika" name="nazwa użytkownika" class="span3" autofocus> Hasło < input type="hasło" id="hasło" name="hasło" class="span3"> Imię <input type="text" id="imię" name= "firstname" class="span3"> Drugie imię <input type="text" id="middlename" name="middlename" class="span3"> Nazwisko <input type="text" id="lastname" name="lastname" class="span3"> Dział <input type= "tekst" id="dział" name="dział" class="span3" list="list_departments"> <datalist id="li st_departments"> <?php foreach ($data['departments'] as $row) { ?> <option data-id="<?php echo $row['department_id']; ?>" value="<?php echo $wiersz['dział']; ?>"><?php echo $row['department']; ?></option> <?php } ?> </datalist> Rola <input type=" tekst" id="role" name="role" class="span3" list=""> <datalist id="list_it"> <?php foreach ($data['it_roles'] as $row) { ?> < opcja data-id="<?php echo $row['role_id']; ?>" value="<?php echo $row['role']; ?>"><?php echo $row['role']; ?></option> <?php } ?> </datalist> <datalist id="list_collection"> <?php foreach ($data['tc_roles '] as $row) { ?> <option data-id="<?php echo $row['role_id']; ?>" value="<?php echo $row['role']; ?>"><?php echo $row['role']; ?></option> <?php } ?> </datalist> <datalist id="list_assessor"> <?php foreach ($data['assessor_roles '] as $row) { ?> <option data-id="<?php echo $row['role_id']; ?>" value="<?php echo $row['role']; ?>"><?php echo $row['role']; ?></option> <?php } ?> </datalist>
 <button type="submit" class="btn btn-success" >Utwórz użytkownika</button>
 </form>  Powyższe kody są w rzeczywistości kodem z aplikacji, nad którą aktualnie pracuję. Pracuję nad tym sam, więc tak naprawdę nie mam nikogo, kto mógłby przejrzeć mój kod i wskazać w nim niewłaściwe rzeczy, więc zamieszczam go tutaj w nadziei, że ktoś może wskazać złe rzeczy, które mam zrobione tutaj. Poszukuję również wskazówek dotyczących pisania kodu MVC, takich jak to, co powinno być, a czego nie powinno zawierać widoki, modele i kontrolery. Jak jeszcze mogę ulepszyć obecny kod, który mam teraz. Napisałem już jakiś naprawdę okropny kod (powielanie logiki itp.), dlatego chcę ulepszyć swój kod, aby móc go łatwo utrzymać w przyszłości. Dziękuję!


title: Jak bezpieczny i godny zaufania jest hosting witryn takich jak sourceforge, github lub bitbucket dla projektów o zamkniętym kodzie źródłowym?

text: Rozważam użycie sourceforge, bitbucket lub github do zarządzania kontrolą źródła w mojej firmie. Mam otwarte projekty i uczestniczę w otwartych projektach, takich jak gcc. Ale mam też firmę, w której na życie opracowuję oprogramowanie o zamkniętym kodzie źródłowym. Jak godne zaufania są sourceforge, github lub bitbucket, jeśli chodzi o ochronę oprogramowania przed wzrokiem ciekawskich? Jak stabilny jest hosting pod względem zapobiegania utracie danych? Czy ktoś oparł swoją logikę biznesową na takim stroju? Czy ktoś tam zbadał kilka rozwiązań hostingowych? Dziękuję Ci


title: Czy naprawdę chcę dynamicznego Enum, czy czegoś innego? Lepsze buforowanie? Struktura?

text: To pytanie jest zadawane na SO i ta strona często tak wygląda. „Jak zrobić dynamiczne wyliczenie?” Odpowiedzi wahają się od nie powinieneś do możliwych rozwiązań czasu kompilacji. Teraz moje pytanie brzmi, czy chcę dynamiczne wyliczenie, które jest generowane z tabel wyszukiwania w DB, czy też chcę coś innego, co jest podobne? Mam rozwiązanie używające T4 w czasie kompilacji do generowania wyliczeń z tabel DB, które działa dobrze. Ale teraz niektóre z tabel przeglądowych mają na sobie flagę „aktywny”. Czy to oznacza, że nie są już tabelami przeglądowymi? Jeśli to się zmieni, chcę w jakiś sposób zregenerować mój kod bez konieczności ponownego wdrażania. Te tabele nie będą się często zmieniać. Obecnie aplikacja, gdy chce wypełnić listę rozwijaną lub coś, wysyła zapytanie do bazy danych. Ale jeśli wartości w większości pozostają statyczne, po co za każdym razem przechodzić do DB, stąd użycie wyliczeń. Dodatkową zaletą jest pozbycie się magicznych ciągów i liczb. Czy struktury statyczne byłyby lepsze? Jakaś pamięć podręczna dla tabel wyszukiwania? Wszelkie porady mile widziane.


title: Czy możesz polecić dobrej jakości programy magisterskie online?

text: Przyglądałem się programom studiów magisterskich online z inżynierii oprogramowania. Ukończyłeś program magisterski online? Jeśli tak, to gdzie? Podobało ci się? Czy było to istotne lub nieaktualne?


title: Lepiej użyć monady błędów z walidacją w swoich funkcjach monadycznych lub zaimplementować własną monadę z walidacją bezpośrednio w wiązaniu?

text: Zastanawiam się, co jest lepsze pod względem projektowania pod względem użyteczności/utrzymania, a co lepsze, jeśli chodzi o dopasowanie do społeczności. Biorąc pod uwagę model danych: wpisz Nazwa = String dane Kwota = Out | Niektóre | Dość | Wiele danych pochodnych (Pokaż, równanie) Kontener = Nazwa kontenera dane pochodne (Pokaż, równanie) Kategoria = Nazwa kategorii dane pochodne (Pokaż, równanie) Magazyn = Nazwa sklepu [Kategoria] dane pochodne (Pokaż, równanie) Item = Nazwa elementu Kategoria kontenera Kwota Wyprowadzenie magazynu Pokaż instancję Eq (Item) gdzie (==) i1 i2 = (getItemName i1) == (getItemName i2) data User = Nazwa użytkownika [Container] [Category] [Store] [Item] deriving Pokaż instancję Eq (User ) gdzie (==) u1 u2 = (getName u1) == (getName u2) Mogę zaimplementować funkcje monadyczne, aby przekształcić użytkownika na przykład poprzez dodanie elementów lub sklepów itp., ale mogę skończyć z nieprawidłowym użytkownikiem, więc te funkcje monadyczne będą musieli zweryfikować użytkownika, którego otrzymują i/lub tworzą. Czy powinienem więc po prostu: * zapakować to w monadę błędów i sprawić, by funkcje monadyczne wykonały walidację * zawinąć to w monadę błędów i sprawić, by konsument powiązał funkcję walidacji monadycznej w sekwencji, która wygeneruje odpowiednią odpowiedź na błąd (aby mogli wybierz, aby nie sprawdzać i nie nosić nieprawidłowego obiektu użytkownika) * faktycznie wbuduj go w instancję wiązania na użytkowniku, skutecznie tworząc własny rodzaj monady błędów, która automatycznie wykonuje walidację przy każdym wiązaniu Widzę pozytywy i negatywy dla każdego z 3 podejść, ale chcesz wiedzieć, co jest częściej robione w tym scenariuszu przez społeczność. Tak więc w terminologii kodowej coś takiego istnieje, nieprawidłowy argh"] opcja 2: addStore s (Użytkownik n1 c1 c2 s1 i1) = Prawy $ Użytkownik n1 c1 c2 (s:s1) i1 updateUsersTable $ Prawy jakiśUżytkownik >>= addStore $ Przechowuje "yay" ["kategoria, która nie istnieje, niepoprawny argh"] >>= validate -- w tym wyborze walidacja może zostać przesunięta do ostatniego możliwego momentu (jak wewnątrz updateUsersTable przed aktualizacją db) opcja 3: data ValidUser u = ValidUser u | InvalidUser u instancja Monad ValidUser gdzie (>>=) (ValidUser u) f = case return u z (ValidUser x) -> return f x; (InvalidUser y) -> return y (>>=) (InvalidUser u) f = InvalidUser u return u = validate u addStore (Store s, User u, ValidUser vu) => s -> u -> vu addStore s (User n1 c1 c2 s1 i1) = return $ Użytkownik n1 c1 c2 (s:s1) i1 updateUsersTable $ someValidUser >>= addStore $ Store "yay" ["kategoria, która nie istnieje, nieprawidłowy argument"]


title: Uczestniczył w kursie (CEH lub inny), ale nie posiada certyfikatu

text: Zeszłego lata uczestniczyłem w kursie „Certified Ethical Hacker” prowadzonym przez pana Wayne'a Burke'a. Kurs był świetny. Pan Burke był niesamowity, cały czas błyskał energią, spóźniał się godzinami tylko po to, by podzielić się z nami kolejnym fragmentem swojego doświadczenia. Nauczyłem się wielu nowych rzeczy, robiłem dużo notatek (do których wciąż wracam) i co najważniejsze pchnął mój sposób myślenia w odpowiednim kierunku. Jednak ze względu na niefortunne okoliczności nie przystąpiłem do egzaminu certyfikacyjnego, w związku z czym nie posiadam certyfikatu. Teraz szukam pracy (w QA, niekoniecznie związanej z bezpieczeństwem) i aktualizując CV zadaję sobie pytanie: Czy powinienem wspomnieć o kursie w CV? Zastanawiam się nad dwoma możliwymi efektami końcowymi: * pozytywnym, ponieważ _byłem_ tam, widziałem to, rozumiałem większość z nich ---lepszy niż nic, dobrze? * negatywne, bo może być odbierane jako porażka, więc po co przypominać? Plus, zdecydowanie nie chcę wyglądać jak ktoś, kto chwali się CEH, a potem okazuje się, że tego nie zrobił. Czy istnieje zalecana zasada w takich sytuacjach? Czy ktoś ma podobne doświadczenie? Uwaga: Szczerze mówiąc (poza tym, co należy uznać za racjonalne w kontekście rynku kariery), osobiście czuję się mocno oświecony kursem i _nie_ wierzę, że bardzo mi to pomogło w rozwoju. Nawet nie uważam brakującego certyfikatu za osobistą porażkę: w porównaniu z faktycznym kursem, pytania (wstępne) były zbiorem liczb i nazw narzędzi, które wciskały mi się w głowę. **Aktualizacja:** W końcu postanowiłem wymienić kurs w duchu, o którym pisał @tdammers. W każdym razie w wywiadzie, w którym byłam, nie zadano mi pytań o C|EH – ani technicznych, ani „gdzie jest twoja ~~praca domowa~~”, co nie jest zaskakujące, skoro jak już zaznaczyłem, nie szukał stanowiska szczególnie skoncentrowanego na bezpieczeństwie. Teraz mam nową pracę – równie ekscytującą, na jaką liczyłem.


title: Jakie są gry z rekurencją?

text: Muszę wprowadzić grupę 5-15 osób do rekurencji i chciałbym to zrobić za pomocą fizycznej gry / tańca / aktywności, w którą mogą grać, aby poczuć rekurencję. Klasa nie jest tak bardzo skupiona na CS, jak na ogólnych koncepcjach, więc wszystko, co jest związane z komputerem lub programowaniem, jest odrzucone (ale programiści to wciąż najlepsi ludzie, o których mogę pomyśleć, by bombardować takimi pytaniami). Myślałem o użyciu jakiejś gry w klaskanie, takiej jak teenie dziewczyny, które lubią grać, która zawiera rekurencję, ale nie mogłem jeszcze wymyślić żadnej. Ta gra/taniec może być absurdalna, powinna być po prostu interaktywna i dać im intuicyjne wyczucie, czym jest rekurencja i jak wszechobecna jest w naszym otoczeniu. Czekamy na Twoje sugestie!


title: Czy historia wersji jest naprawdę święta, czy też lepiej ją zmienić?

text: Zawsze zgadzałem się z mantrą Mercurial 1, jednak teraz, gdy Mercurial jest dostarczany w pakiecie z rozszerzeniem rebase i jest to popularna praktyka w git, zastanawiam się, czy naprawdę można to uznać za „złą praktykę”, a przynajmniej wystarczająco źle, aby uniknąć używania. W każdym razie zdaję sobie sprawę, że zmiana podstawy jest niebezpieczna po pchnięciu. OTOH, widzę sens, aby spróbować spakować 5 zatwierdzeń w jednym, aby wyglądało to ładniej (szczególnie w gałęzi produkcyjnej), jednak osobiście uważam, że lepiej byłoby móc zobaczyć częściowe zatwierdzenia funkcji, w której niektóre eksperymenty są wykonywane, nawet jeśli nie są tak ładne, ale zobaczenie czegoś takiego jak „Próbowałem zrobić to w sposób X, ale nie jest to tak optymalne jak Y, robienie tego Z, biorąc Y jako podstawę” miałoby dobrą wartość dla tych, którzy studiują bazy kodu i podążaj za tokiem myślenia programistów. Mój bardzo uparty (głupi, instynktowny, stronniczy) punkt widzenia jest taki, że programiści lubią zmieniać bazę, aby ukryć błędy... i nie sądzę, żeby to było w ogóle dobre dla projektu. Więc moje pytanie brzmi: czy naprawdę uznałeś za wartościowe posiadanie takich „organicznych zmian” (tj. nienaruszonej historii) w praktyce? lub odwrotnie, czy wolisz wpadać na ładne, dobrze zapakowane zmiany i lekceważyć proces eksperymentowania programistów?; Niezależnie od tego, który wybierzesz, **dlaczego to działa dla Ciebie?** (posiadanie historii przez innych członków zespołu lub zmianę bazy danych). * * * 1 na analizę Google DVCS, w Mercurial „Historia jest święta”.


title: Kiedy powinniśmy posprzątać stare, nieużywane już gałęzie GIT?

text: Mamy kilka gałęzi naprawiających błędy, które zaczynają się gromadzić. Zostały one połączone w master i wdrożone do produkcji. Czy istnieje dobry punkt odniesienia, kiedy te gałęzie powinny zostać oczyszczone? Czy należy je posprzątać, czy dobrze jest mieć dane historyczne?


title: Dlaczego git pozwala „zmieniać historię”?

text: > **Możliwe duplikowanie:** > Kiedy należy usunąć historię VCS projektu? Mam doświadczenie w korzystaniu z svn i niedawno zacząłem uczyć się git. Byłem dość zszokowany, gdy dowiedziałem się, że git ma funkcje, które pozwalają „przepisać historię od nowa”. Pochodząc z svn, zaakceptowałem jako świętą zasadę kontroli źródła, że po zatwierdzeniu zmiany nie ma możliwości „cofnięcia” samego zatwierdzenia… jedyne, co można zrobić, to wykonać późniejsze zatwierdzenie, które skutecznie „odwraca” zmiany dokonane we wcześniejszym zatwierdzeniu, ale zawsze można odtworzyć stan każdego zatwierdzenia, które zostało wykonane w przeszłości. Jakie jest uzasadnienie zmiany tej „zasady”? Czy jest coś innego w git, co sprawia, że jest to OK, czy też projekt git odzwierciedla inną „filozofię” kontroli źródeł, która różni się od „filozofii” svn?


title: Zapamiętywanie składni

text: > **Possible Duplicate:** > Programiści zapominają składnię > Czy programiści potrzebują dobrej pamięci? Jestem nowym programistą internetowym. Zacząłem uczyć się HTML/CSS około czerwca tego roku. Z łatwością je odebrałem, teraz przechodzę do JavaScript. Mój problem polega na tym. Rozumiem koncepcje, których naucza materiał szkoleniowy, ale kiedy nadszedł czas, aby zastosować te lekcje, wydaje mi się, że brakuje mi informacji. Głównie wynika to po części ze składni. Zapamiętuję funkcję, stosuję ją, testuję, idę dalej, a po kilku dniach zapominam o niej (składnia, a nie koncepcja). Moje pytanie jest takie. Czy powinienem kręcić kołami, próbując wszystko zapamiętać, czy wystarczy znać koncepcję. Wiem, że zostało to rozwiązane wcześniej, ale nie mogłem znaleźć żadnych prawdziwych, ostatecznych odpowiedzi w prawdziwym świecie. Nie krępuj się przedyskutować, jakie metody sprawdziły się w Twoim przypadku, gdy zaczynałeś.


title: Czy programiści potrzebują dobrej pamięci?

text: Wydaje się, że trzeba pamiętać o różnych rodzajach składni, aby móc programować. Jeśli ktoś nie ma dobrej pamięci do zapamiętywania imion, czy będzie trudniej nauczyć się programowania?


title: Czy dobrym pomysłem jest zrobienie UI 100% w JavaScript i dostarczanie danych przez API?

text: Moją podstawową pracą jest tworzenie aplikacji HTML. Mam na myśli wewnętrznie używane aplikacje typu CRUD z wieloma edytowalnymi widokami siatki, polami tekstowymi, listami rozwijanymi itp. Obecnie używamy formularzy internetowych ASP.NET, które wykonują zadanie, ale wydajność jest w większości ponura i dość często musisz skakać przez obręcze, aby uzyskać to, czego potrzebujesz. Obręcze, które zwisają z sufitu i podpalają. Zastanawiam się więc, czy dobrym pomysłem byłoby przeniesienie całego interfejsu użytkownika na stronę JavaScript. Opracuj silny zestaw kontrolek wielokrotnego użytku, które są dostosowane specjalnie do naszych potrzeb i wymieniaj dane tylko z serwerem. Tak, podoba mi się paradygmat „kontroli” (aka „widget”), który dość dobrze nadaje się do takich zastosowań. Tak więc po stronie serwera nadal mielibyśmy podstawowy układ podobny do naszego obecnego znacznika ASPX, ale byłby on wysyłany do klienta tylko raz, a część JavaScript zajęłaby się wszystkimi kolejnymi aktualizacjami interfejsu użytkownika. Problem polega na tym, że nigdy wcześniej tego nie robiłem i nigdy nie widziałem, żeby ktoś to robił, więc nie wiem, jakie byłyby problemy. W szczególności martwię się o: * **Wydajność** nadal. Analiza porównawcza pokazuje, że obecnie główne opóźnienie występuje po stronie klienta, gdy przeglądarka próbuje ponownie wyrenderować większość strony po aktualizacji AJAX. Wygenerowane przez formularze internetowe ASP.NET znaczniki nadają nowe znaczenie słowu „sieć”, a bogate kontrolki Devexpress dodają własną warstwę złożoności języka JavaScript. Ale czy szybciej byłoby przeliczyć wszystkie niezbędne zmiany po stronie JavaScript, a następnie zaktualizować tylko to, co wymaga aktualizacji? Zauważ, że mówię o formularzach, które mają kilka edytowalnych widoków siatki, wiele pól tekstowych, wiele list rozwijanych, z których każde zawiera pół miliona elementów do filtrowania itp. * **Łatwość tworzenia**. Byłoby teraz znacznie więcej JavaScriptu i prawdopodobnie zmieszałoby się ze znacznikami HTML strony. Musiałby zostać wyprodukowany taki lub jakiś nowy silnik widoku. Intellisense dla Javascriptu jest również dużo gorszy niż dla kodu C#, a ze względu na dynamiczną naturę JavaScriptu nie można oczekiwać, że będzie dużo lepszy. Praktyki kodowania mogą go nieco poprawić, ale nie za bardzo. Ponadto większość naszych programistów to przede wszystkim programiści C#, więc będzie trochę krzywej uczenia się i początkowych błędów. * **Bezpieczeństwo**. Wiele kontroli bezpieczeństwa trzeba będzie wykonać dwukrotnie (po stronie serwera i po stronie interfejsu użytkownika), a serwer przetwarzający dane będzie musiał uwzględnić ich znacznie więcej. Obecnie, jeśli ustawisz pole tekstowe jako tylko do odczytu po stronie serwera, możesz polegać na tym, że jego wartość nie zmienia się za pośrednictwem rundy klienta. Struktura ma już wystarczającą ilość kodu, aby to zapewnić (poprzez szyfrowanie stanu widoku). W przypadku podejścia opartego tylko na danych jest to trudniejsze, ponieważ musisz wszystko sprawdzać ręcznie. Z drugiej strony może łatwiej będzie wykryć luki w zabezpieczeniach, ponieważ będziesz mieć tylko dane, o które będziesz się martwić. W sumie, czy to rozwiąże nasze problemy, czy pogorszy je? Czy ktoś kiedykolwiek próbował tego i jakie były wyniki? Czy istnieją jakieś frameworki, które pomagają w tego rodzaju przedsięwzięciach (pomijając jQuery i moralne ekwiwalenty)?


title: Jakiej struktury danych powinienem użyć do tej strategii buforowania?

text: Pracuję nad aplikacją .NET 4.0, która wykonuje dość drogie obliczenia na dwóch podwójnych zwracających podwójną. To obliczenie jest wykonywane dla każdego z kilku tysięcy _elementów_. Te obliczenia są wykonywane w „Zadaniu” w wątku puli wątków. Niektóre wstępne testy wykazały, że te same obliczenia są wykonywane w kółko, więc chciałbym buforować _n_ wyników. Gdy pamięć podręczna jest pełna, chciałbym wyrzucić najmniej-~~często~~ ostatnio używany przedmiot. ( **Edycja:** Zdałem sobie sprawę, że najrzadziej nie ma sensu, bo gdy pamięć podręczna jest pełna i zamieniłbym wynik na nowo wyliczony, ten byłby najrzadziej używany i natychmiast zastępowany następnym razem nowy wynik jest obliczany i dodawany do pamięci podręcznej) Aby to zaimplementować, myślałem o użyciu `Dictionary<Input, double>` (gdzie `Input` byłoby miniklasą przechowującą dwie podwójne wartości wejściowe) do przechowywania dane wejściowe i buforowane wyniki. Jednak musiałbym również śledzić, kiedy wynik był używany po raz ostatni. W tym celu myślę, że potrzebowałbym drugiej kolekcji przechowującej informacje, których potrzebowałbym do usunięcia wyniku ze słownika, gdy pamięć podręczna byłaby pełna. Obawiam się, że ciągłe sortowanie tej listy miałoby negatywny wpływ na wydajność. Czy istnieje lepszy (tj. bardziej wydajny) sposób na zrobienie tego, a może nawet wspólna struktura danych, o której nie wiem? Jakie rzeczy powinienem profilować / mierzyć, aby określić optymalność mojego rozwiązania?


title: Wiedza programistyczna a logika programowania

text: Czy jest jakaś różnica między tymi dwoma tematami? Widziałem firmy proszące o _Dobrą wiedzę programistyczną_ trochę _Dobrą logikę programowania_. Widziałem to w Profilach stanowisk dla programisty – m.in. "dobra logika programowania", "silna wiedza programistyczna". Wierzę, że wiedza programistyczna jest powiązana z wiedzą o rozważanym języku, a logika programowania jest logiką rozwiązywania problemów za pomocą programowania (ogólnie). Proszę, popraw mnie jeśli się mylę. A co jest ważniejsze? **Edycja:** Czy wybór komponentów do aplikacji, projektowanie interfejsów walidujących dane wejściowe użytkownika należy do wiedzy programistycznej czy logiki programowania? Czy logika programowania po prostu implikuje rozwiązywanie problemów, czy jest coś jeszcze, z czego powinna się składać?


title: Jaki jest najlepszy sposób na utrzymanie łańcuchów narzędzi oprogramowania?

text: **Krótkie pytanie** Jaki jest najlepszy sposób tworzenia, utrzymywania i dystrybucji łańcuchów narzędzi programistycznych? **Tło** Staram się opracować przepływ pracy / proces tworzenia izolowanego środowiska w instalacji i wdrażaniu łańcuchów narzędzi oprogramowania dla osadzonych celów. Każdy łańcuch narzędzi zazwyczaj zawiera IDE, kompilator i mały zestaw typowych narzędzi. Przyjrzałem się dwóm rozwiązaniom, ale oba mają swoje ograniczenia i mam nadzieję znaleźć rozwiązanie, które ma najlepsze z obu implementacji. Racjonalnym uzasadnieniem stojącym za samodzielnym łańcuchem narzędzi jest to, aby wszyscy programiści byli w stanie zbudować dokładnie ten sam kod (dopasowanie CRC itp.). Jak również możliwość odbudowania tego samego kodu po X latach w celu obsługi starszego kodu. Trzecią opcją byłoby użycie centralnego serwera kompilacji, który planujemy robić w przypadku nocnych kompilacji, ale nadal musimy być w stanie budować „w locie” podczas pracy na stanowisku testowym lub zdalnie. Tak więc samo korzystanie z serwera kompilacji nie wystarczy. **Idealne cele dla wdrożonego łańcucha narzędzi** * Praca w systemie Windows XP, Vista i 7 (bez sterowników) * Zawiera wszystkie informacje wymagane do uruchomienia łańcucha narzędzi (bez sterowników) **\-------- ---------- Możliwe opcje ------------------** **Opcja 1: W pełni samodzielna maszyna wirtualna** _Zalet_ * Pakowanie Open Source za pośrednictwem Virtual Box * 100% izolacja * Gwarantuje, że narzędzia mogą współdziałać ze sobą _Wady_ * Licencjonowanie wielu kopii systemu Windows * W najlepszym przypadku tylko jeden programista może **legalnie** używać maszyny wirtualnej z systemem Windows w danym momencie. * Uruchamianie tej samej maszyny wirtualnej na **fizycznie** różnych laptopach (Macbook Pro, Dell 830, Dell E6500 itp.). Zazwyczaj, gdy system Windows widzi nowy procesor lub płytę główną, wymusza ponowną aktywację. * _Bardzo_ duże pliki do obsługi **Opcja 2: Aplikacja wirtualna** _Zalety_ * Dzięki programom pakującym, takim jak Cameyo, aplikacje mogą działać na prawie wszystkich wersjach systemu Windows. (Zauważ, że Cameyo jest również darmowy) * Niewiele lub brak problemów licencyjnych dla większości narzędzi / środowisk IDE. Zakupione kompilatory mogą mieć dodatkowe ograniczenia, wszystkie nasze obecne kompilatory obsługują ten typ użycia. * Mniejsze pliki do obsługi przez SCM, takie jak SVN lub GIT. _Wady_ * Trudne, jeśli to możliwe, aby uzyskać pojedynczy plik, który zawiera cały łańcuch narzędzi. * Trudne, jeśli to możliwe, aby narzędzia widziały / pracowały ze sobą. Widziałem ten problem z Cameyo. **Myśli zamykające** Być może nie istnieje rozwiązanie, które spełnia wszystkie moje cele projektowe, ale chciałbym dowiedzieć się, czy ktokolwiek inny odniósł sukces w tego typu wdrożeniu.


title: Czy lepiej współpracować z projektantem, czy powierzyć prace projektowe wykonawcy?

text: Nie mam pojęcia, jeśli chodzi o projektowanie, ale jestem biegły w programowaniu. Jeśli jesteś programistą, który nie ma umiejętności projektowania wizualnego, co najlepiej sprawdziło się dla Ciebie — sparować się z grafikiem lub wykonać całe programowanie, a następnie wykonać konkretną pracę? Zrobiłem trochę pracy bez pracy, ale nie jestem w pełni zadowolony, ponieważ widzę zbyt duży wpływ mojego wpływu na projekt. Myślę, że dzieje się tak, ponieważ muszę jasno określić, czego chcę od wykonawców, a ich kreatywność ogranicza architektura, którą stworzyłem. Wydaje mi się, że posiadanie partnera pozwoliłoby na większą współpracę, ale przeczytałem wiele książek dla przedsiębiorców, które ostrzegają przed partnerstwami.


title: Sprzyjanie niezmienności w projektowaniu baz danych

text: Jednym z elementów Efektywnej Javy Joshuy Blocha jest przekonanie, że klasy powinny umożliwiać mutację instancji w jak najmniejszym stopniu, a najlepiej wcale. Często dane obiektu są utrwalane w bazie danych w jakiejś formie. To skłoniło mnie do zastanowienia się nad ideą niezmienności w bazie danych, zwłaszcza w przypadku tych tabel, które reprezentują pojedynczą jednostkę w ramach większego systemu. Coś, z czym ostatnio eksperymentowałem, to próba zminimalizowania aktualizacji, które wykonuję w wierszach tabeli reprezentujących te obiekty, i próba wykonywania wstawek tak często, jak tylko mogę. Konkretny przykład czegoś, z czym ostatnio eksperymentowałem. Jeśli wiem, że mogę później dołączyć rekord z dodatkowymi danymi, stworzę kolejną tabelę, aby to reprezentować, coś w rodzaju następujących dwóch definicji tabeli: utwórz tabelę myObj (id integer, ...inne_dane ... nie null) ; utwórz tabelę myObjSuppliment (id integer, myObjId integer, ...więcej_danych... nie null); Miejmy nadzieję, że te nazwy nie są dosłowne, ale służą jedynie zademonstrowaniu idei. Czy to rozsądne podejście do modelowania trwałości danych? Czy warto próbować ograniczać aktualizacje wykonywane na tabeli, zwłaszcza w przypadku wypełniania wartości null dla danych, które mogą nie istnieć podczas pierwotnego tworzenia rekordu? Czy są chwile, kiedy takie podejście może później spowodować silny ból?


title: Jaką wartość ma certyfikat Cloudera Hadoop dla osób nowych w branży IT?

text: Jestem programistą z 8 miesięcznym doświadczeniem w branży IT, obecnie pracuję nad rozwojem narzędzi do analityki BIG DATA. Sam nauczyłem się podstaw Hadoop i jestem całkiem zadowolony z pisania MapReduce Jobs, PIG, HIVE, Flume i innych powiązanych projektów. Zastanawiam się nad przystąpieniem do egzaminu na certyfikat Cloudera Hadoop. Czy ten certyfikat doda wartości, biorąc pod uwagę, że mam mniej niż 1 rok doświadczenia? Wiele prac związanych z Hadoop, które widziałem, wymaga co najmniej 3 lat doświadczenia. Czy powinienem poświęcić więcej czasu na naukę Hadoop i doskonalenie swoich umiejętności, aby przystąpić do tego certyfikatu?


title: Czy doświadczenie w całej branży jest takie samo (w większości)?

text: Nie tak dawno ukończyłem studia na kierunku informatyka. Pracuję w firmie programistycznej od kilku miesięcy, ale praca, którą wykonuję, wydaje się nie należeć do żadnej określonej kategorii (przynajmniej tych, które istnieją w mojej głowie - programista, tester, kierownik projektu ). Od czasu do czasu moja praca będzie wymagała ode mnie naprawy błędów w Javie (5%), ale większość z nich wydaje się polegać na wysyłaniu zapytań do bazy danych klienta i dodawaniu/edycji/usuwaniu informacji (60%) lub rozwiązywaniu problemów, a następnie podawaniu odpowiedź „Zapomniałeś zrobić to a tak przed wysłaniem formularza i dlatego pojawił się błąd” (35%). Martwię się, że w przyszłości, jeśli spróbuję ubiegać się o stanowisko starszego programisty/testera/PM w innej firmie, spojrzą na moje doświadczenie zawodowe i powiedzą: „Wydaje się, że zajmowałeś się bardziej zarządzaniem bazami danych / kwestiami technicznymi wsparcie niż rzeczywisty cykl rozwoju oprogramowania”. Czy jest to z mojej strony ważna obawa? **EDYTUJ** Ponieważ konsensus wydaje się, że jest to low-end/support, mam inne pytanie. Jestem tu stosunkowo od niedawna i miałem oferty na rozmowy kwalifikacyjne w kilku innych firmach (pozostałe kontakty po opublikowaniu mojego CV online), w których zajmowałbym się rozwojem (co wolałbym robić). Zająłem to stanowisko, ponieważ oni jako pierwsi złożyli ofertę (wynagrodzenie jest całkiem przyzwoite) i mam nadzieję, że w przyszłym roku pójdę na studia podyplomowe, więc chciałem zacząć oszczędzać. Czy warto byłoby kontynuować te inne oferty wywiadów (które skreślają moje CV prosto z uniwersytetu) i po prostu zachowywać się tak, jakby te ostatnie kilka miesięcy się nie wydarzyły (mądre CV).


Wyszukiwarka Google dla naukowców odnajduje liczne artykuły na temat testowalności, w tym modele testowalności obliczeniowej, zalecenia dotyczące tego, w jaki sposób kod może być bardziej testowalny itp. Wszystkie zawierają twierdzenie, że bardziej testowalny kod jest bardziej stabilny, jednak nie mogę znaleźć żadnego badania, które faktycznie to pokazują. Próbowałem szukać badań oceniających wpływ testowalnego kodu na jakość, jednak najbliższe, jakie mogę znaleźć, to Poprawa testowalności systemów zorientowanych obiektowo, które omawia związek między błędami projektowymi a testowalnością. Czy testowalny kod jest rzeczywiście bardziej stabilny? A co ważniejsze, jak silny jest ten związek? Wskaż swoje odpowiedzi referencjami lub dowodami na poparcie swojego roszczenia. Na przykład istnieje wiele badań dotyczących związku złożoności cyklomatycznej i wskaźnika defektów. Troster znajduje korelację `r = 0,48` Istnieją metryki „testowalności”, takie jak sprzęganie kodu. Szukam wniosków z badań, które odnoszą się do wskaźnika defektów. Idealnie chciałbym stworzyć wykres przedstawiający pewną miarę testowalności w stosunku do wskaźnika defektów.


title: Jak zapewnić solidne wyjaśnienie, że żadne dwa programy nie powinny mieć tego samego numeru wersji?

text: Jesteśmy firmą outsourcingową. Tworzymy firmware i oprogramowanie dla naszego klienta. Mają zespół inżynierów sprzętu, z którym my, programiści oprogramowania układowego, pracujemy. Nasz klient ma **ściśle zdefiniowany proces** wydania oprogramowania. Duży wpływ na ten proces ma zmiana numeru wersji oprogramowania. Kiedy udostępniamy im oprogramowanie układowe do testowania, inżynierowie sprzętu najpierw je testują. Potem kolejny test SQA. Ostatecznie produkt zostaje wydany klientom. Czasami, gdy zmiana jest niewielka w nowym wydaniu, nasz klient nalega, aby zachować numer wersji taki sam jak ostatni. Powiedzmy, że najnowsza wersja od deweloperów (nie udostępniona klientom) miała wersję 10. Potem znaleźliśmy miejsce na optymalizację. Lub może to być niewielka zmiana w zachowaniu oprogramowania układowego w bardzo szczególnym przypadku, która może być widoczna z zewnątrz lub nie. Kiedy proponujemy im, że znaleźliśmy te miejsca dla drobnych ulepszeń, nalegają, abyśmy dokonali zmian, ale zachowali numer wersji 10. Nalegamy, aby każde wydane przez nas oprogramowanie miało inny numer wersji. Zwróciliśmy uwagę na kilka typowych pułapek, jeśli nie zmieniamy numeru wersji oprogramowania układowego przy każdym wydaniu. Mówią, że rozumieją, dlaczego jest to konieczne. Jednak zmuszają nas do zachowania numeru wersji bez zmian. Utrzymanie tego samego numeru wersji pomoże w **ściśle zdefiniowanym procesie** udostępniania oprogramowania układowego klientowi. Kodem zarządzamy we własnym repozytorium (SVN). Ściśle wiążemy dany numer wersji z danym numerem wersji. Numer wersji jest przechowywany w EEPROMie wersji produktu naszego klienta. Zdefiniowane są 2 bajty, w których przechowywany jest numer wersji. Oprogramowanie komputerowe, które odczytuje numer wersji, zawsze odczytuje 2 bajty i wyświetla numer wersji na monitorze komputera. Nie ma innego sposobu na zdefiniowanie numeru wersji. Nie zmienią oprogramowania, które odczytuje numer wersji, i nie przydzielą więcej pamięci, aby wprowadzić inny numer wersji, z którego mogą korzystać tylko programiści. Za chwilę zmienię oprogramowanie i wydanie z modyfikacjami dzisiaj. Mam kolejną prośbę o zachowanie numeru wersji takiego samego jak poprzedni. Chcę jeszcze raz wysłać e-mailem kilka bezkonkurencyjnych argumentów, jakie problemy możemy napotkać, jeśli utrzymamy numer wersji taki sam jak w poprzednim wydaniu. Jak przekonać klienta, aby nie używał tego samego numeru wersji?


title: Jak znaleźć linię łączącą dwa kwadraty?

text: W algorytmie Permissive Field of View kwadrat docelowy jest _widoczny_ z kwadratu źródłowego, jeśli można narysować dowolną niezakłóconą linię od kwadratu źródłowego do kwadratu docelowego. Algorytm działa poprzez zdefiniowanie serii pól widoku (zasadniczo trójkątów) i sprawdzenie, czy docelowy kwadrat istnieje wewnątrz pola widoku. Niestety algorytm nie udostępnia rzeczywistej linii, którą znalazł między kwadratem źródłowym a kwadratem docelowym; mówi tylko, czy taka linia na pewno istnieje. Jak mogę znaleźć linię, zakładając, że istnieje gwarancja? Próbowałem wykreślać linie między krawędziami kwadratu źródłowego a krawędziami kwadratu docelowego, ale najwyraźniej jest to tylko przybliżenie (może nie znaleźć linii).


title: Wyszukiwanie z wielu źródeł w aplikacji WPF

text: Jeśli używam wzorca MVVM – ten dla mojej aplikacji WPF A mój projekt wymaga funkcji wyszukiwania w różnych źródłach – powiedzmy klienci, księgowi, sprawy. Jaki byłby najlepszy sposób aby mieć tylko jeden widok wyszukiwania a wyniki wyszukiwania pokazane w ListView są'dynamiczne'w tym sensie mogąbyćwynikami dla klientów lub księgowych lub spraw Czy powinienem miećpodstawowy model widoku wyszukiwania i konkretne modele widoku dla klientów, księgowych, sprawy, które następnie w jakiś sposób ustawiają jako kontekst danych dla widoku wyszukiwania Lub spróbuj dynamicznie zbudować siatkę w kodzie za wyszukiwaniem, a następnie w jakiś sposób przenieś dane z powrotem do modelu widoku bez widoku wyszukiwania znajomość modelu widoku. **Dla wyjaśnienia** Wyszukiwania są oddzielne i nie trzeba ich łączyć, chciałbym tylko co zwracać wyniki dla klientów lub księgowych lub spraw.


title: Klient chce zmodyfikować pliki .properties spakowane w naszym pliku WAR

text: Mam klienta, który chce mieć możliwość modyfikowania plików .properties spakowanych w pliku WAR aplikacji sieci Web, aby mieć kontrolę nad modyfikowaniem środowisk w ustawieniach. Będą hostować tę stronę na własnych serwerach, więc nie mogę ich obwiniać, ale nie jestem pewien, jaki jest najlepszy kurs. Myślę, że każdy administrator serwera aplikacji Java EE powinien wiedzieć, jak zagłębić się w pakiet WAR za pomocą narzędzia zip oraz znaleźć i zmodyfikować same pliki właściwości. Nie jestem pewien, czy to powszechna wiedza, czy nie. Zazwyczaj zawsze pakowałem swoje artefakty kompilacji z plikami właściwości odpowiednimi dla danego środowiska, ale jest to trochę dziwny przypadek, w którym MY budujemy WAR i przekazujemy go klientowi. Mogę próbować trzymać pliki właściwości poza WAR, ale potem robi się bałagan z powodu problemów z ładowaniem klas (JBoss classloader, Tomcat classloader itp.) Myślę, że dla wygody utrzymujemy pliki właściwości dla ICH środowisk i zmieniamy i zbuduj je na ich prośby. Mojemu menedżerowi podoba się ten pomysł, ponieważ utrzymuje nas pod kontrolą, ale klientowi się to nie podoba. Co byś zrobił?


title: Przetłumacz dane wejściowe mydła jednej usługi internetowej na dane wejściowe innej

text: Musimy obsługiwać starszą usługę internetową za pomocą nowej implementacji usługi sieciowej. W danym momencie zarówno stare, jak i nowe dane wejściowe powinny działać. Oto co musimy osiągnąć > Stare wejście SOAP -> przetłumacz -> Nowe wejście SOAP -> Nowy WS -> Nowe wyjście WS -> > przetłumacz -> Stare wyjście SOAP. Na razie stworzyłem xslt do tłumaczenia danych wejściowych i wyjściowych. Wygląda jednak na to, że nie ma to większego sensu, jeśli zaimplementuję usługę sieciową do obsługi starych danych wejściowych Biorąc pod uwagę, że znamy dane wejściowe i wyjściowe XSD dla wszystkich zaangażowanych formatów, jak zaimplementować usługę sieciową, która będzie wziąć stare dane wejściowe mydła, przetłumaczyć je (za pomocą XSLT) i wywołać nową usługę? Jakie narzędzia (wiosna ws,cxf ..) są najbardziej odpowiednie?


title: Czy wydadzą Wrox Box 4?

text: czy ktoś wie czy będzie Wrox Box 4? Bardzo bym chciał coś takiego dostać, ale najnowsza kolekcja książek Wroxa wydaje się być wydaniem 3.5. Naprawdę muszę być na bieżąco z najnowszą wersją platformy .NET. Nie jestem jednak pewien, czy będzie Wrox Box 4, ponieważ wygląda na to, że Wiley wydaje teraz książki Wrox pod Wileyem, a już nie Wrox. Wygląda więc na to, że będę musiał przejść z Professional ASP.NET 4 w C# zamiast Wrox Box 3.5


title: Czy ktoś korzysta z biblioteki Intel Performance Primitives (IPP) z Delphi?

text: Rozważam zakup biblioteki Intel Integrated Performance Primitives (IPP) do użytku z moimi aplikacjami Delphi. Interesują mnie funkcje przetwarzania sygnałów. Głównie do ponownego próbkowania i FFT. Czy ktoś używał IPP z Delphi? Jak poszło? Zastanawiam się, jak łatwo będzie zacząć korzystać z biblioteki. Nie mam żadnego doświadczenia w korzystaniu z kodu/bibliotek innych niż Delphi w Delphi.


title: Jak projekty open source radzą sobie ze złożoną konfiguracją i wdrażaniem?

text: Większość moich klientów korporacyjnych ma do wdrożenia i przetestowania bardzo złożone systemy z wieloma podmiotami. (np. oprogramowanie klienckie, baza danych użytkowników, system, baza danych, aplikacja do zarządzania tożsamością itp.). Zazwyczaj nie mają łatwego sposobu na wdrożenie tego wszystkiego. Ani w produkcji, ani w rozwoju. Zastanawiam się, jak radzą sobie z tym projekty/aplikacje open source? Czy projekty open source mają zwykle mniejszy zakres, a zatem mniej skomplikowane w konfiguracji? Czy udaje im się uniknąć złożoności, ponieważ nikt nie płaci za czas stracony na konfigurację? Zastanawiam się, jakie są złożone projekty open source pod względem złożoności. Myślałem o kilku przykładach. Żaden z nich nie jest idealny do moich celów. **Wordpress** \- Witryna .com jest prawdopodobnie dość skomplikowana pod względem wdrożenia, ale AFAIK wersja, którą można pobrać z .org, jest dość prosta. Nie można go dystrybuować na wiele serwerów. **Wikipedia** ? Większość oprogramowania, z którego korzysta, to oprogramowanie typu open source, ale samo w sobie nie jest to projekt typu open source do pobrania, więc tak naprawdę nie pasuje. Szczegóły ich systemu można znaleźć na Wikipedii **Diaspora** \- zamiennik Facebooka jeszcze nie działa, ale może stać się takim projektem. **Dreamwidth** to pierwotnie widelec LiveJournal. Dreamwidth to głównie oprogramowanie typu open source. Jego strona wiki zawiera informacje z kilkoma uwagami dotyczącymi produkcji. Otrzymałem od nich informacje na IRC, które zamieściłem na ich forum, aby uzyskać dalsze wyjaśnienia. Dlatego interesują mnie kolejne przykłady aplikacji/systemów open source, które są złożone pod względem wdrażania i testowania.


title: Zagadnienia dotyczące wydajności podczas korzystania z Go w moim projekcie

text: Patrzę na użycie Go (aka golang) dla projektu (bazy danych SQL, ale to w większości przypadków nie ma tu znaczenia), w którym wydajność jest krytyczna, ale przy niskim obciążeniu podstawowym wąskim gardłem będzie we/wy na dysk. W takim przypadku myślę, że Go byłoby świetne! Przy dużym obciążeniu lub przy dużym korzystaniu z pamięci podręcznej, wykorzystanie procesora i pamięci będzie coraz bardziej stawało się wąskimi gardłami i obawiam się, że Go może sprawić, że najwyższa wydajność spektrum wydajności będzie znacznie niższa niż to, co może zapewnić C/C++/D. Czy każdy, kto ma doświadczenie w pracy w Go, może dać jakiś wgląd w to, jak szybko dochodzi do tego wąskiego gardła (zazwyczaj aplikacje sieciowe podlegają temu samemu wąskiemu gardłu) i co można zrobić, aby go złagodzić w Go, poza przepisywaniem wąskiego gardła w szybszym języku? * * * Zwróć uwagę, że moje pytanie było na tyle inne, że mimo wszystko zadałem je po przeczytaniu powiązanego pytania: * Jakie oprogramowanie działa najlepiej w języku Go Programming? Mam konkretną aplikację, o którą pytam, a moje obawy ograniczyłem do wydajności (nie użyteczności, obsługi bibliotek, narzędzi programistycznych itp.).


Dlaczego klasa BigInteger Javy nie ma konstruktora zdolnego do przyjęcia literału numerycznego? Za każdym razem, gdy używam BigIntegers, a wiele razy tylko o nich myślę, zastanawiam się nad tym. Z jakiego powodu projektanci Javy musieli wykluczyć jedną, pomimo przytłaczającej wygody, jaką powinna istnieć?


title: Czy 'Ja' w VB.NET odwołuje się tylko do skonkretyzowanego obiektu?

text: Czy „Ja” w VB.NET odwołuje się tylko do wystąpienia typu? Właśnie przyszło mi do głowy, że skoro mogę odwoływać się do właściwości w mojej klasie VB.NET bez użycia „Ja”, to nie widzę powodu, aby używać go w tym celu. Czy odwoływanie się do zmiennej w dowolny sposób zawsze będzie odwoływać się do rzeczywistej przechowywanej wartości właściwości w czasie wykonywania?


title: Jak działa pobieranie i ustawianie akcesorów

text: Standardową metodą implementacji metod dostępu get i set w językach C# i VB.NET jest użycie właściwości publicznej do ustawiania i pobierania wartości odpowiedniej zmiennej prywatnej. Czy mam rację mówiąc, że nie ma to wpływu na różne wystąpienia zmiennej? Rozumiem przez to, że jeśli istnieją różne instancje obiektu, to te instancje i ich właściwości są całkowicie niezależne, prawda? Więc myślę, że moje zrozumienie jest poprawne, że ustawienie zmiennej prywatnej jest tylko konstrukcją umożliwiającą zaimplementowanie wzorca pobierania i ustawiania? Nigdy nie byłem tego w 100% pewien.


title: Czy elementy zwracane przez zapytanie Linq-to-Entities są przesyłane strumieniowo z bazy danych w tym samym czasie, czy są pobierane wszystkie naraz?

text: Czy elementy zwracane przez zapytanie Linq-to-Entities są przesyłane strumieniowo z bazy danych pojedynczo (w miarę ich żądania) czy też są pobierane wszystkie naraz: SampleContext context = new SampleContext(); // SampleContext pochodzi z ObjectContext var search = context.Contacts; foreach (var kontakt w wyszukiwaniu) { Console.WriteLine(contact.ContactID); // czy każdy kontakt jest pobierany z bazy danych // tylko wtedy, gdy foreach go zażąda? }      z góry dziękuję


title: Relacja między obiektami

text: Od kilku tygodni zastanawiam się nad relacjami między obiektami – nie szczególnie obiektami OOP. Na przykład w **C++** , jesteśmy przyzwyczajeni do reprezentowania tego przez nakładanie wskaźników lub kontener wskaźników w strukturze, która potrzebuje dostępu do innego obiektu. Jeśli obiekt `A` musi mieć dostęp do `B`, nie jest niczym niezwykłym znalezienie `B *pB` w `A`. Ale nie jestem już programistą w **C++**, piszę programy używając języków funkcjonalnych, a zwłaszcza w **Haskell** , który jest czysto funkcjonalnym językiem. Można używać wskaźników, odniesień lub tego typu rzeczy, ale czuję się z tym dziwnie, jak „robienie tego w sposób niehaskellowy”. Potem pomyślałem nieco głębiej o całej tej relacji i doszedłem do sedna: > _„Dlaczego w ogóle przedstawiamy taką relację przez nawarstwianie?_ Czytałem, że niektórzy ludzie już o tym myśleli (tutaj). Z mojego punktu widzenia reprezentowanie relacji za pomocą jawnych grafów jest o wiele lepsze, ponieważ pozwala nam skupić się na _rdze_ naszego typu i wyrazić relacje później za pomocą kombinatorów (trochę jak robi to **SQL**). Przez _rdzeń_ rozumiem, że kiedy definiujemy „A”, oczekujemy zdefiniowania, z czego „A” jest _zrobione_ , a nie od czego _zależy_. Na przykład w grze wideo, jeśli mamy typ „Postać”, uzasadnione jest mówienie o „Cechu”, „Umiejętności” lub tego typu rzeczach, ale czy tak jest, jeśli mówimy o „Broń” lub „Przedmiotach”? Nie jestem już taki pewien. Następnie: data Character = { chSkills :: [Skill] , chTraits :: [Cechy] , chName :: String , chWeapon :: IORef Weapon -- lub STRef lub cokolwiek , chItems :: IOref [Item] -- jw. } naprawdę źle pod względem projektu. Wolałbym coś takiego: data Character = { chSkills :: [Skill] , chTraits :: [Traits] , chName :: String } -- powiąż naszą postać z bronią za pomocą Graph Character Weapon -- połącz naszą postać z Przedmioty używające znaku wykresu [przedmiotu] lub tego rodzaju rzeczy Ponadto, gdy nadejdzie dzień, w którym nadejdzie dzień dodania nowych funkcji, możemy po prostu utworzyć nowe typy, nowe wykresy i linki. W pierwszym projekcie musielibyśmy złamać typ „Znak” lub zastosować jakiś rodzaj obejścia, aby go rozszerzyć. Co myślisz o tym pomyśle? Jak myślisz, co najlepiej radzić sobie z tego rodzaju problemami w **Haskell** , czysto funkcjonalnym języku?


title: Jakie są wspólne podejścia i praktyki dla dużych aplikacji?

text: Tworzenie dużych aplikacji wymaga ogromnego wysiłku. Dla każdej fazy rozwoju mogą istnieć zespoły, które muszą używać różnych wzorców projektowych i przejść przez cały SDLC. Mam dwuletnie doświadczenie jako programista w małych aplikacjach i interesuje mnie, jakie są typowe podejścia i praktyki dla dużych aplikacji? Zwłaszcza z perspektywy zarządzania projektami. Jak mogę przyjąć takie praktyki pracy?


title: Czy istnieje coś takiego jak Program Manager dla firm outsourcingowych?

text: Zgodnie z pierwszym akapitem postu Joela, menedżer programu jest bardzo dobrą rzeczą w produktach. Ale co z posiadaniem Menedżera Programu dla firmy, która nie ma produktu, ale ma projekty? Jedynym zbiegiem okoliczności, jaki widziałbym, gdybyś mnie spytał i poprosił o natychmiastową odpowiedź, jest taki, że kierownikiem programu w firmie outsourcingowej byłby ktoś, kto nadzoruje wszystkie projekty firmy, upewniając się, że wszystko jest wykonywane zgodnie z strategia firmy z technicznego punktu widzenia.


title: Niezależny programista Wstępne planowanie/projektowanie/architektura

text: W przypadku niezależnych programistów lub programistów pracujących w nocy/weekend, gdy masz zamiar rozpocząć duży projekt korporacyjny, jakie są pierwsze kroki, które należy podjąć, gdy wymieszasz szczegóły wstępnego kodowania i projekty? Jakich narzędzi używasz? Czy uważasz, że najłatwiej jest zachować tradycyjny ołówek mechaniczny i bloczek papieru? Czy korzystasz z edytora tekstu, aby uzyskać swoje pomysły i wymagania w formacie punktowanym? Używasz UML? Moje pytanie brzmi: jaki jest pierwszy krok, który wykonujesz podczas projektowania dużej aplikacji? Jakiego medium używasz do nagrywania swoich notatek? A kiedy zazwyczaj jesteś zadowolony z rozpoczęcia pisania kodu?


title: Jak pisać przydatne programy Java bez używania zmiennych zmiennych?

text: Czytałem artykuł o programowaniu funkcjonalnym, w którym autor stwierdza > > (weź 25 (kwadraty (liczby całkowite))) > > > Zauważ, że nie ma zmiennych. Rzeczywiście, nie ma nic więcej niż trzy funkcje > i jedną stałą. Spróbuj zapisać kwadraty liczb całkowitych w Javie > bez używania zmiennej. Och, prawdopodobnie jest na to sposób, ale > z pewnością nie jest to naturalne i nie czytałoby się tak dobrze, jak mój program powyżej. Czy można to osiągnąć w Javie? Przypuśćmy, że musisz wydrukować kwadraty pierwszych 15 liczb całkowitych, czy możesz napisać pętlę for lub while bez używania zmiennych? > **Powiadomienie o modach** > > To pytanie _nie_ jest konkursem golfa na kod. Szukamy odpowiedzi, które > wyjaśniają związane z tym pojęcia (najlepiej bez powtarzania wcześniejszych odpowiedzi), > a nie tylko kolejnego fragmentu kodu.


title: Czy użycie Quercus sprawi, że mój kod będzie objęty licencją GPL?

text: Quercus to implementacja PHP napisana w Javie i wydana na licencji GPL. Jeśli go użyję, czy mój kod PHP podlega licencji GPL? A co z moim kodem Java? Zakładając, że piszę nowy kod Java i nowy kod PHP oraz używam Quercus do uruchamiania kodu PHP na JVM i wywoływania mojego kodu Java, które fragmenty podlegają licencji GPL? Załóżmy również, że rezultatem jest oprogramowanie komercyjne, które chcę rozpowszechniać.


title: Jak myślisz, co było złym wyborem projektu w Javie?

text: Java jest do dziś jednym z najpopularniejszych (najbardziej?) popularnych języków programowania, ale to również budziło kontrowersje. Wiele osób lubi teraz bashować Javę po prostu dlatego, że jest „wolna” lub po prostu dlatego, że na przykład nie jest to język X. Moje pytanie w ogóle nie jest związane z żadnym z tych argumentów, po prostu chcę wiedzieć, co uważasz za wadę projektową lub zły wybór projektu w Javie i jak można to ulepszyć z twojego punktu widzenia. Coś takiego.


title: Przeszkody w korzystaniu z Git Flow w Subversion

text: Mój zespół w pracy rozpoczyna nowy projekt, wykorzystując Subversion jako nasz VCS (na potrzeby tego pytania możesz rozważyć ten zestaw w kamieniu). Jesteśmy wciąż na wczesnym etapie projektu i staramy się uzgodnić model rozgałęzień. Nasz poprzedni projekt opierał się na niestandardowym modelu wersji, który powodował problemy podczas zarządzania poprawkami i poprawkami do istniejących wydań. Odkryłem, że różne modele rozgałęzień są dość skomplikowane, ale jednym z modeli, który rozumiem dość wyraźnie, jest przepływ git. Jestem ciekawy, jak trudne/niepożądane byłoby zaimplementowanie tego wariantu w Subversion. Oczywiście byłaby pewna różnica, jeśli chodzi o ludzi współpracujących w oddziałach. Gałęzie funkcji musiałyby być scentralizowane, a nie ograniczone do lokalnych repozytoriów, ale inne koncepcje modelu powinny być odtwarzalne w Subversion, tak jak to rozumiem. Jakie byłyby wady lub wyzwania tego podejścia. Słyszałem, że w SVN "scalanie jest drogie" w stosunku do Gita. Ale nie jestem do końca jasny, co to oznacza w praktyce lub jak wpłynęłoby to na naszą zdolność do korzystania z modelu rozgałęzienia typu git flow. Jakie byłyby największe obawy związane z tym podejściem. Czy istnieje podobnie jasne podejście, które jest bardziej naturalne w Subversion?


title: Jaki jest praktyczny poziom abstrakcji w aplikacji internetowej?

text: (Pierwotnie zapytany na StackOverflow - http://stackoverflow.com/questions/14896121/what-is-a-practical-level-of-abstraction-in-a-web-application) Nadal uważam się za nowicjusza w programowaniu OO, szczególnie w php, więc wybacz mi, jeśli przegapiłem jakąś podstawową zasadę! Załóżmy, że mam aplikację intranetową z obiektem `staff` z właściwościami i metodami unikalnymi dla członka personelu: class staff { ... private $job_title; prywatny $data_początkowa; itd... } Czy w dążeniu do utrzymania części kodu, które można konserwować w jednym miejscu, uczynić mój model danych bardziej inteligentnym i uczynić mój kod mniej ściśle powiązanym, czy rozsądne jest wyabstrahowanie każdej właściwości obiektu na inny poziom? Na przykład oczekuję, że każda właściwość będzie miała „wartość”, ale żeby skomplikować sprawę, interesuje mnie również, jakiej „etykiety” i „opisu” użyć, odnosząc się do niej w aplikacjach czytelnych dla człowieka. Bardziej interesujące jest to, jaki to jest „typ”, a także zdolność obiektu do walidacji samego siebie, jeśli jego właściwości składowe również mogą się walidować. Wydaje się więc, że właściwości większości obiektów mają ze sobą wiele wspólnego. Tak więc właściwość `$start_date` może w rzeczywistości być obiektem samym w sobie: właściwość klasy abstrakcyjnej { public $wartość = NULL; chroniona etykieta $; // Prosta etykieta, której można używać w formularzach użytkownika, raportach itp. protected $description; // Trochę szczegółów opisujących, co ta właściwość jest używana do chronionego $type; // Pomaga wybrać odpowiednią kontrolkę formularza HTML i zweryfikować dane wejściowe chronione przez użytkownika $regex; // Wyrażenie regularne do monitowania użytkownika o wprowadzenie i walidacji zwracanej wartości chronionej $unique = FALSE; // Jeśli TRUE, sprawdź duplikaty w warstwie trwałości protected $default_value; // Pytaj użytkownika podczas wprowadzania nowych wartości protected $HTML_form_element; // Który element formularza najlepiej pasuje do tego pola? itd.... } class data_początku extends property { ... funkcja public __construct(){ ... $this->label = 'Data rozpoczęcia'; // Może być wpisem i18n $this->description = 'Wprowadź datę rozpoczęcia kontraktu dla tego członka personelu'; // Może być wpisem i18n $this->type = 'VARCHAR(512)'; // Lepiej używać wymagań warstwy trwałości? $this->regex = '/^([0-9]{1,2})[/.-]([0-9]{1,2})[/.-]([0-9]{ 2,4})$/'; // data brytyjska $this->default_value = date('Y-m-d'); // Zależy od polityki biznesowej firmy $this->HTML_form_element= 'datepicker'; // Wybiera poprawny element HTML podczas automatycznego budowania formularzy ... } itd... } class staff { ... public function __construct(){ ... $start_date = new start_date(); ... } itd... } W poprzednich aplikacjach te powiązane rzeczy żyły w różnych miejscach; losowe zmienne globalne, kod z komentarzem, obiekty dekoratorów, plik konfiguracyjny, osadzony w HTML, tabela bazy danych, skrawek papieru. Sensowne jest zebranie wszystkich właściwości obiektów w jednym miejscu, ale czy jest to właściwy sposób?


title: Jak wyodrębnić operatory z produkcji gramatycznych do rozwiązywania konfliktów w parserze LALR?

text: Czy istnieje jakiś ustandaryzowany lub powszechnie akceptowany algorytm do wybierania operatorów w przypadku konfliktów zmiany/zmniejszenia w parserze LALR? Pytanie jest naiwne, mój problem nie polega na implementacji mojego rozwiązania, ale implementacja rozwiązania jest już szeroko stosowana. Dla shift operator jest kolejnym tokenem wejściowym, dla redukcji zależy to -- uważam wszystkie już odczytane symbole (dla danej produkcji) zadeklarowane jako operatory: * jeśli jest jeden -- jest to operator * jeśli jest więcej niż jeden -- Zgłaszam błąd gramatyczny * jeśli nie ma żadnego, używam tokena wejściowego jako operatora Więc na przykład: E ::= E + E E ::= E * E E ::= num w przypadku E + E | * num Biorąc pod uwagę pierwszą produkcję, przeczytałem `+`, a ponieważ jest to jedyny odczytany operator, wybrałem ten jako operator Reduce. `*` jest pierwszym tokenem na wejściu, więc służy jako operator zmiany. Ale czy mój algorytm jest poprawny (tj. taki sam jak zwykle używany dla parserów LALR)? Szczególnie martwi mnie moment, w którym mam więcej niż 1 operator w odczytanych tokenach. * * * ## Aktualizacja O co **NIE** tutaj pytam Nie pytam, jak rozwiązać konflikt zmiany/zredukować konflikt, gdy masz operatorów. Nie pytam jak ustawić pierwszeństwo dla operatorów. O co tu **pytam** pytam jak wydobyć operatory ze „strumienia” tokenów. Załóżmy, że użytkownik ustawił kilka reguł pierwszeństwa dla „+”, „-” i „*”. Stos to: `-` `E` `+` `E`, a wejście to `E`. Lub stos to „E”, a wejście to „*”. Jaki jest operator do redukcji w pierwszym przypadku? A w drugim? Czemu? _Stos to tak naprawdę cała prawa strona produkcji._


title: Obsługa błędów niestandardowych

text: Próbuję znaleźć najlepszy sposób obsługi błędów niestandardowych w mojej aplikacji. Opcja 1: if(expr) { } else { $_SESSION['error'] = "Jakaś wiadomość opisująca błąd"; } Opcja 2: if(expr) { } else { $_SESSION['error'] = 2; } W opcji 1 ten sam błąd może zostać powtórzony w wielu sytuacjach. Jeśli kiedykolwiek zdecyduję się zmienić wiadomość, będę musiał przekopać się przez mój kod i znaleźć każde wystąpienie. W opcji 2 podaję wartość liczbową, która mogłaby odnosić się do głównej listy błędów. Wydaje się, że rozwiązuje to problem związany z opcją 1, ale sprawia, że kod jest trudniejszy do odczytania. Co powinienem zrobić?


title: Zmienianie nazw C++ i rozwiązywanie symboli linkera

text: Schematy zmiany nazw kompilatorów C++ są różne, ale są one publicznie udokumentowane. Dlaczego nie tworzy się linkerów do dekodowania zniekształconego symbolu z pliku obiektowego i próby znalezienia zniekształconej wersji za pomocą którejkolwiek z konwencji zniekształcania w innych plikach obiektowych/bibliotekach statycznych? Gdyby linkery mogły to zrobić, czy nie pomogłoby to złagodzić problemu z bibliotekami C++, które muszą być ponownie kompilowane przez każdy kompilator, aby mieć symbole, które można rozwiązać? Lista dokumentacji dotyczących maglowania, które znalazłem: * Konwencja maglowania MSVC++ * GCC un-mangler * Dokumentacja funkcji un-mangling MSVC++ * Klasa mangle LLVM


title: Problem z My.Settings przy użyciu Visual Basic

text: Dla mojego projektu A2 Computing stworzyłem grę używając Visual Basic. W sekcji liderów użyłem funkcji My.Settings do przechowywania wyników po zamknięciu gry, ale tylko jeden lub dwa faktycznie zostały zapisane. Mój nauczyciel nie wie i nie mogę znaleźć niczego przydatnego po wyszukiwaniu problemu w Google


title: Jak na wielbłądach, gdzie kolejne słowa mają liczby?

text: Zastanawiam się tylko, czy ktoś ma dobrą konwencję do naśladowania w tej narożnej sprawie. Naprawdę używam Javy, ale doszedłem do wniosku, że ludzie z C# również mogą mieć dobry wgląd. Powiedzmy, że próbuję nazwać klasę, w której dwa kolejne słowa w nazwie klasy są numeryczne (zauważ, że to samo pytanie można zadać o nazwach identyfikatorów). Nie mogę uzyskać świetnego przykładu, ale pomyśl o czymś w rodzaju „wartości 16-bitowej IEEE 802”. Łączenie kolejnych akronimów jest możliwe, jeśli akceptujesz nazwy klas, takie jak `HttpUrlConnection`. Ale poważnie skłania mnie to do myślenia o nazwaniu klasy `IEEE80216BitValue`. Gdybym miał wybierać, powiedziałbym, że jest to nawet gorsze niż `IEEE802_16BitValue`, co wygląda na poważny błąd. W przypadku małych liczb rozważyłbym `IEEE802SixteenBitValue', ale to nie skaluje się tak dobrze. Czy ktoś tam ma konwencję? Wygląda na to, że wytyczne Microsoft dotyczące nazewnictwa są jedynymi, które opisują nazewnictwo akronimów wystarczająco szczegółowo, aby wykonać zadanie, ale nikt nie adresował liczb w nazwach klas.


title: Nowoczesny analog DDD (Data Display Debugger)

text: I jeśli istnieją wizualne aplikacje do debugowania kodu w popularnych językach (takich jak C, Pytho, Javascript). Przez wizualizację nie mam na myśli debuggera z interfejsem użytkownika, który jest dołączony do prawie każdego IDE, raczej mówię o debuggerze, który może wizualizować dane i proces ich zmiany w czasie. Np. wyobraź sobie, że implementujesz algorytm sortowania. Byłoby bardzo fajnie mieć aplikację, która zapisywałaby stany tablicy w każdej iteracji, a następnie umożliwiałaby łatwe przechodzenie między stanami z dobrą animacją wstawiania/usuwania i przesuwania. Rozumiem, że może nie ma do tego ogólnego zastosowania. Insetead Spodziewam się środowiska (takiego jak R lub MatLab), które można wykorzystać do łatwego tworzenia takich aplikacji debugujących.


title: Szukasz opinii na temat mojego podejścia do implementacji algorytmu

text: Niedawno współpracowaliśmy z matematykiem, aby zbudować dla nas algorytm. Algorytm analizuje dane kliknięć i stale aktualizuje dane powiązane z użytkownikiem, treścią i kategorią treści, a następnie kojarzy użytkownika z odpowiednią treścią. Powiedziawszy to, nigdy wcześniej nie implementowałem algorytmu, ale zgaduję, że nasze obecne środowisko (PHP, MySQL) nie jest całkowicie odpowiednie do ciągłego przetwarzania i aktualizacji danych. **Szukasz opinii na temat tego, czy poniższe podejście jest właściwe?** * Napisz algorytm w Javie (lub innym skompilowanym języku), aby uzyskać najlepszą wydajność. * Przechowuj dane użytkowników, treści i kategorii na serwerze NoSQL (lub użyj memcache). * Użyj Gearmana (lub odpowiednika), aby przesłać dane kliknięcia/użytkownika do serwera zadań. * Uruchom zadania na oddzielnym serwerze roboczym, który zawiera algorytm. * Zaktualizuj dane użytkownika, treści, kategorii. Jeśli to nie jest na dobrej drodze, czy możesz wyjaśnić, dlaczego tak było?


title: Jak java rozwiązuje nazwy klas w wielu plikach jar?

text: Niedawno odkryłem, że jeden z moich projektów Maven ma ponad 100 zależności jar. FWIK archiwum zip nie ma w ogóle indeksu, więc powinno przeskanować cały zip, aby określić, czy zawiera określoną ścieżkę. Ale zauważyłem, że Java rozwiązuje nazwy klas w tak wielu słoikach dość szybko, dlaczego?


title: Jaki byłby dobry zestaw pierwszych problemów programistycznych, które pomogłyby absolwentom bez CS nauczyć się programowania?

text: Chcę pomóc przyjacielowi w nauce programowania (NIE pytam o idealny pierwszy język do nauki programowania). Miała głównie wykształcenie matematyczne (specjalizacja z matematyki zarówno na studiach licencjackich, jak i magisterskich) i miała wcześniej elementarną ekspozycję na programowanie (w postaci symulacji Matlab / operacji na macierzach w C itp.) - ale nigdy nie była wymagana do projektowania /wykonaj złożone projekty. Interesuje ją przede wszystkim nauka C/C++ - więc, biorąc pod uwagę jej wykształcenie, jaki byłby zestaw odpowiednich problemów, które zainteresowałyby ją jednocześnie?


title: Konwertuj nazwy plików na ich sumę kontrolną przed zapisaniem, aby zapobiec duplikatom. Czy to mądra rzecz?

text: TL;DR:co mówi tytuł * * * Zajmuję się tworzeniem jakiejś tablicy graficznej w PHP. Myślałem o zmianie nazwy pliku każdego obrazu na jego sumę kontrolną przed jego zapisaniem. W ten sposób mógłbym uniknąć duplikatów. Wiem, że to nie zadziałałoby w przypadku dwóch takich samych obrazów, ale różniących się rozmiarem lub poziomem kompresji lub cokolwiek innego, ale ta metoda pozwoliłaby na wczesne sprawdzenie. Co mnie wkurza, to to, że nigdy nie widziałem tej metody nigdzie zaimplementowanej, więc zastanawiałem się, czy jest w tym jakiś haczyk. Może po prostu bardziej wydajne jest zachowanie oryginalnej nazwy pliku i przechowywanie skrótu w DB? Może cała metoda jest po prostu nieprzydatna i moje pytanie jest dyskusyjne? Co myślisz? Na marginesie, tak naprawdę nie rozumiem, jak obliczane są haszy, więc zastanawiałem się, **czy** moje pierwsze pytanie się sprawdza, czy byłoby możliwe obliczenie podobieństwa, że dwa obrazy są podobne, porównując hasze (levenshtein lub coś w tym rodzaju).


title: Dlaczego Today() jest przykładem nieczystej funkcji?

text: Wygląda na to, że czytając coś takiego jak ten artykuł w Wikipedii o „czystych funkcjach”, wymieniają `Today()` jako przykład nieczystej funkcji, ale wydaje mi się to całkiem czyste. Czy to dlatego, że nie ma formalnego argumentu wejściowego? Dlaczego rzeczywista pora dnia nie jest traktowana jako "dane wejściowe do funkcji" w takim przypadku, jeśli podałeś jej te same dane wejściowe, tj. wykonałeś `today()` dwa razy w tym samym czasie lub cofnięto się w czasie, aby wykonać ją ponownie (może hipotetyczny :) ), wyjście byłoby w tym samym czasie. `Today()` nigdy nie daje losowej liczby. zawsze podaje porę dnia. Artykuł w Wikipedii mówi „w różnych momentach da to różne wyniki”, ale to tak, jakby powiedzieć, że dla różnych `x` `sin(x)` dadzą różne proporcje. A „sin(x)” jest ich przykładem czystej funkcji.


title: Wbudowany serwer internetowy a zewnętrzny serwer internetowy

text: Myślałem więc o stworzeniu aplikacji internetowej w Lisp lub innym języku funkcjonalnym i myślałem o osadzeniu serwera internetowego w aplikacji (aby moja aplikacja obsługiwała żądania HTTP). Nie widzę z tym żadnych problemów, jednak jestem nowy w tworzeniu aplikacji internetowych (a w wielkim schemacie także programowaniu). Czy istnieją jakieś wady obsługi żądań HTTP w programie zamiast korzystania z serwera WWW? Czy są jakieś korzyści?


title: Jak zrobić modułową witrynę ASP.NET MVC?

text: Jestem na etapie planowania, aby system intranetowy dla pracowników został zbudowany z ASP.NET MVC 4. Chcielibyśmy, aby witryna składała się z oddzielnych „modułów”, z których każdy zapewnia inną funkcję: wiadomości, zmiany płac itp. .Chciałbym, aby te moduły mogły być włączone lub wyłączone w czasie kompilacji. Strona główna wyświetli jakiś rodzaj nawigacji, która będzie prowadzić do każdego załadowanego modułu. Jak dotąd jest to łatwe, ale nie chcę, aby funkcja nawigacji musiała wcześniej wiedzieć o modułach. Innymi słowy, chcę, aby moduły były dynamicznie wykrywalne; Chcę mieć możliwość napisania kodu dla nowego modułu, a następnie dodania łącza do paska nawigacyjnego bez zmian kodu w dowolnym innym miejscu źródła. Każdy moduł powinien w jakiś sposób rejestrować się w pasku nawigacyjnym i - co ważniejsze - należy to zrobić dla każdego modułu podczas jego ładowania. Uważam, że wyklucza to korzystanie z obszarów MVC, ponieważ są one zaprojektowane na wypadek, gdy układ strony jest wcześniej znany. Wydaje się, że MEF może być właściwe, chociaż wydaje się, że ludzie odnieśli mieszany sukces w łączeniu MEF z MVC. Czy MEF jest rzeczywiście właściwą drogą, czy istnieje lepszy sposób na osiągnięcie tego, czego potrzebuję?


title: Jak obsługiwać dane czasu rzeczywistego z perspektywy bazy danych?

text: Mam na myśli pomysł, ale **nadal myli mi obszar bazy danych**. Wyobraź sobie, że **Chcę pokazywać dane w czasie rzeczywistym** , a używając jednej z najnowszych technologii przeglądarek ( _gniazda sieciowe_ \- nawet używając starszych przeglądarek) bardzo łatwo jest pokazać wszystkim obserwatorom (przeglądarce użytkownika), co robią wszyscy. **Remy Sharp** ma przykład na temat prostoty. Ale nadal nie otrzymuję części dotyczącej bazy danych, **jak mam karmić** , wyobraźmy sobie (używając Remy game Tron), że chcę zapisać **ścieżkę dla każdego podłączonego użytkownika** w bazie danych i jeśli klient chce zobaczyć, co się dzieje z **5 sekundowym opóźnieniem** , zobaczy to, nie tylko 5 sekund do tego momentu, ale **kontynuacja w czasie** ... jak mogę zapytać o taki DB ? SELECT x, y FROM uruchom WHERE czas >= DATEADD(sekunda, -5, data uruchomienia); czy zalecana ścieżka nie jest właściwa? i ciągnąc to xw czasie x ... to nie jest prawdziwy plik danych, prawda? Jeśli ktoś może mi pomóc zrozumieć punkt widzenia Bazy Danych, byłbym bardzo wdzięczny.


title: Czy firma często ma własną definicję tytułów zawodowych, takich jak architekt oprogramowania?

text: Ostatnio jestem bardzo zdezorientowany swoją pozycją w firmie. Miesiące temu ta firma zaproponowała mi stanowisko Architekta Oprogramowania i się zgodziłem. Minął jednak rok i zdałem sobie sprawę, że tytuł „architekta oprogramowania” w tej firmie jest prawie zupełnie inny niż ten, który znałem i ten, który widzę, jak ludzie tutaj dyskutują. Poniżej znajduje się kilka elementów, za które odpowiada architekt oprogramowania. Pochodzą z tego posta: Architekt systemów powinien: 1. Określić architekturę wysokiego poziomu 2. Uczestniczyć w przeglądach kodu 3. Zatwierdzać używane technologie 4. Pomagać programistom w ich wysiłkach związanych z kodowaniem 5. Utrzymywać i monitorować harmonogram rozwoju 6. Produkować Artefakty SA, takie jak diagramy UML, wykresy Gantta i tym podobne. Ale jako „architekt oprogramowania” w tej firmie, mogę dotknąć tylko szóstego elementu wraz z dużą ilością kodowania. Tak więc ten tytuł w mojej firmie bardziej przypomina starszego programistę niż architekta oprogramowania. Moje pytania to: 1\. Czy firmy z branży IT często mają własną definicję tytułów pracy? 2\. Jeśli odpowiedź na pytanie 1 brzmi „Nie”, to czy jest to legalne dla firmy? **Aktualizacja** Powodem, dla którego ten problem stał się ostatnio problemem, jest to, że nasz General Manager wydaje się chcieć, abym był odpowiedzialny za projekt, który jest rozwijany przez wielu członków, ale **nigdy** nie upoważnia mnie do kierowania innymi członków zespołu lub koordynację między zespołami (koordynacja między zespołami jest koniecznością, zwłaszcza gdy tworzymy pakiety oprogramowania). Zamiast tego po prostu przyszedł do mnie i obwiniał mnie, gdy projekt nie poszedł zgodnie z oczekiwaniami. Chociaż zaprojektowałem wszystkie interfejsy i klasy niektórych modułów, aby inni członkowie działały, i dużo kodowałem, pchanie i gwarantowanie postępu jest poza moją odpowiedzialnością, zwłaszcza gdy ten Architekt Oprogramowania nie jest zwykłym, który widzimy, uważam, że jest to niesprawiedliwe Dla mnie!


title: Czy język PHP "list()" konstruuje złą konwencję?

text: PHP obsługuje konstrukcję języka `list()`, która w skrócie pozwala na zwrócenie wielu wartości z funkcji, a następnie dołączenie ich do różnych zmiennych, np.: function myBigReturn(){ return array("foo", "bar") ; } lista($fooer, $barer) = myBigReturn(); echo $fooer; // echo "foo" echo $barer; // echo "bar" Nie udało mi się znaleźć wielu informacji o takiej konstrukcji języka i jestem ciekawy - czy użycie konstrukcji PHP `list()` jest uważane za złą konwencję kodowania? Czy są jakieś poważne artykuły/literatura na ten temat?


title: Strategia drukowania raportów wpf i mvvm

text: Opracowuję aplikację WPF i potrzebuję wyjaśnienia na temat drukowania w WPF i MVVM (używam MVVM-Light). Chcę tworzyć standardowe raporty dla mojej aplikacji i nie chcę pisać każdego z nich od zera. Ale chcę napisać to rozwiązanie sam, bez takich rzeczy jak raporty kryształowe itp. Ale jestem oczywiście otwarty na inne przykłady open source. 90% moich raportów będzie generowanych ze źródeł elementów datagrid. Chcę mieć stopkę i nagłówek raportu, a następnie „rekordy”, które są stronicowane w sekcji treści. **Mój pomysł jest taki:** użyj Fixed document jako opakowanie raportu (z właściwościami nagłówka i stopki), użyj widoku listy dla rekordów w treści raportu i generuj raport do XPS, który jest otwierany w przeglądarce dokumentów, aby użytkownik mógł przejrzeć i wydrukować itp. Ale nigdy wcześniej nie tworzyłem raportów z WPF i wygląda na to, że istnieje wiele opcji i brak jasnych najlepszych praktyk. Szukam sugestii lub porad, w jakim kierunku iść od kogoś z doświadczeniem w tworzeniu niestandardowych raportów w WPF i utrzymywaniu MVVM. Jaka była twoja strategia?


title: Czy istnieje wzór, który pomoże w tej strukturze danych?

text: Robię projekt java. Moja główna struktura zawiera 2 listy z elementami typu A drugi typ B. Sam B zawiera listę obiektów, które mogą zawierać elementy A. Musi być tak, że gdy element z listy A jest usuwany musi być usunięty ze wszystkich podelementów na liście B. również jeśli ewentualny członek listy A zostanie dodany do B, powinien być również dodany do A. A także potrzebuję sposobu na znalezienie obiektów nadrzędnych zawierających A. Jak dotąd mam "działającą" implementację - używając wielu pętli. Zastanawiam się - czy możesz zaproponować schematy, które pomogą mi w tym zadaniu? * * * więcej szczegółów. Myślę, że mój główny problem sprowadza się do tego, że mam obiekty A, które mają wielu rodziców. A kiedy dodaję/usuwam jednego rodzica, muszę dostosować innych rodziców. Nic na to nie poradzę, ale wierzę, że taki problem jest już rozwiązany. * * * dla wyjaśnienia: mam główną `List<A>` , a każda `B` zawiera `List<A>` Kiedy A jest usuwane z głównej listy, musi być usunięte ze wszystkich B. Ale nie wtedy, gdy jest usuwany z B. Istotne jest, aby wszystkie A użyte w aplikacji były obecne na głównej liście.


title: Jakie są najlepsze zasoby do nauki o współbieżności i aplikacjach wielowątkowych?

text: Zdałem sobie sprawę, że mam ogromną lukę w wiedzy, jeśli chodzi o aplikacje wielowątkowe i programowanie współbieżne. W przeszłości omówiłem kilka podstaw, ale większość z nich wydaje się wymazana z mojego umysłu i zdecydowanie jest to dziedzina, o której chcę i potrzebuję mieć większą wiedzę. Jakie są najlepsze zasoby do nauki o tworzeniu aplikacji współbieżnych? Jestem osobą bardzo praktyczną, więc jeśli wspomniana książka zawiera konkretne przykłady, tym lepiej, ale jestem otwarta na sugestie. Osobiście wolę pracować w pseudokodzie lub C++, a skłonność do tworzenia gier byłaby najlepsza, ale nie wymagana.


title: jaka jest różnica między testem mokrym a testem obciążeniowym?

text: Czy ktoś może wyjaśnić różnicę między testami wygrzewania a testami obciążeniowymi? Poszukałem ich w Google i stwierdziłem, że obaj zamierzają przetestować oprogramowanie poza jego granice. Czy jest to właściwe dla obu strategii testowania?


title: jak zaprojektować obiekty wokół tego wymagania biznesowego?

text: Jest to wymóg biznesowy: „Pakiet wakacyjny (np. Pakiet wakacyjny New York NY) może być oferowany na różne sposoby w zależności od miasta pochodzenia: * Z New Delhi do NY * **Z Bombaju do NY** * Sam NY (Land pakiet ) (pogrubiony oznacza wybór domyślny) **a.** i **b.** Użytkownik może polecieć z New Delhi lub Bombaju do Nowego Jorku. **c.** NY to pakiet lądowy, gdzie użytkownik może dotrzeć NY jest samodzielnym pakietem wakacyjnym. " Załóżmy, że mam klasę, która reprezentuje **HolidayPackage** , **Destination** (aka City). public class HolidayPackage{ Destination holidayCity; ArrayList<BaseHolidayPackageVariant> warianty; BaseHolidayPackageVariant defaultVariant; } public abstract class BaseHolidayPackageVariant { private Integer variantId; prywatny Pakiet Wakacyjny Pakiet Wakacyjny; prywatne String holidayPackageType; } public class LandHolidayPackageVariant extends BaseHolidayPackageVariant{ } public class FlightHolidayPackageVariant extends BaseHolidayPackageVariant{ private Destination originCity; } Jaką strukturę/obiekty danych powinienem zaprojektować do obsługi: * opcje * wartość domyślna w ramach tych opcji Uwaga dodatkowa: Pakiet wakacyjny może być oferowany na różne sposoby w zależności od wyboru hotelu. Chciałbym podążać za projektem, który mogę wykorzystać do obsługi tego przypadku użycia w przyszłości. To jest projekt backendu, który mam na myśli.


title: Czy szkolenie firmy w zakresie korzystania z DVCS wywodzącego się z nastawienia CVCS jest tak trudne, jak mogłoby się wydawać?

text: Tak więc przygotowuję się do rozważenia wyniku szkolenia wielu ludzi (>25) w używaniu **Mercurial** ze scentralizowanego sposobu myślenia. Zrobiłem to z **indywiduami** i odniosłem sukces, chociaż czas zainwestowany w każdą z nich był inny i większość z nich była zarówno proaktywna, jak i otwarta na spróbowanie czegoś nowego. Zastanawiałem się, czy jest tu ktoś z doświadczeniem w prowadzeniu takiego szkolenia dużej grupie ludzi ** bo chciałabym dowiedzieć się, jakie są nakazy, a czego nie... oczywiście byłoby to bardziej zorientowane na radzenie sobie z tych odpornych na zmiany** , a nie przychodzi mi do głowy powiedzieć im, żeby unikali poleceń mapujących ściągi, jak sugeruje Joel Spolsky.


title: Dlaczego tak trudno jest zmniejszyć podatność C na przepełnienia bufora?

text: Robię kurs na studiach, gdzie jednym z laboratoriów jest wykonywanie exploitów przepełnienia bufora w kodzie, który nam przekazują. Obejmuje to proste exploity, takie jak zmiana adresu zwrotnego dla funkcji na stosie w celu powrotu do innej funkcji, aż do kodu, który zmienia rejestr programu/stan pamięci, a następnie powraca do wywołanej funkcji, co oznacza, że wywołana funkcja jest całkowicie nieświadoma exploita. Zrobiłem kilka badań na ten temat i tego rodzaju exploity są używane praktycznie wszędzie, nawet teraz, w takich rzeczach, jak uruchamianie homebrew na Wii i uwolnienie jailbreak na iOS 4.3.1 Moje pytanie brzmi, dlaczego ten problem jest tak trudny do naprawienia? Oczywiste jest, że jest to jeden z głównych exploitów służących do zhakowania setek rzeczy, ale wydaje się, że można go dość łatwo naprawić, po prostu obcinając wszelkie dane wejściowe poza dozwoloną długość i po prostu oczyszczając wszystkie dane wejściowe, które pobierasz. **EDYCJA: Inna perspektywa, którą chciałbym rozważyć - dlaczego twórcy C nie rozwiązują tych problemów, ponownie wdrażając biblioteki?**


title: Sugestie dotyczące usprawnienia przepływu pracy w małym zespole (CI / Deployment)

text: Chciałbym poprawić przepływ pracy i architekturę mojego zespołu. W tej chwili mamy serwer deweloperski LAMP, na którym każdy członek zespołu ma podkatalog. Pracujemy bezpośrednio w tym katalogu przez LAN. Istnieje również katalog "release", gdy jesteśmy gotowi do przesłania przez FTP na serwer produkcyjny. Używamy prywatnego repozytorium github, które służy jako scentralizowane repozytorium. Przykład aktualnego codziennego przepływu pracy programisty: Wybierz historyjkę użytkownika do pracy po szybkim codziennym spotkaniu Otwórz gałąź git nazwaną tak jak historyjka użytkownika Pracuj, zatwierdź zmiany Prześlij na github Kiedy zdecyduję się na wdrożenie, ściągam zmiany, wykonuję przegląd kodu, zmiana potrzebnych zmiennych do produkcji i przesyłanie przez FTP. Jeśli dokonano zmian w bazie dev, replikuję je również na bazę danych serwera produkcyjnego. Jakieś pomysły od czego powinienem zacząć poprawiać tę sytuację? Bieżące problemy: * Członkowie zespołu nie mogą łatwo pracować z domu, ponieważ musieliby edytować bezpośrednio na serwerze deweloperskim (problemy z lagami) * Proces wdrażania jest okropny (ręczna zmiana zmiennych i przesyłanie FTP do produkcji) EDYCJA: Będę spróbuj dodać lepsze pytania. * Konfigurowanie podkatalogów dla każdego dewelopera na wspólnym serwerze deweloperskim: dobry pomysł czy nie? Możliwa alternatywa: każdy programista konfiguruje swoje własne środowisko programistyczne (używając WAMP lub podobnego) i wysyła na serwer testowy. * Jeśli chodzi o aspekt wdrażania, uważam, że ręczna zmiana zmiennych konfiguracyjnych i FTP do produkcji to zły pomysł. Możliwa alternatywa: ustawienie git na serwerze produkcyjnym, ustawienie plików konfiguracyjnych w .gitignore (utrzymaj je ręcznie bezpośrednio na serwerze produkcyjnym) i wpychanie zmian przez git. * Czy w przypadku zdalnych programistów powinni oni replikować środowisko programistyczne (ponownie, WAMP lub podobne), ale pracować na bazie danych serwera programistycznego? Myślę, że to lepsze niż kopiowanie bazy danych na lokalne maszyny.


title: Odmów korzystania z mojej biblioteki, aby konkurować z określoną firmą

text: Opracowuję bibliotekę do odczytu/zapisu formatu pliku programu stworzonego przez określoną firmę. Chłopaki z tej firmy byli tak mili, że dostarczyli mi dokumentację do swojego formatu, za co jestem bardzo wdzięczny. Zamierzam wydać bibliotekę jako open-source na licencji „pochodzącej” z MIT, z tą różnicą, że biblioteki nie wolno używać do tworzenia programu, który mógłby konkurować z oryginalnym programem, jako wyraz mojej wdzięczności dla Spółka. O co pytam: czy dodanie tej zasady do licencji jest prawnie możliwe?


title: Dobry sposób na naukę rozwiązywania pytań na InterviewStreet

text: > **Możliwe powielenie:** > Jak dostosować się do pytań prowokacyjnych przed rozmową kwalifikacyjną? InterviewStreet to nowa firma, która zasadniczo działa jako filtr dla firm, aby znaleźć programistów, którzy potrafią kodować. Moim problemem jest to, że moja matematyka jest dość słaba i chciałbym ją przestudiować, nawet jeśli jest od podstaw, aby móc rozwiązać pytania takie jak to, które można znaleźć na ich stronie: „Znajdź nie całki dodatniej rozwiązania równań (1/x) + (1/y) = 1/N! (czytaj 1 przez n silnia) Drukuj pojedynczą liczbę całkowitą będącą liczbą dodatnich rozwiązań całkowych modulo 1000007` Teraz proszę NIE zamieszczać odpowiedzi na to pytanie, jest ona pobierana bezpośrednio z InterviewStreet i nie powinna być tutaj publikowana. To nie jest odpowiedź, której szukam w tym wątku. To, o co pytam, to bardziej fundamentalne pytanie, na które prawdopodobnie mogą odpowiedzieć niektórzy hakerzy ze społeczności SO. Jak przygotować się na takie pytanie? Jakie zasoby są dla mnie dostępne do nauki/nauczenia się, jak rozwiązywać tego typu problemy? Czy dotyczy to otwartych kursów MIT? Khan academy? Jakieś szczególne książki? Nie jestem nawet pewien, od czego zacząć rozwiązywanie powyższego problemu i chciałbym dowiedzieć się, jakie kroki mogę podjąć, aby to zrobić.


title: Czy edytor tekstu podpisuje pliki?

text: Ponieważ obrazy zawierają dane EXIF, które dostarczają informacji o tym, gdzie i jak są tworzone, czy edytory tekstu dołączają tego rodzaju opisowe szczegóły do plików kodu? Na przykład używam Cody do moich prac programistycznych. Czy Coda podpisuje utworzone przez siebie pliki? Czy można dowiedzieć się, kto był autorem dwóch różnych projektów, po prostu zaglądając do wnętrza plików?


title: Jak trudno jest nauczyć się Pythona?

text: Jestem na liście korepetytorów na mojej uczelni _(dla PHP, MySql, CSS, itp.)_, ale ktoś skontaktował się ze mną z prośbą o nauczenie ich Pythona na poziomie podstawowym. Czy byłbym w stanie wystarczająco szybko wstać i móc **nauczyć tego kogoś innego?** (kodowałem w PHP, Javie, C#, Javascript, jQuery, odrobinie C++ i ASP.NET. I' jestem studentem informatyki. Właśnie skończyłem trzeci rok.)


title: W jaki sposób podrzędny automat stanów może zrezygnować z kontroli z powrotem do nadrzędnego automatu stanów?

text: Moja maszyna stanów najwyższego poziomu ma pewne stany i krawędzie. Nazwę to nadrzędną maszyną stanową. A ----> B ----> C Dowolny stan w nadrzędnej maszynie stanów również może być maszyną stanów. Nazwę te dzieci maszynami stanowymi. ___________ / \ A ----> | B0->B1->B2 | ----> C \____________/ Jeśli nadrzędny automat stanów przechodzi z A do B, to automat stanów B przejmuje kontrolę. W jaki sposób po zakończeniu działania B powinien przekazać kontrolę nadrzędnemu automatowi stanu i przejść do stanu C? Jakiego wzorca projektowego używasz? Jeśli się zastanawiasz, mam podrzędne automaty stanów w nadrzędnych automatach stanów, ponieważ mój dokładny projekt jest dość złożony i naturalne jest, aby zawrzeć wewnętrzne działanie stanu podrzędnego.


title: wybór funkcjonalnej platformy językowej dla nowego projektu

text: Zajmuję się kodowaniem od kilku lat i nie wierzę, że mam jeszcze pełną wiedzę w tej pracy. Moje doświadczenie obejmuje przede wszystkim obszary związane z C# z przyzwoitą wiedzą na temat Silverlight i Asp .Net MVC. Zwykle używam serwera Sql i Postgresa do normalnych zadań związanych z RDBMS z Mybatis lub LinqtoSql jako ORM (oraz Cassandra również dla NoSql). Biorąc pod uwagę to tło, zamierzam zbudować nowy projekt, który jest normalną aplikacją przy użyciu ekranów bazy danych i interfejsu użytkownika. Jest to dość duży projekt, który planujemy wdrożyć jako produkt. W ostatnim czasie widzę wiele szumów związanych z programowaniem funkcjonalnym, takim jak Haskell i F#. Zastanawiam się \- czy warto budować nowy system przy użyciu Haskella \- czy po prostu trzymać się zwykłego modelu budowania aplikacji przy użyciu Silverlight/Prism z warstwami podobnymi do architektury cebulowej Rozumiem korzyści z pozostania przy tym samym tle technologicznym, co zawsze dobrze jest pracować na znanej technologii. Słyszałem też, że przechodząc w stronę języka funkcjonalnego, takiego jak Haskell, otrzymujemy czystszy kod, lepszą testowalność itp. Czy naprawdę warto rozważyć przejście na budowanie nowych systemów w Hasekll? A może to jeszcze nie zostało sprawdzone w środowiskach produkcyjnych? Mówiąc najprościej, czy byłbym bezpieczny, gdybym zbudował nowy projekt przy użyciu Haskella i mojej preferowanej bazy danych, czy w tym momencie wybór Haskella jest zbyt ryzykowny. Każda pomoc jest doceniana. Edycja: obejrzałem już kilka innych wątków, takich jak poniższe, a także kilka innych, ale nie otrzymałem ostatecznej odpowiedzi. Wybór funkcjonalnego języka programowania


title: W jaki sposób jednoosobowy niezależny dostawca oprogramowania zajmuje się badaniem patentów na oprogramowanie? Jakie badanie due dilligence jest wymagane?

text: Chciałbym sprzedawać oprogramowanie, ale obawiam się naruszenia patentów na oprogramowanie. Co powinienem zrobić/zbadać przed napisaniem kodu?


title: Przedstawiamy Fowler's Table Data Gateway do refaktoryzacji źle zaprojektowanych systemów

text: Zajmuję się tworzeniem aplikacji, która obecnie ma około 150 000 linijek kodu. Poprzedni deweloper nie stosował tak naprawdę żadnej dyscypliny podczas pisania kodu. Aplikacja jest w produkcji, ale jest stale rozwijana. Przeczytałem książkę Martina Fowlera (Wzorce architektury aplikacji korporacyjnych) i mówi ona o 'Transaction Scipt' i 'Data Access Objects'. Są to używane wzorce, tj. istnieje klasa o nazwie Person, która zawiera wszystko, co jest związane z Person, oraz klasa o nazwie Order ze wszystkim, co jest związane z Orderem. Funkcje nie nadają się do ponownego użycia, ponieważ zawierają wszystko, tj. logikę dostępu do danych, logikę biznesową itp. Na przykład Person.GetPerson połączy się z bazą danych, znajdzie osobę, sprawdzi wiek osoby, uzyska wszystkie zamówienia powiązane z tą osobą itp. Zastanawiam się nad wprowadzeniem tego, co Martin Fowler nazywa bramą danych tabeli. Widzę to jako długoterminowy projekt refaktoryzacji. Problem w tym, że będzie to oznaczać niespójność na początek, tj. logika dostępu do danych będzie zawarta w nowym Gatewayu, ale także w klasach Transaction Script (gdzie umieścił to drugi deweloper)? Czy to zły pomysł, by iść wbrew oryginalnemu stylowi kodowania programistów?


title: Czy istnieje badanie porównawcze zużycia pamięci przez środowiska uruchomieniowe języków programowania, skorelowane z ekspresywnością i współczynnikami błędów produkcyjnych?

text: Istnieje wiele badań porównawczych i dostępnych online, jeśli chodzi o wydajność środowiska uruchomieniowego aplikacji zbudowanych w tym lub innym języku. Niektóre są kierowane przez korporacje, inne akademickie, inne to po prostu osobiste raporty z eksperymentów. Otrzymujemy również przyzwoity udział badań porównawczych dotyczących skutków ubocznych języka programowania i jego oprzyrządowania, takich jak: * czasy budowy, * prawdopodobieństwo wykrycia błędów w postprodukcji, * siła ekspresji, * itp... Jednak mam ostatnio byłem coraz bardziej przybity zużyciem pamięci przez moje programy bardziej niż cokolwiek innego. Może to wynikać z faktu, że chociaż prawo Moore'a jest po naszej stronie w kwestii surowej wydajności, zdaliśmy sobie sprawę, że inne wąskie gardła mają większe znaczenie. To i nie mam tendencji do częstego aktualizowania mojego sprzętu, a mam kilka "starych" (czytaj 2005-2006 3,6 GHz Pentium 4 z 4 GB pamięci RAM), które w dzisiejszych czasach są trudne do użycia w dużych aplikacjach bez wymagający ode mnie wielkich trudów, aby wycisnąć z nich jak najwięcej soku (wybór systemu operacyjnego, interfejsu użytkownika, dostrajanie usług i demonów, wybór aplikacji do użycia w zadaniu lub innym...). Szczerze mówiąc czasami odpalam `top` lub `procexp` i płaczę na widok pamięci używanej przez najbardziej niewinne programy. Mogę rozwiązać ten problem, podążając w kierunku wymienionym powyżej, i zasadniczo próbując ograniczyć siebie i programy, których używam (z tego powodu, jak sądzę, mam wielką miłość do programów CLI), ale nie mogę też powstrzymać się od myślenia że może robimy to źle. ### Nowoczesne narzędzia dla nowoczesnych potrzeb Oczywiście języki wyższego poziomu są prawdopodobnie lepsze i uzasadniają swoją wartość martwą. Niektóre wybory projektowe zostały dokonane z dobrych (lub rzekomo dobrze zamierzonych) powodów w tym czasie w wielu łańcuchach narzędzi. Współdzielone biblioteki, modele pamięci, preprocesory, systemy typów itp. Ale niektóre mogą być bardziej opłacalne niż inne z naszym nowoczesnym sprzętem i byłbym ciekaw, aby przeczytać kilka poważnych badań na ten temat. Więc moje pytanie brzmi, czy jest jakiś dodatek do Benchmarks Game i innych, które skupiają się na porównaniu podstawowego zużycia pamięci środowiska uruchomieniowego języków? A nawet dalej, czy istnieją jakieś badania, które porównują to z innymi parametrami (podobnie jak ten artykuł, na przykład dla innych kryteriów, również opartych na grze Benchmarks)?


title: Jak należy zaimplementować wstrzykiwanie zależności dla klienta geokodującego, który agreguje różne implementacje dostawcy współrzędnych?

text: Jestem nowy w DI i chciałbym wiedzieć, w jaki sposób DI można wykorzystać do rozwiązania tego problemu. Jeśli mam `ILatLongLocation`, który implementuje `Latitude` i `Longitude`, to mając dwa z nich mogę utworzyć `Distance` przy użyciu różnych algorytmów, ale mogę też rozsądnie wybrać jeden z nich jako „najlepszy” algorytm w czasie projektowania bez utraty snu. Ponieważ jednak użytkownicy rzadko wprowadzają współrzędne fizyczne, być może będę musiał zamiast tego porównać kody pocztowe lub coś podobnego. Teraz, aby rozwiązać kody pocztowe na współrzędne, mógłbym zastosować naiwny algorytm, który używa konkatenacji ciągów itp., aby z grubsza odgadnąć współrzędne fizyczne, mógłbym wybrać losowy zestaw współrzędnych itp. Ale najprawdopodobniej, Będę musiał rozwiązać kody pocztowe, używając jakiegoś rodzaju kodów pocztowych mapujących bazy danych na współrzędne. Więc będąc nowym w DI, chciałbym wiedzieć, czy poniższe jest rozsądnym zastosowaniem DI i/lub czy nad tym się zastanawiam. `ILocatable` ma `ILatLongLocation` `ILocatableProvider<T>: ILocatable` ma `T RawLocatable` i może zwrócić `ILatLongLocation`. `IZipCodeLocatableProvider: ILocatableProvider<string>` ma ciąg RawLocatable i zwraca `ILatLongLocation`. `NaiveZipCodeLocatableProvider` to implementacja, która po prostu używa wzorców w kodach pocztowych, które są dobrze znane z zapewniania najlepszego odgadnięcia współrzędnych. `DbZipCodeLocatableProvider` to implementacja, która używa bazy danych (może poprzez `DbContext` lub w inny sposób) do zwracania współrzędnych. Teraz sam `DbZipCodeLocatableProvider` musi zależeć od jakiegoś rodzaju repozytorium, kontekstu lub połączenia lub czegoś, aby uzyskać dostęp do bazy danych (chyba że jest to dosłownie zakodowane na stałe) ... więc oznacza to, że muszę mieć `DbContext` lub coś podobnego. .. tutaj się gubię. Czy myślę o tym we właściwy sposób? Czy jest to uzasadniony scenariusz wstrzykiwania zależności? I jak mam odróżnić, powiedzmy, różne parametry połączenia od różnych strategii, aby rozwiązać kody pocztowe na współrzędne? Edycja: ...i nie zapomnij o `WebServiceZipCodeLocatableProvider`... jest jeszcze jedna (realistyczna) opcja.