title: Jak przygotowujesz się przed rozpoczęciem kodowania?

text: Zanim zaczniesz coś kodować, jak się przygotowujesz? Czy tworzysz diagramy, pseudokod, makiety lub tego typu rzeczy, czy po prostu zaczynasz kodować i widzisz, co stanie się po drodze. Osobiście wolę jak najszybciej wskoczyć do kodu, kiedy czuję się komfortowo robiąc to, co mam do zrobienia. Jeśli coś jest bardziej skomplikowane lub pojawia się problem, zwykle biorę kartkę papieru i zaczynam pisać pseudokod, ponieważ w ten sposób mam mniej problemów z koncentracją (chyba to trochę dziwne i trudne do wytłumaczenia, ale cokolwiek... To działa!) Chyba każdy ma tam własną strategię, więc jaka jest twoja?


title: Dlaczego programiści piszą aplikacje o zamkniętym kodzie źródłowym, a następnie udostępniają je bezpłatnie?

text: Jako przedsiębiorca/programista, który zarabia na życie z pisania i sprzedaży oprogramowania, jestem zdumiony, dlaczego programiści piszą aplikacje, a następnie umieszczają je w Internecie za darmo. Znalazłeś się na jednej z najbardziej lukratywnych dziedzin na świecie. Firma z 99% marżą zysku, w której nie masz fizycznego produktu, ale możesz podać swoją cenę; firma, w której możesz wysłać wadliwy produkt, a klient nadal go kupi. Od czasu do czasu niektóre z naszych programów dostaną darmowego konkurenta i myślę, że ten gość jest szalony. Mógł dobrze sobie z tego żyć, ale zamiast tego zdecydował się uwolnić. * Nie lubisz gigantycznych stosów pieniędzy? * Czy nie jesteś pewien, że ludzie za to zapłacą? * Czy boisz się, że będziesz musiał go wspierać? To źle dla biznesu programowania, ponieważ teraz klienci oczekują, że będą w stanie znaleźć darmowe rozwiązanie każdego problemu. (Widzę tweety typu „czy jest jakieś dobre BEZPŁATNE oprogramowanie dla XYZ?, czy muszę za to zapłacić 20 USD”.) Jest to również złe dla klientów, ponieważ bezpłatne rozwiązania w końcu się psują (z powodu nowego systemu operacyjnego lub czego innego) i ponieważ jest darmowy, deweloper nie ma powodu, aby go naprawiać. Klienci otrzymują darmowe, ale przestarzałe oprogramowanie, które już nie działa i nigdy nie jest aktualizowane. Klient płacze. Deweloper wciąż pracuje w swoim boksie. Co daje? PS: Nie zamierzam rozpoczynać otwartego oprogramowania/oprogramowania, które powinno być wolnym rodzajem debaty. Mówię o tym, kiedy programiści tworzą aplikację o zamkniętym kodzie źródłowym i czynią ją darmową.


title: Testy zmiany stanu

text: W rozdziale 3 swojej książki Sztuka testowania jednostkowego: z przykładami w języku C# Roy Osherove opisuje koncepcję testowania zmiany stanu systemu. Przykładowy kod, którego używa, wygląda następująco: public class LogAnalyzer { public bool WasLastFileNameValid { get; ustawić; } public bool IsValidLogFileName(string filename) { WasLastFileNameValid = false; if (string.IsNullOrEmpty(nazwapliku)) { wyrzuć nowy ArgumentException("nazwa pliku musi być podana"); } if (filename.EndsWith(.SLF", StringComparison.InvariantCultureIgnoreCase)) { WasLastFileNameValid = true; zwróć prawdę; } zwróć fałsz; } } i chcemy przetestować stan właściwości `WasLastFileNameValid`. W tym celu autor stosuje następujący test: [Test] public void IsValidFileName_WhenCalled_ChangesWasLastFileNameValid() { LogAnalyzer la = MakeAnalyzer(); la.IsValidLogFileName("złanazwa.foo"); Assert.False(la.WasLastFileNameValid); } Widzę jednak następujące problemy z tym testem: 1. Część nazwy testu 'wynik' to `ChangesWasLastFileNameValid`, ale test tak naprawdę nie sprawdza, czy wartość właściwości uległa zmianie; mogło być `fałszywe` nawet przed wywołaniem `IsValidLogFileName`. 2. Test sprawdza tylko jeden przypadek, w którym ostatnie wywołanie było nieprawidłową nazwą pliku. Zamiast tego użyłbym następującego testu (używając `xunit.net`) [Teoria] [InlineData(true, "fileWithValidExtension.SLF", true)] [InlineData(true, "fileWithBadExtension.FOO", false)] [InlineData(false , "fileWithValidExtension.SLF", true)] [InlineData(false, "fileWithBadExtension.FOO", false)] public void IsValidLogFileName_WhenCalled_ChangesWasLastFileNameValid( bool preState, string filename, bool postState) { LogAnalyzer Analyzer = new analizator.WasLastFileNameValid = stan wstępny; analizator.IsValidLogFileName(nazwa pliku); Assert.Equal<bool>(postState, Analyzer.WasLastFileNameValid); } Tutaj testuję, czy wartość się zmienia, a także testuję wszystkie scenariusze. Czy to lepszy test?


title: Dlaczego minimalna wartość int, podwojeń itd. jest o 1 dalej od zera niż wartość dodatnia?

text: Wiem, że ma to coś wspólnego z uzupełnieniem do 2 i dodaniem jedynki, ale nie rozumiem, jak można zakodować jeszcze jedną liczbę z taką samą liczbą bitów, jeśli chodzi o liczby ujemne.


title: Jaka jest różnica między tymi definicjami właściwości w C#

