title: Szyfrowania nie można cofnąć?

text: Mam wrażenie, że zaszyfrowanego ciągu znaków nie da się odszyfrować, więc pierwotna wartość jest tracona na zawsze. Jednakże, jeśli następujący ciąg **zawsze równa się** "dominic" (moje imię), to nie może istnieć jakiś logiczny sposób, aby go odwrócić; ponieważ nie jest losowy ani nie jest oparty na dacie/czasie, ale jest na to logiczna metoda? 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE= Bez względu na to ile razy zaszyfruję "dominic" (ciąg), zawsze równa się jak wyżej. Czy nie powinno więc istnieć jakiś sposób na odszyfrowanie takiego ciągu? Przykład o czym mówię: public string EncryptPassword(string password) { return Convert.ToBase64String(System.Security.Cryptography.SHA256.Create() .ComputeHash(Encoding.UTF8.GetBytes(password))); }


title: Ponowna kompilacja bibliotek dll i dodawanie kolejnych w czasie wykonywania — jakie mam opcje?

text: Chcę skompilować niestandardowe funkcje w czasie wykonywania na podstawie skryptów napisanych przez użytkownika. Podam hipotetyczny przykład, który powinien dokładnie pokazać, co muszę zrobić. To dla mnie najlepszy sposób na opisanie problemu. Chciałbym trochę danych wejściowych / pomysłów, jak mogę to rozwiązać. Na dole podam moje pomysły. Mam 2 klasy, jedną z publicznymi int x i y. Inny z publicznym int x,y,z. Może istnieć więcej niż jedna uruchomiona instancja każdej klasy. Rzecz z tymi klasami (i tu pojawia się mój problem) jest to, że muszą być aktualizowane przez użytkownika napisane, a następnie skompilowane funkcje w czasie wykonywania, które następnie zostaną dodane do listy funkcji aktualizacji, które są uruchamiane raz na cykl/zdarzenie . Które może być za naciśnięciem jakiegoś przycisku lub czegoś takiego. Przykład: Użytkownik napisał skrypt aktualizujący publicznych członków Klasy A. Napisał A.X = BY + C.Z. Zmienne tutaj są publiczne, nigdy prywatne. Ta metoda musi zostać skompilowana i dodana do pewnej listy funkcji do wywoływania każdego cyklu. Oczywiście ta metoda wymaga dostępu do klas B i C, a także A. Dlatego należy przekazać wskaźniki do tych klas. Funkcja nic nie zwraca. Kiedy mówię o klasie A, B i C, mam na myśli niektóre przypadki dowolnych klas. „A” może należeć do klasy Q, podczas gdy zarówno B, jak i C mogą pochodzić z klasy T. Lub dowolna inna odmiana. Te klasy nie wymagają rekompilacji/napisania przez użytkownika ani niczego w tym rodzaju. Potrzebuję tylko pomocy przy wymyślaniu opcji i jak skompilować funkcję, która zostanie przekazana w niektórych wskaźnikach i coś z nimi zrobi. Ale przy całym tym zdefiniowanym czasie wykonywania, co robi funkcja, co jest do niej przekazywane, itd. \---- Co myślę, że potrafię --- skaczę bardzo daleko w wiedzy, ale to jest to, co zawsze robię. Więc po prostu przełączam się z C# na C++ i mam niewiele do zrobienia na razie, gdy niewiele wiem. Więc wszystko, co mogę zrobić, to odgadnąć rozwiązania i je zbadać. Zgaduję, że mógłbym skompilować późno ładującą się bibliotekę dll dla każdej funkcji i domyślam się, że biblioteka dll musi wiedzieć coś o przekazanych do niej strukturach danych, więc myślę, że może działać, aby mieć je w oddzielnej normalnej bibliotece dll, której może używać dowolny program. (Klasy A, B i C, a raczej klasy Q i T, których A, B i C były przykładami w moim małym demo). Więc teraz zarówno normalny program, jak i funkcje dll wiedzą wszystko o klasach, a wszystko, co muszę zrobić, to skompilować biblioteki dll w czasie wykonywania, załadować je i jakoś uzyskać do nich wskaźnik, że moja główna aplikacja ma i może wywołać z odpowiednim argumenty. Następnie, jeśli użytkownik zmieni skrypt, biblioteka dll zostanie zwolniona, ponownie skompilowana, wczytana ponownie i otrzymany zostanie nowy wskaźnik? Każda pomoc jest bardzo ceniona. Jeśli możesz pomóc kierować moją nauką/badaniami, nauczę się dużo szybciej i będę w stanie to wdrożyć. Bardzo dziękuję!


title: Sugestie algorytmów, sztucznej inteligencji lub inteligentnych agentów do przyjmowania źle sformatowanych i zmiennych danych z różnych typów dokumentów

text: Dzięki za uwagę! # Tło Otrzymałem zadanie napisania programu do normalizacji i pozyskiwania danych z różnych źródeł do wspólnej bazy danych. Dla uproszczenia załóżmy, że program jest przeznaczony dla systemu bibliotek publicznych i że chcą prowadzić bazę danych wszystkich książek wypożyczonych obecnie z ich różnych oddziałów. Załóżmy dalej, że oddziały nie są połączone ze wspólną siecią lub bazą danych (głupie, wiem, ale proszę o wyrozumiałość). Zadanie polega na przyjmowaniu przesłanych danych od różnych kierowników oddziałów, a następnie zautomatyzowaniu procesu normalizacji tych danych i przechowywania ich we wspólnej bazie danych. ## Zmienne formaty danych surowych **Dane surowe** mogą być przesyłane w postaci pliku MS Excel, pliku .csv, pliku rozdzielanego tabulatorami, zwykłego pliku tekstowego, być może nawet zwykłego e-maila, pola rozdzielanego plik itp. ## Luźno powiązana zawartość danych Zawartość plików surowych danych _zazwyczaj_ będzie zawierać następujące pola: 1. Identyfikator książki 2. Tytuł książki 3. Autor 4. Czy wyewidencjonowano? 5. Dni przeterminowania 6. ISBN 7. Termin płatności . . .i tak dalej. Problem polega na tym, że niektóre z przesłanych plików danych będą miały te pola w nagłówkach kolumn, a inne nie (więc trzeba będzie wywnioskować z danych, jakie jest to pole). Ponadto nazwy pól nie zawsze będą spójne. Jeden oddział biblioteki może wywołać pole logiczne określające, czy książka jest wyrejestrowana „OnLoan”, podczas gdy inny oddział nazywa ją „IsCheckedOut”. ## Wspólne repozytorium danych Wszystkie te dane zostaną pozyskane do wspólnej bazy danych ze znormalizowanymi danymi, które zostały oczyszczone podczas procesu pozyskiwania. Miejmy nadzieję, że mamy coś takiego w ostatecznej bazie danych: 1. BranchId 2. BookId 3. Title 4. CheckedOut 5. ISBN 6. DueDate 7. DaysOverdue . . .i tak dalej. ## Automatyzacja procesu przyjmowania Załóżmy, że są tysiące oddziałów i każdy z nich musi raz w miesiącu wydawać ten raport do centrali biblioteki. Oczywiście, mój klient może zatrudnić do tej pracy grupę osób zajmujących się wprowadzaniem danych (w rzeczywistości tak się to robi dzisiaj). Ich żądanie dotyczy jednak jak największej automatyzacji w celu obniżenia kosztów wprowadzania danych. ## A więc oto mój plan, proszę sugerować lub krytykować: 1. **Ustandaryzuj proces przesyłania plików.** Zostanie to obsłużone przez utworzenie strony internetowej z oknem dialogowym wgrywania pliku, GOTOWE! 2. **Określ typ pliku.** Będę używał C# (nie to, że język ma znaczenie) i ma dość łatwy sposób na uzyskanie typu pliku, ale czasami po prostu dostanę plik `.txt`, który okazuje się być rozdzielane tabulatorami lub rurkami _więc potrzebuję algorytmu, aby to wykryć_. Zastanawiam się nad użyciem w tym celu _Bayes Classifier_ lub _Artificial Neural Network_. 3. **Spróbuj przeanalizować dane do pamięci.** Teraz mam nadzieję, że mam nadzieję, że mam plik Excela, plik rozdzielany tabulatorami, csv itp. Przepuszczę plik przez odpowiedni parser, aby umieścić go w pamięci ale teraz trzeba ustalić, czy ** plik ma nagłówki ** lub czy mogę ** wywnioskować, jakie powinny być nagłówki na podstawie wartości **. W tym celu mam nadzieję ponownie użyć **Systemu klasyfikacji Bayesa** i być może obliczyć **Odległość Levenshteina** od wartości do elementów w tablicy znanych/standaryzowanych nazw nagłówków. Ale co z wnioskowaniem nagłówka z danych? Jak zidentyfikować jedną kolumnę zawierającą terminy, a drugą zawierającą numery ISBN? 4. **Wyczyść, wyczyść i prześlij wartości w każdej kolumnie.** Jeśli mam szczęście, że dotarłem tak daleko (wiem, jakie są nagłówki), muszę przejrzeć wartości w każdej kolumnie i wyczyścić/ znormalizować je. Na przykład, niektóre oddziały biblioteki mogą wprowadzić wartość ISBN jako „ISBN12-345-67-89”, podczas gdy inna filia może wpisać „123456789”. Muszę uchwycić tę różnicę i znormalizować je. Czy jest to przypadek dla zwykłego systemu eksperckiego czy 'jeśli. . .wtedy`? Czy jest lepszy sposób? 5. **Prześlij znormalizowane dane do bazy danych.** Ten krok nie jest tak trywialny, jak się wydaje, ponieważ niektóre oddziały bibliotek mogą zgłaszać tytuł książki jako „Algorytmy dla opornych”, podczas gdy inne zgłaszają go jako „Algorytmy dla opornych, 1. wydanie”. Załóżmy na chwilę, że nie mam numeru ISBN, aby powiązać ze sobą dwie książki (chociaż są one takie same), **która metoda może być odpowiednia do wywnioskowania, że te książki są takie same i przypisania im wspólnego klucza podstawowego int pokrewna tabela `Książki`**? # Wiele, wielkie dzięki za sugestie !!!


title: Czy istnieje jakiś praktyczny problem w świecie rzeczywistym, w którym wystarczy najlepszy (dokładny) algorytm lub program?

text: _Proszę, jeśli uważasz, że pytanie jest duże i nie zasługuje na twoją uwagę (tl;dr), nie odrzucaj go ani nie proś o zamknięcie go na tej podstawie._ Problem 1.1-5 w książce Thomasa Cormena i in. Wprowadzenie do Algorytmy to: „Wymyśl prawdziwy problem, w którym tylko najlepsze rozwiązanie wystarczy. Następnie wymyśl takie, w którym rozwiązanie, które jest „w przybliżeniu” najlepsze, jest wystarczająco dobre”. Interesuje mnie jego pierwsze stwierdzenie. I chciałbym rozwinąć moje (niezrozumienie) pytania i poprosić o nazwanie rzeczywistego problemu, w którym zadziała tylko **dokładne** rozwiązanie, w przeciwieństwie do rzeczywistego problemu, w którym wystarczająco dobre rozwiązanie będzie w porządku . Jaka jest więc różnica między dokładnym a wystarczająco dobrym rozwiązaniem. Rozważmy jakiś problem fizyczny, na przykład symulację pełnego przepływu w ośrodku przepuszczalnym. Aby symulacja komputerowa była możliwa, przy wyprowadzaniu modelu matematycznego należy przyjąć pewne uproszczone założenia. W przeciwnym razie model stanie się co najmniej złożony i nierozwiązywalny. Praktycznie każda cząstka we wszechświecie ma wpływ na przepływ płynu. Ale nie wszystkie cząstki są równe. Te, które tworzą ośrodek przepuszczalny, są znacznie bardziej wpływowe niż te znajdujące się w odległości lat świetlnych. Następnie należy rozwiązać model matematyczny i rzadko można znaleźć dokładne rozwiązanie, chyba że model matematyczny jest wystarczająco prosty (co prawdopodobnie oznacza, że model nie jest bliski rzeczywistości). Bierzemy przybliżoną metodę numeryczną i po godzinach kodowania i dniach weryfikacji wymyślamy program lub algorytm, który jest rozwiązaniem. A jeśli model i algorytm dają wyniki zbliżone w pewnym stopniu do rzeczywistego problemu, jest to wystarczająco dobre rozwiązanie. Warto zwrócić uwagę na różnicę między dokładnym algorytmem rozwiązania a dokładnym wynikiem obliczeń. Rozważając rzeczywiste problemy i rzeczywiste maszyny obliczeniowe, uważam, że wszystkie rozwiązania problemów fizycznych, w których bierze się jakiekolwiek obliczenia, nie mogą być dokładne, ponieważ uniwersalne stałe fizyczne są w przybliżeniu reprezentowane w komputerze. Wszelkie liczby są reprezentowane z ograniczoną precyzją, co najmniej ograniczoną ilością pamięci dostępnej dla maszyny liczącej. Mogę sobie wyobrazić wiele problemów, w których wystarczy dobre, do pewnego stopnia dobre rozwiązanie, takie jak planowanie pociągów, automatyczny handel, obliczanie orbit satelitów, systemy eksperckie opieki zdrowotnej. W takich przypadkach nie można uzyskać dokładnych rozwiązań ze względu na ograniczenia czasu obliczeń, ograniczenia pamięci komputera lub ze względu na charakter problemów. Wygooglowałem to pytanie i podoba mi się to, co sugeruje ten gość: są rodzaje problemów matematycznych, które wymagają dokładnych rozwiązań (tu mała uwaga: ponieważ pierwotnie pytanie zostało zaczerpnięte z książki „Wprowadzenie do algorytmów”, termin „rozwiązanie” oznacza algorytm lub program, który w tym przypadku daje dokładną odpowiedź na każde wejście). Ale to chyba bardziej teoretyczne zainteresowanie. Chciałbym więc zawęzić pytanie do: ** Czy są jakieś praktyczne problemy w świecie rzeczywistym, w których tylko najlepszy (dokładny) algorytm lub program rozwiąże problem (ale nie wystarczająco dobry, nieoptymalny, nazywasz to rozwiązaniem)? ** Chcę wyjaśnić moje rozumienie _"wystarczająco dobry"_. _najlepsze_ rozwiązanie **jest** _wystarczająco dobre_ **ale nie każde** _wystarczająco_ dobre_ rozwiązanie **jest** _najlepsze_ (dokładne, najszybsze itp.). Pytam więc o rodzaj problemu, dla którego żadne rozwiązanie nie może być uznane za wystarczająco dobre, chyba że rozwiązanie jest najlepsze. Są problemy, takie jak złamanie szyfrów kryptograficznych, gdzie w praktyce liczy się tylko dokładne rozwiązanie i znowu w praktyce proces odszyfrowywania bez znajomości tajemnicy powinien zająć rozsądną ilość czasu. Wracając do pierwotnego pytania, jest to problem, w którym wystarczy dobre (wystarczająco szybkie) rozwiązanie. Nie ma praktycznej potrzeby błyskawicznego cracku, chociaż jest to pożądane. Tak więc jakość „najlepszego” można rozumieć w dowolnym sensie: dokładnym, najszybszym, wymagającym najmniej pamięci, przy minimalnym możliwym ruchu w sieci itp. I nadal chcę, aby to pytanie było teoretyczne, jeśli to możliwe. W pewnym sensie może istnieć przykład komputera X, który ma ograniczone zasoby R o wielkości Y, gdzie najlepszym rozwiązaniem problemu P jest to, które przyjmuje nie więcej niż dostępne Y dla danych wejściowych o rozmiarze N. Ale to jest problem ze znalezieniem konkretnego rozwiązanie dla P na komputerze X, które jest... cóż, wystarczająco dobre. Formułując to pytanie doszedłem do wniosku, że żyjemy w świecie, w którym od rozwiązań programistycznych do celów praktycznych wymaga się bycia wystarczająco dobrym. W rzadkich przypadkach (np. manewrowanie wahadłowcem) bardzo bardzo dobre. Nie mogłem znaleźć żadnych problemów, które wymagałyby tylko najlepszego rozwiązania. Jeśli istnieje taki problem o znaczeniu praktycznym rozwiązany lub nierozwiązany, czy możesz podać jego przykład? A może istnieje dowód na to, że taki problem nie może istnieć?


