title: Co uważasz za język wysokiego poziomu iz jakiego powodu?

text: Tradycyjnie język C był nazywany językiem wysokiego poziomu, ale obecnie jest często określany jako język niskiego poziomu (jest to język wysokiego poziomu w porównaniu do asemblera, ale jest **bardzo** niskopoziomowy w porównaniu do np. Python, w dzisiejszych czasach). Ogólnie rzecz biorąc, w dzisiejszych czasach wszyscy nazywają języki w rodzaju języków wysokiego poziomu Python i Java. Jak oceniasz, czy język programowania _naprawdę_ jest językiem wysokiego poziomu (czy niskiego poziomu)? Czy musisz wydawać bezpośrednie instrukcje do procesora podczas programowania w języku, aby nazwać go niskopoziomowym (np. Asembler), czy też C, który zapewnia pewną abstrakcję od sprzętu, jest również językiem niskopoziomowym? Czy znaczenie słów „wysoki poziom” i „niski poziom” zmieniło się na przestrzeni lat?


title: Dlaczego niektórzy programiści inaczej kategoryzują C, Python, C++? - w odniesieniu do poziomu

text: Biorę udział w kursie wprowadzającym na temat Pythona, a instruktor mówi, że Python jest językiem wysokiego poziomu, a C i C ++ to języki niskiego poziomu. To po prostu cholernie mylące. Myślałem, że C, C++, Python, Java itd. to języki wysokiego poziomu. Czytałem pytania na stackoverflow dotyczące C, C++ itp. i wszystkie one wydają się odnosić do tych języków jako wysokiego poziomu. wydaje mi się, że niektórzy programiści używają tych terminów zamiennie. Proszę mi to wyjaśnić.


title: Projektowanie oparte na modelu z walidacją fasoli

text: Jeśli mam bogatą bibliotekę domenową, która jest dołączana do aplikacji internetowej Java, ale chcę osiągnąć poziom izolacji zależności z tą biblioteką domenową, aby można było ją zbudować i przetestować całkowicie niezależnie (od większych bibliotek, takich jak Spring), jak mogę realistycznie korzystać z walidacji ziaren JSR-303? Sama biblioteka domeny może korzystać z adnotacji walidacji hibernacji, takich jak @NotNull w polach i pobierających, a to nadal jest niezależne i testowalne. Jeśli jednak chcę korzystać z nowszych funkcji, takich jak walidacja parametrów metody, która wymaga AOP, jak zachować minimalne zależności przy zachowaniu testowalności (poprzez JUnit)? Czy jest to prosta sprawa konfigurowania testu jednostkowego do wykonywania obiektów domeny za pośrednictwem serwera proxy AOP? Filozofia projektowania JSR-303 wydaje się, na pierwszy rzut oka, sprzeczna z bogatym projektowaniem domen, faworyzując bardziej głupie projektowanie usług warstwy biznesowej.


title: Konfiguracja serwera Tomcat 7 w porównaniu z samodzielnym serwerem ehCache (Glassfish) z usługami sieciowymi RESTful

text: Moje wymagania polegają na używaniu ehCache do wysyłania i przechowywania danych za pośrednictwem wywołań usług internetowych RESTful. Dane mogą być przechowywane w pamięci lub za pośrednictwem systemu plików... Nigdy wcześniej nie używałem ehCache, więc mam pewne problemy z podjęciem decyzji, którego pakietu użyć. Pobrano następujące pakiety: ehcache-2.6.2 ehcache-standalone-server-1.0.0 (1) Jaka jest różnica między tymi dwoma? Wygląda na to, że ehcache-2.6.2 zawiera src i binaria, co zasadniczo pozwala na łączenie go z ich aplikacjami internetowymi (poprzez umieszczenie skompilowanego pliku jar lub plików binarnych w folderze WEB-INF/lib aplikacji). Ale wydaje się, że nie obsługuje usług internetowych Restful. Natomiast ehcache-standalone-server-1.0.0 (jest dostarczany z wbudowanym serwerem Glassfish i obsługuje REST i SOAP) może być używany do uruchamiania jako samodzielny serwer. Jeśli moje odpowiedzi na moje pytanie są poprawne, to znaczy, że powinienem po prostu użyć samodzielnego serwera? (2) Moje wymagania to konfiguracja ehCache (z obsługą REST) na Tomcat 7. Jak więc skonfigurować ehCache na Tomcat 7 jako oddzielną aplikację z obsługą REST i SOAP? Dziękuję za poświęcenie czasu na przeczytanie tego...


title: Czy powinienem wykonać osobny test jednostkowy dla metody, jeśli modyfikuje on tylko stan nadrzędny?

text: Czy klasy, które modyfikują stan klasy nadrzędnej, ale nie samą siebie, powinny być testowane jednostkowo oddzielnie? Mówiąc osobno, mam na myśli umieszczenie testu w odpowiedniej klasie testów jednostkowych, która testuje tę konkretną klasę. Tworzę bibliotekę opartą na metodach połączonych, które w większości przypadków zwracają nową instancję nowego typu, w której wywoływana jest metoda łańcuchowa. Zwrócone instancje modyfikują tylko główny stan nadrzędny, ale nie same. Nadmiernie uproszczony przykład, aby uzyskać punkt w poprzek: public class BoxedRabbits { private readonly Box _box; publiczne BoxedRabbits(Box box) { _box = box; } public void SetCount(int count) { _box.Items += count; } } public class Box { public int Items { get; ustawić; } public BoxedRabbits AddRabbits() { return new BoxedRabbits(this); } } var box = new Box(); box.AddRabbits().SetCount(14); Powiedzmy, że jeśli napiszę test jednostkowy pod klasą `Box` testy jednostkowe: box.AddRabbits().SetCount(14) mógłbym skutecznie powiedzieć, że testowałem już klasę `BoxedRabbits`. Czy jest to zły sposób podejścia do tego, chociaż o wiele prościej jest najpierw napisać test dla powyższego wywołania, a potem najpierw osobno napisać test jednostkowy dla `BoxedRabbits`?


title: Projekt OO dla aplikacji Windows, która komunikuje się z zewnętrzną maszyną przez RS232

text: Potrzebuję trochę porad projektowych OO... Zaraz zacznę tworzyć aplikację dla systemu Windows, która komunikuje się z zewnętrzną maszyną przez RS232. Maszyna posiada wbudowany „kontroler systemowy” składający się z rejestrów (adresów). Możesz zapisać wartość do rejestru (np. aby włączyć pompę) lub odczytać wartość z rejestru (np. aby sprawdzić, czy pompa pracuje). Aplikacja będzie miała plik konfiguracyjny zawierający szczegółowe informacje o ustawieniach każdego rejestru, np. jego adres, czy to 16- czy 32-bitowy, przyjazny "alias" (więc inny kod może poradzić sobie z "Pump XYZ" zamiast adresu "50B3D124") i kilkoma innymi rzeczami. Moją pierwszą myślą było stworzenie klasy `Register` odzwierciedlającej te właściwości, plus metody `Read()` i `Write()`. Ale to rodzi pierwsze pytanie - czy metoda `Read()` powinna mieć wartość zwracaną, czy też powinna wypełniać właściwość `Value` w klasie? Podobnie, czy metoda `Write()` powinna zawierać parametr „valueToWrite”, czy powinna zapisywać dowolną wartość aktualnie przechowywaną we właściwości `Value`? Mógłbym pójść o krok dalej (być może nawet odpowiadając na powyższe pytanie) - zamiast metod Read/Write umieścić funkcjonalność w pobierającym i ustawiającym właściwości `Value`? Używanie nieruchomości do tego celu nie wydaje się jednak właściwe. Zacząłem się wtedy zastanawiać, czy klasa `Register` była w ogóle potrzebna, ponieważ jej funkcja odczytu/zapisu nie robiłaby nic więcej niż wywoływanie metod Read/Write na klasie `SystemController`, np. długi ReadRegister(string registerAlias); void WriteRegister(string registerAlias, długa wartość); Dlaczego po prostu nie pozwolić reszcie aplikacji na odczyt/zapis rejestrów za pośrednictwem klasy `SystemController`? (Podejrzewam, że nadal potrzebowałbym jakiejś koncepcji klasy `Register`, nawet jeśli ma ona tylko reprezentować ustawienia konfiguracyjne rejestru).


title: algorytm projektu Eulera problem nr 18