text: class mojaKlasa { int wiek; public int Wiek { get{wiek powrotu;} set{wiek = wartość;} } Versus class mojaKlasa { public int Wiek{get; set;} } Jaka jest różnica między tymi dwoma? Czy oba są takie same?


title: Czy należy używać średników do oddzielania instrukcji Scala?

text: Jestem przyzwyczajony do oddzielania instrukcji średnikiem od Javy, więc naturalnie robię to również w kodzie Scala. Czuję też, że kod jest łatwiejszy do odczytania, ponieważ widać, gdzie kończy się jedna instrukcja, a zaczyna druga. Ale wiele razy, kiedy wysyłam kawałek kodu Scala na SO, kod jest edytowany tylko po to, aby usunąć średniki. 1. Czy powinienem używać średników, czy nie? Czy istnieją jakieś „oficjalne” wytyczne lub styl kodowania? 2. Czy są przypadki, w których wymagane są średniki, w przeciwnym razie kod jest niejednoznaczny?


title: Osiągnięcie pośredniego stanu programowania

text: Jestem inżynierem oprogramowania, który zajmował się programowaniem pozycji w VBA (choć nie śmiem uważać tego „prawdziwego” doświadczenia, ponieważ było to próba i błąd!), Perl z CGI, C# i ASP.NET. Dwie ostatnie są podyplomowe, z moim wejściem do „rzeczywistego świata”. Jestem 2 lata po college'u i mam 5 lat doświadczenia (łącznie) we wszystkich wymienionych przeze mnie językach. Jednak jeśli chodzi o moje CV, mogę odłożyć tylko 2 lata na C# i niecały rok na ASP.NET. Czuję, że _znam_ C#, ale nadal muszę spędzać czas, zastanawiając się „Co robi ta metoda?”, podczas gdy niektórzy starsi inżynierowie mogą od razu powiedzieć: „Och, Metoda X to robi, nawet na to nie patrząc metoda przed." Więc wiem empirycznie, że jest tam przepaść, ale nie jestem do końca pewien, jak ją zasypać. Zacząłem programować w Project Euler i sięgnąłem po książkę o wzorcach projektowych, ale nadal czuję, że każdego dnia stąpam po wodzie, zamiast iść do przodu. Nie chcę przez to powiedzieć, że nie czuję, że zrobiłem postęp, oznacza to po prostu, że każdego dnia dochodzę do celu, a wciąż widzę w oddali szczyt góry. Moje pytanie brzmi: jak przezwyciężyłeś ten płaskowyż? Jak długo Ci to zajęło? Jakie metody możesz mi w tym zasugerować? Przeczytałem _Code Complete_, _The Mythical Man Month_ i _CLR via C#, 2nd edition_ \-- moje pytanie brzmi: Co mam teraz zrobić? * * * **Edytuj** : Właśnie znalazłem to pytanie w projektach dla programisty średnio zaawansowanego. Myślę, że to wzbogaca dyskusję (choć nie zastępuje mojego pytania). W związku z tym dodaję go do pytania jako "Aby uzyskać więcej informacji".


title: Pytania, które należy zadać zewnętrznemu dostawcy API

text: Mam się spotkać z deweloperem/osobą do sprzedaży z nowego zasobu innej firmy, z którego zamierzamy zacząć korzystać. Głównym tematem, który mnie interesuje, jest ich API, ponieważ będę programistą, który z niego skorzysta i wyjaśni to reszcie zespołu. Jakie pytania polecasz zadać? Rzeczy, o których już myślę, to: * Co się stanie i w jaki sposób otrzymam powiadomienie, gdy zmniejszą wartość metody? * Czy są jakieś przestoje? * Z kim zajmę się pierwszym, gdy będę miał problemy z API?


title: Czy PHP jest prostszym językiem wprowadzającym do tworzenia stron internetowych zaplecza w porównaniu z Ruby on Rails?

text: Mam koordynatora programu dla kursu, który zamierzam uczyć, który chce zmienić kurs "Wprowadzenie do tworzenia stron internetowych" z używania PHP na Ruby (zakładam, że ma na myśli Ruby on Rails). Jego uzasadnieniem jest to, że Ruby „jest przyszłością tworzenia stron internetowych”. Ponieważ nie możemy spierać się o przyszłość, tylko o trendy, mam nadzieję zbudować argument przeciwko temu w oparciu o „umiejętność uczenia się”. Moje osobiste doświadczenie w nauce zarówno PHP, jak i Ruby on Rails jest takie, że PHP było bardziej naturalne, po prostu dlatego, że możesz zacząć wstawiać kod gdziekolwiek potrzebujesz i stopniowo ulepszać strukturę kodu i organizację od tego momentu. Ruby on Rails wymaga jednak znacznie ostrzejszej krzywej uczenia się struktury i organizacji kodu (moim zdaniem). Jednak nauczyłem się Ruby on Rails znacznie później w mojej karierze programistycznej, więc było to o wiele łatwiejsze niż uczeń po raz pierwszy. Więc moje pytanie brzmi, jaki język byłby bardziej odpowiedni do prowadzenia kursu dla początkujących na temat tworzenia stron internetowych, biorąc pod uwagę te dwie opcje?


title: jakie są najlepsze wskazówki dotyczące przechowywania obrazów w bazie danych?

text: Czy właściwe jest przechowywanie plików graficznych w bazie danych? A może lepiej byłoby przechowywać w bazie tylko ścieżkę pliku, a sam plik przechowywać na serwerze? Czy istnieją inne metody na zrobienie tego dobrze?


title: Jak utworzyć bezpieczny statyczny licznik int dla konkretnego żądania?

text: W jednej z moich aplikacji serwerowych mam klasę, która wygląda tak: class A { static int _value = 0; void DoSomething() { // żądanie zaczyna się tutaj _value = 0; _wartość++; // żądanie kończy się tutaj } // Ta metoda może być wywoływana wielokrotnie podczas żądania void SomeAsyncMethods() { _value++; } } Problem polega na tym, że SomeAsyncMethods jest asynchroniczne. Można wywoływać wiele razy. Czego potrzebuję, gdy żądanie zaczyna się ustawiać _value = 0, a następnie asynchronicznie zwiększać to. Po zakończeniu prośby potrzebuję sumy. Problem polega jednak na tym, że inne żądanie w tym samym czasie może uzyskać dostęp do klasy.


title: Czym różni się „twierdzenie o nieskończonej małpie” od programowania genetycznego do rozwiązywania problemów?

text: To może być trochę otwarte, ale słyszałem wyjaśnienie tego wykładu o tym, jak GP może być używany do naprawiania błędów, i zastanawiam się: czym różni się to od twierdzenia o nieskończonej małpie?


title: W jaki sposób optymalizacja sprawia, że kod jest „bardziej ekologiczny”?

text: Wydaje się jasne, że niezależnie od użytego języka zoptymalizowana aplikacja zużywa mniej zasobów niż źle napisana aplikacja i wymaga mniejszej liczby serwerów do obsługi podobnej liczby żądań dla witryny o dużym natężeniu ruchu. Podobnie lubię zakładać, że aplikacja napisana w języku skompilowanym, takim jak C++ lub. NET wymaga mniejszej liczby serwerów, niż gdyby został napisany w PHP, na przykład z tych samych powodów wydajnościowych. Być może dlatego Facebook zaprojektował kompilator aplikacji napisanej w PHP. Facebook niedawno udostępnił publicznie architekturę swoich centrów danych, aby sprowokować myśl o zmniejszeniu ich śladu ekologicznego, ale nie jestem pewien, czy sprzęt ponosi wyłączną odpowiedzialność, jeśli zoptymalizowany kod wymaga mniejszej liczby serwerów do obsługi wielu upraszanie. Dlatego zastanawiam się, czy przeprowadzono badania ilościowe, z dodatkowymi danymi liczbowymi, aby pokazać, w jaki sposób optymalizacja kodu może zaoszczędzić zasoby i maszyny, zmniejszając tym samym ślad ekologiczny centrów danych dedykowanych pojedynczej aplikacji, takiej jak Facebook. Jeśli istnieją przykłady typu „robić lub nie robić” dla języków, a także wskazówki, jak uczynić kod bardziej „zielonym”, byłbym bardzo zainteresowany. Czy masz jakieś zasoby na ten temat lub myśli, którymi możesz się podzielić?


title: Użyj funkcji wewnątrz deklaracji pętli

text: **Jaka jest najlepsza praktyka?** To: for ($i = 0; $i < count($array); $i++) { //stuff } Lub, co zwykle robię: $count = count($array) ; for($i = 0; $i < $count; $i++) { //stuff } Czy to samo z magią optymalizacji kompilatora?


title: Czy można bezpiecznie ufać emulatorom podczas tworzenia aplikacji mobilnych na wiele platform/rozdzielczości?

text: Obecnie pracuję nad kilkoma aplikacjami mobilnymi przy użyciu PhoneGap na Androida, testując tylko na 3 różnych rodzajach smartfonów i używając emulatorów do testowania na innych docelowych rozdzielczościach telefonów. Później pewnie użyję emulatora iOS. Chciałbym wiedzieć, czy będę miał z tym jakieś problemy.


title: Tworzenie aplikacji rozproszonych/sieciowych, które są skoncentrowane na użytkowniku, ale NIE tworzą aplikacji internetowych

text: Byłem ciekaw, jakie inne architektury istnieją dla biznesu lub rozwoju zorientowanego na użytkownika, które nie są pisane przy użyciu aplikacji internetowych. Czy te architektury są używane dzisiaj? Jeśli jesteś lub byłeś w świecie biznesu i chcesz połączyć się z aplikacją ze zdalnej lokalizacji, jakiej technologii byś użył (nie jest ona oparta na aplikacji internetowej)?


title: Dlaczego wszyscy nienawidzą SharePoint?

text: Czytając ten temat o najbardziej przereklamowanych technologiach, zauważyłem, że SharePoint jest niemal powszechnie potępiany. Moje doświadczenie z SharePoint (zwłaszcza z najnowszymi wersjami) jest takie, że inteligentnie realizuje on swoje podstawowe kompetencje. Mianowicie: * **Scentralizowane repozytorium dokumentów** \- pobierz wszystkie te dokumenty biurowe z poczty e-mail (z wersjonowaniem) * **Tworzenie treści edytowalnych przez użytkownika do wewnętrznego rozpowszechniania informacji** \- wygląd, strona HR z aktualnymi numerami telefonów i polityka urlopowa * **Współpraca projektowa** \- kilka kliknięć tworzy witrynę z dokumentami projektu, listą zadań, prostym harmonogramem, dyskusją w wątkach i ewentualnie listą wszystkich e-maili związanych z projektem. * **Bardzo podstawowa automatyzacja biznesu** \- po wypełnieniu formularza urlopowego do działu HR wysyłany jest e-mail. Z mojego doświadczenia wynika, że SharePoint staje się naprawdę brzydki tylko wtedy, gdy organizacja próbuje popchnąć go w kierunku, do którego nie jest przeznaczony. SharePoint nie jest CRM, ERP, bazą błędów ani zewnętrzną stroną internetową. SharePoint jest wystarczająco elastyczny, aby służyć w mgnieniu oka, ale nie zastępuje dedykowanego narzędzia. (Microsoft jest tak samo winny wpychania SharePoint do domen, do których nie należy). _Jeżeli używasz SharePoint do tego, do czego jest przeznaczony, to naprawdę działa._ Myśli?


title: Co omówić w rozmowie „wprowadzenie do Pythona”?

text: Jestem w zespole studenckim, który koncentruje się na tworzeniu stron internetowych. Moi koledzy z zespołu interesują się Pythonem i tylko ja się go nauczyłem, więc poproszono mnie o wygłoszenie prelekcji „wprowadzenie do Pythona” w przyszłym tygodniu. Chciałbym wysłuchać twoich rad dotyczących tego, o czym rozmawiać, aby rozmowa była interesująca, a nie tylko kilka rzeczy gramatycznych. PS: moi koledzy z zespołu znają PHP i .NET


title: Projektowanie oprogramowania: zbuduj szybko czy dobrze?

text: Czy budując nietrywialną aplikację, najlepiej skupić się na szybkim działaniu i korzystaniu ze skrótów w kodzie, takich jak mieszanie logiki modelu z widokami, łamanie enkapsulacji – typowe zapachy kodu? A może lepiej poświęcić czas z góry na zbudowanie większej ilości architektury, skompilować ją poprawnie, ale ryzykując, że cały ten dodatkowy kod może nie zostać wykorzystany, ponieważ projekt jest dość płynny i być może będziesz musiał go wyrzucić, jeśli spowodują to opinie iść w innym kierunku? Dla kontekstu tworzę aplikację komputerową. Jestem jedynym programistą i zajmuję się tym w niepełnym wymiarze godzin, ponieważ mam codzienną pracę. Teraz, jeśli chodzi o pracę, staram się robić rzeczy we właściwy sposób, jeśli pozwala na to harmonogram. Ale w przypadku tego projektu, który, jak sądzę, ulegnie zmianie, gdy otrzymam informację zwrotną od ludzi, nie jestem pewien, czy jest to właściwe podejście. W tym tygodniu spędziłem kilka godzin na tworzeniu podręcznika Projekt kontrolera widoku modelu, aby przekazać zmiany w modelu do widoku. Ogólnie jest to świetne, ale nie jestem pewien, czy potrzebuję wielu widoków do wyświetlania danych i wiem, że mógłbym wyświetlać rzeczy szybciej bez dodatkowej architektury. Mając około 10-15 godzin tygodniowo na projekt, wydaje mi się, że stworzenie czegoś, co mogę zademonstrować, zajmie wieki, jeśli będę postępować zgodnie z dobrymi praktykami oprogramowania. Wiem, że moich użytkowników nie obchodzi, że używałem MVC wewnętrznie, chcą po prostu czegoś, co rozwiąże ich problem. Ale byłem też w sytuacji, w której zaciągnąłeś tak wiele długu technicznego z powodu skrótów, że kod jest po prostu niewiarygodnie trudny w utrzymaniu i dodawaniu nowych funkcji. Chciałbym usłyszeć, jak inni podchodzą do tego rodzaju problemów.


title: Jak obsłużyć dwa algorytmy, które wydają się takie same, ale różne?

text: Mam dwa algorytmy, które mają wiele cech wspólnych. Jedna wykonuje procedurę iteracyjną, druga tylko pierwszą iterację. Wyniki są oczywiście różne (jedna klasa dostarcza wyników, których druga nie może), podobnie jak konfiguracja (proces iteracyjny wymaga tolerancji i maksymalnej liczby iteracji, które są nieistotne w przypadku nieiteracyjnym). Czy powinienem mieć unikalną klasę z wewnętrznymi if (jak `if (iteracyjne) zrób to inaczej zrób to`) czy powinienem zaimplementować dwie różne klasy (i potencjalnie umieścić wspólny kod w dostępnym miejscu, aby można go było udostępniać?) myślisz ?


title: jak uczyć się Javy

text: To pytanie zadaję, ponieważ nie mogłem znaleźć żadnego źródła, które daje pełny przegląd rozwoju javy. Chcę tylko wiedzieć, gdzie technologia Java jest obecnie na rynku i co jest preferowane do rozwoju! Java zawsze pozostaje najlepszym językiem programowania z punktu widzenia rozwoju. Jednak java jest kombinacją j2ee, j2me, jsp, jsf, spring, innych frameworków, komponentów interfejsu użytkownika, jndi, narzędzi sieciowych i różnych innych "J"! Jednak nauka języka Java jest zdecydowanie zależna od wymagań programistycznych, ale mimo to, aby być dobrze doświadczonym programistą Java, jaki jest zorganizowany sposób uczenia się języka Java? Co jest preferowane w obecnej technologii? a co jest obecnie przestarzałe ?


title: Używanie zagnieżdżonych klas publicznych do organizowania stałych

text: Pracuję nad aplikacją z wieloma stałymi. Podczas ostatniego przeglądu kodu okazało się, że stałe są zbyt rozproszone i powinny być zorganizowane w jeden „główny” plik stałych. Spór dotyczy tego, jak je zorganizować. Większość uważa, że użycie nazwy stałej powinno wystarczyć, ale doprowadzi to do kodu, który wygląda tak: public static final String CREDITCARD_ACTION_SUBMITDATA = "6767"; publiczny statyczny końcowy String CREDITCARD_UIFIELDID_CARDHOLDER_NAME = "3959854"; publiczny statyczny końcowy String CREDITCARD_UIFIELDID_EXPIRY_MONTH = "3524"; publiczny statyczny końcowy String CREDITCARD_UIFIELDID_ACCOUNT_ID = "3524"; ... publiczny statyczny końcowy String BANKPAYMENT_UIFIELDID_ACCOUNT_ID = "9987"; Uważam, że tego typu konwencja nazewnictwa jest kłopotliwa. Pomyślałem, że łatwiej byłoby użyć publicznej klasy zagnieżdżonej i mieć coś takiego: public class IntegrationSystemConstants { public class CreditCard { public static final String UI_EXPIRY_MONTH = "3524"; publiczny statyczny końcowy String UI_ACCOUNT_ID = "3524"; ... } public class KontoBankowe { public static final String UI_ACCOUNT_ID = "9987"; ... } } Ten pomysł nie został dobrze przyjęty, ponieważ był "zbyt skomplikowany" (nie poznałem zbyt wielu szczegółów, _dlaczego_ to może być zbyt skomplikowane). Myślę, że tworzy to lepszy podział między grupami powiązanych stałych, a autouzupełnianie ułatwia również ich znalezienie. Nigdy jednak nie widziałem, żeby to się robiło, więc zastanawiam się, czy jest to przyjęta praktyka, czy są lepsze powody, dla których nie powinno się tego robić.


title: Jaka jest alternatywa DRY dla plików nagłówkowych C++?

text: Czy w c++ jest inny sposób, poza plikami nagłówkowymi, na użycie funkcji zdefiniowanej w pliku A.cpp, wewnątrz pliku B.cpp, która byłaby uważana za dobrą praktykę programistyczną?


title: mysql, przechowuj pojedynczą część danych na wiersz

text: Przygotowuję się do napisania systemu bazodanowego w PHP i MYSQL, który będzie przechowywał każdą wysłaną do niego informację jako osobny wiersz. Każdy wiersz będzie przechowywać kilka fragmentów metadanych (znacznik czasu, kto go utworzył, numer wersji, numer atrybutu) i jeden fragment „prawdziwych” danych (nazwa pliku, numer telefonu, nazwa użytkownika itp.). dane serializowane. Celem jest stworzenie systemu, który można łatwo tworzyć przyrostowo, przeszukiwać pojedyncze wiersze i przeglądać na podstawie jego stanu w określonym dniu. Czy to skuteczny projekt, czy powinienem zmienić swoje podejście? Baza danych będzie wykorzystywana do obsługi niestandardowego systemu CMS, który jest przeznaczony do przechowywania połączonego systemu danych. Będzie to dotyczyło danych klientów, danych o lokalizacji i danych o pracy. Chcemy mieć możliwość śledzenia poszczególnych zmian w bazie danych w zależności od czasu, abyśmy mogli utrzymywać kopię zapasową na miejscu (system będzie oparty na chmurze), z której możemy skorzystać w przypadku utraty łączności z Internetem. System będzie w dużym stopniu oparty na uprawnieniach, umożliwiając użytkownikom przeglądanie/zmianę informacji, do których są upoważnieni. Większość danych będzie wyświetlana w formacie osi czasu, w oparciu o czas wprowadzenia informacji do systemu.


title: Co jest takiego trudnego w połączeniach SVN?

text: > **Możliwy duplikat:** > Jestem maniakiem Subversion, dlaczego powinienem brać pod uwagę Mercurial lub > Git lub jakikolwiek inny DVCS? Co jakiś czas słyszysz, jak ktoś mówi, że rozproszona kontrola wersji (Git, HG) jest z natury lepsza niż scentralizowana kontrola wersji (jak SVN), ponieważ łączenie jest trudne i bolesne w SVN. Chodzi o to, że nigdy nie miałem żadnych problemów z połączeniem w SVN, a ponieważ słyszysz tylko takie twierdzenia wysuwane przez zwolenników DVCS, a nie przez rzeczywistych użytkowników SVN, przypomina mi to te nieprzyjemne reklamy w telewizji, w których spróbuj sprzedać ci coś, czego nie potrzebujesz, każąc nieudolnym aktorom udać, że to, co już masz i działa dobrze, jest niewiarygodnie trudne w użyciu. A przypadkiem użycia, który jest zawsze przywoływany, jest ponowne połączenie gałęzi, co ponownie przypomina mi te reklamy produktów typu strawman; jeśli wiesz, co robisz, w pierwszej kolejności nie powinieneś (i nigdy nie powinieneś) ponownie scalać gałęzi. (Oczywiście trudno to zrobić, gdy robisz coś zasadniczo złego i głupiego!) Tak więc, pomijając absurdalny przypadek użycia Strawmana, co jest w łączeniu SVN, które jest z natury trudniejsze niż łączenie w systemie DVCS?


title: Czy Swift może być używany do czegokolwiek poza aplikacjami na iOS i OSX?

text: Bardzo lubię Swifta. Ale tworzenie natywnej aplikacji na iOS lub OSX nie jest całkowicie tym, co chciałbym z nią zrobić. Czy Swift może być używany w innych kontekstach? Na przykład aplikacja internetowa działająca na serwerze linux? A może mikrokontrolery Arduino? A może jest zamknięty w ekosystemie Apple?


title: Skąd Railsy uzyskują datę i godzinę do tworzenia rekordów?

text: Mam aplikację Rails z modelem danych o nazwie „jobs” i mam do czynienia z krytycznym skrzyżowaniem wyboru projektu. Nie wiem wystarczająco dużo o Railsach i ich wewnętrznych działaniach, aby móc z całą pewnością powiedzieć, co powinienem zrobić, pomimo pełnego przeczytania Railsów i dokumentacji ruby. Chcę mieć możliwość dokładnego wyświetlania wieku rekordu pracy w dniach. Kiedy więc klient się loguje, widzi, że przesłane przez niego zadanie ma „x” dni. Skąd aplikacja Rails na Heroku pobiera znaczniki czasu? Od Heroku? czy zegar systemowy klienta? Jeśli klient ma przestarzały zegar systemowy i przesyła zadanie, może to naprawdę zepsuć sortowanie jego listy zadań, nie wspominając już o nadzorcy ewidencji zadań. Jakieś porady tam? EDYCJA: Żeby było jasne, nie pytam, jak wyświetlać zadania według ich daty, ale do którego zegara ma aplikację szynową na bazie Heroku, która jest zapisywana.


title: Czy okulary do komputera działają?

text: Dostępnych jest kilka różnych typów „okularów komputerowych”: * Okulary Steelseries * Okulary komputerowe Gunnar Wydają się być zaprojektowane do długich sesji grania. Wydaje się trochę głupie, ale pomyślałem, że zapytam, czy ktoś ich używał? Czy myślisz, że pomogłyby w długich maratonach kodowania lub zmniejszyły zmęczenie oczu?


title: Co to jest Visual Studio Lightswitch i czym różni się od normalnych wersji programu Visual Studio?

text: Czym Visual Studio Lightswitch różni się od zwykłego programu Visual Studio? W jakich sytuacjach używałbyś tego środowiska IDE w zwykłym programie Visual Studio? Próbuję zdecydować, czy jest to coś, co byłoby dla mnie opłacalne, aby poświęcić czas na naukę, ponieważ obecnie zajmuję się programowaniem WPF/Silverlight.


title: Niski poziom a wysoki poziom rozwoju

text: Naprawdę chcę rozpocząć pracę nad rozwojem systemu operacyjnego, szczególnie nad rozwojem jądra, w ramach projektu Darwin Open Source – budowanie własnego systemu operacyjnego podobnego do Maca, jednak po prostu nie mam wystarczającego doświadczenia, aby pracować w czarnej sztuce tworzenia jądra – jestem ciągle odstraszają komentarze : "Twój kod musi być bliski spektakularności", "Musisz być weteranem programowania, aby pisać w przestrzeni jądra" Próbowałem więc znaleźć inne projekty. Obecnie pracuję w CryENGINE 3, ale po prostu nie mogę dostać się do API, ponieważ ciągle chcę rozpocząć rozwój jądra. Nie mam doświadczenia w programach użytkownika, jednak badałem i tworzyłem małe programy oparte na asemblerze. Uwaga: mam 17 lat. Czy są jakieś projekty, które możesz mi polecić na początek, abym mógł zdobyć trochę doświadczenia w zastosowaniach typu user-land? Uważam, że zbudowanie czegoś rewolucyjnego jest prawie niemożliwe. Mam doświadczenie z C, C++ , C# , Java , Haskell , Ruby , Lua i ASM. Plus: Jaka jest szansa na stworzenie biznesu z rozwoju oprogramowania?


title: lekkie, zrównoważone procesy zapewniające dobrą jakość kodu/projektu?

text: Ok gang, następne pytanie: jak myślicie, jakie są najlepsze procesy poprawiające jakość kodu tworzonego przez (korporacyjny) zespół? (Pytanie o kult jakości było dobre, ale szukam konkretnych sugestii, co możemy zrobić.) Tło: zespół jest zróżnicowany, jak zwykle: > Jest genialny koder, którego kod jest nieprzenikniony i nieudokumentowany i > którego umiejętność komunikowania się nie jest tak dobra, co objawia się > niecierpliwością lub wymówkami bycia zajętym. > > Jest programista w połowie drogi, który po prostu chce > wykonać swoją pracę i wrócić do domu. Nowe metodologie byłyby w porządku, ale on/ona nie zainicjuje. > > Jest osoba, która naprawdę nie chce się zmieniać (tzn. jest wrogo nastawiona do zmiany z jakiegokolwiek powodu), zadowolona ze swojego obecnego poziomu (stary sposób). >> Jest osoba, która tak naprawdę nie wie jakie są możliwości, > po prostu kopiuje kod innych osób (i to też działa). > > Jestem oczywiście ja, przystojny, czarujący, genialny programista, który poświęca > czas na napisanie dobrej, przejrzystej dokumentacji i testów jednostkowych i po prostu chce > jak najlepiej dla grupy i nie jest usatysfakcjonowany status quo > (technologicznie ) i nie może być problemem. Istnieją wszystkie te piękne zasady: OOP (wysoce spójne, luźno powiązane), programowanie funkcjonalne (najczęściej widzę tutaj /brak efektów ubocznych lub parametrów in-out/), silne statyczne typowanie (brak błędów typu runtime, metoda nie znalezione itp.), oddzielenie obaw (logika biznesowa oddzielona od interfejsu użytkownika i bazy danych). I jest stara szkoła wielkich bąbelków kodu, które robią wiele rzeczy, które są ze sobą splecione, oraz zmienne globalne i ich kuzyni, singletony i ogromne klasy z mnóstwem elementów danych. Jak więc dostać się z punktu A do punktu B? Sugestie oddolne są ignorowane. [edytuj: cóż, żeby być bardziej dokładnym, jeden programista biegający dookoła i mówiący ludziom, co robią źle, nie jest najlepszym sposobem, zarówno z punktu widzenia menedżerów, jak i współpracowników. Nie robię tego, ponieważ nie chcę być Cassandrą.] Czy możemy robić skrócone przeglądy kodu? Na przykład... po prostu powiedz, jakie są twoje nowe klasy i metody (ignorując implementacje). Lub zadzwoń (po angielsku), gdzie dodałeś nową funkcję (np. jaką metodę zaktualizowałeś, aby to zrobić)? Co się stanie, jeśli osoby, które muszą przejrzeć te rzeczy, są stale na spotkaniach (wiesz, jak to się dzieje: nowe funkcje, partnerstwo, szalenie głębokie błędy, które wywołują krzyki ważnych klientów[2])? Czy działałoby wiki lub coś w rodzaju społeczności, aby przyciągnąć więcej oczu do nowych projektów? Jak możemy zaangażować tych, którzy nie chcą się angażować? Czyli... lekkie, trwałe, efektywne procesy? Jakieś pomysły? Co działa na was wszystkich? (Wiem, że ludzie powiedzą programowanie w parach. Ok, przyznaję, ale to nie będzie możliwe tutaj.) Dzięki. [2] Ok, przesadzony język. s/krzyczeć/skupić się na konkretnych błędach/


title: lepszy sposób na naukę programowania z zamiarem zdobycia pracy?

text: > **Możliwy duplikat:** > Jak zdobyć pracę bez doświadczenia? Tak więc przez ostatnie 2 lata pracowałem nad oprogramowaniem komputerowym kodującym GUI Swing. Czuję, że nawet posiadanie strony internetowej na żywo sprzedającej moje oprogramowanie komputerowe java (klienci kupują je od czasu do czasu) nie jest wystarczającym doświadczeniem, w przeciwieństwie do opinii z tej strony, bardzo niewiele z mojego doświadczenia w budowaniu, prowadzeniu biznesu oprogramowania jest omawiane podczas wywiadów. Często stanowiska pracy mają obszerną listę kwalifikacji, które myślę, że mogę objąć 70%, ale nie mam przykładowych projektów dla każdego języka i frameworka, raczej bawię się różnymi bibliotekami open source i buduję rzeczy w oparciu o to, co jest potrzebne. Kiedy przeprowadzam wywiady, czasami przekazuję wszystkie pytania techniczne, ale czasami nie, gdy pytają mnie o doświadczenie, którego nie mam. Kiedy robię wywiady lądowe, nie mogę wykonać zadań programistycznych na czas. Nadmiernie zastanawiam się nad problemem i chociaż wykonałem bardziej złożone problemy pracując nad moim projektem oprogramowania, nie mogę myśleć wystarczająco szybko, aby wystarczająco szybko zadać pytania testowe. W jaki inny sposób mogę poprawić swoje umiejętności, aby lepiej je zaprezentować? Ile portfela projektów muszę być przekonujące? Czy powinienem wziąć udział w kursie z lokalnej uczelni w Javie?


title: Próbne obiekty do testowania — perspektywa inżyniera automatyzacji testów

text: Jak często inżynierowie QA są odpowiedzialni za tworzenie Mock Objects do testów jednostkowych. Więc zajmowanie się Mock Objects to tylko praca programisty?. Powodem, dla którego pytam, jest to, że interesuje mnie QA jako moja kariera i uczę się narzędzi takich jak JUnit , TestNG i kilku frameworków. Chcę tylko wiedzieć, do jakiego poziomu testowanie jednostkowe jest wykonywane przez programistę i od jakiego momentu inżynier QA przejmuje testowanie w celu lepszego pokrycia testów? Dzięki **Edytuj** : W oparciu o poniższe odpowiedzi podaję więcej szczegółów na temat tego, do czego mam na myśli kontrolę jakości . Bardziej interesuje mnie Automatyzacja Testów niż zwykła kontrola jakości związana z nagrywaniem i odtwarzaniem skryptu. Czyli inżynierowie Test Automation są odpowiedzialni za tworzenie frameworków? czy mają zespół programistów zajmujących się rozwojem Frameworka? Tak, pytałem o wykorzystanie Mock Objects do testowania z perspektywy inżyniera Test Automation.


title: Różnica między klasą usługi a klasą pomocnika

text: Chciałbym wiedzieć, co odróżnia klasę Service od klasy użytkowej lub klasy pomocniczej? Klasa tylko z metodami bazowymi wywołuje wywołania dao jest usługą? Czy użycie klas Helpera nie narusza SRP?


title: Refaktoryzacja dwóch klas z zewnętrznej biblioteki, które mogłyby rozszerzyć klasę bazową

text: Mam dwie klasy o bardzo podobnych zachowaniach, obie z biblioteki innej firmy. Oba muszą zostać wypełnione jakimś obiektem wartości i wysłane do określonych kolejek w celu zalogowania. Należy pamiętać, że oboje nie mają wspólnego rodzica. Drapię się po głowie, aby znaleźć sposoby na refaktoryzację tego. Oto scenariusz. Class 1: Apple Class 2: Orange Niestety, Apple i Orange nie są klasami potomnymi Fruit i nie mogę ich zmienić, aby rozszerzyć klasę bazową. Konstruktorzy Apple i Orange mają różne sygnatury. Aktualny kod: if(isApple){ Apple apple = new Apple(....); apple.setColor(Kolor.CZERWONY); apple.setCena(10); jabłko.setCount(1000); AppleMQObject applMQObject = nowy AppleMQObject(jabłko); Producent appleProducer = Factory.create("producent jabłek"); appleProducer.send(applMQObject); }else{ Pomarańczowy pomarańczowy = new Pomarańczowy(...); orange.setColor(Kolor.POMARAŃCZOWY); orange.setCena(30); orange.setCount(100); OrangeMQObject oMQObject = new oMQObject(pomarańczowy); Producent orangeProducer = Factory.create("pomarańczowy-producent"); orangeProducer.send(pomarańczowyMQObject); } Mogę przenieść kod MQ do wspólnej metody. Ale jak poradzić sobie z sytuacją jabłko/pomarańcza.


title: Potrzebujesz pomocy w zrozumieniu diagramu UML

text: Skupiam się na próbie zrozumienia diagramów UML i nauce ich interpretacji w celu implementacji projektów, które opisują. Na poniższym diagramie nie wiem, jaka powinna być implementacja dla `operacji portów`. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/IMimV.png) Wygląda na to, że powinna to być klasa/jednostka taka sama jak pozostałe na diagramie. Rozumiem, że związek między odnogą a „operacją portu” jest dwukierunkowy. Wydaje się jednak, że nie ma sensu posiadanie klasy tylko dla operacji na portach, a posiadanie metod Load() i Unload() w Leg nie ma większego sensu, ponieważ klasa Leg nie reprezentuje portu ani jego operacji. Czy czytając diagramy UML można się spodziewać, że istnieje wiele sposobów na ich zaimplementowanie? tj. niektóre sposoby są lepsze od innych i jest to osąd, jak ktoś je wdraża? Jaka byłaby rekomendowana implementacja powyższego schematu w odniesieniu do pracy portu?


title: Jak wyjaśnić, że marnujemy czas programistów na dodawanie niepotrzebnych funkcji?

text: Poprowadziłem więc szarżę z moimi kolegami inżynierami, aby przynajmniej zacząć „myśleć” Lean. Trafiliśmy na kilka głównych obszarów marnotrawstwa, a 2/3 prowadzi do dokładnie tego samego punktu... „Dodatkowe funkcje”. Dogfood własnego oprogramowania na dwóch frontach, sprzedaży i zarządzania projektami. Świetnie sprawdza się w sprzedaży, bo właśnie do tego sprawdza się CRM. Nie jest to zbyt dobre do zarządzania projektami i często mamy za zadanie dodać dodatkowe funkcje, aby działały w tym przypadku użycia. Czy bardziej sensowne jest dalsze dodawanie funkcji, które nie dodają żadnej wartości dla klienta, czy też powinniśmy zaakceptować fakt, że nasz zespół sprzedaży korzystający z własnego produktu jest „wystarczająco dobry” i być może poszukać gotowego rozwiązania?


title: Jak pracować nad projektem z początkującym?

text: Obecnie rozpoczynam pracę nad osobistym projektem, do którego ja i koleżanka jesteśmy bardzo pasjonatami. Chcemy nad tym pracować razem, ale jesteśmy na bardzo różnych poziomach programowania: jestem w ostatnim semestrze mojej edukacji, byłam na 2 stażach i obecnie pracuję jako student, programowanie, a on właśnie skończył swój pierwszy rok uniwersytecki i właśnie poznałem podstawy. Pytanie brzmi: Jak możemy wspólnie nad tym pracować? Właśnie przechodzi z Java na C# w szkole, a projekt będzie projektem ASP.NET w C#. Mógłbym poczekać semestr, aby mógł lepiej poznać język i nauczyć się więcej koncepcji programowania, ale czuję, że byłaby to strata czasu i mogę stracić impet. Pytanie brzmi: **jaki jest najlepszy sposób na pracę z osobą na innym poziomie programowania niż ty?** Programowanie w parach, tworzenie części systemu jako przykładu, za którym może naśladować przy tworzeniu kolejnej części? Jak byś to zrobił?


title: Wykrywanie języka naturalnego dla aplikacji internetowych

text: Mam własne przemyślenia, jak powinna zachowywać się „idealna” wielojęzyczna aplikacja internetowa lub strona internetowa. Czy możesz wymyślić lepsze rozwiązanie? Jakie są ich plusy i minusy? Jakie są wady rozwiązania, które przedstawiam poniżej? Jakieś uwagi? Moje "idealne" rozwiązanie: * aplikacja powinna czytać język przeglądarki (z nagłówka Accept Language) * użytkownik powinien mieć możliwość nadpisania swojego domyślnego języka w opcjach (zalogowani użytkownicy zobaczą stronę w tym języku bez względu na przeglądarkę ustawienia; przydatne na przykład podczas podróży) * dodatkowo, gdy atrybut lang jest określony w adresie URL (patrz przykład poniżej), użytkownik zobaczy stronę w języku określonym przez ten atrybut (zarówno akceptuje język, jak i ustawienia użytkownika zostaną nadpisane ; może to być przydatne przy dodawaniu zakładek, udostępnianiu, wyborze kanałów RSS, robotach internetowych). Przykładowy adres URL: http://www.example.com/index.html?lang=ex


title: Użyć pola wyszukiwania, które wywołuje plik JSON?

text: Używam pliku JSON do wypełnienia kilku list rozwijanych. Format to: { "wartość" :"rok świetlny", "nazwa" :"Rok świetlny(yl)" }, { "wartość" :"jednostka astronomiczna", "nazwa" :"Jednostka astronomiczna(AU, UA)" }, i tak dalej. Chciałbym zaimplementować pole wyszukiwania, aby użytkownik mógł wpisać „rok świetlny”, „rok świetlny”, „lat świetlny” itp. Chcę umożliwić im wyszukiwanie określonej jednostki. Bezpośrednim problemem, który widzę, jest to, że użyłem obudowy wielbłąda dla prawie wszystkich wartości, z wyjątkiem tych wyświetlanych w rozwijanych polach. Myślę, że istnieją dwie opcje ... Uruchom wyszukiwanie klucza wartości w JSON i wyszukaj jego części, aby „AU” nadal dało jednostkę astronomiczną lub użyj wartości. Inną opcją jest użycie wartości, która moim zdaniem nadmiernie skomplikuje sprawy. To nie jest coś, co robiłem wcześniej i nie jestem pewien, w którym kierunku iść?


title: Co zrobić, jeśli znajdziesz lukę w witrynie konkurenta?

text: Pracując nad projektem dla mojej firmy, potrzebowałem zbudować funkcjonalność, która pozwoli użytkownikom na import/eksport danych do/z witryny naszego konkurenta. Robiąc to, odkryłem bardzo poważny exploit bezpieczeństwa, który może, w skrócie, wykonać dowolny skrypt na stronie konkurenta. Moim naturalnym odczuciem jest zgłoszenie im tej sprawy w duchu dobrej woli. Przyszło mi do głowy, by wykorzystać ten problem w celu uzyskania przewagi, ale nie chcę iść tą ścieżką. Więc moje pytanie brzmi, czy zgłosiłbyś poważną podatność na twoją bezpośrednią konkurencję, aby im pomóc? A może trzymasz gębę na kłódkę? Czy jest lepszy sposób na zrobienie tego, być może, aby uzyskać przynajmniej jakąś korzyść z faktu, że pomagam im, zgłaszając problem? **Aktualizacja (wyjaśnienie)** : Dziękujemy za wszystkie dotychczasowe opinie, doceniam to. Czy Pana odpowiedzi zmieniłyby się, gdybym miał dodać, że konkurencja, o której mowa, to moloch na rynku (setki pracowników na kilku kontynentach), a moja firma wystartowała zaledwie kilka tygodni temu (trzech pracowników)? Jest rzeczą oczywistą, że na pewno nas nie zapamiętają, a jeśli już, zdadzą sobie sprawę, że ich strona wymaga pracy (dlatego właśnie weszliśmy na ten rynek). To może być jedna z tych porażek moralnych i biznesowych, ale doceniam wszystkie rady.


title: Połącz programowanie logiki biznesowej z osobą niebędącą informatykiem

text: Czy miałeś doświadczenie, w którym osoba nieinformatyczna współpracuje z programistą podczas procesu kodowania? To jak programowanie w parach, ale jedna osoba to nie-informatyk, która dużo wie o biznesie, może inżynier procesu z wykształceniem matematycznym, który wie, jak rzeczy są obliczane i rozumie nieidiomatyczny, proceduralny kod. Odkryłem, że niektóre języki proceduralne, specyficzne dla domeny, takie jak PL/SQL, są całkiem zrozumiałe dla inżynierów spoza branży IT. Osoby te stają się współautorami kodu i gwarantują poprawność formuł, czynników itp. Tego rodzaju programowanie w parach jest dla mnie dość produktywne, tego rodzaju użytkownicy typu inżynierskiego czują, że są również „właścicielami” i „ autorów” kodu i pomagają zminimalizować nieporozumienia w procesie komunikacji. Pomagają nawet w projektowaniu przypadków testowych. * Czy ta praktyka jest powszechna? * Czy ma nazwę? * Czy miałeś podobne doświadczenia?


title: Jak bezpiecznie pisać kod własnymi „słowami” i nie plagiatować?

text: Dość dobrze rozumiem plagiat i parafrazę, jeśli chodzi o pisanie artykułu naukowego, ale te równoważne obszary programowania wydają mi się obce. Sprawdziłem tematy w Internecie i, co zaskakujące, nie ma na ten temat tak wielu materiałów, jak można by się spodziewać. Kiedy piszę kod i muszę zaimplementować coś, czego nigdy wcześniej nie implementowałem, przejdę do Internetu, aby poszukać przykładu. Staram się wcześniej przeczytać dokumentację, ale czasami trudno mi się z nią zapoznać. Więc jeśli to się nie powiedzie, poszukam tematu w Internecie i przedstawię dziesiątki przykładów (niezależnie od tego, czy są na czyimś osobistym blogu, czy na stronie z pytaniami i odpowiedziami, takiej jak SO). Teraz zwykle mam do dyspozycji 5-10 linijek kodu. Mam i NIGDY nie będę kopiował i nie wklejał tego do własnego kodu, ale nadal martwię się o skopiowanie go dosłownie. Trudno mi przeredagować określony fragment kodu, zwłaszcza gdy jest na to tylko tak wiele sposobów. Zmieniam nazwy zmiennych, zmieniam formatowanie itp. - ale czy to wystarczy? Zawsze chciałem zrozumieć ten temat, ale teraz, kiedy pracuję z nowym językiem iw środowisku korporacyjnym, uważam, że jest to szczególnie istotne. Jeśli ktoś mógłby wyjaśnić lub zamieścić link do dobrego wyjaśnienia gdzie indziej, byłbym bardzo wdzięczny! **tl;dr** Nie rozumiem, jak bardzo trzeba zmienić i przeredagować 5-10 fragmentów kodu znalezionych w Internecie, aby uniknąć plagiatu. A jeśli niewiele możesz zmienić?


title: Filozofia rozwoju zaplecza

text: Czuję się trochę zagubiony w tym procesie tworzenia backendu, którego teraz próbuję. Większość typowych praktyk programistycznych, których używam podczas tworzenia aplikacji po stronie klienta, nie ma tutaj zastosowania... Pozwólcie, że przedstawię kontekst. ### Proces debugowania Podczas tworzenia aplikacji po stronie klienta (iOS, aplikacja Java lub cokolwiek innego) łatwo jest szybko skonfigurować projekt w ulubionym IDE, uruchomić go na swoim komputerze lub urządzeniu testowym i debugować piekło z tego tyle, ile chcesz. Z drugiej strony podłączenie debugera do kodu zaplecza nie jest tak proste, zwłaszcza jeśli jest to kod Pythona działający w Google App Engine (GAE). Tego właśnie używam i… tak. Linters i wszystko inne BARDZO pomagają, ale oczywiście kwestii semantycznych nie da się rozwiązać w ten sposób. Obecnie przeglądam mój niedawno napisany kod zaplecza i po prostu zakopuję go za pomocą instrukcji logging.debug('msg'), potwierdzeń i innych. To jedyna rzecz, o której mogę pomyśleć. Czy to normalne dla programistów backendu? Czy rejestrowanie i przeszukiwanie dzienników zwykle dotyczy sposobu, w jaki twórcy backendu iterują w swoich aplikacjach? ### Równoległość i sterowanie żądaniami To może być trochę bardziej specyficzne dla GAE i innych nieblokujących backendów, szczerze mówiąc. Serwery jednowątkowe nie cierpią z powodu tego problemu... Tak czy inaczej, kiedy masz do czynienia z paralelizmem i wszystko jest sterowane przez zdarzenia gniazd, w jaki sposób programiści backendu zwykle sprawdzają, czy ich backend działa? Zrobiłem najbardziej naiwną rzecz wszechczasów, czyli otworzyć konsolę Pythona i korzystając z biblioteki requestów, po prostu wysyłać żądania i testować je krok po kroku. Potem poszedłem dalej i napisałem aplikację **kivy**, aby pomóc mi wysyłać żądania z interfejsu GUI i zobaczyć, co się dzieje, ale utrzymanie aplikacji kivy zajmuje więcej czasu niż rozwijanie zaplecza!! Próbowałem sprawdzić frameworki testowe dla GAE, ale nie wydawały się łatwe do zdobycia, więc zastanawiałem się, czy są tego warte? Czy byłbym w stanie zasymulować setki klientów przy użyciu mojego backendu przy użyciu frameworków testowych? Czego ludzie używają w dzisiejszych czasach (konkretnie dla GAE)? ### Wizualizacja „przepływu” Z powodu mojego braku doświadczenia w tworzeniu backendu, **zaskakująco ciężko** jest mi zachować w głowie wyraźny obraz cyklu żądanie/odpowiedź. Znam podstawy, napisałem kilka aplikacji backendowych, ale jak tylko trochę się to komplikuje, muszę sobie przypominać, gdzie przechodzi żądanie, patrząc na punkt wejścia, i wszystkie kroki do momentu uzyskania odpowiedzi zrobiony. Jestem pewien, że gdybym był w stanie to jakoś zwizualizować, nie musiałbym wracać w kółko. Zamiast tego łatwo wiedziałbym, skąd pochodzi błąd lub gdzie jest najlepsze miejsce do dodania określonej funkcji. W każdym razie zastanawiałem się, czy istnieje jakaś standardowa "rzecz" do zaprojektowania przepływu żądań. Nie wiem, może schemat UML czy coś? Próbowałem to naszkicować, ale skończyło się na bałaganie. Na przykład, naszkicowałbym projekt backendu w oparciu o funkcje i wymagania, ale wtedy pominięto by rzeczywistą logikę i model. Następnie staram się uwzględnić je na schemacie, który staje się zbyt skomplikowany i zaśmiecony wieloma dziwnymi strzałkami i polami. **Potrzebuję czegoś do tworzenia backendu, tak jak diagramy ER do projektowania relacyjnych baz danych**. Tak, przepraszam. Dużo mówię i gubię się w tym świecie. Pomoc?


title: Obsługa wczesnych wersji Androida

text: Jakie zasady mają programiści, jeśli chodzi o obsługę wcześniejszych wersji Androida? Nadal wspieram , ale oznacza to, że nie mogę korzystać z takich funkcji, jak pasek akcji. Ponad 40% moich użytkowników nadal korzysta z wersji poniżej 3.0, więc czuję się nieco ograniczony. Problem w tym, że 3.x nie odniósł zbyt wielkiego sukcesu, więc 2.3.x będzie z nami przez jakiś czas. Jednak wszystkie nowe urządzenia będą teraz dostarczane z wersją 4.x. Zastanawiam się, czy użytkownicy 4.x chętniej płacą za aplikację, podczas gdy większość użytkowników wersji 2.3.x tylko szuka. **Aktualizacja:** Przy odrobinie wysiłku odkryłem, że jestem w stanie zaimplementować paski akcji i motywy Holo i nadal obsługiwać Androida 2.1. Wszystko to bez uciekania się do zewnętrznej biblioteki. Jedyną funkcją, z którą wciąż utknąłem, są paski kart. Działają one z paskami akcji, ale nie w zatwierdzonym stylu. Do tego potrzebowałbym fragmentów, co wymaga Androida 3.0. Mam jednak tylko dwa paski kart, więc nie jest to wielka sprawa.


title: Co oznaczają te symbole? Próbuję je zrozumieć, żeby stworzyć aplikację

text: Co oznaczają symbole `⊞` i `⊕`? Próbuję je zrozumieć, aby stworzyć aplikację. Jest na http://en.wikipedia.org/wiki/File:XXTEA.png ![http://en.wikipedia.org/wiki/File:XXTEA.png](http://i.stack.imgur. pl/EyUUf.png)


title: Lexer/Parser dla języków wielowymiarowych

text: W jaki sposób _Lexer/Parser_ działa w języku programowania 2D, takim jak Funciton, w celu przekształcenia tak nietypowego kodu źródłowego do prawidłowego AST?


title: NVI dla funkcji wirtualnej zaimplementowany w każdej warstwie głębokiej hierarchii

text: Załóżmy, że mamy następującą hierarchię klas: class Object { public: virtual void update() { // Update position } }; class Rocket : public Object { public: virtual void update() { Object::update(); // Zorientuj się na cel } }; class SparklingRocket : public Rocket { public: virtual void update() { Rocket::update(); // Utwórz błyszczące cząstki } }; Z oczywistego powodu nie jest to dobry pomysł. Na przykład spadkobierca którejkolwiek z klas może zapomnieć wywołać Base::update() i zachowanie programu będzie niekompletne. Moim zdaniem funkcje implementujące ważne zachowanie nie powinny być wirtualne, to jest coś lepiej zarezerwowanego dla zachowań zastępowalnych. Tak więc prawdopodobnie zmienilibyśmy architekturę w następujący sposób: class Object { public: void update() { // Update position afterObjectUpdate(); } chroniony: wirtualny void afterObjectUpdate() {} }; class Rocket : public Object { protected: virtual final void afterObjectUpdate() override { // Orientacja w kierunku celu afterRocketUpdate() } virtual void afterRocketUpdate() {} }; class SparklingRocket : public Rocket { protected: virtual final void afterRocketUpdate() { // Utwórz błyszczące cząstki afterSparklingRocketUpdate(); } wirtualny void poSparklingRocketUpdate() {} }; To jest prawie to, czego chcę: * Publiczny interfejs wszystkich klas to tylko niewirtualna metoda update() * Kiedy ta metoda jest wywoływana, jest zapewnione, że każda update()-"metoda podrzędna" jest wywoływana * Nawet jeśli jeden dziedziczący zapomina wywołać metodę afterUpdate() - hierarchia jest stabilna od klasy bazowej w dół. W ten sposób interfejs API mógłby zapewnić swoją integralność, podczas gdy w pierwszym przykładzie kodu musiałby polegać na użytkowniku, aby wywołał metodę Base::update(). Jedna rzecz mi się jednak nie podoba: nazwa każdej klasy jest częścią po.. .Update() nazwa metody. To wydaje mi się kodem śmierdzącym. Myślę, że ogólny cel utrzymania stabilności wirtualnych hierarchii połączeń nie może być tak niezwykły. Jakie jest powszechnie stosowane rozwiązanie, z którym jeszcze się nie spotkałem?


title: Jak uniknąć nieautoryzowanego użycia API?

text: Muszę zaprojektować "widget", skrypt, który partnerzy będą umieszczać na swoich stronach internetowych, aby wyświetlić interfejs użytkownika i wywołać nasze API. Zasadniczo wyświetli nasze dane w tych witrynach na podstawie niektórych identyfikatorów, które podają w naszych wywołaniach API. **Chcemy uniknąć sytuacji, w której ktoś nadużywa interfejsu API i używa go do przeszukiwania całego naszego katalogu.** Każdy partner, który osadza nasz skrypt, otrzyma klucz publiczny, który należy podać podczas wywoływania interfejsu API. Dobrym pomysłem byłoby poproszenie ich o dołączenie tego klucza podczas ładowania skryptu, np.: <script src="//initrode.com/widget/loader.js?key=xxxx"></script> W ten sposób żądanie skryptu można użyć do zarejestrowania pary klucz/źródło adresów IP i odpowiadania na kolejne wywołania interfejsu API tylko wtedy, gdy para klucz/adres IP pasuje do zarejestrowanej pary (o ograniczonym okresie istnienia i limicie żądań na dzień). Nie jestem pewien, czy to dobry pomysł, ponieważ jest to oczywiście zabezpieczenie przez zaciemnianie (ktoś ponownie ładujący skrypt całkowicie go ominie) ; ale nie widzę innego sposobu na ograniczenie dostępu. Nie mogę zapewnić unikalnego klucza każdemu użytkownikowi, tylko partnerom. Nie mogę używać systemu klucza prywatnego, ponieważ cały kod będzie dostępny dla każdego. To w zasadzie ograniczanie dostępu do publicznego API, czyli sprzeczne w swojej definicji. Co myślisz o tym rozwiązaniu i co byś zrobił z tymi ograniczeniami?


title: Najbardziej ludzki język, taki jak język programowania

text: Zastanawiałem się, jest tak wiele artykułów o tym, jakie są najlepsze języki kodowania. C, C++ Go Haskel lisp java ML F# itd. Ale rzadko widuję artykuł o najbardziej ludzkim języku programowania. Nie musi być szybki, ale najbliżej języka angielskiego (lub innego naturalnego). Kiedyś celem stworzenia takich języków było postrzegane jako forma sztucznej inteligencji. Ale w dzisiejszych czasach AI poszła w innym kierunku. Teraz jest Siri itp., ale to są aplikacje, a nie same języki kodujące. Z ciekawości, czy jest jeszcze gdzieś język, który rozumie podstawowy angielski do kodowania?


title: Czy mogę bezpiecznie korzystać z biblioteki open source w wewnętrznym projekcie o zamkniętym kodzie źródłowym?

text: Zastanawiam się nad wykorzystaniem iTextSharp, który jest licencjonowany na licencji Affero GPL, w wewnętrznym projekcie WinForms o zamkniętym kodzie źródłowym. Nikt spoza mojej firmy nie będzie z niego korzystał. GPL (i Affero GPL również) zazwyczaj wymaga dostarczenia kodu źródłowego wraz z binariami. Biorąc pod uwagę, że jest to projekt wewnętrzny, czy muszę udostępnić moim pracownikom kod źródłowy projektu?


title: Co to jest wysyłka? Czy to oznacza dynamiczną rozdzielczość?

text: AFAIK, termin _dispatch_ oznacza po prostu rozwiązanie metody i wywołanie. Nie ma znaczenia, czy jest statyczny czy dynamiczny. Widziałem, jak wiele osób używa terminów takich jak _przesyłka statyczna_ i _wysyłka dynamiczna_. Co mnie dezorientuje, są też pewne tajemnicze opisy. Próbowałem zrozumieć, co to jest _wielokrotna wysyłka_ i wydaje się, że po prostu _wybieram podprogram według typów parametrów_. Jeśli dobrze zrozumiałem, może istnieć zarówno _statyczna wielokrotna wysyłka_, jak i _dynamiczna wielokrotna wysyłka_ , i możemy powiedzieć, że C++ zapewnia _wielokrotną wysyłkę_ za pośrednictwem bezpłatnych funkcji. Jednak artykuł w Wikipedii o _wielokrotnej wysyłce_ mówi, że C++ nie ma wielokrotnych wysyłek, ponieważ nie ma dynamicznego rozwiązywania funkcji przez wiele parametrów. I naprawdę nie rozumiem różnicy pojęciowej między przykładem Common Lisp a przeładowaną funkcją C++. Ponieważ nie mogę znaleźć żadnej różnicy pojęciowej, chyba że termin _wielokrotna wysyłka_ implikuje _dynamiczną wysyłkę_. I zdałem sobie sprawę, że myliłem się, czym naprawdę jest _wysyłanie_. Sprawdziłem również wpis QA Multiple Dispatch vs. Function Overloading i wygląda na to, że odpowiedź opiera się na przesłance, że termin _dispatch_ jest w zasadzie _dynamic_. To też mnie myli. Jakie jest poprawne znaczenie terminu _wysyłka_? Czy oznacza to _dynamiczną rozdzielczość_? Czy ten termin jest dobrze zdefiniowany, czy tylko konwencjonalny? czego mi brakuje?


title: Skrypt "Match Making", sposób bez angażowania bazy danych i php?

text: Piszę skrypt matchmakingowy do gry za pośrednictwem portalu internetowego. Od kilku dni przyglądam się różnym opcjom i uważam, że poniższe podejście byłoby najbardziej optymalne, ale chciałbym uzyskać opinię innych. 1. Uzyskaj graczy spełniających wymagania za pomocą formularza internetowego (metoda GET) i umieść gracza w kolejce (wpis bazy danych mySQL ze znacznikiem czasu i wymaganiami meczu) na 1 godzinę. 2. Na stronie przesyłania uruchamiaj co minutę skrypt ajax, który kontaktuje się ze skryptem php, który sprawdza następujące elementy: * Czy gracz nadal jest w systemie, jeśli jego godzina się skończyła lub jego skrypt ajax nie został uruchomiony w ciągu 5 minut, usuń go z Baza danych. Przekroczono limit czasu na powrót. * Czy gracz w kolejce jest oflagowany na mecz? * Jeśli tak, umieść obu graczy w tabeli meczowej i usuń obu graczy z kolejki i wyślij zmienne meczowe. * Jeśli nie, kontynuuj. * Czy pozostali gracze odpowiadają aktualnym wymaganiom graczy? * Jeśli tak: * Czy gracz jest tym samym, który szuka meczu. * Jeśli nie: zwróć zmienne dopasowania. Zgłoś innego gracza. * Jeśli tak: Nie znaleziono dopasowania zwrotnego. * Jeśli nie: nie znaleziono dopasowania zwrotnego. 3. Po otrzymaniu zmiennych meczowych strona zostanie zaktualizowana za pomocą jquery, w tym nowe żądanie ajax, które będzie wywoływać nowy skrypt php co 30 sekund, aby dowiedzieć się, czy obaj gracze akceptują mecz. Możliwe wyniki ajax to: 0 oczekujących, 1 zaakceptowanych, 2 odrzuconych. Pojawi się również przycisk, który natychmiast wyśle graczowi odpowiedź do skryptu php przez ajax, który po naciśnięciu wyłączy się przez jquery. Gdy obaj gracze zaakceptują stronę, ponownie użyje jquery, aby wyświetlić instrukcje rozpoczęcia meczu. Czy istnieje czystszy lub mniej intensywny sposób, aby to zrobić z udziałem bazy danych i php lub bez? Uwagi: Żaden kod nie został jeszcze napisany. System nie będzie miał więcej niż 100 graczy w kolejce w dowolnym momencie. (Najprawdopodobniej szczyt 25)


title: Microsoft Reciprocal License: dołączać źródło nawet dla niezmodyfikowanych plików binarnych?

text: Licencja Microsoft Reciprocal License (tu zaczerpnięta z używanego przeze mnie zestawu narzędzi WIX) zawiera następujące zdanie: > W przypadku każdego rozpowszechnianego przez Ciebie pliku, który zawiera kod z oprogramowania (w formacie źródłowym > kodowym lub binarnym), musisz dostarczyć odbiorcom kod źródłowy do tego > plik wraz z kopią tej licencji Czy to oznacza, że muszę dostarczyć kod źródłowy, nawet jeśli używam tylko niezmodyfikowanej (oryginalnej) biblioteki DLL w formacie binarnym? Zauważ, że ta niezmodyfikowana biblioteka DLL zawiera kod z oprogramowania, chociaż nie została skompilowana przeze mnie. Co oznacza _zapewnić_? Czy mam dostarczyć 11 MB kodu źródłowego jako część mojej aplikacji (zainstalować źródło na dysku twardym) czy mogę go również dostarczyć jako dodatkowe pobranie?


title: Jak mogę wykazać się kompetencjami potencjalnym pracodawcom, gdy cała moja praca jest związana z projektami wewnętrznymi?

text: Na moim obecnym stanowisku pracuję od dłuższego czasu (10 lat) iw tym czasie czuję, że dobrze sobie poradziłem jako projektant, architekt systemów i programista. Jednak cała ta praca dotyczyła wewnętrznych projektów, które nie są dostępne ze świata zewnętrznego. Widzę wiele takich rad, które sugerują: „Jeśli możesz dosłownie na coś wskazać i powiedzieć „Ja to napisałem”, to jest to bardzo imponujące”. A co, jeśli nie możesz „dosłownie wskazać” niczego, ponieważ podczas gdy jesteś zapalonym programistą, który (jak to ujmuje klasyczny joelizm) „jest mądry i wykonuje swoje zadania”, wszystkie te rzeczy są niewidoczne? Czy muszę zacząć gorączkowo angażować się w projekty open-source? Założyć bloga „z prawdziwego świata” (nie wewnątrz firmy)? Szczerze mówiąc, większość moich 10 lat spędziłem tutaj szczęśliwy i dopiero niedawno rozważałem wyjazd na bardziej zielone pastwiska. Czy utopię się, zanim zacznę szukać, z powodu skupienia się na pracy mojego obecnego pracodawcy, kosztem mojej „publicznej obecności”?


title: Jakie zakręty skróciłeś w pracy?

text: Czy kiedykolwiek pozwoliłeś, aby Twoje standardy kodowania uległy pogorszeniu, aby dotrzymać terminów lub zaoszczędzić czas? Zacznę od trywialnego przykładu: w pracy opracowaliśmy standard kodowania, którego nawiasów/formatowania użyć i tak dalej. Ignoruję to i używam narzędzia do automatycznego formatowania w netbeans.


title: Czy branża IT i oprogramowania staje się coraz bardziej sporna?

text: W ciągu ostatnich kilku lat obserwowałem wykładniczy wzrost liczby firm informatycznych i osób fizycznych zajmujących się wiadomościami wnoszących swoje sprawy do sądu z jednej strony i pytań dotyczących kwestii prawnych w całym Internecie z drugiej strony. Bardzo wątpię, aby ludzie i firmy nagle zaczęły kraść sobie nawzajem pomysły, ale coś jest inne. Czy jest tak, że: 1) informatycy średnio zdobywają wykształcenie prawnicze? 2) Jakieś zmiany w systemach prawnych różnych krajów, które przeoczyłem, powodują to zjawisko? 3) IT jest obecnie postrzegane jako źródło potencjalnie nieograniczonych przychodów i zwróciły na to uwagę trolle i prawnicy? 4) Jakiś inny rozwój na miejscu? * * * **Pierwsza część** mojego pytania to **jak powinien zareagować przeciętny deweloper na ten niepokojący trend** : a) Kontynuuj jak poprzednio i ignoruj wszystko, co jest legalne b) Kształć się w zakresie lokalnych i międzynarodowych przepisów dotyczących IT c) Zawsze zasięgnij profesjonalnej porady prawnej przed podjęciem jakichkolwiek działań związanych z programowaniem d) Dla każdego rodzaju projektu zarejestruj spółkę LLC, aby chronić się nawet w przypadku najbardziej podstawowych i nieszkodliwych projektów * * * **Druga część** jest większa pierwszy: **jak to wszystko wpływa na firmy IT i start-upy** : e) Czy jakaś nowa firma jest zagrożona? Jeśli tak, czy to ryzyko jest lokalne, tak jak w USA ze wszystkimi patentami na oprogramowanie, czy globalne? f) Czy jakakolwiek nowa firma może przetrwać bez zatrudniania prawników od samego początku i ubiegania się o wszystkie możliwe patenty? g) Czy dla rejestracji nowej firmy czynnikiem ryzyka jest wybór lokalizacji, która wspiera patenty software'owe w swoim kodzie prawnym? * * * Przyznaję, że moje pytanie jest złożone, ale sprawa jest jeszcze bardziej złożona. Jeśli dostrzegasz potencjał restrukturyzacji, będzie to mile widziane. Poszukuję również wkładu globalnego lub związanego z rynkami lokalnymi. Poznamy wspólną płaszczyznę z poszczególnych przypadków.