title: Dynamiczne formularze do tworzenia formularzy i projektowanie baz danych?

text: Załóżmy, że Twoi użytkownicy mogą tworzyć własne formularze internetowe (pola tekstowe, zaznaczenia itp.) i publikować je w sieci, aby użytkownicy mogli je wypełnić. Czy ktoś ma zasób lub radę, jak zaprojektować bazę danych, aby powiązać ją z formularzami dynamicznymi? Na przykład, czy utworzyłbyś tabelę podrzędną dla każdego formularza, czy różne wersje danego formularza?


title: Czy model domeny powinien obejmować wszystkie jednostki domeny w moim projekcie?

text: Obecnie czytam Grails i uwielbiam to. Aby zdobyć doświadczenie z Grails postanowiłem stworzyć aplikację internetową dla jakiegoś systemu zarządzania. Jak można się domyślić, istnieje wiele encji, które wchodzą w model domeny dla mojej aplikacji internetowej. W każdym razie jako nowicjusz w tworzeniu stron internetowych, po prostu pomyślałem o stworzeniu najpierw strony domowej. Teraz pojawia się problem, siedziałem przez godzinę i narysowałem swój model domeny (tylko dla mojej strony głównej!). Potem miałem wątpliwości, czy musimy najpierw wprowadzić wszystkie encje (tj. Całe moje encje aplikacji internetowej, takie jak użytkownik, profil, zadania i ich relacje itp.) w modelu domeny, a następnie zacząć kodować lub rysować modele domeny dla każdej strony w naszym aplikację internetową i wreszcie połączyć wszystkie modele domen? Cóż, to co robię jest złe? To mój pierwszy projekt, jaki w życiu zacząłem. Dzięki za rady.


title: czy realistyczne jest korzystanie z lokalnej pamięci HTML5 do przechowywania CSS i JavaScript?

text: Pomysł polega na wykorzystaniu lokalnej pamięci HTML5 do przechowywania często używanych CSS i JavaScript. Na przykład (pseudo-kod): var load_from_cdn = true; if (wykryj pamięć lokalną) { if (pamięć podręczna css, znaleziono js) { załaduj pamięć podręczną lokalnej pamięci load_from_cdn = false; } } if (load_from_cdn) { document.write('<skrypt>...'); } Czy to możliwe czy realistyczne? Zdaję sobie sprawę z pamięci podręcznej przeglądarki, nadal będzie sprawdzanie dostępu do nagłówków, zakładam, że brak dostępu HTTP jest lepszy (w moim _myśleniu_) PS : Wygląda na to, że pamięć lokalna obsługuje tylko **parę klucz-wartość**, czy ktoś może to udowodnić? (najlepiej z kilkoma przykładami)


title: Jaka jest prawidłowa definicja prawa Moore'a?

text: Widzę różne źródła, które mówią, że liczba tranzystorów podwaja się co 24 miesiące lub co 18 miesięcy. Czy ktoś ma wiarygodne źródło?


title: Czy lepiej jest tworzyć aplikacje przy użyciu technologii określonej platformy lub technologii internetowych?

text: Niedawno przeczytałem ciekawy artykuł, który mówił o budowaniu aplikacji mobilnych przy użyciu JavaScript i HTML5. Jedną z interesujących kwestii, które zwrócili, było to, jak to podejście działało na wielu platformach, różnym sprzęcie (np. Rozmiar ekranu) i oprogramowaniu (np. iPhone, WP7, Mac, Windows). Zauważyłem też coś interesującego opublikowanego na stronie Build Website Microsoftu na ich nadchodzącą konferencję. Wydaje się, że kładą duży nacisk na HTML5 i JavaScript. Wydaje się idealnym rozwiązaniem, aby opracować pojedynczą aplikację (oczywiście nadal wymagałoby to drobnych modyfikacji) i działać na tabletach, komputerach PC, urządzeniach mobilnych, telewizorach lub prawie każdym urządzeniu z dostępem do Internetu. Czy to zmieniający się trend? Oczywiście nauka technologii nie jest zabawna tylko po to, by rok później dowiedzieć się, że jest zamykana. Moim zdaniem wydaje się to dość trudne, ponieważ w porównaniu do Silverlight może wykonywać pewne funkcje, takie jak animacje lub wiązanie danych (moje ulubione!) za pomocą HTML5 i JavaScript. W tym przypadku same narzędzia sprawiają, że jest to lepszy wybór (Expression Blend i Visual Studio 2010). Martwię się jednak, ponieważ coraz łatwiej jest robić w sieci rzeczy, które jeszcze kilka lat temu wydawały się niemożliwe. Czy nadal jest miejsce na technologie takie jak Flash i Silverlight, jeśli chodzi o tworzenie aplikacji, czy też powinniśmy dążyć do dostosowania naszych aplikacji do technologii internetowych, takich jak HTML5, CSS3 i JavaScript?


title: Korzystanie z „kulistego frustum” do projekcji 3D

