title: Jak mogę zrekompensować brak opinii jako programista solo?

text: Jako nowozatrudniony programista obawiam się, że podczas pracy w grupach nie otrzymuję strumienia informacji zwrotnych, które otrzymywałem w przeszłości. (Otrzymuję opinie (w większości pozytywne) od moich klientów i poświęcam sporo czasu na samodoskonalenie.) Co powinienem zrobić, aby wypełnić luki? Jakieś inne jednoosobowe sklepy z oprogramowaniem? Jak pozostać w kontakcie i uniknąć zbytniego rozkochania we własnej pracy? Czy za bardzo się o to martwię? Dzięki za komentarze.


title: Analiza wymagań formalnych

text: Na mojej uczelni robiłem moduł Analiza wymagań. Omówiliśmy wszystkie rodzaje wymagań formalnych, takie jak UML, diagramy przypadków użycia, diagramy sekwencji i kontrakty. Muszę zapytać – czy którakolwiek z tych rzeczy ma jakąkolwiek wartość w prawdziwym świecie? Jedyne diagramy przypadków użycia, jakie kiedykolwiek widziałem, można podsumować w znacznie bardziej zwięzły i zrozumiały sposób prostym angielskim – lub nawet kodem w rozsądnym, wybranym przez ciebie języku – i to samo dotyczy innych rzeczy, o których wspomniałem.


title: Diagramowanie dużego i złożonego kodu aplikacji

text: Próbowałem utworzyć schemat blokowy funkcji, której używam w moim programie, ale między każdym procesem jest wiele instrukcji warunkowych, a diagramy stają się coraz bardziej zagmatwane. Czy istnieje inny język lub znaczniki inne niż schematy blokowe, które można zastosować w przypadku dużych baz kodu o dużej złożoności?


title: Spotkanie po projekcie to strata czasu?

text: W moim miejscu pracy mieliśmy poważne bóle wzrostu. Przeszliśmy z zespołu programistów składającego się z 3 do 10 osób, a sama firma w ciągu ostatniego roku wzrosła o 30%. W większości pomiarów radzimy sobie dobrze. Niestety ucierpiała jakość naszego oprogramowania. Na dzisiejszym spotkaniu z kierownikiem mojego działu zaproponowałem spotkanie zespołu projektowego dzień lub dwa po uruchomieniu produktu. Mogliśmy omówić kwestie budżetowe, zakres, co poszło nie tak, a co poszło dobrze. Najlepiej uczenie się na własnych błędach. Tworzymy witryny/aplikacje dla innych osób, więc nasz czas jest albo rozliczany, albo niepodlegający rozliczeniu. Takie spotkanie należałoby do tego drugiego. Mój menedżer zastrzelił to niemal natychmiast: „Ten czas nie jest płatny. Zmusi nas to do spóźnienia się z innym projektem, ponieważ tracimy czas pod koniec tego, kiedy o tym mówimy”. Byłam tak zaskoczona tą logiką, że nawet nie zawracałam sobie głowy walką z nim. Więc moje pytanie: Widzę, że wartością są spotkania poprojektowe, ale on tego nie robi. Czy istnieje **udokumentowany** dowód, że spotkania poprojektowe pomagają zaoszczędzić czas i pieniądze w dłuższej (lub krótkiej) perspektywie? Intuicyjnie myślę, że tak będzie/będzie, ale wyraźnie bardziej martwi go niewielka ilość nierozliczanego czasu od 5 osób, które musiałyby tam być.


title: Scrum: Co jeśli Product Owner ma zadania?

text: Właśnie rozpocząłem pracę z zespołem, który podchwycił niektóre aspekty Scrum (dwutygodniowe ograniczanie czasu), ale nie inne (zespół nie zgadza się obecnie na wszystkie szacunki lub liczbę punktów w sprincie, ale zmienię to wkrótce.) Właściciel produktu jest również zasobem technicznym (naukowcem) z pewnym doświadczeniem programistycznym. Czy właściwe jest mieszanie zadań właściciela produktu (które w większości obejmują badania) z zadaniami zespołu (niektóre z nich to badania, a inne rozwój).


title: Siatka danych dla aplikacji internetowych

text: Czy istnieją dobre biblioteki Data Grid, które pozwalają użytkownikowi przeglądać i edytować dane z bazy danych? Mój szef poprosił mnie o zbadanie możliwych zasobów Data Grid w celu uzupełnienia naszej aplikacji internetowej i pomyślałem, że zapytam tutaj. Wiem, że moglibyśmy zrobić jeden we własnym zakresie, ale chcielibyśmy mieć profesjonalnie wyglądający, bez poświęcania zbyt wiele czasu i pracy. Szukamy sieci danych Data Grid, najlepiej napisanej w Javie, która jest darmowa lub open-source. JDeveloper wygląda obiecująco, jednak ma sporo narzutów i dość stromą krzywą uczenia się. Aplikacja internetowa, którą to uzupełniłoby, nie jest wystarczająco duża, aby zapewnić czas potrzebny na nauczenie się JDevelopera. Przeglądarka siatki powinna być w stanie: * zezwolić użytkownikom na przeglądanie tabel * zezwolić użytkownikom na edycję wierszy w linii * zezwolić na sortowanie według kolumn * wierszy stron * skojarzyć tabele bardzo cenione.


title: Czy istnieją ograniczenia techniczne lub funkcje językowe, które uniemożliwiają mojemu skryptowi Pythona działanie tak szybkie, jak równoważny program C++?

text: Jestem wieloletnim użytkownikiem Pythona. Kilka lat temu zacząłem uczyć się C++, aby zobaczyć, co może zaoferować pod względem szybkości. W tym czasie będę nadal używał Pythona jako narzędzia do prototypowania. Wyglądało na to, że był to dobry system: zwinne programowanie w Pythonie, szybkie wykonanie w C++. Ostatnio coraz częściej używam Pythona i uczę się, jak unikać wszystkich pułapek i antywzorców, których szybko używałem we wcześniejszych latach z językiem. Rozumiem, że korzystanie z niektórych funkcji (zrozumienia list, wyliczenia itp.) może zwiększyć wydajność. Ale czy istnieją ograniczenia techniczne lub funkcje językowe, które uniemożliwiają mojemu skryptowi Pythona działanie tak szybkie, jak równoważny program w C++?


title: Książki ze stopniowanym zbiorem problemów programistycznych

text: Szukam książki z **ocenionym** (tj. od niskiego do wysokiego poziomu trudności) zbiorem problemów programistycznych. Problemy, które mnie interesują, to problemy z algorytmem/strukturą danych, ponieważ jest to rodzaj problemów zadawanych w ACM ICPC, Topcoder, CodeJam, łamigłówkach na Facebooku i większości wywiadów, jak sądzę. Znam różne kolekcje w sieci, ale żadna z nich nie jest oceniana, więc początkujący może zniechęcać. Szukam czegoś, co zaczyna się od samego początku i idzie na przykład do poziomu Topcoder.


title: Sprawdzanie podatności na cross-site scripting w aplikacjach internetowych Perla

text: Przygotowuję kilka notatek dla zespołu programistów, jak pisać bezpieczny kod Perla - zwłaszcza biorąc pod uwagę obecne 10 luk w zabezpieczeniach aplikacji internetowych OWASP. W przypadku skryptów cross-site zamieściłem informacje o zapewnieniu, że wszystkie dane wyjściowe do przeglądarki są sprawdzane i usuwane w razie potrzeby, ale szukam bardziej zautomatyzowanych mechanizmów, które oznaczałyby, że programista nie musi myśleć o każdym oświadczeniu wyjściowym i potencjalnie przegapić jeden. Funkcja „skażenie” Perla brzmi, jakby powinna być pomocna, ponieważ nie ufa wszystkim danym wprowadzanym przez użytkownika, ale nie narzeka na skażone dane przesyłane do przeglądarki. Oprócz sprawdzania wszystkich instrukcji wyjściowych indywidualnie (prawdopodobnie przez wywołanie ogólnej funkcji odkażania) czy ktoś ma jakieś pomysły na to, jak Perl może w tym pomóc z istniejącymi bibliotekami lub technikami?


title: Wbudowane haszowanie kontekstu i wejścia-wyjścia w kompilatorach

text: Dlaczego kompilatory (open source) nie zawierają wbudowanej funkcji do (współdzielonego) buforowania i ponownego wykorzystywania (przy użyciu skrótu SHA1 wersji kompilatora, flag kompilacji, platformy docelowej i danych wejściowych) wykonywalnych obiektów wyjściowych (ELF lub COFF) podobne do tego, co robi „ccache” i „scons”? Wiele dużych projektów programistycznych odniosłoby ogromne korzyści w zakresie wymaganej przestrzeni dyskowej i czasu na kompilację, gdyby było to obecne, powiedzmy, w GCC.


title: Czy to w porządku, aby programiści otrzymali zadanie nakreślenia wymagań dotyczących bazy danych?

text: W mojej obecnej pracy dba i programiści są podzieleni na zadania. Każdy kod, który musi być napisany w procedurach dba pisz, a programiści robią tylko kod aplikacji. Dziwne jest to, że za każdym razem, gdy trzeba zdefiniować/określić zadanie, programiści dostają zadanie, a my musimy zdefiniować wszystkie potrzebne procedury i to, co mają zwrócić. Czy jest to powszechna praktyka w tworzeniu oprogramowania? Czy to programiści są generalnie tymi, których zadaniem jest budowanie wymagań po stronie bazy danych?


title: Autoryzacja zadaniowa dla historyjek użytkownika