title: Czy istnieje algorytm sortowania, który nie jest z natury sekwencyjny i można go rozdzielić?

text: Po kilku godzinach googlowania doszedłem do wniosku, że wszystkie algorytmy sortujące są z natury sekwencyjne, co oznacza, że mogą być dystrybuowane dane, ale nie zadania. Czy istnieje jakiś algorytm, który nie jest z natury sekwencyjny i można go rozdzielić?


title: Migracja aplikacji PowerBuilder na multiplatformę

text: W przeszłości tworzyłem aplikację klient/serwer w PowerBuilder dla klinik medycznych i do tej pory zajmowałem się jej utrzymaniem. Teraz niektórzy klienci proszą mnie o opracowanie wersji dla Maca/Linuksa i potrzebują porady na temat tego, jaki język/technologia programowania najlepiej się do tego nadaje i jaka jest krzywa uczenia się. Nie jest to bardzo duży program, ale jestem jedynym programistą i robiłem to w wolnym czasie. PowerBuilder jest bardzo produktywny w tego typu projektach (baza danych), ale nie jest multiplatformowy i obecnie ciężko jest sprzedać aplikację PowerBuilder (web, .NET, java sprzedaje się dużo lepiej z jego marketingiem). Moje umiejętności programistyczne: * Studiowałem C i C++ w przeszłości (uniwersytet), ale nigdy nie używałem ich w prawdziwych projektach * Mam trochę doświadczenia w Javie, ale nie w aplikacjach desktopowych * Trochę doświadczenia z Ruby on Rails do projektów internetowych * Dobre umiejętności z PowerBuilder i C# (.NET) (są moje główne języki programowania) Moim pierwszym dylematem jest to, czy zmienię aplikację desktopową na interfejs sieciowy, ale myślę, że użytkownik straci trochę doświadczenia użytkownika, a niektórzy lekarze nie mają kliniki (nie mają są sami w domu z moim oprogramowaniem). Myślę, że zainstalowanie aplikacji internetowej (z serwerem) dla jednego użytkownika będzie przytłaczające. Jeśli nadal będę rozwijał aplikację desktopową, jaki jest w tej chwili dobry framework/zestaw narzędzi do nauki mając moje umiejętności? Ktoś miał podobne doświadczenia?