text: Obecnie piszę transformację z przestrzeni modelu do przestrzeni przycinania do użytku w OpenGL. Z tego, co widziałem, programiści zazwyczaj używają tradycyjnej prostokątnej frustum do zdefiniowania granic przycinania w przestrzeni modelu. Osobiście miałem na myśli kształt przypominający frustum, z wyjątkiem tego, że bliskie i dalekie płaszczyzny są kulami wyśrodkowanymi na wierzchołku frustum (aparatu). A więc coś, co wygląda tak: ![Sektor kołowy](http://i.stack.imgur.com/i05pA.png) Żółty region odpowiada przestrzeni przycinania OpenGL i dwóm sferom (przedstawionymi jako koła w tym obraz przekroju) odpowiadają z=-1 (sfera wewnętrzna) i z=1 (sfera zewnętrzna) OpenGL. Czy jest to bardziej realistyczny sposób modelowania projekcji, czy też powinienem trzymać się tradycyjnej prostokątnej frustum podczas projektowania macierzy projekcji?


title: Czy kod wewnętrzny powinien być udostępniany osobom niebędącym deweloperami w organizacji?

text: Tam, gdzie pracuję, mamy wielu programistów i bardzo dużo kodu, który obsługuje nasze zastrzeżone aplikacje, z których korzystają zarówno pracownicy, jak i klienci. Mamy również wielu inteligentnych pracowników wsparcia, którzy lubią rozumieć wewnętrzne działanie naszych systemów, aby lepiej wspierać naszych klientów, a może nawet od czasu do czasu przesyłać łatki. Czy powinniśmy otworzyć nasz kod, aby nasi nie-rozwojowi pracownicy mogli go przeczytać? Jakie czynniki powinniśmy wziąć pod uwagę podejmując tę decyzję? W każdym razie spotkałem się z wieloma argumentami i kontrargumentami i chciałbym podjąć decyzję opartą na doświadczeniu innych oraz dobrze rozumianym ryzyku. Kilka argumentów do tej pory: * Hasła w VCS są ujawnione (rozwiązanie: pozbądź się haseł - nie powinno ich tam być na początku) * Kod jest otwarty na ataki typu whitebox (kontr-argument: to tylko zapobiega uczciwi/leniwi napastnicy) * Personel pomocy technicznej może zapytać programistów „jak” to działa (licznik: naucz człowieka łowić ryby itp.) Czy ktoś udostępnia swój kod personelowi organizacji? Czy spowodowało to jakieś problemy?


title: Wskazówki dotyczące Web XML Api

text: Muszę stworzyć API dla naszej aplikacji, które jest dostępne przez HTTP. Wyobrażam sobie odpowiedzi API jako proste dokumenty XML. Nie będzie to REST API (nie w ścisłym znaczeniu REST). Jestem całkiem nowy w tej przestrzeni - oczywiście musiałem korzystać z niektórych Web API w mojej pracy, ale często są one już opakowane w natywne biblioteki językowe (np. TweetSharp). Szukam informacji, które pomogą w projektowaniu API. Czy są jakieś artykuły, posty na blogu itp., które przeglądają i wyjaśniają wybory projektowe, które należy wprowadzić w internetowym interfejsie API? Wybory projektowe to takie rzeczy, jak uwierzytelnianie, struktura adresu URL, kiedy użytkownicy przesyłają adres URL, który POST, aby określić wykonywaną akcję, czy też wszystkie żądania powinny być kierowane do wspólnego adresu URL, a jakaś część danych POST jest odpowiedzialna za routing do polecenie, czy wszystkie odpowiedzi mają ten sam katalog główny, czy błędy powinny mieć inny katalog główny itd. itd. Najlepiej byłoby, gdyby takie artykuły lub posty na blogu zawierały listę typowych odmian dla dowolnego punktu projektu i wyjaśniały zalety i wady , w taki sposób, że informują mnie o podjęciu własnej decyzji (w przeciwieństwie do artykułów, które po prostu wyjaśniają jeden sposób, aby coś zrobić). Czy ktoś ma jakieś powiązania lub mądrość, którymi mógłby się podzielić?


title: Czy to normalne, że menedżer/deweloper czuje się technicznie gorszy niż architekt lub starsi programiści?

text: W moich oczach jestem przeciętnym programistą, ale dobrym programistą. W zeszłym roku czułem, że moja wiedza techniczna na temat projektowania naszych produktów jest kwestionowana przez naszych starszych programistów/architektów, czy to normalne? czy powinienem bardziej skupić się na technicznych szczegółach i designie? Pracowałem z tym samym zespołem i prawie tym samym projektem przez ostatnie 7 lat, w ostatnich 4 zostałem kierownikiem/scrummasterem. Spędzam 30% czasu na zarządzaniu zadaniami projektowymi i jakością, resztę poświęcam na naprawianie błędów, zwykle zadania projektowe pozostawiam naszemu architektowi. Czy powinienem bardziej skupić się na projektowaniu produktu? czuję, że zyskałbym więcej szacunku, gdybym miał wiedzę architektów, jednak wątpię, czy jest to w ogóle osiągalne na dłuższą metę. Czy jest to ogólny problem dla deweloperów ze wszystkimi architektami? A czy starsi programiści powinni być wybitnymi programistami?


title: Czy łączenie ciągów pojedynczo jest nieefektywne?

text: Przypominam sobie z czasów programowania w C, że gdy dwa ciągi są połączone, system operacyjny musi przydzielić pamięć dla połączonego ciągu, a następnie program może skopiować cały tekst ciągu do nowego obszaru w pamięci, a następnie stara pamięć musi być ręcznie być uwolnionym. Więc jeśli robi się to wielokrotnie, tak jak w przypadku dołączania do listy, system operacyjny musi stale przydzielać coraz więcej pamięci, tylko po to, aby została zwolniona po następnej konkatenacji. O wiele lepszym sposobem na zrobienie tego w C byłoby określenie całkowitego rozmiaru połączonych ciągów i przydzielenie niezbędnej pamięci dla całej połączonej listy ciągów. Teraz w nowoczesnych językach programowania (na przykład C#) często widzę, jak zawartość kolekcji jest łączona ze sobą poprzez iterację kolekcji i dodawanie wszystkich ciągów, jeden po drugim, do pojedynczego odwołania do ciągu. Czy to nie jest nieefektywne, nawet przy nowoczesnej mocy obliczeniowej?


title: Konstruktywne sposoby odpowiedzi „Jaki był twój największy projekt? i dlaczego?”

text: To pytanie zadano mi wielokrotnie w wywiadach. > Jaki był Twój najtrudniejszy projekt – i dlaczego? Nie rozumiem, który projekt im powiedzieć i dlaczego jakiś projekt wygląda na trudny lub nie wymagający. Czego szukają w odpowiedzi? Każde oprogramowanie jest wyzwaniem, zanim zostanie uruchomione, a po jego zakończeniu staje się normalnym zadaniem inżynierii oprogramowania. Wszystkie programy, które stworzyłem, były trudne, dopóki nie zostały ukończone. Czy źle zrozumiałem słowo „wyzwanie”? Co jest nie tak w moim myśleniu? Jaki jest właściwy i konstruktywny sposób podejścia do tego pytania?


title: Jeden język do nauki tworzenia aplikacji na komputery i telefony komórkowe?

text: Czy istnieje język, który jest w stanie tworzyć aplikacje dla różnych platform systemów operacyjnych (win, * nix) i aplikacji mobilnych (IOS, Android)? .Pyton ? Rubinowy ?


title: Do czego służy klasa Object Services?

text: Czytam książkę na temat TDD: (przy okazji, to pytanie nie ma nic wspólnego z TDD) link do książki na amazon Autor często wspomina/używa klas usług Na przykład mielibyśmy obiekt Person Object Osoba miałaby: \- a " zwykła" do zdefiniowania encji **Person** \- klasa dostępu do danych (powiedzmy, że mamy bazę danych do utrwalania danych) używającą na przykład wzorca repozytorium **PersonRepository** \- klasa "usługi" (PersonServices) **PersonServices** jak sam autor wyjaśnia: > Klasa PersonService służy jako klasa domeny biznesowej, która współpracuje z obiektami > Person z punktu widzenia wymuszania reguł biznesowych i używania > Person w biznesowych przepływach pracy. Moje pytanie brzmi, czy to jest sposób na zajęcia z zajęć? Dawniej wszystko z klasy **Person** i **PersonServices** umieściłbym w jednej klasie. Jakiego rodzaju funkcje zostaną uwzględnione w klasach **Usługi** dla moich obiektów? Nie jestem pewien, czy rozumiem powyższy cytat (może nie rozumiem sensu?)


title: Projektowanie domeny klasy aktywnej lub pasywnej

text: Przepraszam, jeśli mój (uproszczony) przykład jest zbyt szeroki. Mając taki model (zapisany w C#): class Ball { } Załóżmy, że piłka może zostać wystrzelona. Aby zaimplementować tę funkcję, mogę zdefiniować coś takiego: class Ball { void Launch(); } lub coś takiego: class BallLauncher { void Launch(Ball ball); } W jakich sytuacjach lepiej zastosować pierwsze podejście, a jakie drugie? W rzeczywistości ten przykład próbuje uprościć rzeczywisty rzeczywisty model bazowy. W tym modelu muszę wgrać pliki (`Pakiet`) do repozytorium. Wtedy nie wiem, czy repozytorium powinno wgrać (fizyczną kopię) pakiet (pliki) do siebie, czy to pakiet powinien wgrać się do repozytorium.


title: Agile - Samo uczenie się i ćwiczenie Agile

text: Uczę się nowych technologii i wykonuję małe projekty, aby samemu ćwiczyć te technologie. I chcę nauczyć się metodyki Agile po drodze, ale nie wiem, czy to dobry czy zły pomysł, aby uczyć się jej w pojedynkę i jak daleko mogę się z tym posunąć. Inna sprawa, jakie dobre zasoby do nauki (książki/artykuły)?


title: Jaka jest najlepsza ścieżka dla absolwenta CS, który chce skończyć na kreatywnym rozwoju podobnym do badań?

text: ## Tło: To pytanie przyszło mi do głowy po tym, jak nieświadomie doszedłem do wniosku, że chciałem zająć się tworzeniem gier, ponieważ jest to jedyne miejsce, w którym mogę tworzyć kreatywne rozwiązania bez przeszkód ze strony klientów, którzy chcą coś poprawić lub bezpieczeństwa muszą być ekstremalnym lub terminami odsuwającymi badania. Nie mówię o wszystkich przypadkach, mówię o „w końcu”, gdzie znalazłem swoją „ostateczną” pracę. Tworzenie gier, o których tutaj mówię, to indie development, w którym ważny jest oryginalny, intuicyjny design. O ile mi wiadomo, ta forma tworzenia gier jest jedynym sposobem, w jaki osoba mająca tylko licencjata może rozwijać poziom badawczy [AI, oryginalny interfejs użytkownika (jak komendy głosowe / NLP), zaawansowany rozwój graficzny]. Z doktoratem rozumiem, że mógłbym przeprowadzić jakiekolwiek badania, ale nadal nie jestem pewien, czy jest to ścieżka, którą chcę obrać. ## Pytanie: Jaki rodzaj pracy lub branży może pozwolić osobie posiadającej jedynie stopień licencjata na prowadzenie praktycznie nieskrępowanych kreatywnych badań i rozwoju? To jest subiektywne, więc szukam głównie opinii i kont RL.


title: Systemy samodebugujące

text: Na przykład w przypadku GDB możliwe jest samodzielne debugowanie. Nie udało mi się znaleźć żadnej JVM, która mogłaby sama się debugować lub nawet umożliwiała debugowanie na poziomie źródłowym. Zastanawiałem się tylko, czy ktoś może zasugerować, w jaki sposób systemy są samodebugowalne. Jeśli masz referencje, wklej je tutaj. Chciałem przeczytać o tym szczegółowo.


title: Gdzie umieścić funkcje administracyjne

text: W tej chwili nasze funkcje administracyjne znajdują się pod adresem www.mojawitryna.com/admin. Jest zablokowany przez UN/PW, ale nadal wydaje się, że jest to niepewne miejsce. Czy jest lepsze miejsce, żeby to umieścić? Może w innej domenie?


title: Aprobata uznana za szkodliwą?

text: Właśnie kompilowałem trochę własnego kodu z flagą `-std=c++0x` w GCC, ponieważ chcę niejasno nadążyć za tym, co robią wszyscy młodzi ludzie (pod warunkiem, że pozostaną na moim trawniku), i skończyło się na mnóstwie ostrzeżeń o przestarzałości `auto_ptr`. Oczywiście wiedziałem, że „auto_ptr” jest przestarzałe w C++0x, ale… Czy deprecjacja nie jest stratą czasu i wysiłku? Powody, dla których nie jest to przestarzałe (na przykładzie auto_ptr): * istnieje ocean kodu, który wciąż wymaga wsparcia, generowanie milionów ostrzeżeń będzie tylko kusić ludzi do wyłączenia ostrzeżeń. * `auto_ptr` jest trochę tandetny, ale faktycznie robi to, co mówi na puszce. * jeśli naprawdę chcemy coś zdeprecjonować, wyznaczam `printf()`. Ale wyobraź sobie piski, które by wynikły. `auto_ptr` nie ma zbyt wielu przyjaciół, ale przynajmniej w moim kodzie C++ jest używany częściej niż `printf`, który w ogóle nie jest używany. * komitet ma kiepskie wyniki, jeśli chodzi o prawidłowe wykonanie tego zadania - wycofali statyczne w zakresie przestrzeni nazw, a teraz wydaje się, że nie został on zalecany - nie zdziwiłbym się, gdyby `auto_ptr` dokonał podobnego powrotu * na koniec, niezależnie od tego, co komitet powiedzmy, realizatorzy kompilatora ignorują je - po prostu nie mogą ryzykować złamania kodu klienta, jedyne, co mogą zrobić, to wydawać irytujące ostrzeżenia. Więc moje pytanie - czy uważasz, że deprecjacja (czegokolwiek, nie tylko auto_ptrs i nie tylko w C++) jest dobrym pomysłem, a jeśli tak, to dlaczego?


title: Co definiuje architekta oprogramowania?

text: W którym momencie programista przestaje być po prostu programistą i zamienia się w architekta oprogramowania. Innymi słowy, jaki jest minimalny opis stanowiska architekta oprogramowania?


title: Jaki jest związek między architektem oprogramowania a członkiem zespołu?

text: Pracuję dla małej firmy, która zatrudnia mniej niż 100 osób. Kilka miesięcy temu firma ta zaproponowała mi stanowisko SA i przyjąłem. W tej firmie są trzy zespoły, a ja pracuję dla jednego z nich. Po raz pierwszy pracuję jako SA. W ciągu ostatnich miesięcy stwierdziłem, że nie mam uprawnień do zarządzania, nie mogę nawet pozwolić członkowi zespołu robić rzeczy (związanych z kodowaniem) w sposób poprawny i bardziej wydajny. Członkowie zespołu kłócą się ze mną w bardzo podstawowych kwestiach technicznych i muszę im raz po raz wyjaśniać. Chociaż niektórzy członkowie posłuchali mojej rady, inni uparcie programują na swój sposób, co często okazywało się w końcu błędne. Ostatnio czuję się trochę zmęczona i zdezorientowana. Zastanawiam się, jaka jest prawidłowa relacja między Architektem Oprogramowania a członkami zespołu, w tym liderem zespołu? Poza tym, czy architekt oprogramowania jest również kierowany przez Team Leadera?


title: Czy były jakieś formalne prace porównujące łatwość utrzymania na poziomie języka programowania?

text: Czy jest jakaś formalna praca próbująca zmierzyć łatwość utrzymania złożonych programów, porównując na poziomie języka programowania? Czy istnieją formalne środki ułatwiające utrzymanie na dowolnym poziomie? Szukam metody uzyskania formalnych pomiarów łatwości konserwacji (lub jakiejkolwiek związanej z nią pracy) dla projektu zwierzaka.


title: Jaka jest nazwa λx.λf.fx (jak zastosowanie odwrotne) w rachunku lambda? Czy odpowiednia funkcja ma w programowaniu nazwę standardową?

text: Jak nazywa się λx.λf.fx w rachunku lambda? Czy odpowiednia funkcja ma standardową nazwę w funkcjonalnych językach programowania, takich jak Haskell? Czy w programowaniu obiektowym istnieje zwykła nazwa metody `foo`, która przyjmuje funkcję jako argument, tak że `x.foo(f)` zwraca `f(x)`?


title: Wymagania prawne dla twórców oprogramowania

text: Ponieważ strona prawna Stack Exchange nie jest jeszcze gotowa, pomyślałem, że będzie to najlepsze miejsce, aby zadać to pytanie. Jakie są wymagania prawne (lub zasoby internetowe umożliwiające znalezienie tych informacji), których muszę przestrzegać, jeśli chcę sprzedawać aplikację, która działa jako menedżer konta osobistego/informacji, która: 1. Przechowuje (opcjonalnie, ale najlepiej ) informacje umożliwiające identyfikację osoby oraz; 2. Przechowuje (opcjonalnie) informacje o koncie bankowym, takie jak saldo istniejące i bieżące oraz historia transakcji wprowadzone przez użytkownika. Jeśli chodzi o szyfrowanie, czy istnieje prawny standard szyfrowania, którego my jako programiści musimy używać do zabezpieczania tego typu informacji?


title: Co to jest upcasting/downcasting?

text: Kiedy uczysz się o polimorfizmie, często widzisz coś takiego jak ta klasa Base { int prv_member; virtual void fn(){} } class Pochodne : Base { int more_data; virtual void fn(){} } Co to jest upcasting lub downcasting? Czy `(Pochodne*)base_ptr;` jest odbitym czy odrzuconym? Nazywam to upustem, ponieważ odchodzisz od bazy w coś bardziej konkretnego. Inni ludzie powiedzieli mi, że jest to przygnębienie, ponieważ schodzisz w dół hierarchii do czegoś konkretnego, a szczyt jest korzeniem. Ale inni ludzie wydają się nazywać to tak, jak ja to nazywam. Czy konwertowanie podstawowego ptr na pochodny ptr nazywa się upcastingiem czy downcastingiem? a jeśli ktoś może zamieścić link do oficjalnego źródła lub wyjaśnić, dlaczego tak się nazywa, to świetnie.


title: Jak radzisz sobie z wciąż rosnącymi stosami problemów, które trzeba rozwiązać „kiedyś”?

text: Używamy JIRA do śledzenia problemów w naszych projektach oprogramowania. Jednym z efektów, które zauważyliśmy, jest to, że często tworzymy nowy problem, ale nie wiemy jeszcze, kiedy/czy problem zostanie w ogóle naprawiony. Wymyśliliśmy więc fałszywy kamień milowy „Odległej przyszłości”, do którego przypisujemy takie kwestie. Tak się składa, że stos spraw przypisanych do tego kamienia milowego cały czas rośnie, więc wydaje się, że nie jest to dobre podejście. Jest ich już tak wiele, że przejrzenie ich wszystkich pod kątem prawdziwości wymagało sporo pracy. Niektóre z nich straciły ważność, ponieważ komponent, z którym są powiązane, został usunięty. Niektóre z nich zostały powielone przez inne wydania. Niektóre z nich mają tak źle sformułowany opis, że nikt już tak naprawdę nie wie, o co im chodzi. Jak inne zespoły programistyczne radzą sobie z problemami, które są ważne, ale które mogą nie zostać naprawione w dowolnym momencie. Czy w ogóle zawracasz sobie głowę ich nagrywaniem? Czy przypisujesz je do następnej planowanej wersji, a potem przyglądasz się im ponownie, gdy zbliża się kolejna wersja? Coś innego?


title: async & await - ankieta na alternatywy

text: Teraz, gdy wiemy, co czeka na c#5, najwyraźniej wciąż mamy możliwość wpłynięcia na wybór dwóch nowych słów kluczowych dla „Asynchronii”, które zostały ogłoszone wczoraj przez Andersa Heijsberga na PDC10. async void ArchiveDocuments(List<Url> adresy URL) { Archiwum zadań = null; for(int i = 0; i < urls.Count; ++i) { var document = await FetchAsync(urls[i]); if (archive != null) czekaj na archiwum; archiwum = ArchiveAsync(dokument); } } Eric Lippert wyjaśnia wybór dwóch obecnych słów kluczowych oraz sposób, w jaki zostały one źle zrozumiane w badaniach użyteczności. Komentarze zawierają kilka innych propozycji. _Proszę - jedna sugestia na odpowiedź, duplikaty zostaną zniszczone._


title: Czy 37Signals Basecamp to hype?

text: Co jest w nim takiego wyjątkowego? Słyszałem o nim wspaniałe rzeczy, korzystałem z niego i odkryłem, że poza integracją Aplikacji Google nie ma w tym nic szczególnego. Może po prostu tego nie rozumiem? Jaki jest więc powód, dla którego korzystasz z basecamp?


title: Jaka jest dobra biblioteka javascript do rysowania kształtów i połączeń

text: Jaka jest dobra biblioteka javascript (do użytku z Ruby on Rails) do rysowania kształtów i połączeń dynamicznych (linie łączące kształty, które dostosowują się podczas przesuwania kształtów)?


title: Jakie są zabawne (i bardzo łatwe) programy w języku C++ do napisania dla 10-letniego dziecka?

text: Może trochę za młodo uczyć się C++, ale zostałem zatrudniony jako korepetytor dziesięciolatka iz radością się zobowiązuję! Mam problemy z wymyśleniem zabawnych, ale łatwych programów do pracy. Idealnie szukam czegoś, co można zrobić z podstawowym zrozumieniem instrukcji if, pętli while, zmiennych, wektorów, danych wejściowych i wyjściowych. Wpadłem na pomysł napisania programu w stylu „Mad Libs”, w którym prosi on użytkownika o wprowadzenie danych (przymiotniki, rzeczowniki itp.), a następnie wyświetla historię z wypełnionymi danymi wejściowymi. Jednak nie wydawał się zbyt zainteresowany w tym pomyśle, ponieważ nie lubi "Mad Libs". Wydaje mi się, że może być szczególnie zainteresowany napisaniem programu, który ma widoczny wpływ na jego komputer. Na przykład, uwielbia wymyślać naciśnięcia klawiszy, aby robić takie rzeczy, jak odwracanie kolorów komputera itp. Jakieś pomysły na zabawny/łatwy program w C++ dla 10-latka?


title: Jaka jest Twoja aplikacja, kiedy zaczynasz uczyć się nowego języka?

text: Jaką „aplikację” piszesz, aby zrozumieć język programowania? Użyłem kalkulatora (zwykły + rozwiązywanie równań). Ale myślę, że to zbyt łatwe. Planuję nauczyć się Haskella i byłam ciekawa, jaka jest Twoja "przejdź do aplikacji", gdy zaczynasz uczyć się nowego języka programowania? Jeden z moich znajomych używa parsera XML jako swojej aplikacji. Jakieś inne sugestie, które będą obejmować kompleksowe wykorzystanie struktur danych i innych ważnych konstrukcji?


title: Optymalny rozmiar bufora dla fread/fwrite

text: Jaki rozmiar bufora powinienem wybrać do odczytu/zapisu plików za pomocą funkcji POSIX fread/fwrite?


title: Jak zaprojektować system, który pozwoli na wielokrotne, równoległe rozszerzenia tego samego „komponentu”?

text: Jako gracz znalazłem następujące problemy związane z tworzeniem i używaniem "rozszerzeń" (czyli modów) do gier: > 1) Za każdym razem, gdy gra jest aktualizowana, wszystkie mody się psują. > > 2) Większość modów nie współpracuje ze sobą, więc gracz „musi wybrać” > > 3) Jeśli kiedykolwiek odinstalujesz modyfikację, Twoje „zapisane gry” prawie zawsze stają się > bezużyteczne. Chcę zaprojektować grę w Scali/Java, która NIE wykazuje tych problemów. Potrzebuję pomocy w punkcie 2. Chcę to napisać tak, aby był maksymalnie rozciągliwy. Mój problem polega na tym, że nie mogę poprawnie określić, jak powinienem to zrobić, a ponieważ cały projekt opiera się na architekturze komponentów/usług/wtyczek, nie mogę iść naprzód, dopóki nie rozwiążę tego problemu. Cechy projektowe, które chcę osiągnąć, to: > 1) W przypadku każdej „usługi” powinien istnieć jeden obiekt (w dowolnym momencie) >, który ją realizuje. Ponieważ jest to symulacja oparta na cyklach, mogę bezpiecznie „zamienić > implementację” między cyklami. > > 2) „Osoba trzecia” powinna mieć możliwość utworzenia „pakietu”, który > modyfikuje lub, co bardziej prawdopodobne, rozszerza funkcjonalność „usługi”, oraz > „powiązuje” ją z istniejącą aplikacją w czasie wykonywania, _bez rekompilacja_. > > 3) Powinno być możliwe ładowanie i rozładowywanie tych pakietów w czasie pracy, > ponieważ będą one używane na długo działającym serwerze. > > 4) Tworzenie rozszerzeń powinno być łatwe, nawet dla "młodszego" programisty, bez konieczności posiadania rozległej wiedzy na temat skomplikowanych frameworków. > > 5) Powinno być możliwe, aby _kilka_ pakietów mogło jednocześnie rozszerzać/modyfikować tę samą > usługę, o ile przestrzegają one określonego zestawu reguł > zapobiegających większości konfliktów. Początkowo planowałem użyć OSGi, ale naprawdę nie wiem, jak to zadziałać. Rozwiązanie OSGi polega na tym, aby wiele pakietów rejestrowało tę samą usługę i korzystało z "filtra" w celu wybrania jednego w kodzie klienta. Uświadomienie kodowi, że w danym momencie może istnieć kilka obiektów, które implementują różne odmiany tej samej usługi, i że te instancje mogą pojawiać się i znikać, sprawiłoby, że wszystko byłoby zbyt skomplikowane i kruche. Moim planem było zarejestrowanie każdej usługi jako ogólnego "uchwytu", którego użytkownik usługi może użyć do uzyskania rzeczywistej instancji i rzutowania na to, czego chce. Treść uchwytu może zmieniać się w czasie, ale sam obiekt uchwytu byłby ważny przez czas trwania programu, pomijając w ten sposób ciągłe zapytania rejestru z powiązanym filtrowaniem. Myślę, że OSGi może rozwiązać 2 do 5, ale tylko przy użyciu wielu instancji tej samej usługi, co jest sprzeczne z 1. Myślę, że 1 można osiągnąć albo za pomocą kompozycji, albo przez połączenie wszystkich różnych implementacji usługi w pojedynczy obiekt poprzez manipulację kodem bajtowym. Spojrzenie na Javaassist pokazało mi, że „przemianowanie” klasy nie wydaje się zbyt trudne, jeśli wszystkie one rozszerzają tę samą klasę bazową i przyjmują te same parametry konstruktora. Z drugiej strony kompozycja wydaje się wkładać znacznie więcej pracy w ręce zewnętrznych twórców rozszerzeń, co jest sprzeczne z 4 i ogólnie jest w najlepszym razie niezgrabnym rozwiązaniem. Jeśli zaimplementuję strategię manipulacji kodem bajtowym, to muszę zrobić prawie wszystko sam i stracić większość korzyści płynących z OSGi. Ponadto nie mogę naprawdę utworzyć połączonej usługi, dopóki _wszystkie pakiety_ nie zostaną aktywowane, więc nie mogą zarejestrować „prawdziwej” instancji usługi w czasie aktywacji, o co chodzi w OSGi (?). Czy w ogóle wiem od OSGi, kiedy jest „zakończone”? Czy jedynym sposobem na osiągnięcie tych projektów jest stworzenie własnego frameworka komponentów, czy nadal mogę to zrobić za pomocą OSGi lub innego systemu? Ponowne wymyślanie koła na tym poziomie brzmi jak głupi (i czasochłonny) pomysł, ale nie widzę, jak rozwiązać te problemy za pomocą OSGi. Może inny framework usług/wtyczek może to zrobić? A może stosując konkretną, dobrze określoną strategię projektową? AKTUALIZACJA: Będzie to model klient-serwer internetowy (klaster) działający na OpenGL. Jestem w większości "nieobciążony frameworkiem", to znaczy mogę wybrać to, co odpowiada moim potrzebom, ale chcę trzymać się JVM. OSGi to próba standaryzacji "komponentów" (zwanych pakietami) dla JVM.