text: Problem numer 18 ze strony Projektu Euler jest następujący: Rozpoczynając od góry trójkąta poniżej i przechodząc do sąsiednich liczb w rzędzie poniżej, maksymalna suma od góry do dołu wynosi 23. 3 7 4 2 4 6 8 5 9 3 Oznacza to, że 3 + 7 + 4 + 9 = 23. Znajdź maksymalną sumę od góry do dołu trójkąta poniżej: 75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 UWAGA: Jak jest są tylko 16384 trasy, można rozwiązać ten problem, próbując każdą trasę. Jednak problem 67 jest tym samym wyzwaniem z trójkątem zawierającym sto rzędów; nie da się go rozwiązać brutalną siłą i wymaga sprytnej metody! ;o) Sformułowanie tych problemów nie wyjaśnia, czy * "Traversor" jest chciwy, to znaczy, że zawsze wybierał dziecko o wyższej wartości * zadawane jest maksimum każdego pojedynczego przejścia. `UWAGA` mówi, że `to można rozwiązać ten problem, próbując każdą trasę”. Oznacza to dla mnie, że jest to również możliwe **bez**! To prowadzi do mojego rzeczywistego pytania: Zakładając, że to nie zachłanny jest maksimum, czy istnieje jakiś algorytm, który znajduje maksymalną wartość przejścia bez wypróbowania każdej trasy i który nie działa jak algorytm zachłanny? Zaimplementowałem algorytm w Javie, najpierw umieszczając wartości w strukturze węzłów, a następnie stosując algorytm zachłanny. Wynik jest jednak uważany przez Project Euler za błędny. suma = 0; void findWay (węzeł węzła){ suma += node.value; if(node.nodeLeft != null && node.nodeRight != null){ if(węzeł.nodeLeft.value > node.nodeRight.value){ findWay(węzeł.nodeLeft); }else{ findWay(node.nodeRight); } } }


title: Użycie __ podczas deklarowania dowolnych zmiennych lub członka klasy w pythonie

text: Czy dobrą praktyką jest używanie konwencji `__` podczas deklarowania zmiennej składowej? Nadaje to również prywatny rodzaj funkcji tego członka danych. Zdarzały się przypadki, kiedy stwierdziłem, że dobrze jest mieć ukrytych członków klasy. To z pewnością ujawnia tylko tę cechę, która pomoże obiektowi zachowywać się w bardziej chroniony sposób.


title: Zasady projektowania: klasyfikowanie różnych typów klas

text: Próbuję wyjaśnić projekt aplikacji C++ i chciałbym zdefiniować jasną klasyfikację między klasami, aby ułatwić przejrzystość. Jednak staram się znaleźć jakąś literaturę, która by mi pomogła, prawdopodobnie dlatego, że tak naprawdę nie wiem, czego szukam. Aby pomóc, oto co mam do tej pory. Klasy mogą być jednym z kilku typów: * Obiekt wartości. Mam tu na myśli takie rzeczy jak std::string, std::vector. Są to konkretne klasy, które zazwyczaj są tworzone na stosie, mogą być kopiowane itp. * Obiekty usług. Klienci będą wchodzić z nimi w interakcję za pośrednictwem czystego wirtualnego interfejsu, który zazwyczaj jest wstrzykiwany w stylu DI. Dobrym przykładem może być tutaj usługa trwałości. Zwykle istniałaby jednorazowa instancja usługi, wstrzyknięta lub dostępna za pośrednictwem ServiceLocator (tak, wiem). * (obiekt domeny?). Klienci wchodzą z nimi w interakcję poprzez czysty interfejs wirtualny, ale reprezentują one abstrakcyjne obiekty domeny i są konstruowane przy użyciu abstrakcyjnej fabryki, która sama będzie usługą. Zazwyczaj mają one tożsamość, ale chcesz wchodzić z nimi w interakcje w sposób abstrakcyjny. Tak więc połączenie z bazą danych może być dobrym przykładem (zauważ, że jest to coś innego niż usługa utrwalania — konkretna implementacja usługi utrwalania może wykorzystywać połączenie z bazą danych, ale połączenie z bazą danych będzie reprezentować jedno rzeczywiste połączenie i będą istniały podklasy dla Mysql , SqlServer itp.). Takich obiektów będzie wiele, mają tożsamość. * Inne rzeczy, które nie pasują do powyższego, ale których nie udało mi się wymyślić żadnej jasnej klasyfikacji. Teraz ktoś musiał udokumentować taką taksonomię, ale na razie nic nie mogę znaleźć. Czy ktoś ma dobre referencje? Dziękuję.


title: UnitTests, czy posprzątanie twojego oświadczenia o działaniu sprawi, że twój test będzie mniej lub bardziej przejrzysty?

text: Powiedzmy, że testujemy `FooClass` następującą metodą: public void Foo(string stringParameter, int intParameter, Action<Bar> successCallback, Action<Exception> errorCallback); Jeśli wywołanie `Foo` się powiedzie, `successCallback` zostanie wywołane z wynikiem `Foo` w postaci obiektu `Bar`. Jeśli to się nie powiedzie, wywołanie `errorCallback` zostanie wywołane z `Wyjątkiem`. Zatem testy będą wyglądać mniej więcej tak: [TestMethod] public void Foo_UnderGivenConditions_WeExpectAGivenResult() { //Ułóż var fooObject = CreateFooObjectWithGivenConditions( ... ); //Działanie fooObject.Foo(String.Empty, 0, (bar) => { ... }, (błąd) => { ... }); //Potwierdź Assert.AreEqual(..., ...); } Teraz jest wiele testów tej metody `Foo`, wszystkie zawierają wywołanie `Foo`, ale nie każdy test będzie dbał o wszystkie parametry. Niektóre mogą dostarczać różne wartości ciągu, ale nie dbają o parametr int, a niektóre będą musiały zapewnić wywołanie zwrotne błędu, aby potwierdzić, że zgłoszony jest właściwy wyjątek i tak dalej. Teraz, ponieważ wszystkie parametry są obowiązkowe, musimy przekazać wartość ciągu do metody `Foo`, mimo że wartość ta nie ma znaczenia dla testu. Będzie dużo „nie obchodzi mnie to” lub „jakiś tekst”. Kiedy ktoś inny przychodzi i czyta test, musi zastanowić się, czy dana wartość rzeczywiście ma znaczenie dla wyniku testu, czy nie. To samo dotyczy wywołań zwrotnych. Czasami potrzebujemy wywołań zwrotnych, aby dostać się do wartości wyniku lub wyjątku, ale w większości przypadków nie. Zaimplementujmy więc metodę rozszerzającą, `PerformFoo`, która domyślnie ustawia każdy parametr: public statyczny Bar PerformBar(this FooClass fooObject, string stringParameter = "jakiś tekst", int intParameter = 0, Action<Bar> successCallback = null, Action<Exception> errorCallback = null); { Wynik słupka = null; var ourCallback = (bar) => { wynik = słupek; if (successCallback != null) sucessCallback.invoke(); } fooObject.Foo(stringParameter, intParameter, ourCallback, errorCallback); zwróć wynik; } Metoda rozszerzająca wywoła `Foo` z parametrami domyślnymi, a nawet zwróci wynik, jeśli wywołana zostanie funkcja successCallback. To pozwala nam zmienić część Act testu na coś takiego: //Act, obchodzi nas tylko parametr ciągu: fooObject.PerformFoo("Ciąg, na którym nam zależy"); //Działanie, potrzebujemy wynikowego słupka, gdy parametr int wynosi 10: var bar = fooObject.PerformFoo(intParameter: 10); //Działanie, nadal musimy dostarczyć wywołanie zwrotne, aby uzyskać wyjątek fooObject.PerformFoo("SomeInvalidValueCausingAnException", errorCallback: (error) => {exceptThrown = error;}); Więc pytania brzmią: * Czy to sprawia, że testy są bardziej czytelne? * Czy łatwiej jest uzyskać to, co naprawdę testuje test? * Fakt, że nazywamy `PerformFoo`, który tak naprawdę nie istnieje w testowanej klasie, sprawia, że test jest mniej wartościowy jako dokumentacja? * Czy porzucenie metody rozszerzającej dla zwykłej metody przyjmującej fooObject jako pierwszy parametr byłoby mniej „kłamstwem”? (np. `PerformFoo(fooObject, intParameter: 10)` ) Jak daleko posunąłbyś się, aby Twoje testy były czyste i przejrzyste?


title: Problem z najmniejszą zmianą w tysiącach wyznań

text: W hipotetycznej gospodarce istnieją jednostki walutowe, które mogą reprezentować tysiące różnych wartości. Na przykład mogą istnieć monety o wartości 1c, 3c, 5c, 7c, 7,5c, 80c, 8001,5c itd. Biorąc pod uwagę listę wszystkich możliwych nominałów i dowolną wartość, w jaki sposób można zwrócić listę monet reprezentujących najmniejsze liczba monet potrzebnych do dopasowania tej wartości. Jeśli chodzi o punkty bonusowe, wyobraź sobie, że masz dowolną skończoną ilość każdej waluty. Więc możesz mieć tylko dwie monety 3c, ale trzydzieści 18c. Brzmi jak koszmarny problem na zajęciach z compsci, ale jest to coś, na co natknąłem się ostatnio przy moim osobistym projekcie. Gospodarka jest gospodarką barterową (tf2), w której każdy rodzaj przedmiotu ma odrębną wartość w stosunku do innych przedmiotów. Mam klasę Item, w której przedmioty mają atrybut Value, a ten atrybut jest double, który reprezentuje wartość przedmiotu względem podstawowego przedmiotu, który ma wartość 1. Próbuję wymyślić sposób, aby jeśli ktoś złoży ofertę o wartości 30. Mogę następnie przejrzeć listę około 1200 przedmiotów i znaleźć najmniejszy zestaw przedmiotów, których łączna wartość odpowiada 30. Nie mogę wymyślić zdalnie skutecznego sposobu, aby to zrobić, ale doszedłem do wniosku problem był na tyle ciekawy, że ktoś chciałby się ze mną nad nim zastanowić. Mój program jest w C#, ale nawet pseudokodowa burza mózgów byłaby pomocna.


title: Wzorzec MVC, ViewModels, lokalizacja konwersji

text: Pracuję z ASP.Net MVC od około roku i stworzyłem swoje aplikacje w następujący sposób. > X.Web — aplikacja MVC zawiera kontroler i widoki > > X.Lib — zawiera dostęp do danych, repozytoria i usługi. To pozwala nam wrzucić .Lib do dowolnej aplikacji, która tego wymaga. W tej chwili używamy Entity Framework, konwersja z EntityO na bardziej szczegółowy model odbywa się w kontrolerze. Ta konfiguracja oznacza, że jeśli metoda usługi zwraca EntityO, a następnie Kontroler wykona konwersję przed przekazaniem danych do widoku. Chcę wiedzieć, czy należy przenieść konwersję do usługi, aby aplikacja nie zawierała obiektów Entity Objects.


title: Migracja starszego kodu proceduralnego do MVC bez przepisywania

text: Niedawno rozpocząłem pracę nad aplikacją PHP, która została zbudowana wiele lat temu przed pojawieniem się obiektów i przestrzeni nazw w PHP. Kod jest proceduralny, nie oddziela logiki prezentacji od logiki biznesowej, nie ma punktu końcowego (front controller) i wszędzie ma pliki z pozornie losową hierarchią folderów. Jednak działa świetnie dla klientów i pomimo bałaganu w kodzie jest w rzeczywistości dość szybki. Chciałbym powoli przenieść bazę kodu do czegoś bardziej łatwego w utrzymaniu i zorganizowanego. Umieściłem MVC w tym tytule, ale tak naprawdę wszystko, co naprawdę mam na myśli, to zorganizowany i łatwy w utrzymaniu. Kluczowe cele tego wysiłku to: * Nie degradować w żaden sposób doświadczenia klienta podczas tej zmiany (przepisanie nie jest opcją) * Całkowicie oddziel widoki od logiki * Przynajmniej posiadaj „najlepszą praktykę” lub metodę wdrożenia nowe punkty końcowe aplikacji (trasy) * Miej spójną metodę lub warstwę do utrwalania danych * Rozpocznij hermetyzację jak największej ilości kodu w obiektach, aby w pewnym momencie testy jednostkowe były wykonalne.


title: Jak skonfigurować witrynę internetową za pomocą wzorca MVC? (Bez MS ASP.NET MVC)

text: Wykorzystaliśmy wykonawcę do stworzenia wstępnej wersji naszej strony; użyli własnego generatora kodu wzorca MVC, aby utworzyć witrynę (ASP.NET / C#) i dostosować ją z tego miejsca. Zostało nam to przekazane dwa lata temu i od tego czasu pracujemy nad tym. To jest środowisko, w które wchodzę, z niewielkim praktycznym doświadczeniem MVC. W związku z tym muszę ogólnie zajmować się MVC, ale wydaje się, że każdy artykuł/samouczek/książka, który znajdę, ma albo bardzo ogólny charakter, albo jest bardzo specyficzny dla MS ASP.NET MVC. Czy ktoś może tutaj pomóc z przykładami, samouczkiem lub instruktażem tworzenia podstawowej witryny przy użyciu wzorca MVC _bez korzystania z Microsoft ASP.NET MVC_, abym mógł lepiej zrozumieć koncepcje i zobaczyć, jak można je zastosować w prawdziwym życiu?


title: Jak włączyć istniejące oprogramowanie open source z perspektywy licencjonowania?

text: Pracuję nad oprogramowaniem, które korzysta z następujących bibliotek: * Biopython * SciPy * NumPy Wszystkie powyższe mają licencje podobne do `MIT` lub `BSD`. Trzy scenariusze: 1. Po pierwsze, jeśli nie redystrybuuję tych zależności, a tylko mój kod, to wszystko, czego potrzebuję, to moje własne prawa autorskie i licencja (planuję używanie `Licencji MIT`) do mojego kodu. Prawidłowy? 2. Co jeśli użyję py2exe lub py2app do stworzenia binarnego pliku wykonywalnego do dystrybucji, aby ułatwić ludziom uruchamianie aplikacji bez konieczności instalowania pythona i wszystkich zależności. Oczywiście oznacza to również, że mój plik binarny zawiera samego Pythona (wraz z innymi pakietami, które mogłem wykonać `pip install xyz`). 3. Co się stanie, jeśli do mojego pakietu dołączę pliki binarne Biopython, SciPy i NumPy? W dwóch ostatnich przypadkach, co muszę zrobić, aby zachować zgodność z prawami autorskimi.


title: IDE dla języków dynamicznych — jak daleko można się posunąć?

text: Uważam, że frustrujące jest to, jak szybkość rozwoju, którą powinny oferować języki dynamiczne, jest znacząco obniżana przez brak uzupełnień i innych zasobów, które IDE dałyby ci w swoich statycznych odpowiednikach. Nie chodzi tylko o pisanie mniej – to wzrost wydajności i czysta przyjemność z przeglądania interfejsów API bez ciągłego odwoływania się do dokumentacji, która nie jest zintegrowana z edytorem. Do tej pory wszystkie kombinacje IDE + dynamiczne języki - co, szczerze mówiąc, nie jest tak dużo - próbowałem: * zapluskwione * powolne * bezmyślne/zbyt entuzjastyczne (jak w pokazywaniu wszystkich możliwych uzupełnień) * lub po prostu nie tak kompletne, jak powiedz, Eclipse + Java. Zdaję sobie sprawę, że dynamiczna analiza kodu nie jest trywialnym zadaniem. Ale nie można przestać się zastanawiać - _czy ten fragment kodu naprawdę jest tak trudny do rozszyfrowania_? Więc moje pytanie brzmi: ** Czy jakieś konkretne IDE (lub mniej konfiguracje typu „wszystko w jednym”) osiągnęły całkowicie wyjątkowe wsparcie dla języka dynamicznego, czy jest to nadal „nierozwiązany” problem?**


title: Wdrażanie ActiveRecord z dziedziczeniem?

text: Niedawno przekonwertowałem starą aplikację, która używała plików XML jako magazynu danych, aby zamiast tego używała SQL. Aby uniknąć wielu zmian, w zasadzie stworzyłem klasy stylu ActiveRecord, które odziedziczyły po oryginalnych obiektach biznesowych. Na przykład SomeClassRecord :SomeClass //ID Property //Save method. Następnie użyłem tej nowej klasy w miejsce drugiej, ponieważ ze względu na polimorfizm nie musiałem zmieniać żadnych metod, które przyjmowały SomeClass jako parametr. Czy byłoby to uważane za „złe”? Jaka byłaby lepsza alternatywa?


title: Pytania o problem utknięcia w problemie i robienie postępów w ślimaczym tempie

text: Opiszę moje pochodzenie. Obecnie jestem spółdzielnią programistyczną pracującą w firmie architektonicznej, która koncentruje się na badaniach i rozwoju, głównie w modelowaniu matematycznym i symulacjach fizycznych w celu lepszego wspomagania projektowania architektury. Jestem jednym z trzech głównych programistów. Realistycznie rzecz biorąc, wszyscy jesteśmy ludźmi, którzy specjalizują się w różnych tematach, na przykład jeden programista jest architektem, który programuje i tworzy modele matematyczne odkąd był w liceum (ma jakieś 30 lat), a drugi architekt również ma tytuł magistra w analityce danych. Wszyscy specjalizujemy się w różnych rzeczach, co czyni nas częścią bardzo multidyscyplinarnej grupy składającej się w sumie z dziewięciu osób. Obecnie pracuję nad projektem, który obsługuje programowanie Grasshopper 3D i Rhino 3D, korzystając z Grasshopper SDK. Naprawdę lubię to, co robię i doceniam możliwość uczenia się, jednak mimo to natura programowania w Grasshopper była dla mnie trudna. Nie sądzę, że jestem tak słaby pod względem programowania, jednak ponieważ większość moich projektów obejmuje rozszerzenie funkcjonalności poza to, co robi domyślny Grasshopper SDK, często muszę poświęcić dobre kilka godzin lub nawet dni, aby zrozumieć problem a następnie zastosuj do niego kod. Sama natura tej „funkcjonalności wykraczającej poza to, co zapewnia domyślny Grasshopper SDK” oznacza, że znalezienie rozwiązania problemu nie jest tak proste jak Google, ze względu na stosunkowo rzadkie dostępne zasoby, czy to dokumentacja, czy wątki pomocy online. Naturą utknięcia w problemie i jedynym środkiem zaradczym na ten problem powoli traciłem pewność siebie i ewidentnie widzę, że spowalniam wysyłanie komponentów (tak nazywa się „narzędzia” Grasshopper 3D). Już w pierwszych kilku miesiącach mojej współpracy zrobiłem dobre wrażenie, będąc znanym jako wydajny, szybki i wszechstronny, jednak w mojej trzymiesięcznej recenzji, kiedy zacząłem pracę nad programowaniem Grasshopper, moi doradcy zauważyłem, że moje postępy nie były tak szybkie i wspomnieli, że zastanawiają się, co/gdzie lepiej mnie zatrudnić, aby wydobyć mój pełny potencjał. Podoba mi się pomysł pracy nad innym projektem, ale nie chcę tego robić, dopóki nie skończę obecnego, na którym jestem, w którym z dnia na dzień czuję, że robię postęp w ślimaczym tempie z powodu pewnych problemów, w których utknąłem gdzie znalezienie pomocy jest problemem samym w sobie. Nie lubię robić złego wrażenia na moich kolegach (a także na mojej szkole, ponieważ jestem pracownikiem spółdzielni), ponieważ naprawdę wierzę, że mam potencjał, aby robić wielkie rzeczy. Jednak ta kwestia utknięcia w czymś, robienia niewielkich postępów, a potem ponownego utknięcia, po prostu osłabia moją pewność siebie. Jakie rzeczy mogę zrobić? Czuję się tak, jakbym utknął w problemie, zamykam się, nie mogę tego wyrazić, jakby proszenie o pomoc było oznaką niekompetencji.


title: Jakie cechy powinien mieć język programowania, aby zapewnić dobre ponowne użycie?

text: Co powinien mieć język programowania, aby można było powiedzieć, że promuje dobre ponowne wykorzystanie? Kiedy słyszę słowo ponowne użycie, przychodzą mi na myśl tylko rodzaje i funkcje. Co jeszcze sprawia, że język programowania jest dobry do pisania łatwego do ponownego użycia kodu?


title: Czy można wywołać funkcję JavaScript z C?

text: Chciałbym znaleźć sposób na wywołanie funkcji JavaScript z języka C. Czy są dostępne do tego celu powiązania językowe? Próbuję zrobić bibliotekę funkcji JavaScript dostępnych z C. (Coś w rodzaju interfejsu funkcji obcych C -> JavaScript byłoby odpowiednie do tego celu, ale do tej pory nie udało mi się go znaleźć.)


title: Zmiana domeny w karierze?

text: Jestem programistą C++, Qt przez ostatnie 3,5 roku i osiągnąłem plateau, jeśli chodzi o robienie czegoś nowego. Praca była powtarzalna i rutynowa. Osobiście uważam, że nadszedł czas, aby przejść dalej, ale późno otrzymuję więcej ofert w programowaniu mobilnym, takim jak Android, iPhone itp. Najnowsza oferta, którą mam, dotyczy profilu opartego na obiektywnym C. Nie mam najmniejszego pojęcia o objective-C, poza tym, że jest to C zorientowane obiektowo, przypominające C++, ale nie do końca klon. Pytania w mojej głowie brzmią: * jakie są zalety / wady tej zmiany kariery lub jakiejkolwiek takiej zmiany? * Czy zmiana domeny po jakimś czasie jest dobra dla kariery? * Jak trudno jest wrócić do poprzedniego obszaru biegłości? Dziękuję


title: Czy powinniśmy kiedykolwiek usuwać dane z bazy danych?

text: Jestem nowy w bazach danych i próbuję zrozumieć podstawowe pojęcia. Nauczyłem się usuwać dane z bazy danych. Ale jeden z moich znajomych powiedział mi, że nigdy nie należy usuwać danych z bazy danych. Zamiast tego, gdy nie jest już potrzebny, lepiej po prostu oznaczyć go lub oznaczyć jako „nieużywany”. Czy to prawda? Jeśli tak, to w jaki sposób duża firma, taka jak IBM, obsługiwałaby swoje dane przez sto lub więcej lat?


title: Zmienna i niezmienna wersja implementacji kolekcji lub obie upchnięte w jedną za pomocą .makeImmutable()

text: Obecnie pracuję nad implementacją kolekcji w JavaScript. Potrzebuję zmiennej i niezmiennej wersji tego. Najpierw pomyślałem o czymś takim: * _Collection_ * _MutableCollection_ extends _Collection_ * _ImmutableCollection_ extends _Collection_. Moim głównym problemem jest to, że jeśli chcę zaimplementować bardziej szczegółowe kolekcje, takie jak _List_ lub _Set_ , mogą one nadal dziedziczyć z _Collection_, podczas gdy ich implementacje Mutable/Immutable nie mogą dziedziczyć z _MutableCollection_ / _ImmutableCollection_. To skłoniło mnie do zastanowienia się, czy posiadanie wszystkich trzech, _Collection_ , _MutableCollection_ i _ImmutableCollection_ rzeczywiście przyniesie jakieś znaczące korzyści. Alternatywnym podejściem, które przyszło mi do głowy, byłoby mieć tylko _Collection_, a następnie mieć tam _Collection.prototype.makeImmutable_ lub _freeze_. Następnie wprowadziłbym również _Collection.requireMutableInstance( collectionInstance )_, które mogą być używane w funkcjach jawnie wymagających mutowalnej kolekcji. Oto moje główne obawy dotyczące umieszczania wszystkiego w _Kolekcji_ : * Definicja prototypu staje się znacznie większa w porównaniu do definiowania prototypu _MutableCollection_, który następnie przechowuje kod wszystkich operacji do modyfikacji. Myślę, że mógłbym rozwiązać ten problem, po prostu definiując drugi plik, który po prostu rozszerzyłby podstawową definicję _Collection_ o te dodatkowe operacje i operację _makeImmutable_. * Dokumentacja tych sygnatur funkcji, które faktycznie dbają o zmienność lub niezmienność, a nie tylko wymagają podstawowej kolekcji, wyglądałaby mniej ładnie. Weź: /** * @param {MutableCollection} collection /* function messAroundWithSomeCollection( collection ) { /* ... */ } vs. /** * @param {Collection} collection Kolekcja, która nie jest jeszcze niezmienna. /* function messAroundWithSomeCollection( collection ) { /* ... */ } Jaki byłby bardziej _naturalny_ sposób wykonania tego w JavaScript? Zwłaszcza bez interfejsów, które mogę sprawdzić i biorąc pod uwagę bardziej płaskie łańcuchy dziedziczenia, gdybym zaimplementował również kolekcję _Set_ i _Map_, podejście „wszystko w jednym” wydaje mi się bardziej intuicyjne.


title: Codeigniter + JQuery + Processing.js zastępują aplikację Delphi

text: Tak więc mam mandat, aby nasza aplikacja Delphi była oparta na bilionach wieków i musi intensywnie wykorzystywać element `<canvas>` (zgodność z HTML5 nie wydaje się być dużym problemem, ponieważ możemy po prostu stworzyć nasi klienci używają kompatybilnej przeglądarki tak, jak my byśmy używali kompatybilnej wersji Windows w środowisku win32). Aplikacja Delphi, o której mowa, jest prawie całkowicie oparta na bazie danych i nadal będzie rozwijana jako główny produkt. To, do czego mam zadanie, to w zasadzie odtworzenie pomniejszonej wersji programu, który wykonuje główne funkcje całego programu. Nie mogłem znaleźć żadnych frameworków, które symulują formularze okien za pomocą elementu canvas, zakładam, że jest to prawdopodobnie zgodne z projektem, ponieważ łatwiej jest po prostu użyć HTML, cóż, tak czy inaczej, nadal uważam, że byłoby fajnie mam kilka moich fajnych kontrolek w sieci (TRichView i TVirtualTree itp.) Więc moje pytanie brzmi: do każdego, kto próbował tego wcześniej, A.) Czego możemy użyć dla IDE do zakodowania tej aplikacji internetowej (ja po prostu używam emacsa, ale nikt inny w mojej firmie tego nie robi)? B.) Czy dobrym pomysłem jest łączenie PHP i Processing.JS? Wygląda na to, że używam dużo AJAX, aby coś się wydarzyło. 3 wywołuje tylko jedno okno dialogowe do wyświetlenia, 1. Wczytuje HTML okna dialogowego, 2. Wczytuje XML, aby wypełnić informacje o bazie danych w formularzu 3. Wczytuje plik processing.js PJS, który wyświetla informacje o bazie danych na kanwę . Czy trzy to dużo, czy ludzie zazwyczaj łączą wszystkie swoje partie w jedno?


title: Plik .c dedykowany do danych

text: Czy to zupełnie niespotykane, aby mieć plik `.c` poświęcony tylko danym? W moim przypadku użyłbym go do zmiennych globalnych, które są współdzielone przez dwa inne pliki `.c`. Oto konkretnie, jak go używam. // serverth.h struct parametry_serwera { struct { // w tej chwili jest to jedyna potrzebna struktura char * root, * user, * public, * site; } ścieżki; // Przewiduję, że potrzebuję tutaj innej struktury }; #ifndef SERVERTH_SOURCE extern struct parametry parametry_serwera; #endif * * * // serverth.c #define SERVERTH_SOURCE #include "serverth.h" struct serverth_parameters parameters = { .paths = { // makra są tutaj faktycznie używane "/srv", "/user", "/public" "/strona"         }     }; * * * `parameters` to struktura używana dla serwera websockets, w dwóch plikach: * Jeden dla HTTP (używa `parameters.paths.site`) * Dwa dla protokołów własnościowych (oba używają `.paths.user`, jeden używa `paths.public`) Czy to zła praktyka? Czy ludzie to robią? A może bardziej konwencjonalne jest przechowywanie danych w pliku źródłowym, w którym są one najistotniejsze?


title: Jakie są łatwe do wdrożenia systemy rusztowań?

text: Często, kiedy przedstawiam nowy projekt, potrzebuję _"szybkiego i brudnego"_ rozwiązania do zarządzania treścią. Idealnie coś, co może odczytać schemat mojej bazy danych i wygenerowane formularze HTML. Wcześniej używałem; phpMyEdit i phpMyAdmin, ale brakuje ich w kluczowych obszarach. Moja lista życzeń będzie wyglądała następująco: 1. Niezależna od bazy danych 2. Świadoma klucza obcego 3. Obsługuje widoki oraz tabele 4. Generuje nowoczesny HTML i CSS 5. Interfejs AJAX. Jaki jest twój szwajcarski scyzoryk, jeśli chodzi o CMS w projekcie?


title: Czy powinienem oczekiwać, że moi rówieśnicy będą regularnie czytać lub ćwiczyć?

text: Od jakiegoś czasu zastanawiam się nad tym pytaniem. Na podstawie kilku komentarzy, które przeczytałem w tym pytaniu, zdecydowałem, że muszę zapytać. Wydaje mi się, że mówię o rzeczach oczywistych, ale wierzę, że regularne czytanie (książek, blogów, StackOverflow, cokolwiek) i / lub praktyka są wymagane tylko po to, aby _być na bieżąco_ (nie mówiąc już o excelu) w dowolnym stosie, którego używasz do płacenia rachunków , nie wspominając o zabawie z rzeczami poza strefą komfortu, aby nauczyć się nowych sposobów robienia rzeczy. Jednak praktycznie nigdy nie widzę tego u wielu moich rówieśników. Nawet kiedy robię wszystko, aby wskazać przydatny (i prawie zawsze darmowy) materiał do nauki, dość często odczuwam całkowitą apatię od tych, z którymi rozmawiam. Posunąłbym się nawet do stwierdzenia, że jeśli ktoś nie będzie próbował się doskonalić (lub przynajmniej pozostać na bieżąco), zaniknie wraz z postępem technologii i faktycznie stanie się mniej przydatny dla firmy. Nie oczekuję, że ludzie będą spędzać godziny dziennie na nauce lub ćwiczeniach. Mam dwójkę małych dzieci i godziny praktyki są po prostu niewykonalne. Mimo to znajduję **trochę** czasu; może w pociągu, na lunchu, w łóżku przez kilka minut, cokolwiek. Jestem gotów uwierzyć, że to arogancja lub naiwność z mojej strony, ale chciałbym usłyszeć, co społeczność ma do powiedzenia. **Więc oto moje pytanie:** Czy powinienem oczekiwać (i zachęcać) tego samego od moich rówieśników, czy po prostu trzymać gębę na kłódkę i robić swoje?


title: Jak poruszać się samochodem po środowisku ze wzgórzami w C++?

text: Nie mam na to żadnego kodu, ponieważ nie wiem, jak mam to zrobić. Mam samochód i mogę nim jeździć po płaskim samolocie i to działa poprawnie. Jednak chcę, aby mógł również precyzyjnie poruszać się pod górę. Tak więc, kiedy podjeżdżam pod górę, przednie koła zaczynają się najpierw podnosić, a tylne podążają za normalnym samochodem. Do tej pory wszystko, co udało mi się zrobić, to gdy jeden punkt samochodu osiąga pochylenie, cały samochód przesuwa się do tej nowej wartości y, a nie tylko część samochodu, która powinna. Czy wymaga zastosowania jakiegoś przesunięcia i rotacji, aby reagował poprawnie?


title: Modelowanie wysoce specyficznych wymagań biznesowych

text: Jak można zabrać się za modelowanie bardzo specyficznych wymagań biznesowych, które nie mają precedensu w systemie? Weźmy na przykład następujące wymaganie: ` Gdy zamówienie zakupu zawiera N wierszy, przekracza łącznie wartość X i jest rejestrowane w projekcie Y, należy wysłać wiadomość e-mail do osób A i B ze szczegółami ` To wymaganie uzupełnia inne wymagania wokół zamówień zakupu, ale pojawia się znacznie później w odpowiedzi na jakiś bieżący problem w innym miejscu w branży. Osoby A i B nie są częścią żadnej roli ani grupy w systemie i nie ponoszą żadnej szczególnej odpowiedzialności; są to po prostu dwie osoby, które firma wyznaczyła do otrzymywania tych e-maili w tym bardzo konkretnym przypadku. Projekty są również oparte na danych, więc projekt Y nie ma specjalnych właściwości, które odróżniałyby go od innych projektów. Jedynym sposobem na jego identyfikację jest porównanie jego identyfikatora z magiczną liczbą. **Jak można modelować tego rodzaju przypadek bez wprowadzania zbyt dużej dodatkowej złożoności?** O czym teraz myślę, jest kilka opcji. 1. **Wykonaj kontrole i działania zgodnie z istniejącym kodem.** Tutaj znajdujemy właściwe miejsce w kodzie, sprawdzamy warunki w wymaganiu i wysyłamy e-maile na zakodowane adresy. Oczywiście jest to obarczone problemami. Przynajmniej przestaje działać, jeśli jedna z tych osób opuści lub zmieni swój adres e-mail. W najgorszym przypadku musisz upewnić się, że wszelkie testy i dane testowe są świadome, że podejmowane są dodatkowe działania dla określonego zestawu kryteriów. 2. **Wprowadź jakąś formę systemu zdarzeń.** Tutaj wprowadzamy system zdarzeń, abyśmy mogli zareagować na jakieś zdarzenie i spełnić wymagania poza zwykłą ścieżką wykonania. Brzmi to jak czystsze rozwiązanie niż opcja 1, ale włożona praca jest prawdopodobnie nieco przesadzona w przypadku tego jednego małego wymagania. To powiedziawszy, posiadanie go na miejscu pozwala systemowi na konsekwentną i łatwą obsługę tego rodzaju specyficznych wymagań w przyszłości. **Czy są jakieś inne (dobre/lepsze) sposoby radzenia sobie z bardzo specyficznymi wymaganiami?** Mam na myśli inne niż powiedzenie innym częściom firmy „nie”!


title: Jak zaprojektować aplikację konsolową z dobrym oddzieleniem UI od Logic

text: 1. Czy za przesadę uważa się projektowanie aplikacji konsolowych, takie jak architektura warstwowa MVC, MVP lub N? Jeśli nie, co jest bardziej powszechne i jeśli możesz mnie połączyć z prostym przykładem. 2. Chcę zaimplementować grę w kółko i krzyżyk w aplikacji konsolowej. Mam rozwiązanie, które posiada dwa projekty: `TicTacToeBusinessLogic (projekt biblioteki klas)` i `TicTacToeConsoleApplication (projekt aplikacji konsoli)` do reprezentowania logiki widoku. W `TicTacToeConsoleApplication` mam klasę `Program.cs`, która przechowuje główny punkt wejścia (`public static void Main`). Teraz mam problem. Chcę, aby gra obsługiwała własny przepływ gry, więc mogę: Utworzyć nową klasę GameManagera (`z BL`), ale powoduje to, że widok bezpośrednio zna część `BL`. Więc jestem trochę zdezorientowany, jak to napisać w akceptowalny sposób. Czy powinienem używać delegatów? Pokaż mi prosty przykład.


title: Konfiguracja MySQL do zdalnego przełączania awaryjnego

text: Projektuję niestandardowy internetowy system zarządzania zapasami i workflow dla mojego klienta. Jedna z ich zdalnych witryn ma dość niewyraźny dostęp do Internetu i nie musi mieć żadnych (lub bardzo mało) przerw w działalności, gdy ich połączenie ze wszechświatem zostanie zerwane. Obrazuję jakąś lokalną instalację aplikacji sieci Web z replikacją MySQL, która utrzymuje aktualność lokalnej bazy danych. Gdy ich połączenie z budynku nie powiedzie się, mogą ręcznie przejść do lokalnego adresu URL, który jest skonfigurowany tak, aby trafiał do ich lokalnego MySQL, i nadal działają. Pytanie brzmi, powielanie tych zmian z powrotem do prawdziwego mistrza. Znam coś takiego jak replikacja master-master, ale czy naprawdę rozbieżne tabele z synchronizacją na gorąco zostaną ponownie połączone, gdy połączenie zostanie przywrócone? Pewną pomocą jest to, że przypadek użycia zdalnej witryny jest dość wyjątkowy i prawdopodobnie (choć nie jest to gwarantowane) zapisywać tylko tabele związane z ich skrzydłem firmy. Być może mógłbym ograniczyć lokalną aplikację „tryb awaryjny” tylko do tych elementów aplikacji, które są unikalne dla ich lokalizacji, co wystarczyłoby, aby utrzymać je w biznesie. Jak byś do tego podszedł?


title: Określanie zapytania w teście jednostkowym

text: Czy podczas pisania testów jednostkowych powinienem określić zapytanie, które zostanie wykonane w celu interakcji z bazą danych? Widzę obie strony tego. Z jednej strony chcę się upewnić, że określone przeze mnie zapytanie jest wykonywane. Ale mogę sprawić, że test będzie bardziej kruchy ze względu na formatowanie zapytania. **EDYTUJ:** Zasadniczo kod byłby obiektem mapującym, który współdziała z warstwą db. Ale zastanawiam się, jak konkretny muszę być w moich interakcjach z obiektem Db. **Edycja:** Ponieważ chcę naśladować wszelkie zewnętrzne zależności do moich obiektów, podczas naśladowania mojego połączenia z bazą danych. Czy mam określić zapytanie, które ma zostać wykonane. Na przykład: testGettingUsers() { $mockDb = $this->getMockBuilder('My_DB_Connection') ->setMethods(array('query')) ->getMock(); $mockDb->expects($this->once()) ->method('query') ->with('SELECT id, name FROM USERS WHERE name = foo') ->will($this->returnValue($ dbZwrot)); Tutaj określiłem moje zapytanie jako parametr, z którym będę wywoływał moje połączenie z bazą danych. Czy to konieczne?


title: Jakich obiektów .NET należy użyć do utworzenia sesji opartej na plikach cookie w MVC?

text: Piszę niestandardową aplikację resetowania hasła, która używa techniki sprawdzania poprawności, która nie pasuje do pytań prowokacyjnych dostawcy członkostwa ASP.NET. Mianowicie muszę wywołać workflow i zebrać informacje od użytkownika końcowego (zapasowy numer telefonu, adres e-mail) po zalogowaniu się użytkownika za pomocą niestandardowego formularza. Jedynym sposobem, jaki znam, aby stworzyć sesję opartą na plikach cookie (bez zbytniej "innowacji" z mojej strony), jest użycie WIF. * Jakich innych standardowych obiektów można używać z ASP.NET MVC do tworzenia uwierzytelnionej sesji, która działa z magazynami użytkowników innych niż Windows? Idealnie mogę przechowywać informacje „role” lub żądać informacji w obiekcie sesji, takie jak „admin”, „departmentXadmin”, „normalUser” lub „restrictedUser” * * * Przepływ pracy wyglądałby tak: 1. Użytkownik loguje się za pomocą nazwy użytkownika i hasło 2. Jeśli nazwa użytkownika i hasło są poprawne, tworzona jest sesja oparta na (bezstanowych) plikach cookie 3. Użytkownik zostaje przekierowany do formularza HTML, który pozwala mu wprowadzić swój zapasowy numer telefonu (w przypadku SMS dual factor) lub zatwierdzić go, jeśli już ustawić. 4. Użytkownik może następnie zmienić swoje hasło za pomocą udostępnionego formularza „Zapomniałem hasła” wyglądałoby tak 1. Użytkownik prosi o przesłanie kodu OTP na telefon 2. Użytkownik loguje się przy użyciu nazwy użytkownika i OTP 3. Czy hasło OTP jest prawidłowe i nie wygasły, a następnie utwórz sesję opartą na plikach cookie i przekieruj do formularza umożliwiającego zresetowanie hasła 4. Pokaż formularz resetowania hasła i przetwórz wyniki.


title: Jak wykonać kopię zapasową danych i obrazów w tym projekcie?

text: Mam projekt bazy danych MS C# i MS SQL 2008. Może przechwytywać rekordy pracowników ze zdjęciami ponad 1000 rekordów. Obecnie jestem w stanie przechwycić powiedzmy 150 rekordów na PC1 za pomocą mojej zainstalowanej aplikacji C#, zapisać rekordy w formacie pliku XML lub CSV. Moi znajomi mogą kontynuować rejestrację lub wchodzić (tj. od 151 do 1000) po przywróceniu lub przesłaniu informacji zawartych w tym pliku XML lub CSV przy użyciu innej kopii mojej aplikacji C# zainstalowanej na ich laptopach w innej lokalizacji. 1. W jaki sposób zawartość może być ukryta lub zablokowana przed przeglądaniem jej zawartości przez użytkownika, z wyjątkiem odczytu lub zapisu mojej aplikacji C# (niekoniecznie w formacie XML lub CSV)? 2. Jeśli nadal używam tego samego XML lub CSV, jak mogę skompresować plik do mniejszych rozmiarów?


title: Jaki jest czysty sposób przekazywania mojego LoginContext przez warstwy do warstwy dostępu do danych?

text: Odziedziczyłem API zaimplementowane przy użyciu ASP.NET WebApi 2. Akcje na kontrolerach są następujące: obiekt publiczny Get(long id) { LoginContext loginDetails = GetLoginDetails(); if (LoginDetails.IsAuthorised) { return _dependency.DoSomething(LoginDetails, id); } zwróć nowe HttpResponseMessage(HttpStatusCodes.Unauthorised); } Klasa `_dependency` będzie miała wiele metod, wszystkie z podobnymi sygnaturami, i będzie miała własne zależności, które również będą używać klasy `LoginContext`, aż w końcu dojdziesz do dna stosu wywołań w warstwie dostępu do danych, gdzie faktycznie używana jest klasa `LoginContext`. Zależności są obecnie wstrzykiwane do konstruktora przez kontener IoC. Tak więc jest tu wiele problemów, które mnie niepokoją - powtarzające się sprawdzanie w każdej akcji kontrolera, do której użytkownik jest autoryzowany, oraz potrzeba posiadania `LoginContext` dla każdej metody każdej zależności, do której odwołuje się gdziekolwiek kontroler. Teraz w pierwszym przypadku stworzyłem filtr akcji, który obsługuje uwierzytelnianie i zapisuje niestandardową tożsamość (zawierającą szczegóły `LoginContext`) z powrotem do `HttpContext`. Pozostaje więc sedno mojego pytania — jaki jest najlepszy sposób na przekazanie mojego „LoginContext” przez warstwy do warstwy dostępu do danych? **AKTUALIZACJA:** dla wyjaśnienia, w odpowiedzi na niektóre z poniższych pytań, samo uwierzytelnianie nie jest sprawdzane przez warstwę dostępu do danych (chociaż warstwa biznesowa oczywiście będzie postępować inaczej w zależności od oświadczeń autoryzacyjnych rozmówcy); ale raczej przekazujemy dane zebrane podczas procesu uwierzytelniania do warstwy dostępu do danych, gdzie są one następnie wykorzystywane do uzyskiwania dostępu do określonych zasobów lub do problemów związanych z infrastrukturą, takich jak audyt. Problem jednak nadal pozostaje, czy każda metoda mojej warstwy biznesowej i każda metoda mojej warstwy danych powinna przyjmować LoginContext jako jeden z parametrów, czy są lepsze sposoby?


title: Czy można kpić z wielu obiektów w jednej klasie?

text: Dla programistów z dużym doświadczeniem w używaniu mocków, **czy można mockować wiele obiektów w jednej klasie (tj. Zadowolić wiele interfejsów), czy nie jest to zalecane?** Zastanawiam się, ponieważ mocki i tak są skrótami, z perspektywy testowania nie Wydaje się, że nie robi wielkiej różnicy, jeśli skonsoliduję kpiny. Zastanawiam się jednak, czy istnieją negatywne skutki POV utrzymania/klarowności.


title: Jaka jest najlepsza strategia szybkiego wdrażania aplikacji dla małych firm?

text: Nie jestem programistą, ale wcześniej opracowałem aplikację Access specyficzną dla projektu dla innego pracodawcy. Mój obecny pracodawca chciałby, abym pomógł zorganizować ich przepływ pracy i dane w nadchodzącym projekcie, a ja rozważałem ponowne użycie programu Access. W poprzednich projektach pracownicy wykorzystywali duże stosy arkuszy kalkulacyjnych Excel; teraz chcieliby uporządkować swoje dane, a także zautomatyzować niektóre procesy. Odkryłem, że trudno jest tworzyć formularze w programie Access, które są przyjemne i użyteczne, ze względu na ograniczoną kontrolę nad formularzami. Czy istnieją lepsze opcje szybkiego tworzenia aplikacji biznesowych, takich jak MS LightSwitch, Delphi lub .NET? Zespół, który będzie korzystał z aplikacji jest niewielki – mniej niż pięciu użytkowników.


title: Czy ścieżka w adresie URL Set-Cookie jest zakodowana?

text: Piszę kod, który ustawia ciasteczka i zastanawiam się nad dokładną semantyką nagłówka `Set-Cookie`. Wyobraź sobie następujący wiersz nagłówka HTTP: Set-Cookie: name=value; Path=/%20 Dla z path czy to ustawia ciasteczko? `/` lub `/%20`(bez zmiany znaczenia) (`/%20` lub `/%2520` ze zmianą znaczenia)? Powodem, dla którego pytam, jest to, że powinienem obsługiwać ścieżki inne niż ASCII. Ponieważ nagłówek HTTP musi być tylko ASCII, mój plan polegał na tym, aby adres URL ucieczki od wartości ścieżki, ale specyfikacja HTTP nie była tak jasna, jak się spodziewałem. **Edytuj** Wiem, co ma zrobić Ścieżka. Moje pytanie brzmi: czy wartość jest interpretowana jako zakodowana w procentach, czy nie?


title: App Store: Dlaczego zapłaciłem mniej niż podano w iTunes Connect?

text: Ok, więc nie jest to pytanie programistyczne ... ale jest bardzo istotne dla wszystkich programistów Apple spoza USA. - Zasadniczo iTunesConnect podaje moją ostatnią płatność jako 248 NZ (mieszkam w NZ, podpisałem podstawową umowę podatkową w USA, która mówi, że nie mieszkam w USA). Płatność, którą niedawno otrzymałem na moje konto bankowe, wyniosła 221 USD. To około 10% różnicy, może z powodu jakiegoś podatku? Miałem jednak wrażenie, że nie powinienem być opodatkowany i że to do mnie należy zadeklarowanie i zapłacenie podatku we własnym kraju. - A więc dla innych deweloperów iOS spoza USA - czy widzisz tę 10% różnicę - jeśli tak, to dokąd trafia te 10% (NZ, USA czy mój bank?). Jeśli nie, co robię źle i jak mam to robić? Każda pomoc jest mile widziana! Dziękuję :)


title: Wersjonowane zasoby w celu poprawy buforowalności

text: Oto koncepcja API, która może być przydatna do optymalizacji wydajności. Jest to przykład wygaśnięcia pamięci podręcznej opartej na kluczach, stosowanego do szerszego kontekstu internetowego zamiast wewnętrznego scenariusza w stylu Memcached, do którego wydaje się być najczęściej używany. Chcę, aby wywołania API były prawie tak samo buforowalne jak obrazy statyczne. Używając jako przykładu subskrybenta wiadomości/kanału, który możemy odpytywać co godzinę, pomysł polega na przesłaniu wraz z każdym tematem ostatniej aktualizacji znacznika czasu (może to być równie dobrze numer wersji lub suma kontrolna): { nazwa użytkownika: "Wendy" , topics: [{ name: "tv", updated: 1357647954355 }, { name: "movies", updated: 1357648018817 }, { name: "music", updated: 1357648028264 }] } Żeby było jasne, ten zasób pochodzi bezpośrednio z serwera za każdym razem i nie jest buforowany na brzegu lub przez klienta. To nasze kolejne wezwania do tematów, które możemy agresywnie buforować, dzięki znacznikowi czasu. Zakładając, że chcemy zsynchronizować wszystkie tematy, mielibyśmy „N” dalszych wywołań do wykonania w naiwnej implementacji (`/topics/tv` itp.). Ale ze względu na sygnaturę czasową możemy utworzyć adres URL, taki jak `/topics/tv/1357647954355.json`. Klient zwykle w ogóle nie wykonuje połączenia, jeśli już widział (i buforował) tę samą wersję tego zasobu. Co więcej, nawet jeśli jest to nowość dla klienta, pamięć podręczna krawędzi (np. odwrotny serwer proxy, taki jak Squid, Varnish lub usługa taka jak Cloudflare) prawdopodobnie _widział_ go już wcześniej, ponieważ inny użytkownik prawdopodobnie już otworzył najnowszą wersję tego tematu. Więc nadal omijamy serwer aplikacji; serwer tworzy temat JSON tylko raz po zaktualizowaniu zasobu bazowego. Więc zamiast N+1 wywołań do serwera, klient prawdopodobnie wykonuje znacznie mniejszą liczbę wywołań, a te wywołania i tak rzadko trafiają na serwer aplikacji. **Teraz dla mojego pytania** Wszystko to wydaje się wykonalne i warte zrobienia, ale moje pytanie brzmi, czy istnieje jakakolwiek wcześniejsza technologia dla tego rodzaju rzeczy, a w szczególności jakiekolwiek standardy HTTP, które je obsługują. Początkowo myślałem o warunkowym buforowaniu (ETags i zmodyfikowane daty) i myślę, że pomogłyby one w dalszej optymalizacji tej konfiguracji, ale nie wierzę, że są one odpowiedzią. Są one nieco inne, ponieważ wymagają przekazania wywołań do serwera aplikacji w celu sprawdzenia, czy coś się zmieniło. Pomysł polega na tym, że klient mówi „Już znam najnowszą wersję, proszę, odeślij mi ten zasób”. Nie sądzę, że istnieje jakikolwiek standard HTTP, dlatego proponuję schemat URL, taki jak /topics/tv/1357647954355.json zamiast jakiegoś nagłówka podobnego do ETag. Uważam, że niektóre sieci CDN działają w ten sposób i jest dla mnie zaskakujące, jeśli nie ma wokół nich prawdziwego standardu HTTP. **Aktualizacja:** Po zastanowieniu, ważnym szczególnym przypadkiem jest to, co robi przeglądarka internetowa, gdy pobiera nową stronę HTML. Wiemy, że natychmiast zażąda CSS+JS, więc ta sama sztuczka dotycząca wersjonowania/sygnatury czasowej może być użyta, aby zapewnić, że te statyczne zasoby są przyjazne dla pamięci podręcznej. To, że ta sztuczka nie została sformalizowana przez specyfikację, daje mi pewność, że niestety nie ma dla niej standardu HTTP. http://www.particletree.com/notebook/automatically-version- your-css-and-javascript-files/


title: Kwartał fiskalny a kwartał kalendarzowy

text: Tworzę klasę daty/godziny z systemem "konfigurowalnego kwartału" w następujący sposób. * Użytkownik określa, w którym miesiącu rozpoczyna się kwartał (konfiguracja) * Zestaw funkcji do obsługi kwartałów (następny kwartał, poprzedni kwartał, itd.) * Wszystkie funkcje kwartału uwzględniają konfigurację Teraz ta klasa jest głównie używana do obliczeń kwartałów fiskalnych. Zakładając więc, że mam tę klasę z konfigurowalnym systemem „kwartałowym”, czy potrzebowałbym również innego równoległego zestawu funkcji dla kwartałów kalendarzowych? Jakie są aplikacje na kwartały kalendarzowe? Przez kwartały kalendarzowe rozumiem, gdzie Q1 to styczeń-marzec, a Q4 to październik-grudzień. Przez kwartały podatkowe rozumiem dowolny standard stosowany w Twoim kraju (w Indiach I kwartał rozpoczyna się w kwietniu)


title: Użyć szablonu, aby uzyskać alternatywne zachowanie?

text: Czy to zła praktyka? const int sId(int const id); // prawda/fałsz to nie ma znaczenia template<bool i> const int sId(int const id) { return this->id = id; } const int MCard::sId(int const id){ karta MCard = *to; to->id = identyfikator; this->onChange.fire(EventArgs<MCard&, MCard&>(*ta, karta)); zwróć to->id; } mojaKarta.sId(9); mojaKarta.sId<prawda>(8); Jak widać, moim celem jest stworzenie alternatywnego zachowania dla sId. Wiem, że mógłbym użyć drugiego parametru do funkcji i użyć if, ale jest to bardziej zabawne (imo) i może uniemożliwić przewidywanie gałęzi (nie jestem ekspertem w tej dziedzinie). Czy jest to zatem prawidłowa praktyka i/lub czy istnieje lepsze podejście?


title: Dynamiczne generowanie zapytań: sugestia lepszego podejścia

text: Obecnie projektuję funkcjonalność w mojej Aplikacji Webowej, w której zweryfikowany użytkownik aplikacji może wykonywać żądane przez siebie zapytania z predefiniowanego zestawu zapytań z klauzulą WHERE zmienną według wyboru użytkownika. Na przykład, tabela ABC zawiera następujące zapytanie szablonu o nazwie SecretReport "Wybierz def jako FOO, ghi jako BAR z MNO gdzie " SecretReport może mieć parametry XYZ, ILP. Znowu XYZ może mieć wartości 1,2, a ILP 3,4, więc jeśli użytkownik wybierze ILP=3, otrzyma na ekranie wynik następującego zapytania "Wybierz def jako FOO, ghi jako BAR z MNO gdzie ILP =3" Ponownie, użytkownik może dokonywać permutacji XYZ/ILP Moją pierwszą myślą jest to, że użytkownikowi zostanie pokazana lista nazw raportów, a każdy raport będzie miał parametry i odpowiadające im wartości. Ale to podejście, choć technicznie proste, nie wydaje się intuicyjne. Chciałbym rozszerzyć tę funkcjonalność na bardziej ogólny poziom. Tak, aby użytkownik mógł wybrać tabelę i zapytanie na podstawie swoich wymagań. Oczywiście nie chcemy, aby użytkownik końcowy przejął pełną kontrolę nad DB. Ale tylko tabele i pola, które są dla niego istotne. Obecnie definiujemy, co jest istotne w kodzie. Ale chcę, aby administrator przejął tę funkcję, aby mógł decydować, co jest istotne i udostępniać to użytkownikowi. Po stronie użytkownika powinno być intuicyjne, co jest dla niego dostępne i jakie zapytania może tworzyć. Podziel się swoimi przemyśleniami, jaki jest najbardziej przyjazny dla użytkownika sposób udostępnienia tej funkcji użytkownikowi końcowemu.


title: Jak skupiasz się na długich kompilacjach?

text: Uważam, że jest to dość proste, skoncentruj się na zadaniu, podczas gdy jestem aktywnie zaangażowany w to, jednak podczas długiej kompilacji (a nasz obecny główny projekt może skompilować się w 5-10 minut w zły dzień), moje skupienie będzie dryfować. Zacznę zwlekać, sprawdzić sieć, porozmawiać z kimś, zacząć myśleć o czymś innym i po prostu ogólnie tracę uwagę i zdaję sobie sprawę, że kompilacja skończyła się jakiś czas temu i straciłem tok myślenia lub, co gorsza, dużo czasu. To szkodzi mojej produktywności i chociaż nikt o tym nie wspomniał, myślę, że to nawyk, który powinienem przestać. Wypróbowałem generatory białego szumu (genialne, podczas gdy mam na czym się skupić), zamykając moje połączenie internetowe i tym podobne, jednak przez długie kompilacje, co mogę zrobić zamiast gapić się na monitor? Jakich sztuczek lub wskazówek można użyć, aby zachować koncentrację bez spędzania dużej ilości dnia na rozpoczynaniu kompilacji z nudów, tylko po to, aby nie przegapić jej dokończenia? Poczekaj, moja kompilacja zepsuła się 10 minut temu ... :) Wreszcie, jestem prawie pewien, że to pytanie nie jest tego oszustwem, ponieważ mówię konkretnie o czasach kompilacji, a nie o braku motywacji. Piłkarzyki to nie opcja, a raczej problem :) **EDYTUJ** Ludzie, którzy próbują napawać się wybranym przez siebie językiem, kompilując szybciej, tak naprawdę nie pomagają, ani nie są szczególnie zabawni. W każdym razie dzięki.


title: Doświadczenie z podobnymi technologiami: przekonujące osoby z działu HR?

text: Załóżmy, że ogłoszenie o pracę wymaga doświadczenia w technologii X. Nie masz doświadczenia w X, ale masz doświadczenie w technologii Y, które według Ciebie jest na tyle podobne, że krzywa uczenia się, aby być produktywnym w X, byłaby niezwykle krótka. Jak sprawić, by zatrudnianie ludzi, zwłaszcza HR bez dużego przygotowania technicznego, przeszło przez twój brak doświadczenia w X i potraktowało cię poważnie? Przykłady: * Ubiegasz się o pracę w Javie i nigdy nie używałeś Javy, z wyjątkiem bardzo małych projektów zabawek. Masz jednak spore doświadczenie w języku C#, który jest wyraźnie pochodną Javy i promuje ten sam styl programowania (OO oparte na klasach, statyczne pisanie, autoboxing itp.) * Ubiegasz się o pracę w C. Nigdy nie pracowałeś nad czymkolwiek napisanym w prostym C, ale wykonałeś znaczną pracę w C++ i użyłeś podzbioru podobnego do C (surowe wskaźniki, zarządzanie pamięcią malloc/wolną, wskaźniki void*, itp.) dla niektórych poziomowe części projektu. * Ubiegasz się o pracę w C++ i wykonałeś obszerną pracę w D. D ma być przeprojektowaniem C++ i zawiera kluczowe pojęcia, takie jak RAII, szablony, możliwość ręcznego zarządzania pamięcią i wykonywania pracy na niskim poziomie , itp. Co więcej, dzięki obszernym dyskusjom na temat projektowania języka w społeczności D wiesz dokładnie, gdzie leżą różnice. Edycja: Myślę, że moje bardziej podstawowe pytanie, które zainspirowało ten post, brzmi: „Dlaczego większość ogłoszeń o pracę kładzie tak duży nacisk na konkretne technologie (które nie są trudne do nauczenia się w locie, jeśli zrozumiesz podstawowe pojęcia) zamiast na podstawowy język- umiejętności agnostyczne?” Gdybym prowadził sklep z językami X, wolałbym zatrudnić najwyższej klasy programistę, niezależnie od konkretnych technologii, i założyć, że nauczy się X dość szybko, niż zatrudnić eksperta od X, który miał przeciętne podstawowe, niezależne od języka umiejętności programowania.


title: Tłumaczenie między Pythonem-Django i Javascript

text: Mam pytanie koncepcyjne dotyczące „tłumaczenia” między obiektami, które przechowuję w Django (w Postgresie), których chcę użyć na interfejsie. Mam więc obiekt użytkownika w Pythonie, który przechowuje podstawowe rzeczy: identyfikator, nazwę użytkownika, hasło. Powiedzmy, że chcę wyświetlić wszystkie te informacje za pomocą JavaScript po stronie klienta. Czy mogę po prostu dać JS obiekt Pythona, a zmieni go w obiekt JS? Wiem, że JS jest znany z tego, że jest „szybki i luźny” w pisaniu, ale wydaje się to po prostu absurdalne! Nie szukam składni, ale tylko przegląd tego, jak to działa. Czy mogę umieścić obiekty Pythona w żądaniach AJAX, a następnie przetłumaczyć je po stronie klienta, czy też będzie to podstawowy podział rzeczy po stronie serwera, wysłać je i ponownie połączyć po stronie klienta?


title: Poszukuję algorytmu łączenia kropek - najkrótsza trasa

text: Napisałem program do rozwiązywania specjalnej zagadki, ale teraz utknąłem w następującym problemie: mam około 3200 punktów/węzłów/kropek. Każdy z tych punktów jest połączony z kilkoma innymi punktami (zwykle 2-5, teoretyczna granica to 1-26). Mam dokładnie jeden punkt początkowy i około 30 punktów wyjścia (prawdopodobnie wszystkie punkty wyjścia są ze sobą połączone). Wiele z tych 3200 punktów prawdopodobnie nie jest w żaden sposób połączony ani z punktem początkowym, ani końcowym, jak oddzielna sieć, ale wszystkie punkty są połączone z co najmniej jednym innym punktem. Muszę znaleźć jak najkrótszą liczbę przeskoków od wejścia do wyjścia. Nie ma odległości między punktami (w przeciwieństwie do problemu z trasami drogowymi lub kolejowymi), liczy się tylko liczba przeskoków. Muszę znaleźć wszystkie rozwiązania z najmniejszą liczbą przeskoków, a nie tylko jedno rozwiązanie, ale wszystkie. I potencjalnie również rozwiązania z jeszcze jednym przeskokiem itp. Spodziewam się rozwiązania z około 30-50 przeskokami od początku do końca. Próbowałem już: 1) losowo próbując możliwości i zaczynać od nowa, gdy liczba była większa niż w poprzednim rozwiązaniu. Dostałem pierwsze rozwiązanie z 3500 przeskokami, potem po kilku minutach spadło do około 97, ale patrząc na rozwiązania, widziałem problemy, takie jak niepotrzebne pętle i takie tam, więc spróbowałem trochę zoptymalizować (jak nie wracać tam, skąd się wzięło itp. .). Możliwe są dalsze optymalizacje, ale ta losowa rzecz nie znajduje wszystkich najlepszych rozwiązań lub trwa zbyt długo. 2) Rekursywnie biegać przez wszystkie drogi od początku (jak problem szachowy) i przerywać próbę, gdy osiągnęła poprzedni punkt. To było zapętlone na około 120 węzłach, więc próbuje łańcuchów, które są (prawdopodobnie) zdecydowanie za długie. Jeśli policzymy 4 możliwości i 120 węzłów, dochodzimy do 1,7E72 możliwości, których nie da się obliczyć. Nazywa się to przeszukiwaniem według głębokości (DFS), jak się w międzyczasie dowiedziałem. Może powinienem spróbować wyszukiwania wszerz, dodając kolejkę? Połączenia między punktami to w rzeczywistości ruchy, które możesz wykonać w grze, a punkty to sposób, w jaki gra wygląda po wykonaniu ruchu. Jaki byłby algorytm do rozwiązania tego problemu? Używam C#.NET, ale język nie powinien mieć znaczenia.


title: Czy należy odrzucić projekty o nadmiernym zakresie?

text: Rozmawiałem dzisiaj z moim pierwszym potencjalnym klientem, który opowiedział mi o wymaganiach swojego projektu – aplikacji na Androida. Jest znanym projektantem / fotografem w moim kraju i teraz chce, abym „przekształcił witrynę w aplikację dostosowaną do potrzeb”. Tak więc wymagania, pozbawione szczegółów, są następujące: * eCommerce * Agregacja wszystkich treści, takich jak filmy, blogi, tweety itp. do aplikacji * Transmisja na żywo dowolnego z jego studyjnych wersji demonstracyjnych * Rzeczywistość rozszerzona. Aby ludzie mogli zobaczyć, jak jego obraz będzie wyglądał na ścianie, zanim go kupią * Udostępnianie taksówek Teraz, w przypadku projektu freelancera, wydaje się, że jest zbyt obszerny. Nie mówię, że nie mogę tego zrobić. Mogę. Ale pozwól, że będę realistą: * Krzywa uczenia się, jeśli chodzi o VR, jest stroma. * Nie jestem testerem. Nigdy nie testowałem własnych aplikacji w białych skrzynkach. Zawsze testuję na czarno. * Ponieważ jest znanym artystą, coś niedoskonałego _może_ zaszkodzić jego publicznemu wizerunkowi Więc poprosiłem go o 2 tygodnie czasu, zanim udzielę mu ostatecznej odpowiedzi. Teraz wiedząc, z kim się skonsultować w celu uzyskania porady, zamieszczam tutaj pytanie. Chociaż jest to interesujące i osobiście trudne, jestem rozdwojony, jeśli chodzi o akceptację takiego projektu. Będę w tym **jedynym programistą**. **Czy należy odrzucić projekt, który wydaje się wykraczać poza własne możliwości?**


title: Jak modelować wiele do wielu z perspektywy DDD w UML?

text: Mam dwa obiekty encji Witryna i Klient, w których istnieje relacja wiele do wielu. Czytałem, że starasz się nie modelować tego w DDD, tak jak w modelu danych, i wybierasz przepływ jednokierunkowy. Gdybym chciał pokazać to w UML, czy pokazałbym to tak, jak jest w modelu danych: `Site * ----->*Klient`, ale strzałka kierunku daje przepływ? lub w następujący sposób `Serwis ----->*Klient` Ale wtedy oznaczałoby to, że Klient może przejść tylko w jednej witrynie.


title: Jak zmierzyć jakość moich przypadków użycia?

text: Kiedy coś koduję, wiem, że istnieje wiele sposobów na sprawdzenie, czy mój kod jest dobry, czy nie. Pierwszym z nich jest testowanie: mogę wykonać testy jednostkowe, a nawet samemu przetestować oprogramowanie i zobaczyć, czy działa, czy nie. Po uruchomieniu, mogę przeanalizować sprzężenie kodu i tak dalej, aby dokonać refaktoryzacji i ulepszenia. W tym sensie jestem pewny siebie podczas kodowania, ponieważ mam sposób, aby wiedzieć, czy to, co zrobiłem, działa, czy nie, i sposoby na lepsze myślenie, jeśli to nie działa. Podczas projektowania oprogramowania mam jednak głównie trudności z analizą, czy pisane przeze mnie przypadki użycia są dobre, czy nie. Czytałem wiele teorii na temat przypadków użycia, ale praktyka jest trochę trudna, ponieważ zawsze zadaję sobie pytania takie jak: „czy to powinno być uwzględnione? czy to konieczne, aby tu powiedzieć? czy czegoś nie brakuje?” i tego typu rzeczy. Jak więc „przetestować” moje przypadki użycia? Skąd mam wiedzieć, czy są dobrze napisane, czy nie? Wiem, że w iteracyjnym podejściu OOAD nie staramy się zrobić tego poprawnie w pierwszej iteracji, jednak powinno zawierać przynajmniej dokładne informacje, abym mógł zacząć kodować, i nie wiem teraz, jak dowiedzieć się, czy zawiera te informacje.


title: Klasa wektora C# — decyzja projektowa dotycząca interpolacji

text: Obecnie pracuję nad klasą wektorową w C# i teraz dochodzę do punktu, w którym muszę wymyślić, w jaki sposób chcę zaimplementować funkcje do interpolacji między dwoma wektorami. Na początku wymyśliłem implementację funkcji bezpośrednio do klasy wektorowej... public class Vector3D { public static Vector3D LinearInterpolate(Vector3D vector1, Vector3D vector2, double factor) { ... } public Vector3D LinearInterpolate(Vector3D other, double factor { ... } } (zawsze oferuję zarówno metodę statyczną z dwoma wektorami jako parametrami i jednym niestatycznym, z tylko jednym wektorem jako parametrem) ...ale potem wpadłem na pomysł wykorzystania metod rozszerzających (zdefiniowanych w osobnym na przykład o nazwie "Interpolacja"), ponieważ interpolacja nie jest tak naprawdę rzeczą dostępną tylko dla wektorów. Więc może to być inne rozwiązanie: public class Vector3D { ... } public static class Interpolation { public static Vector3D LinearInterpolate(ten wektor Vector3D , Vector3D other, double factor) { ... } } Oto przykład wykorzystania różnych możliwości: { var vec1 = nowy Vector3D(5, 3, 1); var vec2 = nowy Vector3D(4, 2, 0); Vector3D vec3; vec3 = vec1.LinearInterpolate(vec2, 0.5); //1 vec3 = Vector3D.LinearInterpolate(vec1, vec2, 0,5); //2 //lub z metodami rozszerzającymi vec3 = vec1.LinearInterpolate(vec2, 0.5); //3 (tak samo jak 1) vec3 = Interpolation.LinearInterpolation(vec1, vec2, 0.5); //4 } Więc naprawdę nie wiem, który projekt jest lepszy. Nie wiem też, czy istnieje ostateczna zasada dla takich rzeczy, czy chodzi tylko o to, co ktoś osobiście woli. Ale bardzo chciałbym usłyszeć Wasze opinie, co jest lepsze (i jeśli to możliwe dlaczego ).


title: Czy OpenMp obsługuje przetwarzanie wieloprocesorowe w czasie rzeczywistym?

text: Pracuję nad algorytmem szeregowania wieloprocesorowego w czasie rzeczywistym. Znalazłem bardzo niewiele wyników za pośrednictwem badań google związanych z tym. Dostępnych jest kilka symulatorów, ale nie są one wystarczająco solidne. OpenMp to API, którego wcześniej używałem do tworzenia małych aplikacji równoległych. Ale nie jestem pewien, czy zapewnia wsparcie dla obliczeń równoległych w czasie rzeczywistym, które obejmują parametry związane z czasem, takie jak okres zadania, termin itp. Czy te funkcje są dostępne w OpenMp? Jeśli nie, czy dostępne są podstawy, abym mógł zamiast tego rozszerzyć OpenMp?


title: Jak dziedziczyć po dwóch klasach rodzicielskich

text: Mam wiele klas z wieloma relacjami Uml rysuję tę relację między nimi: > ![tutaj wstaw opis obrazka](http://i.stack.imgur.com/tw1H9.jpg) Czy ta relacja jest prawdziwa i jak ją zaimplementować?


title: Jak chronione jest główne oprogramowanie?

text: Jestem nowym programistą i chcę sprzedawać swoje oprogramowanie. Niedawno zdałem sobie sprawę, że z kodu C++ nie możemy powstrzymać użytkownika przed zobaczeniem części kodu, które są związane ze skryptami lub poleceniami systemowymi. Czy mógłbyś skomentować, w jaki sposób oprogramowanie napisane w C++/JAVA (dystrybuowane na CD-ROM-ach lub dostępne do pobrania) jest chronione przed inżynierią wsteczną, skanerami, gdy kod znajduje się w pamięci i bezpośrednimi kopiami części (jako polecenia systemowe). Co powinna zrobić mała firma programistyczna, która dopiero zaczyna produkować oprogramowanie, aby chronić swój produkt z technologicznego punktu widzenia (nie powinna być w stanie uiszczać opłat prawnych…)?


title: Czy przyznanie nowym rekrutom osobnego podprojektu od doświadczonych programistów pomoże nowicjuszom szybciej rozwinąć skrzydła?

text: Mamy w zespole 7 programistów i musimy w krótkim czasie (około miesiąca) podwoić tempo rozwoju. Wiem, że istnieje zdroworozsądkowa zasada, że „jeśli zatrudnisz więcej programistów, stracisz produktywność tylko przez pierwsze kilka miesięcy”. Projekt jest serwisem internetowym e-commerce i ma około 270 tys. linijek kodu. Na razie moim pomysłem jest podzielenie projektu na dwa mniej lub bardziej niezależne podprojekty i umożliwienie nowemu zespołowi pracy nad mniejszym z dwóch podprojektów, podczas gdy obecny zespół pracuje nad głównym projektem. Mianowicie nowy zespół będzie pracował nad funkcjonalnością kasy, która ostatecznie stanie się niezależną usługą internetową w celu zmniejszenia sprzężenia. W ten sposób nowy zespół pracuje nad projektami zawierającymi tylko 100 tys. linii kodu. Moje pytanie brzmi: czy takie podejście pomoże początkującym programistom łatwo dostosować się do nowego projektu? Jakie są inne sposoby na szybkie rozszerzenie zespołu programistów bez czekania dwóch miesięcy, aż nowicjusze zaczną produkować więcej oprogramowania niż błędów?


title: Korzystanie z pliku binarnego z projektu, który narusza GPL

text: Istnieje projekt open source, który wykorzystuje GPLv2. Miał wiele wydań, które były zgodne z GPL w przeszłości, gdzie kod źródłowy był dostępny dla danych plików binarnych. Najnowszy kod źródłowy ma około 18 miesięcy i jest nazywany ostatnim "oficjalnym wydaniem". Od tego czasu "ostatnia wersja" OSeda, dalszy rozwój został wykonany przez jednego głównego programistę. Dodano funkcje i wyraźnie widać, że kod musiał zostać zmieniony. Główny programista posiada tylko część praw autorskich do całego pakietu (nie jest to w 100% jego dzieło, projekt powstał jako rozwidlenie innego projektu na GPL). Nazwijmy ciągły rozwój gałęzią TRUNK. Problem polega na tym, że najnowszy rozwój jest wykonywany jako zamknięte źródło i **tylko binaria są dystrybuowane dla gałęzi TRUNK, a żaden kod źródłowy** nie został jeszcze ujawniony. Chociaż najprawdopodobniej jest to naruszenie GPL i samo w sobie jest złą rzeczą, nie przeszkadza mi to (nawet tak, jak powinienem), ponieważ chcę używać plików binarnych TRUNK. Moje pytanie brzmi - **jaki jest status prawny takich plików binarnych TRUNK**, które nie mają dostępnego dla nich źródła? Czy są one w jakiś sposób przygotowane? Chcę używać plików binarnych w moim projekcie, który sam jest open source, ale pliki binarne byłyby używane w samodzielnej jednostce roboczej, która jest używana tylko do pozyskiwania danych, więc najprawdopodobniej i tak nie będę musiał modyfikować niedostępnego kodu źródłowego TRUNK.


title: Cel folderu csx w projektach platformy Azure?

text: Jestem całkiem nowy na platformie Azure, ale zauważyłem, że Visual Studio automatycznie tworzy następujące foldery (między innymi) ... /<nazwaProjektuAzure>/bin /<nazwaProjektuAzure>/obj /<nazwaProjektuAzure>/csx <== ... Teraz foldery bin i obj są dość standardowe. Ale nie mam jasności co do przeznaczenia folderu **csx**. Jakieś pomysły?


title: Jak byś się czuł, gdyby edytor kodu sformatował kod podczas pisania, bez tabulatorów/spacji?

text: Jak w przypadku większości rzeczy, jestem pewien, że ta koncepcja została już wypróbowana – po prostu nie spotkałem się z edytorami, które używają tego, co nazwałem „wirtualnym formatowaniem”. Zasadą jest to, że istnieje pływający lewy margines, który symuluje efekt dopełniania znaków spacji/tabulatorów, które są konwencjonalnie wstawiane przez programistę lub sam edytor w celu sformatowania kodu. Edytor nieprzerwanie analizuje kod (nawet gdy jest skomentowany) podczas pisania i oblicza wymagane wcięcie na podstawie kontekstu, w którym znajduje się każdy wysuw wiersza Rozwijam ten pomysł, pracując konkretnie z edytorem XML, ponieważ XML ma pewne specyficzne problemy z formatowanie znaków i zwykle jest mocno zagnieżdżone, jednak uważam, że wiele zasad nadal obowiązuje dla konwencjonalnego kodu. Czy miałeś do czynienia z kodowaniem takim narzędziem lub masz pogląd na to, czy pomogłoby, czy utrudniło? Czy spowodowałoby to problemy z systemami kontroli wersji? (wykrywa i usuwa wszystkie istniejące znaki wypełniające) Jeśli tego nie wypróbowałeś, zachowanie takiego narzędzia jest trudne do opisania, wygląda konwencjonalnie, dopóki nie zaczniesz edycji. Umieściłem film z screencastem pokazujący prototyp w akcji, który demonstruje edycję XML, zmianę jego hierarchii i wykonywanie operacji przeciągania/upuszczania oraz kopiowania i wklejania, a następnie, jak formatowanie jest zepsute/naprawione, gdy wpisywane są nieprawidłowe znaki. **Edytuj** Wszystkie odpowiedzi/komentarze do tej pory były negatywne – więc próbując przywrócić równowagę, warto pomyśleć o kilku zaletach wirtualnego formatowania: * Koniec z debatami na temat standardów formatowania, po prostu umieść wysuwy wiersza tam, gdzie jest to zgodne z Twoimi oczekiwaniami. wybrana/obowiązkowa konwencja * Tam, gdzie przestrzeń jest na wagę złota (w książce/blogu/dokumentacji) możesz zawijać słowa, ale nadal uzyskujesz idealne wcięcie * Każdy blok kodu może mieć „uchwyt myszy” bezpośrednio przylegający do miejsca, w którym się zaczyna, nie ściśnięte na krawędzi ekranu - kliknij to, aby zaznaczyć cały blok lub blok wewnętrzny * Przeciągnij, upuść i zapomnij - staje się wykonalne po raz pierwszy * Brak czasu spędzonego na ponownym formatowaniu kodu innych ludzi * Brak nieprawidłowo sformatowanego kodu (w tym sensie nie ma — tylko renderowanie) * Używanie Backspace zamiast Ctrl+Backspace pozwala trzymać palce na klawiszach prowadzących na klawiaturze * Elastyczne renderowanie — dostosuj renderowane formatowanie do swojego środowiska, czy ktoś próbował czytać kod na telefonie komórkowym/tablecie z małym ekranem? * Weź pod uwagę, że jest około 25% mniej edytowalnych znaków (w przykładowym XSLT), czy nie ma to większej wydajności? **Edytuj – dotychczasowe wnioski** 1. Deweloperzy stworzyli narzędzia i metody pracy, które skutecznie przezwyciężają większość niedogodności związanych ze stosowaniem znaków dopełniających używanych do wcięć. 2. Istnieje obawa, że usunięcie znaków formatujących wpłynie negatywnie na niektóre narzędzia różnicujące. 3. Deweloperzy chcą elastyczności w „dostrajaniu” formatowania w taki sposób, że automatyczne renderowanie nie jest w stanie obsłużyć. 4. Usunięcie wiodących spacji/tabulatorów oznacza, że do efektywnego przeglądania takiego kodu potrzebne jest narzędzie „świadome kodu” zdolne do formatowania kodu — zwykły edytor tekstu nie wyświetlałby żadnego formatowania. 5. Ci, którzy czują, że mogą być jakieś hipotetyczne korzyści (z wirtualnego wcięcia), mają pogląd, że wady przeważają nad potencjalnymi korzyściami - _zdecydowanie_. **Edycja – werdykt** Postrzeganie przeszkód i nielicznych (jeśli w ogóle) korzyści jest takie, że nierozsądne byłoby dla mnie, jako jedynego dewelopera, kontynuowanie tej koncepcji edycji bez przestrzeni dla języków ogólnych. Jednak w przypadku XML/XSLT (ze względu na specjalne traktowanie białych znaków) wydaje się, że istnieje przynajmniej pewna zgodność potencjału. **Edytuj – Wysłano produkt** Pomimo ogólnie negatywnych opinii, które można znaleźć tutaj, wysłałem edytor. Zrobiłem darmową wersję w nadziei, że przyniesie krytykę w postaci bardziej konkretnych kwestii, opartych na prawdziwych doświadczeniach. Trochę frustrujące, jak dotąd nie było żadnych skarg (w rzeczywistości prawie żadnych informacji zwrotnych dotyczących ilości pobieranych plików). Myślę, że to dlatego, że użytkownicy tak dobrze przystosowali się do tego pomysłu, że postrzegają to jako „co z tego?”. rodzaj funkcji - ale nie ma sposobu, aby powiedzieć...


title: Jakie jest uzasadnienie nieujawniania po prostu opłat licencyjnych za komercyjną bibliotekę lub narzędzie?

text: Niektóre firmy sprzedające oprogramowanie lub biblioteki po prostu umieszczają swój model licencjonowania na swojej stronie internetowej i kończą z tym. (Wiele z nich zawiera również zastrzeżenie, że istnieją rabaty ilościowe i możliwe są specjalne ustalenia.) Inne firmy (w szczególności te, które stawiają się na rynku „przedsiębiorczym”) nie ujawniają swoich opłat, niektóre nawet nie ujawniają swojego modelu licencjonowania! Kiedy jesteś zainteresowany ich sprzedażą produktów i kontaktami, odkrywasz, że ich kalkulacja ceny jest po prostu na witrynę / na programistę / na rdzeń / na cokolwiek i równie dobrze mogliby umieścić te informacje na swojej stronie internetowej. Czy inni programiści mogą mi wyjaśnić, dlaczego muszę wymienić 3 e-maile i 2 telefony z przedstawicielem handlowym, aby dowiedzieć się, czy produkt nawet zdalnie pasuje do naszej metki cenowej? Odkryłem, że ja (i niektórzy z moich współpracowników) bardzo niechętnie oceniam produkt, który nie ujawnia z góry kosztów, więc nie mogę zrozumieć, dlaczego ktoś miałby to robić w przypadku „prostych” produktów – czyli dla biblioteki i oprogramowanie, które tak naprawdę nie ma wynegocjowanych opłat licencyjnych. Uwaga ponownie: mówię o oprogramowaniu lub bibliotekach do pojedynczej instalacji, które są licencjonowane na witrynę lub programistę, a nie o rzeczach, które wymagają skomplikowanych umów licencyjnych.


title: Jak przejść do rozwoju przedsiębiorstw w Javie po Pythonie i Ruby?

text: Kiedyś programowałem w Django/Python i Rails/Ruby (a wcześniej w C/C++ i C#), a teraz pracuję na stanowisku, w którym zajmujemy się programowaniem w języku Java dla przedsiębiorstw (Spring, Hibernate, RESTEasy, Maven itp.) dla aplikacje i usługi internetowe. Wychodząc ze świata Konwencji o konfiguracji, jaki jest najlepszy sposób, aby przyspieszyć tworzenie korporacyjnych usług internetowych Java? Znam dobrze Javę (język) i wcześniej pisałem GUI w Swingu i podstawowym JSP, ale nic takiego nie robię teraz. Czy są jakieś zalecane samouczki, aby szybko zapoznać się z popularnymi samouczkami programowania Java dla przedsiębiorstw?


title: Czy powinienem uzyskać walidację poprzez obsługę błędów w klasycznym ASP?

text: Natknąłem się na to podczas modyfikowania starej aplikacji ASP: ON ERROR RESUME NEXT ivalue = CDATE(ivalue) IF err.number > 0 THEN ivalue = CDATE(data) END IF err.clear To nie wygląda na dobrą praktykę. Jaki jest cel robienia tego w ten sposób i czy istnieje lepszy sposób na to? Na przykład użyłbym po prostu `ISDATE()`: czy jest coś, czego mi brakuje?


title: Najlepsze książki o zarządzaniu zespołem programistycznym?

text: Kanoniczne księgi na temat rozwoju oprogramowania są dość dobrze ugruntowane. Jednak po przeczytaniu okropnej książki pełnej złych rad na temat zarządzania zespołami programistycznymi w ten weekend szukam rekomendacji naprawdę dobrych książek, które koncentrują się na zarządzaniu stroną programowania (rekrutacja, pomiar / zarządzanie wydajnością, motywacja, najlepsze praktyki, struktura organizacyjna itd.), a nie na samej konstrukcji oprogramowania. Jakieś sugestie?


title: Implementuj Generic DataSet Builder za pomocą C#

text: Chcę utworzyć bibliotekę dostępu do danych, która może budować zestawy danych z relacjami, które można łatwo zapisać w formacie XML za pomocą `dataset.WriteXML()`. Jest to próba poznania C#, która, mam nadzieję, przyniesie mi również trochę produktywności (dużo konwersji tabel relacyjnych na XML z różnych źródeł danych w celu generowania dokumentów) Jak dotąd jedyna różnica, jaką widzę między technologiami Data Access (SQL, OLEDB, ODBC) w odniesieniu do tego, jak będę ich używać do tego celu, wymagają one określonego typu połączenia i adaptera (SqlAdapter, OleDbAdapter, OdbcAdapter itp.). Tak więc wyobrażam sobie klasy z dwiema metodami i publicznym zbiorem danych, który zostanie wypełniony. publiczny zbiór danych zbiór danych { get; ustawić; } public void InsertTables(string ConnectionString, string[] TableNames, string[] Commands) public void AddRelations(string[] PrimaryTables, string[] PrimaryKeys, string[] ChildTables, string[] ForeignKeys, bool[] NestingRules) Już zacząłem z implementacją OleDb, która działa dobrze, i chcę skonfigurować coś podobnego dla innych technologii dostępu do danych. Jednak chcę być jak najbardziej wydajny z kodem, więc szukam porady, jak to zrobić. Myślałem, że wzorzec Template Method Design może być solidnym podejściem, ale potem pomyślałem również, że pojedyncza klasa, która wykorzystuje generyki, może również działać (jestem nowy w C# i nie jestem z nimi zbyt zaznajomiony). Szukam ogólnego przykładu, jak mogę to osiągnąć za pomocą dobrego wzorca projektowego i/lub ogólnych. Oto, co mam dla OleDbDesign. Każda rada jest bardzo ceniona. klasa publiczna OleDbDataSetBuilder { prywatne DataSet _DataSet; public DataSet DataSet { get { return _DataSet; } } public OleDbDataSetBuilder(string DataSetName) { this._DataSet = new DataSet(DataSetName); } public void InsertTables(string ConnectionString, string[] TableNames, string[] Commands) { if (TableNames.Length != Commands.Length) { throw new Exception("Błąd: dla każdego polecenia należy podać nazwę tabeli."); } OleDbConnection cn = new OleDbConnection(ConnectionString); Adapter OleDbDataAdapter = new OleDbDataAdapter("", cn); adapter.SelectCommand = new OleDbCommand("", cn); for (int i = 0; i < NazwaTabeli.Długość; i++) { adapter.SelectCommand.CommandText = Commands[i]; adapter.Fill(_DataSet, TableNames[i]); } cn.Zamknij(); } public void AddRelations(string[] PrimaryTables, string[] PrimaryKeys, string[] ChildTables, string[] ForeignKeys, bool[] NestingRules) { for (int i = 0; i < PrimaryTables.Length; i++) { DataColumn pk = _DataSet.Tables[PrimaryTables[i]].Columns[PrimaryKeys[i]]; DataColumn fk = _DataSet.Tables[ChildTables[i]].Kolumny[ForeignKeys[i]]; Relacja DataRelation = _DataSet.Relations.Add(pk, fk); relacja.Zagnieżdżone = Reguły Zagnieżdżania[i]; } } }


title: GWT vs JSF vs ZK vs Restful+JS

text: Planuję stworzyć webowy ERP, który powinien być full-ajax i z interfejsem jak desktop. Będzie to aplikacja do wprowadzania i raportowania danych. Rozwijając go rozważam wszystkie technologie. GWT: Widziałem, że dzięki GWT Designer można tworzyć fajne interfejsy użytkownika, ale wiązanie danych wydaje się zbyt skomplikowane JSF: Netbeans nie obsługuje już wizualnego edytora internetowego ZK: obsługuje wiązanie danych w stosunkowo łatwy sposób i ma edytor wizualny oparty na Eclipse Niektórzy mówią o REST + javascript jako zwycięskim wyborze. Chciałbym poznać Twoją opinię na temat tego, co może być właściwym wyborem. Z góry bardzo dziękuję!


title: Czy dobrym pomysłem jest dostarczanie różnych sygnatur funkcji, które robią to samo?

text: Oto klasa C++, która jest konstruowana z trzema wartościami. class Foo{ //Konstruktor Foo(std::string, int, char); prywatne: std::string foo; pasek zwęglony; int baz; }; * * * Wszystkie typy parametrów są różne. Mógłbym przeciążyć konstruktora, żeby kolejność nie miała znaczenia. class Foo{ //Konstruktory Foo(std::string, char, int); Foo(std::string, int, char); Foo(char, int, std::string); Foo(char, std::string, int); Foo(int, std::string, char); Foo(int, char, std::ciąg); prywatne: std::string foo; pasek zwęglony; int baz; }; Ale czy to dobry pomysł? Zacząłem to robić, ponieważ wiedziałem, czego potrzebuje klasa/funkcja; Nie zawsze pamiętałem, w jakiej kolejności je przyjął. * * * Zakładałem, że kompilator optymalizuje to tak, jakbym wywoływał ten sam konstruktor. //kompilator zaimplementuje to tym samym kodem? //może nie.. Mógłbym wywołać funkcję, aby uzyskać parametr, //a ta funkcja mogłaby zmienić stan programu, przed wywołaniem //funkcji w celu uzyskania innego parametru i kompilator musiałby //zaimplementować oba Foo foo1("cześć",1,'a'); Foo foo2('z',0,"świat"); Jakie są Twoje opinie na temat przeciążania funkcji, aby kolejność nie miała znaczenia? * * * Ponadto, jeśli piszę funkcje narzędziowe, to czy dobrym pomysłem jest podanie różnych nazw funkcji, które robią to samo? np. nieważne Do_Foo(); nieważne DoFoo(); nieważne do_foo(); //itd.. * * * Nieczęsto widzę te dwie, ale podobne konwencje. Czy powinienem zerwać czy objąć nałóg?


title: Jaki jest właściwy sposób używania IDE do pracy na zdalnym kodzie?

text: Jedna z baz kodu, nad którymi pracuję, ma środowisko programistyczne działające na serwerze deweloperskim i nie można go skopiować na mój komputer w celu lokalnego testowania i programowania. Zastanawiam się, jaki jest właściwy sposób pracy z tą bazą kodu? Jest zorientowany obiektowo i stwierdziłem, że praca z Vimem przy takiej bazie kodu jest bardzo żmudna i czasochłonna. Mam inny projekt, który mam uruchomiony lokalnie i lubię używać Eclipse i czasami Sublime text do wprowadzania zmian w kodzie. Czy istnieje sposób na wykorzystanie takich narzędzi, których używam lokalnie w zdalnym projekcie, a jeśli tak, jaki jest właściwy sposób, aby to skonfigurować? Czy powinienem zdalnie zamontować swój system? Mamy konfigurację git/hg w tych środowiskach, jednak lubię testować i debugować rzeczy w bardzo małych zmianach, co generowałoby wiele niepotrzebnych zatwierdzeń. Jest to również czasochłonne. Idealnie byłoby po prostu móc pracować tak, jakby to było lokalne środowisko, a kiedy zapiszę i odświeżę stronę, zmiana już jest. Czy moim najlepszym rozwiązaniem jest montaż?


title: Czy są jakieś narzędzia do zdalnego wywiadu kodującego?

text: Po pierwsze, nie jestem do końca pewien, czy to pytanie lepiej pasuje tutaj, czy na miejscu pracy. Więc wybacz mi, jeśli jest w złym miejscu. Przeprowadzamy rozmowy kwalifikacyjne z niektórymi kandydatami na stanowisko deweloperskie, a obecnie nie ma ich w naszym mieście. Chcielibyśmy dać im proste testy kodowania, aby zobaczyć, jak poradzą sobie z typowymi problemami, z którymi mamy do czynienia w naszej codziennej pracy. Czy są jakieś konkretne narzędzia do tego nastawione? W tej chwili używamy Skype'a i wydaje mi się, że to obniża wydajność wielu programistów, ponieważ są oni nieśmiali i często nie mogą pracować, gdy ktoś się im bezpośrednio przygląda. Problem z wysłaniem pytań testowych pocztą elektroniczną jest następujący: 1. Nie można wiedzieć, jaki jest ich proces myślowy, ponieważ widzimy tylko efekt końcowy. Nie ma dyskusji ani wyjaśnienia pytania, co jest ważnym krokiem. 2. Nie ma gwarancji, że problemy zostały rozwiązane przez samych kandydatów. Mogliby wysłać go do mądrzejszego przyjaciela, a my nie bylibyśmy w stanie tego wiedzieć. Jak zwykle rozwiązywane są te problemy?


title: Kolizje prowadzące

text: Mam produkt, który pozwala twórcom gier tworzyć gry. W swoich grach są zobowiązani do podania wszystkich elementów identyfikatorów GUID swoich gier. Powiedziałem im, że muszą generować swoje przewodniki za pomocą określonego mechanizmu, ale wydaje im się, że nie spowoduje to żadnych problemów. Martwię się o kolizje GUID między grami. Niektórzy programiści po prostu sekwencyjnie zwiększają ostatnią cyfrę swojego identyfikatora GUID, inni wyzerują ostatni blok i zwiększają inne części, a inni po prostu łączą losową armadę cyfr i liter dla każdego z nich. Moim argumentem jest to, że robiąc to dramatycznie zwiększa się ryzyko kolizji z innymi grami, które zarówno stosują się do standardu, jak i tymi, które tego nie robią. Tak jak heads-up, w grę wchodzą potencjalnie setki tysięcy identyfikatorów GUID. Czy mam rację, myśląc o tym, czy jest to naprawdę nieprawdopodobne, że to się naprawdę wydarzy?


title: Algorytm zdobywania nagród w sam raz

text: Tworzę konkurs, w którym możesz wygrać nagrody, otwierając pudełka. Niezależnie od tego, jakie pudełko jest otwarte, po prostu wysyłam żądanie do serwera, aby sprawdzić, czy użytkownik coś wygrał. Ponieważ ten konkurs nie jest rodzajem konkursu typu „Zarejestruj się, a za jakiś czas wylosujemy zwycięzcę”, jestem trochę zdziwiony, jaki algorytm powinienem zastosować, aby obliczyć szanse na wygraną. Opracowałem w arkuszu kalkulacyjnym programu Excel to, co nazywam algorytmem progresywnej wygranej w postaci: ([Liczba pozostałych nagród] / [Nagrody, które powinienem mieć w tym czasie konkursu]) / 4 Co daje mi przybliżoną zmianę procentową wygrania przedmiotu z puli pozostałych przedmiotów około 25%. Jeśli w krótkim okresie jest wielu zwycięzców, algorytm powinien automatycznie obniżyć szanse na wygraną, idąc w przeciwnym kierunku, jeśli scenariusz jest inny. Obawiam się, że nie wszystkie moje przedmioty zostaną wylosowane do końca konkursu, ponieważ jest to liniowa kalkulacja oczekiwanych pozostałych prezentów lub obawiam się, że przez przypadek większość moich nagród padnie dopiero po połowie konkursu (przez przypadek mam na myśli to, że wielu graczy otrzymuje naprawdę świetne losowe szanse i wygrywa) Więc moje pytanie brzmi, jak mam sobie poradzić z tego rodzaju scenariuszem, jakie są już znane metody na to i proszę zachować prostotę, ja Nie jestem matematykiem ani statystykem. * * * **Zmienne, które należy wziąć pod uwagę** * Łącznie 100 nagród * Konkurs trwa pięć pełnych dni * Nieznana liczba uczestników * Nieznana zasada uczestnictwa, ale prawdopodobnie będzie raz dziennie w oparciu o unikalne dane uwierzytelniające, takie jak e -Adres mailowy. * To konkurs online, w którym użytkownik otwiera wirtualne pudełko, nic fizycznego


title: Ćwicz wskazówki dotyczące programowania

text: Jestem świeżo upieczonym absolwentem, więc rozumiem dużo teorii, języków obiektowych i różnych struktur danych. Jestem kompetentny w językach takich jak C++, Java, PHP, żeby wymienić tylko te, w których jestem mocny. Od ukończenia studiów gryzę kulkę i na razie przyjąłem pracę poza moim polem. Więc oczywiście nie chcę stracić swojej przewagi i chcę być na bieżąco. Większość mojego programowania była z powodów akademickich i 3-miesięcznego stażu w programowaniu stron internetowych (back-end). Naprawdę chcę coś zaprogramować, aby wykorzystać moje umiejętności, których się nauczyłem. Zawsze słyszę, że gra to świetna praktyka. Jednak jednym z problemów z Internetem jest duża ilość informacji i czytanie jednej witryny, a następnie przeskakiwanie do innej i tak dalej. Gdzie według Ciebie jest dobry punkt wyjścia na początek? Zawsze trudniej jest zacząć od zera i tak właśnie jestem. Zaczynam od jakiejś gry 2D i zaczynam od niej, ale potem pojawia się pytanie, którego SDK użyć, jeśli w ogóle. Obecnie używam Linuksa, ale nie miałbym nic przeciwko programowaniu w Windowsie. Zawsze myślę, że może powinienem spróbować stworzyć prostą aplikację również na telefon z Androidem. Jak możesz powiedzieć, jestem już skończony i potrzebuję tylko trochę wskazówek. Wszelkie porady/strony internetowe są bardzo mile widziane!


title: Jaka jest różnica między przypadkiem brzegowym, przypadkiem narożnym, przypadkiem bazowym i przypadkiem granicznym?

text: Nie jestem native speakerem języka angielskiego. W moim ojczystym języku znamy pewne terminy używane w odniesieniu do warunku sprawdzanego w celu zatrzymania rekurencji oraz warunku sprawdzanego w przypadkach ekstremalnych, mało prawdopodobnych lub bardzo prostych. W języku angielskim spotkałem się z terminami „przypadek krawędzi”, „przypadek narożny”, „przypadek graniczny” i „przypadek bazowy”, ale nie mogę do końca zrozumieć różnic i które są używane w odniesieniu do czego; Chciałbym uzyskać podsumowanie różnic między nimi. W szczególności byłbym bardzo szczęśliwy, gdyby ktoś mógł dodać adnotacje do wierszy w następującym przykładzie kodu: int transmogrify(int n) { 1.asset(n <= 1000000); 2. jeśli (n < 0) zwraca -1; 3. if (n == 1000000) zwróć PRE_CALC; 4. if (n == 0) zwróć n+1; // Zatrzymanie rekurencji 5. if (n == 1251) return 3077; powrót transmogrify(n-1); } Myślę, że to: 1. Sprawdzenie stanu zdrowia 2. Sprawdzenie danych wejściowych 3. Sprawa graniczna? Sprawa na krawędzi? Sprawa narożna? 4. Przypadek podstawowy? Sprawa graniczna? 5. Sprawa narożna? Sprawa na krawędzi?


title: Korzystanie ze Scrum/agile z wieloma klientami

text: Jestem wielkim zwolennikiem zwinnego rozwoju. Właśnie zmieniłem pracę i obecnie pracuję w firmie, która koordynuje duże projekty rozwojowe dla (dość dużych) grup organizacji klientów. Moim zadaniem jest znalezienie odpowiednich wykonawców dla projektów i upewnienie się, że organizacje klientów są jak najbardziej zadowolone i kontrolowanie procesu. Nie ma nic na świecie, co by mnie uszczęśliwiło, niż gdybym mógł wprowadzić w tę sytuację Scrum lub podobną zwinną metodę, czyniąc główną rolę mojej firmy właścicielem produktu. To miałoby sens na tak wielu poziomach. Są jednak pewne problemy: Ponieważ Scrum jest metodą szybkiego reagowania, zastanawiam się, czy Scrum jest właściwą metodą dla takiego miejsca, w którym nie jeden klient, ale duża grupa klientów musi być zaangażowana w ustalanie priorytetów zaległości ze sprintu biec. Odbywa się w dość politycznym środowisku. Jakie pułapki i możliwości widzisz w takiej sytuacji? Czy z tą sytuacją po prostu poradzą sobie dłuższe sprinty? W firmie panuje ogólne zrozumienie i empatia dla agendy agile, ale problem, który tutaj opisuję, wydaje się być poważną przeszkodą. Naprawdę byłbym wdzięczny za twój wkład. Potrzebuję dobrej amunicji do zwinnego głoszenia :o)


title: Sprawianie, że wewnętrzna wyszukiwarka zwraca wyniki zgodne z lokalnymi uprawnieniami w wewnętrznej aplikacji internetowej

text: Mam wyszukiwarkę ElasticSearch i wewnętrzną aplikację internetową. Przed zastosowaniem modelu bezpieczeństwa wyniki wyszukiwania były bardzo szybkie. Model bezpieczeństwa ogranicza niektórym użytkownikom dostęp do niektórych stron. Mamy 7 „rodzajów” stron. Nasz proces jest obecnie następujący: 1. Wyszukiwarka sprawdza wszystkie rekordy 2. Dla każdego typu wyniku otrzymuję wszystkie identyfikatory rekordów tego typu z bazy danych, do której użytkownik ma dostęp. Zapewnia to, że dzwonię do bazy danych maksymalnie 7 razy (raz na typ) 3. Przecinam rekordy, do których użytkownik może uzyskać dostęp, a wyszukiwanie rekordów zwraca. Powyższe podejście nie jest wystarczająco szybkie. Mam autosugestię wyszukiwania, a każde zapytanie zajmuje teraz do 2 sekund. Jaki jest typowy sposób, aby wyszukiwarka zwracała wyniki zgodne z bezpieczeństwem? Inny programista zalecił mi przechowywanie uprawnień bezpieczeństwa bezpośrednio w ElasticSearch (zasadniczo odzwierciedlającym to, co ma nasz serwer sql). Edycja: Każdy rekord ma stronę. Możemy założyć 200-500 użytkowników i ponad 25000 rekordów.


title: Używanie dwóch wersji klasy w tym samym kodzie

text: W mojej pracy, w naszym głównym projekcie, mamy klasę Walidacji, która ewoluowała z biegiem lat. I ee masz stary projekt z klasą User, która używa starej wersji klasy Valdiation. I musimy zaktualizować niektóre funkcje, które wymagają nowych metod walidacji. Wszystkie te metody są zaimplementowane w naszej najnowszej klasie Validation. Ale nowa klasa Validation nie jest zgodna z poprzednimi wersjami, więc nie możemy po prostu umieścić nowej. Pomyślałem, że dobrym rozwiązaniem byłoby uaktualnienie całego kodu, który odwołuje się do klasy Validation lub uczynienie go wstecznie kompatybilnym, ale oczywiście oba zajęłoby to dużo czasu. Ostatecznie zdecydowano, że dodanie najnowszej wersji i nazwanie jej Validation2 działa dobrze, niektóre metody wykorzystują Valdiation, a inne Validation2. Myślę, że później przyniesie to wiele problemów, ponieważ nie wiesz, kiedy użyć jednego czy drugiego, ponieważ nazwy przestają mieć znaczenie. Jaka może być lepsza opcja, aby sobie z tym poradzić? Również klasa Validation była najlepszym przykładem, ale mamy ten sam problem z wieloma większymi i bardziej skomplikowanymi klasami, a teraz mamy wiele klas "zduplikowanych". Językiem jest PHP, ale może się zdarzyć również w innych językach.


title: Stopień licencjata z informatyki: Marketing, MBA, Techno-MBA, HCI?

text: Od roku jestem absolwentem Informatyki, a obecnie od 2 lat pracuję w nazwanej dziedzinie. Chciałem jednak uzyskać tytuł magistra w "miększej" dziedzinie i zastanawiałem się nad następującymi wyborami: * **MBA**: Master of Business Administration, aby połączyć świat biznesu ze światem informatyki. Dałoby mi ciekawą pracę, możliwości podróżowania, wysoką pensję itp. * **Techno-MBA**: rodzaj MBA, ale skierowany do osób, które mają już dyplom z informatyki. * **HCI** : Stopień interakcji człowiek-komputer, coś co mnie **bardzo** interesowało, ale czuję, że nie ma potencjału wzrostu MBA/Techno-MBA * **Marketing** : Mój najbardziej Niedawny pomysł to dyplom z marketingu, czy to w ogóle dobry pomysł, biorąc pod uwagę moje doświadczenie? Potencjał wzrostu? Główny priorytet: Zdobycie umiejętności i zdobycie pracy, która pozwoli mi wykorzystać moje umiejętności społeczne. Która ścieżka ma najlepszy „potencjał kariery”? (Wiem kontrowersyjne) Jakieś myśli? Wszelkie opinie mile widziane. Edycja: DOH. Zdałem sobie sprawę, że pierwsze zdanie nie ma sensu. Prowadziłem własną, częściowo udaną firmę w ostatnim roku szkoły.


title: Kiedy zdecydujesz się *nie* zaktualizować biblioteki innej firmy do nowszej wersji?

text: Korzystanie z bibliotek innych firm w celu zwiększenia produktywności podczas tworzenia oprogramowania jest powszechne. Niestety wraz z funkcjonalnością biblioteki importujemy również jej błędy. Niektóre z nich zostaną naprawione w kolejnych wydaniach. Tak więc, aby uaktualnić lub nie uaktualnić, oto jest pytanie. Jestem zainteresowany wyciąganiem wniosków z doświadczeń, kiedy aktualizacja do nowszej wersji biblioteki była pożądana, ale po analizie kosztów i korzyści wywnioskowałem, że aktualizacja nie była dobrym rozwiązaniem „w wielkim schemacie rzeczy”. Interesuje mnie, jakie _siły_ wpływają na decyzję o _nie_ uaktualnianiu.


title: Python vs. Java dla wbudowanego modułu bezprzewodowego

text: Rozwijamy produkt w pracy, który łączy się z podstawowymi wejściami/wyjściami i przesyła dane do serwera WWW przez połączenie GPRS. To, co muszę wiedzieć, zanim zaangażujemy się w produkt, to który język jest bardziej odpowiedni do tego zadania: Java czy Python? (lub w jakimkolwiek języku, szczerze mówiąc) Jak powiedziałem, będzie działał na module bezprzewodowym i otwierał połączenia szeregowe, odczytywał wartości, wysyłał dane przez połączenia GPRS do serwera WWW...