title: Etykieta podczas zadawania pytań na kanale IRC

text: Wiele większych projektów OSS utrzymuje kanały IRC w celu omówienia ich wykorzystania lub rozwoju. Kiedy utknąłem w korzystaniu z projektu, próbując znaleźć informacje w sieci bezskutecznie, jednym ze sposobów, w jaki próbuję dowiedzieć się, co zrobić, jest wejście na kanał IRC i zapytanie. Ale moje pytania są niezmiennie całkowicie ignorowane przez ludzi w kanale. Jeśli była cisza, kiedy wszedłem, nadal będzie cisza. Jeśli trwa rozmowa, to nie jest niepokojona. Zostawiam kanał otwarty na kilka godzin, mając nadzieję, że może ktoś w końcu mnie zaangażuje, ale nic się nie dzieje. Więc martwię się, że jestem niegrzeczny w jakiś sposób, którego nie rozumiem, lub łamię jakąś niewypowiedzianą zasadę i jestem za to ignorowany. Staram się, aby moje pytania były uprzejme, rzeczowe i gramatyczne oraz staram się wskazać, że wypróbowałem oczywiste rozwiązania i dlaczego nie zadziałały. Rozumiem, że jestem zupełnie obca dla ludzi na kanale, ale nie wiem, jak to naprawić. Czy powinienem po prostu czaić się w kanale, nic nie mówiąc, przez tydzień? To też wydaje się absurdalne. Typowa wiadomość, którą wysyłam, może brzmieć „Witam wszystkim – próbowałem zmusić Foo do pracy, ale ciągle otrzymuję BarException. Próbowałem zresetować Quux, ale to nic nie daje. Czy ktoś ma sugestię, czego mógłbym spróbować?”