title: dwa sposoby robienia tego samego, co jest preferowane?

text: Mam trochę „kontekstu”, więc mogę to zrobić: z `context.getError(Object): ErrorHolder` `holder.addError(error)` LUB `context.setError(Object, error)` `setError` prawdopodobnie będzie miał taką implementację: `context.getError(Object).addError(error)` jakie podejście powinienem wybrać i dlaczego?


title: Jaka jest różnica między sztuczną inteligencją (AI) a inteligencją roju?

text: Rozumiem, że kiedy próbujemy wdrożyć inteligencję roju, w zasadzie ma ona wiele niezależnych jednostek komunikujących się ze sobą. Nie jestem pewien, czy inteligencja roju jest rozszerzeniem sztucznej inteligencji, czy też jest dyscypliną samą w sobie.


title: Dzielenie bazy danych między MySQL i NoSQL

text: Mój to typowa strona internetowa stworzona ze stosu LAMP. Ze względu na problemy ze skalowalnością planujemy włączenie NoSQL do aplikacji. W celu wdrożenia planujemy wdrożenie rozwiązania hybrydowego: użycie NoSQL tylko dla kilku tabel w bazie danych o dużej objętości i dalsze używanie MySQL dla wszystkich pozostałych. Tak więc dzielimy bazę danych na dwie części na dwa różne serwery, które wykorzystują inną technologię baz danych. Rozważamy plusy i minusy takiego podejścia. Na przykład przy takim podejściu będziemy musieli polegać na aplikacji internetowej, aby zachować integralność danych. Będą 2 punkty awarii z powodu 2 serwerów DB zamiast jednego. Czy to zwykła praktyka? Jakie są plusy i minusy?


title: Czy mogę zbudować wtyczkę z zamkniętym źródłem dla biblioteki LGPL?

text: Jeśli połączę program dynamicznie z biblioteką LGPL (tutaj GTK+/GLib), mogę rozpowszechniać program na własnych warunkach (bez copyleft). Teraz biblioteka LGPL udostępnia ładowalne moduły. Umieść współdzieloną bibliotekę (.so, .dll, .dylib) w określonym katalogu, a będzie próbowała ją załadować, używając dobrze zdefiniowanego interfejsu. **Czy mogę rozpowszechniać moduł wtyczki (dynamicznie ładowany przez bibliotekę LGPL) jako zamknięte źródło, zgodnie z warunkami LGPL?** Uważam, aby nie używać kodu z biblioteki LGPL w moim wtyczki i zawierać tylko takie nagłówki, które byłyby dozwolone przez licencję i których równie dobrze mógłbym użyć w programie o zamkniętym kodzie źródłowym ("3. Object Code Incorporating Material from Library Header Files."). * * * Zastrzeżenie: doskonale zdaję sobie sprawę, że nie powinieneś zasięgać porad prawnych od nieznajomych w Internecie. Pytam o to głównie dlatego, że jestem ciekawa. Na tym etapie nie napisano żadnego kodu i nie podjęto żadnych zobowiązań biznesowych. Zanim zrobię cokolwiek prawdziwego, prawdopodobnie powinienem zapytać prawnika (ale są dość drogie jak na zaspokojenie twojej ciekawości!). Mam jednak pewność, że mogę uzyskać dobrą odpowiedź - może ktoś zrobił dokładnie to samo i może opowiedzieć o swoich doświadczeniach. Może jest definitywna odpowiedź z pyska konia (FSF), którą przeoczyłem. Piszę to oświadczenie, żebyś nie musiał tego robić, więc proszę nie każ mi pytać mojego działu prawnego (którego nie mam jako osoba fizyczna). A jeśli to raczej należy do Programmers.SE, możesz się przenieść. Opublikowałem to tutaj, ponieważ mogą istnieć pewne kwestie techniczne (łączenia), które są ważne.


title: Testy obciążenia programu Visual Studio Symulacja użytkowników wirtualnych

text: Obecnie pracuję nad pisaniem aplikacji do testowania obciążenia, która korzysta z testu obciążenia przy użyciu programu Visual Studio 2010. Test obciążenia będzie symulować 20 użytkowników na tej samej maszynie i potrzebuję danych do współużytkowania w pamięci między wszystkimi symulowanymi użytkownikami. Byłem zaskoczony, że nie mogłem znaleźć dokumentacji odpowiadającej na następujące pytanie: Co oddziela kontekst działania każdego wirtualnego użytkownika od drugiego? Czy każdy użytkownik wirtualny przeprowadza testy we własnym procesie? Może we własnej domenie aplikacji? A może po prostu na własnym wątku? Muszę to wiedzieć, ponieważ jeśli każdy użytkownik przeprowadza testy we własnym procesie, cała pamięć podręczna w pamięci nie jest współdzielona i jest tworzona dla każdego użytkownika, a nie jednorazowo dla wszystkich, co jest dla mnie złe.


title: Angielski termin oznaczający „test użytkownika naiwnego” lub „test idioty”

text: W testach użyteczności często wybiera się grupę użytkowników, którzy nigdy wcześniej nie korzystali z oprogramowania. Słyszałem, jak ten proces jest opisywany przez programistów jako „test idiotów”, a czasem „test użytkownika naiwnego” lub „test użytkownika ignorantów”. Niestety wszystkie te terminy mają obraźliwe konotacje w języku angielskim. Czy istnieje termin opisujący ten rodzaj testu użyteczności, który nie obraża?


title: Strategia zarządzania wydaniami SOA

text: Obecnie zostałem poproszony o zaproponowanie zautomatyzowanego rozwiązania do zarządzania wydaniami dla dużego projektu Oracle SOA. Cały kod jest przechowywany w repozytorium SVN i byłoby miło, gdybym mógł zasugerować coś, co zbuduje, wdroży, uruchomi przypadki testowe i wygeneruje raporty dla wszystkich projektów na trunku. Wiem, że mógłbym to zrobić, tworząc skrypty mrówkowe lub maven, ale chciałbym wiedzieć, czy istnieje alternatywa open source, która obsługuje wszystkie te złożone rzeczy, bez potrzeby tak dużego kodowania.


title: Jak skutecznie konkurować z projektem open source?

