title: Czysty czytelny kod vs szybki, trudny do odczytania kod. Kiedy przekroczyć linię?

text: Kiedy piszę kod, zawsze staram się, aby mój kod był jak najbardziej przejrzysty i czytelny. Od czasu do czasu przychodzi czas, kiedy trzeba przekroczyć linię i przejść od ładnego, czystego kodu do nieco brzydszego kodu, aby przyspieszyć. Kiedy można przekroczyć tę linię?


title: Co musisz wiedzieć o relacjach z klientem jako początkujący?

text: Jestem programistą na poziomie podstawowym i jestem zaangażowany w codzienne spotkania z klientami dotyczące postępów w projekcie, problemów, terminów itp. Nie mam doświadczenia w zarządzaniu klientami, czy moglibyście zasugerować jakieś typowe rzeczy do rozważenia podczas interakcji z klientami zarówno w projekcie, jak i perspektywy zarządzania ludźmi.


title: Jak uprościć testowanie jednostkowe za pomocą funkcji wyższego rzędu?

text: * to jest _nie_ pytanie jak pisać testy jednostkowe * to _nie_ pytanie o to, co testować * to jest pytanie o zmniejszenie ogólnej liczby typowań potrzebnej dla osobistego frameworka testowego Wiem, że możesz wysyłać wskaźniki do funkcji jako argumenty do funkcji w C. Czy istnieje wersja c++98? Lub, ponieważ c++ może działać wstecz, czy powinienem po prostu użyć metody wskaźnika funkcji C? Próbuję napisać funkcję, która testuje dla mnie funkcje. Nie chcę pisać długiej listy: spróbuj { func1() out << fail } z wyjątkiem e { out << pass } if (func2(arg2) == oczekiwane_val) { out << pass else out << fail try/catch... try/catch... if/else... try/catch... ...itd ale może zamiast tego: test_this(func1, pass_on_exception) test_this(func2, ! pass_on_exception, oczekiwane_val2, arg2) test_this (func3, pass_on_exception) test_this(func4... test_this(func5... ...etc void test_this(nazwa_funkcji, pass_on_Exception, oczekiwane_value, arg1, ..., argn) { if pass_on_exception { try { func_name(arg1) out < < fail } catch e { out << pass } } else { if func_name == oczekiwana_value { out << pass } else { out << fail } } } Funkcje wirtualne nie wchodzą w grę sinc e, jeśli dobrze pamiętam, nazwy funkcji muszą być nadpisane/zakodowane na stałe; tak jak w, musiałbym utworzyć nową klasę, aby dziedziczyć i zastępować funkcje, w takim przypadku ponownie zadeklarowałbym funkcję, a także przepisałby wszystkie te try/catch… łańcuch try/catch/if/else wydaje się lepiej. Gdyby istniał sposób na przekazanie nazw funkcji do innych funkcji, myślę, że mogę to rozgryźć. O ile powyższe nie jest faktycznie niemożliwe w C++, proszę, zatrzymaj mnie przed rozpoczęciem, a ja po prostu zniosę tę długą listę metod testowania jednostek try/catch/if/else. Tak więc główne pytanie: czy istnieje sposób na zrobienie powyższego? Jeśli nie, alternatywy?


title: Rozróżnienie między metodą fabryczną a fabryką abstrakcyjną

text: Przez chwilę byłem zdezorientowany różnicami między wzorcami Factory Method i Abstract Factory. Robiłem dużo badań, wciąż jestem zdezorientowany. Mam jedno pytanie: Czy **jedyna różnica** między tymi dwoma wzorcami jest taka, że Factory Method **produkuje jeden obiekt** , a Abstract Factory produkuje **rodzinę obiektów**? A może jest więcej różnic? Dużo czytałem na tej stronie i w sieci, tylko bardziej mnie zdezorientował. Wiem, jak używać wzorców, ale mam problem z rozróżnieniem między nimi.


title: wyrażanie szybkości algorytmu sortującego

text: Jak mam wyrazić szybkość następującego algorytmu sortowania? Wiem, że sortowanie bąbelkowe to n^n (eee, mam na myśli n^2... jak ktoś wskazał poniżej). Poniżej tablica zmniejsza się za każdym razem, gdy wywołasz ją rekurencyjnie. Dziękuję. * * * $mytablica = tablica("21","4","8","8","1","2","19","21"); mójsort($mojtablica); function mysort($myarray,$sorted = null){ if(!isset($sorted)){ $sorted = array(); } $najniższy = $myarray[0]; $niski indeks = 0; for($x = 1;$x < liczba($mojtablica);$x++){ if($mojtablica[$x] < $najniższa){ $najniższa = $mojtablica[$x]; $niski indeks = $x; } } $posortowany[] = $najniższy; array_splice($myarray,$lowindex,1); if(count($myarray) > 1){ echo "wywołanie rekurencyjne \n"; mojesort($mojtablica,$posortowane); } else if(count($myarray) == 1){ $sorted[] = $myarray[0]; $arraystr = print_r($sortowane,prawda); echo "sortowanie zakończone. Tablica to $arraystr \n"; zwrócić; } }


title: Jak zredukować bliskie punkty

text: wejście: C macierz 2xN (2D punkty) wyjście: C macierz 2xM (2D punkty) z równą lub mniejszą liczbą punktów. Powiedzmy, że mamy macierz C 2xN, która zawiera kilka punktów 2D i wygląda to mniej więcej tak: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/1lFgN.jpg) Chcemy pogrupować "zamknij" punkty do jednego punktu, mierzone średnią z pozostałych punktów. Na przykład na drugim obrazie każda grupa niebieskiego koła będzie stanowić jeden punkt, współrzędna punktu będzie punktem średnim ze wszystkich punktów w niebieskim kole. również mówiąc "blisko", mam na myśli to, że: ich odległość od siebie będzie mniejsza niż DELTA (znany skalar). Tak pożądane wyjście to: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/Ihekp.jpg) O czasie działania algorytmu, nie mam żądania górnego limitu, ale wywołuję tę metodę kilka razy... Używam Matlaba i próbowałem to: function C = ReduceClosePoints(C ,l_boundry) x_size = abs(l_boundry(1,1)-l_boundry(1,2)); %220 DELTA = x_rozmiar/10; T = []; dla i=1:rozmiar(C,2) suma = C(:,i); n=1; dla j=1:size(C,2) jeśli i~=j %nie ten sam punkt D = DistancePointToPoint(C(:,i),C(:,j)); jeśli D < suma DELTA = suma + C(:,j); n=n+1; koniec koniec koniec suma = suma/n; %nowy punkt -> zapisz w macierzy T T = [T suma]; koniec C = T; koniec I to nie działa :( Również jestem nowy w Matlab. Dziękuję za pomoc!


title: Generator instrukcji SQL Update przy użyciu C# WinForm?

text: Próbuję dokonać generatora UPDATE STATEMENT przy użyciu WinForm C#. Chciałbym zbudować generator instrukcji, który będzie drukował takie instrukcje: UPDATE Klienci SET ContactName='Alfred Schmidt', City='Hamburg' WHERE CustomerName='Alfreds Futterkiste'; Ale mój problem polega na tym, jak mogę pozwolić użytkownikowi wkleić wiele wartości dla każdego `SET`? Mój użytkownik końcowy prawdopodobnie zbuduje listę za pomocą arkusza kalkulacyjnego i będzie chciał wkleić wartości do wielowierszowego pola tekstowego. Mógłbym utworzyć 2 wielowierszowe pola tekstowe, ale co, jeśli mam więcej kolumn `SET`, które muszę dodać?


title: Killer półunikalne funkcje języka programowania

text: Podczas nauki nowego języka programowania czasami natrafiasz na funkcję języka, która sprawia, że chciałbyś mieć go w innych językach programowania, które znasz. Jakie są cechy języka, które w czasie nauki były dla ciebie bardzo nowe i które chciałbyś mieć w innych językach programowania. Przykładem tego są generatory w Pythonie lub C#. Inne przykłady mogą obejmować listy składane w Pythonie, szablony w C++ lub LINQ w .NET lub leniwą ocenę w Haskell. Jakie inne półunikalne cechy języka, które spotkałeś, były dla Ciebie zupełnie nowe i pouczające? Czy istnieją inne cechy starszych języków programowania, które były unikalne i wyszły z mody?


title: Jak zarządzasz swoją bazą wiedzy?

text: Jako programiści mamy wiele wejść: 1. Ebooki 2. Fragmenty kodu 3. Ciekawe e-maile 4. Dokumenty 5. Artykuły internetowe 6. Wpisy na blogu 7. Pytania StackOverflow 8. Podcasty ... Jakich narzędzi używasz do przechowywania, organizowania , szukać i sprawdzać wszystkie te rzeczy? Czy istnieje rozwiązanie typu „srebrny punktor”, aby poradzić sobie z tak ogromną ilością danych?


title: Czy przy ciągłej integracji w .NET dopuszczalne jest odwoływanie się do bibliotek DLL rzadko zmieniających się zestawów?

text: Moja firma już niedługo chce wdrożyć rozwiązanie CI i martwię się w szczególności o jedną rzecz… rozwijamy się, co oznacza, że nasze rozwiązania rosną wraz z większą liczbą projektów. Jedną rzeczą, na którą chciałem się przyjrzeć, jest oddzielenie rzadko zmienianych projektów do oddzielnego projektu, a następnie posiadanie innych projektów po prostu odwołuje się do skompilowanej biblioteki DLL, zamiast włączania projektów do swoich rozwiązań. Na przykład... * /BLL/DataFramework * /BLL/OrmFramework * /BLL/OrmDataAdapter * /BLL/... * /WebUI/MyWebSite Projekty Data i ORM rzadko byłyby zmieniane, ale gdyby nie odwoływały się do nich, dodawałyby wzdęcie do wszystkich rozwiązań. Zamiast tego chciałbym je wykluczyć z projektu i skompilować do folderu Libraries (lub czegoś podobnego), tak aby: * /BLL/... * /Libraries * /WebUI/MyWebsite Gdzie zestawy ORM i Data . Biblioteki DLL znajdują się w folderze Biblioteki. Więc pytanie brzmi... **Czy jest jakiś powód, dla którego to nie działałoby z Continuous Integration?** Czy mógłbym mieć jedno rozwiązanie z tymi rzadko aktualizowanymi klasami, które będą najpierw kompilować do folderu biblioteki podczas CI, a następnie rozwiązania? _Edytuj: **Aby było jasne...** chcemy zachować te projekty w cyklu CI, ale nie odwoływać się bezpośrednio do ich projektów w każdym rozwiązaniu._


title: kilka podobnych tabel czy kilka relacji jeden do jednego?

text: Mam rodzaj aplikacji blogowej, nad którą pracuję, aby ograniczyć pisanie. Posty mają kilka typów i mają wspólne kolumny (na przykład tytuł, treść), ale mają też kolumny, których nie mają ze sobą wspólnego. Proszę mnie poprawić, jeśli się mylę, ale wydaje mi się, że moje dwie opcje projektowania bazy danych to: 1. Utwórz osobną tabelę dla każdego typu postu (a następnie użyj UNION, jeśli kiedykolwiek będę musiał wybrać wszystkie różne typy). 2. Utwórz jedną tabelę do przechowywania wszystkich podobnych kolumn (a następnie stwórz kilka relacji jeden-do-jednego, aby zdefiniować, co się w nich różni — na przykład sytuacja typu dziedziczenia). Co jest lepsze? Czemu? Czy są inne projekty, które byłyby lepsze? **AKTUALIZACJA** : te posty będą różnymi rodzajami ograniczonego pisania (np. wiersze), które są sprawdzane w określony sposób w oparciu o konkretną technikę ograniczeń i mogą mieć wiele innych powiązanych tabel, więc rozszerzalność będzie naprawdę ważne. To powiedziawszy, brzmi tak, jakby najlepsze były opcje nosql lub dziedziczenia. Martwiłbym się tylko o robienie analitycznych rzeczy z nosql (nigdy go nie używałem, więc po prostu nie wiem nic o tym, jak z nim agregować itp.).


title: Jak działa I/O dla dużych baz danych grafów?

text: Powinienem to poprzedzić mówiąc, że jestem głównie frontendowym web developerem, wyszkolonym jako muzyk, ale w ciągu ostatnich kilku lat coraz bardziej zagłębiałem się w informatykę. Tak więc jednym z pomysłów, jaki mam jako zabawny projekt, aby nauczyć się struktur danych i programowania w C, było zaprojektowanie i wdrożenie mojej własnej, bardzo prostej bazy danych, która zarządzałaby listą sąsiedztwa postów. Nie chcę SQL (może zrobię własny język zapytań? Po prostu dobrze się bawię). Powinien obsługiwać ACID. Powinien być w stanie pomieścić, powiedzmy, 1 TB. W związku z tym próbowałem wymyślić, w jaki sposób baza danych przechowuje dane, bez konieczności uwzględniania struktur danych. Pracuję na Linuksie i przeczytałem, że w tym świecie "wszystko jest plikiem", łącznie ze sprzętem (jak `/dev/*`), więc myślę, że to oczywiście musi dotyczyć również bazy danych, i wyraźnie to robi -- czy to MySQL, PostgreSQL czy Neo4j, sama baza danych jest zbiorem plików, które możesz zobaczyć w systemie plików. To powiedziawszy, nadejdzie punkt skali, w którym ładowanie całej bazy danych do pamięci podstawowej po prostu nie zadziała, więc nie ma sensu projektować jej z takim nastawieniem (zakładam). Jednak odczyt z pamięci pomocniczej byłby znacznie wolniejszy i niezależnie od tego, jakaś część bazy danych musi znajdować się w pamięci podstawowej, abyś mógł cokolwiek z nią zrobić. Przeczytałem ten post: Po co używać bazy danych zamiast po prostu zapisywać dane na dysku? I trudno mi było zrozumieć, w jaki sposób inne bazy danych, takie jak SQLite lub Neo4j, odczytują i zapisują z pamięci pomocniczej i nadal są bardzo szybkie (wydaje się, że są szybsze niż zwykłe zapisywanie plików do systemu plików, jak sugeruje powyższe pytanie). Wygląda na to, że kluczem jest indeksowanie. Ale nawet indeksy muszą być przechowywane w pamięci dodatkowej. Są one z natury mniejsze niż sama baza danych, ale indeksy w bardzo dużej bazie danych również mogą być zbyt duże. Więc moje pytanie brzmi, jak generalnie odbywa się I/O z dużymi bazami danych, takimi jak ta, którą opisałem powyżej, która zajęłaby co najmniej 1 TB przechowywania dużej listy sąsiedztwa? Jeśli indeksowanie jest mniej więcej odpowiedzią, jak dokładnie działa indeksowanie — jakie struktury danych powinny być zaangażowane?


title: Dlaczego usługa sieciowa REST została nazwana REST?

text: Co właściwie oznacza słowo Representational State Transfer (REST)? Teraz wydaje mi się, że znajduję jakikolwiek związek między jego nazewnictwem a jego działaniem, zrozumiałem, że jest to styl architektoniczny programowania usług internetowych i przeczytałem wszystkie te wszystkie szeptane rzeczy, ale nie mogę znaleźć powodu jego nazewnictwa. Co to jest „Reprezentacyjny” ? Kim jest „państwo”? i Co „przenosimy”?


title: Jak głęboki jest wystarczający do przedstawienia algorytmu na diagramie sekwencji UML?

text: Mam trzy proste klasy. `Kontroler logowania`, `UsersCatalog` i `User`. `UsersCatalog` ma tablicę `User`. Muszę przedstawić prosty proces logowania. `LoginController` ma metodę `login(username, password)`, która po prostu wywołuje metodę `authenticate(username, password)` z tymi samymi parametrami. Teraz jest oczywiste, że metoda `authenticate` szuka pasującego obiektu `User` i zwraca go. Pytanie brzmi: **Czy konieczne jest reprezentowanie algorytmu wyszukiwania?** Czy reprezentacja algorytmu wyszukiwania nie jest zbyt niska? Z drugiej strony dostęp do klasy `User` jest wewnątrz algorytmu wyszukiwania, więc jeśli go nie reprezentuję, to nie reprezentuję dostępu do klasy `User`. To część szerszego pytania. Czy są jakieś kryteria określające, jak głęboki jest wystarczający do przedstawienia algorytmu na diagramie sekwencji UML?


title: Lokalne aktualizacje w trwałych/niezmiennych strukturach danych

text: Wchodzę w ReactJS i jestem zaintrygowany, ale także zdezorientowany trwałymi strukturami danych. Uwielbiam ten pomysł, ale nie jestem pewien, jak wykorzystać moje doświadczenie MV*, Mutable, Observable Bindings w projektowaniu komponentów widoku i zastosować je w rozsądny sposób. Załóżmy na przykład, że mam głęboko zagnieżdżoną strukturę: Foo Bar Baz someValue Qux Quxx W moim interfejsie użytkownika mam komponent, który jest edytorem dla `someValue`. W paradygmacie mutacji-obserwacji zrobiłbym coś takiego: Baz.setSomeValue(nowaWartość) // wyzwalanie obserwatorów itp... O ile mogę powiedzieć, odpowiednikiem trwałych struktur danych jest coś takiego: Foo = extend( Foo, { Bar:{ Baz:{ jakaśWartość: nowaWartość } } }); // przelicz z nową wartością Foo Jaki jest normalny wzorzec enkapsulacji komponentu, który zajmuje się `Baz`, aby nie musiał znać całej struktury?


title: Gdzie powinienem przechowywać i weryfikować pliki manipulowane przez aplikację

text: Pracuję nad małym skryptem Ruby do przenoszenia zrzutów ekranu, jednocześnie zmieniając ich nazwy w oparciu o określoną konwencję. Będę pisał testy, aby potwierdzić zachowanie. Ruby ma wiele konwencji dotyczących przechowywania plików (np. katalogi „spec” i „features” odpowiednio dla RSpec i Cucumber), ale nie znajduję najlepszych praktyk dotyczących przechowywania plików, które zostaną zastosowane w testach. To samo dotyczy miejsca docelowego dla ostatecznych kopii plików. Tak więc pytanie składa się z dwóch części: 1. Gdzie powinienem przechowywać pliki, których przypadki testowe będą używać jako źródłowe dane wejściowe. 2. Gdzie powinny być wysyłane testy, które wymagają zapisania plików wyjściowych.


title: Zdecyduj, dla której klasy punktów neuron da wynik 1

text: Mamy klasę punktów „czerwoną” i „zieloną”. Tworzymy neuron z dyskretną funkcją aktywacji binarnej. **Jak dobrać wagę, aby neuron zwracał 1 za `czerwone` punkty?** **Jak dobrać wagę, aby neuron zwracał 1 za `zielone` punkty?** Proszę o ogólną praktykę jak decydować o która "strona" NET będzie większa lub równa 0 -> jeśli mam rację. ![podaj tutaj opis obrazka](http://i.stack.imgur.com/UT1i3.png) NET >= 0 w kierunku czerwonych punktów ![wpisz tutaj opis obrazka](http://i.stack.imgur.com /12Kxe.png) NETTO >= 0 w kierunku zielonych punktów


title: Jak sprawić, by ludzie przestali zrzucać rowery?

text: Miałem za zadanie nauczyć inne zespoły nowej bazy kodu, ale ciągle napotykam problem. Ilekroć idę przejść przez kod z ludźmi, nie zajdziemy zbyt daleko, zanim całe ćwiczenie przekształci się w ćwiczenie zrzucania rowerów. Ponieważ nie znają bazy kodu, ale uważają, że muszą pomóc w jej ulepszeniu, skupiają się na rzeczach, które _mogą_ zrozumieć: „Dlaczego tak się nazywa?” (2 minuty na wyjaśnienie, dlaczego tak się nazywa, ponad 10 minut na dyskusję na temat nowa nazwa) „Dlaczego jest to abstrakcyjna klasa bazowa, a nie interfejs?” (2 minuty na wyjaśnienie, ponad 10 minut na debatę nad względnymi zaletami tej decyzji) ... i tak dalej. Nie zrozumcie mnie źle – dobre imiona i dobry, spójny projekt są ważne, ale nigdy nie dochodzimy do dyskusji o tym, co faktycznie _robi_ kod lub jak system jest zaprojektowany w jakikolwiek znaczący sposób. Zrobiłem kilka spotkań sędziowskich, aby wyciągnąć ludzi z tych stycznych, ale oni zniknęli - rozproszeni przez to, jaki kod będzie/powinien być, gdy ich trywialność zostanie naprawiona i przegapią większy obraz. Próbujemy więc ponownie później (lub z inną częścią bazy kodu), a ponieważ ludzie nie zdobyli wystarczającej wiedzy, aby przezwyciężyć efekt zrzucania rowerów, powtarza się. Próbowałem mniejszych grup, większych grup, kodu, tablic, diagramów visio, gigantycznych ścian tekstu, pozwalając im po prostu spierać się na śmierć, natychmiast skracając argumenty… niektóre pomagają bardziej niż inne, ale nic **nie działa** . Do diabła, próbowałem nawet poprosić innych ludzi z mojego zespołu o wyjaśnienie tego, ponieważ myślałem, że może być tak, że po prostu jestem kiepski w wyjaśnianiu różnych rzeczy. Jak więc edukować innych programistów na tyle, aby przestali skupiać się na błahostkach i mogli w znaczący sposób przyczynić się do projektu?


title: Czy są jacyś znani programiści z jednoosobową armią?

text: Ostatnio dowiaduję się coraz więcej programistów, którzy myślą, że gdyby pracowali sami, byliby szybsi i zapewnialiby lepszą jakość. Zwykle to uczucie łączy się z poczuciem, że najlepiej programują w swoim zespole i ostatecznie pomysł jest całkiem prawdopodobny. Jeśli radzą sobie najlepiej w programowaniu i pracują sami (a może nawet więcej), ostateczny rezultat byłby lepszym oprogramowaniem. Wiem, że ten pomysł zadziałałby tylko wtedy, gdybyś miał wystarczająco dużo pasji, aby pracować 24 godziny na dobę, 7 dni w tygodniu, na czas, z dużą dyscypliną. Więc po rozważeniu pomysłu i próbie dowiedzenia się trochę więcej, zastanawiam się, czy są sławni programiści z jednoosobową armią, którzy dostarczali jakiekolwiek (użyteczne) oprogramowanie w przeszłości?


title: Nauczanie programowania absolwenta bez CS

text: Mam kilku przyjaciół zainteresowanych programowaniem komputerowym, ale nie są to absolwenci CS; niektórzy z nich mają bardzo małe doświadczenie w dziedzinie testowania oprogramowania (niektórzy ukończyli podstawowe kursy testowania oprogramowania). Będę z nimi pracował nad nauczaniem podstaw programowania komputerowego oraz podstaw informatyki (struktury danych itp.). Moje pytania są; * Od jakiego języka powinienem zacząć? * Jakie są podstawowe tematy informatyki, które powinienem omówić przed przejściem do programowania komputerowego? * Jakie lektury mogę włączyć, aby temat był interesujący i nie przytłaczający? * Jeśli chcemy poświęcić na to rok, jakie tematy powinny być priorytetowe i muszą zostać omówione w 12 miesięcy? Znowu są to ludzie, którzy nie są informatykami i chcę, aby nauka była jak najbardziej przyjemna. Dziękuję wszystkim.


title: Jak należy obsługiwać dostęp do „lokalnego” API?

text: Obecnie piszę projekt, który używa kilku oddzielnych maszyn wirtualnych dla bazy danych, API i strony front-endowej (obecnie 1 z każdego). Piszę swój kod w PHP, a wszystkie te maszyny wirtualne działają w tej samej sieci wirtualnej. Jakie są najlepsze praktyki (jeśli istnieją) dotyczące dostępu do „lokalnego” interfejsu API, takiego jak ten w interfejsie? Czy nadal używałbyś czegoś takiego jak curl? Czy istnieją alternatywne rozwiązania?


title: Jak sprawić, by tworzenie modeli widoków w czasie wykonywania było mniej bolesne

text: **Przepraszam za długie pytanie, brzmi trochę jak rant, ale obiecuję, że tak nie jest! Poniżej podsumowałem moje pytania** W świecie MVC wszystko jest proste. Model ma stan, Widok _pokazuje_ Model, a Kontroler _robi_ rzeczy do/z Modelem (w zasadzie), kontroler nie ma stanu. Aby _zrobić_ rzeczy, Kontroler ma pewne zależności od usług internetowych, repozytorium, partii. Kiedy tworzysz instancję kontrolera, zależy ci na dostarczeniu tych zależności, nic więcej. Podczas wykonywania akcji (metody na kontrolerze) używasz tych zależności do pobierania lub aktualizowania modelu lub wywoływania innej usługi domeny. Jeśli istnieje jakiś kontekst, powiedzmy, że jakiś użytkownik chce zobaczyć szczegóły konkretnego elementu, przekazujesz identyfikator tego elementu jako parametr do akcji. Nigdzie w Kontrolerze nie ma odniesienia do jakiegokolwiek stanu. Na razie w porządku. Wpisz MVVM. Uwielbiam WPF, uwielbiam wiązanie danych. Uwielbiam frameworki, które sprawiają, że wiązanie danych z ViewModels jest jeszcze łatwiejsze (przy użyciu Caliburn Micro at.m.). Jednak czuję, że na tym świecie sprawy są mniej proste. Zróbmy ćwiczenie jeszcze raz: Model ma stan, View _pokazuje_ ViewModel, a ViewModel _robi_ rzeczy do/z Modelem (zasadniczo), ViewModel _ma_ stan! (dla wyjaśnienia; może deleguje wszystkie właściwości do jednego lub więcej modeli, ale oznacza to, że musi mieć odniesienie do modelu w taki czy inny sposób, co samo w sobie jest stanem) Aby _zrobić_ nadziewać, ViewModel ma pewne zależności od usług sieciowych, repozytorium, dużo. Kiedy tworzysz instancję ViewModel, zależy Ci na podaniu tych zależności, ale także stanu. A to, panie i panowie, irytuje mnie bezgranicznie. Ilekroć potrzebujesz utworzyć wystąpienie `ProductDetailsViewModel` z `ProductSearchViewModel` (z którego nazwałeś `ProductSearchWebService`, co z kolei zwróciło `IEnumerable<ProductDTO>`, wszyscy nadal są ze mną?), możesz zrobić jedną z tych rzeczy: * wywołaj `new ProductDetailsViewModel(productDTO, _shoppingCartWebService /* zależność */);`, to jest złe, wyobraź sobie jeszcze 3 zależności, oznacza to, że `ProductSearchViewModel` również musi przejąć te zależności. Bolesna jest też zmiana konstruktora. * call `_myInjectedProductDetailsViewModelFactory.Create().Initialize(productDTO);`, fabryka to tylko Func, są one łatwo generowane przez większość frameworków IoC. Myślę, że to źle, ponieważ metody Init są nieszczelną abstrakcją. Nie można również użyć słowa kluczowego readonly dla pól, które są ustawione w metodzie Init. Na pewno jest jeszcze kilka powodów. * wywołaj `_myInjectedProductDetailsViewModelAbstractFactory.Create(productDTO);` Więc... jest to wzorzec (fabryka abstrakcyjna), który jest zwykle zalecany dla tego typu problemów. Myślałem, że jest genialny, ponieważ zaspokaja moje pragnienie statycznego pisania, dopóki nie zacząłem go używać. Ilość kodu standardowego jest moim zdaniem za dużo (wiesz, poza śmiesznymi nazwami zmiennych, których używam). Dla każdego ViewModel, który wymaga parametrów runtime, otrzymasz dwa dodatkowe pliki (fabryczny interfejs i implementację) i musisz wpisać zależności inne niż runtime, takie jak 4 dodatkowe razy. I za każdym razem, gdy zmieniają się zależności, możesz to zmienić również w fabryce. Wydaje mi się, że nawet nie używam już kontenera DI. (Myślę, że Castle Windsor ma na to jakieś rozwiązanie [z własnymi wadami, popraw mnie, jeśli się mylę]). * zrób coś z anonimowymi typami lub słownikiem. Lubię moje statyczne pisanie. Więc tak. Mieszanie stanu i zachowania w ten sposób stwarza problem, który w MVC nie występuje. I czuję, że obecnie nie ma naprawdę odpowiedniego rozwiązania tego problemu. Teraz chciałbym zaobserwować kilka rzeczy: * Ludzie faktycznie używają MVVM. Więc albo nie dbają o wszystkie powyższe, albo mają jakieś genialne inne rozwiązanie. * Nie znalazłem szczegółowego przykładu MVVM z WPF. Na przykład przykładowy projekt NDDD ogromnie pomógł mi zrozumieć niektóre koncepcje DDD. Bardzo bym chciał, gdyby ktoś wskazał mi kierunek czegoś podobnego dla MVVM/WPF. * Może robię źle MVVM i powinienem odwrócić mój projekt do góry nogami. Może w ogóle nie powinienem mieć tego problemu. Cóż, wiem, że inni ludzie zadawali to samo pytanie, więc myślę, że nie tylko ja. **Podsumowując** * Czy mam rację, stwierdzając, że posiadanie ViewModel będącego punktem integracji zarówno dla stanu, jak i zachowania jest przyczyną pewnych trudności z wzorcem MVVM jako całością? * Czy użycie wzorca fabryki abstrakcyjnej jest jedynym/najlepszym sposobem tworzenia instancji ViewModel w sposób statyczny? * Czy jest dostępna implementacja dogłębnej referencji? * Czy posiadanie wielu ViewModel zarówno ze stanem, jak i zachowaniem jest zapachem projektowym?


title: Jak to byłoby możliwe, gdybym nie pracował dla nikogo, całą moją karierę programistyczną?

text: Załóżmy, że mam wystarczająco dużo pieniędzy, aby żyć przez 3 miesiące. Czy nie byłoby możliwe _tylko_ freelancer całej mojej kariery programistycznej, po dostatecznej nauce języka i pomocy w projektach open source? A może klienci chcieliby zobaczyć doświadczenie zawodowe. Mówię głównie o rozwoju Objective-C, więc publikowałem aplikacje, aby zarabiać. czy to możliwe?


title: Jakie są konsekwencje dla bezpieczeństwa uruchamiania niezaufanego kodu na moim serwerze?

text: Chciałbym skonfigurować aplikację, która pozwoli użytkownikom wysyłać swój kod i wykonywać go na moim serwerze. Myśl o uruchamianiu niezaufanego kodu przyprawia mnie o dreszcze, więc próbuję stworzyć wyczerpującą listę zagrożeń bezpieczeństwa, którymi należy się zająć. Zakładam, że powinienem usunąć pewne funkcje wykonywanego języka, takie jak dostęp do plików lub (być może) sieć. Natykam się też na terminy takie jak „sandboxing” czy „chroot”. Wiem, co one oznaczają, ale jak właściwie ich używać? W skrócie: jakimi zagrożeniami bezpieczeństwa powinienem się zająć, zanim umożliwię użytkownikom uruchomienie ich kodu na moim komputerze i jak to zrobić?


title: Jakie czynniki mogą sprawić, że dołączenie w połowie projektu zakończy się sukcesem?

text: Nie jest niczym niezwykłym w IT, że programiści są dodawani do istniejącego projektu gdzieś w środku lub bliżej końca. Niestety widziałem, że ludzie szybko się rozczarowali i odchodzą z pracy. Czy jest więc jakiś problem? Jeśli pojawi się problem, czy są jakieś badania lub czy istnieją najlepsze praktyki, aby uniknąć tego syndromu łączenia się w połowie projektu? Czy to powszechne w przemyśle?


title: W którym momencie programowanie staje się przydatną umiejętnością?

text: Jest to prawdopodobnie bardzo trudne pytanie, ze względu na jego subiektywność, ale nawet niejasne przypuszczenie mogłoby mi pomóc: Teraz, gdy Khan Academy zaczyna oferować wykłady z informatyki, zaczyna mnie drapać, żeby ponownie nauczyć się programowania. Być może jestem trochę bardziej techniczny niż przeciętny użytkownik komputera, używając Ubuntu jako mojego systemu operacyjnego, LaTeX-a do pisania i znam kilka małych sztuczek, takich jak wyrażenia regularne lub wyszukiwanie logiczne w Google. Jednak po moich poprzednich próbach nauki programowania zdałem sobie sprawę, że nie mam do tego naturalnych zdolności i nie wydaje mi się, aby ten proces sprawiał mi przyjemność. Ale jestem prawie pewien, że podstawowa biegłość w programowaniu może okazać się dla mnie bardzo korzystna z punktu widzenia kariery; Często dostaję też pomysły na małe skrypty, których nie mogę zrealizować. Moje pytanie brzmi: Załóżmy, że uczysz się programowania średnio 1 godzinę dziennie. W którym momencie staniesz się wystarczająco dobry, aby programowanie można było wykorzystać do automatyzacji zadań i faktycznie zaoszczędzić czas? Czy uważasz, że warto zająć się programowaniem, jeśli nigdy nie masz ambicji, aby zrobić z niego karierę, a nawet hobby, ale używać go wyłącznie do celów użytkowych?


Czy można wziąć plik binarny skompilowany dla architektury ARMv7 i przekonwertować go na ARMv6? Czy są jakieś narzędzia, które mogą to zrobić?


title: Porady dotyczące utworzenia zespołu dyżurnego

text: Prowadzę duży zespół programistów (około 35 programistów). Zajmujemy się przede wszystkim tworzeniem stron internetowych w wielu witrynach. Historycznie wiedza o zespołach była dość silosowa. Jeśli pracowałeś w Witrynie A, będziesz wiedział, jak rozwiązać ten problem, ale nie będziesz zbyt pomocny w Witrynie B. Mamy również kilka problemów przekrojowych, tj. wspólne komponenty używane między witrynami, które wymagają specjalistycznej wiedzy do rozwiązywania problemów. Mając to wszystko na uwadze, staram się zrozumieć najlepszy sposób na ustawienie zespołu dyżurnego. Byłby to zespół programistów, którzy od czasu do czasu mogliby zająć się nagłymi problemami poza godzinami pracy (powiedzmy jeden telefon co 2 tygodnie). Mogą być wymagane do wdrożenia poprawek awaryjnych. Część mnie mówi, że nie możemy mieć dużego zespołu dyżurnego z płytką wiedzą, zamiast tego potrzebujemy mniejszego zespołu z głęboką wiedzą, który może oczekiwać częstszego dyżuru i wynagradzania jako takiego. Czy ktoś ma jakieś sugestie oparte na doświadczeniu, jak skonfigurować ten zespół? Z góry dziękuję.


title: Której implementacji Common Lisp użyć?

text: Wydaje się, że istnieje natychmiastowy problem z rozpoczęciem programowania w Common Lisp: wybór implementacji. Co należy wziąć pod uwagę i jaką wagę powinien mieć przy rozważaniu wdrożenia CL? Czy powinien być zgodny ze standardem ANSI? Czy powinien być wspierany przez SLIME? Czy w niektórych implementacjach brakuje dobrych bibliotek, dokumentacji itp.?


title: Dlaczego to pole statyczne jest zawsze inicjowane zbyt gorliwie?

text: Patrzę na ten znakomity artykuł Jona Skeeta. Jon Skeet podczas wykonywania kodu demo mówi, że możemy spodziewać się trzech różnych zachowań. Cytując ten artykuł: > Środowisko wykonawcze może zdecydować o uruchomieniu inicjatora typu podczas ładowania zestawu > na początek... Albo może uruchomi go, gdy metoda statyczna jest pierwsza > uruchom... Lub nawet poczekaj, aż pole zostanie pierwszy dostęp... Kiedy wypróbuję to (na frameworku 4), zawsze otrzymuję pierwszy wynik. Oznacza to, że metoda statyczna jest inicjowana przed załadowaniem zestawu. Próbowałem uruchomić to wiele razy i uzyskać ten sam wynik. (Próbowałem obu wersji debugowania i wydania) Dlaczego tak jest? Czy czegoś mi brakuje?


title: W jaki sposób mogę przetestować kod JavaScript pokazu slajdów?

text: Mam pokaz slajdów obrazów (i linków) na stronie. Te obrazy są częścią odpowiedzi JSON na żądanie wysłane po załadowaniu strony. Pokaz slajdów jest ustawiony na odtwarzanie w odstępie 2 sekund. Pokaz slajdów może być wstrzymany, odtwarzany i wszystkie inne elementy sterujące, które miałby normalny pokaz slajdów. Jako twórca Railsów zaproponowałem ogórek, ale ludzie z zespołu javascript nie są zadowoleni z ruby. Zobaczyłem ogórek do bibliotek JavaScript, wciąż w fazie eksperymentalnej. Sprawdziłem jaśmin i powiązane samouczki, ale wszystko, co mogłem z nich uzyskać, to jak mogę przeprowadzić wewnętrzne testy funkcjonalne, takie jak walidacja kart kredytowych itp. - które, jak sądzę, można by faktycznie obsłużyć w testach jednostkowych? (Wkręć badania, które zrobiłem i) Jak powinienem przejść do testowania tego i podobnych komponentów?


title: Jak mogę zajrzeć do repozytorium GitHub i dowiedzieć się, jaką wersję kodu pobrać?

text: Jestem nowym użytkownikiem GitHub i nowym w świecie open source (pochodzącym z platformy .NET). Mam witrynę wiki mediów i chcę zainstalować rozszerzenie Google analytics: http://www.mediawiki.org/wiki/Extension:Google_Analytics_Integration Dokumentacja rozszerzenia mówi o pobraniu kodu z GitHub. W repozytorium GitHub znajdują się „recenzje”, które mówią o master i niektóre, które mówią o branchach. Zakładam, że chcę mistrza, a nie oddziału. Ale jak wybrać mastera do pobrania? Ponadto dokumentacja mówi, że niektóre zatwierdzenia zostaną oznaczone, ale wydaje się, że tak nie jest. Czy bez tagów/dokumentacji można łatwo sprawdzić, które zatwierdzenia są stabilne, a które nie? Chciałbym trochę ogólnej wiedzy o tym, jak podejść do repozytorium takiego projektu.


title: Czy Windows Workflow Foundation jest odpowiedni dla aplikacji asynchronicznych obciążających procesor?

text: Na jednej z konferencji DevDays prezenter powiedział, że Workflow Foundation jest nie tylko dla aplikacji, które wymagają trwałości, ale mogą ułatwić pisanie i konserwację kodu Async WCF i odpowiednią obsługę błędów. (spróbuj.. catch) * Zakładając, że to prawda, czy Workflow Foundation jest w stanie wykorzystać wszystkie procesory w systemie? (Async IO) * Jakie wskazówki dotyczące WF są potrzebne przed napisaniem aplikacji Async WCF obciążającej procesor CPU w ramach struktury WF? (tylko wskazówki, które są specyficzne dla Workflow Foundation)


title: Witryna Azure, która komunikuje się z usługami stron trzecich

text: Mam witrynę, która indeksuje dane z wielu usług stron trzecich, gdy użytkownik przegląda stronę internetową. Może to być naprawdę powolne, ponieważ trafiłem na serwer innej firmy i przetworzyłem zwrócone dane przed wyświetleniem ich użytkownikowi. Hostuję witrynę na platformie Azure (tryb współdzielony). Myślę o poprawie mojej realizacji. Oto, o czym myślę... Uruchom usługę, która przeszukuje dane z usług stron trzecich, przetwarzaj je, a następnie przechowuj w bazie danych. kiedy użytkownik przegląda moją witrynę, moja witryna pobiera dane z bazy danych i wyświetla je użytkownikowi. Ale powyższe rozwiązanie nie jest dla mnie jasne. Czy powinienem mieć normalną usługę czy usługę wcf? Jeśli usługa wcf, to czy witryna powinna komunikować się z bazą danych lub usługą wcf (która może uzyskać dostęp do danych z bazy danych)? Jeśli jest to normalna usługa, jak mogę wdrożyć na platformie Azure?


title: Czy ktoś jeszcze uważa, że Scrum nie jest zwinny?

text: Jestem wielkim fanem zwinnego rozwoju i kilka lat temu wykorzystałem XP w bardzo udanym projekcie. Podobało mi się w nim wszystko, iteracyjne podejście do programowania, pisanie kodu wokół testu, programowanie w parach, posiadanie klienta na miejscu, aby go uruchomić. To było bardzo produktywne środowisko pracy i nigdy nie czułem się pod presją. Jednak kilka ostatnich miejsc, w których pracowałem, używa/używało Scrum. Wiem, że w dzisiejszych czasach jest to dziecko plakatowe dla zwinnego rozwoju, ale nie jestem w 100% przekonany, że jest to zwinne. Poniżej znajdują się dwa główne powody, dla których nie wydaje mi się to zwinne. **Kierownicy projektów uwielbiają to** Kierownicy projektów, którzy z natury mają obsesję na punkcie terminów, wydają się kochać Scrum. Z mojego doświadczenia wynika, że używają Backlogu Sprintu jako środka do śledzenia wymagań czasowych i rejestrowania, ile czasu spędzili na danym zadaniu. Zamiast korzystać z tablicy, wszyscy używają arkusza Excela, który każdy programista musi wypełnić z religijnym szacunkiem. Moim zdaniem jest to zdecydowanie za dużo dokumentacji/śledzenia czasu dla zwinnego procesu. Po co miałbym marnować czas na oszacowanie, jak długo zajmie mi zadanie, skoro mogę po prostu zająć się samym zadaniem. Albo podobnie, dlaczego miałbym marnować czas na dokumentowanie, ile czasu zajęło zadanie, kiedy mogę przejść do następnego. **Spotkania stand-up** Spotkania standupowe w poprzednim miejscu, w którym pracowałem, były koszmarem. Codziennie musieliśmy tłumaczyć, co zrobiliśmy wczoraj i co będziemy robić tego dnia. Gdybyśmy podeszli do naszego "oszacowania" czasu na zadanie, kierownik projektu wywołałby smród i odniósłby się do Backlogu Sprintu jako sposobu na pokazanie, że jesteś niekompetentny za nieprzestrzeganie harmonogramu. Teraz rozumiem potrzebę komunikacji, ale na pewno ton codziennych spotkań powinien być beztroski i skupiać się na dzieleniu się wiedzą. Nie sądzę, że powinno to zmienić się w farsę w stylu pracy domowej. Również z pewnością najważniejszy punkt w zwinności polega na tym, że linie czasu się zmieniają, nie powinny być osadzone w kamieniu. **Wniosek** Ideą Agile jest ulepszanie oprogramowania poprzez ułatwianie życia programistom. Dlatego moim zdaniem każdy proces zwinny używany przez zespół powinien być prowadzony przez programistów. Nie sądzę, aby kierownik projektu używał procesu, który nazwali „agile” do śledzenia projektu, nie ma nic wspólnego z rozwojem zwinnym. Myśli ktoś?


title: Czy istnieje licencja, która pozwala ludziom zobaczyć mój kod, ale go nie używać?

text: Buduję darmowe gry w javascript, a mój kod jest łatwo dostępny, patrząc na html strony internetowej. Naprawdę nie przeszkadza mi to, że ludzie patrzą na mój kod (z ciekawości lub by się czegoś nauczyć). Ale nie chcę, aby ktokolwiek używał mojego kodu do tworzenia własnych gier lub kradł grafikę, którą zrobiłem. Mając na uwadze ten cel, jakiej licencji na oprogramowanie powinienem użyć? Dziękuję!


title: Jak obsługiwać wartości pieniężne w PHP i MySql?

text: Odziedziczyłem ogromny stos starszego kodu napisanego w PHP na bazie bazy danych MySQL. Zauważyłem, że aplikacja używa „podwójnych” do przechowywania i manipulacji danymi. Teraz natknąłem się na liczne posty mówiące o tym, że „podwójne” nie nadają się do operacji pieniężnych z powodu błędów zaokrąglania. Jednak jeszcze nie natknąłem się na kompletne rozwiązanie, w jaki sposób wartości pieniężne powinny być obsługiwane w kodzie PHP i przechowywane w bazie danych MySQL. Czy istnieje najlepsza praktyka, jeśli chodzi o obsługę pieniędzy konkretnie w PHP? To czego szukam to: 1. Jak powinny być przechowywane dane w bazie danych? typ kolumny? rozmiar? 2. Jak dane powinny być obsługiwane przy normalnym dodawaniu, odejmowaniu. mnożenie czy dzielenie? 3. Kiedy należy zaokrąglić wartości? Ile zaokrągleń jest dopuszczalne, jeśli w ogóle? 4. Czy jest różnica między obsługą dużych wartości pieniężnych a niskimi? **Uwaga:** **BARDZO** uproszczony przykładowy kod pokazujący, jak mogę napotkać wartości pieniężne w życiu codziennym (dla uproszczenia zignorowano różne kwestie bezpieczeństwa. Oczywiście w prawdziwym życiu nigdy nie użyłbym mojego kodu w ten sposób): $ a= $_POST['cena_w_dolarach']; //-->(np.: 25.06) zostanie odczytany jako łańcuch, czy powinien być rzutowany na double? $b= $_POST['discount_rate'];//-->(np. 0,35) wartość zawsze będzie mniejsza niż 1 $valueToBeStored= $a * $b; //--> wszelkie podpowiedzi są mile widziane $valueFromDatabase= $row['price']; //--> kolumna ceny w bazie danych może być podwójna, dziesiętna itp. $priceToPrint=$valueFromDatabase * 0,25; //ponownie rzut potrzebny czy nie? Mam nadzieję, że użyjesz tego przykładowego kodu jako środka do wydobycia większej liczby przypadków użycia i oczywiście nie traktuj go dosłownie. **Pytanie bonusowe** Jeśli mam używać ORM, takiego jak Doctrine lub PROPEL, jak różne będzie użycie pieniędzy w moim kodzie.


title: Pakiety redystrybucyjne Microsoft Visual C++, wymagania dotyczące oprogramowania?

text: Podczas kompilacji z Visual Studio C++ zauważyłem, że potrzebujesz określonego Redist MSV C++, w zależności od wersji Visual Studio, z którą kompilujesz. Wymagany pakiet redystrybucyjny jest niezbędny na komputerach bez niego. W przeciwnym razie bez redists brakuje błędów MSVCPxxx.dll są monitowane. Czy istnieje sposób na ominięcie konieczności redystrybucji? A może istnieje sposób na spakowanie tego w tworzonym programie, czy to DLL, wykonywalny itp.?


title: Czy to brzydki zapach kodu, jeśli metoda prywatna wywołuje publiczną?

text: Czy wywołanie metody publicznej w prywatnej metodzie tej samej instancji obiektu to zły zapach kodu?


title: Jaki jest najlepszy sposób na zrównoleglanie mojego problemu za pomocą Java API?

text: Mam kłopoty, ponieważ chcę przyspieszyć swój kod używając `wątków`, `rozgałęzienia w join` lub jakiegokolwiek rodzaju `parallel`. Zrobiłem kod używając `fork in join`, ale zauważyłem, że moja `arraylist` nie podaje poprawnych wartości. Nie wiem czy to moja realizacja. Ale chcę usunąć wszystkie wiadomości bez załączników, później rozdzielone według nadawcy. Jeden z przykładów mojej klasy używającej `fork in join`, ale szukam jakichkolwiek sugestii. usługa pakietowa.forkinjoin; import java.io.IOException; import java.util.ArrayList; import java.util.Lista; import java.util.concurrent.RecursiveAction; importować javax.mail.Wiadomość; import javax.mail.MessagingException; usługa importu.EmailUtil; public class ForkSortMessagesBySender extends RecursiveAction { private static final long serialVersionUID = -1092415796824205832L; private List<Message> listMessagesWithAttachment; private List<Wiadomość> listMessages; prywatny nadawca String; public ForkSortMessagesBySender(List<Message> listMessagesWithAttachment, List<Message> listMessages, String sender) { this.listMessagesWithAttachment = listMessagesWithAttachment; this.listMessages = listMessages; this.nadawca = nadawca; } @Override protected void compute() { List<RecursiveAction> akcje = new ArrayList<>(); if (this.listMessagesWithAttachment.size() <= Runtime.getRuntime().availableProcessors()) { try { this.separateMessages(); } catch (MessagingException | IOException e) { e.printStackTrace(); } } else { int end = this.listMessagesWithAttachment.size() / 2; actions.add(new ForkSortMessagesBySender(this.listMessagesWithAttachment.subList(0, end), this.listMessages, this.sender)); end += this.listMessages.size() % 2 == 0 ? 0:1; actions.add(new ForkSortMessagesBySender(this.listMessagesWithAttachment.subList(end, this.listMessagesWithAttachment.size()), this.listMessages, this.sender)); invokeAll(akcje); } } private void SeparateMessages() zgłasza MessagingException, IOException { for (wiadomość wiadomości : this.listMessagesWithAttachment) { if (EmailUtil.getSender(message).equals(this.sender)) { this.listMessages.add(message); } } } }


title: Czy klasy zagnieżdżone są niedoceniane?

text: Nie próbuję powiedzieć, że wiem coś, czego inni nie wiedzą, ale coraz więcej projektów rozwiązywałem za pomocą klas zagnieżdżonych, więc jestem ciekaw, aby wyczuć akceptację używania tego pozornie rzadko używanego mechanizm projektowania. To prowadzi mnie do pytania: czy idę z natury złą ścieżką z powodów, które odkryję, kiedy wrócą, aby mnie ugryźć, czy może zagnieżdżone klasy są czymś, co jest niedoceniane? Oto dwa przykłady, do których właśnie ich użyłem: https://gist.github.com/3975581 \- pierwszy pomógł mi utrzymać ściśle powiązane ze sobą elementy hierarchiczne, drugi pozwolił mi dać dostęp do chronionych członków pracownikom...


title: Walidacja zestawu danych a weryfikacja ASP.NET MVC

text: Mam ogólne pytanie, gdzie umieścić walidację. Mam asp.net mvc, który pobiera/ustawia dane z/do DataSet. Obecnie pola w formularzu są weryfikowane przez sam formularz (np. pod kątem nieprawidłowej długości, zakresu itp.). Czy przeniesienie tych kontroli weryfikacyjnych do DataSet jest dobrym czy lepszym pomysłem? Minusem jest to, że muszę wyzwalać wywołania aktualizacji do DataSet, aby uzyskać kolumnę z błędami. Korzystając z formularzy, mogę wyłapać błąd wcześniej. A może powinienem użyć walidacji dla obu z nich? Za dodatkową uwagę — możliwe, że będę ponownie używać tego zestawu zestawu danych z innym projektem (usługą WCF?). I jeśli to możliwe, chciałbym ponownie użyć tego samego kodu weryfikacyjnego.


title: Zasoby dotyczące pisania wydajnego kodu C dla mikrokontrolerów?

text: Potrzebna jest tu poważna pomoc. Uwielbiam programować. Czytałem ostatnio mnóstwo książek (takich jak K&R) i artykułów/forów online w języku C. Nawet próbowałem zajrzeć do kodu Linuksa (chociaż zgubiłem się, od czego zacząć, ale zaglądanie do małych bibliotek pomogło?). Zacząłem jako programista Java, a w Javie jest to dość proste i suche; Jeśli program staje się zbyt duży, podziel go na klasy, a następnie na funkcje. Wytyczne takie jak, aby kod był czytelny i dodawał komentarze. Korzystaj z ukrywania informacji i technik OOP. Niektóre z nich nadal dotyczą C. Programowałem teraz w C i do tej pory uzyskuję dostęp do programów, które działają w taki czy inny sposób. Wiele osób mówi o wydajności/wydajności, algorytmie/projektowaniu, optymalizacji i konserwacji. Niektórzy kładą nacisk na jedno bardziej niż na drugie, ale nieprofesjonalni inżynierowie oprogramowania często słyszą coś w stylu: Programowanie jądra Linuksa nie przyjmie po prostu żadnego kodu. Moje pytanie brzmi: planuję napisać kod dla 8-bitowego mikrokontrolera **bez marnowania zasobów**. Wiedz, że pochodzę z javy, więc rzeczy nie są już takie same ... zasoby/książki/linki/wskazówki będą bardzo mile widziane. Wydajność i rozmiar mają teraz znaczenie. Zasoby/Sztuczki dotyczące wydajnego (w ramach najlepszych praktyk) kodu C dla 8-bitowych mikrokontrolerów? Ważną rolę odgrywa również montaż inline, który jest zbliżony do standardu mikrokontrolerów. Ale czy istnieje ogólna zasada dotycząca efektywności, która odnosi się do wszystkich? Na przykład: `register unsigned int nazwa_zmiennej;` jest zawsze preferowana zamiast `char`. Lub użyj `uint8_t `, jeśli nie potrzebujesz dużych liczb. EDIT: Dziękuję bardzo za wszystkie odpowiedzi i sugestie. Doceniam wysiłek wszystkich w dzieleniu się wiedzą.


title: Po co używać innych baz liczbowych podczas programowania?

text: Moi współpracownicy i ja zastanawialiśmy się, dlaczego ktoś robi wszystko, aby zaprogramować liczby o podstawie innej niż 10. Zasugerowałem, że może można zoptymalizować dłuższe równania, umieszczając zmienne we właściwej podstawie pracy z (na przykład, jeśli masz tylko zestawy 5 czegoś bez reszt, możesz użyć podstawy 5), ale nie jestem pewien, czy to prawda. jakieś pomysły?


title: Problemy z przekroczeniem limitu czasu odpowiedzi połączenia klient-serwer

text: Użytkownik tworzy folder w kliencie, a w kodzie po stronie klienta trafiam na API do serwera, aby uczynić to trwałym dla tego użytkownika. Ale w niektórych przypadkach mój serwer jest tak zajęty, że upłynie limit czasu żądania. Serwer wykonał moje żądanie, ale upłynął limit czasu przed wysłaniem odpowiedzi do klienta. Ustawiony limit czasu w kliencie wynosi 10 sekund. W tym momencie klient myśli, że serwer nie wykonał swojego żądania (utworzenia folderu) i kończy wysyłanie go ponownie. Teraz mam 2 foldery na serwerze, ale użytkownik utworzył tylko 1 folder w kliencie. Jak temu zapobiec? Jednym ze sposobów rozwiązania tego problemu jest użycie unikalnego identyfikatora przy każdym nowym żądaniu. Tak więc identyfikator działa jako rozróżnienie między starymi a nowymi żądaniami od klienta. Ale to prowadzi do przechowywania tych identyfikatorów na moim serwerze i wyszukiwania dla każdego wywołania API, którego chcę uniknąć. Innym sposobem jest zwiększenie limitu czasu. Ale nie chcę tego zmieniać od 10 sekund. Coś mi mówi, że są lepsze rozwiązania. Zamieściłem to pytanie w stackoverflow, ale myślę, że lepiej pasuje tutaj. **AKTUALIZACJA:** jeszcze bardziej sprecyzuję mój problem. Klientem jest przeglądarka internetowa, a na serwerze działa nginx+django+mysql (standardowy stos). Użytkownik tworzy folder w przeglądarce internetowej. W rezultacie muszę trafić na API serwera. Wywołanie API odpowiada z powrotem, dzięki czemu klient wie, że wywołanie API zakończyło się sukcesem. To normalny scenariusz. Czasami jednak serwer pomyślnie kończy żądanie API, ale połączenie po stronie klienta (przeglądarki internetowej) przekracza limit czasu, zanim serwer może odpowiedzieć. Klient nie ma w tym momencie pojęcia. Użytkownik uważa, że żądanie nie powiodło się i klika ponownie. Tym razem się udało, ale kiedy interfejs się odświeży, widzi 2 foldery. Chcę naprawić tę sytuację.


title: Nauka PHP dla programisty ASP.NET

text: Zajmuję się głównie programowaniem na ASP.NET MVC i czasami na ASP.NET WebForms. Ale kiedy trafiam na stronę PHP, zawsze tak myślę; > Czy powinienem nauczyć się PHP? Zakładając, że odpowiedź brzmi tak, od czego zacząć i od czego powinienem się udać?


title: Klucz sprzętowy USB do ochrony oprogramowania Java z pakietem SDK, który jest wieloplatformowy „na serio”. Czy to istnieje?

text: Chciałbym zapytać, czy ktoś wie o sprzętowym kluczu USB do ochrony oprogramowania, który oferuje bardzo kompletną gotową obsługę API dla wieloplatformowych wdrożeń Java. Jego SDK powinien dostarczać jar (tylko jedną, a nie jedną inną bibliotekę na system operacyjny i bity) gotowy do dodania do projektu jako biblioteka. * Słój powinien zawierać wszystkie natywne elementy dla różnych systemów operacyjnych i bitów * Z punktu widzenia aplikacji należy kontynuować pisanie (wywołania api) raz i uruchamiać wszędzie, bez konieczności dbania o to, gdzie użytkownik końcowy będzie uruchamiał oprogramowanie * Dostarczony jar powinien sam załadować odpowiednią bibliotekę natywną **Czy coś takiego istnieje?** Z tym, co do tej pory próbowałem, masz różne API i skompilowane biblioteki dla win32, linux32, win64, linux64, itp. ( lub nawet musisz sam skompilować coś na docelowej maszynie), ale hej, robimy tutaj Javę, nie wiemy (i nie obchodzi nas) gdzie program będzie działał! I nie możemy oczekiwać, że użytkownik końcowy będzie inżynierem oprogramowania, modyfikuje (i psuje!) serwer linuxowy, biblioteki linków, bałagan w gcc, zaśmiecał system plików itp. Ogólnie rzecz biorąc, obsługa Javy (w przejrzystym moda międzyplatformowa) jest dość zła w przypadku zestawów SDK, które do tej pory oceniałem (np. KeyLok i SecuTech UniKey). Kupiłem nawet (brak dostępnego bezpłatnego zestawu ewaluacyjnego) pakiety SDK i klucze sprzętowe SecureMetric (powinny być „taaakie” proste do zintegrowania – zgodnie z materiałami marketingowymi :\ ) i były najgorsze w historii: SecureDongle X nie ma obsługi 64-bitowej, a SecureDongle SD jest w ogóle nie wieloplatformowy. Więc ** czy ktoś tam przeszedł przez to i znalazł najlepszy klucz USB bezpieczeństwa Java do wdrożeń międzyplatformowych? ** Uwaga: oprogramowanie jest niewielkie i ma wysoką wartość; aplikacja jest offline (intranet bez dostępu do Internetu), więc nie ma alternatywy aktywacji online i tym podobnych. \-- EDYCJA Wypróbowałem klucze sprzętowe HASP (kiedyś nazywane „Aladdin”) i dodałem je do listy „nie-nie”: tutaj też nie ma gotowych (po wyjęciu z pudełka) ) wsparcie: m.in. end-linux-user musi ręcznie umieścić bibliotekę .so (konkretny plik dla odpowiedniej bitowości) we właściwym miejscu w swoim systemie plików i wyeksportować env. odpowiednio zmienne. \-- EDYCJA 2 Naprawdę nie rozumiem całej negatywności i wszystkich negatywnych głosów: czy to jest temat **tabu**? Czy tak trudno zrozumieć, że niezależny programista musi codziennie wkładać jedzenie na stół, aby wyżywić swoją rodzinę i zapłacić rachunki pod koniec miesiąca? Proszę nie mówić o „dodawaniu wartości” jako dostawcy, ponieważ byłoby to nie na temat. Co więcej, nie mam bezpośredniego kontaktu z klientami końcowymi, ale istnieje pośredniczący podmiot odsprzedający: to ten podmiot chcę zapobiec sprzedaży kopii oprogramowania bez dzielenia się przychodami. \-- EDIT 3 Chciałbym podkreślić, że pytanie szuka odpowiedzi **technicznej**, a nie o opinie dotyczące modeli biznesowych, filozoficzne lukubracje na temat pojęcia wartości, rzetelności resellerów itp. I nie mogę zmienić sprzedawcy, ponieważ nie jest to oprogramowanie typu "ogólnego przeznaczenia", ale bardzo pionowe i (z jakichś powodów nie warto tutaj wyjaśniać) _muszę_ je przejrzeć. Muszę tylko zapobiec scenariuszowi _ „sprzedaliśmy 2 egzemplarze, oto Twój udział [bwahaha sprzedaliśmy 10]”_.


title: Prezenter luźnego sprzężenia do obejrzenia w MVP

text: Pracujemy tutaj w sklepie Java, a nasza aplikacja internetowa wykorzystuje implementację wzorca architektonicznego MVP. Nasz menedżer wywodzi się ze świata .NET, gdzie miał kontakt ze wzorcem projektowym MVVM. Nasz menedżer opowiada się za zmianami w naszej implementacji MVP, w tym, aby prezenterzy byli oddzieleni (lub luźno powiązani, w zależności od twojej interpretacji) z jego widokami za pomocą wzorca projektowego Observer, zgodnie z tradycją MVVM. Jestem bardziej zdania, że Prezenter i Widok współpracują ze sobą, aby osiągnąć wspólny cel i jako takie powinny być połączone. Wśród argumentów podnoszonych na poparcie zmiany jest możliwość testowania jednostkowego Prezenterów. Jeśli prezenterzy widzą tylko widoki jako obserwatorzy, argument idzie, wtedy można je łatwiej testować jednostkowo. Ale prezenterzy silnie powiązani ze swoimi poglądami niekoniecznie są trudni do przetestowania. Jeśli View używa paradygmatu Humble View, można go wyśmiewać. I wreszcie, testowalność powinna być symptomem dobrego projektu, a nie motorem projektu. Innym argumentem używanym przez mojego przełożonego na poparcie warstwowania widoków i prezenterów jest rzekoma dojrzałość MVVM. W związku z tym powinniśmy postępować zgodnie z naukami MVVM i dostosować się do jego implementacji MVP. Popraw mnie, jeśli się mylę, ale MVVM narzuca (sztuczne) warstwy widoków i prezenterów, aby ułatwić powiązania danych w kontrolkach. Czy możesz nam pomóc zobaczyć tutaj światło? Dlaczego mielibyśmy używać modelu odsprzęganego i płacić za to cenę? Nie widzę korzyści. Brzytwa Ockhama mówi, że potrzebuję argumentów, aby użyć rozdzielania, a testowanie nie wydaje się być jednym z nich. * * * **Wyjaśnienie** : To, czego naprawdę szukam w tym pytaniu, to argumenty, które mogą przechylić szalę na korzyść prezentera, który nie zna swojego poglądu i kręci wydarzenia w eterze lub na korzyść prezenter, który wie o swoich widokach poprzez bardziej bezpośrednie sprzężenie, takie jak skromny interfejs widoku lub bezpośrednio do klasy. Zwróć uwagę, że prezenterzy mogą z łatwością wyświetlać wiele widoków zarówno z luźnym, jak i ciasnym połączeniem. Różnica polega na interfejsie, z którym komunikuje się prezenter: przy luźnym połączeniu prezenter komunikuje się z klasami słuchaczy (lub przedstawicielem magistrali zdarzeń), podczas gdy przy ścisłym połączeniu prezenter komunikuje się z interfejsem widoku.


title: Jaki jest najlepszy sposób na oszacowanie punktów historii w scrumie?

text: Podoba mi się sposób, w jaki planowanie pokera działa na początku każdego projektu, pozwalając ci na porównywanie i omawianie ze sobą szczegółów każdej historii. Jednym z problemów, które zauważyłem, jest to, że z biegiem czasu i w miarę zdobywania doświadczenia w problematycznej domenie masz tendencję do głosowania mniej punktów na każdą historię, tj. np. historia, która na początku projektu była warta 5 lub 8, teraz może być warta 3. W jaki sposób można uniknąć lub rozwiązać ten problem w najlepszy możliwy sposób? Czy istnieje lepszy sposób na oszacowanie? Czy historie powinny zawsze pozostać takie same, czy też liczba punktów historii spada w porządku?


title: Jak działają tłumacze języków programowania?

text: Jestem programistą i chcę się bawić z tłumaczeniem jednego języka na inny. Powiedz C# do Lua. Jestem ciekaw, jak działa tłumaczenie takich języków? Myślę, że istnieje jakaś standardowa metodologia, której być może mógłbym się przyjrzeć, czy jest to dość surowe?


title: Czy błędnym pomysłem będzie mieć <style> w <body>?

text:
W poniższym kodzie umieściłem wewnętrzny arkusz stylów z tagiem body, zamiast mieć w nagłówku. W przypadku aplikacji jednostronicowej rozważam zrobienie tego dla stylów, które mają zastosowanie tylko do tej strony, zamiast oddzielnego pliku pagespecific.css. Czy istnieje scenariusz, w którym ma to wadę, ponieważ nie umieszczam tego samego w sekcji nagłówka?
  Witaj


title: W jaki znaczący sposób Erlang zapobiega wyścigom w programowaniu współbieżnym?

text: Czytanie o współbieżności w Erlangu przypomina mi zestaw narzędzi współbieżności Akka. Oba zapewniają narzędzia do zapobiegania lub ograniczania warunków wyścigu. Ale możesz wysyłać linki do mutowalnych danych do innych procesów za pomocą zestawu narzędzi Akka, co nadal jest niebezpieczne. Uważam Akkę za użyteczne narzędzie, ale nie zapewnia ono _ochrony_ przed niesprawnym dostępem do obiektów i danych, co prowadzi do sytuacji wyścigu, impasu i/lub głodu. Nie uniemożliwia to pisania niebezpiecznego kodu w sposób, w jaki Java lub C# chroni przed pisaniem większości rodzajów wycieków pamięci, które można napisać w C++ (nadal można tworzyć wycieki pamięci w Javie, oszukując garbage collector, ale jest to mniej problemu niż konieczność pamiętania o zwolnieniu każdego przydzielonego bajtu). Czy Erlang gwarantuje pewien stopień poprawności, wydajności i odporności w programowaniu współbieżnym? Myślę, że systemy operacyjne zapewniają ochronę podczas dostępu do zasobów systemowych (zakładając, że twórcy sterowników dobrze wykonali swoją pracę). Bazy danych ACID zapewniają ochronę odczytów i aktualizacji. Wygląda więc na to, że jest to problem do rozwiązania. A może ogólne bezpieczne rozwiązanie wyeliminuje wzrost wydajności zapewniany przez współbieżność? Czy inne języki lub zestawy narzędzi zapewniają taki rodzaj równoczesnego bezpieczeństwa, jaki zapewnia (lub nie) Erlang? Jest to pytanie uzupełniające komentarz @Malfist dotyczący odpowiedzi @user1249 na pytanie Jaki język programowania generuje najmniej trudnych do znalezienia błędów?.


title: Separowanie podmiotów w warstwie logiki biznesowej

text: Zamierzam uruchomić projekt, który w `BLL` miałby coś w rodzaju: * Jumper * Map * Record Muszę je wszystkie śledzić, więc prawdopodobnie zrobię klasy, które je przechowują, np.: * JumperList * MapList * RecordList Przede wszystkim dobrą praktyką jest trzymanie wszystkich obiektów i czy dobrze jest je rozdzielać np.: `BLL.Entity` dla `Jumpera`, `Map`, `Record` i `BLL.List` dla `JumperList`, `MapList`, `RecordList` * * * OK, może napisałem to w mylący sposób. Chodziło mi o to, czy dobrze jest zrobić tak: BLL.Entity - Jumper - Map - Record BLL.List - JumperList - MapList - RecordList


title: Jak napisać dobrą mock do testów

text: Koduję w Pythonie i zaczynam korzystać z biblioteki Mock. Chociaż przeczytałem całą dokumentację, trudno mi zrozumieć coś, co sprawia, że jest to dobra próba. Na przykład, powiedzmy, że mam funkcję, która wykonuje żądanie HTTP: def fetch_url(url, method=urlfetch.GET, data=''): """Wyślij żądanie HTTP""" wynik = urlfetch.fetch(url =url, method=method, payload=data, headers={'Access-Control-Allow-Origin': '*'}) return result.content Jak wyglądałaby dobra makieta dla tej funkcji? Co więcej, co wtedy zostałoby przetestowane? Z mojego punktu widzenia, cechy dobrego testu to to, że test sprawdza: 1. Czy kod nie jest uszkodzony 2. Czy kod działa zgodnie z oczekiwaniami 3. Czy kod zwraca oczekiwany wynik, jeśli coś zwraca To powiedziawszy, co byłyby cechy dobrego makiety?


title: Czy odsprzęganie ma przewagę DRY w REST?

text: Zajmuję się tworzeniem interfejsu API REST, aby ujawnić większość funkcjonalności istniejącego interfejsu Java API. Oba interfejsy API są do użytku wewnętrznego w mojej organizacji; Nie muszę projektować do użytku zewnętrznego. Mam wpływ na oba API, ale wdrażam REST. Interfejs Java API będzie nadal używany w aplikacjach lokalnych (nie jest „wycofywany”), ale interfejs API REST będzie używany do znaczących nowych prac rozwojowych. Niektóre z klas Java API to po prostu dane (fasola z właściwościami, gettery, settery). I przynajmniej niektóre z nich mają sens, aby przesłać (w jakiejś formie) przez REST API jako dane (które zostaną przeniesione do XML lub JSON). Na przykład klasa, która przechowuje informacje o serwerze. Mam do czynienia z następującym wyborem dla tych klas danych: Czy... 1. ujawnić oryginalną klasę Java (lub podklasę) bezpośrednio w REST API, czy 2. utworzyć nową klasę transferu danych (wzorzec DTO) specjalnie dla REST API? Tak czy inaczej będę miał klasy transferu danych REST; pytanie brzmi, czy dodawać adnotacje do oryginałów, czy tworzyć nowe (które mogą być blisko kopiami oryginałów). Mogą być inne możliwości, ale skupię się głównie na tych dwóch. Argumenty za #1: * DRY (nie powtarzaj się) * Szybsze wdrożenie * Łatwiejsze uaktualnienie REST API Argumenty za #2: * Co jeśli REST API musi być wersjonowane oddzielnie od Java API? (Jest to dość prawdopodobne). * Co zrobić, jeśli zaszły znaczące zmiany w klasach danych Java, takie jak usunięcie właściwości, dodanie zachowania lub zmiany w hierarchii klas? (Jest to również dość prawdopodobne). Konkluzja jest taka, że wydaje się, że jest to kompromis między DRY (nr 1) a oddzieleniem (nr 2). Skłaniam się ku rozpoczęciu od nr 1, a następnie, jeśli pojawią się problemy, przechodzę do nr 2 później, stosując się do zwinnej wytycznej, aby nie budować tego, czego nie możesz udowodnić, że potrzebujesz. Czy to zły pomysł; czy powinienem zacząć od #2, jeśli uważam, że i tak mogę tam skończyć? Czy na moich listach brakuje głównych argumentów/konsekwencji?


title: Dlaczego nowoczesne biblioteki nie używają OOP

text: Jestem programistą C++ na poziomie początkującym, ale dość dobrze rozumiem koncepcje języka. Kiedy zacząłem uczyć się zewnętrznych bibliotek C++, takich jak SDL, OpenGL (może też czegoś innego), ku mojemu wielkiemu zdziwieniu odkryłem, że w ogóle nie używają one koncepcji C++. Na przykład ani SDL, ani OpenGL nie używają klas ani wyjątków, preferując funkcje i kody błędów. W OpenGL widziałem funkcje takie jak glVertex2f, które pobierają 2 zmienne zmiennoprzecinkowe jako dane wejściowe i prawdopodobnie byłyby lepsze jako szablon. Co więcej, te biblioteki czasami używają makr, podczas gdy wydaje się, że powszechnie uważa się, że używanie makr jest złe. W sumie wydają się być napisane bardziej w stylu C niż w stylu C++. Ale są to zupełnie inne, niekompatybilne języki, prawda? Pytanie brzmi: dlaczego współczesne biblioteki nie wykorzystują zalet języka, w którym są pisane?


title: Czy powinienem utworzyć warstwę N w ASP.NET MVC?

text: Obecnie tworzę bardzo małą stronę internetową, około 20 do 30 widoków, 10 kontrolerów. Wiem, że MVC jest tylko wzorcem projektowym i powinien być tylko górną warstwą prezentacji. Obecnie jestem na etapie rozwoju, kiedy zaczynasz kwestionować siebie i to, co robisz. Wydaje się, że ta mała witryna nie „potrzebuje” architektury N-warstwowej, ponieważ jest na to za mała. Ale na dłuższą metę może warto. Czy warto poświęcić czas na migrację do N-Tier? CZY istnieje pewien poziom abstrakcji, kiedy **należy** migrować do n-warstw? Czy jest jakiś magiczny moment, kiedy projekt staje się zbyt duży? A może należy to zrobić bezpośrednio na początku rozwoju?


title: Jak Strassen wymyślił swoją metodę mnożenia macierzy?

text: Nie lada gratką jest dla nas słynny algorytm mnożenia macierzy Strassena, który redukuje złożoność czasową z tradycyjnego O(n^3) do O(n^2,8). Ale ze wszystkich materiałów, przez które przeszłam, nawet książki Cormena i Stevena Skienny, wyraźnie nie są one opisane, jak myślał o tym Strassen. Jakie jest uzasadnienie algorytmu mnożenia macierzy Strassena? Czy to szczęśliwy wypadek, czy jest w tym coś głębszego?


title: Czy można używać klucza innego niż podstawowy jako identyfikatora w zasobie rails?

text: Przygotowuję się do skonfigurowania zasobu dla nowych wywołań interfejsu API do mojej aplikacji rails. Planuję wywołać urządzenia zasobów, tj. zasoby :devices Będzie to reprezentować urządzenia mobilne z systemem Android Wiem, że uzyskam trasy takie jak GET devices/:id W większości przypadków :id będzie liczbą całkowitą reprezentującą klucz podstawowy, a w kontroler, którego użylibyśmy :id jako taki: GET devices/1 @device = Device.find(params[:id]) W tym przypadku chciałbym użyć :id jako google_cloud_messaging_reg_id Więc chciałbym mieć takie żądania: GET devices/some_long_gcm_id , a następnie w kontrolerze , wystarczy użyć `params[:id]`, aby wyszukać urządzenie według identyfikatora rejestracji gcm. Wydaje się to bardziej naturalne, ponieważ urządzenie będzie wiedziało, że to identyfikator gcm, a nie identyfikator rails integer. Czy są jakieś powody, dla których powinienem tego unikać? **\----------------------------------------------- ----------------------** **UPDATE:** **_Moim pierwszym zmartwieniem było to, że widząc trasę (przez trasy rake) /devices/: id lub patrzenie na kontroler i widzenie params[:id] byłoby mylące, ponieważ większość zakładałaby, że :id jest kluczem podstawowym liczby całkowitej._** **Po zastanowieniu się nad tym i przeczytaniu poniższej odpowiedzi Idana Arye, moje obecne myślenie jest tworzenie tras jak pokazano poniżej. Dzięki temu uzyskam trasy (przez rake route), które wyglądają tak:** GET /api/v1/android_devices/:gcm_reg_key(.:format) **co moim zdaniem wyjaśnia, że :gcm_reg_key może nie być kluczem podstawowym liczba całkowita**. **A w kontrolerze parametr będzie miał postać** params[:gcm_reg_key] **Ponownie, myślę, że to nieco wyjaśnia, że parametr może nie być kluczem podstawowym w postaci liczby całkowitej (konwencją byłoby params[:id])** **Wszelkie inne przemyślenia i sugestie są mile widziane.** Dopasuj '/android_devices/:gcm_reg_key' do: 'android_devices#show' , przez: :get, jako: 'android_device' dopasuj '/android_devices/:gcm_reg_key' do: „android_devices#update”, za pośrednictwem: :post, jako: „android_device_create” dopasuj „/android_devices/:gcm_reg_key”, do: „android_devices#update”, za pośrednictwem: :patch, jako: „android_device_modify” dopasuj „/key:gcm_devices” ', do: 'android_devices#destroy', przez: :delete, as: 'android_device_destroy' zasoby :android_devices , only: [:create, :index]


title: „Domyślne podejście” przy tworzeniu klasy od podstaw: pobierający do wszystkiego czy ograniczony dostęp?

text: Do niedawna zawsze miałem gettery (czasem setery, ale nie zawsze) dla wszystkich dziedzin w mojej klasie. To było moje „domyślne”: bardzo automatyczne i nigdy w to nie wątpiłem. Jednak ostatnio niektóre dyskusje na tej stronie uświadomiły mi, że może nie jest to najlepsze podejście. Kiedy tworzysz klasę, często nie wiesz dokładnie, w jaki sposób będzie ona używana w przyszłości przez inne klasy. W tym sensie dobrze jest mieć gettery i settery dla wszystkich pól w klasie. Aby inne klasy mogły z niego korzystać w przyszłości w dowolny sposób. Umożliwienie tej elastyczności nie wymaga nadmiernej inżynierii niczego, a jedynie zapewnienie getterów. Jednak niektórzy twierdzą, że lepiej ograniczyć dostęp do klasy i zezwalać na dostęp tylko do niektórych pól, podczas gdy inne pola pozostają całkowicie prywatne. **Jakie jest Twoje „domyślne” podejście podczas tworzenia klasy od podstaw?** Czy tworzysz gettery dla wszystkich pól? A może zawsze wybierasz selektywnie, które pola udostępniać za pomocą gettera, a które całkowicie prywatne?


title: Różnicowanie architektur Standalone i Client-Server

text: Zastanawiałem się, jaka jest dokładna różnica między klientem-serwerem a samodzielną aplikacją, szczególnie w następującym scenariuszu. Na przykład załóżmy, że na komputerze PC działa aplikacja formularzy wygranych. Aby DBMS, SQL Server był również zainstalowany na tym samym komputerze, na którym znajduje się baza danych. Teraz jest to wyraźnie samodzielna konfiguracja. Teraz, jeśli wprowadzimy inny komputer i połączymy go z pierwszym komputerem przez sieć lokalną i chcemy uruchomić aplikację również na tym nowym komputerze, ale będzie ona korzystać z tej samej bazy danych, która jest na pierwszym komputerze. Czy ta aplikacja jest uważana za samodzielną aplikację, czy za grubego klienta - serwer? EDYCJA: Aplikacja komunikuje się z serwerem SQL w celu uzyskania dostępu do danych, a przetwarzanie będzie odbywać się lokalnie. Serwer SQL obsługuje dane, a także istnieje kilka procedur przechowywanych i widoków.


title: Czy warto programować aplikacje .net w C++?

text: Z tego, co rozumiem, C# jest językiem defacto podczas kodowania aplikacji .NET. Czy zaleca się programowanie aplikacji .NET [niech to będzie ASP.NET, WinPhone 7, GUI itp.] w C++? Jakie są pułapki i wady, jeśli zdecydujemy się pójść tą ścieżką? Dzięki za udostępnienie.


title: Jak mogę grupować zatwierdzenia w systemie kontroli wersji, takim jak git

text: Zamiast jednej długiej, płaskiej historii zatwierdzeń, dlaczego nie ma hierarchii, więc na najwyższym poziomie możesz mieć żądania ściągnięcia, a następnie możesz zejść na niższy poziom i spojrzeć na zatwierdzenia w tym PR. Zdaję sobie sprawę, że PR są specyficzne dla github, ale masz pomysł. Mam na myśli na przykład grupowanie kilku zatwierdzeń jako funkcji lub naprawy błędów. Z pewnością ułatwiłoby to poruszanie się po historii zmian. Jestem pewien, że istnieje oczywista odpowiedź na to pytanie, ale nie mogę jej znaleźć.


title: Co lepiej zwrócić z usługi DataService: stan czy wyjątki?

text: Mam aplikację MVVM z DataServices (przy użyciu mvvmlight). Teraz używam go jak var answer = await myDataService.PullList(categoryId); if (answer.Status == Ok) ObservableListOfItems.ReplaceWith(answer.Collection); // Pokaż wyniki if (answer.Status == ConnectionLost) // Obsłuż stan utraconego połączenia, pokaż okno msg lub coś w tym rodzaju if (answer.Status == ParsingError) // Obsłuż problem z analizą, gdzie asynchroniczne Zadanie<MyAnswer> PullList(int id) { // Tylko otoczka wokół HttpWebRequest, zwraca String.Empty, jeśli coś się stało var resultString = await NetworkManager.GetAsync(UrlGenerator.GenerateCategoryRequest(id)); if (String.IsNullOrEmpty(resultString)) return new MyAnswer {Status = ConnectionLost); try { var parsedResult = JsonConvert.DeserializeObject<PocoProducts>(); return new MojaOdpowiedź {Status = Ok, Kolekcja = parsedResult.List); } catch (wyjątek) { return new MyAnswer {Status = ParsingError; } } i public class MojaOdpowiedź() { public List<Items> {get; set;} public EnumStatuses Status {get; set;} } public enum EnumStatuses { Ok = 0, ConnectionLost, ParsingError } Więc jestem ciekaw, czy właśnie wymyśliłem wyjątki, prawda? PS: napisałem kod właśnie tutaj, literówki są możliwe, ale ogólna idea powinna być jasna


title: Projekt do migracji do architektury Multitenant

text: Jesteśmy w trakcie przeprojektowywania naszego kodu produktu w taki sposób, aby wspierać wielodostępność. Obecnie wdrożenie jest takie, że wdrożenie jednego produktu obsługuje tylko jednego klienta. W ten sposób dane aplikacji odpowiadają tylko jednemu klientowi. Dane te (które są globalne w stosunku do aplikacji) mają postać tablic haszujących, list i bazy danych. Wiele wątków korzysta z tych danych. Cały kod jest napisany w języku C. Teraz, ponieważ chcemy przeprowadzić migrację do architektury wielodostępnej, kod aplikacji musiałby przechowywać dane dla wielu klientów. Ponieważ dane przechowywane w aplikacji powinny być segregowane w stosunku do klientów, chcę dowiedzieć się, jaka architektura najlepiej odpowiadałaby tym wymaganiom. Zastanawiam się nad przyjęciem tutaj pewnych koncepcji OOP, ponieważ mogę również używać C++. Ale nie jestem pewien, jak dobry byłby ten pomysł. Modułowość to główna zaleta, jaką OOP oferuje w stosunku do C, a zatem myślenie w ten sposób. Ale jednocześnie będzie miał ogromny wpływ na obecne wdrożenie wymagające wielu zmian. Dlatego też minimalizacja tego jest również ważna. Jakie byłoby najlepsze podejście do osiągnięcia wszystkich wyżej wymienionych celów? Czy jest na to inny sposób?


title: Synchronizuj SQLite używając tylko HTTP

text: Obecnie mam na swoim serwerze bazę danych SQLite, która jest potrzebna aplikacji na Androida, którą aktualnie rozwijam. Pobieram DB na urządzenie z Androidem za pomocą HTTP za każdym razem, gdy zmienia się zawartość. Czy ktoś ma jakieś sugestie, jak zrobić to bardziej efektywnie. tj. gdy baza danych staje się duża, nie chcę, aby użytkownik Androida musiał ponownie pobierać całą bazę danych tylko dlatego, że dodano jeden rekord.


title: C++ jest łatwe, gdy znasz PHP

text: Byłem w pracy w zeszłym tygodniu i jeden z naszych "głównych programistów" (który powiedział, że programował już C++, ale mu nie wierzę) mówił o C++ i o tym, jak nasz zespół programistów, którzy znają tylko PHP, nie będzie miał trudności czas na naukę C++. Moją pierwszą reakcją był czysty szok, a potem zaśmiałem się z jego komentarza. Posłał mi złe spojrzenie i zapytałem, czy mówi poważnie. Ja osobiście programuję dużo C i C++ głównie dla projektów szkolnych i konkursów kodowania. Nie sądzę, że to w ogóle przypomina PHP. Zapytałem go, dlaczego są takie same, a on nie mógł mi odpowiedzieć (w ogóle nie zna C++, o czym myślałem). Potem powiedziałem „OK, tak, obaj używają nawiasów klamrowych i mają instrukcje warunkowe. Ale C++ musisz się martwić o zarządzanie pamięcią i wszystkie łatwe w użyciu wbudowane funkcje w PHP, na przykład funkcje tablicowe, nie istnieją w C ++ .Właściwie musisz znać algorytmy, które za nimi stoją.” Istnieje kilka świetnych bibliotek C++ (STL, Boost), które ułatwią Ci życie, ale C++ jest jak PHP, daj spokój! Jeśli znasz już jeden język, ułatwi ci to naukę innego, ponieważ będziesz już dobry w logowaniu logicznym (jeśli to, to tam) lub pętlach, ale jest o wiele więcej w C++ niż w PHP. Tak jak musisz skompilować język i faktycznie musisz zdefiniować typ zmiennej, której używasz i wracasz z funkcji. Co myślisz? EDYCJA: Właściwie to, co powiedział, to „C ++ niewiele różni się od PHP”


title: Czy zdrowy rozsądek powinien być własnością programisty czy programu?

text: Projektuję i implementuję języki, od notacji obiektowych po języki znaczników. W wielu przypadkach rozważałem ograniczenia na rzecz zdrowego rozsądku (powszechna wiedza), jak w przypadku znaków kontrolnych w identyfikatorach. Przed zrobieniem tego należy wziąć pod uwagę dwie konsekwencje: * Wymaga dodatkowych obliczeń * Ogranicza swobodę. Jestem zainteresowany, aby dowiedzieć się, jak deweloperzy myślą o takich decyzjach. Jak być może wiesz, Microsoft C# jest bardzo otwarty, wręcz przeciwnie. Jeśli naprawdę chcesz poprzedzić liczbę całkowitą jako Long z 'l' zamiast 'L' i w ten sposób ryzykować, że inni programiści pomylą '1' i 'l', nie ma problemu. Jeśli chcesz nazwać zmienne w skrypcie innym niż łaciński, aby kontrastowały z łacińskimi słowami kluczowymi C#, nie ma problemu. Lub jeśli chcesz rozłożyć ciąg w wielu wierszach, a tym samym przerwać serię wcięć, nie ma problemu. Zapewnienie spójności z ograniczeniami jest tanie, co sprawia, że jest kuszące do wdrożenia. Ale w przypadku niedopuszczenia znaków niełacińskich (dotyczy drugiego przykładu), oznacza to dyskredytację Unicode, ponieważ nie wykorzystano by w pełni jego możliwości.


title: Uczelnie non-profit, które oferują studia licencjackie z informatyki online?

text: Istnieje wiele programów studiów magisterskich z informatyki oferowanych online przez renomowane organizacje. Jednak znalazłem bardzo niewiele programów studiów licencjackich oferowanych przez instytucje non-profit. Szukam dyplomu z informatyki, a także wszelkich programów z zakresu przedsiębiorczości/zarządzania lub handlu algorytmicznego. Do tej pory znalazłem tylko 2 pasujące programy: http://www.regis.edu/regis.asp?sctn=cpcis&p1=ap&p2=cs&p3=ol http://depaul.edu Wymagania: 100% online licencjackie nie- Opcje zysku: Bachelor of Science Bachelor of Arts Premie: przyspieszony uznany ABET opłacalny Aktualizacja: odpowiedziałem na moje pytanie listą. Jeśli ktoś zna program online, który łączy umiejętności w zakresie przedsiębiorczości (pozyskiwanie kapitału, zakładanie firmy) lub handel algorytmiczny z programem komputerowym, który byłby idealny… może jednak za dużo pytać


title: Jak zwinny proces radzi sobie z ORM?

text: To pytanie skłoniła do tego odpowiedź, gdzie cytuję, „agile + ORM na dużej, ciągle zmieniającej się bazie danych jest brutalny”. Jak więc zwinny proces może poradzić sobie z ciągle zmieniającą się bazą danych? Interesują mnie oba przypadki: 1. Gdzie projekt bazy danych ustabilizuje się, po pewnym czasie, aby zobaczyć, jak działa 2. Gdzie ciągle zmieniające się schematy danych wymagają częstej zmiany bazy danych Kilka pomysłów, które miałem, to: * Użyj NoSQL baza danych * Tworzenie tabel klucz/wartość dla różnych klas danych. Może to spowodować utworzenie większych tabel, ale może działać dobrze w przypadku danych, które nie są z natury relacyjne.


title: Właściwości zależności poza domeną WPF?

text: Czy istnieje bardziej ogólna koncepcja lub nazwa tego, co WPF nazywa "właściwościami zależności"? Wyobrażam sobie, że to nie jest WPF-izm i faktycznie inne biblioteki lub frameworki stosują podobne podejście? Jeśli tak, jakie są te inne przypadki i jakie są podobieństwa i różnice w porównaniu z właściwościami zależności firmy Microsoft? Jestem na skrzyżowaniu, w którym rozważam dodanie „właściwości zależności” do mojego własnego systemu typów i modelu obiektów (niezwiązanego z WPF), ponieważ konstrukcja wydaje się odpowiednia dla moich wymagań projektowych; jednak chcę rozważyć również to, co stworzyli inni, a nie tylko konkretną implementację WPF.


title: Korzystanie z relacyjnej bazy danych w porównaniu z obiektami JSON dla danych o zdarzeniach/aktywnościach

text: Pracuję nad projektem, w którym staram się zdecydować między użyciem standardowej relacyjnej bazy danych SQL lub obiektów JSON do przechowywania danych o zdarzeniu lub aktywności. Projekt będzie przechowywać dane dotyczące wielu typów zdarzeń, więc zdecydowałem się opisać tylko jeden typ zdarzenia dla tego pytania. Wydarzenie z muzyką na żywo (opisane w całości przy użyciu schematu JSON na dole tego pytania) to obiekt, który przechowuje dane, takie jak miejsce, w którym odbędzie się wydarzenie, godzina/data wydarzenia i koszt wydarzenia. Obiekt wydarzenia muzycznego na żywo ma zarówno jeden do jednego (wydarzenie--> nazwa, wydarzenie --> opis), jak i jeden do wielu (wydarzenie--> lokale, wydarzenie--> daty, wydarzenie--> typy biletów ) relacje. Ponadto obiekt zdarzenia może zawierać jeden lub więcej identyfikatorów wykonawcy, które łączą się z obiektem wykonawcy. Obiekt wykonawca przechowuje dane dotyczące muzyków, którzy występują na imprezie muzycznej na żywo. Użytkownicy będą pytać o dane zarówno proste („Znajdź mnie zdarzenia o nazwie „x”), jak i złożone („Znajdź mnie zdarzenia z gatunkiem muzycznym „x” i kosztem „y” w promieniu „z” od mojego bieżącego lokalizacji”) zapytania. Dane będą przekazywane przez użytkowników za pomocą formularza internetowego. Jak prawdopodobnie można powiedzieć na podstawie zdefiniowanego schematu JSON, pierwotnie zamierzałem używać obiektów JSON do przechowywania tych danych, ale słyszałem od niektórych osób, które mówią, że ponieważ moje dane są czysto relacyjne, powinienem trzymać się starszych metod. Byłbym wdzięczny za wszelkie przemyślenia na temat zalet i wad każdego podejścia, biorąc pod uwagę moje potrzeby. Jeśli potrzebujesz wyjaśnień, nie wahaj się zapytać. { "event": { "eventID":{ "type":"string" }, "eventType":{ "type":"array", "eventTypeItem":{ "type":"string" } }, "eventName ":{ "type":"string" }, "eventDescription":{ "type":"string" }, "eventVenueList":{ "type":"array", "eventVenueListID":{ "type":"integer " } }, "eventURL":{ "type":"string" }, "eventTwitter":{ "type":"string" }, "eventFB":{ "type":"string" }, "eventInstagram": { "type":"string" }, "eventEmail":{ "type":"string", "format":"email" }, "eventContactPerson":{ "type":"string" }, "eventDoorTime": { "type":"string", "format":"data-godzina" }, "eventPerformerIDList":{ "type":"array" , "liveMusicPerformerID":{ "type":"integer" } }, "eventSetList":{ "type":"array", "eventPerformerID":{ "type":"integer" }, "eventPerformerStartTime":{ "type ":"string", "format":"date-time" }, "eventPerformerEndTime":{ "type":"string", "format":"date-time" } }, "eventDateList": { "type" :"array", "eventDateItem": { "type":"string", "format":"date-time" } }, "eventDateStartTime": { "type":"string", "format":"date-time" }, "eventDateEndTime": { "type":"string", " format":"data-godzina" }, "eventTicket":{ "type":"array", "eventTicketType":{ "type":"string" }, "eventTicketLowPrice":{ "type":"number" } , "eventTicketHighPrice":{ "type":"number" }, "eventDatesAdvancePrice": { "type":"number" } } }, "performer": { "performerID": { "type":"integer" }, "performerType": { "type":"string" }, "performerName": { "type":"string" }, "performerAlternateName": { "type":"array", "performerAlterateNameItem":{ "type":"string" } }, "performerGenreList": { "type":"array", "performerGenreItem":{ "type":"string" } }, "performerURL": { "type":"string" } } }


title: Czy pliki obiektowe (C) utworzone za pomocą różnych kompilatorów są kompatybilne z plikami binarnymi?

text: Rozumiem, że kompilatory C++ nie są ze sobą kompatybilne. Jednak nie mogłem znaleźć nic na ten temat w szczególności dla C. Wiem, że standard C pozostawia dużo miejsca kompilatorom na implementację rzeczy, które uznają za stosowne: na przykład rozmiar i wyrównanie większości (wszystkich?) typów danych jest zdefiniowane przez implementację, z wyjątkiem pewnych minimalnych gwarancji. Dlatego dwa kompilatory (lub dwie wersje tego samego kompilatora) mogą nie zgadzać się w wielu szczegółach. Czy mam rację myśląc, że nie ma gwarancji, że dwa pliki obiektowe skompilowane przy użyciu różnych kompilatorów rzeczywiście będą się poprawnie łączyć? Na przykład rozmiar wskaźników może wynosić 32 bity w jednym pliku obiektowym i 64 bity w drugim. Ale jeśli tak, to dlaczego biblioteki C są czasami dystrybuowane w postaci prekompilowanej? Czy istnieje oczekiwanie, że użyję tego samego kompilatora, który użyli (np. gcc) lub jakiegoś standardu _de facto_ używanego w celu zapewnienia zgodności binarnej? A w jaki sposób inne języki z interfejsem języka obcego zapewniają, że rzeczy będą się prawidłowo układać podczas łączenia z plikami obiektowymi C?


title: Praca wydana w ramach creative common

text: Mam kilka pytań dotyczących Creative Commons. Czytam dokumentację na http://creativecommons.org/licenses/by/3.0/, ale nadal nie rozumiem tych licencji. Załóżmy, że istnieje firma, która wydała bazę danych lub ontologię o samochodach na zasadzie kreatywnej, powiedzmy na podstawie tej licencji. Załóżmy, że używam tej bazy danych do tworzenia interfejsu API REST i aplikacji mobilnej, która korzysta z tej bazy danych lub ontologii. Moje pytania to: 1. Czy powinienem zwolnić wszystkie moje kody źródłowe, tj. kody źródłowe API REST i kody źródłowe aplikacji mobilnej 2. Czy mogę ograniczyć wywołania API do serwisu WWW Z tego, co przeczytałem, tylko to rozumiem Powinienem opublikować wszystkie mody, które zrobiłem do aktualnej pracy, którą wziąłem na licencję


title: Jak nie podejmować ryzyka z nowymi współpracownikami?

text: Mój zespół będzie dodawał nowych członków zespołu, a mój menedżer nie chce podejmować żadnego ryzyka. Nie sądzę, że to duży problem, ale mój menedżer obawia się, że nowy programista sabotowałby i przypadkowo zniszczyłby fragmenty kodu lub dane, np. spowodować katastrofę danych. Mówię, że prawdopodobieństwo nie jest bardzo wysokie, ale wciąż słyszałem, że ważne jest ograniczenie praw do tego, co mogą zrobić nowi współpracownicy. Ale to nie jest praktyczne i nie możemy zjeść ciastka i go mieć — dodanie współpracownika do kontroli źródła daje nowemu współpracownikowi dostęp do całego kodu źródłowego, a nawet jeśli istniał sposób, aby wpuścić nowego członka tylko do części kod źródłowy (używamy bitbucket do kontroli kodu źródłowego) nadal nie działałby, ponieważ technicznie cały projekt jest zwykle potrzebny do jego zbudowania, więc nie można po prostu wziąć części kodu i oczekiwać, że zadziała i będzie w stanie budować niezależnie. Korzystamy z Google App Engine i nie jest dobrym pomysłem utworzenie klonu aplikacji, na którym mój współpracownik może budować. Powiedziałem, że nie jesteśmy pierwsi z tym problemem i rozwiązanie, które działa na kogoś innego, powinno działać dla nas, ale mój menedżer wydawał się nie być zadowolony z tej odpowiedzi. Czy możesz skomentować moją sytuację lub dać konkretną radę, co można zrobić z "problemem" / scenariuszem, ponieważ jest to tylko scenariusz, w którym nowo dodany programista przypadkowo usuwa cały datastore, ale nie chcemy, aby było to możliwe.


title: Jak mogę wykorzystać tworzenie kodu EF w Visual Studio 2013?

text: Używam wzorca repozytorium wraz z EF w pracy. Zastanawiam się, czy istnieje sposób, aby zrobić dodatek lub w jakiś sposób wykorzystać generację kodu EF klas tabeli podczas zapisywania modelu. Abym mógł również automatycznie wygenerować kod repozytorium. Chciałbym również sprawdzić, czy już istnieje, a jeśli tak, to nie regenerować (ponieważ skrót może mieć niestandardowy kod dla tego typu EF).


title: Jak nauczyć się API

text: Kiedy znajdę jakiś ciekawy projekt (np. na GitHubie) często chciałbym go użyć i wypróbować, aby zobaczyć, jak działa, ale jeśli nie ma dobrej dokumentacji lub jakiegoś samouczka, trudno jest wymyślić, jak go używać to. Więc moje pytanie brzmi: jak podchodzisz do takiej sytuacji? Jak dowiedzieć się, które klasy są ważne i jak je powiązać, aby móc z nich korzystać? Na co byś najpierw spojrzał? Radą, którą znalazłem, jest przyjrzenie się testom (jeśli są). Ale jeśli dla każdej klasy istnieją testy jednostkowe, skąd wiesz, na które z nich zwrócić uwagę w pierwszej kolejności?


title: Tworzenie funkcji zagnieżdżonych z powodów czysto estetycznych?

text: Zawsze zastanawiałem się, co inni programiści myślą o idei tworzenia funkcji czysto estetycznych. Powiedzmy, że mam funkcję, która przetwarza porcję danych: `Function ProcessBigData`. Powiedzmy, że potrzebuję kilku kroków procesu, ważnych tylko dla tych danych: „Krok 1”, „Krok 2”, „Krok 3”. Normalnym podejściem, które najczęściej widzę w kodzie źródłowym, jest pisanie komentarzy w następujący sposób: Funkcja ProcessBigData: # Wykonuje Krok1 Krok1.. Krok1.. #Wykonuje Krok2 Krok2.. Krok2. brak takiego stylu kodowania przez kolegów to: Function ProcessBigData: Function Step1: Step1.. Step1.. Function Step2: Step2.. Step2.. Step1() -> Step2() Martwię się głównie, czy są jakieś wady takiego stylu w **Javascript** i **Pythonie** Czy są jakieś alternatywy, których nie widzę?


title: Przechowywanie hierarchicznego szablonu w bazie danych

text: Jeśli ten tytuł jest niejednoznaczny, możesz go zmienić, nie wiem, jak to ująć w jedną linijkę. **Przykład:** Załóżmy, że masz szablon HTML, który zawiera kilka niestandardowych tagów, takich jak `<text_field />`. Teraz tworzymy stronę opartą na szablonie zawierającym więcej takich niestandardowych tagów. Gdy użytkownik chce edytować stronę, widzi pole tekstowe. może wprowadzać rzeczy i je zapisywać. To wygląda na dość łatwe do skonfigurowania. Albo masz coś w rodzaju tabeli template_positions, która przechowuje zawartość tych pól. **Sprawa:** mam teraz trochę blokady, aby wszystko było tak proste, jak to tylko możliwe. Załóżmy, że masz ten sam znacznik, który podano w twoim przykładzie, a dodatkowo znaczniki `<layout>` i `<repeat>`. Oto przykład ich użycia: <repeat> <layout name="image-left"> <image /> <text_field /> </layout> <layout name="image-right"> <text_field /> <image /> </layout> </repeat> Mamy teraz blok, który oczywiście można powtórzyć. Oznacza to: podczas tworzenia/edycji strony zawierającej taki blok szablonu, mogę wybrać pomiędzy układem `image-left` i `image-right`, który następnie jest wstawiany jako element treści (gdzie treść dla `<image />` i `<pole_tekstowe />` zostaje zapisane). A ponieważ jest to wewnątrz `<repeat>`, elementy treści z podanych układów mogą być wstawiane wielokrotnie. Jak to przechowujesz? Mówiąc najprościej, może to być przechowywane z tą samą konfiguracją, którą napisałem w powyższym przykładzie, wystarczy dodać parent_id lub coś podobnego, aby utrzymać hierarchię. ale myślę, że czegoś mi brakuje. Przynajmniej brakuje relacji między wstawionym elementem treści a punktem początkowym/punktem wstawienia. A co się stanie, gdy zaktualizuję plik szablonu? Czy muszę nadać każdemu niestandardowemu tagowi, który działa jako edytowalna część szablonu, identyfikator, który pasuje do identyfikatora w szablonie, aby je poprawnie zastąpić? A może możesz pomyśleć o czystym rozwiązaniu, które może być lepsze?


title: Dlaczego FRACTRAN Turing jest kompletny?

text: Próbowałem znaleźć wyjaśnienie w Google, ale większość linków mówi tylko takie rzeczy jak „FRACTRAN jest kompletny. Jako przykład spójrzmy na mnożenie”. Pamiętam, że widziałem post na forum xkcd, w którym napisano, że FRACTRAN pomógł autorowi zrozumieć kompletność Turinga. Szukam intuicyjnego wyjaśnienia, dlaczego ten esolang jest kompletny w Turingu, ponieważ nie jest to zbyt oczywiste, patrząc na mechanikę języka.


title: Algorytm tworzenia permutacji dla danego alfabetu na podstawie numeru sekwencyjnego

text: Chciałbym mieć funkcję, która utworzy słowo (zawsze to samo słowo) dla danego numeru sekwencyjnego na podstawie danego alfabetu. słowo(0, [a,b,c]) = słowo(1, [a,b,c]) = b słowo(2, [a,b,c]) = c słowo(3, [a,b ,c]) = słowo aa(4, [a,b,c]) = słowo ab(5, [a,b,c]) = słowo aa(6, [a,b,c]) = słowo ba( 7, [a,b,c]) = bb word(8, [a,b,c]) = bc word(9, [a,b,c]) = ca ... Udało mi się rekursywnie tworzyć wszystkie permutacje o danej długości, ale zaczynając od długości 5, jest już dość duża w pamięci.


title: Czy powinienem używać SignalR do synchronizowania i buforowania danych CRUD w aplikacji mobilnej?

text: Rozważam użycie SignalR do wysyłania danych do aplikacji mobilnej, ale muszę mieć sposób synchronizowania danych, gdy są zamknięte lub oczekujące na aktualizacje. Czy dobrym pomysłem jest użycie sygnalizatora Backbone.js <\--> do zarządzania aktualizacjami CRUD umieszczonymi w kolejce na serwerze? Jeśli nie, co to jest?


title: Lexing: Jeden token na operatora czy jeden uniwersalny token operatora?

text: Podczas leksykowania, jaki byłby najlepszy sposób na tokenizację operatorów? Czy wystarczy utworzyć token `BinaryOperator`, czy osobny token dla każdego operatora binarnego? Przykłady: `PlusOperator`, `MinusOperator`, `DivisionOperator` ... Mam tendencję do posiadania uniwersalnego, ale wychodząc z dokumentacji i źródeł projektu, które czytałem, zdecydowana większość lekserów używa jednego tokena na operator. Czy jest jakiś szczególny powód? Czy to w ogóle ma znaczenie? Czy to daje jakieś korzyści?


title: Rejestrowanie zdarzeń do celów raportowania

text: Czy istnieją jakieś wzorce projektowe lub najlepsze praktyki dotyczące rejestrowania zdarzeń do wykorzystania w systemach raportowania i BI. Na przykład w systemie, który zarządza zamówieniami ze strony internetowej, dobrze by było, gdyby pracownik obsługi klienta mógł wpisać numer zamówienia i zobaczyć, że zamówienie zostało złożone w określonym dniu, wysłane w określonym dniu i dostarczone w innym. Widzę 2 sposoby na obejście tego. Mam obiekt zamówienia, który ma pola: OrderDate DespatchDate DeliveryDate i wypełnij je, jeśli się zdarzyły, w przeciwnym razie będą puste LUB rejestrują jakieś zdarzenia, takie jak wiadomości, takie jak: Numer zamówienia - "12312312" - Zamówione w dniu '2014/01 /01' Numer zamówienia - "12312312" - Wysłane w dniu '2014/01/01' i dodać zapisz zdarzenia w bazie danych. Czy są na to jakieś wytyczne? Na przykład, jak działa historia elementów pracy w TFS? ![Historia TFS](http://i.stack.imgur.com/TlnCP.png)


title: Jak powinien działać zespół semi-agile podczas „fazy testowania” narzuconej przez kierownictwo

text: Nie szukam porady, jak powinien działać zwinny proces. Znam tę część. Jestem ciekaw, jak najlepiej przystosować ten proces do typowej dużej, dobrze ugruntowanej korporacji, która kocha swoje „procesy” i przeglądy bramek/paszportów. Dla tych, którzy mają szczęście nie wiedzieć, czym one są, rzeczy związane z bramami/paszportami są zasadniczo kamieniami milowymi przedstawianymi przez zespoły programistów kierownikom: Brama 0 – rozpoczęcie, identyfikowanie pozytywnych projektów NPV; Brama 1 – planowanie prac nad wydaniem, zaczyna się kodowanie, Brama 2 – faza ukończenia/testowania kodu, Brama 3.... Podczas gdy w naszym zespole staraliśmy się jak najlepiej wykorzystać agile (recenzje, iteracje, stałe komunikacja, robienie tego, co ma sens, ciągłe doskonalenie...), te bramy wychodzą z góry i nic nie możemy z nimi zrobić. Spośród wielu rzeczy, które mnie wkurzają, jedną z nich jest to, że środowisko korporacyjne, w którym się znajdujemy, nakłada pewne ograniczenia, które wydają się mieć negatywny wpływ na naszą pracę. Jednym z przykładów jest to, że podczas opracowywania skupiamy się tylko na nowych funkcjach i ignorujemy istniejące błędy, a nawet wprowadzamy nowe. Jest to niefortunne i jest sprzeczne z agile, ale nie mamy wyboru, ponieważ ukończenie kodu może nastąpić za 2 miesiące, ale faza "testowania/naprawiania błędów" może po tym trwać 6 miesięcy. Jesteśmy pod ciągłą presją „dokończenia pracy”, ale nacisk kładziony jest na uzupełnianie funkcji, a nie uzyskanie stabilnego produktu. Z tą częścią nauczyliśmy się żyć. Moje pytanie brzmi, jaką strategię (skuteczny tryb działania) znalazły inne zespoły/firmy dla fazy „testowania”, która następuje po kamieniu milowym „zakończenia kodu”? Podczas "nowego rozwoju" mamy iteracje i każda z nich zostaje wypełniona historiami i zadaniami. Jednak obecnie po „zakończeniu rozwoju” nie ma więcej iteracji ani planowania. Zamiast tego używamy wyłącznie bazy danych śledzenia błędów, aby monitorować, ile nowych błędów zostało znalezionych i jak szybko błędy są naprawiane. Osobiście nie widzę różnicy między dodaniem nowej funkcji interfejsu użytkownika a działaniem istniejącej funkcji interfejsu użytkownika. Dla mnie praca to praca. Zaproponowałem, żebyśmy kontynuowali iteracje jak zwykle i planowali prace tak jak wcześniej, ale ani kierownictwo, ani inni członkowie zespołu nie wydawali się być w to zaangażowani. Więc 1) czy jestem daleko i czy baza danych śledzenia błędów to najlepsze, co możemy zrobić? i 2) jeśli istnieje lepsze podejście, chciałbym je zbadać i być może zdobyć wystarczającą ilość amunicji, aby zabrać ją z powrotem do mojego szefa. Jednocześnie trochę się zgadzam, że często reagując na błędy nie mamy luksusu czekania do następnej iteracji. **\--- Niewielkie wyjaśnienie na podstawie kilku pierwszych odpowiedzi ---** Właśnie weszliśmy w fazę testów. W tej chwili nie ma więcej historii, nie ma więcej iteracji. Tylko baza danych śledzenia błędów. To mi nie pasuje, dlatego jestem ciekaw, co zrobiłyby w tej sytuacji inne zespoły. Również niektóre błędy są zdecydowanie wielkości średniej wielkości historii, podczas gdy naprawa innych zajęłaby 5 minut. Czy 5-minutowe błędy również powinny stać się historiami, gdybyśmy mieli kontynuować iteracje? Innym argumentem, który mieliśmy, jest to, że podczas „nowego rozwoju” wchodzimy w interakcję tylko z narzędziem do śledzenia Agile (Rally), ale podczas „testowania”, jeśli będziemy kontynuować iteracje, będziemy musieli zachować papierową ścieżkę zarówno w rajdzie, jak i w oprogramowanie do śledzenia błędów.


title: Co robią ptLineDist i relativeCCW?

text: Widziałem te metody w Line2D Java Docs, ale nie rozumiałem, co robią? Javadoc dla `ptLineDist` mówi: > Zwraca odległość od punktu do tej linii. Mierzona odległość jest > odległością między określonym punktem a najbliższym punktem na nieskończenie rozciągniętej linii zdefiniowanej przez ten `Line2D`. Jeśli określony punkt > przecina linię, ta metoda zwraca wartość 0.0 Doc dla `relativeCCW` mówi: > Zwraca wskaźnik położenia określonego punktu (PX, PY) względem segmentu linii od (X1, Y1) do ( X2, Y2). Wartość zwracana może być > 1, -1 lub 0 i wskazuje, w którym kierunku określona linia musi > obracać się wokół swojego pierwszego punktu końcowego (X1, Y1), aby wskazywać > w określonym punkcie (PX, PY) . > > Zwracana wartość 1 wskazuje, że segment linii musi obracać się w kierunku >, który przenosi dodatnią oś X w kierunku ujemnej osi Y. W > domyślnym układzie współrzędnych używanym przez Java 2D kierunek ten jest > przeciwny do ruchu wskazówek zegara. > > Zwracana wartość -1 wskazuje, że segment linii musi obracać się w kierunku >, który przenosi dodatnią oś X w kierunku dodatniej osi Y. W > domyślnym układzie współrzędnych kierunek ten jest zgodny z ruchem wskazówek zegara. > > Zwrócona wartość 0 wskazuje, że punkt leży dokładnie na odcinku linii >. Należy zauważyć, że wartość wskaźnika wynosząca 0 jest rzadka i nieprzydatna do > określania kolinearności z powodu problemów z zaokrąglaniem zmiennoprzecinkowym. > > Jeśli punkt jest współliniowy z segmentem linii, ale nie pomiędzy > punktami końcowymi, wartość wyniesie -1, jeśli punkt leży „poza (X1, Y1)” lub > 1, jeśli punkt leży „poza (X2, Y2)".


title: Jakiego wzorca projektowego mogę użyć do reprezentowania przetwarzania danych z dowolnego strumienia?

text: Czytam dane ze strumienia w buforowanych seriach bajtów (powiedzmy 1024 bajty na raz) i dokonuję porównania, sprawdzania lub przetwarzania, zanim zapiszę je z powrotem do tego samego typu strumienia. Obecnie dane pochodzą z pliku. Ale w przyszłości może pochodzić z innych źródeł (plik zmapowany do pamięci, TCP itp.) Czy istnieje wzorzec projektowy, który mogę zaimplementować? Czy to nie jest konieczne?


title: Czy muszę uzyskać pozwolenie na programowy dostęp do danych lub funkcji witryny?

text: Tworzę aplikację, która będzie programowo wysyłać żądania HTTP GET i POST do witryny i przetwarzać otrzymane dane. Czy chcąc wydać tę aplikację muszę uzyskać zgodę właścicieli witryny?


title: Zsynchronizowany dostęp do sieciowych urządzeń przemysłowych

text: Posiadam sprzęt przemysłowy sterowany oprogramowaniem. Oprogramowanie łączy się z nim za pomocą gniazd i cały czas utrzymuje połączenie przy życiu, jednocześnie co jakiś czas wysyłając polecenia do sprzętu. Teraz ten sprzęt jest reprezentowany przez klasę, która hermetyzuje wysyłanie i odbieranie danych. Następnie muszę zrobić UI, który pokaże stan sprzętu, niezależnie od oprogramowania sterującego (sterowanie odbywa się w innym wątku to samo rozwiązanie). Odświeżanie do interfejsu użytkownika musi odbywać się, powiedzmy, co sekundę, ale może się zdarzyć, że interfejs użytkownika chce czytać dane, a oprogramowanie sterujące chce pisać. Problem w tym, że sprzęt może odpowiadać od 50 ms do 1 sekundy, nie wiemy, a podczas odpowiedzi nikt nie może ingerować! Jak najlepiej zsynchronizować połączenia z klasą komunikacji sprzętu? Mogą istnieć co najmniej 2 rozwiązania: 1. Używając prostej instrukcji `lock(obj) {}` w C#, dla każdej metody we wspólnym. klasa 2. Wykorzystanie zdarzeń i kolejki wiadomości z koncepcją subskrybenta Choć pierwsza może być prosta, zakładam, że w moim przypadku jest to najgorsze rozwiązanie, ponieważ może wszystko zablokować. Drugi wydaje się bardziej OK, ale problem polega na tym, że na pewno będzie pewne opóźnienie w otrzymaniu wyników, jeśli wielu subskrybentów jest lub nie wiem, nie jestem pewien.


title: Praca z wieloma wersjami stron internetowych (Git)

text: Mam główny szablon, taki jak strona internetowa, którą stworzyłem, który pozwoli mi szybko rozwijać i tworzyć nowe strony internetowe na żądanie, kiedy ich potrzebuję, do mojego osobistego użytku. Zastanawiam się, jaka jest najlepsza praktyka w przypadku korzystania z repozytorium Git dla tej praktyki. Moim celem jest to, że jeśli na przykład chciałbym wprowadzić zmiany we wszystkich witrynach jednocześnie, mogę po prostu zmienić wzorzec (Repo) i zastosować tę zmianę do wszystkich innych wersji szablonu. Obecnie mój szablon jest hostowany prywatnie na BitBucket. Zakładam, że najlepiej jest git klonować repozytorium, a następnie wprowadzać zmiany w klonie. Następnie, kiedy wprowadzam zmiany w szablonie, wykonuję git pull na stronach. Czy jest to idealne podejście, czy są na to lepsze metody?