title: Automatyczne formatowanie SQL i automatyczne kapitalizowanie w Vimie

text: Chciałbym używać vima do pisania zapytań SQL, ale nie wymyśliłem jeszcze, jak uzyskać dwie kluczowe funkcje, których używam cały czas w programach takich jak SQL Yog. Zwykle po prostu uruchamiam instancję Yog w tle, wycinam i wklejam do niej mój SQL, naciskam F12, który automatycznie formatuje całość. Wszystkie słowa kluczowe SQL są automatycznie pisane wielką literą, gdy tylko tekst zostanie wklejony. Następnie kopiuję go z powrotem do dowolnego innego narzędzia, którego używam (często SQL Query Browser w pracy) i stamtąd przechodzę. Korzyści płynące z tych dwóch funkcji są warte dodatkowego wysiłku. Czy ktoś wie, jak mogę skonfigurować vima do tego? Nadal może być konieczne wycinanie i wklejanie z powrotem do przeglądarki zapytań, co jest dla mnie akceptowalne, ale chciałbym trzymać się vima podczas całej mojej edycji. Dziękuję.


title: Jak działa programowanie Flash na poziomie przedsiębiorstwa?

text: Zacząłem pracować w sklepie PHP i od czasu do czasu musimy poprawić jakiś starszy kod Flash i ActionScript. To mały sklep; mamy około sześciu programistów. Wydaje się, że prawie za każdym razem, gdy ściągamy plik flash z SVN, natrafiamy na jakąś dziwną zależność, albo z czcionkami, kodem nagle decydującym się nie kompilować, albo niezgodnością wersji z Actionscript i Flash MX/CS3/4/5. Żadna z osób, które stworzyły komponenty flash, nadal nie pracuje dla firmy (ani żadna z zależności nie jest udokumentowana), więc musimy przebrnąć przez kod i trwa to NA ZAWSZE. To dało mi do myślenia: jak działa programowanie Flash na poziomie przedsiębiorstwa? Jakie narzędzia są używane? Czy jest możliwe, aby wiele osób pracowało nad tym samym plikiem Flash i było w stanie wyładować ten plik na nową maszynę przy minimalnych kłopotach z konfiguracją?