text: Firma z solidnym projektem open source, konkurująca z tradycyjnym produktem o zamkniętym kodzie źródłowym, wydaje się nie do pokonania. Przeczytałem ten artykuł, w którym autor przedstawia następujący scenariusz: > Załóżmy, że można podzielić rynek oprogramowania — powiedzmy zarządzanie siecią — między > dwa produkty. Jeden zrobił wszystko, co było możliwe i kosztował milion dolarów, a drugi tylko 10% tyle, ale był darmowy i otwarty. > > Cena komercyjnego rozwiązania automatycznie odfiltrowałaby dużą liczbę > użytkowników, a ci ludzie musieliby zwrócić się do open source. > Ale niektórzy użytkownicy byliby zadowoleni z 10% funkcjonalności i wybraliby ją > wprost. >> Na przykład mam na biurku oryginalny komputer Macintosh. Działa na > edytorze tekstu o nazwie MacWrite. Robi wszystko, z wyjątkiem > sprawdzania pisowni, do czego potrzebuję edytora tekstu. Mogę formatować akapity, > wybierać czcionki, pogrubiać lub kursywę, a nawet wklejać obrazy i > wykresy. Wszystko w interfejsie użytkownika „otrzymujesz to, co widzisz”. >> Zajmuje 76K miejsca na dysku. To jest „K”, jak w „kilobajtach”. >> Porównaj to z Microsoft Word. Myślę, że ostatnim razem, gdy zainstalowałem tylko Worda > było to około 30 MB, wielokrotnie większe niż MacWrite, ale nie używam go do > znacznie więcej niż używam MacWrite. Podobnie jak ja, wielu użytkowników jest zadowolonych z podstawowej > funkcjonalności. Nie potrzebują wszystkich dzwonków i gwizdków. >> Wróćmy jednak do mojej analogii. Na początku firma handlowa prawdopodobnie > zignorowałaby projekt open source. Nie stanowi zagrożenia dla ich strumienia przychodów, więc dlaczego mieliby zwracać uwagę na nowicjusza? > > Jeśli jednak ten projekt jest zdrowy i zrównoważony, być może za mniej więcej rok > zrobi 15%-20% tego, co robi produkt komercyjny. Powinno to upuścić kilku > więcej użytkowników z ich firmy i być może teraz zaczną zwracać na to uwagę. >> Najprawdopodobniej uwaga ta przybrałaby formę marketingu przeciwko projektowi. Twierdzą, że jest zbyt mały lub zbyt słaby, by traktować go > poważnie. I na krótką metę to prawdopodobnie zadziała. Ale sam fakt > przyznania się do projektu wzbudzi zainteresowanie. Niektórzy ludzie > sami stwierdzą, że nie jest ani za mały, ani zbyt słaby > i zaczną go używać. >> Mija kolejny rok lub dwa i teraz projekt jest do 50% funkcjonalności komercyjnego produktu. Ludzie zaczynają dołączać do projektu > masowo. Spółka handlowa musi teraz coś zrobić. Co oni robią? > Dodają więcej funkcji. >> Pamiętaj, że produkt komercyjny już zrobił 100% tego, czego ludzie potrzebowali. Więc > jakie funkcje mogliby dodać? Niepotrzebne. Mogą zmienić > wygląd interfejsu użytkownika lub dodać funkcje poza siecią > zarządzanie. W każdym razie ten rozwój będzie kosztował pieniądze, a to zacznie wcinać się w marże firmy. >> Wreszcie, dzięki zdrowej społeczności i napływowi nowych użytkowników, projekt open > source ostatecznie osiągnie 80%-90% tego, co robi komercyjny produkt. Po wyczerpaniu wszystkich możliwości generowania przychodów, spółka handlowa ma jeszcze jedną ostateczną opcję: przykręcić śruby do pozostałych > klientów. Znajdź sposoby, aby obciążyć ich wyższymi kosztami, aby > czerpać z inwestycji, co mogą, co ostatecznie odstraszy ich klientów. >> Naciągane? Nie sądzę. Są tylko dwa główne wymagania: > > Po pierwsze, znajdź rynek, na którym open source stanowi atrakcyjną alternatywę, > taką jak zarządzanie siecią. >> Po drugie, zbuduj zrównoważoną społeczność wokół projektu open source. Wydaje się to bardzo prawdopodobne. Gdybyś był firmą o zamkniętym kodzie źródłowym, jak byś konkurował?


title: Dlaczego powinienem znać programowanie współbieżne?

text: Programowanie współbieżne jest dla mnie dość trudne: nawet patrzenie na podstawowy slajd wydaje mi się wyzwaniem. Wydaje się to takie abstrakcyjne. Jakie są korzyści płynące z dobrej znajomości koncepcji programowania współbieżnego? Czy pomoże mi w regularnym, sekwencyjnym programowaniu? Wiem, że zrozumienie, jak działają nasze programy, przynosi satysfakcję, ale co jeszcze?


title: Obiekty jako parametry: Czy istnieje prosty sposób na wyjaśnienie tego?

text: Próbowałem zrozumieć, jak obiekty można przekazywać jako parametry, ale było to dla mnie trudne. Jak możemy przekazać obiekt jako parametr do metody innego obiektu? Muszę zrozumieć kryjącą się za tym ideę. **aktualizacja:** public class Student {} public class Admin { private ArrayList<Student> studenci; public void enrollStudent(Student newStudent) { studenci.add(nowyStudent); } }


title: Korzystanie z trackera problemów jako pojedynczy programista

text: Jeśli to jest tl;dr, przewiń w dół do „Pytania” ### Dlaczego to nie jest duplikat: Połączone pytanie dotyczy kontroli wersji (którą mam), skryptu budowania jednoetapowego (który mam) oraz „ mam w ogóle narzędzie do śledzenia problemów” (które mam, ale mam problem z optymalizacją), żadna z odpowiedzi na to pytanie nie odpowiada na żadne z moich pytań. To pytanie nie dotyczy „minimalnego podzbioru”, ale dotyczy praktycznych problemów w konkretnej sytuacji w świecie rzeczywistym. ### Tło: Jestem jedynym programistą w mojej firmie, czyli tylko 5 osób. Tylko jeden z moich współpracowników ma doświadczenie programistyczne i nie pracuje nad żadnym kodem produkcyjnym. Jest moim szefem, ale nie interesują go szczegóły w konkretnych sprawach. Moja praca jest szczerze bardziej pobocznym projektem jednego z partnerów (szefa mojego szefa), firma już zarabia na rzeczach, które nie mają ze mną nic wspólnego. Niechętnie daje mi więcej środków, dopóki nie udowodnię, że ten projekt jest opłacalny; kiedy to zrobię, planuje dać mi dużo więcej środków, ale do tego czasu taka jest moja sytuacja. ### Problem: W rezultacie trudno jest mi korzystać z mojej platformy do zarządzania projektami (obecnie Redmine). Myślę, że gdyby było więcej programistów, a nawet testerów, byłoby to świetne narzędzie komunikacji. Jednakże, ponieważ wykonuję 100% prac rozwojowych i 95% testów, wydaje mi się, że utrzymywanie spraw na bieżąco, a czasem nawet ich tworzenie, jest ogromną stratą czasu! W większości przypadków, gdy znajdę błąd, po prostu go naprawiam. Jedynym przypadkiem, w którym trafia do trackera problemów, jest sytuacja, w której nie mogę naprawić i przetestować w mniej niż pół godziny. Jako jedyny programista nie ma przeglądu kodu. Nikt, kto tu pracuje, nie jest zainteresowany korzystaniem z mojego serwera redmine; Mam szczęście, jeśli dostanę raport o błędzie przez e-mail, zwykle po prostu podchodzą do mojego biurka i mówią mi - a nawet to jest rzadkie. Próbowałem skłonić szefa do korzystania z serwera, każąc mu obserwować wiele spraw i wysyłając mu e-maila, gdy wprowadzam zmiany, ale przez ostatnie 3,5 miesiąca nawet się na nim nie zalogował. Zanim użyłem redmine, używałem Wunderlist - i szczerze mówiąc, wydawało się, że jest to znacznie lepsze dopasowanie. Był zdecydowanie gorszy z punktu widzenia funkcji, ale spełnił swoje zadanie - mogłem robić notatki o wiele szybciej. Uwaga: przez większość czasu czuję się komfortowo z moimi procedurami kontroli wersji; jest to znacznie więcej o śledzeniu problemów i komunikacji z nie-programistami. ### Pytanie: Byłbym wdzięczny za odpowiedzi na którekolwiek z tych pytań: * Jako samotny programista wolisz w pełni funkcjonalny program do śledzenia problemów, taki jak redmine, czy prostszy system organizacji osobistej, taki jak Wunderlist lub Evernote? \-- Jeśli używasz redmine lub podobnego, czy używasz większości funkcji? * Jakieś wskazówki, jak sprawić, by TWÓJ SZEF, który w przeszłości nie był zainteresowany używaniem trackera problemów, zaczął z niego korzystać? * Podczas testowania istniejącego kodu (załóżmy, że kod nie został napisany za pomocą TDD), jeśli znajdziesz błąd, w jakich sytuacjach dodajesz problem do trackera problemów? * Wszelkie inne porady, które wydają mi się istotne.


Ostatnio słyszałem, jak ktoś powiedział, że zbudował aplikację „SaaS”. Na początku myślałem, że „ten gość wie coś nowego” i pomyślałem, że SaaS to jakiś przereklamowany framework lub wzorzec projektowy, ale po przejrzeniu strony SaaS Wikipedia zdałem sobie sprawę, że ma ona podobne znaczenie do „aplikacji internetowej”. Jakie jest pochodzenie wyrażenia „SaaS”? Kiedy został użyty po raz pierwszy?


title: Czy powinieneś zaimplementować wzorzec repozytorium z frameworkiem javascript MVVM?

text: Podczas kodowania wzorca MVVM używam Dependency Injection (DI) i próbuję kodować przeciwko interfejsom. Jednym z typowych wzorców jest wzorzec Repozytorium, więc mogę zamienić dostawcę przechowywania danych. Jeśli tworzę interfejs API REST/ODATA po stronie serwera WWW do danych serwera do interfejsu użytkownika MVVM/JavaScript/HTML, czy powinienem dołączyć wzorzec repozytorium do kodu klienta JavaScript MVVM, czy po prostu pozostawić wzorzec repozytorium w interfejsie API serwera sieci Web poziom? Po prostu przychodzi mi do głowy „przypadek użycia”, który kazałby mi na tym etapie wymienić interfejs API serwera sieci Web na inny. Co robią inni? W moim przypadku wybrałem implementację AngularJS jako framework klienta HTML/JavaScript MVVM i Microsoft MVC WebAPI jako usługę logiki danych/biznesu dla Angulara.


title: Czy istnieje prosty sposób mapowania struktury katalogów na schemat MongoDB?

text: Próbuję przechowywać strukturę katalogów, w tym pliki i ich zawartość, w MongoDB. Praca jest częścią aplikacji synchronizującej i jest używana w Node/Mongoose. Teraz jestem nowy w Mongo i jest już późno - czy implementacja idiomatyczna jest tak prosta, jak się wydaje - np. coś takiego? var FileStoreSchema = new Schema({ fullPath: { type: String, index: { unique: true } }, nazwa pliku: String, [Metadane i inne przydatne pola] });


title: Traci dużo motywacji w pracy. Pomoc?

text: Przez najdłuższy czas (około 5 lat poza szkołą) byłem wystarczająco zmotywowany, aby codziennie chodzić do pracy i wykonywać rzeczywistą jakość pracy. Ostatnio tracę mnóstwo motywacji. Zaczynam zdawać sobie sprawę, że to naprawdę wpływa na moje wyniki w pracy przez ostatnie kilka miesięcy. Po prostu nie lubię już tego robić. To po prostu zbyt żmudne (zwłaszcza mój obecny projekt). Myślę, że mógłbym pracować nad łatwiejszymi projektami lub po prostu wykonywać prace konserwacyjne (takie jak naprawianie błędów lub rzeczy, które nie wymagają rozbudowanego dokumentu projektowego). Myślę, że mógłbym zrobić coś takiego zamiast tego. Naprawdę nie mam pojęcia, co powoduje moją utratę motywacji. Po prostu wydarzyło się to niedawno i teraz naprawdę mam problemy z pracą nad moim obecnym zadaniem. Pomoc? Może w końcu powinienem po prostu zrezygnować i zacząć pracować nad aplikacją na iPhone'a czy coś takiego. kupa śmiechu.


title: Dostajesz się do wielkich lig i zarządzasz czasem jako początkujący twórca gier?

text: Jestem 23-letnim początkującym twórcą gier, który dopiero rok temu dostał swoją pierwszą pracę w branży. W przeciwieństwie do większości znanych mi programistów, zacząłem programować dość późno, na drugim roku studiów, i dopiero kilka miesięcy temu nie pracowałem nad własnymi projektami. Czuję, że radzę sobie całkiem nieźle i szybko coś podnoszę, ale najbardziej przeraża mnie to, jak wiele „cudownych” jest w branży. Jeśli przeczytasz biografie dowolnego zestawu losowo wybranych niezależnych programistów, prawie na pewno odkryjesz, że zaczęli programować w wieku 8 lat, że stworzyli 20 gier przed rozpoczęciem swojego ostatniego udanego przedsięwzięcia, że spotkali się z grupą znajomych do założenia firmy prosto po studiach, że poza programowaniem zajmują się muzyką i sztuką itp. Szczególnie teraz, gdy nie mam już wolnego czasu wynikającego z braku obowiązków, zaczynam się bać, że kończy mi się czas. Więc moje pytanie brzmi: jak ważne, naprawdę, jest ta różnica czasu? Czy faktycznie potrzeba 10 lat, aby „dogonić” programistę, który programuje od dziecka, czy ta różnica ma mniejsze znaczenie, gdy programujesz zawodowo? I bardziej ogólnie, jeśli jesteś mniej doświadczony niż twoi rówieśnicy, jak u licha żonglujesz poszerzaniem swojej wiedzy technicznej, nawiązywaniem kontaktów z innymi programistami, pracą nad projektami pobocznymi, planowaniem biznesu, utrzymywaniem życia towarzyskiego i utrzymaniem pracy podczas jednocześnie nie umierasz z wycieńczenia? Przepraszamy, jeśli to nie jest dobre pytanie — usunę, jeśli zobaczę głosy przeciw.


title: Uczyć programowania poprzez rozwiązywanie zagadek?

text: Zamierzam nauczyć podstaw programowania grupę małych dzieci (ok. 10 lat) i zastanawiałam się, czy proszenie ich o rozwiązywanie zagadek lub proste gry z programowaniem może być mądrym pomysłem? Na przykład prosząc ich, aby zapisali przebieg procesu gry w kółko i krzyżyk. (1. Czy mogę ustawić linię? Następnie umieść tam znacznik 2. Czy wróg może ustawić linię? Następnie umieść znacznik na tej linii. 3. W przeciwnym razie po prostu umieść znacznik w dowolnym miejscu.) Czy coś w tym stylu? Jeśli tak, czy istnieją jakieś konkretne łamigłówki lub proste gry, które bardziej pasują do prostych algorytmów? A może powinienem zrobić to w tradycyjny sposób, wyjaśniając zmienne, warunki warunkowe itp. za pomocą przykładów i programu konsolowego?


title: Zarys dokumentacji technicznej oprogramowania

text: Powiedzmy, że mam projekt oprogramowania, dla którego dokumentacja techniczna powinna zawierać * Dokument licencyjny * Lista używanej terminologii * Wprowadzenie o tym, co robi oprogramowanie * Krótki przewodnik szybkiego startu * Pełna dokumentacja narzędzi objętych projektem * Dokumentacja formaty plików i protokoły * Odniesienie do API * Lista znanych błędów * Lista rzeczy do zrobienia * Zestaw przykładów Jaka jest dobra kolejność tych punktów? Jak te punkty można podzielić na rozdziały, sekcje, podrozdziały i podrozdziały? Jedno z narzędzi ma hierarchiczną strukturę konfiguracji. Czy ta struktura powinna być reprezentowana w zarysie dokumentacji (spowoduje to naprawdę głęboki zarys), czy też powinna być w jakiś sposób spłaszczona?