text: Rozumiem, że pierwszym krokiem definiowania historyjek użytkownika jest zdefiniowanie ról. Problem z systemami opartymi na rolach polega na tym, że ta forma autoryzacji jest często zbyt prosta. W związku z tym ludzie stworzyli autoryzację opartą na zadaniach, w której role są nadal używane do grupowania zadań w grupy (patrz na przykład zabezpieczenie rhino . Przynajmniej to rozumiem. Jak pisać historyjki użytkownika do autoryzacji opartej na zadaniach? Każda opinia byłaby bardzo mile widziana. Wielkie dzięki!


title: Czy można zaoferować program partnerski dla Twojej aplikacji na iOS lub Androida?

text: Niezależnie od App Store lub Google Play, czy istnieje sposób na śledzenie, skąd pochodzą nowe pobrania lub płacący klienci? Na przykład, jeśli aplikacja reklamuje moją aplikację w swojej - czy istnieje sposób, aby dowiedzieć się, którzy użytkownicy faktycznie ją pobrali? A potem zapłacić właścicielowi aplikacji prowizję? W sieci odbywa się to za pomocą adresu URL śledzenia, który umieszcza plik cookie na komputerze użytkownika. Jeśli zarejestrują się w wyznaczonym czasie, zostaną „śledzeni” do kogokolwiek, kto ma swój kod partnerski w klikniętym adresie URL i ta osoba otrzyma prowizję. Jak można to zrobić z natywnymi aplikacjami mobilnymi, nie naruszając zasad Apple/Google?


title: Jak nazywasz jeden element w wyliczeniu?

text: Poniższy kod C# definiuje wyliczenie. enum MyEnum { alfa, beta, gamma, delta } Jako całość nazywa się to wyliczeniem. Jak nazywasz każdy przedmiot? Na przykład, jak nazywasz obiekt, który jest w wersji beta?


title: Testy integracyjne w pl przykład - zdezorientowany

text: Wiem, że testowanie integracyjne oznacza integrowanie testowanych modułów, testowanie pod kątem błędów interfejsu itp. Ale w rzeczywistych przykładach jestem trochę zagubiony. Oto przykład naszego systemu: Back end (Java). Przód (Flex). Zaplecze mocno przetwarza dane i mamy wiele testów dla cotygodniowej automatycznej regresji. Ale czy to test systemu? Myślę, że tak, ale z drugiej strony jest to tylko testowanie części końcowych. A może powinienem powiedzieć, że jest to testowanie systemu tylko wtedy, gdy w grę wchodzi również część interfejsu użytkownika? Ale znowu, testując interfejs użytkownika, nie możemy przetestować logiki przetwarzania danych.


title: Node.JS lub Scala dla aplikacji mobilnych i webowych

text: Pochodzę z tła php z pewnym pythonem. Chcę rozpocząć pracę nad innym językiem do tworzenia aplikacji internetowych i mobilnych. Interesują mnie również aplikacje czasu rzeczywistego zajmujące się grami. Patrzę na node.js, ponieważ mogę używać narzędzi takich jak titanium i/lub phone gap, aby moje aplikacje zostały przeniesione i skompilowane do natywnego kodu java lub w taki sposób, aby można je było uruchomić na urządzeniach mobilnych (widoki internetowe). Podoba mi się ta ścieżka, ponieważ mogę wykorzystać istniejącą wiedzę o JS do tworzenia aplikacji. Patrzę też na scalę. Zrobiłem trochę C#, a także majstrowałem przy Javie około 5 lat temu. I podoba mi się, że mogę używać scala do tworzenia natywnych aplikacji na Androida. Ale w przeciwieństwie do node/js, które można sprawić, aby działały również na innych mobilnych systemach operacyjnych, działa to tylko na Androidzie. W pewnym sensie nie przeszkadza mi to. Ale wydaje się, że skala miałaby znacznie lepszą wydajność w grach niż JS skompilowany na Androida. Ale nie wiem jak dobrze. Na koniec chcę skupić się na aplikacjach internetowych opartych na gniazdach i REST dla API, do których użytkownicy mogą mieć dostęp, a także na programowaniu mobilnym. Chcę przejść do gier i interaktywnych aplikacji. Pytanie brzmi, jakie funkcje Scali przyniosłyby mi korzyści po stronie node/js przy tworzeniu aplikacji czasu rzeczywistego w sieci lub na urządzeniach mobilnych? Szukałem wykorzystania frameworków, takich jak winda lub play for web. Node ułatwia również pracę w czasie rzeczywistym dzięki socket.io, a node obsługuje większość tego w tle. Dlatego uważam, że węzeł może być świetnym wyborem. Miałem więc nadzieję, że ktoś może dać wgląd w funkcje Node, które przyniosą korzyści w stosunku do scala. Naprawdę nie chcę słyszeć „to jest lepsze, ponieważ jest to skala sieciowa lub podobne rzeczy. Miałem nadzieję, że poznam więcej faktów na temat funkcji, które przyniosą korzyści temu, co chcę robić. Już rozumiem, dlaczego węzeł jest dobry. Po prostu nie wiem zbyt wiele o scala. Albo jak mogą porównać to, co chcę osiągnąć.


title: Fasada bazy danych, aby zawrzeć nasze istniejące zapytania?

text: Mamy bardzo dużą aplikację napisaną w C++ przy użyciu frameworka MFC (miliony linii kodu). Nie trzeba mówić, że jest to przestarzały system, ale jest również mocno utrzymywany i aktualizowany. W tej aplikacji brakuje wiele architektury. Na przykład mamy wiele klas, które wykonują zapytania bezpośrednio do bazy danych, co stwarza wiele trudności przy testowaniu jednostkowym. Przeczytałem książkę „Pracując efektywnie ze starszym kodem” i jedną z najważniejszych rzeczy, które należy najpierw zrobić, jest stworzenie pewnego rodzaju architektury, dzięki której będziemy mogli oddzielić GUI od logiki i bazy danych. Moim pomysłem na to jest stworzenie czegoś w rodzaju fasady bazy danych. W tym celu będą dwa cele: 1. Hermetyzacja wszystkich połączeń do bazy danych za tą fasadą. 2. Być w stanie przetestować fasadę wsadowo w celu bardzo szybkiego wykrycia błędów w SQL. Sama fasada bazy danych będzie implementować interfejs IDatabaseXXXX, aby można go było łatwo wyśmiewać w testach jednostkowych. Drugim celem będzie możliwość uruchamiania wsadowego wszystkich funkcji na fasadzie w celu przetestowania, czy w zapytaniach SQL występują błędy. Nie zaliczam ich do testów jednostkowych i przeprowadzałbym je tylko raz dziennie. Moją główną troską związaną z robieniem tego jest to, że nie wiem, czy istnieje istniejący framework lub biblioteka, która mogłaby zająć się tą abstrakcją. Z tego, co wiem, jest kilka na innych platformach, takich jak .NET, ale wydaje się, że dla C++ lub MFC nie ma zbyt wielu opcji. Tak jak powiedziałem, aplikacja jest bardzo duża i zmiana będzie dokonywana powoli, głównie przy dodawaniu do oprogramowania nowych zapytań. Myślę, że warto dodać, że mamy też DUŻO zestawów rekordów (po jednym na prawie każdy obiekt). Na razie nie wiem, jak sobie z nimi radzić, więc trzymałem je na boku i postanowiłem zająć się zwykłymi zapytaniami SQL. Ale jeśli masz sugestie dotyczące zestawów nagrań, chętnie je usłyszę. Więc moje główne pytanie brzmi: czy warto wypróbować cały pomysł na fasadę bazy danych? Czy jest jakaś biblioteka frameworków, która pomoże mi w tej przygodzie? Jeśli istnieją programiści C++/MFC, jak radzisz sobie z abstrakcją zapytania do bazy danych? Dziękuję! _**EDIT_** Niektóre osoby na czacie sugerują poszukanie wzorca repozytorium, który znałem ze świata MVC 3. Jakieś sugestie lub tutorial na temat wzorca repozytorium w C++? Większość tego, co znalazłem, znajduje się w świecie .NET.


title: Jak wstawić warstwę bazy danych w PHP

text: Utrzymuję i dodaję funkcje na zasadzie freelance do strony internetowej napisanej w PHP. Aplikacja została uruchomiona w PHP4 przez młodszego programistę w 2006 roku i oferuje bardzo niebezpieczne i niemożliwe do utrzymania sposoby robienia rzeczy, które staram się poprawiać w miarę upływu czasu. Jeśli klient wyrazi na to zgodę, jedną z pierwszych rzeczy, które chciałbym zrobić, to dodać odpowiednią warstwę bazy danych. Bieżący dostęp do bazy danych wygląda następująco: if (!function_exists('moje_zapytanie')) { function my_query($query) { if ($query=='wyłączone') return false; globalny $last_insert_id,$dbconn,$dbase; $result=mysql_query($query,$dbconn) or die('BŁĄD: '.mysql_error($dbconn).'<br />'.$query); $last_insert_id=mysql_insert_id($dbconn); zwróć $wynik; } } Istnieje również funkcja do tworzenia tablic ze zwróconych danych. if (!function_exists('spawnarray')) { function spawnarray($wynik) { $i = 0; if ($result != "") { if (mysql_num_rows($result) > 0) { while($result_obj[$i] = mysql_fetch_object($result)) { $sp_result[$i]=$result_obj[$i] ; $i++; } return $sp_result; } } } } Te dwie funkcje są w zasadzie warstwą bazy danych, a zapytania SQL są dla nich konstruowane w locie w każdym miejscu. Więc moje pytanie brzmi, jak mogę zacząć wprowadzać abstrakcję bazy danych do miksu? Chciałbym przejść na PDO ze względów bezpieczeństwa i łatwości użytkowania, ale może jest lepszy sposób? Przeniosłem już projekt do Composera dla niektórych jego zależności (niektóre są martwymi projektami, co stanowi inny problem), więc może ORM, taki jak Doctrine, byłby dobrym rozwiązaniem? Może to jednak oznaczać przeniesienie witryny do OOP za jednym razem: zniechęcająca perspektywa i na pewno nie ze strony klienta.


title: Zoptymalizuj interakcję z bazą danych przez VPN

text: Muszę opracować procedurę wsadową z VB.NET. Ta prosta procedura polega na odczytaniu niektórych danych z bazy danych MS SQL, wykonaniu pewnych opracowań i zapisaniu wyników do innej bazy danych Oracle SQL zlokalizowanej w zdalnej sieci, do której dociera się przez VPN. VPN jest „zawsze włączony”, nie potrzebujemy klienta do zarządzania połączeniem, ponieważ jest on tworzony przez firewall-by-firewall. Dane, które mam napisać są atomowe, więc muszę skorzystać z transakcji. Czy możesz mi powiedzieć, co się stanie, jeśli połączenie VPN zostanie przerwane, gdy transakcja jest otwarta, a polecenie COMMIT nie zostało wykonane? Czy masz jakieś sugestie/najlepsze praktyki, których możesz przestrzegać, aby uniknąć tego scenariusza?


title: Czy powinienem używać listy czy tablicy?

text: Pracuję nad formularzem systemu Windows do obliczania UPC dla numerów pozycji. Udało mi się stworzyć taki, który będzie obsługiwał jeden numer przedmiotu/UPC na raz, teraz chcę go rozwinąć i zrobić to dla wielu numerów przedmiotów/UPC. Zacząłem i próbowałem używać listy, ale ciągle się zacinam. Utworzyłem klasę pomocnika: public class Codes { private string incrementedNumber; prywatny ciąg znaków kontrolnych cyfra; prywatny ciąg całyNumber; prywatny ciąg całyKodNumer; ciąg prywatny numer_przedmiotu; public Codes(string itemNumber, string incrementedNumber, string checkDigit, string string wholeNumber, string string numberNumber) { this.incrementedNumber = incrementedNumber; this.checkDigit = checkDigit; this.całkowita = liczba całkowita; this.całyKodNumer = całyKodNumer; this.ItemNumber = itemNumber; } public string ItemNumber { get { return itemNumber; } set { numer pozycji = wartość; } } public string IncrementedNumber { get { return incrementedNumber; } set { incrementedNumber = wartość; } } public string CheckDigit { get { return checkDigit; } ustaw { cyfra kontrolna = wartość; } } public string WholeNumber { get { return wholeNumber; } set { liczba całkowita = wartość; } } public string WholeCodeNumber { get { return wholeCodeNumber; } set { całyKodNumer = wartość; } } } Potem zacząłem pracować nad swoim kodem, ale problem polega na tym, że proces jest przyrostowy, co oznacza, że otrzymuję numer elementu z widoku siatki za pomocą pól wyboru i umieszczam je na liście. Następnie pobieram ostatni kod UPC z bazy danych, usuwam cyfrę kontrolną, a następnie zwiększam liczbę o jeden i umieszczam ją na liście. Następnie obliczam cyfrę kontrolną nowej liczby i umieszczam ją na liście. I tutaj już otrzymuję wyjątek braku pamięci. Oto kod jaki mam do tej pory: List<Codes> ItemNumberList = new List<Codes>(); private void buttonSearch2_Click(object sender, EventArgs e) { //Wypełnij zestawy danych this.immasterTableAdapter.FillByWildcard(this.alereDataSet.immaster, (textBox5.Text)); this.upccodeTableAdapter.FillByWildcard(this.hangtagDataSet.upccode, (textBox5.Text)); this.uPCTableAdapter.Fill(this.uPCDataSet.UPC); ciąg searchFor = textBox5.Text; int wyniki = 0; DataRow[] zwróconeRows; returnRows = uPCDataSet.Tables["UPC"].Select("ItemNumber = '" + searchFor + "2'"); wyniki = zwróconeWiersze.Długość; if (results > 0) { MessageBox.Show("Ten numer elementu już istnieje!"); pole tekstowe5.Wyczyść(); //wyczyśćSiatki(); } else { //textBox4.Text = dataGridView1.Rows[0].Cells[1].Value.ToString(); MessageBox.Show("Numer pozycji jest unikalny."); } } public void checkMarks() { for (int i = 0; i < dataGridView7.Rows.Count; i++) { if ((bool)dataGridView7.Rows[i].Cells[3].FormattedValue) { { ItemNumberList.Add (nowe kody(dataGridView7.Rows[i].Cells[0].Value.ToString(), "", "", "", "")); } } } } public void multiValue1() { _value = uPCDataSet.UPC.Rows[uPCDataSet.UPC.Rows.Count - 1]["UPCNumber"].ToString();//pobierz ostatni UPC z bazy danych _UPCNumber = _value.Substring (0, 11);//usuń cyfrę kontrolną _UPCNumberInc = Convert.ToInt64(_UPCNumber);//przekonwertuj wartość na liczbę dla (int i = 0; i < ItemNumberList.Count; i++) { _UPCNumberInc = _UPCNumberInc + 1; _UPCNumberIncrement = Convert.ToString(_UPCNumberInc);//przypisz zwiększoną wartość do nowej zmiennej ItemNumberList.Add(new Codes("", _UPCNumberIncrement, "", "", ""));//**tutaj otrzymuję OutOfMemoreyException** } for (int i = 0; i < ItemNumberList.Count; i++) { long chkDigitOdd; długi chkDigitEven; długi chkDigitSuma częściowa; chkDigitOdd = Convert.ToInt64(_UPCNumberIncrement.Substring(0, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(2, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(4, 1)) + Convert.ToInt64(_UPCNumberIncrement. Substring(6, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(8, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(10, 1)); chkCyfraNieparzysta = (3 * chkCyfrowaNieparzysta); chkDigitEven = Convert.ToInt64(_UPCNumberIncrement.Substring(1, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(3, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(5, 1)) + Convert.ToInt64(_UPCNumberIncrement. Substring(7, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(9, 1)); chkDigitSubtotal = (300 - (chkDigitEven + chkDigitOdd)); _chkDigit = chkDigitPodsuma.ToString(); _chkDigit = _chkDigit.Substring(_chkDigit.Długość - 1, 1); ItemNumberList.Add(new Codes("", "",_chkDigit, "", "")); } Czy jest to właściwy sposób na to, używając listy, czy powinienem patrzeć na inny sposób?


title: Architektura rozproszona geograficznie (dane i aplikacje)

text: Czy istnieją wzorce projektowe (lub najlepsze praktyki) dotyczące wdrażania systemu rozproszonego geograficznie (głównie bazy danych)? Opis: Istnieje sieć magazynów oraz centrala. Teraz chcę, aby każda hurtownia replikowała swoje dane do centrali, a centrala replikowała tylko część danych związanych z tą hurtownią (kiedy jest modyfikowana). Mogę to nazwać „replikacją filtrowaną”. Nasza baza danych to SQL Server 2008 R2. Czy powinienem wybrać inną bazę danych? A co z bazami danych NoSQL? Jest to rozwiązanie oparte na platformie .NET. Do tej pory dowiedziałem się o synchronizacji sieci Web dla replikacji scalającej i badam to; ale nie nauczyłem się jeszcze, jak zaimplementować replikację filtrowaną. Nie jestem pewien, jak NoSQL pasuje do problemu e-commerce (myślę, że muszę użyć kombinacji NoSQL + RDBMS, jeśli mam iść tą drogą), ale badam RavenDB i MongoDB. Każdy wgląd bardzo by pomógł; Dziękuję;


title: „Wszystko może pójść źle, pójdzie źle” – Prawo Murphy'ego. więc czy konieczne jest testowanie wszystkich warunkowych, wyjątkowych przypadków?

text: Jeśli „Wszystko może pójść źle, pójdzie źle”, musimy przetestować wszystkie warunki warunkowe i wyjątkowe przypadki w moim kodzie. Ale czasami trudno znaleźć je wszystkie, ponieważ wiele z nich to przypadki narożnikowe, które trudno przetestować. Jak mogę lepiej znaleźć narożne przypadki lub uniknąć problemu?


title: Czy istnieją minimalne standardy jakości dla aplikacji .NET?

text: Czy firma Microsoft wymaga, aby aplikacje .NET innych firm spełniały jakiekolwiek minimalne standardy dotyczące takich rzeczy, jak bezpieczeństwo aplikacji lub jakość kodu?


title: Jak wizualizować kod?

text: W większości musiałem tylko przeczytać własny kod. W związku z tym nie musiałem wizualizować kodu, ponieważ już wiem, jak każda klasa i moduł komunikują się ze sobą. Ale kilka razy musiałem przeczytać czyjś kod - załóżmy teraz, że mówimy o przynajmniej jednym większym module, który zawiera kilka klas wewnętrznych - prawie zawsze miałem ochotę _"To byłoby o wiele łatwiejsze zrozumieć, czy mogę to tylko zwizualizować!”_ **Jakie są więc popularne metody lub narzędzia umożliwiające to? Którego używasz i dlaczego wolisz je od innych?** Słyszałem takie rzeczy jak UML, diagramy modułów i klas, ale wyobrażam sobie, że jest ich więcej. Co więcej, każdy z nich jest najprawdopodobniej lepszy niż wszystko, co mogę wymyślić samodzielnie. **EDYTUJ:** Dla tych, którzy odpowiadają „Użyj długopisu i papieru i po prostu narysuj”: nie jest to zbyt pomocne, chyba że wyjaśnisz to dokładniej. Co dokładnie mam narysować? Pudełko na każdą klasę? Czy powinienem uwzględnić metody publiczne? A co z jego polami? Jak narysować połączenia, które wyjaśniają, w jaki sposób jedna klasa używa innej? A co z modułami? A co, jeśli język nie jest zorientowany obiektowo, ale funkcjonalny lub logiczny, a nawet po prostu imperatywny (na przykład C)? A co ze zmiennymi i funkcjami globalnymi? Czy istnieje już ustandaryzowany sposób rysowania tego, czy też muszę wymyślić własną metodę? Masz dryf.


title: Po co oddzielać klasę CommandHandler za pomocą Handle() zamiast obsługi metody w samym poleceniu?

text: Mam część wzorca CQRS zaimplementowanego przy użyciu architektury S#arp w następujący sposób: public class MyCommand { public CustomerId { get; ustawić; } // kilka innych pól } public class MyCommandHandler<MyCommand> : ICommandHandler<MyCommand, CommandResult> { Handle(MyCommand command) { // kod do zapisania encji Klient return CommandResult.Success; } } Zastanawiam się, dlaczego po prostu nie mieć klasy `Command` zawierającej zarówno dane **i** metodę obsługi? Czy jest to rodzaj korzyści testowalności, gdzie trzeba testować logikę obsługi poleceń niezależnie od właściwości poleceń? A może jest to częste wymaganie biznesowe, w którym musisz mieć jedno polecenie obsługiwane przez różne implementacje `ICommandHandler<MyCommand, CommandResult>`?


title: Kiedy powinienem zacząć korzystać z frameworków?

text: Nie jestem zdezorientowany motywem i potrzebą frameworków. Na jakim etapie powinienem korzystać z frameworków? Na przykład, jeśli chcę używać jakiegoś frameworka CSS, czy powinienem nauczyć się CSS na poziomie pro czy zaawansowanym, aby z niego korzystać?


title: Rozwiązania umożliwiające przekazywanie uczniom opinii na temat ich kodu?

text: Będę asystentem na kursie, który uczy Haskella w tym semestrze, a profesor i ja staramy się wymyślić rozwiązanie, które pozwoli nam składać całkowicie elektroniczne zgłoszenia. Chcielibyśmy, aby uczniowie mogli przesyłać pliki (mamy system, z którego moglibyśmy korzystać, który umieszcza przesłane pliki na serwerze FTP), a następnie otrzymywać oceny/opinie na temat tych plików. Czy ktoś zna dobre rozwiązania do przeglądu kodu, które zapewniają poufność zgłoszeń i opinii?


title: Kiedy stosować poprawki na danych zebranych z serwera?

text: Mam program, który zbiera dane z innych serwerów. Nie mam dostępu do tych serwerów, więc nie mogę niczego zmienić. Serwery mogą podawać nieprawidłowe dane, mogę rozwiązać problem, ale trochę utknąłem w „kiedy zrobić korektę”. Pobieram dane z serwera, dane są przetwarzane i przechowywane na dysku twardym. Gdy potrzebne są te same dane i nie ma zmian, używam starych danych. Więc to jest w zasadzie buforowanie. Są 2 miejsca, w których mógłbym nanieść poprawkę. * Kiedy otrzymuję dane z innych serwerów; * Po buforowaniu danych. Więc zanim go użyję. Kiedy nakładam poprawkę bezpośrednio na pobrane dane, serwer nie musi wykonywać wielu obliczeń. Jest korygowany tylko raz. Kiedy stosuję korektę po pobraniu jej z pamięci podręcznej lub gdy nie jest buforowana po buforowaniu danych. Wtedy potrzebuję więcej mocy procesora. Daje mi to jednak przewagę, że zawsze mam dostęp do oryginalnych danych. Mogłem cofnąć się, gdy popełniłem błąd i zastosować poprawną poprawkę. Pytanie więc, kiedy powinienem zastosować korektę? I dlaczego miałbym to zrobić w ten sposób.


title: Ogólny projekt parsera plików w Javie przy użyciu wzorca Strategia

text: Pracuję nad produktem, w którym obowiązkiem jednego z modułów jest parsowanie plików XML i zrzucanie wymaganej zawartości do bazy danych. Mimo że obecne wymaganie dotyczy tylko analizowania plików XML, chcę zaprojektować mój moduł analizowania w taki sposób, aby w przyszłości mógł obsługiwać dowolny rodzaj plików. Powodem takiego podejścia jest to, że budujemy ten produkt dla konkretnego klienta, ale planujemy w najbliższej przyszłości sprzedać go innym klientom. Wszystkie systemy w ekosystemie dla bieżącego klienta wytwarzają i zużywają pliki XML, ale może to nie dotyczyć innych klientów. **Czego próbowałem do tej pory? (The Present)** Mam na myśli następujący projekt oparty na wzorcu Strategia. Szybko napisałem kod w Eclipse, aby przekazać mój projekt, więc byłoby wspaniale, gdyby inne aspekty, takie jak odpowiedni sposób obsługi wyjątków, zostały na razie zignorowane. **Parser :** Interfejs strategii, który udostępnia metodę parsowania. publiczny interfejs Parser<T> { public T parse(String inputFile); } *Powodem użycia parametru generycznego jest umożliwienie dowolnego typu zwracanego, a także zapewnienie bezpieczeństwa typu w czasie kompilacji. **ProductDataXmlParser** Konkretna klasa do analizowania pliku product.xml, który zawiera informacje związane z produktem. (za pomocą XMLBeans) public class ProductDataXmlParser implementuje Parser<ProductDataTYPE> { public ProductDataTYPE parse(String inputFile) { ProductDataTYPE productDataDoc = null; Plik inputXMLFile = new File(inputFile); spróbuj { productDataDoc = ProductDataDocument.Factory.parse(inputXMLFile); } catch(XmlException e) { System.out.println("XmlException podczas analizowania pliku : "+inputXMLFile); } catch(IOException e) { System.out.println("IOException podczas analizowania pliku : "+inputXMLFile); } return productDataDoc.getProductData(); } } **where** : ProductDataTYPE i ProductDataDocument to klasy XMlBean POJO wygenerowane przy użyciu polecenia xsd i scomp. **Przyszłość** Jeśli mam plik product.txt do przeanalizowania w przyszłości, mogę zdefiniować własne POJO o nazwie ProductData, które będzie przechowywać wymaganą zawartość pliku. Następnie mogę utworzyć konkretną klasę o nazwie ProductDataFlatFileParser, która implementuje interfejs Parser i ma metodę parse wypełniającą dla mnie ProductData POJO po przeanalizowaniu pliku. Czy ten projekt ma sens? Czy w tym projekcie są jakieś oczywiste wady? W obecnym stanie projektu pozwalam konkretnym klasom zdefiniować algorytm parsowania pliku i pozwolić konkretnej klasie zdecydować, gdzie wypełnić dane. Projekt wydaje się być bardziej zależny od obiektów domeny niż formatów plików. Czy to zła rzecz? Wszelkie uwagi dotyczące tego, jak mogę ulepszyć swój projekt, będą bardzo mile widziane.


title: Projektowanie oparte na domenie z modelem bazy danych EAV

text: Jak zastosować DDD do modelu bazy danych EAV? Rozważ ten model bazy danych EAV: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/yVT7q.png) Jak mam zbudować model domeny, jeśli wszystkie moje encje i ich atrybuty będą przechowywane w baza danych? **AKTUALIZACJA** Aby pomóc wyjaśnić pytanie, podam przykład. Jeśli tworzę **Sklep**, który będzie sprzedawał niektóre **Produkty**, będę miał 2 odpowiadające im jednostki w moim modelu domeny. Teraz moja encja `Product` będzie miała zwykle ustaloną liczbę atrybutów (np. `Product_name`, `sku`, `weight`, etc...). Jednak w modelu EAV encje mają zmienną liczbę atrybutów. Jak mam napisać model dla `Produktu`, jeśli każda jego konkretna instancja będzie miała inną liczbę atrybutów?


title: Czy doświadczenie C# dobrze przekłada się na C++?

text: Moje zajęcia z programowania w szkole odbywały się w C++, ale przez ostatnie kilka lat pracowałem jako C#. Gdyby istniało stanowisko, które wymagałoby powiedzmy 1 lub 2 lat doświadczenia w C++, czy moje doświadczenie w C# byłoby warte rozważenia? Jak skuteczny mógłbym być w takiej sytuacji? Czy więc muszę zaczynać jako programista C++ dla początkujących, aby zdobyć niezbędne doświadczenie?


title: Który styl lepiej sprawdzać i rejestrować błąd?

text: Przeczytałem trochę kodu i oto dwa sposoby sprawdzenia i zapisania błędu w kodzie cpp, który powtarza się w moim projekcie wiele razy. Który sposób jest lepszy? 1. bool AClass::myMethod() { if (!SomeCondition()) { Warning("AClass::myMethod: twój opis"); zwróć fałsz; } zróbCoś(); zwróć prawdę; } 2. bool AClass::mojaMetoda() { if (SomeCondition()) { zróbCos(); } else { Warning("AClass::myMethod： twój opis"); zwróć fałsz; } zwróć prawdę; }


title: Wykorzystanie DelayQueue w świecie rzeczywistym

text: Jakie byłoby rzeczywiste użycie DelayQueue, jaki typowy problem został zaprojektowany do rozwiązania?


title: Antonim do „zespołu wielofunkcyjnego”

text: Co jest powszechnym antonimem „zespołu wielofunkcyjnego”?


title: Dlaczego miałbym potrzebować repozytorium Git?

text: Jestem początkującym programistą konfigurującym projekt w Xcode 4.3 i zastanawiam się, w jakich okolicznościach musiałbym zaznaczyć pole "Utwórz lokalne repozytorium git dla tego projektu". Dziękuję Ci!


title: Jakie przypadki użycia są odpowiednie dla JScript.NET?

text: W tym pytaniu Stack Overflow: http://stackoverflow.com/questions/9471332 dowiedziałem się, że Jscript jednak nie jest martwy. Tak! Ale do czego służy JScript.NET? Zgodnie z tym artykułem można go użyć do udostępnienia C# funkcji Eval. To fajnie, ale wydaje się, że jest to pewnego rodzaju przypadek. Jeśli szukasz najwyższej klasy możliwości tworzenia skryptów, czy PowerShell nie pasuje do rachunku?


title: Scrum: Radzenie sobie z brakiem motywacji

text: Zgodnie z tym, „Scrum w dużym stopniu opiera się na wysoce zmotywowanych, ściśle współpracujących, wielofunkcyjnych i samoorganizujących się zespołach”. Jak więc poradzić sobie ze współpracownikami, którzy mogą nie być tak zmotywowani do przejęcia kodu na własność? Jak zainteresować kogoś przejęciem własności?


title: Czy są jakieś praktyczne zastosowania zezwalania na rekurencyjne włączanie pliku?

text: Obecnie wdrażam preprocesor podobny do NASM dla mojego asemblera i zastanawiam się, jaki jest właściwy sposób obsługi plików rekurencyjnie dołączanych. Z tego co widzę, są dwa sposoby radzenia sobie z tym bez zawieszania preprocesora czy nawet systemu operacyjnego: 1. Ustaw maksymalną głębokość włączania. 2. Nie zezwalaj na rekurencyjne dołączanie pliku (nie mylić z zakazem dołączania pliku _dwukrotnie_). Ponadto, o ile widzę, drugie podejście wykonuje zasadniczo tę samą pracę, ale generuje ładniejsze komunikaty o błędach. Porównaj wyjście Clang, gdy kompilujesz plik zawierający tylko `#include "main.cpp"`: W pliku dołączonym z main.cpp:1: [ powtórzone wiele razy ] W pliku dołączonym z main.cpp:1: main.cpp:1 :10: error: #include zagnieżdżone zbyt głęboko #include "main.cpp" z tym (obecny sposób obsługi tego w moim preprocesorze; dane wejściowe są podobne do powyższego, czy `%include "1.mov.asm"` w linii 6 ): W pliku /home/griwes/projects/reaverasm/tests/1.mov.asm w linii 6: Błąd: plik `/home/griwes/projects/reaverasm/tests/1.mov.asm` dołączony rekursywnie. Podejście, które nie pozwala na rekurencyjne włączanie, daje - IMHO - bardziej czytelne wyniki. Pytanie brzmi: **czy istnieje jakaś technika preprocesora, która zostałaby zabita przez uniemożliwienie włączenia rekurencyjnego?** To pytanie jest niezależne od języka, więc możesz podać przykłady z dowolnych języków.


title: Wyklucz zero z podanych danych w Haskell

text: Mam listę liczb całkowitych. Ponadto mam funkcję, która zwraca True, gdy element jest niezerowy, i zwraca False, gdy element ma wartość zero (nazwijmy ją FUNCTION1). Jak więc zdefiniować inną funkcję (za pomocą FUNCTION1), która da nam nową listę i będzie zawierała tylko niepuste elementy? Na przykład mamy [1,2,3,0,6,0], a chcemy [1,2,3,6]


title: Dobre sposoby na przeskoczenie do określonego stanu w dającej się zastosować funkcji stanowej?

text: Pracuję nad pewnym osadzonym kodem przy użyciu C. Różne elementy funkcjonalności wymagają nieblokujących funkcji stanowych, które są w większości implementowane za pomocą przełącznika na różnych stanach. Na przykład menedżer połączeń modemowych (pseudokod): void manage_connection(void) { static state state = IDLE; switch (stan) { case IDLE: if (connection_requested()) state = BACKOFF; przerwanie; case BACKOFF: if (random_delay_timeout()) { do_connect(); stan = POŁĄCZONY; }                 przerwanie; case POŁĄCZONY: wynik = send_data(); if (wynik == DATA_SENT) { stan = BEZCZYNNY; } else if (result == BŁĄD) { // Przejdź od razu do stanu wycofywania i podłącz stan JAK NAJSZYBCIEJ = BACKOFF; }                 przerwanie; } } Automaty stanowe są w najlepszym razie paskudne, więc zacząłem przechodzić do innego paradygmatu, używając funkcji w stylu współprogramowym, używając instrukcji "yield". Oczywiście C nie zapewnia instrukcji „wydajność”, ale używam do tego protowątków. Protothreads jest świetny i daje mi dokładnie to, co chcę zaimplementować powyższą nieblokującą maszynę stanów w stylu programowania strukturalnego. Powyższa funkcja z grubsza tłumaczy się na (pseudo-kod): void manage_connection(void) { WAIT_UNTIL(connection_requested()); // lub, while(!warunek) plon; WAIT_UNTIL(losowe_opóźnienie_timeout()); do_connect(); WAIT_UNTIL((wynik = wyślij_dane())); if (result == DATA_SENT) { // RESTART zaczyna się od góry. Jest częścią interfejsu API protothreads. RESTART(); } else if (result == BŁĄD) { // To jest część, która nie jest zbyt dobrze tłumaczona. // Można użyć brzydkiego goto: goto backoff; // Lub podobne alternatywy, z których żadna nie skaluje się dobrze: // - Ustaw flagę, aby pominąć stany, których nie chcę, i RESTART(); // - Użyj pętli while lub innej logiki sterującej do odpowiedniego rozgałęzienia. } } Jak widać, wersja protowątków jest na ogół znacznie czytelniejsza i prostsza pod względem przepływu logiki (kiedy nauczysz się jak działają protowątki i spojrzysz poza kilka bardzo pomniejszych schematów, których nie zawarłem w przykład). Ale przeskakiwanie do określonego stanu w maszynie stanów jest powszechnym wzorcem, z którym się spotykam, który wersja maszyny stanów radzi sobie elegancko, ale wersja proceduralna nie. Oczywiście dlatego wersja proceduralna jest mniej podatna na błędy i bardziej przejrzysta — ponieważ _nie_ można_ przeskakiwać po całym miejscu dla kaprysu (z wyjątkiem goto, którego wolałbym uniknąć z typowych powodów). Jednakże, gdy masz dobry powód, aby chcieć skoczyć, dodaje to znaczny, podatny na błędy brak jasności, do tego, co w przeciwnym razie jest bardzo prostą funkcją. Oczywiście istnieje wiele sposobów na osiągnięcie niezbędnej funkcjonalności, ale żaden z nich nie skaluje się do więcej niż kilku stanów. Pamiętaj, że to najprostszy możliwy przykład — moje funkcje w świecie rzeczywistym zajmują pół ekranu. Jakie są sposoby rozwiązania tego problemu w sposób, który nie zaciemnia skądinąd przejrzystego przepływu logiki?


title: Czy istnieje scenariusz, w którym warto przechowywać zmienne właściwości w pamięci podręcznej w obiektach domeny w celach innych niż informacyjne?

text: Zwykle w modelu domeny będziesz mieć obiekty, a te obiekty będą miały właściwości, które są zmienne i właściwości, które są niezmienne — na przykład identyfikator/nazwa wystąpienia będzie niezmienna, podczas gdy niektóre inne właściwości (szczególnie właściwości, które zależą od relacji z innymi obiektami) może różnić się w okresie istnienia obiektu Tak więc w zwykłym scenariuszu, w którym wielu klientów uzyskuje dostęp do tego samego magazynu danych, narzędzie ORM zwykle modeluje kolumny jako właściwości, a relacje jako listy, we wzajemnym zrozumieniu, że każda zmienna właściwość mogą być nieaktualne w kliencie - to znaczy, reprezentują tylko pamięci podręczne wartości właściwości. Jednak w wielu przypadkach chce się wykonać operację, która może wymagać rzeczywistego stanu właściwości mutowalnych, w przeciwnym razie operacja może się nie powieść lub spowodować uszkodzenie danych, więc w takich przypadkach spróbujesz zablokować dany wiersz i jeśli wiersz już się zmienił, anuluj lub przerwij. W każdym razie operacja jest wykonywana poza aplikacją kliencką. W pewnym momencie muszę zadać pytanie (co dziwne, okazuje się to zaskakująco trudne!), więc myślę, że pytanie brzmi: **czy jest jakiś scenariusz, w którym warto przechowywać właściwości mutowalne w pamięci podręcznej obiektów domeny na cokolwiek poza celami informacyjnymi?** W końcu, jeśli istnieją relacje, na których nam zależy, powiedzmy, że chcemy przemierzać sąsiadów jakiegoś obiektu, będziemy chcieli to zrobić z ich rzeczywistymi (niebuforowanymi) stanami, co wiązałoby się z transakcja bazy danych lub inny sposób na wykonanie procesu niepodzielnie (może mapa zmniejszyć?).


title: Aby przeorganizować kod, co wybrać między biblioteką a usługą?

text: Chcę zreorganizować dużą aplikację z dużą ilością powielanego kodu na wiele komponentów. Ponadto część kodu jest również duplikowana w innych aplikacjach. Wspólny zestaw funkcji, które można usunąć z głównej aplikacji, jest jasno zdefiniowany. Teraz piszę bibliotekę, czy piszę usługę dla tej funkcjonalności; aby wszystkie takie aplikacje działały dalej, a do utrzymania pozostała tylko jedna baza kodu (o wspólnej funkcjonalności) ?


title: Szukasz dobrych testów w wielowątkowych projektach open source C lub C++

text: Dużo czytałem o znaczeniu testów jednostkowych i ogólnie o testowaniu. W szczególności czytałem o TDD, które teoretycznie wydaje się dobrym sposobem na zapewnienie efektywnego pokrycia testami projektu. Jednak kiedy patrzę na projekty open source lub kod dostępny jako open source, mam trudności ze znalezieniem dobrych przykładów testowania w prawdziwych projektach, z których mogę się uczyć. W szczególności nie widziałem zbyt wiele w zakresie testów jednostkowych (przynajmniej nie rozumiem). Na przykład właśnie pobrałem kod źródłowy Java HotSpot JVM. Pomyślałem, że bardzo przydatne będzie dla mnie spojrzenie i nauka, ponieważ JVM (napisana w C lub C++) będzie musiała radzić sobie z wieloma złożonymi problemami związanymi z wielowątkowością i interakcją systemu niskiego poziomu. To są te same rzeczy, dla których mam trudności z wymyśleniem, jak tworzyć testy jednostkowe. Ale niestety wydaje się, że ilość kodu napisanego specjalnie do testowania jest dość ograniczona. Istnieje katalog `test`, ale wygląda na to, że zawiera przykłady kodu, które można wykorzystać do testowania różnych błędów, a nie formalne testy regresji lub testy jednostkowe. Więc moje pytanie brzmi, czy istnieją przykłady projektów open source, które wykorzystują testy jednostkowe, na które mógłbym się przyjrzeć, aby się z nich uczyć? Coś w rodzaju JVM jest dla mnie idealne, ponieważ jest bardziej złożone niż projekt, nad którym pracuję, ale napotkałoby wiele takich samych problemów związanych z interakcją wątków i zarządzaniem pamięcią.


title: Nowy kompilator Apple

text: Słyszałem, że Apple zamierza zastąpić kompilator GNU wbudowany w Xcode nowym kompilatorem. Czym jest nowy kompilator i jakich zmian możemy się spodziewać?


title: Czy istnieje sposób na wykorzystanie gcc jako biblioteki?

text: Każdy zna rozwiązanie, które działa mniej więcej tak: #include <stdio.h> #include <gcc.h> /* To .h jest tym, czego szukam. */ int main (void) { /* deklaracja zmiennych (...) */ /* Poniższa linia ma być odpowiednikiem: * $ gcc main.c -o main */ results = gcc_compile_and_link("main.c ", "Główny"); /* Teraz chcę użyć ostrzeżeń i błędów, aby coś zrobić. * Na przykład wypiszę je w konsoli: */ printf("warnings:\n"); for (i=0; i<results.warns_len; i++) printf("%s\n", results.warings[i].msg); printf("błędy\n"); for (i=0; i<results.errs_len; i++) printf("%s\n", results.errors[i].msg); /* zwolnij pamięć i sfinalizuj (...) */ return 0; } Wiem, że mogę uruchomić polecenie „gcc main.c -o main” w rozwidleniu i przeanalizować dane wyjściowe ... ale szukałem czegoś bardziej „niezawodnego_”, jak w powyższym przykładzie.


title: Strategia aktualizacji dla struktury oprogramowania po jej wdrożeniu

text: Muszę zaktualizować strukturę oprogramowania po jej wdrożeniu. Tworzony przez nas framework składa się z bibliotek .NET 4.0 (w Visual Studio). Ten wspólny zestaw bibliotek kodu będzie dostępny dla 2 usług .NET Windows, autonomicznej aplikacji .NET i witryny sieci Web .NET MVC 4. (Usługi będą działać na jednym serwerze, a samodzielna aplikacja będzie używana przez kilka wybranych osób.) Jesteśmy na wczesnym etapie projektu, a główne pytania, które się pojawiły, to: * Co się dzieje, gdy mamy wprowadzić zmiany do 1 lub więcej plików frameworka? * Jak wdrażamy poprawki i/lub aktualizacje do każdej części, która opiera się na frameworku? * Jakie uwagi możemy podjąć na początku, aby później ułatwić proces aktualizacji/łatania? Po raz pierwszy nasz mały zespół zmierzył się z takim problemem i nie jesteśmy pewni, jakie są najlepsze praktyki. **edytuj** Mamy 4 części oprogramowania, które opierają się na frameworku: 2 usługi, 1 aplikacja, 1 strona internetowa. Gdy to wszystko trafi do produkcji, planowane są już aktualizacje i aktualizacje. Aktualizacje będą wymagały zmian w plikach frameworka i programach. Moje pytanie miało odnosić się do późniejszego procesu ponownego wdrażania uaktualnień. Gdy już jesteśmy w fazie produkcyjnej i zakodujemy aktualizacje/uaktualnienia do plików frameworka, aplikacji i witryny, wdrożenie tych aktualizacji będzie musiało nastąpić tak szybko, jak to możliwe. Co musimy zrobić, aby usprawnić ten proces?


title: Jak bezpieczny jest ten sposób uwierzytelniania internetowego interfejsu API ASP .NET — tworzenie własnych tokenów?

text: http://www.codeproject.com/Articles/630986/Cross-Platform-Authentication-With-ASP-NET-Web-API#_rating Powyższy link pokazuje dokładnie, jak chcę przejść do uwierzytelniania w ASP .NET Web API . Wygląda na bardzo proste, ale jak bezpieczne jest to w praktyce? Polega na tworzeniu własnego zaszyfrowanego tokenu poprzez połączenie identyfikatora użytkownika i adresu IP uwierzytelnianego klienta. Następnie uwierzytelniam tę zmienną ciągu przy użyciu jakiejś technologii szyfrowania. Następnie przy każdym kolejnym żądaniu, które jest wysyłane do API przez tego samego użytkownika, API sprawdza, czy token jest ważny (pochodzi od tego samego klienta, który się uwierzytelnił, nie przekroczył limitu czasu itd.). Token zostanie sprawdzony przez odszyfrowanie tokena i sprawdzenie, czy identyfikator klienta, który pochodzi z odszyfrowania, jest taki sam jak adres IP żądającego.


title: Jak kierujesz się zasadą pojedynczej odpowiedzialności w klasach odpowiedzialnych za zachowanie?

text: W mojej aplikacji mam wiele klas odpowiedzialnych za zachowanie- widoki, kontrolery, modele, sieć- często stan jednej klasy lub systemu zależy od innej i stwierdzam, że klasy, które są przede wszystkim odpowiedzialne za zachowanie jednego systemu nieuchronnie stają się zależnymi lub zależne od innych systemów lub klas. Próbowałem przekazywać interfejsy zależności od konstruktora systemu aż do klasy zależnej od niego i rejestrować na nim zdarzenia, ale staje się to niezwykle skomplikowane i szalone i zdecydowanie narusza przynajmniej OCP i SRP. Zastanawiam się nad stworzeniem systemu zdarzeń, z którym wszystkie klasy wysyłające i nasłuchujące zdarzenia byłyby połączone, zapewniając warstwę pośredniości dla klas, które wymagają interakcji z klasami z innych systemów, jednak w najgorszym przypadku klasy behawioralne mogą być odpowiedzialne za zachowanie klasa, obsługa zdarzeń i wysyłanie zdarzeń - tak, że zdecydowanie narusza to również SRP, chociaż jestem prawie pewien, że będzie to zgodne z OCP. Czy istnieje lepsze rozwiązanie? Czy prawidłowo stosuję te zasady? Bardzo niechętnie korzystam z systemu wydarzeń, ponieważ będzie to wymagało od większości klas bardzo ścisłego połączenia z nim.


title: Czy wyliczenie w kodzie zapewnia silniejszy model domeny niż tabela statyczna?

text: Czy wyliczenie w kodzie zapewnia silniejszy model domeny niż statyczna tabela bazy danych? Jako przykład, powiedzmy, że mam encję „Marble” z atrybutem „Kolor”. Atrybut color ma skończony zbiór możliwych wartości — powiedzmy czerwony, zielony, niebieski. Powiedzmy, że zespół bazy danych zaleca posiadanie statycznej tabeli `S_ValidColors`, co daje efekt: ----------------------- | Identyfikator koloru | NazwaKoloru | ----------------------- | 0 | Czerwony | ----------------------- | 1 | Zielony | ----------------------- | 2 | Niebieski | ----------------------- Podczas gdy myślę bardziej w stylu (to jest tylko szkic do ogólnej koncepcji): public class Color { public stała statyczna Kolor Czerwony = Kolor(0); public statyczna const Kolor Zielony = Kolor(1); public statyczna stała Kolor Niebieski = Kolor(2); private Color(uint typeCode) { ... } ... } Poza pytaniem, co jest lepsze (co prawdopodobnie zależy od wielu innych czynników nie przedstawionych tutaj), czy jest to pytanie, które dotyczy tego, jak silny jest model domeny ? Czy jeden sposób jest bardziej anemiczny niż drugi?


title: Interakcja z klientami za pomocą systemów zarządzania projektami

text: Zajmuję się tworzeniem stron internetowych, co obejmuje wiele mniejszych projektów niestandardowych, a nie jeden duży produkt. Wymagania i specyfikacje zawsze pochodzą spoza firmy. Skonfigurowaliśmy system śledzenia zgłoszeń (Active Collab, który jest śmieciem w porównaniu do redmine btw) i daliśmy dostęp klientom, aby mogli zgłaszać problemy. Chodzi o to, że długie rozmowy telefoniczne i e-maile zajmują mniej czasu. Myślę, że może działać naprawdę dobrze, jeśli zostanie zrobione dobrze. Jednak nie jestem pewien, czy to zawsze dobra rzecz. Prośby o nowe funkcje znacznie wzrosły w niektórych projektach. System musi być również przyjazny dla osób niebędących programistami, a jednocześnie posiadać wiele funkcji, z których korzystają programiści. Zgłoszenia programistów nie zawsze mapują 1 do 1 z biletami utworzonymi przez klientów. Tak więc wymagania i szersze zgłoszenia muszą być oddzielone od bardziej szczegółowych zgłoszeń związanych z deweloperem (specyfikacją). Być może moglibyśmy użyć dwóch systemów, jednego dla klientów do zgłaszania swoich wymagań lub opisywania błędu, a drugiego dla programistów do tworzenia zgłoszeń, takich jak „zaimplementuj metodę x w klasie y”. Może można to osiągnąć, dzieląc bilety na bardziej odpowiednie kategorie lub tworząc bilety podrzędne w ramach zgłoszenia żądania funkcji. Krótko przyjrzałem się Pivotal Trackerowi i ma on zasadniczo inny przepływ pracy. **tl;dr** Jak oddzielić bilety techniczne (żargon programisty) od biletów klienta (język laika).


title: Mapa drogowa PHP do SharePoint

text: Jestem programistą PHP znającym Railsy i skupiającym się na rozwoju MVC. Moja firma coraz bardziej przechodzi na SharePoint i czuję, że muszę nauczyć się budować aplikację w systemie SharePoint. Mam krótkie wprowadzenie do C#, ale to wszystko. Użyłem niektórych SharePoint Designer i interfejsu internetowego, ale nie tak mocno (większość moich dotychczasowych "rozwojów" dla SharePoint polegała na manipulowaniu stronami html/css/javascript w SPDesigner). Czego iw jakiej kolejności powinienem się uczyć, aby ostatecznie tworzyć aplikacje dla SharePoint? Jakieś dobre zasoby na każdy krok?


title: Skalowanie Git do wykorzystania zespołowego

text: Przez ostatnie 3 lata prawie codziennie używałem git we wszystkich moich domowych projektach oraz w pracy nad małymi projektami, których nie było w globalnym repozytorium SVN. Mój przepływ pracy jest dość podobny do słynnego modelu rozgałęziania git z http://nvie.com/posts/a-successful-git-branching-model, podsumowując: * Pracuję w gałęziach, jedna gałąź dla jednej funkcji (tj. mieszanie poprawki błędu z nową funkcją itp.) * Zatwierdzam bardzo często, często tylko 2-5 wierszy, największe zatwierdzenia to zwykle nowe funkcje itp. Bardzo intensywnie używam interaktywnego narzędzia do zatwierdzania, aby semantycznie uporządkować moje zatwierdzenia (np. podczas naprawiania deklarację importową i coś w funkcji, mam tendencję do dzielenia tego na dwa zatwierdzenia, gdy zmiany nie są ze sobą powiązane). * W końcu miałem tendencję do używania `git merge` z opcją `--no-ff`, ponieważ podoba mi się wizualny wykres historii gałęzi w gitku. * Nigdy tak naprawdę nie używałem zmiany bazy (z wyjątkiem poprawek) _Oczywiście ten przepływ pracy nigdy nie musiał borykać się z konfliktami scalania tak poważnymi, jak zespoły pracujące na tej samej twarzy kodu._ Teraz przeczytałem tu i tam, że niektóre projekty są bardzo zaniepokojone utrzymaniem " „szybko do przodu” historia. **Dlaczego to jest ważne? Jaki jest twój wybór pod tym względem?** Wyobrażam sobie, że „linearna” historia jest łatwiejsza w obsłudze, gdy patrzy się na historię, ale: moim zdaniem jest też cenne posiadanie prawdziwej historii. Historia liniowa bez przewijania do przodu jest może bardziej podobna do historii SVN, ale moje zatwierdzenia git są zwykle znacznie mniejsze niż przeciętne zatwierdzenie SVN, są - myślę - bardziej porównywalne do scalania gałęzi w git (przynajmniej moje użycie ). Praca bez `-no-ff` mogłaby trochę "zaśmiecać" historię w master (jest to moja troska o szybkie scalanie do przodu).


title: Przynosisz kod na rozmowę kwalifikacyjną?

text: Czy przyniesienie na rozmowę kwalifikacyjną wydrukowanego kodu lub kodu na nośniku USB to dobry pomysł? Jeśli tak, jaki kod powinienem przynieść. Czy powinienem unikać dużych projektów i pokazywać tylko krótkie fragmenty, które pokazują moje umiejętności?


title: Zaproponuj dobry język programowania do nauki, który nie jest OOP i zdecydowanie nie ma składni w stylu C

text: Moim pierwszym językiem programowania w szkole był C. Potem nauczyłem się C++ i Javy i utknąłem z Javą na 2 lata. Na początku byłem tak uzależniony od Javy i OOP. Zacząłem tworzyć aplikacje Java i w pełni opanowałem programowanie OOP. Teraz chciałbym nauczyć się różnych języków. Mój umysł jest pełen składni w stylu C. Czasami w moich snach widzę słowa camelCase, nawiasy, klamry i kropki. Nawet JavaScript używa składni podobnej do C. Chcę dostosować się do różnych języków, aby nie sprawiało mi trudności, gdy dostanę pracę, która wymaga ode mnie programowania w innej składni i innym paradygmacie.. Nie wiem, co oznaczają paradygmaty funkcjonalne, logiczne, hybrydowe. Więc proszę tutaj. Zaproponuj mi inny język (i jakąś dobrą książkę na ten temat, jeśli to możliwe) do nauki..


title: Przeszłe instrukcje If Tablice, pętle... Co teraz?

text: Z programowania zrezygnowałem nieco ponad rok temu, kiedy ciągle uderzałem w tę ścianę. Wracam do tematu, ponieważ chcę stworzyć podstawową aplikację na Androida. Ale czuję, że moja ograniczona wiedza nie wystarczy. Oto mój problem. Przeczytałem kilka książek i obejrzałem samouczki wideo na temat C#/Java, podążałem za przykładami, a następnie skończyłem książkę. W końcu zawsze wydają mi się oszołomione, co robić dalej. Co oznacza, że uczą cię od podstawowej aplikacji "hello world" aż do if's i tablic, a następnie pozornie oczekują, że wiesz, jak wejść w świat kodowania i tworzyć cokolwiek. Czy coś mi umyka? Wiem, że są to cegiełki wszystkich programów, ale książki, które czytam, nigdy tak naprawdę nie pokazują mi, co robić dalej. Przypuszczam, że najłatwiejszą odpowiedzią byłoby „zacząć kodować”, ale gdzie? Czytałem na przykład "Head First Java"; do części, w której powiedzieli, że weź wszystko, czego się nauczyłeś i stwórz grę wyścigową dla psów.... "staraj się nie oszukiwać i patrz na dostarczony kod źródłowy, powinieneś już to zrobić" _ to nie jest dokładny cytat, ale w zasadzie tak mi powiedziano....... Pół godziny temu po prostu wyjaśniali, jak tworzyć tablice, a potem bez teorii mam stworzyć działającą grę? Powodem, dla którego o to pytam, jest to, że boję się, że to wszystko, co powinienem wiedzieć, aby przynajmniej zacząć kodować, ale wydaje mi się, że dostałem mały zestaw narzędzi i kazano mi zbudować wieżowiec. Dziękuję za wszelkie rady


title: Jak zaimplementować wzorzec repozytorium dla złożonych modeli obiektów?

text: Nasz model danych składa się z prawie 200 klas, które można podzielić na kilkanaście obszarów funkcjonalnych. Byłoby fajnie korzystać z domen, ale podział nie jest taki czysty i nie możemy tego zmienić. Przeprojektowujemy nasz DAL, aby używał Entity Framework, a większość zaleceń, które widziałem, sugeruje użycie wzorca repozytorium. Jednak żadna z próbek tak naprawdę nie dotyczy złożonych modeli obiektów. Niektóre implementacje, które znalazłem, sugerują użycie repozytorium-per-entity. Wydaje się to niedorzeczne i niemożliwe do utrzymania w przypadku dużych, złożonych modeli. Czy naprawdę konieczne jest stworzenie UnitOfWork dla każdej operacji i Repozytorium dla każdej encji? Mogę skończyć z tysiącami zajęć. Wiem, że jest to nierozsądne, ale znalazłem bardzo mało wskazówek dotyczących implementacji repozytorium, jednostki pracy i Entity Framework w złożonych modelach i realistycznych aplikacjach biznesowych.


title: Jaka jest przewaga Continuous Integration nad marką?

text: Oceniamy i konfigurujemy Continuous Integration dla naszego projektu PHP. Każde z narzędzi Continuous Integration ma swój własny „język kompilacji”, który będzie uruchamiał wiele poleceń i sprawdzał stan zwracania tych poleceń. Oto przykład konfiguracji `.travis.yml`: język: php php: - "5.3" - "5.4" - "5.5" skrypt: phpunit test notifications: email: - sourcespeak@phor.net Zostanie ustawiona konfiguracja Jenkinsa w XML i jest zbyt długi, aby go tutaj wkleić. Oto przykład konfiguracji `circle.yml`: dependencies: override: - bundle install: timeout: 240 environment: foo: bar foo2: bar2 pwd: test_dir **Moje pytanie brzmi: jaka jest korzyść z używania tych wszystkich popularnych , zastrzeżone języki konfiguracyjne dla CI zamiast używania Makefile do skonfigurowania środowiska testowego i posiadania dowolnego serwera CI, który po prostu uruchamia `make test`?**


title: Czy istnieją metryki, podobnie jak w innych zawodach, które można wykorzystać do pomiaru, czy programista jest uważany za doświadczonego?

text: Instruktorzy jazdy (przynajmniej w Niemczech) często wymieniają 100 000 km przejechanych jako punkt odniesienia, w którym kierowca uważany jest za doświadczony. Czy jest podobna liczba dla programistów? Na przykład, ile wierszy kodu napisał przeciętny młodszy/starszy programista, rozpoczynając swoją pracę? A także: po ilu linijkach w danym języku zwykle staje się ekspertem tego języka? Oczywiście istnieje wiele innych czynników, które składają się na to, kto jest dobrym programistą, a kto nie, jednak wydaje mi się, że liczba linii kodu może być całkiem dobrym wskaźnikiem doświadczenia. ## Aktualizacja: Pierwotnie poprosiłem o kilka linijek kodu. Oczywiście zdaję sobie sprawę, że robi to dużą różnicę, jaka jakość kodu została napisana, w jakich dziedzinach itp. Nie uważałbym też osoby, która przejechała ponad 100 000 km za dobrego kierowcę. I nadal jestem przekonany, że każdy potrzebuje pewnego czasu doświadczenia, aby zostać świetnym programistą. Chociaż godziny nie były miarą, której szukałem, liczba godzin w odpowiedzi na suhit była zasadniczo tym, czego chciałem. Bardziej jasna wersja mojego pierwotnego pytania może brzmieć: po ilu linijkach kodu ma oddanego programistę, który nieustannie stawia sobie wyzwania, prawdopodobnie nabył wystarczającą wiedzę i umiejętności, aby być uznanym za doświadczonego?


title: Czy dobrym podejściem jest otwieranie klawiatury na początku Actvity, gdzie jest tylko jeden EditTextbox?

text: Pracuję z _Zapomniałem hasła_ , gdzie mam pojedynczy EditTextBox i pojedynczy przycisk przesyłania. Tak więc za każdym razem, gdy otwieram tę stronę _Zapomniałem hasła_, moja klawiatura jest otwierana na początku tej strony. W mojej głowie pojawia się pytanie, że otwieranie klawiatury na początku działania _Zapomniałem hasła_ nie jest dobrym wyborem.


title: Złożone dopasowywanie ciągów za pomocą fuzzywuzzy

text: Usiłuję napisać proces, który dopasowuje niejasne ciągi do jednego „ciągu głównego” w celu dalszego przetwarzania. Mam dużo danych, które wyglądają mniej więcej tak: Koszykówka Koszyk Piłka Piłka nożna KoszykBallR BBall BBall - r FootB ...i tak dalej. Muszą one być zmapowane do rekordu głównego, jak na przykład: Basketball = Basket Ball, BBall Basketball - R = BasketBallR, BBall - r Mam również instancje danych przypominające ten format: Football -r FootBall - r-g/H,Q,HH Te sytuacje muszą być podzielone na różne kategorie przed mapowaniem. Na przykład `FootBall - r-g/H,Q,HH` powinno brzmieć: Football - r Football - g Football - H Football - Q Football - HH W tym momencie nadal musi być zmapowany do rekordu głównego... I' Próbowałem kilku różnych kombinacji rozmytych metod dopasowywania, pomiarów odległości Levenshteina, wyrażenia regularnego itp. i wydaje się, że nie mogę znaleźć niezawodnej metody logicznego powiązania różnych stylów nazewnictwa pojedynczego elementu z nazwą główną. Unoszę ręce w desperacji. Czy istnieją jakieś zasoby Pythona, które mogą pomóc w rozwiązaniu mojego problemu? Czy są inne opcje? Czy ktoś może wskazać oczywistą opcję, którą mogłem przeoczyć? Zasadniczo każda sugestia, rozwiązanie, zasób lub alternatywna metoda jest bardzo ceniona.


title: Obliczenia o wysokiej wydajności i połączenia międzysieciowe

text: Obliczenia o wysokiej wydajności oznaczają różne rzeczy dla różnych ludzi. Z czysto programistycznego punktu widzenia zbieram informacje, że jest to mnóstwo pojedynczych maszyn połączonych niezwykle szybkimi interkonektami, niekoniecznie opartymi na zwykłym TCP/IP. Moje pytanie dotyczy strony interkonektów: jak zrobić szybsze połączenia bez znacznej zmiany kodu opartego na gnieździe?


title: Czy stosujesz kodeks postępowania przy przyjmowaniu zleceń, projektów lub wymagań?

text: **Czy pisząc oprogramowanie dla siebie, swojej firmy lub stron trzecich, zawsze bierzesz pod uwagę pewne zasady, wartości, standardy lub zasady postępowania, które kierują decyzjami, procedurami i systemami w sposób, który przyczynia się do dobra jej kluczowych interesariuszy, i szanuje prawa wszystkich części składowych, na które ma wpływ jego działalność?** I czy ten kodeks postępowania może być czasami nadrzędny przez wymagania biznesowe, brak umiejętności technicznych lub inne tarcia podczas procesu rozwoju? Kilka przypadkowych przykładów w kolejności ważności. (tak, to jest kontrowersyjne) : * Czy akceptujesz znane błędy jako ryzyko dla użytkownika końcowego? * Czy podczas pisania aplikacji zawsze dajesz użytkownikowi końcowemu szansę na całkowitą deinstalację? * Czy zawsze zabezpieczasz i szyfrujesz prywatne dane dostarczane użytkownikom końcowym w swojej aplikacji internetowej? * Czy zawsze pytasz użytkownika końcowego przed przesłaniem wprowadzonych danych na serwer? * Czy kiedykolwiek napisałeś aplikację, która wysyła niechciane e-maile? * Czy kiedykolwiek pracowałeś nad projektami zbiorów lub skrobania tylko na korzyść firmy? * Czy kiedykolwiek pisałeś oprogramowanie, które jest legalne, ale moralnie kontrowersyjne, na przykład dla przemysłu zbrojeniowego? * Czy kiedykolwiek napisałeś oprogramowanie, które (może celowo) lub jest wykorzystywane do działań przestępczych? Byłoby miło, gdybyś mógł uzyskać dobrą sprawę z wyjaśnieniem twoich decyzji moralnych i etycznych. uwaga: _Ponieważ etyka i prawo są dość zależne lokalnie i kulturowo, byłoby interesujące, gdyby dodać do tego miejsce „miejsca zbrodni”_.


title: Jak znalazłeś, udoskonaliłeś i utrzymałeś swój styl kodowania?

text: Ostatnio przełączam się między kilkoma projektami i środowiskami programistycznymi. Oczekiwania dotyczące stylu kodowania w każdym z nich są inne. Teraz moje pytanie składa się z trzech części, pierwsza, tylko z ciekawości: 1. Jak zdefiniowałeś i znalazłeś swój styl kodowania? 2. W jaki sposób możesz go powiększać i ulepszać? 3. Jak to utrzymujesz? (Z notatek, prowadzenia dokumentu, używania narzędzia takiego jak StyleCop itp.)


title: „Każde oprogramowanie ma datę wygaśnięcia, do której należy je przepisać od nowa”.

text: Natknąłem się na dyskusję między starszymi inżynierami a osobami z nietechnicznego środowiska i wydaje się, że w niektórych miejscach jest to mocno zakorzenione przekonanie. Uważam, że taka sytuacja wynika wyłącznie z niekompetencji po stronie programistów i kierowników projektów, osób zaangażowanych w tworzenie oryginalnego systemu i tych, którzy teraz zmagają się z jego modyfikacją. Szczególnie ci, którzy przecinają obie te grupy. Czy się mylę? Jeśli tak, dlaczego? Jeśli nie, to jak mam przekonać programistów dwa razy ode mnie starszego, że muszą zmienić swoje podejście do tworzenia oprogramowania, aby przezwyciężyć ten problem i że przepisywanie systemu od zera co 2-3 lata nie jest tylko nieuniknionym faktem w życiu. Czy istnieją książki lub wpływowi programiści, których mogę zacytować na ten temat?


title: Co oznacza wiadro?

text: Znalazłem w starszym kodzie klasę o nazwie BucketService. Ponieważ angielski nie jest moim językiem ojczystym, próbowałem to przetłumaczyć, ale to nie ma sensu. Znalazłem kilka terminów, takich jak sortowanie kubełkowe i tak dalej, ale nadal tego nie rozumiem. Właściwie to słowo jest dość często używane w programowaniu. Byłbym pomocny w prostym wyjaśnieniu tego słowa


title: Czy istnieje ryzyko, że przeglądarki internetowe szpiegują aplikacje hosta lokalnego na komputerze podłączonym do Internetu?

text: Pomimo tego, jak mogłoby to wyglądać, jest to poważne pytanie. Po tej historii z systemem operacyjnym Android i przeglądarką Chrome przesyłającą do Google szczegóły punktów dostępu Wi-Fi, które widzą w okolicy, które nie mają nic wspólnego z ich główną funkcją, jestem skłonny oczekiwać wszystkiego. Ale konkretne pytanie, które mam dzisiaj, dotyczy następującej sprawy. Sytuacja. Zajmuję się tworzeniem aplikacji sieci web działającej na lokalnie zainstalowanym serwerze sieci web. Oczywiście testuję i debuguję go na tej samej maszynie deweloperskiej w różnych przeglądarkach, takich jak Internet Explorer, Firefox, Opera, Safari i Chrome. Maszyna deweloperska ma stałe połączenie z Internetem. Ale już. Czy jest jakaś sytuacja lub okoliczność, w której którakolwiek z tych przeglądarek podjęłaby się wysyłania otwartych stron internetowych z `http://localhost:port/*` do swojej firmy lub innej strony trzeciej? Na razie poważnie podejrzewam, że w przypadku awarii przeglądarki lub awarii systemu operacyjnego przeglądarka prześle raport, być może, z zawartością mojego kodu HTML, CSS i JavaScript. Co by było, gdyby przeglądarka przesyłała strony aktywnie używane i otwierane przez dłuższy czas tylko z ciekawości firmy – nad czym pracuje ten paskudny programista? Czy możesz potwierdzić tę hipotezę? Czy wiesz o innych sytuacjach, w których przeglądarka wysłałaby szczegółowe informacje o zasobach lokalnych? Jak bezpieczne jest programowanie na komputerze ze stałym łączem internetowym?


title: Jakie są sposoby na utrzymanie baz kodu napisanych w dwóch językach, które implementują tę samą logikę?

text: Mam algorytm intensywnie logiczny, który muszę kodować w dwóch językach (właściwie skończyłem go zadowalająco w jednym języku i zaraz zacznę kodować w drugim). Przez intensywną logikę rozumiem, że algorytm nie jest trywialny, wymaga starannego zrozumienia i, co ważne, może zawierać błędy (z powodu złożoności i nieostrożności, wiesz), które należałoby naprawić w przyszłości. Ponadto chcę się upewnić, że kiedy ten kod zmieni właściciela, w końcu nie może to przytłoczyć nowych programistów. Biorąc pod uwagę ten scenariusz, jakie są sposoby, które mogą pomóc w utrzymaniu baz kodu i ich synchronizacji? Mam na myśli narzędzia programowe, najlepsze praktyki itp. FYI te dwa języki to C++ i Java. C++ dla Windows/Linux i Java dla "wszystkich innych", w tym Androida.


title: Struktury danych VS Classes i co się stanie, jeśli się połączą?

text: W porządku, nauczyłem się tego: **Klasy** mają publiczne metody, które wykonują operacje na danych klasy i ukrywają swoje implementacje. Z drugiej strony **Struktury danych** całkowicie ujawniają swoją implementację poprzez właściwości (gettery i settery) i zwykle nie mają metod. Moje pytanie brzmi, załóżmy, że mam strukturę danych klientów, która wygląda tak: public class Customer { public string FirstName { get ; ustawić; } ciąg publiczny Nazwisko { get ; ustawić; } Lista publiczna<Oferta> Oferty { get ; ustawić; } } Zakładałbym, że jest to **struktura danych**. ale co jeśli w dalszej części projektu zdam sobie sprawę, że muszę dodać trochę logiki biznesowej do struktury danych moich klientów? Podoba Ci się metoda dodawania nowych ofert, ponieważ jest to bardziej logiczne niż tylko dodawanie ich do listy? Wydaje mi się, że ta logika należałaby do wnętrza struktury danych. Co się wtedy stanie? Czy struktura danych zamienia się w klasę? Lub w jakiś trzeci typ obiektu, którego nie jestem świadomy? Czy to **zły projekt**?


title: Czy serializacja wyklucza użycie Dependency Injection?

text: Proste pytanie: rozumiem, że serializacja w C# wymaga konstruktorów domyślnych. Wyeliminowałoby to możliwość używania wstrzykiwanego DI przez Konstruktor (który jest ogólnie ulubionym stylem DI, w moim czytaniu [potrzebne źródło]). Czy to naprawdę sytuacja albo-albo, czy czegoś mi brakuje? (Pytanie poboczne): Czy kontenery IoC jakoś omijają ten kompromis?


title: Czy kiedykolwiek nienawidziłeś frameworka/języka programowania/platformy, ale w końcu zainteresowałeś się nauką?

text: Małe tło: zawsze byłem nienawidzącym Microsoftu. Jakiś czas temu przestraszył mnie sam fakt nauczenia się czegoś takiego jak C#. Interesowałem się tylko projektami i językami programowania opensource. Nie byłem pod wrażeniem vista (właściwie nienawidziłem vista), więc wróciłem do XP Pro. Musiałem korzystać z systemu Windows, ponieważ niektóre programy, których używam / używałem, nie były dostępne dla Linuksa. Potem pojawił się Windows 7 i zanim jeszcze spróbowałem / użyję go, już oceniam, że jest to „zniewaga tutaj”. Ciągle słyszałem o nim naprawdę dobre rzeczy, więc usunąłem XP i zainstalowałem Windows 7. Po użyciu go tylko przez może 2, 3 dni zacząłem go naprawdę lubić. Teraz bardzo mi się podoba. Ma nawet te małe funkcje, które mogą wydawać się nieistotne dla kogoś (jak możliwość rozmieszczenia okien na pasku zadań), które są dla mnie bardzo przydatne (kiedyś otwierałem programy w określonej kolejności, nawet zamykałem niektóre i ponownie otwierałem tylko po to, aby zmienić ich kolejność ich). Rzeczywiste pytanie: Teraz coraz więcej myślę o nauce .NET i C#. Widziałem też PowerShell, który wygląda kusząco. Nazwij mnie idiotą, ale trochę dziwnie się z tym czuję. To prawie tak, jakbym kogoś zdradzał. Czy kiedykolwiek byłeś w podobnej sytuacji?


title: Czy Dropbox używa cronjob do synchronizacji?

text: Szukałem lipsync na klonie Dropbox. Patrzyłem na schemat jak to tutaj działa. Pokazuje, że zadanie cron służy do utrzymywania synchronizacji plików między klientem a serwerem. Czy to oznacza, że co sekundę/min/godzinę uruchamia się cronjob i sprawdza, czy jest różnica między klientem a serwerem? Czy tak robi Dropbox? Jeśli korzysta z zadania cron, co się dzieje, gdy jesteś w trakcie synchronizacji i działa inne zadanie cron? Czy rsync (lub dodatkowe biblioteki) wie, jak sobie z tym poradzić?


title: dlaczego wszystkie samouczki programowania funkcjonalnego są tak matematyczne?

text: Próbowałem nauczyć się programowania funkcjonalnego i większość samouczków, które znalazłem, używa matematyki jako przykładów dla bardziej skomplikowanych konstrukcji (w niektórych przypadkach nawet prostych). Dlaczego to? Wyobrażam sobie, że można by użyć czegoś łatwiejszego. To utrudnia naukę. Informacje dodatkowe: Piszę oprogramowanie od 12 lat. Rozumiem niektóre pojęcia, takie jak domknięcia, funkcje obywatelskie pierwszej klasy i generyki. Być może mam problemy z funkcjami wyższego rzędu na pewnym zaawansowanym poziomie, ale chciałbym wierzyć, że mam podstawową wiedzę. Monady gryzą mnie w tyłek iw tym momencie nie wyszedłem poza to (jestem pewien, że w końcu to zrobię, bo jestem wytrwały).


title: Jaki jest najlepszy sposób zarządzania kolejnością sortowania elementów listy za pomocą interfejsu przeciągania i upuszczania?

text: Mam listę Uczniów, którą powinienem wyświetlić użytkownikowi na stronie internetowej w formacie tabelarycznym. Pozycje są przechowywane w DB wraz z informacjami SortOrder. Na stronie internetowej użytkownik może zmienić kolejność listy, przeciągając i upuszczając elementy do żądanej kolejności sortowania, podobnie jak w tym poście. Poniżej znajduje się zrzut ekranu mojej strony testowej. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/iPuhT.jpg) W powyższym przykładzie do każdego wiersza dołączone są informacje o kolejności sortowania. Kiedy upuszczam John Doe (identyfikator ucznia 10) nad wierszem Identyfikator ucznia 1, kolejność na liście powinna teraz wyglądać następująco: 2, 10, 1, 8, 11. Jaki jest optymistyczny (mniej zasobożerny) sposób przechowywania i aktualizowania informacji o kolejności sortowania ? Moim jedynym pomysłem na teraz jest to, że przy każdej zmianie kolejności sortowania listy, wartość SortOrder każdego obiektu powinna zostać zaktualizowana, co moim zdaniem jest bardzo zasobożerne. Tylko do Twojej wiadomości: mogę mieć co najwyżej 25 wierszy w moim stole.


title: Zagregowany dylemat główny i repozytorium

text: Mam tu duży dylemat. Mam encje Ligi, Drużyny i Gracza. Stworzyłem repozytorium tylko dla ligi, ponieważ Drużyna nie może istnieć bez Ligi. Na początku wiązałem zawodników tylko z drużyną, ale potem zdałem sobie sprawę, że będę miał problem z wolnymi agentami, więc również związałem zawodników do ligi. Potem zastanawiałem się, czy gracz mógłby istnieć bez ligi lub zespołu i jestem całkowicie zdezorientowany tym pytaniem. Stworzyłbyś więc repozytorium graczy, czy dołączyłbyś ich do repozytorium ligi? Dziękuję


title: Jaka jest potrzeba „wykrywalności” w interfejsie API REST, gdy klienci nie są wystarczająco zaawansowani, aby i tak z niego korzystać?

text: Różne wykłady, które obejrzałem i tutoriale, które zeskanowałem na REST, zdają się podkreślać coś, co nazywa się „wykrywalnością”. W moim ograniczonym rozumieniu termin ten wydaje się oznaczać, że klient powinien być w stanie wejść na `http://URL` \- i automatycznie uzyskać listę rzeczy, które może zrobić. Trudno mi zrozumieć, że „klienci oprogramowania” nie są ludźmi. Są to tylko programy, które nie mają intuicyjnej wiedzy, aby zrozumieć, co dokładnie zrobić z podanymi linkami. Tylko ludzie mogą wejść na stronę internetową i zrozumieć treść prezentowanego tekstu i linków oraz działać na nich. Jaki jest więc sens wykrywalności, gdy kod klienta, który uzyskuje dostęp do takich wykrywalnych adresów URL, nie może w rzeczywistości nic z nim zrobić, chyba że programista klienta faktycznie eksperymentuje z prezentowanymi zasobami? Wygląda to dokładnie tak samo, jak definiowanie zestawu dostępnych funkcji w podręczniku Dokumentacji, tylko z innego kierunku i faktycznie angażujące więcej pracy dla programisty. Dlaczego to drugie podejście polegające na predefiniowaniu tego, co można zrobić w dokumencie poza rzeczywistymi zasobami REST, jest uważane za gorsze?


title: Dlaczego kody błędów są negowane?

text: Bardzo często widzę w kodzie C negację zwracanych kodów błędów, np. `return -EINVAL` zamiast `return EINVAL`. Dlaczego użyto negacji?


title: Czy proste akcesory i mutatory korzystają z komentowanych nagłówków bloków?

text: **Krótkie pytanie** Czy konieczne jest dodanie komentarzy nagłówka funkcji dla **prostych** akcesorów i mutatorów? **Przykład** u8 OBJ_get_state_x(void) {return obj.state_x;} void OBJ_set_state_x(u8 x) {obj.state_x = x;} **Dodatkowe myśli** Obiekt (OBJ) ogólnie zawiera bardzo minimalną logikę (jeśli istnieje ). Jego jedynym celem jest utrzymanie stanu systemu. Wszystkie dodatkowe moduły (takie jak IO, COMM, DISPLAY itp.) wiedzą _czym_ jest obiekt i zawierają całą logikę biznesową wymaganą do sterowania stanami w OBJ. Chciałbym _chciałbym_ trzymać wszystkie akcesory / mutatory w jednym wierszu, aby plik był nieco bardziej czytelny i po prostu umieścić nad nimi ogólny nagłówek bloku. Po prostu nie wiem, czy jest to powszechna (lub dobra) praktyka. Zauważ, że wszystkie zakresy są ograniczone przez ich typ. Jeśli istnieje specjalny stan, który ma zakres od 0 do 3, tworzę enum z typem zdefiniowanym jako typ (tym samym wymuszając zakres i czyniąc kod bardziej czytelnym IMO).


title: Czy początkujący mają problemy ze strukturami danych?

text: Biorę drugi kurs na Javę. Wchodzimy w struktury danych. Zrobiłem zadanie na połączonej liście, a teraz stos. Miałem trudności z połączoną listą. Stack sprawiał mi trochę kłopotów, ale był znacznie łatwiejszy. Czy powinienem się martwić, że będę miał trudności z tymi algorytmami i strukturami danych? Po prostu czuję, że tak naprawdę tego nie pojęłam.


title: Jaka jest korelacja między językiem programowania a doświadczeniem/umiejętnościami ich użytkowników?

text: Jestem pewien, że istnieje taka korelacja, ponieważ * doświadczenie i umiejętności prowadzą dobrych programistów do wybierania języków, które są dla nich lepsze, w których są bardziej produktywni, a * praca w języku kształtuje sposób myślenia programistów i wpływa na ich metody oraz umiejętności. Czy są jakieś badania lub jakieś dane statystyczne dotyczące tego zjawiska? Być może nie jest to pytanie czysto akademickie. Na przykład, jeśli ktoś rozpoczyna nowy projekt, warto rozważyć język (oczywiście między innymi), dla którego istnieje większa szansa na znalezienie lub przyciągnięcie doświadczonych programistów. **Aktualizacja:** Proszę nie skupiać się na ostatnim akapicie. Nie jest moją intencją wybór języka w oparciu o to kryterium, a wiem, że są inne znacznie ważniejsze. Moje zainteresowania są głównie akademickie. Pochodzi z (subiektywnej) obserwacji i zastanawiam się, czy ktoś to trochę zbadał. Mówię też o _korelacji_ , a nie o regule. Jasne, że w każdym języku są zarówno świetni, jak i okropni programiści. Tylko, że ogólnie wydaje mi się, że istnieje korelacja.


title: Aplikacja internetowa / integracja modelu domeny przy użyciu DTO obsługujących JSON

text: Jestem trochę zdezorientowany wyborami architektonicznymi dla świata aplikacji internetowych/java/python. W świecie c/c++ dostępne (open source) wybory do implementacji aplikacji internetowych są dość ograniczone do zera, włączając java lub python, wybory eksplodują do - trudnego do uporządkowania - bałaganu dostępnych __'frameworków'_ i podejść do aplikacji . Chcę uporządkować czysty model MVC, w którym **M** oznacza w pełni rozwinięty (napędzany przez POCO, POJO) model domeny (zgodnie ze wzorcem EAA M.Fowlera) przy użyciu dojrzałego języka OO (Java, C++) do implementacji . Tło jest następujące: mam system z pewnymi komponentami sprzętowymi (które wprowadzają immanentne aktywne zachowanie systemu) oraz bazę danych konfiguracji dla meta systemu i danych konfiguracyjnych komponentów HW (są one nawet zwykle samodzielne, ponieważ komponenty HW są w stanie przetrwać i tak ich dane konfiguracyjne). Do realizacji protokołu wymiany danych konfiguracyjnych/statusowych z komponentami sprzętowymi wybraliśmy format Google Protobuf, który dobrze sprawdza się w bezpośredniej komunikacji przewodowej z tymi komponentami. Protokół ten jest już z powodzeniem używany z aplikacją GUI opartą na Javie za pośrednictwem połączenia TCP/IP z głównym systemem sterującym komponentem sprzętowym. Ta aplikacja ma pewne wady i wady konstrukcyjne ze względów historycznych. Teraz chcemy opracować abstrakcyjny model (model domeny) do konfiguracji i monitorowania tych komponentów HW, który reprezentuje bardziej zorientowany na przypadki użycia widok ogólnego zachowania systemu. Mam wrażenie, że zwykły model klasy Java najlepiej by się do tego nadawał (implementacja c++ wydaje się mieć zbyt duży narzut implementacji/integracji z wykonalnymi interfejsami językowymi). Definicje komunikatów Google Protobuf mogą nadal dobrze służyć do opisywania obiektów DTO używanych do interakcji z interfejsem API modelu domeny. Ale integracja po stronie klienta wiadomości Google Protobuf dla np. wiązanie danych w obecnym widoku nie wydaje się dobrym wyborem. Zastanawiam się nad dodatkowymi funkcjami serializacji, m.in. do wymiany danych w oparciu o JSON z widokami/kontrolerami. Większość lekkich rozwiązań wydaje się obejmować warstwę prezentacji opartą na Pythonie, wykorzystującą transfer danych oparty na WSGI lub JSON (przynajmniej nie jestem pewien, czy jestem w pełni o tym poinformowany). Czy ktoś może udzielić dobrych rad dotyczących najlepszych praktyk lub łatwych do zintegrowania frameworków w takim przypadku? **AKTUALIZACJA:** Zgodnie z moimi ostatnimi badaniami i komentarzami kolegów zauważyłem, że używanie Javy (i niektórych JVM) może nie być preferowanym wyborem do integracji z pythonem na ograniczonym systemie linux, tak jak my (działanie na ARM9 z trudno dyskutować o kosztach pamięci i MCU), ale moduły C / C ++ dobrze by to zrobiły (ponieważ stanowi to natywny interfejs do rozszerzeń Pythona, prawda?). Np. rozwiązanie oparte na piramidzie wydaje się zapewniać lekki framework, który pozwala zintegrować model domeny przy użyciu odpowiedniej fasady Pythona. Protobuf zapewnia również obsługę generowania klas Pythona, czy ktoś ma doświadczenie w integrowaniu wiadomości protobuf jako DTO z Pythonem? Mogę sobie wyobrazić, że dostarczam model domeny z odpowiedniego C/C++ API (chociaż nadal uważam, że zaangażowanych programistów wymaga większego wysiłku i wyższych umiejętności w zakresie tych języków). Wciąż szukam dobrego podejścia, które wspiera taką architekturę. Docenię wszelkie wskazówki!


title: Czy w Javie prywatni pomocnicy powinni przewyższać czy podchodzić pod metody publiczne?

text: Zauważyłem, że współpracownik i ja mamy przeciwne praktyki dotyczące porządkowania metod w naszych klasach Javy. Jeden z nas rozpoczyna klasę z jej głównymi publicznymi metodami, a następnie umieszcza wszystkich prywatnych pomocników. Drugi z nas pilnuje, aby publiczne metody były na samym końcu. Oczywiście jest to tylko kwestia stylu i nie ma właściwej odpowiedzi. Zanim jednak zdecydujemy, że ta sprawa to tylko kolejna walka Yooks vs Zooks i po prostu wybierzemy jedno lub drugie arbitralnie, zastanawiałem się, czy może istniała standardowa rekomendacja przewodnika po stylu Java lub jakiś praktyczny powód, dla którego jedno podejście jest lepsze od drugiego.


title: Nie jestem dobrym programistą (w logice), jak to naprawić?

text: Ok, więc oto mój problem: pracuję w dużej firmie, trochę jak dostałem pracę (szczerze, bo rozmowa była łatwa). Nie chodzi o to, że nie znam się na rzeczy, jestem całkiem dobry w rozumieniu javy, to są biblioteki itp. Ale kiedy kiedykolwiek próbuję rozwiązać jakiś problem logiczny, jest mi naprawdę trudno znaleźć rozwiązanie. Na przykład „konwersja liczby dziesiętnej na rzymską”, gdy zobaczyłem rozwiązanie, stwierdziłem, że jest to prosty problem. _Ale nie udało mi się go wdrożyć po 1-2 godzinach próbowania!_ Czuję, że jestem głupi i nie warto być inżynierem oprogramowania. Umiejętności rozwiązywania zagadek powinny pochodzić od świetnego programisty. Ale kiedy próbuję rozwiązać kilka zagadek, nie jestem w stanie znaleźć rozwiązania i po prostu go wyguglam! .... i nienawidzę tego! Kiedy mam problem (np. zaimplementować funkcję xyz) w pracy, jestem dosyć szybki i szanuję to w moim miejscu pracy, ale wcale nie jestem z tego dumny. Bo kiedy próbuję rozwiązać jakiś trudny matematycznie lub logicznie problem, potykam się. Nadal czuję, że kocham to, co robię (jako inżynier), ale jest mi naprawdę smutno, że nie jestem w stanie rozwiązać niektórych trudnych problemów logicznych, które wymyślają mi znajomi. Czuję się zdemoralizowany :( > TL; DR: Rozumiem rzeczy z praktycznego punktu widzenia (wdrażanie funkcji > w naszym produkcie), ale kiedy próbuję pracować nad problemem, powiedzmy ProjectEuler, > BRAKUJĘ! I muszę _wyostrzyć_ mój mózg! , moje pytania to: 1. Jak mam to naprawić? Czy powinienem zacząć od rozwiązywania (i zmuszania się do) problemów z projektami Eulera? _Nawet jeśli rozwiązanie podstawowych problemów zajmuje mi godziny_? Wrócić do podstaw i nauczyć się podstaw matematyki? 3. Rozwiązywanie zagadek nie sprawia mi przyjemności. Ale chcę, żeby to było zabawne dla siebie! I myślę, że jeśli zrozumiem je lepiej, to mi się spodoba! PS : Nigdy nie kształciłem się w CS (mój licencjat był elektrykiem). Ale to nie jest wymówka, żeby być beznadziejnym programistą. Dzięki!


title: Czy dobrym pomysłem jest zbieranie anonimowych statystyk użytkowania w darmowym programie?

text: Jestem głównym autorem wieloplatformowego wolnego oprogramowania/programu GUI o otwartym kodzie źródłowym. Chociaż program pobiera tysiące bezpośrednich pobrań miesięcznie, nie mam pojęcia, ile osób regularnie z niego korzysta. Jest również zawarty w niektórych dystrybucjach Uniksa i witrynach pobierania, co utrudnia liczenie. Byłoby dla mnie interesujące wiedzieć * Ile osób z niego korzysta? Czy powinienem zawracać sobie głowę dalszym rozwojem? * Z jakich funkcji programu (okna dialogowe, filtry importu itp.) ludzie najczęściej korzystają? To skupiłoby rozwój. Rozważam jakąś formę anonimowej informacji zwrotnej (z zaznaczeniem przez użytkownika), gdzie program wysyła miesięczne raporty z czasu od instalacji (całe miesiące), ile razy każde okno jest używane, ilość otwieranych plików, wersja numer i platformę. Użytkownik zostanie zapytany przy pierwszym wysłaniu i będzie istniała możliwość jego wyłączenia. Myślę, że zrobiłbym to dopiero po pierwszym tygodniu użytkowania, aby wykluczyć użytkowników jednorazowych. Czy to dobry i etyczny pomysł? Jestem w UE, więc możliwe, że mogą mieć zastosowanie przepisy o ochronie danych.


title: Co się stanie, jeśli zapomnę dodać czyjeś informacje o prawach autorskich w starym zatwierdzeniu?

text: Załóżmy, że mam publiczne repozytorium kodu źródłowego. Czy naruszam prawa autorskie, jeśli istnieje jakieś stare zobowiązanie, w którym nie dodałem jeszcze wszystkich informacji o prawach autorskich do kodu open source _innych_ osób? Szczegóły: Rozważmy następujący teoretyczny scenariusz: 1. Kopiuję i wklejam pliki z otwartym kodem źródłowym _kogoś innego_ do repozytorium. 2. Zobowiązuję się. 3. Na górze wyżej wymienionych plików umieszczam informacje o prawach autorskich i licencjach. 4. Zobowiązuję się. 5. Mija wiele miesięcy, wiele osób rozwija różne wersje gałęzi master. Teraz, wiele miesięcy później, zdaję sobie sprawę, że w commit no znajdują się pliki. 1 bez informacji o prawach autorskich. Czy muszę zmiażdżyć dwa wyżej wymienione commity i przebazować całe repozytorium? (Chociaż została opublikowana! Wszyscy byliby zirytowani?) A może wystarczy, że aktualna wersja repozytorium zawiera wszystkie potrzebne informacje o prawach autorskich? Przeformułowane, dla Git: Jeśli HEAD wszystkich gałęzi Git i wszystkie „opublikowane” tagi Git zawierają wszystkie wymagane informacje o prawach autorskich i licencjach, czy uważasz, że to wystarczy? I to byłyby obowiązki innych ludzi, gdyby sprawdzali inne zatwierdzenia i redystrybuowali? Czy też jestem winowajcą i zostanę wtrącony do więzienia?


title: Sceptyk w zespole scrumowym

text: Moja firma niedawno przeszła na zwinny sposób pracy iw ramach tego zaczęliśmy używać SCRUM. Chociaż czuję się z tym bardzo dobrze i czuję, że ten sposób jest lepszy od tradycyjnego, niektórzy z moich kolegów z drużyny nie podzielają tej samej opinii. W rzeczywistości są bardzo sceptycznie nastawieni do „zwinnych rzeczy” i nie traktują tego poważnie. Na przykład jeden z kolegów z drużyny zawsze spóźnia się na spotkania i nie przejmuje się tym. Zarządzający IMO stara się tego nie zauważać (może dlatego, że jest to nowe, a ludzie potrzebują czasu, aby się do tego przyzwyczaić). Moje pytanie brzmi, jak rozwiązać ten problem, nie wywołując konfliktu wewnątrz zespołu?


title: DDD i filtrowanie

text: Tworzę aplikację w stylu ddd. Mam więc złożony model domeny. Załóżmy, że mam obiekt taryfy i linię lotniczą. Każda Linia Lotnicza powinna zawierać kilka lub znacznie więcej Taryf. Mój interfejs powinien przedstawiać Model (tylko niewielka część złożonego modelu) jako listę linii lotniczych, kiedy użytkownik wybierze linię lotniczą, muszę pokazać listę taryf. Użytkownik może filtrować Taryfy (według czasu podróży, kosztu itp.). Jakie jest właściwe miejsce do filtrowania taryf i linii lotniczych? Zakładam, że powinienem to zrobić w ViewModel. Na przykład: Mój model domeny został zawinięty w Warstwę Usług -> UI współpracuje z ViewModel -> ViewModel pozyskuje dane z Warstwy Usług filtrując je i tworzy obiekty DTO dla UI. Albo nie mam racji?


title: Jak działają zawody takie jak Rails Rumble?

text: Nie jestem pewien, czy jest to właściwe pytanie, ale przez chwilę jest to naprawdę kłopotliwe. Jak pisze oficjalna strona internetowa: > The Rails Rumble to konkurs programowania rozproszonego, w którym zespoły składające się z jednej do czterech osób z całego świata mają 48 godzin na zbudowanie innowacyjnej aplikacji internetowej z wykorzystaniem Ruby on Rails lub innej opartej na Racku. Ruby > framework WWW. Po upływie 48 godzin panel ekspertów wybierze > dziesięciu najlepszych zwycięzców. Jedyną rzeczą, której nie rozumiem, jest to, w jaki sposób sędziowie upewniają się, że aplikacja została stworzona w określonym ograniczeniu czasowym. Jakość aplikacji jest tak wspaniała, że bardzo sceptycznie podchodzę do tego, by tak eleganckie aplikacje mogły powstać w ciągu 48 godzin, nawet jeśli zaplanowałeś to od razu na papierze.


title: Najbliższe środowisku rysowania „Mathematica Graphics[]” dla Pythona

text: Znając tylko Mathematicę i jej grafikę, muszę teraz nauczyć się rysować grafikę za pomocą Pythona dla serwera. Przeważnie warunkowe połączenie prostego kształtu. **Jaki byłby pakiet dla Pythona, który przybliżałby Grafiki rysunkowe do środowiska Mathematica Graphics?** Na przykład musiałbym zrobić coś takiego jak w: http://mathematica.stackexchange.com/questions/ 1010/2d-rozkład-gaussowski-współrzędnych-kwadratów#comment2475_1010


title: Jak mogę udzielić ograniczonej gwarancji na oprogramowanie?

text: Oprogramowanie, w przeciwieństwie do większości fizycznych produktów, które można kupić, jest sprzedawane z tak małą liczbą gwarancji, jaka może ujść sprzedawcy. Jako programista wydaje się to bardzo rozsądne, biorąc pod uwagę jakość prawie całego oprogramowania, z którego kiedykolwiek korzystałem. Pomyśl o wszystkim, od nieintuicyjnych idiomów, przez nieudokumentowane funkcje, nieodtwarzalność, brak obsługi współbieżności, podwójne unikanie danych wprowadzanych przez użytkownika i liczby zmiennoprzecinkowe, w których liczby dziesiętne pozwoli uniknąć długotrwałego nagromadzenia błędów, a nawet awarii, w których produkcyjna baza danych jest uszkodzona, a równowartość kilku osób zatrudnionych w zaatakowanej firmie jest marnowana na odzyskiwanie i reaktywne wdrażanie środków bezpieczeństwa. To trochę jak budowanie drapaczy chmur ze słomy i nitrogliceryny z nadzieją, że przetrwa do czasu, kiedy to problem kogoś innego lub zostanie całkowicie wymieniony. W takiej sytuacji stawiam hipotezę, że firma, która ufa swojemu oprogramowaniu na tyle, aby udzielać nawet niewielkich gwarancji za poniesione szkody, (gdyby jej oprogramowanie sprostało zadaniu) zyskałaby ogromną przewagę w _zaufaniu użytkowników_ i mogłaby postawić Google, Microsoft i Apple. wstydzić się za wysokiej jakości oprogramowanie i gromadzenie pieniędzy i talentów. Nie jestem zaznajomiony z aktualnym stanem weryfikacji oprogramowania i badania wymagań, więc nie wiem, czy taka możliwość jest tuż za rogiem, czy też hakujemy na górze wykałaczkami. Z pewnością istnienie jakiejkolwiek poważnej firmy lub organizacji zapewniającej takie gwarancje lub nawet pracującej nad wytycznymi dotyczącymi gwarancji byłoby niezwykle interesujące zarówno dla programisty, jak i użytkownika. Dlatego: Czy istnieją jakieś **międzynarodowe wytyczne** dotyczące udzielania gwarancji na oprogramowanie? Przykłady: * Jeśli wszystkie testy zakończą się pomyślnie, tak długo, jak system pozostaje w określonym stanie, gwarancja pokrywa koszty odzyskania danych w przypadku utraty danych. * Dopóki przestrzegane są [pewne powszechnie uznane wytyczne dotyczące bezpieczeństwa], dane obsługiwane przez system nie będą odczytywane przez osoby trzecie. Gwarancja może obejmować wszystko, od ceny oprogramowania po koszty prawne obsługi procesów sądowych związanych z prywatnością lub więcej.


title: OCR - punkt startowy

text: Naprawdę jestem początkujący w OCR i chciałbym wdrożyć system OCR. Jakieś wskazówki, gdzie mogę znaleźć materiał wprowadzający, mając na uwadze programowanie, na przykład jakie algorytmy lub modele reprezentacji danych muszę opanować? Znalazłem Tesseract, na Google Code, projekt open-source, ale zanim zagłębię się w kod, chciałbym mieć koncepcje za pasem. z góry dzięki, Yati


title: Losowość opakowanego RNG

text: _Wokół jest wiele pytań dotyczących generowania liczb losowych, ale nie mogłem znaleźć niczego, co dokładnie pasowałoby do mojego pytania. Przepraszamy, jeśli przegapiłem jedną._ Większość generatorów liczb losowych w oprogramowaniu ma rozkład płaski - w danym zakresie każda liczba jest tak samo prawdopodobna, jak każda inna (mniej więcej). Taka jest oczywiście intencja, ponieważ wszystko inne niż rozkład płaski nie jest całkowicie losowe, ponieważ niektóre liczby są bardziej prawdopodobne niż inne. Jednak zdarza się, że rozkład płaski nie jest pożądany. Na przykład podczas tworzenia gry często konieczne jest modelowanie rzeczywistych scenariuszy, z których wiele ma rozkład normalny (krzywa dzwonowa). Jeśli „dobry” PRNG (taki jak istniejący RNG z głównej biblioteki popularnego języka programowania) zostanie wprowadzony do prostego równania, takiego jak równanie krzywej dzwonowej, fali sinusoidalnej lub innego rozkładu, jak daleko możemy założyć, że wynikowy PRNG jest również „dobry”? Większość testów PRNG sprawdza, czy system jest czysto losowy, więc nie będą działać w tym systemie. Czy jest to tylko kwestia liczenia wyników przez długi czas i sprawdzenia, jak dobrze pasują do pożądanego rozkładu, czy istnieje prostszy (np. analityczny lub algebraiczny) sposób sprawdzenia tego? Każda pomoc byłaby mile widziana.


title: Jaka jest różnica między implementacją interfejsu jawnie a niejawnie?

text: W Visual Studio mogę kliknąć prawym przyciskiem myszy na interfejs i wybrać implementację interfejsu lub jawną implementację interfejsu. ![Zrzut ekranu programu Visual Studio](http://i.stack.imgur.com/x4Rx6.png) public class Test : ITest { public string Id // Generowany przez interfejs implementacji { get { throw new NotImplementedException(); } } string ITest.Id // Wygenerowane przez interfejs implementacji jawnie { get { throw new NotImplementedException(); } } } Jedyna różnica, jaką widzę między tymi dwoma, polega na tym, że nazwa interfejsu jest dodawana do właściwości interfejsu i metod podczas ich tworzenia, jeśli zdecydujesz się zaimplementować interfejs w sposób jawny. Uważam, że sprawia to, że kod jest nieco bardziej czytelny, ponieważ widzę, skąd pochodzi ta metoda/właściwość, jednak czy ma to jakiekolwiek znaczenie w sposobie użycia lub kompilacji klasy? I czy to naprawdę ma znaczenie, czy implementuję moje interfejsy niejawnie, czy jawnie?


title: Czy sprzężenie z ciągami jest „luźniejsze” niż z metodami klasowymi?

text: Zaczynam projekt grupy szkolnej w Javie, używając Swinga. Jest to prosty graficzny interfejs użytkownika w aplikacji komputerowej Database. Profesor dał nam kod z zeszłorocznego projektu, abyśmy mogli zobaczyć, jak on robi rzeczy. Moje początkowe wrażenie jest takie, że kod jest o wiele bardziej skomplikowany niż powinien być, ale wyobrażam sobie, że programiści często tak myślą, patrząc na kod, który nie tylko napisali. Mam nadzieję, że znajdę powody, dla których jego system jest dobry lub zły. (Zapytałem profesora, a on powiedział, że zobaczę później, dlaczego jest lepiej, co mnie nie satysfakcjonuje.) Zasadniczo, aby uniknąć jakiegokolwiek sprzężenia między jego trwałymi obiektami, modelami (logiką biznesową) i poglądami, wszystko odbywa się za pomocą smyczki. Trwałe obiekty, które są przechowywane w bazie danych, to tablice haszujące ciągów, a modele i widoki „subskrybują” się nawzajem, zapewniając klucze ciągów dla „zdarzeń”, które subskrybują. Po wyzwoleniu zdarzenia widok lub model wysyła ciąg do wszystkich swoich subskrybentów, którzy decydują, co zrobić dla tego zdarzenia. Na przykład w jednej z metod nasłuchiwania akcji widoków (wydaje mi się, że to po prostu ustawia parametr bicycleMakeField na obiekcie trwałym): else if(evt.getSource() == bicycleMakeField) { myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText( )); } To wywołanie w końcu trafia do tej metody w modelu pojazdu: public void stateChangeRequest(String key, Object value) { ... wiązka else ifs ... else if (key.equals("BicycleMake") == true) { ... robić rzeczy ... Profesor mówi, że ten sposób robienia rzeczy jest bardziej rozszerzalny i łatwiejszy w utrzymaniu niż po prostu wywołanie widoku metody na obiekcie logiki biznesowej. Twierdzi, że nie ma sprzężenia między poglądami i modelami, ponieważ nie wiedzą o swoim istnieniu. Myślę, że to gorszy rodzaj sprzężenia, ponieważ widok i model muszą korzystać z tych samych sznurków, aby działać. Jeśli usuniesz widok lub model albo popełnisz literówkę w ciągu, nie otrzymasz żadnych błędów kompilacji. Sprawia to również, że kod jest o wiele dłuższy, niż myślę, że powinien być. Chcę z nim o tym porozmawiać, ale wykorzystuje swoje doświadczenie w branży, aby odeprzeć wszelkie argumenty, które ja, niedoświadczony student, mógłbym wysunąć. Czy jest jakaś zaleta jego podejścia, której mi brakuje? * * * Aby wyjaśnić, chciałbym porównać powyższe podejście, z oczywistym sprzężeniem widoku z modelem. Na przykład, możesz przekazać obiekt modelu pojazdu do widoku, a następnie, aby zmienić markę pojazdu, wykonaj następujące czynności: vehicle.make = bicycleMakeField.getText(); Zredukowałoby to 15 wierszy kodu, które są obecnie używane TYLKO do ustawienia marki pojazdu w jednym miejscu, do jednego czytelnego wiersza kodu. (A ponieważ tego rodzaju operacje są wykonywane setki razy w całej aplikacji, myślę, że byłaby to duża korzyść pod względem czytelności i bezpieczeństwa.) * * * **Aktualizacja** Wraz z liderem zespołu zrestrukturyzowaliśmy strukturę chcieliśmy to zrobić za pomocą statycznego pisania, poinformowaliśmy profesora i dali mu demo. Jest na tyle hojny, że pozwala nam korzystać z naszych ram, o ile nie poprosimy go o pomoc i jeśli zdołamy nadążyć reszcie naszego zespołu – co wydaje się nam sprawiedliwe.


title: Przestudiuj projekt, aby móc go utrzymać w przyszłości

text: Dołączyłem jako nowicjusz (stażysta) do firmy programistycznej rozwijającej się dla Windows Store. Niewiele wiem o C#. Moja firma niedawno rozpoczęła tworzenie Sklepu Windows. Nie zajmowali się wcześniej rozwojem .Net, dlatego moja firma zatrudniła starszego pracownika .Net do ukończenia projektu. Za każdym razem, gdy zakończy projekt, opuści firmę. Po nim będę musiał utrzymać projekt. Więc muszę studiować przepływ projektu i analizować projekt, aby móc utrzymać błędy w przyszłości. Czy możesz podpowiedzieć, jak zacząć analizować projekt i na co zwrócić uwagę?