title: Co to jest połączony fragment w diagramie sekwencji UML?

text: Wszystko jest w pytaniu. Po prostu odkrywam tę nową funkcję i tak naprawdę nie rozumiem, co ona oznacza. Wiem, że może reprezentować pętlę, alternatywę na diagramie sekwencji. Czy ktoś może mi wyjaśnić, co to jest?


title: Czy można zaewidencjonować zmiany w deklaracji importu w projektach opensource w zatwierdzeniu?

text: Istnieją pewne wytyczne (np. wytyczne scala) i zastanawiam się, czy można trochę posprzątać podczas zatwierdzania innych zmian, czy też zatwierdzenia powinny być bardziej skoncentrowane i na temat? Np. - usuń nieużywane, zmień kolejność według przewodnika stylistycznego. Może to utrudnić odczytanie pull requesta - ale przynajmniej trochę poprawi jakość projektu. Jaka jest twoja ogólna zasada? Nie jestem pewien, czy łamię niewypowiedziane tabu.


title: Jak rozwiązać problem zagnieżdżonych komentarzy

text: Wydaje się, że nie tylko w jednym języku komentarzy nie można zagnieżdżać. Masz dobre rozwiązanie tego problemu? Jednym z obejść w C/C++ i Javie jest użycie tylko jednowierszowego komentarza, ale wtedy nie można zakomentować większego bloku. Mam do czynienia z czymś takim: </li><!-- <li><!-- Zapisz --> Muszę więc ręcznie przeglądać i edytować komentarze. Czy możesz doradzić, jak powinniśmy sobie z tym poradzić, w wielu językach? Nie jestem pewien, ale może python ma na to rozwiązanie za pomocą sposobu „””, który może być w stanie dołączyć komentarz „#” w pythonie? `


title: Rygorystyczność metod programowania wśród użytkowników Stack Overflow

text: Od kilku tygodni jestem członkiem Stack Overflow i odpowiadałem na pytania i czytałem inne odpowiedzi, głównie w C/C++. To prawda, że dowiedziałem się kilku rzeczy. Na przykład „niezdefiniowane zachowanie”, które w przeszłości, wiedząc, co dzieje się od wewnątrz procesora do generowania kodu kompilatora, wszystkie te „wydawały się” zdefiniowane i działały tak, jak się spodziewałem. Rozumiem teraz, jak przestrzeganie reguł, takich jak nie wywoływanie nieokreślonego zachowania, jest dla ciebie dobre, nawet jeśli wiesz, że na swoim komputerze w twoim kompilatorze działa to bezbłędnie. Czasami jednak otrzymywałem punkty ujemne za odpowiedzi dotyczące używania makr lub pewnych kodów, co sprawia, że zastanawiam się, dlaczego wśród ludzi tutaj są tak surowe zasady. Na przykład prawie za każdym razem, gdy mówisz o makrach, ludzie mówią „zamiast tego użyj funkcji”. Rozumiem, że funkcje są lepsze pod wieloma względami, ale jest wiele miejsc, w których makra są bardziej dopasowane. Czy makra są tutaj tak mile widziane? Innym przykładem jest to, że jeśli z jakiegoś powodu napiszesz prostą pętlę `for` w celu znalezienia znaku, otrzymasz wiele komentarzy mówiących, aby „zamiast tego użyć wstępnie napisanych funkcji” lub otrzymasz punkty ujemne za sugerowanie pętli. Rozumiem, że funkcje w standardowej bibliotece mają w sobie wszystkie rodzaje sprawdzania błędów i prawdopodobnie są ogólnie najbardziej wydajne, ale czy napisanie prostej pętli dla własnego konkretnego przypadku jest taką zbrodnią? To, o co proszę, jest bardziej ogólne niż te zwykłe przykłady. Wydaje mi się, że wśród użytkowników Stack Overflow istnieje „zdefiniowany” (jeśli nie napisany) standard kodowania w C/C++ i tylko w ten sposób go akceptują. Nie mówię, że jest źle. W ogóle tego nie mówię. Sam wiele się nauczyłem o rzeczach, które sprawiały, że mój kod nie był przenośny. Jednak prawie wszystkie te rzeczy okazały się zbyt dużym ograniczeniem. Rzeczy takie jak „jeśli to zrobisz, Twój kod nie będzie działał na komputerach, które nie kodują znaków w ASCII”. Czy uważasz, że ludzie zawsze będą chcieli, aby ich kod działał na wszystkich możliwych komputerach? Czy to nie za dużo? Prostsza, szybsza metoda, o której wiesz, że działa na komputerach, na których Twój program będzie działał, wydaje mi się lepszym rozwiązaniem niż całkowicie przenośna. Istnieją świetne kody, które wydają mi się, że gdyby zostały tutaj osądzone, uzyskałyby najgorsze wyniki. Kody takie jak Linux Kernel, implementacja STL dostarczana z g++, implementacja OpenGL w Mesa3D i tak dalej. Spójrz na te kody, a twoje oczy zostaną zalane makrami i operacjami bitowymi. Czy potępiasz również programistów jądra Linuksa? Czy wolisz, aby twoja biblioteka OpenGL zmniejszyła liczbę klatek na sekundę o 10%, ale prawdopodobnie działała również na 16-bitowym mikroprocesorze? Czy to, co przyszło mi do głowy, jest prawdą? Czy ludzie w Stack Overflow tak surowo oceniają kody innych? A może po prostu miałem pecha, że natknąłem się na kilka pomniejszych? Edycja: Jestem studentem magisterskim z robotyki, moje licencjat z inżynierii oprogramowania. Mój projekt magisterski był modułem biblioteczno-jądrowym dla projektu finansowanego przez Unię Europejską i dzięki temu otrzymałem propozycję doktoratu (z przedmiotu związanego z pisaniem oprogramowania). Koduję też dla zabawy. Od 15 lat znam C/C++ i 8 lat aktywnie koduję. (Chodzi mi o to, że nie zacząłem programować dopiero wczoraj) Aktualizacja: Po przeprowadzeniu pewnych badań dowiedziałem się, że jest wielu programistów C, jeśli nie większość, którzy nienawidzą C++ i wielu programistów C++, jeśli nie najbardziej, Kto nienawidzi C. Jako ktoś, kto odnajduje piękno w obu językach i utrzymuje styl kodowania będący mieszanką tych dwóch, uważam te nienawiści za absurdalne. Jednak, ponieważ wydaje się, że większość programistów w obu językach ma przynajmniej do pewnego stopnia tę nienawiść, nie widzę już powodu, aby kontynuować ten argument. Doszedłem do wniosku, że napiszę odpowiedzi w sposób, który uważam za stosowny i _po prostu zignoruję wszystkich, gdy zaczną rzucać ataki, ponieważ nie użyłem `wektora` czy czegoś takiego_ (Seth Carnegie, 7 komentarz). Jednak na dole umieściłbym notatkę: _Ten kod nie jest przeznaczony do kopiowania i wklejania. Może brakować sprawdzania błędów. To tylko po to, aby zademonstrować, jak działa blabla, a niekoniecznie najłatwiej to zrobić._ i inne legalne rzeczy. Wiesz, jak to, co widzisz w EULA.


title: Kiedy staje się przesadą?

text: Po pierwsze, przepraszam, bo nie wiem jak zrobić wątek społecznościowy; więc ktoś mi pomoże, proszę. Jako programista na wielu platformach, technologiach, a nawet na poziomie infrastruktury; Zawsze pytam, kiedy robię ZA dużo?!? To był niekończący się proces uczenia się, odkąd zacząłem. Jedną (1) rzeczą, której się nauczyłem, jest to, że wymagania są ledwo ważne przez dłuższy czas, a odrobina przewidywania może zajść daleko. Ale gdzie jest równowaga i skąd wiesz, kiedy tracisz czas, a nie zyskujesz?!


title: Najlepsze praktyki dotyczące rozgałęziania kodu źródłowego i cyklu życia aplikacji

text: Jesteśmy małym sklepem ISV i zazwyczaj co miesiąc wysyłamy nową wersję naszych produktów. Używamy Subversion jako repozytorium kodu i Visual Studio 2010 jako naszego IDE. Zdaję sobie sprawę, że wiele osób opowiada się za Mercurialem i innymi rozproszonymi systemami kontroli kodu źródłowego, ale w tym momencie nie widzę, jak moglibyśmy z nich skorzystać, ale mogę się mylić. Naszym głównym problemem jest synchronizacja gałęzi i głównego pnia. Oto jak robimy rzeczy dzisiaj: 1. Wydaj nową wersję (automatycznie utwórz tag w Subversion) 2. Kontynuuj pracę nad głównym trunkiem, który ukaże się w przyszłym miesiącu A cykl powtarza się co miesiąc i działa idealnie. Problem pojawia się, gdy trzeba wydać pilne wydanie usługi. Nie możemy go wypuścić z głównego pnia (2), ponieważ jest intensywnie rozwijany i nie jest wystarczająco stabilny, aby można go było szybko uwolnić. W takim przypadku robimy co następuje: 1. Tworzymy gałąź z tagu, który stworzyliśmy w kroku (1) 2. Naprawa błędu 3. Testujemy i wypuszczamy 4. Wpychamy zmianę z powrotem do głównego trunka (jeśli dotyczy) Naszym największym problemem jest scalanie te dwa (oddział z głównym). W większości przypadków nie możemy polegać na automatycznym łączeniu, ponieważ np.: * wprowadzono wiele zmian w głównym trunku * scalanie złożonych plików (takich jak pliki Visual Studio XML itp.) nie działa zbyt dobrze * inny programista / zespół wprowadził zmiany, które robisz nie rozumiesz i nie możesz tak po prostu połączyć. Więc uważasz, że najlepszą praktyką jest synchronizacja tych dwóch różnych wersji (oddziału i głównego). Co robisz?


title: Projekt bazy danych/relacja do wątków wiadomości

text: Jaki jest projekt bazy danych lub logika biznesowa tworzenia aplikacji do przesyłania wiadomości między użytkownikami? Mam trudności z wyborem sposobu podejścia do relacji między każdą konwersacją wątku użytkownika. Pokazuję ten rysunek, ale naprawdę trudno było zrozumieć koncepcję ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/tfvlB.png) Jak działa cała ta wiadomość z wątkami (jak Gmail lub Facebook) ?


title: Reprezentacja wykresu rozwiniętego w czasie