title: Próba lepszego zrozumienia pułapek wydajnościowych projektowania obiektowego

text: Obecnie jestem w klasie obliczeń o wysokiej wydajności, prowadzonej w C++. Zwykle pracuję w C#, co oznacza, że wszystko jest za mnie załatwione, a optymalizacja jest związana z konserwowalnością i funkcjami wyższego poziomu. To jak... fajny piec produktywności, który utrzymuje mi ciepło w zimowym projekcie programistycznym kosztem mojego rachunku za braki w cyklu procesora/cache. Jednak teraz, gdy jestem w C++ i świecie wydajnych algorytmów, ta sprawa schodzi na dalszy plan w optymalizacji. Ponieważ większość mojej pracy była w C#, programowanie obiektowe jest poniekąd w moim stylu. Jednak coraz więcej czytałem/słyszę o tym, że kod obiektowy jest wrogiem wydajności. Ponieważ moje rozumienie architektury oprogramowania przesuwa się od skupiania się wyłącznie na strukturze klas i enkapsulacji do zrozumienia, w jaki sposób rzeczy są usuwane z pamięci podręcznej L1 i potokowania, staram się zrozumieć prawdziwe powody, dla których projektowanie zorientowane obiektowo (zwłaszcza jeśli dotyczy C ++) powoduje marnowanie zasobów sprzętowych. Czy możecie mi podać kilka podstawowych powodów, dla których wpływa to na wydajność komputera? Wiem, że są inne debaty na temat OOP, ale chciałbym po prostu utrzymać wydajność na poziomie sprzętowym i algorytmicznym.


title: Klasa niestandardowa dla kwoty pieniężnej (wartości pieniężnej) zamiast BigDecimal

text: Na StackOverflow znalazłem wiele rad, aby trzymać się `BigDecimal` w Javie zamiast odkrywać koło na nowo. Mimo to postanowiłem stworzyć własną klasę custom i spytałbym, czy to dobry pomysł i plusy lub minusy mojego projektu w porównaniu do BigDecimal. Powodami wyboru niestandardowej implementacji i cech charakterystycznych mojego projektu są: * brak konstruktorów double/float jak w BigDecimal (ryzyko pomyłki) - **`long` wewnętrznie z 8 miejscami po przecinku** \- ogranicza to min/max do ~10 miliarda, ale system jest ukierunkowany na kryptowaluty, więc typowe wartości są niewielkie. * brak różnicy w "0.0" i "0.00", ponieważ BigDecimal ma * prostą kompatybilność SQL przez kolumnę BIGINT * twarde połączenie z obiektem/kodem waluty - nie można utworzyć kwoty bez waluty, a także nie można wykonać artymetyki/porównywania dwóch wartości w różnych walutach * Kontrola kreacji możliwe wartości, aby nie przepełniać długo (-10 miliardów do 10 miliardów) * wewnętrzne zabezpieczenie przed przepełnieniem obliczeń **Czy uważasz, że te powody są dobre, aby wybrać niestandardową implementację zamiast BigDecimal?** Aby zminimalizować ryzyko mam bardzo dużo pokrycia sytuacji według testu jednostkowego, a także użyj BigDecimal do początkowej konwersji z ciągu: BigDecimal decimal = new BigDecimal(value); ... sprawdź dozwolone wartości MIN/MAX ... BigDecimal multiplied = decimal.multiply(new BigDecimal(String.valueOf(DECIMAL_DIVIDER))); long internalResult = multiplied.toBigInteger().longValue(); zwróć nową kwotę (internalResult, cryptoCurrency.getInternalCode());


title: Jaki jest najlepszy sposób na naukę programowania, jeśli nigdy wcześniej tego nie robiłeś?

text: Jak mówi tytuł, jaki jest najlepszy sposób na naukę programowania, jeśli nigdy wcześniej tego nie robiłeś? Należy zacząć wyjaśniać zmienne, sekwencyjne wykonywanie, obiekty, algorytmy; gdzie się zaczyna? Oczywiście może się to różnić w zależności od osoby, ale być może istnieje najlepszy „średni” sposób, który pomaga średnio większości osób. Sam właściwie nie pamiętam czasu, kiedy zacząłem programować, dlatego jestem tym zainteresowany. Poza tym często zastanawiałem się, jak najlepiej uczyć programowania dla nowicjuszy.


title: Czy istnieje coś takiego jak posiadanie zbyt wielu prywatnych funkcji/metod?

text: Rozumiem znaczenie dobrze udokumentowanego kodu. Ale rozumiem również znaczenie _samodokumentowania_ kodu. Im łatwiej jest wizualnie odczytać daną funkcję, tym szybciej możemy przejść do konserwacji oprogramowania. Powiedziawszy to, lubię rozdzielać _duże_ funkcje na inne mniejsze. Ale robię to do momentu, w którym klasa może mieć ponad pięć z nich tylko po to, aby obsługiwać jedną publiczną metodę. Teraz pomnóż pięć prywatnych metod przez pięć publicznych, a otrzymasz około dwudziestu pięciu ukrytych metod, które prawdopodobnie zostaną wywołane tylko raz przez te publiczne. Jasne, teraz łatwiej jest czytać te publiczne metody, ale nie mogę przestać myśleć, że posiadanie zbyt wielu funkcji to zła praktyka. **[Edytuj]** Ludzie pytają mnie, dlaczego uważam, że posiadanie zbyt wielu funkcji to zła praktyka. Prosta odpowiedź: to przeczucie. Moje przekonanie nie jest ani trochę poparte żadnymi godzinami doświadczenia w inżynierii oprogramowania. To tylko niepewność, która dała mi „blok pisarski”, ale dla programisty. W przeszłości programowałem tylko projekty osobiste. Dopiero niedawno przeszedłem do projektów zespołowych. Teraz chcę się upewnić, że inni mogą przeczytać i zrozumieć mój kod. Nie byłam pewna, co poprawi czytelność. Z jednej strony myślałem o rozdzieleniu jednej dużej funkcji na inne mniejsze o zrozumiałych nazwach. Ale była druga strona mnie mówiąca, że to po prostu zbędne. Więc proszę to o oświecenie się, aby wybrać właściwą ścieżkę. **[Edytuj]** Poniżej zamieściłem dwie wersje tego, jak _mogę_ rozwiązać mój problem. Pierwsza z nich rozwiązuje to poprzez _nie_ oddzielanie dużych fragmentów kodu. Drugie rozdziela rzeczy. Pierwsza wersja: public static int Main() { // Wyświetla menu. Console.WriteLine("Wybierz swoją opcję"); Console.Writeline("[1] Wprowadź i wyświetl wielomian"); Console.WriteLine("[2] Dodaj dwa wielomiany"); Console.WriteLine("[3] Odejmij dwa wielomiany"); Console.WriteLine("[4] Rozróżnij dwa wielomiany"); Console.WriteLine("[0] Zakończ"); } Druga wersja: public static int Main() { DisplayMenu(); } private static void DisplayMenu() { Console.WriteLine("Wybierz opcję"); Console.Writeline("[1] Wprowadź i wyświetl wielomian"); Console.WriteLine("[2] Dodaj dwa wielomiany"); Console.WriteLine("[3] Odejmij dwa wielomiany"); Console.WriteLine("[4] Rozróżnij dwa wielomiany"); Console.WriteLine("[0] Zakończ"); } W powyższych przykładach ten ostatni wywołuje funkcję, która będzie użyta tylko raz w całym czasie wykonywania programu. Uwaga: powyższy kod jest uogólniony, ale ma ten sam charakter, co mój problem. A teraz moje pytanie: który? Czy wybieram pierwszą czy drugą?


title: Wzorzec projektowy do udostępniania uwierzytelniania społecznościowego w subdomenach?

text: W tej chwili buduję aplikację, która uwierzytelnia się za pomocą poczty e-mail lub różnych kont społecznościowych. Ponieważ będzie działać w wielu subdomenach i domenach, zastanawiam się, czy istnieje wzorzec projektowy, który był używany w przeszłości, aby osiągnąć to bez problemu. Zasadniczo służy tylko do uwierzytelniania, ponieważ używamy informacji o profilu przechowywanych lokalnie. Początkowo myślałem o zrobieniu czegoś takiego jak iframe wskazujący na `accounts.domain.com`, który zawsze mógłby sprawdzić status logowania kont społecznościowych. Dziękuję!


title: Jaki proces powinienem wykonać, aby zaimplementować (zakodować) stronę internetową w HTML5/CSS?

text: Tytułowe pytanie jest niestety dość niejasne (a przynajmniej może pytać inaczej niż zamierzam)... ale pozwólcie, że rozwinę. Znam podstawy HTML5 i CSS. Nie muszę uczyć się tagów i ich działania. To, czego szukam, to informacje o tym, jaki proces należy wykonać, gdy faktycznie koduję stronę internetową w profesjonalnym stylu. Chcę zrobić dla siebie stronę portfolio od podstaw (to znaczy nie używać gotowego oprogramowania, takiego jak Wordpress i tym podobne), ale nie wiem, co zrobić jako proces, aby od początku stworzyć czystą stronę. Jestem studentem CS i mój zestaw umiejętności jest w Java/C#, ale chcę się również nauczyć tworzenia stron internetowych. Wiem, że HTML odpowiada za zawartość strony, CSS za wygląd, a Javascript za zachowanie. Czy muszę wiedzieć, jak strona będzie ostatecznie wyglądać, zanim zacznę kod HTML? Czy mogę po prostu napisać kod HTML, aby opisać zawartość i martwić się później wyglądem witryny, czy też muszę pisać HTML, wiedząc, jak chcę, aby witryna wyglądała, gdy ją piszę? Jeśli chcę mieć poziomy pasek nawigacyjny u góry, czy linki muszą znajdować się obok siebie w kodzie HTML? To wszystko, czego nie wiem... jak właściwie **zbudować** odpowiednią stronę internetową. Wiem, jak tworzyć podstawowe strony z tekstem, linkami, nagłówkami i tak dalej, ale tworzenie profesjonalnej strony internetowej jest mi obce. Każda strona, którą znajdę w Google jest albo zbyt wysoki (podając proces projektowania i implementacji bez podawania przykładów jak wdrożyć, gdy już wiesz, czego chcesz) lub jest zbyt początkująca (próbuję nauczyć mnie HTML i CSS, gdy już wiem, co mam trzeba wiedzieć w tym zakresie).


Dlaczego ramki zostały wycofane w HTML5, ale nie iFrames? W końcu nie ma między nimi prawie żadnej różnicy. W wielu przypadkach użycie jednego z nich dałoby ten sam wynik (wybacz mi, jeśli się mylę)?


title: Zapobieganie zastępowaniu metod w celu-C

text: Objective-C nie ma metod prywatnych ani metod końcowych w stylu java. Oznacza to, że podklasa może (przypadkowo) zastąpić niektóre wewnętrzne elementy nadklasy. Jak można zapobiec zastępowaniu metod w Objective-C?


title: Czy można utworzyć kolejne odniesienie do obiektu javascript tylko dla ułatwienia dostępu?

text: Mam przypadek użycia, w którym muszę utworzyć, powiedzmy, dwa obiekty javascript i używać ich właściwości w sobie nawzajem. np. - var Obiekt1 = { ustawienia: { właściwość1: 'jakaśWartość', właściwość2: 'jakaśWartość' } } var Obiekt2 = { ForeignProperty: Obiekt1.settings.właściwość1; } Chciałem wiedzieć, czy używanie obiektu referencyjnego do ustawień jest w porządku, jeśli wiem, że będę często używał właściwości settings. np. var Object1Settings, Object1 = { settings: { property1: 'someValue', property2: 'someValue' } } var Object1Settings = Object1.settings; var Obiekt2 = { ForeignProperty: Object1Settings.property1; } Czy takie podejście jest akceptowalne pod względem właściwych sposobów kodowania i wydajności? Dziękuję


title: Podwójne licencjonowanie OSS / segregacja rynku

text: Mam projekt open-source, który chciałbym komercyjnie licencjonować dla różnych typów firm. Licencje xGPL nie działają dla mnie, ponieważ nie zezwalają na żadne warunkowe dodatki. To, co chcę osiągnąć, to: * wymagać licencji komercyjnych dla firm * zezwolić na używanie i zmiany w ramach niektórych licencji OSS dla osób fizycznych * zezwolić na bezpłatne użytkowanie (tak samo jak powyżej) w określonych branżach biznesowych na podstawie indywidualnej selekcji (np. instytucje edukacyjne). Jestem naprawdę zdezorientowany, jak to osiągnąć i jednocześnie nie naruszam warunków części licencji OSS. **Edytuj** : szukam istniejącej bezpłatnej licencji, która nie zabrania wyraźnie podwójnego licencjonowania, tak jak robi to rodzina GPL.


title: dlaczego na niektórych stanowiskach pracy jest napisane „środowisko o wysokim ciśnieniu”?

text: Po co miałaby być jakaś presja, skoro wszyscy wiedzą, co robią, a projekty są dokładnie oszacowane? Jeśli jest presja, a nawet duża presja, oznacza to, że to, co obecnie robią, nie działa, dlaczego jakikolwiek dobry programista miałby chcieć dołączyć do takiego zespołu? Czy tego rodzaju ogłoszenia o pracę zawiodły w próbach popisywania się, czy naprawdę są po prostu szczere? Czy naprawdę istnieją dobre powody do wywierania presji?


title: Najlepsza metoda na realizację osobistych projektów

text: Mam wiele osobistych projektów, które zacząłem i wydaje mi się, że nigdy nie kończę, ponieważ odwracają się od innych pomysłów. Zastanawiałem się, jaka jest najlepsza metoda na realizację osobistych projektów? Jakieś sztuczki lub wskazówki? Problem polega na tym, że dostaję zryw inspiracji przy niektórych projektach i nie chcę tracić z oczu moich pomysłów, a teraz moja metoda „zapisywania pomysłów” polega na wykonaniu jak największej liczby pomysłów w jednym noc, a następnie przechowaj niektóre problemy z GitHub dotyczące DOS. Uważam, że to sprawia, że nigdy nie wracam do starszych projektów.


title: Chcę sprzedać swoje oprogramowanie [aplikacja komputerowa C#], ale utknąłem w licencjonowaniu

text: > **Możliwy duplikat:** > jeśli używam .NET Framework dla mojej aplikacji, czy muszę coś płacić > Microsoft? Opracowałem aplikację komputerową o nazwie „Institute Management System”, która zawiera moduły takie jak Menedżer zajęć, Menedżer przedmiotów, Menedżer tematów, Menedżer zapytań studentów Menedżer przyjęć studentów, Menedżer opłat, Menedżer egzaminów itp., używając C# do interfejsu i MS Access do z tyłu. Głównym problemem jest to, że chcę go sprzedać i zarobić trochę pieniędzy, ale słyszałem, że moja aplikacja musi być zarejestrowana w Microsoft i musiałbym uzyskać od nich licencję na sprzedaż i musiałbym im płacić. Spędziłem cztery miesiące na rozwijaniu go na własny koszt i bardzo ciężko pracowałem, aby go rozwinąć. Więc chcę kilka wskazówek, porad, jakichkolwiek sugestii dotyczących tego samego. Proszę również podać procedurę dotyczącą wszystkich wymaganych rejestracji i problemów z płatnościami. Chcę Cię również zapytać, czy **Czy możesz zasugerować jakąkolwiek inną technologię, w której rozwijam moją aplikację i sprzedaję ją bez martwienia się o licencje i związane z tym problemy?** Jestem teraz bardziej zdezorientowany, że „technologia MS jest open source, czy nie ?


title: Średniozaawansowany do zaawansowanej książki do poprawy wiedzy i zrozumienia VIM

text: Używam `vima` już od dłuższego czasu i każdego dnia staram się uczyć nowych rzeczy. Ale jakoś jeszcze nie czuję, że jestem jej właścicielem. Poszukuję kilku średniozaawansowanych i zaawansowanych książek na temat `vim`, które mogą być użyte jako odniesienie, jak również w codziennym rozwoju. To, czego szukam w książce, to więcej wyjaśnień pojęć i ogólnych zasad filozoficznych niż listy działań w stylu ściągawek. Może może obejmować również niektóre powszechnie używane wtyczki i ich rozwój.


title: Skąd wzięła się konwencja nazywania argumentów wiersza poleceń „argv”?

text: Wygląda na to, że Python, PHP i Ruby używają nazwy "argv" do odwoływania się do listy argumentów wiersza poleceń. Skąd wzięła się nazwa „argv”? Dlaczego nie coś takiego jak „args”? Domyślam się, że pochodzi z C, gdzie v oznaczałoby „wektor”. Wikipedia ma przypis, który mówi: > termin wektorowy w nazwie tej zmiennej jest używany w tradycyjnym sensie > w odniesieniu do łańcuchów. Jednak nie ma żadnego źródła tych informacji. Naprawdę jestem ciekawa, czy ma korzenie sięgające jeszcze dalej. Czy C używał go, ponieważ coś wcześniej go używało?


title: Jak znaleźć ludzi do pomocy w tłumaczeniu mojego projektu open source?

text: Jestem wielkim fanem StackOverflow, ale myślę, że to pytanie należy tutaj, popraw mnie, jeśli się mylę. Więc w zasadzie staram się zlokalizować moją wtyczkę w jak największej liczbie języków. Opublikowałem sekcję dokumentów, aby dotrzeć do osób, które chcą pomóc w tłumaczeniu, ale dostałem tylko jednego współpracownika, który załączył tłumaczenie na język niemiecki. Do tej pory dostałem 4 języki, angielski, hiszpański, francuski i niemiecki. Więc moje pytanie brzmi, jak tłumaczycie swoje projekty? Gdzie można znaleźć osoby zainteresowane współpracą? Czy ktoś używa tłumacza Google do wykonania tej pracy?


title: Przydatne wymagania wstępne do kursu systemów operacyjnych?

text: Jak ważna jest znajomość struktur danych i algorytmów na kursie systemów operacyjnych i programowania systemów, gdzie będziemy musieli zaprojektować i zaimplementować jądro systemu operacyjnego czasu rzeczywistego (wykonane przy użyciu C i 68K)? Jak przydatne będzie doświadczenie programowania w implementacji struktur danych, takich jak połączone listy, kolejki, drzewa binarne itp. w C++ dla tego typu kursu? Dziękuję!


title: Kiedy problemy z zaokrąglaniem stają się prawdziwym problemem? Czy najmniej znacząca cyfra jest jednorazowa, to naprawdę wielka sprawa?

text: Jeśli zrobię `.1 + .1 + .1` w Pythonie, otrzymam `0.300000000000000004`. (Nie pytam w szczególności o Pythona i nie chcę konkretnych odpowiedzi w Pythonie.) Jedyny problem, jaki widzę z tym, to `0.30000000000000004 != 0.3`, więc muszę uważać na to, jak porównuję pływaki. Czy są jakieś inne problemy, o których muszę pamiętać przy zaokrąglaniu zmiennoprzecinkowym? Nie wyobrażam sobie, żeby ta ostatnia cyfra była dużym problemem w prawdziwym życiu. Na przykład, jeśli poproszę o "metalowy pręt 0,30000000000000004 metrów", nie będę później narzekał, że "ta pręt jest o 0,00000000000000004 metrów za długi!" (Mogę po prostu odciąć to dodatkowe, prawda? :) Nawet przy wielu obliczeniach zmiennoprzecinkowych nie wyobrażam sobie, aby zaokrąglanie było tak odległe, że ma to znaczenie. Czy czegoś mi brakuje? Kiedy błędy zaokrąglania liczb zmiennoprzecinkowych naprawdę mają znaczenie?


title: Co można zrobić z językami programowania, aby uniknąć pułapek zmiennoprzecinkowych?

text: Niezrozumienie arytmetyki zmiennoprzecinkowej i jej niedociągnięć jest główną przyczyną zaskoczenia i zamieszania w programowaniu (rozważ liczbę pytań na Stack Overflow dotyczących „liczby nie są dodawane poprawnie”). Biorąc pod uwagę, że wielu programistów musi jeszcze zrozumieć jego konsekwencje, może on wprowadzić wiele subtelnych błędów (zwłaszcza w oprogramowaniu finansowym). Co mogą zrobić języki programowania, aby uniknąć pułapek dla tych, którzy nie są zaznajomieni z pojęciami, jednocześnie oferując swoją szybkość, gdy dokładność nie jest krytyczna dla tych, którzy _do_ rozumieją pojęcia?


title: Układ klas w Pythonie — konwencje

text: Jaki jest właściwy lub standardowy sposób rozmieszczenia klasy. Jeśli klasa ma mieć atrybuty, metody, atrybuty prywatne, metody prywatne, właściwość klasy (metody) i metody klasy. Skończyłem 99% mojego kodowania proceduralnie i poza pracą z ORM nie skupiałem się zbytnio na OOP. Zmieniam to w obecnym projekcie i byłam tylko ciekawostką, jaki był standardowy sposób organizowania zajęć. Class MojaKlasa(): attr1 = wartość1 attr2 = wartość2 _attr3 = wartość3 def __init__(self): zrób coś def do_something(self): zrób więcej rzeczy def __do_something_else(self): więcej rzeczy @property() def attr4(self) : return do_some_stuff_else() @classmethod() def generator_a_bunch_of_these(cls): do_some_more_things


title: Czy mogę używać systemów uczących się do sprawdzania danych eksperymentalnych?

text: Jestem fizykiem eksperymentalnym. W naszych badaniach mamy nasze dane eksperymentalne w macierzy 400*400*400 (oś x, y, z przestrzeni 3d), każdy wpis jest powiązany z wartością ("jasność"). Spodziewamy się, że najjaśniejsze wpisy utworzą zamkniętą ścieżkę w przestrzeni 3d. Ale jakaś część ścieżki jest zawsze zbyt ciemna, aby ją zidentyfikować, jest też trochę szumu w przestrzeni (losowe jasne linie). Nasz obecny algorytm generuje losowe punkty początkowe w przestrzeni, przyciąga je jasność danych. Po pewnym czasie zostaną uwięzione na ścieżce. Jeśli zarejestrujemy pozycję punktów nasion, możemy uzyskać ścieżkę. Nasz obecny algorytm wykonuje całkiem dobrą robotę, podczas gdy ja nadal muszę ręcznie dodawać te stosunkowo ciemne punkty do ścieżki. Nie znam się na uczeniu maszynowym, ale zastanawiam się, czy można go zastosować w tym przypadku? Na przykład, czy jest możliwe, że powiem programowi, które punkty danych znajdują się na ścieżce, program będzie wiedział, jak wybrać punkty danych dla ścieżki w przyszłości. Lub jeśli istnieje jakaś inna metoda, której możemy użyć? Dziękuję!


title: Pytanie/odpowiedź dla wielu użytkowników — jak to zaprojektować?

text: Zastanawiam się nad dobrym sposobem radzenia sobie z pytaniem/odpowiedzią - modelem dla wielu użytkowników. Moim celem jest posiadanie wydajnego i czytelnego modelu, w którym przechowywane są wszystkie wyniki moich użytkowników. Każdy użytkownik ma te same pytania/odpowiedzi! W tej chwili mam trzy klasy, `Pytanie`,`Odpowiedź` i `Użytkownik`. „Użytkownik” ma „Zestaw pytań”. „Pytanie” zawiera „Zestaw odpowiedzi” i dodatkowe pole „selected_value”, które jest odpowiedzią klikniętą przez użytkownika. Każdy użytkownik ma kopię tego samego zestawu pytań. Dzięki temu mogę łatwo zobaczyć, co kliknął użytkownik. Jest to niepotrzebne przeciążenie, ponieważ muszę przechowywać pytania/odpowiedzi więcej niż raz. Ale dobrą rzeczą w tym podejściu jest dostępność moich pytań/odpowiedzi w moim modelu użytkownika, ponieważ muszę zobaczyć, co kliknął każdy użytkownik. Łatwo też wyodrębnić te informacje (np. za pomocą xml), wykonując po prostu pętlę wokół każdego użytkownika i jego pytań. Ale jakie podejście poleciłbyś zastosować? Czy powinienem utworzyć „wynik” modelu w moim modelu użytkownika, w którym po prostu przechowuję listę par, takich jak „QuestionId, AnswerId”? Czy jest na to bardziej akceptowany sposób?


title: Przepływ pracy na Github: Przekazywanie małych gałęzi poprawek zdalnie, czy utrzymywanie ich lokalnie?

text: W przepływie pracy Scotta Chacona (wyjaśnionym np. w tej odpowiedzi na SO), z zasadniczo dwoma silosami („deweloperski” i „master”), jeśli, powiedzmy, mam mały błąd do naprawienia (np. można go naprawić za pomocą kilku znaków), jest optymalny sposób na zrobienie tego: a) odgałęzienie od `development` gałęzi zwanej m.in. „poprawka_123”. Wypchnij tę gałąź do początku, gdy nad nią pracuję. Kiedy to się skończy, przejrzany kod, połącz się w `development` i wypchnij `development` do źródła. b) Tak samo jak powyżej, ale bez pchania `fix_123` do źródła.


title: Pomoc w złożoności algorytmicznej w implementacji niestandardowego sortowania przez scalanie

text: Wcześniej uzyskałem implementację sortowania przez scalanie w C++ przy użyciu niestandardowej listy podwójnie połączonej. Wymyślam dużą złożoność O n^2, opartą na operacji `merge_sort()` > `slice`. Ale z tego, co przeczytałem, ten algorytm _powinien_ być `n*log(n)`, gdzie log ma podstawę dwa. Czy ktoś może mi pomóc określić, czy po prostu określam złożoność nieprawidłowo, czy też implementację można/powinnam poprawić, aby osiągnąć złożoność `n*log(n)`? Jeśli chcesz zapoznać się z moimi celami związanymi z tym projektem, zajrzyj na mój blog. Dodałem komentarze w kodzie, przedstawiające, jak rozumiem złożoność każdej metody. _Wyjaśnienie_ \- Z tym pytaniem skupiam się na implementacji C++. Mam inną implementację napisaną w Pythonie, ale to było coś, co zostało dodane do moich pierwotnych celów.


title: Najlepszy sposób na wykorzystanie GIT do utrzymania szablonu aplikacji internetowej

text: Jestem samodzielnym programistą i posiadam szablon aplikacji internetowej, który stworzyłem w Visual Studio. Używam GIT do kontroli źródła, ale tylko na moim komputerze deweloperskim. Obecnie mam wzorzec i tworzę gałęzie dla nowych funkcji, scalając je z powrotem do wzorca, gdy kończę funkcje. Jestem teraz w punkcie, w którym jestem gotowy do użycia szablonu do wdrożeń i oczywiście chcę kontynuować dodawanie nowych funkcji poprzez rozgałęzianie/scalanie. Moje pytanie brzmi: jaki byłby dla mnie typowy/zalecany sposób tworzenia wdrożeń aplikacji na podstawie wzorca? Czy powinienem sklonować repozytorium do nowego katalogu przeznaczonego dla konkretnej aplikacji internetowej? Czy też powinienem używać rozgałęzień do tworzenia projektów w oparciu o projekt główny? Projekty nigdy nie zostaną scalone z powrotem do wzorca. Byłoby jednak miło, gdybym mógł scalać przyszłe funkcje do wzorca i mieć możliwość włączenia ich do wcześniej ukończonych projektów, jeśli jest to pożądane. Aby uzyskać bardziej szczegółowe informacje o moim środowisku: używam TortoiseGIT w Windows 7, Visual Studio 2012, ASP.NET Web Pages. Oczywiście głównymi różnicami między wdrożeniami byłyby po prostu różne strony, pliki CSS i skrypty jQuery. * * * Znalazłem ten post podczas pisania tego. Czy w tym celu powinienem sklonować repozytorium główne i z niego skorzystać?


title: struktura danych mapy w pacman

text: Próbuję zrobić grę pacman w c#. Wykonałem kilka podstawowych prac i wcześniej replikowałem gry takie jak Copter-it i Saper. Nie rozumiem, jak zaimplementować mapę w pacmanie. Jakiej struktury danych użyć, aby można ją było wykorzystać do przenoszenia obiektów kontrolowanych przez AI i sprawdzania kolizji ze ścianami? Pomyślałem o tablicy 2d intów, ale to nie miało dla mnie sensu.