text: Chcę zbudować wykres rozszerzony w czasie z dyskretyzacją czasu Dt, który zaczyna się w t = 0 i kończy w t = T, gdzie pomiędzy węzłem (n1, t) a węzłem (n2, t') jest łukiem wtedy i tylko wtedy, gdy ( n1, n2) zostały połączone w oryginalnym wykresie. Jak można to zaimplementować w pseudokodzie? Problem, na którym utknąłem, polega na tym, jak przejść z oryginalnego wykresu do wykresu rozszerzonego w czasie. (do pisania kodu używam bibliotek C++ i Boost)


title: algorytm przetwarzania obrazu, aby znaleźć pełny kwadrat vs kwadratowy kontur w klatkach wideo

text: Pracuję nad systemem do wykrywania „osadzonej” liczby 12-bitowej w serii ramek, które są nagrane w pliku mp4. Chodzi o to, aby automatycznie zidentyfikować „ujęcie”, a także przyciąć początek pliku do wspólnego przesunięcia w celu synchronizacji z innymi plikami. zwykle odbywa się to ręcznie, ale charakter projektu wymaga, aby odbywało się to w jak największym stopniu automatycznie. Nie można ustawić kodu czasowego w aparacie. Liczba jest generowana przez aplikację na smartfona, dla której zakodowałem prototyp, ale ponieważ jestem nowy w przetwarzaniu obrazów, potrzebuję pomocy w ustaleniu, jak wykonać drugą stronę równania. ten algorytm, bo to, co jest warte, nie musi działać w czasie rzeczywistym i prawdopodobnie stanie się w narzędziu wiersza poleceń opartym na komputerze, nie jest tak istotny dla samego algorytmu. Moim pierwotnym pomysłem było użycie kodu QR, ale stwierdziłem, że rozdzielczość i artefakty ze strumienia mp4 były zbyt duże, aby poradzić sobie z tym we wszystkich sytuacjach oświetleniowych i szybkości klatek. Wpadłem więc na pomysł wysyłania numeru seryjnie, poprzez zakodowanie go w charakterystycznej serii kwadratów, przy użyciu kolorów RGB, co wydaje się być sprawnie obsługiwane bez zbyt wielu „artefaktów” z prędkością enkodera mp4. (Określam to, ręcznie patrząc na wideo klatka po klatce, a nie programowo). Chociaż jest to powolny sposób wysyłania numeru, można go dokładnie zsynchronizować ze znanym czasem odniesienia, a dokładną ramkę ekstrapolować stamtąd (I wysłanie 12 bitów zajmuje dokładnie 1 sekundę), za którą większość szybkości klatek może nadążyć.) Aby sprawdzić, czy obrazy są „czytelne dla człowieka”, wyodrębniłem klatki i jestem pewien, że analiza każdej z nich jest teraz dość trywialnym zadaniem ramki do dekodowania każdego bitu liczby. więc dzieląc go na łatwe do opanowania kawałki, oto co muszę zrobić: * Wykryj „solidny” czerwony kwadrat * Wykryj 4 kwadraty jeden w drugim, które są czerwone, zielone, niebieskie i białe * Wykryj 4 kwadraty jeden w drugim które są czerwone, zielone, niebieskie i czarne Ostatnie 2 byłyby faktycznie tym samym algorytmem, ponieważ po prostu zmieniałbym parametry. istnieje odmiana tego motywu, ale nie jest ona tak istotna dla algorytmu, po prostu oznacza zamianę niebieskiego i zielonego wokół, aby wykryć szybkość klatek. **Pełny czerwony kwadrat** ![czerwony kwadrat pełny](http://i.stack.imgur.com/1wZKM.jpg) **Czerwony kwadrat, zielony kwadrat i niebieski kwadrat, biały kwadrat:** ! [tu wpisz opis obrazu](http://i.stack.imgur.com/vhbKm.jpg) **Czerwony kwadrat, zielony kwadrat i niebieski kwadrat, czarny kwadrat:** ![tu wpisz opis obrazu]( http://i.stack.imgur.com/wyei2.jpg) Algorytm musiałby być w stanie działać niezależnie od poprzedniej klatki, ale musiałby w każdym przypadku zwrócić ograniczający prostokąt czerwonego kwadratu do celów walidacji . Teoretycznie mógłbym spróbować tego sam, ale nie jestem pewien, jak sobie z tym poradzić, to fakt, że kwadraty mogą nie być dokładnie „poziome”. poza wielokrotnym obróceniem obrazu o kilka stopni, nie wiem, jak go dokładnie wykryć.


title: Hobbysta przechodzący do zarabiania na płatnej pracy?

text: Zająłem się hobbystycznym programowaniem w Pythonie kilka lat temu pod wpływem kaprysu, nigdy wcześniej nie programowałem inaczej niż w BASICu, kiedy i krok po kroku stworzyłem, moim zdaniem, ładną, małą aplikację komputerową, do której mógłbym sięgnąć. kiedyś moda. Jest to około 15 000 logicznych wierszy kodu i obejmuje użycie Pythona, wxPython, SQLite i wielu innych bibliotek, działa na Win i Linux (może na Macu, niesprawdzone) i otrzymałem dobre opinie na temat zalet aplikacji od innych - przyjaciele programistów. Zrobiłem również małą aplikację do zbierania danych do eksperymentów z zachowaniem zwierząt oraz narzędzie _ad hoc_ do pomocy w generowaniu strony internetowej... i napisałem kilka samouczków. Uważam, że moje umiejętności Pythona są znacznie ograniczone, moje umiejętności SQL są bardzo ograniczone, ale też nie jestem całkowicie na morzu (np. Zrobiłem FizzBuzz w kilka minut, zrobiłem symulator „Monty Hall Dilemma” w kilka minut itp.). Kładę również duży nacisk na jakość doświadczenia użytkownika; to znaczy, wygląd i styl mają dla mnie duże znaczenie, a oprogramowanie wygląda całkiem nieźle, czuję. Nie znam jeszcze innych języków programowania. Znam też podstawy HTML/CSS (nie biorąc pod uwagę ich języków programowania) i stworzyłem stronę artysty (którą znajomy określił jako „niesamowicie zgrabny”… tak naprawdę nie jest) i mam wykształcenie naukowe . Jestem ciekawy: oprócz bezpośredniej sprzedaży mojego oprogramowania, **co jest _z grubsza_ możliwe – jeśli w ogóle – jeśli chodzi o zarabianie pieniędzy na koncertach lub faktyczne zatrudnienie na pewnym poziomie w branży oprogramowania, dla kogoś z tym ogólnym zestaw umiejętności?**


title: Programowanie zorientowane obiektowo: gettery/settery lub nazwy logiczne

text: Obecnie myślę o interfejsie do klasy, którą piszę. Ta klasa zawiera style dla znaku, na przykład, czy znak jest pogrubiony, kursywa, podkreślony itp. Przez dwa dni dyskutowałem ze sobą, czy powinienem używać getterów/setterów lub nazw logicznych dla metod zmieniających wartości na te style. Chociaż wolę nazwy logiczne, oznacza to pisanie kodu, który nie jest tak wydajny i nie jest tak logiczny. Dam ci przykład. Mam klasę „CharacterStyles”, która ma zmienne składowe „pogrubienie”, „kursywa”, „podkreślenie” (i kilka innych, ale pominę je, aby zachować prostotę). Najłatwiejszym sposobem, aby umożliwić innym częściom programu dostęp do tych zmiennych, byłoby napisanie metod pobierających/ustawiających, dzięki którym można wykonywać `styles.setBold(true)` i `styles.setItalic(false)`. Ale mi się to nie podoba. Nie tylko dlatego, że wiele osób twierdzi, że gettery/settery łamią enkapsulację (czy to naprawdę takie złe?), ale przede wszystkim dlatego, że wydaje mi się to nielogiczne. Spodziewam się, że stylizuję znak za pomocą jednej metody, `styles.format("pogrubienie", prawda)` lub coś podobnego, ale nie za pomocą wszystkich tych metod. Jest jednak jeden problem. Ponieważ nie można uzyskać dostępu do zmiennej składowej obiektu przez zawartość ciągu w C++, musiałbym albo napisać duży kontener if-instrukcji/switch dla wszystkich stylów, albo musiałbym przechowywać style w tablicy asocjacyjnej ( mapa). Nie wiem, jaki jest najlepszy sposób. W jednej chwili myślę, że powinienem napisać getterów/seterów, a w następnej skłaniam się w drugą stronę. Moje pytanie brzmi: co byś zrobił? A dlaczego miałbyś to zrobić?


title: W jaki sposób duża firma popełnia błędy początkujących, które pozostawiają luki w zabezpieczeniach?

text: Sony zostało niedawno zhakowane przez wstrzyknięcie SQL, a hasła użytkowników były przechowywane w postaci zwykłego tekstu. To są błędy początkujących. W tak dużej firmie, jak to przechodzi QA? Jak nie mają lepszych zespołów, niż wiedzieć lepiej niż to? Sama wielkość firmy, która została zhakowana, sprawia, że jest to inne. Dotyczy to nas wszystkich, ponieważ pewnego dnia wszyscy możemy znaleźć się w zespole, który jest odpowiedzialny za coś takiego, a wtedy dostaniemy siekierę. Więc jakie są czynniki, które do tego prowadzą i jak im zapobiegamy?


title: Kontroler aplikacji oparty na JavaScript w środowiskach bez JavaScript

text: Właśnie skończyłem oglądać pouczającą rozmowę Nicholasa Zakasa o architekturze javascript do tworzenia stron internetowych: https://www.youtube.com/watch?v=mKouqShWI4o&feature=youtu.be Ten obraz, który uzyskałem z http:/ /alanlindsay.me/kerneljs/index.html#nav-what , daje przegląd architektury: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/oKTpl.png) Jednak aby dać ci krótkie podsumowanie i pomóc ci uniknąć przyziemnych rzeczy, jądro jest w zasadzie kontrolerem aplikacji, który tworzy C w MVC. Teraz muszę oczywiście zadbać o możliwość środowiska, w którym Javascript jest wyłączony. Zastanawiałem się, czy to skutecznie oznaczało opracowanie kontrolera aplikacji w języku takim jak PHP i utrzymywanie go równolegle z tym napisanym w JavaScript wraz z wynikającymi z tego poleceniami/modułami? Jest w tym coś śmierdzącego, czy istnieje lepszy sposób na zrobienie tego?


title: Co dokładnie oznacza „Applicative” w informatyce?

text: Wiem, co to jest „funktor aplikacyjny”, ale czytałem ostatnio artykuły, które odnoszą się do innych „aplikacyjnych” rzeczy, szczególnie „czysto aplikacyjnych struktur danych”. Kłopot w tym, że nie jestem pewien, co dokładnie oznacza „aplikacyjny” w tym kontekście, a Google do tej pory mnie zawiódł. Mogę uzyskać ogólną angielską (tj. bezużyteczną) definicję "aplikacji", ale gdy tylko dodam "informatykę" do wyszukiwania, dostaję tylko definicje informatyki. Mam niejasne poczucie, że wiąże się to z utrzymywaniem ich nieznośnych efektów na swoim miejscu, ale mógłbym użyć precyzyjnej definicji. Znalazłem to - http://foldoc.org/applicative \- ale nie jestem pewien, czy "język aplikacji == język funkcjonalny" naprawdę pomaga.


title: Czy istnieją jakieś zasady OO, które są praktycznie stosowane w JavaScript?

text: JavaScript jest językiem obiektowym opartym na prototypach, ale może stać się oparty na klasach na wiele sposobów, poprzez: * Samodzielne napisanie funkcji, które mają być używane jako klasy * Użycie sprytnego systemu klas w frameworku (takiego jak klasa mootools). Class) * Wygeneruj go z Coffeescript Na początku miałem tendencję do pisania kodu opartego na klasach w JavaScript i mocno na nim polegałem. Ostatnio jednak używam frameworków Javascript i NodeJS, które odchodzą od tego pojęcia klas i polegają bardziej na dynamicznej naturze kodu, takich jak: * Programowanie asynchroniczne, używanie i pisanie kodu, który używa wywołań zwrotnych/zdarzeń * Ładowanie moduły z RequireJS (aby nie wyciekały do globalnej przestrzeni nazw) * Koncepcje programowania funkcjonalnego, takie jak listy składane (mapa, filtr itp.) * Między innymi To, co do tej pory zebrałem, to to, że większość zasad i wzorców OO Przeczytane (takie jak wzorce SOLID i GoF) zostały napisane dla języków OO opartych na klasach, takich jak Smalltalk i C++. Ale czy któreś z nich można zastosować w języku opartym na prototypach, takim jak Javascript? Czy istnieją jakieś zasady lub wzorce, które są specyficzne tylko dla JavaScript? Zasady unikania _oddzwonienia do piekła_ , _oceny zła_ lub innych anty-wzorców itp.


title: Wzorce projektowe dla JavaScript

text: Wiele platform internetowych ma układ w stylu MVC do kodu i zbliżających się problemów. Jakie są dobre podobne paradygmaty dla JavaScript? Używam już frameworka (jQuery) i dyskretnego js, ale to nadal nie rozwiązuje problemu, na który natrafiam, gdy mam bardziej złożone aplikacje internetowe, które wymagają dużo javascriptu, mam tendencję do po prostu kończenia z mnóstwem działa w jednym lub ewentualnie kilku plikach. Jaki jest lepszy sposób na podejście do tego?


title: Wzorce projektowe aplikacji JavaScript