title: Ile czasu należy przeznaczyć na przekrzywienie zegara?

text: Piszemy aplikację B2B, która korzysta z OAuth 2.0. Zanim token wygaśnie, chcemy go odświeżyć, ponieważ odświeżenie tokena jest szybsze niż żądanie nowego. Jednak chcemy wbudować w system pewną odporność na przekrzywianie zegara, więc uważamy, że token wygasł kilka sekund/minut, zanim faktycznie wygaśnie. Ile sekund/minut jest rozsądne, aby oczekiwać, że będą dwa serwery podłączone do Internetu, w różnych lokalizacjach?


title: Dlaczego programiści Microsoft nie umieścili T4MVC (lub jego działania) w rdzeniu MVC?

text: To, co robi T4MVC, ma dla nas sens. Konwertuje proste dane wejściowe w postaci ciągu znaków na dane wejściowe o silnym typie, co ułatwia programistom. W ten sposób - return View("foo"); aby zwrócić View(Views.foo); // lepiej (T4MVC) Jaki może być powód, dla którego osoby z SM NIE robią tego w ten sposób?


title: Zmieszany z definicją „abstrakcji” w OOP

text: Próbuję zrozumieć definicję „abstrakcji” w OOP. Natknąłem się na kilka głównych definicji. Czy wszystkie są ważne? Czy któryś z nich się myli? Jestem zmieszany. (Przepisałem definicję własnymi słowami). **Definicja 1:** Abstrakcja to koncepcja zabrania jakiegoś obiektu ze świata rzeczywistego i przekształcenia go w terminy programistyczne. Takich jak tworzenie klasy `Human` i nadawanie jej właściwości `int health`, `int age`, `String name`, itp. oraz metod `eat()` itd. **Definicja 2:** Bardziej ogólna definicja. Abstrakcja to koncepcja, która odbywa się **w dowolnym miejscu** w systemie oprogramowania, w którym zaangażowane jest **_'czynienie rzeczy bardziej ogólnymi/prostszymi/abstrakcyjnymi'_**. Kilka przykładów: * Hierarchia dziedziczenia, w której wyższe klasy są prostsze lub bardziej ogólne i definiują bardziej ogólną i abstrakcyjną implementację. Natomiast niższe klasy w hierarchii są bardziej konkretne i definiują bardziej szczegółowe implementacje. * Używanie enkapsulacji do ukrycia szczegółów implementacji klasy przed innymi klasami, dzięki czemu klasa jest bardziej „abstrakcyjna” (prostsza) w zewnętrznym świecie oprogramowania. **Definicja 3** Inna ogólna definicja: Abstrakcja to koncepcja przeniesienia uwagi ze szczegółów i konkretnej implementacji rzeczy na typy rzeczy (tj. klasy), dostępne operacje (tj. metody) itp. programowanie prostsze, bardziej ogólne i bardziej abstrakcyjne. (Może to mieć miejsce w dowolnym miejscu iw dowolnym kontekście w systemie oprogramowania). Ma to miejsce np. podczas enkapsulacji, ponieważ enkapsulacja oznacza ukrycie szczegółów implementacji i pokazanie jedynie rodzajów rzeczy oraz ich bardziej ogólnych i abstrakcyjnych definicji. Innym przykładem może być użycie obiektu `List` w Javie. ten obiekt faktycznie używa szczegółów implementacji `ArrayList` lub `LinkedList`, ale ta informacja jest abstrakcyjna przy użyciu bardziej ogólnej nazwy `List`. Czy któraś z tych definicji jest poprawna? (Mam na myśli **najbardziej konwencjonalną i akceptowaną** definicję).


title: MVC udostępnia klucze podstawowe bazy danych?

text: Przechodzę przez samouczek MVC i zauważam, że konwencja wydaje się ujawniać klucz podstawowy tabel na stronach szczegółów/adresach URL (np. /Movies/Details/5 jako przykład z samouczka). Oczywiście nie stanowi to problemu w przypadku takich rzeczy jak nagranie filmowe lub post SO, ale może być nieco inaczej w przypadku faktury lub transakcji z poufnymi informacjami, jeśli klucz był sekwencyjny lub możliwy do odgadnięcia. Czy to tylko ten samouczek, czy aplikacje MVC zazwyczaj ujawniają klucz podstawowy tabeli? Czy istnieje wspólna biblioteka lub wzór do ukrywania klucza, jeśli nie chcesz go ujawniać?


title: Połączenie z bazą danych Dependency Injection i statyczne metody tworzenia

text: Często używam statycznych metod "fabrycznych" do tworzenia obiektów z bazy danych. class Job { chronione $objDb; funkcja publiczna __construct($objDb) { $this->objDb = $objDb; } public static function LoadArrayByProjectId($intProjectId, $objDd) { //jakiś kod ładujący zadania $objJob = new Job($objDb); $arr[] = $objob; //koniec pętli return $arr; } public static function LoadArrayByUserId($intUserId, $objDb) { //podobny kod } } Próbuję więc użyć Dependency Injection, przekazując do konstruktora $objDb. Problemem jest parametr $objDb w funkcjach statycznych. Przekazywanie param jest bardzo denerwujące. Jak radzisz sobie z tą sprawą? Czy są lepsze rozwiązania?


title: Jak to jest pracować w dużym zespole programistycznym?

text: Zawsze miałem szczęście pracować w małym zespole programistycznym. Myślę, że najbardziej pracowałem z 11 programistami. Jak to jest pracować nad projektem z setkami programistów? Tysiące? Co skaluje się, a co nie? EDYCJA: Dzięki za wszystkie odpowiedzi! Wydaje się, że jest bardzo niewiele pozytywów: * możliwość pracy na mega-dużych bazach kodu * lepszy rozwój kariery wewnętrznej * ochrona pracowników przed nadużyciami w zarządzaniu (jest to bardziej -ve na małych niż +ve na dużych) Czy są jakieś inne korzyści dla dużych zespołów ?


title: Operator binarny indeksu/przypisania w C++

text: Projektowałem rodzaj parsera, kiedy pomyślałem, że byłoby miło mieć przeciążenie operatora w taki sposób: `operator[]=(subscipt_type s, rvalue_type val)`. Na przykład mamy klasę: //kolekcja Foos class FooCollection { public: //załóżmy, że zdefiniowano klasę Foo Foo& operator[]=(int i, const Foo& val); //..... }; I musimy przypisać wartość z indeksem dolnym: Wartość Foo; FooCollection c; c[42] = wartość; wtedy ostatni wiersz tego kodu zostanie rozwiązany na c.operator[]=(42,wartość); Zaletą tego operatora w porównaniu z istniejącym operatorem `Foo&[](int i)` jest to, że znamy wartość r przypisania podczas indeksowania, więc możemy zrobić coś, czego nie można sobie życzyć w zwykłym `operator=`. Na przykład próbowałem zaprojektować drzewo analizy składające się z polimorficznych węzłów z minimalnym interfejsem. To jest podstawowa klasa węzłów, wszystkie inne typy węzłów są z niej dziedziczone: class AnyNode { public: virtual AnyNode& operator=(const AnyNode& op) { // Nie wykonuje prawie żadnych działań. //Przeciążony w każdej podklasie w celu podjęcia sensownych działań } virtual AnyNode& operator[](int i) { //Zwraca specjalną wartość null typu AnyNode. } }; Klasa AnyNode nie jest czysto wirtualna, więc możliwe jest konstruowanie obiektów `AnyNode`. Jednym z elementów składni, który próbuję przeanalizować, jest lista podobna do pytona, która może zawierać heterogeniczne wartości i może być indeksowana liczbą całkowitą. Klasa do tego: class ArrayNode : public AnyNode { public: AnyNode& operator[](int i) { //Zwraca referencję do i-tego elementu } }; Co się więc stanie, gdy spróbujemy przypisać coś do komórki tablicy, która nie była wcześniej przypisana, a jej konkretny typ nie został zdefiniowany? `AnyNode& operator=(const AnyNode& op)` z `klasy AnyNode` zostanie wywołany i nie zostaną podjęte żadne działania. Ale chcę znać wartość r `AnyNode&` zaraz po indeksowaniu, aby można było wydedukować jej konkretny typ za pomocą RTTI i podjąć kilka sensownych działań. Operator indeksu/przypisania może wyglądać tak: AnyNode& operator[]=(int i, const AnyNode& val) { //AnyNode::getType() jest dostarczany i zwraca wartość predefiniowanego wyliczenia. //stor to bazowy kontener, który przechowuje wskaźniki do AnyNode, //załóżmy, że możliwe jest odwołanie się do stor[i]. //NodeNumber to kolejna podklasa AnyNode. switch(val->getType()) { case numertypuwęzła: stor[i] = new NumerWęzła();//Możemy również potrzebować usunąć stor[i] przed nową alokacją. //Przeprowadź dalszą konkretną inicjalizację stor[i]. przerwanie; //............... } //Albo moglibyśmy użyć dynamic_cast zamiast switch(val->getType()) } Przypuszczam, że taki rodzaj operatora subsciptu/przypisania może być łatwo i konsekwentnie wbudowane w język. Co więcej, ogranicza fragmenty kodu, które są wykonywane, gdy wyrażenie indeksowane jest lwartością i rwartością: z nim zwykły operator indeksu dolnego powinien być wywoływany tylko wtedy, gdy subskrypcja jest rwartością. Oczywiście, jeśli proponowany operator nie jest zdefiniowany, ale zdefiniowany jest `operator[]`, kod powinien zostać wykonany w zwykły sposób. Więc moje pytania brzmią: jakie pułapki mógłbym przeoczyć w tym operatorze i dlaczego nie został on uwzględniony w języku? Czy może w jakikolwiek sposób złamać spójność językową, czy może wprowadzić do języka jakąś niejednoznaczność?


title: Wersjonowanie API

text: Zaczynam projekt poboczny, pierwszym etapem będzie budowa aplikacji webowej z wykorzystaniem MVC, w kolejnych etapach dodamy klientów na platformy mobilne. Pomyślałem, aby stworzyć jedno API, przez które przechodzą wszystkie aplikacje (internetowe i mobilne), aby uzyskać/zapisać dane. Ponieważ te różne platformy będą miały różne cykle wydawnicze, będę potrzebować sposobu, aby, powiedzmy iPhone, pracować z jedną wersją API, podczas gdy witryna korzysta ze zaktualizowanej wersji. Jak najlepiej to zrobić? Moje dotychczasowe pomysły to: * Utwórz oddzielny projekt do obsługi interfejsu API sieci Web MVC i hostuj go w poddomenie lub podfolderze witryny głównej. Następnie odwołaj się bezpośrednio do biblioteki DLL lub odwołaj się do niej przez Internet (wygląda na to, że niepotrzebne wywołanie http) * Umieść interfejs API w projekcie MVC, który będzie stroną internetową, i spróbuj go wersjonować na podstawie adresu URL. Zrobiłem z tym kilka szybkich testów dziś rano i nie mogłem go uruchomić, zawsze znajdował się w \api (nie mogłem go uruchomić w \api_v2)


title: Czy to prawda, że strony internetowe nie muszą korzystać ze struktury opartej na zdarzeniach, biorąc pod uwagę bezstanowy charakter sieci?

text: Uważam, że bardzo ważne jest używanie architektury sterowanej zdarzeniami z wieloma typami aplikacji, które nie są witrynami internetowymi. Jednak podczas kodowania stron internetowych (które są bezstanowe na najbardziej podstawowym poziomie) wydaje się, że nie ma potrzeby używania architektury sterowanej zdarzeniami. Czy to prawda? Czy większość frameworków internetowych nie używa zdarzeń do komunikacji między obiektami?


title: Entity Framework i systemy rozproszone

text: Potrzebuję pomocy, a może tylko podpowiedzi w dobrym kierunku. Mam system podzielony na dwie aplikacje. Istniejący klient pulpitu VB.NET korzystający z Entity Framework 5 z podejściem „code first” i klientem ASP.NET Web Api w języku C#, który zostanie ponownie uwzględniony. Powinno być możliwe dostarczenie OData. System i model danych wciąż ewoluują, dlatego migracje będą następować w nieokreślonych odstępach czasu. Mam problemy z zarządzaniem dostępem do bazy danych w systemie web api. Moim ulubionym podejściem byłoby użycie Entity Framework na obu systemach, ale mam kłopoty podczas tworzenia nowych migracji. Dwa rozwiązania, o których myślałem: Shared Data Access dll Pierwszym pomysłem było wydzielenie warstwy dostępu do danych na osobny projekt i referencję z każdego z systemów. Kontekst byłby taki sam, o ile biblioteka dll jest aktualna w każdym systemie. W ten sposób oba rozwiązania byłyby w stanie dokonać migracji. Główny problem polega na tym, że aktualizacja systemu web api jest znacznie bardziej skomplikowana niż w przypadku klienta Click Once Update Solution i nie każda migracja jest ważna dla web api. Spowodowałoby to więcej problemów z aktualizacją i brak synchronizacji bibliotek Database First w Web Api Drugim pomysłem było użycie bazy danych w pierwszej kolejności po stronie Web API. Wydaje się jednak, że po każdej aktualizacji modelu wszystkie adnotacje zostaną utracone. Inne rozwiązania z procedurami składowanymi zostały odrzucone z powodu braku obsługi i konserwacji OData. Czy ktoś wpadł w podobne konflikty lub ma jakieś rady, jak taki problem można rozwiązać!


title: Czy mogę pobierać opłaty za moduł J2EE .ear o zamkniętym kodzie źródłowym, opierając się na EJB na licencji GPL?

text: Klient poprosił mnie o dodanie (dość ogólnej funkcji monitorowania i powiadomień) do wewnętrznego rozwiązania, które zmontował na JBoss i kilku komponentach na licencji GPL (do pobrania od dostawcy open source jako EAR). Do komunikacji z tymi składnikami używam JMS i JMX. Czy muszę udostępnić mojemu klientowi prawa do źródła i redystrybucji, aby spełnić ograniczenia GPL? Innymi słowy, czy kod konfigurowalny wykorzystujący mechanizmy JMX i JMS jest pracą pochodną? Właściwie wolałbym otworzyć swój kod, ale jego część opiera się na opatentowanej logice strony trzeciej, która nie chce go na licencji GPL, ale chętnie dostarczyłaby go temu klientowi. Nie proszę o poradę prawną, tylko o opinię w zakresie dobrych praktyk/dozwolonego użytku.