text: Muszę napisać aplikację PhoneGap z JavaScriptem i myślę o wzorcach projektowania kodu. Przeczytałem kilka książek o wzorcach projektowych JavaScript, ale tak naprawdę nie widzę ich zalet/wad i myślę, że nie rozumiem prawidłowo implementacji i użytkowania. Chciałbym mieć kilka opinii, które najlepiej odpowiadają moim potrzebom. Chciałbym, aby kod był czytelny i możliwy do utrzymania. Sama aplikacja jest dość mała i prosta. Posiada zarządzanie graczami (dodawanie/usuwanie), zarządzanie grą (dodawanie/usuwanie graczy z drużyny, uruchamianie/zatrzymywanie/resetowanie stopera). W ostatniej stworzonej przeze mnie aplikacji miałem ponad 30 nazwanych funkcji w zasięgu globalnym, co moim zdaniem jest dużym nie. Więc teraz chcę wszystko naprawić i myślałem o użyciu literału obiektowego lub wzorca modułu ... może coś takiego: var MYAPP = { init: function() { $(document).ready(function( ) { MOJAAPP.bind(); }); }, bind: function() { // Powiąż zdarzenia kliknięcia i strony jQuery }, player: { add: function(name) { ... }, remove: function(name) { ... } }, team: { addPlayer : function(name) { ... }, removePlayer: function(name) { ... } }, game: { create: function() { ... }, startTime: function() { ... }, stopTime : function() { ... }, resetTime: function() { ... } } }; document.addEventListener('urządzenie gotowe', MYAPP.init, false); ... a może to? var MOJAAPP = { init: function() { $(dokument).ready(function() { MOJAAPP.bind(); }); }, bind: function() { // Powiąż zdarzenia kliknięcia i strony jQuery } } var PLAYER = (function () { // Niektóre zmienne prywatne var privateVar, privateMethod; return { add: function (name) { ... }, usuń: function (nazwa) { ... } }; }()); document.addEventListener('urządzenie gotowe', MYAPP.init, false);


title: Od Javy do JavaScriptu?

text: Jestem przede wszystkim programistą Java. Ze względu na zasady OO i ogólny paradygmat programowania w Javie, takie jak zawijanie rzeczy w zmienne statyczne i zwracanie określonych typów, bardzo pomaga mi w "wizualizacji" programu. Zamiast myśleć o dużym programie, mogę zamiast tego skupić się na mniejszych, zorganizowanych częściach mojego ewentualnego programu, dodawać funkcjonalność i budować od tego momentu. Dlatego mam problemy z programowaniem w innych językach. A przynajmniej nie byłem w stanie programować w takich samych umiejętnościach jak w Javie w porównaniu z innymi językami. Wiem, że JavaScript ma zasady OO, więc chciałbym nauczyć się tego języka w oparciu o OO, tak jak programowałem w Javie. czy to możliwe?


title: Programowanie obiektowe w JavaScript. Czy istnieje życie bez tego?

text: W naszej firmie dysponujemy sporym zbiorem kodu JavaScript opartego na PrototypeJS, który przenosimy do jQuery z kilku powodów (tutaj nie ma to większego znaczenia). Próbuję ustalić wytyczne dotyczące kodowania, aby utrzymać porządek podczas przenoszenia. Jedną z obserwacji z przebrnięcia przez implementację opartą na prototypie jest to, że wiele kodu jest napisane w stylu OOP (przy użyciu `Class.create` Prototype), ale kod nie jest "zorientowany obiektowo" w duchu. Ogólny wzorzec, który widziałem: jeden „konstruktor”, który należy wywołać (ale nie wywoływać dwa razy, ponieważ konstruktor używa zakodowanych na stałe identyfikatorów DOM), kilka innych „funkcji” i programów obsługi zdarzeń, których nie oczekuje się wywołanie (ale ponieważ nie ma "prywatnego" w JavaScript, nie wiesz o tym) i dzielenie się danymi pomiędzy wszystkimi tymi funkcjami poprzez `this`. Z punktu widzenia dzwoniącego jest tylko jeden „możliwy do wywołania” i nic więcej. Zaczynam wierzyć, że _OOP w JavaScript można i być może należy unikać_ w wielu przypadkach. Przynajmniej dla naszego przypadku użycia, który nie jest interfejsem użytkownika Goole Wave nowej generacji, ale po prostu: trochę ulepszeń opartych na AJAX, rejestrowanie niektórych programów obsługi zdarzeń tu i tam, drobne manipulacje DOM i tym podobne. * funkcjonalność, której potrzebujemy, wydaje się być możliwa do zaimplementowania w typowy sposób nie-OOP jQuery, używając magii domykania w celu uzyskania enkapsulacji i prywatności. Jako efekt uboczny, wydajność minifikacji przeniesionego kodu jest znacznie lepsza. * OOP w JavaScript jest nietradycyjne i mylące, jeśli pochodzisz z „tradycyjnego” środowiska. Istnieje wiele prób i schematów przybliżania tradycyjnego OOP, ale IMHO sprawia, że sprawy są jeszcze bardziej zagmatwane i kruche. * Jedną z rzeczy, których nauczył mnie Crockford „JavaScript the good parts”, jest to, że prawdziwa siła JavaScript leży w zakresach i domknięciach funkcji, a tym bardziej we wzorcach OOP. Zastanawiam się, czy istnieje szersze wsparcie dla tego poczucia, że OOP w JavaScript tak naprawdę nie traktuje go jako świętej mantry, jak to ma miejsce w innych językach/platformach. Ponadto, jakiego rodzaju wzorce nie oparte na OOP/zamknięciu są znacznie bardziej preferowane.


title: Idź z perspektywą zorientowaną obiektowo

text: Moje pytanie dotyczące OOP JavaScript znajduje się na samym dole, jeśli chcesz pominąć moje wprowadzenie. W odpowiedzi na pytanie Uzyskiwanie dostępu do zmiennych z innych funkcji bez użycia zmiennych globalnych jest komentarz dotyczący OOP, który mówi: > Jeśli jest szansa, że użyjesz tego kodu ponownie, prawdopodobnie > postarałem się użyć obiektu- zorientowana perspektywa. Używanie globalnej przestrzeni nazw > może być niebezpieczne -- ryzykujesz trudne do znalezienia błędy z powodu > nazw zmiennych, które są ponownie używane. Zazwyczaj zaczynam od podejścia zorientowanego obiektowo > na coś więcej niż proste wywołanie zwrotne, aby nie musiał > ponownie pisać. Za każdym razem, gdy masz grupę powiązanych > funkcji w javascript, myślę, że jest to kandydat do podejścia obiektowego >. To brzmi dla mnie zgodnie z tym, co widziałem u mojego starego kolegi OOP. Istnieje wiele różnych podejść i różnych głosów prowadzących w różnych kierunkach. Ponieważ jestem front-end developerem i projektantem UI, jestem trochę zdezorientowany. **Konstruując do pytania** Słyszałem z różnych miejsc, że zmienne globalne są z natury nieprzyjemne i złe, gdy robię jakiś nie zorientowany obiektowo JavaScript, i że są trzy dostępne opcje, aby utworzyć zmienną z jednej funkcji , widoczne i używane przez inną funkcję, np. funkcję A, aby była widoczna dla funkcji B; lub zmienna funkcji A, która ma być przekazana i używana w funkcji B. 1.uczyń ją globalną 2.ustaw ją jako właściwość obiektu lub 3.przekaż ją jako parametr podczas wywoływania B z A. Czytałem o przestrzeniach nazw , curry i inne podejścia... **Pytanie:** Powiedziawszy to wszystko, zastanawiałem się, jaka jest najlepsza struktura OOP lub najlepsza praktyka kodowania w JavaScript, która utrzymuje wszystko w hermetyzacji i zapewnia największe bezpieczeństwo przed narażeniem zmiennych na manipulację?


title: Jaka jest najlepsza praktyka w zakresie walidacji parametrów metody w bibliotece?

text: Tworzę bibliotekę gier w javascript, zawierającą wiele klas. Waham się co do zachowania, które powinienem zastosować w kwestii walidacji parametrów metody: **Czy powinienem sprawdzić poprawność parametrów przekazywanych do każdej metody?** Na przykład, gdy metoda przyjmuje w parametrze tylko liczbę z przedziału od 0 do 100, czy powinienem sprawdzić czy wartość jest prawidłowa? Mam dziesiątki zajęć, każda z dziesiątkami metod. W przypadku prostego gettera mogę mieć więcej niż pół linii kodu używanego tylko do sprawdzania parametrów. Dodanie kontroli sprawia, że mój kod jest mniej łatwy w utrzymaniu, bardziej ciężki. Biorąc pod uwagę, że jest to biblioteka przeznaczona do użytku przez wielu innych programistów, sprawdzanie parametrów może uniknąć wielu błędów i błędów, a byłoby to mile widziane. Jak więc radzą sobie z tym inne biblioteki javascript i jakie jest najlepsze rozwiązanie?


title: Próbuję dowiedzieć się, które funkcje z jednej biblioteki C są używane przez projekt C. Czy ktoś ma proste rozwiązanie?

text: Mówiąc konkretnie, chcę wiedzieć, które funkcje/typy znajdują się w libpri i są używane w projekcie Asterisk. Nie jestem tradycyjnie programistą C, ale znam kilka podstawowych rzeczy, ponieważ uczęszczałem na zajęcia na studiach.


title: Jaki jest dobry punkt kompleksowej obsługi do zrozumienia informacji o licencjonowaniu oprogramowania?

text: Dowiedziałem się sporo o różnych modelach licencjonowania oprogramowania io tym, co te modele oznaczają dla mojego własnego projektu oprogramowania. Chciałbym jednak upewnić się, że rozumiem jak najwięcej z nich, aby móc podejmować decyzje, jak licencjonować własne oprogramowanie i w jakich scenariuszach mogę bezpiecznie korzystać z oprogramowania w modelu licencjonowania. Czy masz dobrą rekomendację książki/strony itp., która zawiera te informacje w jednym miejscu?


title: Utrzymanie głównej linii projektowej z projektami satelitarnymi

text: Niektóre projekty, nad którymi pracuję, mają główną linię funkcji, ale można je dostosować do potrzeb klienta. Do tej pory te dostosowania były wprowadzane jako preferencje, ale teraz są 2 problemy z systemem... 1. Strona ustawień wymyka się spod kontroli funkcji. Prawdopodobnie można wprowadzić pewne ulepszenia w interfejsie ustawień, ale niezależnie od tego, konfigurowanie nowych instancji dla nowych klientów jest dość kłopotliwe. 2. Klienci zaczęli prosić o dostosowania, które łatwiej byłoby utrzymać jako oddzielne wątki, zamiast mieć mnóstwo kodu dostosowywania. Optymalnie wyobrażam sobie pewien rodzaj kontroli źródła, w której funkcje znajdują się albo w głównej linii projektu, a dostosowania na klienta są utrzymywane w repozytorium na konfigurację klienta. Dostosowania na projekt musiałyby pozostać oddzielne, ale jeśli błąd zostanie znaleziony i naprawiony w konkretnym projekcie, musiałbym przenieść poprawkę z powrotem do głównej linii i do wszystkich innych repozytoriów klientów. Problem polega na tym, że nigdy wcześniej tego nie widziałem i zanim spędzę czas na szukaniu kontroli źródła, która może pomieścić ten scenariusz i go zaimplementować, uważam, że najlepiej zapytać, czy ktoś ma coś mniej skomplikowanego lub wie o produkcie kontroli źródła, który może radzić sobie z tym z bardzo małym ciągnięciem za włosy.


title: Czego powinienem się nauczyć, aby „nauczyć się” Comp Sci?

text: [To pytanie zostało pierwotnie zadane na Stack Overflow, ale zaleca się, aby przenieść je tutaj.] Nie mogę znaleźć niczego podobnego do pytania, które zamierzam zadać, więc proszę wybacz mi, jeśli już jest coś takiego, proszę czuć swobodnie wskazać mi właściwy kierunek. Wyjaśnienie też zajmie trochę tła, proszę wybacz mi to. [backstory] Zasadniczo ukończyłem uniwersytet około 18 miesięcy temu, uzyskując dyplom z systemów informacji biznesowej i języka japońskiego. Japończycy zajęli połowę stopnia, więc BIS był tylko wspólny. Nauczyłem się tylko PHP w zakresie języków i w zasadzie żadnej teorii komputerowej - wszystko było zawodowe (sieci, podstawy programowania, rozwój CMS, Office i VBA, a następnie mnóstwo kursów z teorii biznesu). Od tego czasu postanowiłem nauczyć się C# i ASP.Net i spróbować zdobyć stanowisko programisty. Stworzyłem witrynę w stylu sklepu internetowego i małą aplikację CRM w Windows Forms, aby zarówno uczyć siebie, jak i budować portfolio, i na szczęście udało mi się zdobyć pozycję programisty. Zła strona? Jestem jedynym programistą w mojej firmie. Nie zrozumcie mnie źle, w zeszłym roku nauczyłem się dużo i dużo, zrobiłem trochę devpt. przed Unią i tak znałem podstawy, ale była to praca polegająca na "uczeniu się z książek" - każdego wieczoru. A teraz... jestem teraz w punkcie, w którym regularnie tworzę oprogramowanie, dobrze oceniam skale czasowe, a inni profesjonaliści, którzy są w grze dłużej, powiedziano mi nawet, że mój kod i metodologia są dobre niż ja i zaoferowali mi pracę. [/backstory] Cała ta sprawa sprowadza się do tego, że teraz chcę studiować tematy, które pominąłem, nie robiąc CS. Co ważniejsze, czy mógłbyś polecić książki / bezpłatne kursy online? Chcę poznać teorię informatyki, a nie tylko lepsze kodowanie. Dziękuję Ci!


title: Organizacja funkcji powiązanych z biblioteką DLL

text: To jest pytanie dotyczące organizacji kodu. Mam swój podstawowy kod działający, ale kiedy go rozszerzę, będzie okropny. Mam bibliotekę DLL, dla której nie mam `.lib`. Dlatego muszę użyć całej kombinacji `LoadLibrary()/GetProcAddress()`. Działa świetnie. Ale ta biblioteka DLL, do której się odwołuję, ma ponad 100 funkcji. Mój obecny proces to: 1) Typedef typ funkcji. Np.: `typedef short(_stdcall *type1)(void);` 2) Przypisz nazwę funkcji, której chcę użyć, na przykład `type1 function_1;` 3) Załaduj DLL, a następnie wykonaj coś takiego: `function_1 = (type1) GetProcAddress(hinstLib, "_mangled_funcName@5");` Normalnie chciałbym wykonać wszystkie moje definicje funkcji w pliku nagłówkowym, ale ponieważ muszę użyć funkcji biblioteki ładowania, nie jest to takie proste. Kod będzie bałaganem. W tej chwili robię (1) i (2) w pliku nagłówkowym i rozważam utworzenie funkcji w innym pliku .cpp, aby wykonać bibliotekę ładowania i zrzucić tam wszystkie (3). Rozważałem użycie przestrzeni nazw dla funkcji, abym mógł ich używać w funkcji main i nie musieć przechodzić do innej funkcji. Jakieś inne wskazówki, jak uporządkować ten kod? Moim celem jest możliwość używania `function_1` jako zwykłej funkcji w głównym kodzie. Jeśli mam do `ref::function_1` to byłoby w porządku, ale wolałbym tego uniknąć. Ten kod dla wszystkich praktycznych celów jest w tej chwili po prostu zwykłym C.